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 1vyKgW-0001wP-0Y for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 02:13:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vyKgT-002FXK-2w for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 02:12:58 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyKgT-002FXC-0c for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 02:12:58 +0000 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vyKgO-00000000hTY-3tFu for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 02:12:56 +0000 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-b935cd1c6f3so1344499066b.3 for ; Thu, 05 Mar 2026 18:12:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jeltef.nl; s=google; t=1772763171; x=1773367971; darn=lists.postgresql.org; h=in-reply-to:references:from:to:subject:message-id:date:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=X2kk3IpXHaOyAbMsi0zRy7/rOv+5jLyndnK5zMrAE0s=; b=E6l8DOS8VY5+QjoM7lQtBR5LeTcgp3lvWA2tJkVoM+TehRjv1jlbFFH18LlomCasuk LPffYljVF7N5av8ZbHhLdnXMiUvDLavLSUHqsEEfCNQ0mrodBAuR4HF8k7e/VsFyI7hK 0AeKej2Ws32rJePR6gVPnif32AQOYgFvLIqRHQUak3TaNLfw4BE0jrG/UTCiqgPtWbqO zd6SrkQMISOSru3mQewL9P1gv4/VrJ99F0sFM3p2yQdB0ld2kX6ulqQDN557wZq5aHDI L+FbvRxumi6dc3PzL4ElwxDkNEz12UspU0nl9H3B087ZHctEIvioSgaOA7O3JtF0cmxw L0sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772763171; x=1773367971; h=in-reply-to:references:from:to:subject:message-id:date:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=X2kk3IpXHaOyAbMsi0zRy7/rOv+5jLyndnK5zMrAE0s=; b=r6VFmnVUrlPl3f+ocrKaQ7J0eY05LSYlrrY2CnXFzBqZrqH5WD1lm6XCBg8w4+U57o T4Vd7NclNIfWlVG/vrUzInvSXtqNp1catQjdEg96SDO15FbQ6Y15LLkJ2Uiqni8BhlOH lFfLTle1mLFqw2kemnRxKFz0mWQoSsbVK4YEEAUPa/j7TvvKayWlByu8avO1OELLYLIK 9aHLqLb2pDs2/tVPyTZ1tip4+Wh4tyN41b6r5eJHXPAJYVymDX38MJjnoU3ODe3bVhEv 13QQeInpFZq5B1u7Tp8xsMS4OYpY1ZS1Ah4Pe/HovHnr8r89YwVGxjiUTwlMARv2egc0 IrJQ== X-Forwarded-Encrypted: i=1; AJvYcCUaolXsQYU2j/SyGXZldVvXLY2qsQ4KPMPxWLdk+cbHywItSrK6b8uMJt5FPQsYzhFrlT2b06oDArHcduKk@lists.postgresql.org X-Gm-Message-State: AOJu0Yyyj8hSckvYVaxuO3mpCbvCWRLAWT7pFgHlBjRGork3ppay7CQL VmYrY9XhX4PmX/IxGrTkL1wJZoEoaYEN5U61oSWtzthdqd1zCr70T4a1kzliIICygoE= X-Gm-Gg: ATEYQzz+XJojwQXG/wSq3tU7/z2H552n7+g/x5uk/SBDVCDlQ0Td+c1W6cxcmmxsX8r pawtrQdY1KJYjWktoMGfaTgIzOA4+mvQ0aXqpDp4SXazkbGpR9uZHx2l0FP22bXmL/WfUootpH9 Zq8SxSDYM4fF1zXgAKTfNAQmzBGRlXX3MYuP9LwagViDutjpPbi3XlR+YJzxK3rlsvWlTvtB1Ed 95tpH5fhqeXF+9ORk3QhmM+qqhKcBiOyEWdlFqaLfiOm9+ntfb8dMKE0AYSKShM4TTZpf85EljS NmzLiFJ4fHTDOk0mHu55kKEgBfM7sAkk3O7yIOVQsi8nspD0NaGUpwPIQTFkeofxnhBLkcWqsx2 Q6FstDp4YfRc/rWCJyEnf7HRrs1VZS0lr45wF+Ka5eW6xCqqP1Cr/mZ2Yi7JozAHCp8QGkvYX0O 7c0XcGOJF+935nBIEEO88CrWfGXS8YSlsuynUgfL/4dUfwrtvb X-Received: by 2002:a17:907:da8:b0:b94:14cd:db2e with SMTP id a640c23a62f3a-b942dbc8740mr18016166b.24.1772763170283; Thu, 05 Mar 2026 18:12:50 -0800 (PST) Received: from localhost (145-53-221-196.fixed.kpn.net. [145.53.221.196]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-661a3c66d6dsm47941a12.6.2026.03.05.18.12.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 05 Mar 2026 18:12:49 -0800 (PST) Content-Type: multipart/mixed; boundary=7117fd8d597378ce0b11f088c5be594be4d71d04a133b287a4b0d3d697c6 Mime-Version: 1.0 Date: Fri, 06 Mar 2026 03:12:49 +0100 Message-Id: Subject: Re: Don't use the deprecated and insecure PQcancel in our frontend tools anymore To: "Heikki Linnakangas" , "PostgreSQL Hackers" , "Alvaro Herrera" , "Jacob Champion" From: "Jelte Fennema-Nio" X-Mailer: aerc 0.20.1-31-gf6db7c329ce0 References: <88dfe280-ba29-4943-95b8-63abc9f3f771@iki.fi> In-Reply-To: <88dfe280-ba29-4943-95b8-63abc9f3f771@iki.fi> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --7117fd8d597378ce0b11f088c5be594be4d71d04a133b287a4b0d3d697c6 Content-Type: multipart/alternative; boundary=3f5cc096bcf058f80d13a3cec3bbeff746dc1d28360a27d2671c95f17725 --3f5cc096bcf058f80d13a3cec3bbeff746dc1d28360a27d2671c95f17725 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8; format=Flowed On Thu Mar 5, 2026 at 7:30 PM CET, Heikki Linnakangas wrote: > It took me a while to get the big picture of how this works. cancel.c=20 > could use some high-level comments explaining how to use the facility;=20 > it's a real mixed bag right now. Attached is a version with a bunch more comments. I agree this cancel logic is hard to understand without them. It took me quite a while to understand it myself. (I don't think the code got any harder to understand with these changes though, the exact same complexity was already there for Windows. But I agree more commends are good.) > The cancelConn mechanism is a global variable, which means that it can=20 > only be used with one connection in the process. That's OK with the=20 > current callers, but seems short-sighted. What if we wanted to use it=20 > for pgbench, for example, which uses multiple threads and connections?=20 > Or if we changed pg_dump to use multiple threads, like you also=20 > suggested as a possible follow-up. Allowing for multiple callers seems like scope-creep to me, and also hard to do in a generic way. I'd say IF we want that in a generic way I'd first want to see a version of that that solves the problem for pgdench/pg_dump, before generalizing it to cancel.c. > This is racy, if the cancellation thread doesn't immediately process the= =20 > wakeup. For example, because it's still busy processing a previous=20 > wakeup, because there's a network hiccup or something. By the time the=20 > cancellation thread runs, the main thread might already be running a=20 > different query than it was when the user hit CTRL-C. I now noted this in one of the new comments. I don't think there's a way around this race condition entirely. It's simply a limitation of our cancel protocol (because it's impossible to specify which query on a connection should be cancelled). In theory we could reduce the window for the race, by having all frontend tools use async connections and have the main thread wait for either the self-pipe or a cancel. That way it would be more similar to the previous signal code in behaviour. That's a much bigger lift though, i.e. all PQexec and PQgetResult calls would need to be modified. My proposed change doesn't require changing the callsites at all. In interactive usage of psql it seems pretty unlikely that people will hit this race condition. In non-interactive use, it doesn't matter because you just want Ctrl-C to cancel the application (whichever query it currently runs). So I'd say it's currently not worth the complexity to do the less racy option. --3f5cc096bcf058f80d13a3cec3bbeff746dc1d28360a27d2671c95f17725-- --7117fd8d597378ce0b11f088c5be594be4d71d04a133b287a4b0d3d697c6 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v4-0001-Move-Windows-pthread-compatibility-functions-to-s.patch Content-Type: text/x-patch; charset=utf-8; name=v4-0001-Move-Windows-pthread-compatibility-functions-to-s.patch RnJvbSA2ZDQzNmFkZThhZDdmNmZiNzc1MDI2NjllMTRiNzFkZGE0NjE4YjFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDEzIERlYyAyMDI1IDE4OjE4OjEzICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 NCAxLzNdIE1vdmUgV2luZG93cyBwdGhyZWFkIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIHRvCiBz cmMvcG9ydAoKVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBvZiBhIGZvbGxvdy11cCBjb21taXQgd2hp Y2ggd2lsbCBzdGFydCB0byB1c2UKdGhlc2UgZnVuY3Rpb25zIGluIG1vcmUgcGxhY2VzIHRoYW4g anVzdCBsaWJwcS4KLS0tCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgMSArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgIHwgMSAtCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZCAgICAgICAgICAgICAg IHwgMiArLQogc3JjL3BvcnQvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IDEgKwogc3JjL3tpbnRlcmZhY2VzL2xpYnBxID0+IHBvcnR9L3B0aHJlYWQtd2luMzIuYyB8IDQg KystLQogNSBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBy ZW5hbWUgc3JjL3tpbnRlcmZhY2VzL2xpYnBxID0+IHBvcnR9L3B0aHJlYWQtd2luMzIuYyAoOTQl KQoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBmNGUzYmQz MDdjOC4uOTI4NDE5Mzc3MWEgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1 cmUuYWMKQEAgLTE5NDksNiArMTk0OSw3IEBAIGlmIHRlc3QgIiRQT1JUTkFNRSIgPSAid2luMzIi OyB0aGVuCiAgIEFDX0xJQk9CSihkaXJtb2QpCiAgIEFDX0xJQk9CSihraWxsKQogICBBQ19MSUJP Qkoob3BlbikKKyAgQUNfTElCT0JKKHB0aHJlYWQtd2luMzIpCiAgIEFDX0xJQk9CSihzeXN0ZW0p CiAgIEFDX0xJQk9CSih3aW4zMmNvbW1vbikKICAgQUNfTElCT0JKKHdpbjMyZGxvcGVuKQpkaWZm IC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9NYWtlZmlsZQppbmRleCAwOTYzOTk1ZWVkNC4uZDZjZmIwMGQ2NTUgMTAwNjQ0Ci0tLSBh L3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L01ha2VmaWxlCkBAIC03NSw3ICs3NSw2IEBAIGVuZGlmCiAKIGlmZXEgKCQoUE9SVE5BTUUpLCB3 aW4zMikKIE9CSlMgKz0gXAotCXB0aHJlYWQtd2luMzIubyBcCiAJd2luMzIubwogZW5kaWYKIApk aWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbWVzb24uYnVpbGQgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9tZXNvbi5idWlsZAppbmRleCBiMGFlNzIxNjdhMS4uYjk0OTc4MGI4NWIgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCisrKyBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCkBAIC0yMCw3ICsyMCw3IEBAIGxpYnBxX3NvdXJjZXMg PSBmaWxlcygKIGxpYnBxX3NvX3NvdXJjZXMgPSBbXSAjIGZvciBzaGFyZWQgbGliLCBpbiBhZGRp dGlvbiB0byB0aGUgYWJvdmUKIAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCi0gIGxpYnBx X3NvdXJjZXMgKz0gZmlsZXMoJ3B0aHJlYWQtd2luMzIuYycsICd3aW4zMi5jJykKKyAgbGlicHFf c291cmNlcyArPSBmaWxlcygnd2luMzIuYycpCiAgIGxpYnBxX3NvX3NvdXJjZXMgKz0gcmNfbGli X2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCiAgICAgJy0tTkFNRScsICds aWJwcScsCiAgICAgJy0tRklMRURFU0MnLCAnUG9zdGdyZVNRTCBBY2Nlc3MgTGlicmFyeScsXSkK ZGlmZiAtLWdpdCBhL3NyYy9wb3J0L21lc29uLmJ1aWxkIGIvc3JjL3BvcnQvbWVzb24uYnVpbGQK aW5kZXggNzI5NmY4ZTNjMDMuLmEwZmMxM2E1ZTYyIDEwMDY0NAotLS0gYS9zcmMvcG9ydC9tZXNv bi5idWlsZAorKysgYi9zcmMvcG9ydC9tZXNvbi5idWlsZApAQCAtMzIsNiArMzIsNyBAQCBpZiBo b3N0X3N5c3RlbSA9PSAnd2luZG93cycKICAgICAnZGlybW9kLmMnLAogICAgICdraWxsLmMnLAog ICAgICdvcGVuLmMnLAorICAgICdwdGhyZWFkLXdpbjMyLmMnLAogICAgICdzeXN0ZW0uYycsCiAg ICAgJ3dpbjMyY29tbW9uLmMnLAogICAgICd3aW4zMmRsb3Blbi5jJywKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL3B0aHJlYWQtd2luMzIuYyBiL3NyYy9wb3J0L3B0aHJlYWQtd2lu MzIuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBzcmMvaW50ZXJmYWNlcy9saWJw cS9wdGhyZWFkLXdpbjMyLmMKcmVuYW1lIHRvIHNyYy9wb3J0L3B0aHJlYWQtd2luMzIuYwppbmRl eCBjZjY2Mjg0ZjAwNy4uNDhkNjhiNjkzYTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL3B0aHJlYWQtd2luMzIuYworKysgYi9zcmMvcG9ydC9wdGhyZWFkLXdpbjMyLmMKQEAgLTUs MTIgKzUsMTIgQEAKICoKICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMjYsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCiAqIElERU5USUZJQ0FUSU9OCi0qCXNyYy9pbnRlcmZhY2Vz L2xpYnBxL3B0aHJlYWQtd2luMzIuYworKglzcmMvcG9ydC9wdGhyZWFkLXdpbjMyLmMKICoKICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAqLwogCi0jaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNpbmNsdWRl ICJjLmgiCiAKICNpbmNsdWRlICJwdGhyZWFkLXdpbjMyLmgiCiAKCmJhc2UtY29tbWl0OiBmOTVk NzNlZDQzMzIwN2M0MzIzODAyZGM5NmU1MmYzZTU1NTNhODZjCi0tIAoyLjUzLjAKCg== --7117fd8d597378ce0b11f088c5be594be4d71d04a133b287a4b0d3d697c6 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v4-0002-Don-t-use-deprecated-and-insecure-PQcancel-psql-a.patch Content-Type: text/x-patch; charset=utf-8; name=v4-0002-Don-t-use-deprecated-and-insecure-PQcancel-psql-a.patch RnJvbSBiOGNmMzZmZDVjOWNmZDJiM2YwMjI4MTA1NjU0OTFlMTc4MDQyMWMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDEzIERlYyAyMDI1IDEzOjA1OjUwICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 NCAyLzNdIERvbid0IHVzZSBkZXByZWNhdGVkIGFuZCBpbnNlY3VyZSBQUWNhbmNlbCBwc3FsIGFu ZAogb3RoZXIgdG9vbHMgYW55bW9yZQoKQWxsIG9mIG91ciBmcm9udGVuZCB0b29scyB0aGF0IHVz ZWQgb3VyIGZlX3V0aWxzIHRvIGNhbmNlbCBxdWVyaWVzLAppbmNsdWRpbmcgcHNxbCwgc3RpbGwg dXNlZCBQUWNhbmNlbCB0byBzZW5kIGNhbmNlbCByZXF1ZXN0cyB0byB0aGUKc2VydmVyLiBUaGF0 IGZ1bmN0aW9uIGlzIGluc2VjdXJlLCBiZWNhdXNlIGl0IGRvZXMgbm90IHVzZSBlbmNyeXB0aW9u IHRvCnNlbmQgdGhlIGNhbmNlbCByZXF1ZXN0LiBUaGlzIHN0YXJ0cyB1c2luZyB0aGUgbmV3IGNh bmNlbGxhdGlvbiBBUElzCihpbnRyb2R1Y2VkIGluIDYxNDYxYTMwMCkgZm9yIGFsbCB0aGVzZSBm cm9udGVuZCB0b29scy4gVGhlc2UgQVBJcyB1c2UKdGhlIHNhbWUgZW5jcnlwdGlvbiBzZXR0aW5n cyBhcyB0aGUgY29ubmVjdGlvbiB0aGF0J3MgYmVpbmcgY2FuY2VsbGVkLgpTaW5jZSB0aGVzZSBB UElzIGFyZSBub3Qgc2lnbmFsLXNhZmUgdGhpcyByZXF1aXJlZCBhIHJlZmFjdG9yIHRvIG5vdApz ZW5kIHRoZSBjYW5jZWwgcmVxdWVzdCBpbiBhIHNpZ25hbCBoYW5kbGVyIGFueW1vcmUsIGJ1dCBp bnN0ZWFkIHVzaW5nIGEKZGVkaWNhdGVkIHRocmVhZC4gU2ltaWxhciBsb2dpYyB3YXMgYWxyZWFk eSB1c2VkIGZvciBXaW5kb3dzIGFueXdheSwgc28KdGhpcyBhbHNvIGhhcyB0aGUgYmVuZWZpdCB0 aGF0IGl0IG1ha2VzIHRoZSBjYW5jZWwgbG9naWMgbW9yZSB1bmlmb3JtCmFjcm9zcyBvdXIgc3Vw cG9ydGVkIHBsYXRmb3Jtcy4KClRoZSBjYWxscyB0byBQUWNhbmNlbCBpbiBwZ19kdW1wIGFyZSBz dGlsbCBrZXB0IGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4KYSBsYXRlciBjb21taXQuIFRoZSByZWFz b24gZm9yIHRoYXQgaXMgdGhhdCB0aGF0IGNvZGUgZG9lcyBub3QgdXNlCnRoZSBoZWxwZXJzIGZy b20gZmVfdXRpbHMgdG8gY2FuY2VsIHF1ZXJpZXMsIGFuZCBpbnN0ZWFkIGltcGxlbWVudHMgaXRz Cm93biBsb2dpYy4KLS0tCiBtZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICB8ICAgMiArLQog c3JjL2ZlX3V0aWxzL01ha2VmaWxlICAgICAgICAgfCAgIDIgKy0KIHNyYy9mZV91dGlscy9jYW5j ZWwuYyAgICAgICAgIHwgMzY4ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIHNy Yy9pbmNsdWRlL2ZlX3V0aWxzL2NhbmNlbC5oIHwgICA0IC0KIDQgZmlsZXMgY2hhbmdlZCwgMjUy IGluc2VydGlvbnMoKyksIDEyNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9tZXNvbi5idWls ZCBiL21lc29uLmJ1aWxkCmluZGV4IGRkZjUxNzI5ODJmLi5lNzJkOTE1MDBiYiAxMDA2NDQKLS0t IGEvbWVzb24uYnVpbGQKKysrIGIvbWVzb24uYnVpbGQKQEAgLTM0ODIsNyArMzQ4Miw3IEBAIGZy b250ZW5kX2NvZGUgPSBkZWNsYXJlX2RlcGVuZGVuY3koCiAgIGluY2x1ZGVfZGlyZWN0b3JpZXM6 IFtwb3N0Z3Jlc19pbmNdLAogICBsaW5rX3dpdGg6IFtmZV91dGlscywgY29tbW9uX3N0YXRpYywg cGdwb3J0X3N0YXRpY10sCiAgIHNvdXJjZXM6IGdlbmVyYXRlZF9oZWFkZXJzX3N0YW1wLAotICBk ZXBlbmRlbmNpZXM6IFtvc19kZXBzLCBsaWJpbnRsXSwKKyAgZGVwZW5kZW5jaWVzOiBbb3NfZGVw cywgbGliaW50bCwgdGhyZWFkX2RlcF0sCiApCiAKIGJhY2tlbmRfYm90aF9kZXBzICs9IFsKZGlm ZiAtLWdpdCBhL3NyYy9mZV91dGlscy9NYWtlZmlsZSBiL3NyYy9mZV91dGlscy9NYWtlZmlsZQpp bmRleCBjYmZiZjkzYWM2OS4uODA5YWIyMWNjMGMgMTAwNjQ0Ci0tLSBhL3NyYy9mZV91dGlscy9N YWtlZmlsZQorKysgYi9zcmMvZmVfdXRpbHMvTWFrZWZpbGUKQEAgLTE3LDcgKzE3LDcgQEAgc3Vi ZGlyID0gc3JjL2ZlX3V0aWxzCiB0b3BfYnVpbGRkaXIgPSAuLi8uLgogaW5jbHVkZSAkKHRvcF9i dWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCi1vdmVycmlkZSBDUFBGTEFHUyA6PSAtREZS T05URU5EIC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCitvdmVycmlkZSBDUFBGTEFHUyA6 PSAtREZST05URU5EIC1JJChsaWJwcV9zcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9zcmMvcG9ydCAk KENQUEZMQUdTKQogCiBPQkpTID0gXAogCWFyY2hpdmUubyBcCmRpZmYgLS1naXQgYS9zcmMvZmVf dXRpbHMvY2FuY2VsLmMgYi9zcmMvZmVfdXRpbHMvY2FuY2VsLmMKaW5kZXggZTZiNzU0MzlmNTYu LjVkNjQ1YzU1NGFiIDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvY2FuY2VsLmMKKysrIGIvc3Jj L2ZlX3V0aWxzL2NhbmNlbC5jCkBAIC0yLDkgKzIsMzggQEAKICAqCiAgKiBRdWVyeSBjYW5jZWxs YXRpb24gc3VwcG9ydCBmb3IgZnJvbnRlbmQgY29kZQogICoKLSAqIEFzc29ydGVkIHV0aWxpdHkg ZnVuY3Rpb25zIHRvIGNvbnRyb2wgcXVlcnkgY2FuY2VsbGF0aW9uIHdpdGggc2lnbmFsCi0gKiBo YW5kbGVyIGZvciBTSUdJTlQuCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBTSUdJTlQvQ3RybC1D IGhhbmRsaW5nIGZvciBmcm9udGVuZCB0b29scyB0aGF0IG5lZWQKKyAqIHRvIGNhbmNlbCBxdWVy aWVzIHJ1bm5pbmcgb24gdGhlIHNlcnZlci4gIEl0IGNvbWJpbmVzIHRocmVlIGNvbXBsZXRlbHkK KyAqIGluZGVwZW5kZW50IG1lY2hhbmlzbXMsIGFueSBjb21iaW5hdGlvbiBvZiB3aGljaCBjYW4g YmUgdXNlZCBieSBhIGNhbGxlcjoKICAqCisgKiAxLiBTZXJ2ZXIgY2FuY2VsIHJlcXVlc3QgLS0g T2Z0ZW4gd2hhdCBhcHBsaWNhdGlvbnMgbmVlZC4gV2hlbiBhIHF1ZXJ5IGlzCisgKiAgICBydW5u aW5nLCBhbmQgdGhlIG1haW4gdGhyZWFkIGlzIHdhaXRpbmcgZm9yIHRoZSByZXN1bHQgb2YgdGhh dCBxdWVyeSBpbiBhCisgKiAgICBibG9ja2luZyBtYW5uZXIsIHdlIHdhbnQgU0lHSU5UL0N0cmwt QyB0byBjYW5jZWwgdGhhdCBxdWVyeS4gVGhpcyBjYW4gYmUKKyAqICAgIGRvbmUgYnkgaGF2aW5n IHRoZSBhcHBsaWNhdGlvbiBjYWxsIFNldENhbmNlbENvbm4oKSB0byByZWdpc3RlciB0aGUKKyAq ICAgIGNvbm5lY3Rpb24gdGhhdCBpcyBydW5uaW5nIHRoZSBxdWVyeSwgcHJpb3IgdG8gd2FpdGlu ZyBmb3IgdGhlIHJlc3VsdC4KKyAqICAgIFdoZW4gU0lHSU5UL0N0cmwtQyBpcyByZWNlaXZlZCBh IGNhbmNlbCByZXF1ZXN0IGZvciB0aGlzIGNvbm5lY3Rpb24gd2lsbAorICogICAgdGhlbiBiZSBz ZW50IHRvIHRoZSBzZXJ2ZXIgZnJvbSBhIHNlcGFyYXRlIHRocmVhZC4gVGhhdCBpbiB0dXJuIHdp bGwgdGhlbgorICogICAgKGFzc3VtaW5nIGEgY28tb3BlcmF0aW5nIHNlcnZlcikgY2F1c2UgdGhl IHNlcnZlciB0byBjYW5jZWwgdGhlIHF1ZXJ5IGFuZAorICogICAgc2VuZCBhbiBlcnJvciB0byB0 aGUgd2FpdGluZyBjbGllbnQgb24gdGhlIG1haW4gdGhyZWFkLiBUaGUgY2FuY2VsCisgKiAgICBj b25uZWN0aW9uIGlzIGEgcHJvY2Vzcy13aWRlIGdsb2JhbCwgc28gb25seSBvbmUgY29ubmVjdGlv biBjYW4gYmUgdGhlCisgKiAgICBjYW5jZWwgdGFyZ2V0IGF0IGEgdGltZS4gUmVzZXRDYW5jZWxD b25uKCkgY2FuIGJlIHVzZWQgdG8gdW5yZWdpc3RlciB0aGUKKyAqICAgIGNvbm5lY3Rpb24gYWdh aW4sIHByZXZlbnRpbmcgc2VuZGluZyBhIGNhbmNlbCByZXF1ZXN0IGlmIFNJR0lOVC9DdHJsLUMg aXMKKyAqICAgIHJlY2VpdmVkIGFmdGVyIGJsb2NraW5nIHdhaXQgaGFzIGFscmVhZHkgY29tcGxl dGVkLgorICoKKyAqIDIuIENhbmNlbFJlcXVlc3RlZCBmbGFnIC0tIEEgbW9yZSBpbnZvbHZlZCBi dXQgYWxzbyBtdWNoIG1vcmUgZmxleGlibGUgd2F5CisgKiAgICBvZiBjYW5jZWxsaW5nLiBBIHZv bGF0aWxlIHNpZ19hdG9taWNfdCBDYW5jZWxSZXF1ZXN0ZWQgZmxhZyBpcyBzZXQgdG8KKyAqICAg IHRydWUgd2hlbmV2ZXIgU0lHSU5UIGlzIHJlY2VpdmVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFw cGxpY2F0aW9uIGNvZGUKKyAqICAgIGNhbiBmdWxseSBjb250cm9sIHdoYXQgaXQgZG9lcyB3aXRo IHRoaXMgZmxhZy4gVGhlIHByaW1hcnkgdXNlY2FzZSBmb3IKKyAqICAgIHRoaXMgaXMgd2hlbiB0 aGUgYXBwbGljYXRpb24gY29kZSBpcyBub3QgYmxvY2tlZCAoaW5kZWZpbml0ZWx5KSwgYnV0Cisg KiAgICBuZWVkcyB0byB0YWtlIGFuIGFjdGlvbiB3aGVuIEN0cmwtQyBpcyBwcmVzc2VkLCBzdWNo IGFzIGJyZWFrIG91dCBvZiBhCisgKiAgICBsb25nIHJ1bm5pbmcgbG9vcC4KKyAqCisgKiAzLiBD YW5jZWwgY2FsbGJhY2sgLS0gVGhlIG1vc3QgY29tcGxleCB3YXkgb2YgaGFuZGxpbmcgYSBzaWdp bnQuIEFuIG9wdGlvbmFsCisgKiAgICBmdW5jdGlvbiBwb2ludGVyIHJlZ2lzdGVyZWQgdmlhIHNl dHVwX2NhbmNlbF9oYW5kbGVyKCkuICBJZiBzZXQsIGl0IGlzCisgKiAgICBjYWxsZWQgZGlyZWN0 bHkgZnJvbSB0aGUgc2lnbmFsIGhhbmRsZXIsIHNvIGl0IG11c3QgYmUgYXN5bmMtc2lnbmFsLXNh ZmUuCisgKiAgICBXcml0aW5nIGFzeW5jLXNpZ25hbC1zYWZlIGNvZGUgaXMgbm90IGVhc3ksIHNv IHRoaXMgaXMgb25seSByZWNvbW1lbmRlZAorICogICAgYXMgYSBsYXN0IHJlc29ydC4gcHNxbCB1 c2VzIHRoaXMgdG8gbG9uZ2ptcCBiYWNrIHRvIHRoZSBtYWluIGxvb3Agd2hlbiBubworICogICAg cXVlcnkgaXMgYWN0aXZlLgogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKQEAg LTE2LDkgKzQ1LDIxIEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8 c2lnbmFsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKKyNpZm5kZWYgV0lOMzIKKyNpbmNsdWRl IDxmY250bC5oPgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorI2luY2x1ZGUgInB0aHJlYWQtd2lu MzIuaCIKKyNlbHNlCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisKICNpbmNsdWRlICJj b21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAi ZmVfdXRpbHMvY2FuY2VsLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAK QEAgLTM2LDExICs3NywyMiBAQAogCQkodm9pZCkgcmNfOyBcCiAJfSB3aGlsZSAoMCkKIAorCiAv KgotICogQ29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY2FuY2VsIGEgcXVl cnkgaXNzdWVkIGZyb20KLSAqIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB0byB0aGUgYmFja2VuZC4K KyAqIENhbmNlbCBjb25uZWN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gc2VuZCBjYW5jZWwg cmVxdWVzdHMuCiAgKi8KLXN0YXRpYyBQR2NhbmNlbCAqdm9sYXRpbGUgY2FuY2VsQ29ubiA9IE5V TEw7CitzdGF0aWMgUEdjYW5jZWxDb25uICpjYW5jZWxDb25uID0gTlVMTDsKKworLyoKKyAqIEdl bmVyYXRpb24gY291bnRlciBmb3IgY2FuY2VsQ29ubi4gSW5jcmVtZW50ZWQgZWFjaCB0aW1lIGNh bmNlbENvbm4gaXMKKyAqIGNoYW5nZWQuIFVzZWQgdG8gZGV0ZWN0IGlmIGNhbmNlbENvbm4gd2Fz IHJlcGxhY2VkIHdoaWxlIHdlIHdlcmUgdXNpbmcgaXQuCisgKi8KK3N0YXRpYyB1aW50NjQgY2Fu Y2VsQ29ubkdlbmVyYXRpb24gPSAwOworCisvKgorICogTXV0ZXggcHJvdGVjdGluZyBjYW5jZWxD b25uIGFuZCBjYW5jZWxDb25uR2VuZXJhdGlvbi4KKyAqLworc3RhdGljIHB0aHJlYWRfbXV0ZXhf dCBjYW5jZWxDb25uTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiAKIC8qCiAgKiBQ cmVkZXRlcm1pbmVkIGxvY2FsaXplZCBlcnJvciBzdHJpbmdzIC0tLSBuZWVkZWQgdG8gYXZvaWQg dHJ5aW5nCkBAIC01OCwxODYgKzExMCwyNjYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNhbmNlbF9u b3Rfc2VudF9tc2cgPSBOVUxMOwogICovCiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2FuY2VsUmVx dWVzdGVkID0gZmFsc2U7CiAKLSNpZmRlZiBXSU4zMgotc3RhdGljIENSSVRJQ0FMX1NFQ1RJT04g Y2FuY2VsQ29ubkxvY2s7Ci0jZW5kaWYKLQogLyoKICAqIEFkZGl0aW9uYWwgY2FsbGJhY2sgZm9y IGNhbmNlbGxhdGlvbnMuCiAgKi8KIHN0YXRpYyB2b2lkICgqY2FuY2VsX2NhbGxiYWNrKSAodm9p ZCkgPSBOVUxMOwogCisjaWZuZGVmIFdJTjMyCisvKgorICogT24gVW5peCwgdGhlIFNJR0lOVCBz aWduYWwgaGFuZGxlciBjYW5ub3QgY2FsbCBQUWNhbmNlbEJsb2NraW5nKCkgZGlyZWN0bHkKKyAq IGJlY2F1c2UgaXQgaXMgbm90IGFzeW5jLXNpZ25hbC1zYWZlLiAgSW5zdGVhZCwgd2UgdXNlIGEg cGlwZSB0byB3YWtlIGEKKyAqIGRlZGljYXRlZCBjYW5jZWwgdGhyZWFkOiB0aGUgc2lnbmFsIGhh bmRsZXIgd3JpdGVzIGEgYnl0ZSB0byB0aGUgcGlwZSwgYW5kCisgKiB0aGUgY2FuY2VsIHRocmVh ZCdzIGJsb2NraW5nIHJlYWQoKSByZXR1cm5zLCB0cmlnZ2VyaW5nIHRoZSBhY3R1YWwgY2FuY2Vs CisgKiByZXF1ZXN0LgorICovCitzdGF0aWMgaW50CWNhbmNlbF9waXBlWzJdID0gey0xLCAtMX07 CitzdGF0aWMgcHRocmVhZF90IGNhbmNlbF90aHJlYWQ7CisjZW5kaWYKKwogCiAvKgotICogU2V0 Q2FuY2VsQ29ubgorICogU2VuZCBhIGNhbmNlbCByZXF1ZXN0IHRvIHRoZSBjb25uZWN0aW9uLCBp ZiBvbmUgaXMgc2V0LgorICoKKyAqIENhbGxlZCBmcm9tIHRoZSBjYW5jZWwgdGhyZWFkIChVbml4 KSBvciB0aGUgY29uc29sZSBoYW5kbGVyIHRocmVhZAorICogKFdpbmRvd3MpLCBuZXZlciBmcm9t IHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYuCiAgKgotICogU2V0IGNhbmNlbENvbm4gdG8gcG9p bnQgdG8gdGhlIGN1cnJlbnQgZGF0YWJhc2UgY29ubmVjdGlvbi4KKyAqIFRvIGF2b2lkIHRoZSBj YW5jZWwgY29ubmVjdGlvbiBiZWluZyBmcmVlZCBieSBhIGNvbmN1cnJlbnQKKyAqIFNldENhbmNl bENvbm4oKS9SZXNldENhbmNlbENvbm4oKSBjYWxsIG9uIHRoZSBtYWluIHRocmVhZCB3aGlsZSB3 ZSBhcmUKKyAqIHVzaW5nIGl0LCB3ZSB0ZW1wb3JhcmlseSB0YWtlIGl0IG91dCBvZiB0aGUgZ2xv YmFsIHZhcmlhYmxlIHdoaWxlIHNlbmRpbmcKKyAqIHRoZSByZXF1ZXN0LiAgQSBnZW5lcmF0aW9u IGNvdW50ZXIgbGV0cyB1cyBkZXRlY3Qgd2hldGhlciB0aGUgbWFpbiB0aHJlYWQKKyAqIHJlcGxh Y2VkIGl0IGluIHRoZSBtZWFudGltZSwgaW4gd2hpY2ggY2FzZSB3ZSBmcmVlIHRoZSBvbGQgb25l IGluc3RlYWQgb2YKKyAqIHB1dHRpbmcgaXQgYmFjay4KKyAqCisgKiBOb3RlOiB0aGVyZSBpcyBh biBpbmhlcmVudCByYWNlIHdoZXJlLCBpZiB0aGlzIHRocmVhZCBpcyBzbG93IHRvIHByb2Nlc3MK KyAqIHRoZSB3YWtldXAgKGUuZy4gZHVlIHRvIGEgbmV0d29yayBkZWxheSBzZW5kaW5nIGEgcHJl dmlvdXMgY2FuY2VsKSwgdGhlCisgKiBtYWluIHRocmVhZCBtYXkgaGF2ZSBhbHJlYWR5IG1vdmVk IG9uIHRvIGEgZGlmZmVyZW50IHF1ZXJ5IGJ5IHRoZSB0aW1lIHdlCisgKiBzZW5kIHRoZSBjYW5j ZWwuICBUaGlzIGlzIHVuYXZvaWRhYmxlIHdpdGggdGhlIHNlcnZlcidzIGNhbmNlbCBwcm90b2Nv bCwKKyAqIHdoaWNoIGlkZW50aWZpZXMgdGhlIHNlc3Npb24gYnV0IG5vdCBpbmRpdmlkdWFsIHF1 ZXJpZXMuCiAgKi8KLXZvaWQKLVNldENhbmNlbENvbm4oUEdjb25uICpjb25uKQorc3RhdGljIHZv aWQKK1NlbmRDYW5jZWxSZXF1ZXN0KHZvaWQpCiB7Ci0JUEdjYW5jZWwgICAqb2xkQ2FuY2VsQ29u bjsKKwlQR2NhbmNlbENvbm4gKmNjOworCXVpbnQ2NAkJZ2VuZXJhdGlvbjsKKwlib29sCQlwdXRD b25uZWN0aW9uQmFjayA9IGZhbHNlOworCisJLyoKKwkgKiBCb3Jyb3cgdGhlIGNhbmNlbCBjb25u ZWN0aW9uIGZyb20gdGhlIGdsb2JhbCwgc2V0dGluZyBpdCB0byBOVUxMIHNvCisJICogdGhhdCBT ZXRDYW5jZWxDb25uL1Jlc2V0Q2FuY2VsQ29ubiB3b24ndCBmcmVlIGl0IHdoaWxlIHdlJ3JlIHVz aW5nIGl0LgorCSAqLworCXB0aHJlYWRfbXV0ZXhfbG9jaygmY2FuY2VsQ29ubkxvY2spOworCWNj ID0gY2FuY2VsQ29ubjsKKwlnZW5lcmF0aW9uID0gY2FuY2VsQ29ubkdlbmVyYXRpb247CisJY2Fu Y2VsQ29ubiA9IE5VTEw7CisJcHRocmVhZF9tdXRleF91bmxvY2soJmNhbmNlbENvbm5Mb2NrKTsK IAotI2lmZGVmIFdJTjMyCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJmNhbmNlbENvbm5Mb2NrKTsK LSNlbmRpZgorCWlmIChjYyA9PSBOVUxMKQorCQlyZXR1cm47CiAKLQkvKiBGcmVlIHRoZSBvbGQg b25lIGlmIHdlIGhhdmUgb25lICovCi0Jb2xkQ2FuY2VsQ29ubiA9IGNhbmNlbENvbm47CisJd3Jp dGVfc3RkZXJyKGNhbmNlbF9zZW50X21zZyk7CiAKLQkvKiBiZSBzdXJlIGhhbmRsZV9zaWdpbnQg ZG9lc24ndCB1c2UgcG9pbnRlciB3aGlsZSBmcmVlaW5nICovCi0JY2FuY2VsQ29ubiA9IE5VTEw7 CisJaWYgKCFQUWNhbmNlbEJsb2NraW5nKGNjKSkKKwl7CisJCWNoYXIJICAgKmVycm1zZyA9IFBR Y2FuY2VsRXJyb3JNZXNzYWdlKGNjKTsKIAotCWlmIChvbGRDYW5jZWxDb25uICE9IE5VTEwpCi0J CVBRZnJlZUNhbmNlbChvbGRDYW5jZWxDb25uKTsKKwkJd3JpdGVfc3RkZXJyKGNhbmNlbF9ub3Rf c2VudF9tc2cpOworCQlpZiAoZXJybXNnKQorCQkJd3JpdGVfc3RkZXJyKGVycm1zZyk7CisJfQor CS8qIFJlc2V0IGZvciBwb3NzaWJsZSByZXVzZSAqLworCVBRY2FuY2VsUmVzZXQoY2MpOworCisJ LyoKKwkgKiBQdXQgdGhlIGNhbmNlbCBjb25uZWN0aW9uIGJhY2sgaWYgaXQgd2Fzbid0IHJlcGxh Y2VkIHdoaWxlIHdlIHdlcmUKKwkgKiB1c2luZyBpdC4KKwkgKi8KKwlwdGhyZWFkX211dGV4X2xv Y2soJmNhbmNlbENvbm5Mb2NrKTsKKwlpZiAoY2FuY2VsQ29ubkdlbmVyYXRpb24gPT0gZ2VuZXJh dGlvbikKKwl7CisJCS8qIEdlbmVyYXRpb24gdW5jaGFuZ2VkLCBwdXQgaXQgYmFjayBmb3IgcmV1 c2UgKi8KKwkJY2FuY2VsQ29ubiA9IGNjOworCQlwdXRDb25uZWN0aW9uQmFjayA9IHRydWU7CisJ fQorCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZjYW5jZWxDb25uTG9jayk7CiAKLQljYW5jZWxDb25u ID0gUFFnZXRDYW5jZWwoY29ubik7CisJLyogSWYgaXQgd2FzIHJlcGxhY2VkLCB3ZSBmcmVlIGl0 LCBiZWNhdXNlIHdlIHdlcmUgdGhlIGxhc3QgdXNlciAqLworCWlmICghcHV0Q29ubmVjdGlvbkJh Y2spCisJCVBRY2FuY2VsRmluaXNoKGNjKTsKK30KIAotI2lmZGVmIFdJTjMyCi0JTGVhdmVDcml0 aWNhbFNlY3Rpb24oJmNhbmNlbENvbm5Mb2NrKTsKLSNlbmRpZgorCisvKgorICogSGVscGVyIHRv IHJlcGxhY2UgY2FuY2VsQ29ubiB3aXRoIGEgbmV3IHZhbHVlLgorICovCitzdGF0aWMgdm9pZAor U2V0Q2FuY2VsQ29ubkludGVybmFsKFBHY2FuY2VsQ29ubiAqbmV3Q2FuY2VsQ29ubikKK3sKKwlQ R2NhbmNlbENvbm4gKm9sZENhbmNlbENvbm47CisKKwlwdGhyZWFkX211dGV4X2xvY2soJmNhbmNl bENvbm5Mb2NrKTsKKwlvbGRDYW5jZWxDb25uID0gY2FuY2VsQ29ubjsKKwljYW5jZWxDb25uID0g bmV3Q2FuY2VsQ29ubjsKKwljYW5jZWxDb25uR2VuZXJhdGlvbisrOworCXB0aHJlYWRfbXV0ZXhf dW5sb2NrKCZjYW5jZWxDb25uTG9jayk7CisKKwlpZiAob2xkQ2FuY2VsQ29ubiAhPSBOVUxMKQor CQlQUWNhbmNlbEZpbmlzaChvbGRDYW5jZWxDb25uKTsKK30KKworLyoKKyAqIFNldENhbmNlbENv bm4KKyAqCisgKiBTZXQgY2FuY2VsQ29ubiB0byBwb2ludCB0byBhIGNhbmNlbCBjb25uZWN0aW9u IGZvciB0aGUgZ2l2ZW4gZGF0YWJhc2UKKyAqIGNvbm5lY3Rpb24uIFRoaXMgY3JlYXRlcyBhIG5l dyBQR2NhbmNlbENvbm4gdGhhdCBjYW4gYmUgdXNlZCB0byBzZW5kCisgKiBjYW5jZWwgcmVxdWVz dHMuCisgKi8KK3ZvaWQKK1NldENhbmNlbENvbm4oUEdjb25uICpjb25uKQoreworCVNldENhbmNl bENvbm5JbnRlcm5hbChQUWNhbmNlbENyZWF0ZShjb25uKSk7CiB9CiAKIC8qCiAgKiBSZXNldENh bmNlbENvbm4KICAqCi0gKiBGcmVlIHRoZSBjdXJyZW50IGNhbmNlbCBjb25uZWN0aW9uLCBpZiBh bnksIGFuZCBzZXQgdG8gTlVMTC4KKyAqIENsZWFyIGNhbmNlbENvbm4sIHByZXZlbnRpbmcgYW55 IHBlbmRpbmcgY2FuY2VsIGZyb20gYmVpbmcgc2VudC4KICAqLwogdm9pZAogUmVzZXRDYW5jZWxD b25uKHZvaWQpCiB7Ci0JUEdjYW5jZWwgICAqb2xkQ2FuY2VsQ29ubjsKKwlTZXRDYW5jZWxDb25u SW50ZXJuYWwoTlVMTCk7Cit9CiAKLSNpZmRlZiBXSU4zMgotCUVudGVyQ3JpdGljYWxTZWN0aW9u KCZjYW5jZWxDb25uTG9jayk7Ci0jZW5kaWYKIAotCW9sZENhbmNlbENvbm4gPSBjYW5jZWxDb25u OworI2lmZGVmIFdJTjMyCisvKgorICogQ29uc29sZSBjb250cm9sIGhhbmRsZXIgZm9yIFdpbmRv d3MuCisgKgorICogVGhpcyBydW5zIGluIGEgc2VwYXJhdGUgdGhyZWFkIGNyZWF0ZWQgYnkgdGhl IE9TLCBzbyB3ZSBjYW4gc2FmZWx5IGNhbGwKKyAqIHRoZSBibG9ja2luZyBjYW5jZWwgQVBJIGRp cmVjdGx5LgorICovCitzdGF0aWMgQk9PTCBXSU5BUEkKK2NvbnNvbGVIYW5kbGVyKERXT1JEIGR3 Q3RybFR5cGUpCit7CisJaWYgKGR3Q3RybFR5cGUgPT0gQ1RSTF9DX0VWRU5UIHx8CisJCWR3Q3Ry bFR5cGUgPT0gQ1RSTF9CUkVBS19FVkVOVCkKKwl7CisJCUNhbmNlbFJlcXVlc3RlZCA9IHRydWU7 CiAKLQkvKiBiZSBzdXJlIGhhbmRsZV9zaWdpbnQgZG9lc24ndCB1c2UgcG9pbnRlciB3aGlsZSBm cmVlaW5nICovCi0JY2FuY2VsQ29ubiA9IE5VTEw7CisJCWlmIChjYW5jZWxfY2FsbGJhY2sgIT0g TlVMTCkKKwkJCWNhbmNlbF9jYWxsYmFjaygpOwogCi0JaWYgKG9sZENhbmNlbENvbm4gIT0gTlVM TCkKLQkJUFFmcmVlQ2FuY2VsKG9sZENhbmNlbENvbm4pOworCQlTZW5kQ2FuY2VsUmVxdWVzdCgp OwogCi0jaWZkZWYgV0lOMzIKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY2FuY2VsQ29ubkxvY2sp OwotI2VuZGlmCisJCXJldHVybiBUUlVFOworCX0KKwllbHNlCisJCS8qIFJldHVybiBGQUxTRSBm b3IgYW55IHNpZ25hbHMgbm90IGJlaW5nIGhhbmRsZWQgKi8KKwkJcmV0dXJuIEZBTFNFOwogfQog CisjZWxzZQkJCQkJCQkvKiAhV0lOMzIgKi8KIAogLyoKLSAqIENvZGUgdG8gc3VwcG9ydCBxdWVy eSBjYW5jZWxsYXRpb24KLSAqCi0gKiBOb3RlIHRoYXQgc2VuZGluZyB0aGUgY2FuY2VsIGRpcmVj dGx5IGZyb20gdGhlIHNpZ25hbCBoYW5kbGVyIGlzIHNhZmUKLSAqIGJlY2F1c2UgUFFjYW5jZWwo KSBpcyB3cml0dGVuIHRvIG1ha2UgaXQgc28uICBXZSB1c2Ugd3JpdGUoKSB0byByZXBvcnQKLSAq IHRvIHN0ZGVyciBiZWNhdXNlIGl0J3MgYmV0dGVyIHRvIHVzZSBzaW1wbGUgZmFjaWxpdGllcyBp biBhIHNpZ25hbAotICogaGFuZGxlci4KLSAqCi0gKiBPbiBXaW5kb3dzLCB0aGUgc2lnbmFsIGNh bmNlbGluZyBoYXBwZW5zIG9uIGEgc2VwYXJhdGUgdGhyZWFkLCBiZWNhdXNlCi0gKiB0aGF0J3Mg aG93IFNldENvbnNvbGVDdHJsSGFuZGxlciB3b3Jrcy4gIFRoZSBQUWNhbmNlbCBmdW5jdGlvbiBp cyBzYWZlCi0gKiBmb3IgdGhpcyAodW5saWtlIFBRcmVxdWVzdENhbmNlbCkuICBIb3dldmVyLCBh IENSSVRJQ0FMX1NFQ1RJT04gaXMgcmVxdWlyZWQKLSAqIHRvIHByb3RlY3QgdGhlIFBHY2FuY2Vs IHN0cnVjdHVyZSBhZ2FpbnN0IGJlaW5nIGNoYW5nZWQgd2hpbGUgdGhlIHNpZ25hbAotICogdGhy ZWFkIGlzIHVzaW5nIGl0LgorICogQ2FuY2VsIHRocmVhZCBtYWluIGZ1bmN0aW9uLiBXYWl0cyBm b3IgdGhlIHNpZ25hbCBoYW5kbGVyIHRvIHdyaXRlIHRvIHRoZQorICogcGlwZSwgdGhlbiBzZW5k cyBhIGNhbmNlbCByZXF1ZXN0LgogICovCitzdGF0aWMgdm9pZCAqCitjYW5jZWxfdGhyZWFkX21h aW4odm9pZCAqYXJnKQoreworCWZvciAoOzspCisJeworCQljaGFyCQlidWZbMTZdOworCQlzc2l6 ZV90CQlyYzsKIAotI2lmbmRlZiBXSU4zMgorCQkvKiBXYWl0IGZvciBzaWduYWwgaGFuZGxlciB0 byB3YWtlIHVzIHVwICovCisJCXJjID0gcmVhZChjYW5jZWxfcGlwZVswXSwgYnVmLCBzaXplb2Yo YnVmKSk7CisJCWlmIChyYyA8PSAwKQorCQl7CisJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJ Y29udGludWU7CisJCQkvKiBQaXBlIGNsb3NlZCBvciBlcnJvciAtIGV4aXQgdGhyZWFkICovCisJ CQlicmVhazsKKwkJfQorCisJCVNlbmRDYW5jZWxSZXF1ZXN0KCk7CisJfQorCisJcmV0dXJuIE5V TEw7Cit9CiAKIC8qCi0gKiBoYW5kbGVfc2lnaW50Ci0gKgotICogSGFuZGxlIGludGVycnVwdCBz aWduYWxzIGJ5IGNhbmNlbGluZyB0aGUgY3VycmVudCBjb21tYW5kLCBpZiBjYW5jZWxDb25uCi0g KiBpcyBzZXQuCisgKiBTaWduYWwgaGFuZGxlciBmb3IgU0lHSU5ULiBTZXRzIENhbmNlbFJlcXVl c3RlZCBhbmQgd2FrZXMgdXAgdGhlIGNhbmNlbAorICogdGhyZWFkIGJ5IHdyaXRpbmcgdG8gdGhl IHBpcGUuCiAgKi8KIHN0YXRpYyB2b2lkCiBoYW5kbGVfc2lnaW50KFNJR05BTF9BUkdTKQogewot CWNoYXIJCWVycmJ1ZlsyNTZdOworCWludAkJCXNhdmVfZXJybm8gPSBlcnJubzsKKwljaGFyCQlj ID0gMTsKIAogCUNhbmNlbFJlcXVlc3RlZCA9IHRydWU7CiAKIAlpZiAoY2FuY2VsX2NhbGxiYWNr ICE9IE5VTEwpCiAJCWNhbmNlbF9jYWxsYmFjaygpOwogCi0JLyogU2VuZCBRdWVyeUNhbmNlbCBp ZiB3ZSBhcmUgcHJvY2Vzc2luZyBhIGRhdGFiYXNlIHF1ZXJ5ICovCi0JaWYgKGNhbmNlbENvbm4g IT0gTlVMTCkKLQl7Ci0JCWlmIChQUWNhbmNlbChjYW5jZWxDb25uLCBlcnJidWYsIHNpemVvZihl cnJidWYpKSkKLQkJewotCQkJd3JpdGVfc3RkZXJyKGNhbmNlbF9zZW50X21zZyk7Ci0JCX0KLQkJ ZWxzZQotCQl7Ci0JCQl3cml0ZV9zdGRlcnIoY2FuY2VsX25vdF9zZW50X21zZyk7Ci0JCQl3cml0 ZV9zdGRlcnIoZXJyYnVmKTsKLQkJfQotCX0KKwkvKiBXYWtlIHVwIHRoZSBjYW5jZWwgdGhyZWFk IC0gd3JpdGUoKSBpcyBhc3luYy1zaWduYWwtc2FmZSAqLworCWlmIChjYW5jZWxfcGlwZVsxXSA+ PSAwKQorCQkodm9pZCkgd3JpdGUoY2FuY2VsX3BpcGVbMV0sICZjLCAxKTsKKworCWVycm5vID0g c2F2ZV9lcnJubzsKIH0KIAorI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCisKKwogLyoKICAqIHNl dHVwX2NhbmNlbF9oYW5kbGVyCiAgKgotICogUmVnaXN0ZXIgcXVlcnkgY2FuY2VsbGF0aW9uIGNh bGxiYWNrIGZvciBTSUdJTlQuCisgKiBTZXQgdXAgaGFuZGxlciBmb3IgU0lHSU5UIChVbml4KSBv ciBjb25zb2xlIGV2ZW50cyAoV2luZG93cykgdG8gc2VuZCBhCisgKiBjYW5jZWwgcmVxdWVzdCB0 byB0aGUgc2VydmVyLgorICoKKyAqIFRoZSBvcHRpb25hbCBjYWxsYmFjayBpcyBpbnZva2VkIGRp cmVjdGx5IGZyb20gdGhlIHNpZ25hbCBoYW5kbGVyIGNvbnRleHQKKyAqIG9uIGV2ZXJ5IFNJR0lO VCAob24gVW5peCksIHNvIGl0IG11c3QgYmUgYXN5bmMtc2lnbmFsLXNhZmUuCiAgKi8KIHZvaWQK IHNldHVwX2NhbmNlbF9oYW5kbGVyKHZvaWQgKCpxdWVyeV9jYW5jZWxfY2FsbGJhY2spICh2b2lk KSkKIHsKIAljYW5jZWxfY2FsbGJhY2sgPSBxdWVyeV9jYW5jZWxfY2FsbGJhY2s7Ci0JY2FuY2Vs X3NlbnRfbXNnID0gXygiQ2FuY2VsIHJlcXVlc3Qgc2VudFxuIik7CisJY2FuY2VsX3NlbnRfbXNn ID0gXygiU2VuZGluZyBjYW5jZWwgcmVxdWVzdFxuIik7CiAJY2FuY2VsX25vdF9zZW50X21zZyA9 IF8oIkNvdWxkIG5vdCBzZW5kIGNhbmNlbCByZXF1ZXN0OiAiKTsKIAotCXBxc2lnbmFsKFNJR0lO VCwgaGFuZGxlX3NpZ2ludCk7Ci19CisjaWZkZWYgV0lOMzIKKwlTZXRDb25zb2xlQ3RybEhhbmRs ZXIoY29uc29sZUhhbmRsZXIsIFRSVUUpOworI2Vsc2UKIAotI2Vsc2UJCQkJCQkJLyogV0lOMzIg Ki8KKwkvKgorCSAqIENyZWF0ZSB0aGUgcGlwZSBhbmQgY2FuY2VsIHRocmVhZCAoc2VlIGNvbW1l bnQgb24gY2FuY2VsX3BpcGUgYWJvdmUpLgorCSAqLworCWlmIChwaXBlKGNhbmNlbF9waXBlKSA8 IDApCisJeworCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgcGlwZSBmb3IgY2FuY2Vs OiAlbSIpOworCQlleGl0KDEpOworCX0KIAotc3RhdGljIEJPT0wgV0lOQVBJCi1jb25zb2xlSGFu ZGxlcihEV09SRCBkd0N0cmxUeXBlKQotewotCWNoYXIJCWVycmJ1ZlsyNTZdOworCS8qCisJICog TWFrZSB0aGUgd3JpdGUgZW5kIG5vbi1ibG9ja2luZywgc28gdGhhdCB0aGUgc2lnbmFsIGhhbmRs ZXIgd29uJ3QgYmxvY2sKKwkgKiBpZiB0aGUgcGlwZSBidWZmZXIgaXMgZnVsbCAod2hpY2ggaXMg dmVyeSB1bmxpa2VseSBpbiBwcmFjdGljZSBidXQKKwkgKiBwb3NzaWJsZSBpbiB0aGVvcnkpLgor CSAqLworCWZjbnRsKGNhbmNlbF9waXBlWzFdLCBGX1NFVEZMLCBPX05PTkJMT0NLKTsKIAotCWlm IChkd0N0cmxUeXBlID09IENUUkxfQ19FVkVOVCB8fAotCQlkd0N0cmxUeXBlID09IENUUkxfQlJF QUtfRVZFTlQpCiAJewotCQlDYW5jZWxSZXF1ZXN0ZWQgPSB0cnVlOwotCi0JCWlmIChjYW5jZWxf Y2FsbGJhY2sgIT0gTlVMTCkKLQkJCWNhbmNlbF9jYWxsYmFjaygpOworCQlpbnQJCQlyYyA9IHB0 aHJlYWRfY3JlYXRlKCZjYW5jZWxfdGhyZWFkLCBOVUxMLCBjYW5jZWxfdGhyZWFkX21haW4sIE5V TEwpOwogCi0JCS8qIFNlbmQgUXVlcnlDYW5jZWwgaWYgd2UgYXJlIHByb2Nlc3NpbmcgYSBkYXRh YmFzZSBxdWVyeSAqLwotCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmY2FuY2VsQ29ubkxvY2spOwot CQlpZiAoY2FuY2VsQ29ubiAhPSBOVUxMKQorCQlpZiAocmMgIT0gMCkKIAkJewotCQkJaWYgKFBR Y2FuY2VsKGNhbmNlbENvbm4sIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpKQotCQkJewotCQkJCXdy aXRlX3N0ZGVycihjYW5jZWxfc2VudF9tc2cpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCXdy aXRlX3N0ZGVycihjYW5jZWxfbm90X3NlbnRfbXNnKTsKLQkJCQl3cml0ZV9zdGRlcnIoZXJyYnVm KTsKLQkJCX0KKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBjYW5jZWwgdGhyZWFk OiAlcyIsIHN0cmVycm9yKHJjKSk7CisJCQlleGl0KDEpOwogCQl9Ci0KLQkJTGVhdmVDcml0aWNh bFNlY3Rpb24oJmNhbmNlbENvbm5Mb2NrKTsKLQotCQlyZXR1cm4gVFJVRTsKIAl9Ci0JZWxzZQot CQkvKiBSZXR1cm4gRkFMU0UgZm9yIGFueSBzaWduYWxzIG5vdCBiZWluZyBoYW5kbGVkICovCi0J CXJldHVybiBGQUxTRTsKLX0KIAotdm9pZAotc2V0dXBfY2FuY2VsX2hhbmRsZXIodm9pZCAoKmNh bGxiYWNrKSAodm9pZCkpCi17Ci0JY2FuY2VsX2NhbGxiYWNrID0gY2FsbGJhY2s7Ci0JY2FuY2Vs X3NlbnRfbXNnID0gXygiQ2FuY2VsIHJlcXVlc3Qgc2VudFxuIik7Ci0JY2FuY2VsX25vdF9zZW50 X21zZyA9IF8oIkNvdWxkIG5vdCBzZW5kIGNhbmNlbCByZXF1ZXN0OiAiKTsKLQotCUluaXRpYWxp emVDcml0aWNhbFNlY3Rpb24oJmNhbmNlbENvbm5Mb2NrKTsKLQotCVNldENvbnNvbGVDdHJsSGFu ZGxlcihjb25zb2xlSGFuZGxlciwgVFJVRSk7CisJcHFzaWduYWwoU0lHSU5ULCBoYW5kbGVfc2ln aW50KTsKKyNlbmRpZgogfQotCi0jZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2ZlX3V0aWxzL2NhbmNlbC5oIGIvc3JjL2luY2x1ZGUvZmVfdXRpbHMvY2Fu Y2VsLmgKaW5kZXggZTE3NGZiODNiOTIuLjhhZmIyZDc3OGJmIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9mZV91dGlscy9jYW5jZWwuaAorKysgYi9zcmMvaW5jbHVkZS9mZV91dGlscy9jYW5jZWwu aApAQCAtMjMsMTAgKzIzLDYgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9t aWNfdCBDYW5jZWxSZXF1ZXN0ZWQ7CiBleHRlcm4gdm9pZCBTZXRDYW5jZWxDb25uKFBHY29ubiAq Y29ubik7CiBleHRlcm4gdm9pZCBSZXNldENhbmNlbENvbm4odm9pZCk7CiAKLS8qCi0gKiBBIGNh bGxiYWNrIGNhbiBiZSBvcHRpb25hbGx5IHNldCB1cCB0byBiZSBjYWxsZWQgYXQgY2FuY2VsbGF0 aW9uCi0gKiB0aW1lLgotICovCiBleHRlcm4gdm9pZCBzZXR1cF9jYW5jZWxfaGFuZGxlcih2b2lk ICgqcXVlcnlfY2FuY2VsX2NhbGxiYWNrKSAodm9pZCkpOwogCiAjZW5kaWYJCQkJCQkJLyogQ0FO Q0VMX0ggKi8KLS0gCjIuNTMuMAoK --7117fd8d597378ce0b11f088c5be594be4d71d04a133b287a4b0d3d697c6 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v4-0003-pg_dump-Don-t-use-the-deprecated-and-insecure-PQc.patch Content-Type: text/x-patch; charset=utf-8; name=v4-0003-pg_dump-Don-t-use-the-deprecated-and-insecure-PQc.patch RnJvbSBiOGYzYjM2MWE4Y2FiOWNiZmM1ZmY4Zjg0YTc5ZjgwN2VmOGRkZmJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTdW4sIDggRmViIDIwMjYgMTk6MDA6MTIgKzAxMDAKU3ViamVjdDogW1BBVENIIHY0 IDMvM10gcGdfZHVtcDogRG9uJ3QgdXNlIHRoZSBkZXByZWNhdGVkIGFuZCBpbnNlY3VyZQogUFFj YW5jZWwKCnBnX2R1bXAgc3RpbGwgdXNlZCBQUWNhbmNlbCB0byBzZW5kIGNhbmNlbCByZXF1ZXN0 cyB0byB0aGUgc2VydmVyIHdoZW4KdGhlIGR1bXAgd2FzIGNhbmNlbGxlZC4gVGhhdCBsaWJwcSBm dW5jdGlvbiBpcyBpbnNlY3VyZSwgYmVjYXVzZSBpdCBkb2VzCm5vdCB1c2UgZW5jcnlwdGlvbiB0 byBzZW5kIHRoZSBjYW5jZWwgcmVxdWVzdC4gVGhpcyBjb21taXQgc3RhcnRzIHVzaW5nIHRoZSBu ZXcKY2FuY2VsbGF0aW9uIEFQSXMgKGludHJvZHVjZWQgaW4gNjE0NjFhMzAwKSBpbiBwZ19kdW1w LiBUaGVzZSBBUElzIHVzZQp0aGUgc2FtZSBlbmNyeXB0aW9uIHNldHRpbmdzIGFzIHRoZSBjb25u ZWN0aW9uIHRoYXQncyBiZWluZyBjYW5jZWxsZWQuClNpbmNlIHRoZXNlIEFQSXMgYXJlIG5vdCBz aWduYWwtc2FmZSB0aGlzIHJlcXVpcmVkIGEgcmVmYWN0b3IgdG8gbm90CnNlbmQgdGhlIGNhbmNl bCByZXF1ZXN0IGluIGEgc2lnbmFsIGhhbmRsZXIgYW55bW9yZSwgYnV0IGluc3RlYWQgdXNpbmcg YQpkZWRpY2F0ZWQgdGhyZWFkLiBXaW5kb3dzIHdhcyBhbHJlYWR5IGRvaW5nIHRoYXQgdG9vLCBz byBub3cgdGhlIHBhdGhzCmNhbiBzaGFyZSBzb21lIGNvZGUuIFRoZXJlJ3Mgc3RpbGwgcXVpdGUg YSBiaXQgb2YgYmVoYXZpb3VyYWwgZGlmZmVyZW5jZQp0aG91Z2gsIGJlY2F1c2UgdGhlIHBnX2R1 bXAgaXMgdXNpbmcgdGhyZWFkcyBmb3IgcGFyYWxsZWxpc20gb24gV2luZG93cywKYnV0IHByb2Nl c3NlcyBvbiBVbml4ZXMuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlICAgICAgICAgICAg IHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDIgKwog c3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMgICAgICAgICAgIHwgNDA0ICsrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIHwgICAy ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggfCAgIDggKy0KIHNyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfZGIuYyAgICAgICB8ICAgNyArLQogNiBmaWxlcyBjaGFuZ2Vk LCAyMjIgaW5zZXJ0aW9ucygrKSwgMjAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCA3OTA3 M2IwYTBlYS4uZjc2MzQ2YzRmNmMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmls ZQorKysgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKQEAgLTIxLDcgKzIxLDcgQEAgZXhwb3J0 IExaNAogZXhwb3J0IFpTVEQKIGV4cG9ydCB3aXRoX2ljdQogCi1vdmVycmlkZSBDUFBGTEFHUyA6 PSAtSSQobGlicHFfc3JjZGlyKSAkKENQUEZMQUdTKQorb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkk KGxpYnBxX3NyY2RpcikgLUkkKHRvcF9zcmNkaXIpL3NyYy9wb3J0ICQoQ1BQRkxBR1MpCiBMREZM QUdTX0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRkaXIpL3NyYy9mZV91dGlscyAtbHBnZmV1dGls cyAkKGxpYnBxX3BncG9ydCkKIAogT0JKUyA9IFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCA3YzlhNDc1 OTYzYi4uYzc3MmNkMGUyYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWls ZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTIyLDYgKzIyLDggQEAgcGdf ZHVtcF9jb21tb25fc291cmNlcyA9IGZpbGVzKAogcGdfZHVtcF9jb21tb24gPSBzdGF0aWNfbGli cmFyeSgnbGlicGdkdW1wX2NvbW1vbicsCiAgIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMsCiAgIGNf cGNoOiBwY2hfcG9zdGdyZXNfZmVfaCwKKyAgIyBwb3J0IG5lZWRzIHRvIGJlIGluIGluY2x1ZGUg cGF0aCBkdWUgdG8gcHRocmVhZC13aW4zMi5oCisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IFsnLi4v Li4vcG9ydCddLAogICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgbHo0LCB6 bGliLCB6c3RkXSwKICAga3dhcmdzOiBpbnRlcm5hbF9saWJfYXJncywKICkKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMK aW5kZXggYTI4NTYxZmJkODQuLmNjMmZkN2VlY2Y3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGFyYWxsZWwuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwpAQCAtNTgsOCAr NTgsMTIgQEAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNs dWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbHNlCisjaW5jbHVkZSAicHRo cmVhZC13aW4zMi5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgogI2lu Y2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCiAj aW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCkBAIC0xNjcsNiArMTcxLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgRHVtcFNpZ25hbEluZm9ybWF0aW9uCiAJQXJjaGl2ZUhhbmRsZSAqbXlBSDsJCS8qIGRh dGFiYXNlIGNvbm5lY3Rpb24gdG8gaXNzdWUgY2FuY2VsIGZvciAqLwogCVBhcmFsbGVsU3RhdGUg KnBzdGF0ZTsJCS8qIHBhcmFsbGVsIHN0YXRlLCBpZiBhbnkgKi8KIAlib29sCQloYW5kbGVyX3Nl dDsJLyogc2lnbmFsIGhhbmRsZXIgc2V0IHVwIGluIHRoaXMgcHJvY2Vzcz8gKi8KKwlib29sCQlj YW5jZWxfcmVxdWVzdGVkOwkvKiBjYW5jZWwgcmVxdWVzdGVkIHZpYSBzaWduYWw/ICovCiAjaWZu ZGVmIFdJTjMyCiAJYm9vbAkJYW1fd29ya2VyOwkJLyogYW0gSSBhIHdvcmtlciBwcm9jZXNzPyAq LwogI2VuZGlmCkBAIC0xNzQsOCArMTc5LDIwIEBAIHR5cGVkZWYgc3RydWN0IER1bXBTaWduYWxJ bmZvcm1hdGlvbgogCiBzdGF0aWMgdm9sYXRpbGUgRHVtcFNpZ25hbEluZm9ybWF0aW9uIHNpZ25h bF9pbmZvOwogCi0jaWZkZWYgV0lOMzIKLXN0YXRpYyBDUklUSUNBTF9TRUNUSU9OIHNpZ25hbF9p bmZvX2xvY2s7CisvKgorICogTXV0ZXggcHJvdGVjdGluZyBzaWduYWxfaW5mbyBkdXJpbmcgY2Fu Y2VsIG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyBwdGhyZWFkX211dGV4X3Qgc2lnbmFsX2luZm9f bG9jazsKKworI2lmbmRlZiBXSU4zMgorLyoKKyAqIE9uIFVuaXgsIHRoZSBzaWduYWwgaGFuZGxl ciBjYW5ub3QgY2FsbCBQUWNhbmNlbEJsb2NraW5nKCkgZGlyZWN0bHkgYmVjYXVzZQorICogaXQg aXMgbm90IGFzeW5jLXNpZ25hbC1zYWZlLiAgSW5zdGVhZCwgd2UgdXNlIGEgcGlwZSB0byB3YWtl IGEgZGVkaWNhdGVkCisgKiBjYW5jZWwgdGhyZWFkOiB0aGUgc2lnbmFsIGhhbmRsZXIgd3JpdGVz IGEgYnl0ZSB0byB0aGUgcGlwZSwgYW5kIHRoZSBjYW5jZWwKKyAqIHRocmVhZCdzIGJsb2NraW5n IHJlYWQoKSByZXR1cm5zLCB0cmlnZ2VyaW5nIHRoZSBhY3R1YWwgY2FuY2VsIHJlcXVlc3RzLgor ICovCitzdGF0aWMgaW50CWNhbmNlbF9waXBlWzJdID0gey0xLCAtMX07CitzdGF0aWMgcHRocmVh ZF90IGNhbmNlbF90aHJlYWQ7CiAjZW5kaWYKIAogLyoKQEAgLTIwOSw2ICsyMjYsNyBAQCBzdGF0 aWMgdm9pZCBXYWl0Rm9yVGVybWluYXRpbmdXb3JrZXJzKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSk7 CiBzdGF0aWMgdm9pZCBzZXRfY2FuY2VsX2hhbmRsZXIodm9pZCk7CiBzdGF0aWMgdm9pZCBzZXRf Y2FuY2VsX3BzdGF0ZShQYXJhbGxlbFN0YXRlICpwc3RhdGUpOwogc3RhdGljIHZvaWQgc2V0X2Nh bmNlbF9zbG90X2FyY2hpdmUoUGFyYWxsZWxTbG90ICpzbG90LCBBcmNoaXZlSGFuZGxlICpBSCk7 CitzdGF0aWMgdm9pZCBTdG9wV29ya2Vycyh2b2lkKTsKIHN0YXRpYyB2b2lkIFJ1bldvcmtlcihB cmNoaXZlSGFuZGxlICpBSCwgUGFyYWxsZWxTbG90ICpzbG90KTsKIHN0YXRpYyBpbnQJR2V0SWRs ZVdvcmtlcihQYXJhbGxlbFN0YXRlICpwc3RhdGUpOwogc3RhdGljIGJvb2wgSGFzRXZlcnlXb3Jr ZXJUZXJtaW5hdGVkKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSk7CkBAIC00MjQsMzIgKzQ0Miw5IEBA IFNodXRkb3duV29ya2Vyc0hhcmQoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKQogCS8qCiAJICogRm9y Y2UgZWFybHkgdGVybWluYXRpb24gb2YgYW55IGNvbW1hbmRzIGN1cnJlbnRseSBpbiBwcm9ncmVz cy4KIAkgKi8KLSNpZm5kZWYgV0lOMzIKLQkvKiBPbiBub24tV2luZG93cywgc2VuZCBTSUdURVJN IHRvIGVhY2ggd29ya2VyIHByb2Nlc3MuICovCi0JZm9yIChpID0gMDsgaSA8IHBzdGF0ZS0+bnVt V29ya2VyczsgaSsrKQotCXsKLQkJcGlkX3QJCXBpZCA9IHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ld LnBpZDsKLQotCQlpZiAocGlkICE9IDApCi0JCQlraWxsKHBpZCwgU0lHVEVSTSk7Ci0JfQotI2Vs c2UKLQotCS8qCi0JICogT24gV2luZG93cywgc2VuZCBxdWVyeSBjYW5jZWxzIGRpcmVjdGx5IHRv IHRoZSB3b3JrZXJzJyBiYWNrZW5kcy4gIFVzZQotCSAqIGEgY3JpdGljYWwgc2VjdGlvbiB0byBl bnN1cmUgd29ya2VyIHRocmVhZHMgZG9uJ3QgY2hhbmdlIHN0YXRlLgotCSAqLwotCUVudGVyQ3Jp dGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgcHN0YXRl LT5udW1Xb3JrZXJzOyBpKyspCi0JewotCQlBcmNoaXZlSGFuZGxlICpBSCA9IHBzdGF0ZS0+cGFy YWxsZWxTbG90W2ldLkFIOwotCQljaGFyCQllcnJidWZbMV07Ci0KLQkJaWYgKEFIICE9IE5VTEwg JiYgQUgtPmNvbm5DYW5jZWwgIT0gTlVMTCkKLQkJCSh2b2lkKSBQUWNhbmNlbChBSC0+Y29ubkNh bmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7Ci0JfQotCUxlYXZlQ3JpdGljYWxTZWN0aW9u KCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgorCXB0aHJlYWRfbXV0ZXhfbG9jaygmc2lnbmFs X2luZm9fbG9jayk7CisJU3RvcFdvcmtlcnMoKTsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmc2ln bmFsX2luZm9fbG9jayk7CiAKIAkvKiBOb3cgd2FpdCBmb3IgdGhlbSB0byB0ZXJtaW5hdGUuICov CiAJV2FpdEZvclRlcm1pbmF0aW5nV29ya2Vycyhwc3RhdGUpOwpAQCAtNTMzLDc0ICs1MjgsNTQg QEAgV2FpdEZvclRlcm1pbmF0aW5nV29ya2VycyhQYXJhbGxlbFN0YXRlICpwc3RhdGUpCiAgKiBj b3VsZCBsZWF2ZSBhIFNRTCBjb21tYW5kIChlLmcuLCBDUkVBVEUgSU5ERVggb24gYSBsYXJnZSB0 YWJsZSkgcnVubmluZwogICogZm9yIGEgbG9uZyB0aW1lLiAgSW5zdGVhZCwgd2UgdHJ5IHRvIHNl bmQgYSBjYW5jZWwgcmVxdWVzdCBhbmQgdGhlbiBkaWUuCiAgKiBwZ19kdW1wIHByb2JhYmx5IGRv ZXNuJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgdXNlIGl0Ci0gKiB0 aGVyZSB0b28uICBOb3RlIHRoYXQgc2VuZGluZyB0aGUgY2FuY2VsIGRpcmVjdGx5IGZyb20gdGhl IHNpZ25hbCBoYW5kbGVyCi0gKiBpcyBzYWZlIGJlY2F1c2UgUFFjYW5jZWwoKSBpcyB3cml0dGVu IHRvIG1ha2UgaXQgc28uCisgKiB0aGVyZSB0b28uCiAgKgotICogSW4gcGFyYWxsZWwgb3BlcmF0 aW9uIG9uIFVuaXgsIGVhY2ggcHJvY2VzcyBpcyByZXNwb25zaWJsZSBmb3IgY2FuY2VsaW5nCi0g KiBpdHMgb3duIGNvbm5lY3Rpb24gKHRoaXMgbXVzdCBiZSBzbyBiZWNhdXNlIG5vYm9keSBlbHNl IGhhcyBhY2Nlc3MgdG8gaXQpLgotICogRnVydGhlcm1vcmUsIHRoZSBsZWFkZXIgcHJvY2VzcyBz aG91bGQgYXR0ZW1wdCB0byBmb3J3YXJkIGl0cyBzaWduYWwgdG8KLSAqIGVhY2ggY2hpbGQuICBJ biBzaW1wbGUgbWFudWFsIHVzZSBvZiBwZ19kdW1wL3BnX3Jlc3RvcmUsIGZvcndhcmRpbmcgaXNu J3QKLSAqIG5lZWRlZCBiZWNhdXNlIHR5cGluZyBjb250cm9sLUMgYXQgdGhlIGNvbnNvbGUgd291 bGQgZGVsaXZlciBTSUdJTlQgdG8KLSAqIGV2ZXJ5IG1lbWJlciBvZiB0aGUgdGVybWluYWwgcHJv Y2VzcyBncm91cCAtLS0gYnV0IGluIG90aGVyIHNjZW5hcmlvcyBpdAotICogbWlnaHQgYmUgdGhh dCBvbmx5IHRoZSBsZWFkZXIgZ2V0cyBzaWduYWxlZC4KKyAqIE9uIFVuaXgsIHRoZSBzaWduYWwg aGFuZGxlciB3YWtlcyB1cCBhIGRlZGljYXRlZCBjYW5jZWwgdGhyZWFkIHZpYSBhCisgKiBzZWxm LXBpcGUsIHdoaWNoIHRoZW4gc2VuZHMgdGhlIGNhbmNlbCBhbmQgY2FsbHMgX2V4aXQoKS4gIFRo aXMgdGhyZWFkIGFsc28KKyAqIGZvcndhcmRzIHRoZSBzaWduYWwgdG8gZWFjaCBjaGlsZCBzbyB0 aGV5IGNhbiBhbHNvIGNhbmNlbCB0aGVpciBxdWVyaWVzLiBJbgorICogc2ltcGxlIG1hbnVhbCB1 c2Ugb2YgcGdfZHVtcC9wZ19yZXN0b3JlLCBmb3J3YXJkaW5nIGlzbid0IG5lZWRlZCBiZWNhdXNl CisgKiB0eXBpbmcgY29udHJvbC1DIGF0IHRoZSBjb25zb2xlIHdvdWxkIGRlbGl2ZXIgU0lHSU5U IHRvIGV2ZXJ5IG1lbWJlciBvZiB0aGUKKyAqIHRlcm1pbmFsIHByb2Nlc3MgZ3JvdXAgLS0tIGJ1 dCBpbiBvdGhlciBzY2VuYXJpb3MgaXQgbWlnaHQgYmUgdGhhdCBvbmx5IHRoZQorICogbGVhZGVy IGdldHMgc2lnbmFsZWQuCiAgKgogICogT24gV2luZG93cywgdGhlIGNhbmNlbCBoYW5kbGVyIHJ1 bnMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGJlY2F1c2UgdGhhdCdzCiAgKiBob3cgU2V0Q29uc29s ZUN0cmxIYW5kbGVyIHdvcmtzLiAgV2UgbWFrZSBpdCBzdG9wIHdvcmtlciB0aHJlYWRzLCBzZW5k CiAgKiBjYW5jZWxzIG9uIGFsbCBhY3RpdmUgY29ubmVjdGlvbnMsIGFuZCB0aGVuIHJldHVybiBG QUxTRSwgd2hpY2ggd2lsbCBhbGxvdwogICogdGhlIHByb2Nlc3MgdG8gZGllLiAgRm9yIHNhZmV0 eSdzIHNha2UsIHdlIHVzZSBhIGNyaXRpY2FsIHNlY3Rpb24gdG8KLSAqIHByb3RlY3QgdGhlIFBH Y2FuY2VsIHN0cnVjdHVyZXMgYWdhaW5zdCBiZWluZyBjaGFuZ2VkIHdoaWxlIHRoZSBzaWduYWwK KyAqIHByb3RlY3QgdGhlIFBHY2FuY2VsQ29ubiBzdHJ1Y3R1cmVzIGFnYWluc3QgYmVpbmcgY2hh bmdlZCB3aGlsZSB0aGUgc2lnbmFsCiAgKiB0aHJlYWQgcnVucy4KICAqLwogCi0jaWZuZGVmIFdJ TjMyCi0KIC8qCi0gKiBTaWduYWwgaGFuZGxlciAoVW5peCBvbmx5KQorICogQ2FuY2VsIGFsbCBh Y3RpdmUgcXVlcmllcyBhbmQgcHJpbnQgdGVybWluYXRpb24gbWVzc2FnZS4KICAqLwogc3RhdGlj IHZvaWQKLXNpZ1Rlcm1IYW5kbGVyKFNJR05BTF9BUkdTKQorQ2FuY2VsQmFja2VuZHModm9pZCkK IHsKLQlpbnQJCQlpOwotCWNoYXIJCWVycmJ1ZlsxXTsKKwlwdGhyZWFkX211dGV4X2xvY2soJnNp Z25hbF9pbmZvX2xvY2spOwogCi0JLyoKLQkgKiBTb21lIHBsYXRmb3JtcyBhbGxvdyBkZWxpdmVy eSBvZiBuZXcgc2lnbmFscyB0byBpbnRlcnJ1cHQgYW4gYWN0aXZlCi0JICogc2lnbmFsIGhhbmRs ZXIuICBUaGF0IGNvdWxkIG11Y2sgdXAgb3VyIGF0dGVtcHQgdG8gc2VuZCBQUWNhbmNlbCwgc28K LQkgKiBkaXNhYmxlIHRoZSBzaWduYWxzIHRoYXQgc2V0X2NhbmNlbF9oYW5kbGVyIGVuYWJsZWQu Ci0JICovCi0JcHFzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdURVJNLCBT SUdfSUdOKTsKLQlwcXNpZ25hbChTSUdRVUlULCBTSUdfSUdOKTsKKwlzaWduYWxfaW5mby5jYW5j ZWxfcmVxdWVzdGVkID0gdHJ1ZTsKIAogCS8qCi0JICogSWYgd2UncmUgaW4gdGhlIGxlYWRlciwg Zm9yd2FyZCBzaWduYWwgdG8gYWxsIHdvcmtlcnMuICAoSXQgc2VlbXMgYmVzdAotCSAqIHRvIGRv IHRoaXMgYmVmb3JlIFBRY2FuY2VsOyBraWxsaW5nIHRoZSBsZWFkZXIgdHJhbnNhY3Rpb24gd2ls bCByZXN1bHQKLQkgKiBpbiBpbnZhbGlkLXNuYXBzaG90IGVycm9ycyBmcm9tIGFjdGl2ZSB3b3Jr ZXJzLCB3aGljaCBtYXliZSB3ZSBjYW4KLQkgKiBxdWlldCBieSBraWxsaW5nIHdvcmtlcnMgZmly c3QuKSAgSWdub3JlIGFueSBlcnJvcnMuCisJICogU3RvcCB3b3JrZXJzIGZpcnN0IHRvIGF2b2lk IGludmFsaWQtc25hcHNob3QgZXJyb3JzIGlmIHRoZSBsZWFkZXIKKwkgKiBjYW5jZWxzIGJlZm9y ZSB3b3JrZXJzLgogCSAqLwotCWlmIChzaWduYWxfaW5mby5wc3RhdGUgIT0gTlVMTCkKLQl7Ci0J CWZvciAoaSA9IDA7IGkgPCBzaWduYWxfaW5mby5wc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKLQkJ ewotCQkJcGlkX3QJCXBpZCA9IHNpZ25hbF9pbmZvLnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBp ZDsKKwlTdG9wV29ya2VycygpOwogCi0JCQlpZiAocGlkICE9IDApCi0JCQkJa2lsbChwaWQsIFNJ R1RFUk0pOwotCQl9Ci0JfQorCWlmIChzaWduYWxfaW5mby5teUFIICE9IE5VTEwgJiYgc2lnbmFs X2luZm8ubXlBSC0+Y2FuY2VsQ29ubiAhPSBOVUxMKQorCQkodm9pZCkgUFFjYW5jZWxCbG9ja2lu ZyhzaWduYWxfaW5mby5teUFILT5jYW5jZWxDb25uKTsKIAotCS8qCi0JICogU2VuZCBRdWVyeUNh bmNlbCBpZiB3ZSBoYXZlIGEgY29ubmVjdGlvbiB0byBzZW5kIHRvLiAgSWdub3JlIGVycm9ycywK LQkgKiB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCB0aGVtIGFueXdheS4KLQkgKi8K LQlpZiAoc2lnbmFsX2luZm8ubXlBSCAhPSBOVUxMICYmIHNpZ25hbF9pbmZvLm15QUgtPmNvbm5D YW5jZWwgIT0gTlVMTCkKLQkJKHZvaWQpIFBRY2FuY2VsKHNpZ25hbF9pbmZvLm15QUgtPmNvbm5D YW5jZWwsIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZz aWduYWxfaW5mb19sb2NrKTsKIAogCS8qCi0JICogUmVwb3J0IHdlJ3JlIHF1aXR0aW5nLCB1c2lu ZyBub3RoaW5nIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB3cml0ZSgyKS4KLQkgKiBXaGVuIGluIHBh cmFsbGVsIG9wZXJhdGlvbiwgb25seSB0aGUgbGVhZGVyIHByb2Nlc3Mgc2hvdWxkIGRvIHRoaXMu CisJICogUHJpbnQgdGVybWluYXRpb24gbWVzc2FnZS4gSW4gcGFyYWxsZWwgb3BlcmF0aW9uLCBv bmx5IHRoZSBsZWFkZXIKKwkgKiBzaG91bGQgcHJpbnQgdGhpcy4gT24gV2luZG93cywgd29ya2Vy cyBhcmUgdGhyZWFkcyBpbiB0aGUgc2FtZSBwcm9jZXNzCisJICogYW5kIHRoZSBjb25zb2xlIGhh bmRsZXIgb25seSBydW5zIGluIHRoZSBsZWFkZXIgY29udGV4dCwgc28gd2UgY2FuCisJICogYWx3 YXlzIHByaW50IGl0LgogCSAqLworI2lmbmRlZiBXSU4zMgogCWlmICghc2lnbmFsX2luZm8uYW1f d29ya2VyKQorI2VuZGlmCiAJewogCQlpZiAocHJvZ25hbWUpCiAJCXsKQEAgLTYwOSwxNzIgKzU4 NCwyMDQgQEAgc2lnVGVybUhhbmRsZXIoU0lHTkFMX0FSR1MpCiAJCX0KIAkJd3JpdGVfc3RkZXJy KCJ0ZXJtaW5hdGVkIGJ5IHVzZXJcbiIpOwogCX0KLQotCS8qCi0JICogQW5kIGRpZSwgdXNpbmcg X2V4aXQoKSBub3QgZXhpdCgpIGJlY2F1c2UgdGhlIGxhdHRlciB3aWxsIGludm9rZSBhdGV4aXQK LQkgKiBoYW5kbGVycyB0aGF0IGNhbiBmYWlsIGlmIHdlIGludGVycnVwdGVkIHJlbGF0ZWQgY29k ZS4KLQkgKi8KLQlfZXhpdCgxKTsKIH0KIAogLyoKLSAqIEVuYWJsZSBjYW5jZWwgaW50ZXJydXB0 IGhhbmRsZXIsIGlmIG5vdCBhbHJlYWR5IGRvbmUuCisgKiBTdG9wIGFsbCB3b3JrZXIgcHJvY2Vz c2VzL3RocmVhZHMuCisgKgorICogT24gVW5peCwgc2VuZCBTSUdURVJNIHRvIGVhY2ggd29ya2Vy IHByb2Nlc3M7IHRoZWlyIHNpZ25hbCBoYW5kbGVycyB3aWxsCisgKiBzZW5kIGNhbmNlbCByZXF1 ZXN0cyB0byB0aGVpciBiYWNrZW5kcy4KKyAqCisgKiBPbiBXaW5kb3dzLCB3b3JrZXJzIGFyZSB0 aHJlYWRzIGluIHRoZSBzYW1lIHByb2Nlc3MsIHNvIHdlIHNlbmQgY2FuY2VsCisgKiByZXF1ZXN0 cyBkaXJlY3RseSB0byB0aGVpciBiYWNrZW5kcy4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHNp Z25hbF9pbmZvX2xvY2suCiAgKi8KIHN0YXRpYyB2b2lkCi1zZXRfY2FuY2VsX2hhbmRsZXIodm9p ZCkKK1N0b3BXb3JrZXJzKHZvaWQpCiB7Ci0JLyoKLQkgKiBXaGVuIGZvcmtpbmcsIHNpZ25hbF9p bmZvLmhhbmRsZXJfc2V0IHdpbGwgcHJvcGFnYXRlIGludG8gdGhlIG5ldwotCSAqIHByb2Nlc3Ms IGJ1dCB0aGF0J3MgZmluZSBiZWNhdXNlIHRoZSBzaWduYWwgaGFuZGxlciBzdGF0ZSBkb2VzIHRv by4KLQkgKi8KLQlpZiAoIXNpZ25hbF9pbmZvLmhhbmRsZXJfc2V0KQorCWludAkJCWk7CisKKwlp ZiAoc2lnbmFsX2luZm8ucHN0YXRlID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7 IGkgPCBzaWduYWxfaW5mby5wc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKIAl7Ci0JCXNpZ25hbF9p bmZvLmhhbmRsZXJfc2V0ID0gdHJ1ZTsKKyNpZm5kZWYgV0lOMzIKKwkJcGlkX3QJCXBpZCA9IHNp Z25hbF9pbmZvLnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpZDsKKworCQlpZiAocGlkICE9IDAp CisJCQlraWxsKHBpZCwgU0lHVEVSTSk7CisjZWxzZQorCQlBcmNoaXZlSGFuZGxlICpBSCA9IHNp Z25hbF9pbmZvLnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLkFIOwogCi0JCXBxc2lnbmFsKFNJR0lO VCwgc2lnVGVybUhhbmRsZXIpOwotCQlwcXNpZ25hbChTSUdURVJNLCBzaWdUZXJtSGFuZGxlcik7 Ci0JCXBxc2lnbmFsKFNJR1FVSVQsIHNpZ1Rlcm1IYW5kbGVyKTsKKwkJaWYgKEFIICE9IE5VTEwg JiYgQUgtPmNhbmNlbENvbm4gIT0gTlVMTCkKKwkJCSh2b2lkKSBQUWNhbmNlbEJsb2NraW5nKEFI LT5jYW5jZWxDb25uKTsKKyNlbmRpZgogCX0KIH0KIAotI2Vsc2UJCQkJCQkJLyogV0lOMzIgKi8K KyNpZmRlZiBXSU4zMgogCiAvKgogICogQ29uc29sZSBpbnRlcnJ1cHQgaGFuZGxlciAtLS0gcnVu cyBpbiBhIG5ld2x5LXN0YXJ0ZWQgdGhyZWFkLgogICoKLSAqIEFmdGVyIHN0b3BwaW5nIG90aGVy IHRocmVhZHMgYW5kIHNlbmRpbmcgY2FuY2VsIHJlcXVlc3RzIG9uIGFsbCBvcGVuCi0gKiBjb25u ZWN0aW9ucywgd2UgcmV0dXJuIEZBTFNFIHdoaWNoIHdpbGwgYWxsb3cgdGhlIGRlZmF1bHQgRXhp dFByb2Nlc3MoKQotICogYWN0aW9uIHRvIGJlIHRha2VuLgorICogU2VuZCBjYW5jZWwgcmVxdWVz dHMgb24gYWxsIG9wZW4gY29ubmVjdGlvbnMgYW5kIHJldHVybiBGQUxTRSB0byBhbGxvdworICog dGhlIGRlZmF1bHQgRXhpdFByb2Nlc3MoKSBhY3Rpb24gdG8gdGVybWluYXRlIHRoZSBwcm9jZXNz LgogICovCiBzdGF0aWMgQk9PTCBXSU5BUEkKIGNvbnNvbGVIYW5kbGVyKERXT1JEIGR3Q3RybFR5 cGUpCiB7Ci0JaW50CQkJaTsKLQljaGFyCQllcnJidWZbMV07Ci0KIAlpZiAoZHdDdHJsVHlwZSA9 PSBDVFJMX0NfRVZFTlQgfHwKIAkJZHdDdHJsVHlwZSA9PSBDVFJMX0JSRUFLX0VWRU5UKQogCXsK LQkJLyogQ3JpdGljYWwgc2VjdGlvbiBwcmV2ZW50cyBjaGFuZ2luZyBkYXRhIHdlIGxvb2sgYXQg aGVyZSAqLwotCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7CisJCUNh bmNlbEJhY2tlbmRzKCk7CisJfQogCi0JCS8qCi0JCSAqIElmIGluIHBhcmFsbGVsIG1vZGUsIHN0 b3Agd29ya2VyIHRocmVhZHMgYW5kIHNlbmQgUXVlcnlDYW5jZWwgdG8KLQkJICogdGhlaXIgY29u bmVjdGVkIGJhY2tlbmRzLiAgVGhlIG1haW4gcG9pbnQgb2Ygc3RvcHBpbmcgdGhlIHdvcmtlcgot CQkgKiB0aHJlYWRzIGlzIHRvIGtlZXAgdGhlbSBmcm9tIHJlcG9ydGluZyB0aGUgcXVlcnkgY2Fu Y2VscyBhcyBlcnJvcnMsCi0JCSAqIHdoaWNoIHdvdWxkIGNsdXR0ZXIgdGhlIHVzZXIncyBzY3Jl ZW4uICBXZSBuZWVkbid0IHN0b3AgdGhlIGxlYWRlcgotCQkgKiB0aHJlYWQgc2luY2UgaXQgd29u J3QgYmUgZG9pbmcgbXVjaCBhbnl3YXkuICBEbyB0aGlzIGJlZm9yZQotCQkgKiBjYW5jZWxpbmcg dGhlIG1haW4gdHJhbnNhY3Rpb24sIGVsc2Ugd2UgbWlnaHQgZ2V0IGludmFsaWQtc25hcHNob3QK LQkJICogZXJyb3JzIHJlcG9ydGVkIGJlZm9yZSB3ZSBjYW4gc3RvcCB0aGUgd29ya2Vycy4gIEln bm9yZSBlcnJvcnMsCi0JCSAqIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IHRoZW0g YW55d2F5LgotCQkgKi8KLQkJaWYgKHNpZ25hbF9pbmZvLnBzdGF0ZSAhPSBOVUxMKQorCS8qIEFs d2F5cyByZXR1cm4gRkFMU0UgdG8gYWxsb3cgc2lnbmFsIGhhbmRsaW5nIHRvIGNvbnRpbnVlICov CisJcmV0dXJuIEZBTFNFOworfQorCisjZWxzZQkJCQkJCQkvKiAhV0lOMzIgKi8KKworLyoKKyAq IENhbmNlbCB0aHJlYWQgbWFpbiBmdW5jdGlvbi4gV2FpdHMgZm9yIHRoZSBzaWduYWwgaGFuZGxl ciB0byB3cml0ZSB0byB0aGUKKyAqIHBpcGUsIHRoZW4gY2FuY2VscyBiYWNrZW5kcyBhbmQgY2Fs bHMgX2V4aXQoKS4KKyAqLworc3RhdGljIHZvaWQgKgorY2FuY2VsX3RocmVhZF9tYWluKHZvaWQg KmFyZykKK3sKKwlmb3IgKDs7KQorCXsKKwkJY2hhcgkJYnVmWzE2XTsKKwkJc3NpemVfdAkJcmM7 CisKKwkJLyogV2FpdCBmb3Igc2lnbmFsIGhhbmRsZXIgdG8gd2FrZSB1cyB1cCAqLworCQlyYyA9 IHJlYWQoY2FuY2VsX3BpcGVbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlpZiAocmMgPD0gMCkK IAkJewotCQkJZm9yIChpID0gMDsgaSA8IHNpZ25hbF9pbmZvLnBzdGF0ZS0+bnVtV29ya2Vyczsg aSsrKQotCQkJewotCQkJCVBhcmFsbGVsU2xvdCAqc2xvdCA9ICYoc2lnbmFsX2luZm8ucHN0YXRl LT5wYXJhbGxlbFNsb3RbaV0pOwotCQkJCUFyY2hpdmVIYW5kbGUgKkFIID0gc2xvdC0+QUg7Ci0J CQkJSEFORExFCQloVGhyZWFkID0gKEhBTkRMRSkgc2xvdC0+aFRocmVhZDsKLQotCQkJCS8qCi0J CQkJICogVXNpbmcgVGVybWluYXRlVGhyZWFkIGhlcmUgbWF5IGxlYXZlIHNvbWUgcmVzb3VyY2Vz IGxlYWtlZCwKLQkJCQkgKiBidXQgaXQgZG9lc24ndCBtYXR0ZXIgc2luY2Ugd2UncmUgYWJvdXQg dG8gZW5kIHRoZSB3aG9sZQotCQkJCSAqIHByb2Nlc3MuCi0JCQkJICovCi0JCQkJaWYgKGhUaHJl YWQgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0JCQkJCVRlcm1pbmF0ZVRocmVhZChoVGhyZWFk LCAwKTsKLQotCQkJCWlmIChBSCAhPSBOVUxMICYmIEFILT5jb25uQ2FuY2VsICE9IE5VTEwpCi0J CQkJCSh2b2lkKSBQUWNhbmNlbChBSC0+Y29ubkNhbmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVm KSk7Ci0JCQl9CisJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJY29udGludWU7CisJCQkvKiBQ aXBlIGNsb3NlZCBvciBlcnJvciAtIGV4aXQgdGhyZWFkICovCisJCQlicmVhazsKIAkJfQogCi0J CS8qCi0JCSAqIFNlbmQgUXVlcnlDYW5jZWwgdG8gbGVhZGVyIGNvbm5lY3Rpb24sIGlmIGVuYWJs ZWQuICBJZ25vcmUgZXJyb3JzLAotCQkgKiB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91 dCB0aGVtIGFueXdheS4KLQkJICovCi0JCWlmIChzaWduYWxfaW5mby5teUFIICE9IE5VTEwgJiYg c2lnbmFsX2luZm8ubXlBSC0+Y29ubkNhbmNlbCAhPSBOVUxMKQotCQkJKHZvaWQpIFBRY2FuY2Vs KHNpZ25hbF9pbmZvLm15QUgtPmNvbm5DYW5jZWwsCi0JCQkJCQkJZXJyYnVmLCBzaXplb2YoZXJy YnVmKSk7Ci0KLQkJTGVhdmVDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOworCQlD YW5jZWxCYWNrZW5kcygpOwogCiAJCS8qCi0JCSAqIFJlcG9ydCB3ZSdyZSBxdWl0dGluZywgdXNp bmcgbm90aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4KLQkJICogd3JpdGUoMikuICAoV2UgbWln aHQgYmUgYWJsZSB0byBnZXQgYXdheSB3aXRoIHVzaW5nIHBnX2xvZ18qKCkKLQkJICogaGVyZSwg YnV0IHNpbmNlIHdlIHRlcm1pbmF0ZWQgb3RoZXIgdGhyZWFkcyB1bmNsZWFubHkgYWJvdmUsIGl0 Ci0JCSAqIHNlZW1zIGJldHRlciB0byBhc3N1bWUgYXMgbGl0dGxlIGFzIHBvc3NpYmxlLikKKwkJ ICogQW5kIGRpZSwgdXNpbmcgX2V4aXQoKSBub3QgZXhpdCgpIGJlY2F1c2UgdGhlIGxhdHRlciB3 aWxsIGludm9rZQorCQkgKiBhdGV4aXQgaGFuZGxlcnMgdGhhdCBjYW4gZmFpbCBpZiB3ZSBpbnRl cnJ1cHRlZCByZWxhdGVkIGNvZGUuCiAJCSAqLwotCQlpZiAocHJvZ25hbWUpCi0JCXsKLQkJCXdy aXRlX3N0ZGVycihwcm9nbmFtZSk7Ci0JCQl3cml0ZV9zdGRlcnIoIjogIik7Ci0JCX0KLQkJd3Jp dGVfc3RkZXJyKCJ0ZXJtaW5hdGVkIGJ5IHVzZXJcbiIpOworCQlfZXhpdCgxKTsKIAl9CiAKLQkv KiBBbHdheXMgcmV0dXJuIEZBTFNFIHRvIGFsbG93IHNpZ25hbCBoYW5kbGluZyB0byBjb250aW51 ZSAqLwotCXJldHVybiBGQUxTRTsKKwlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIFNpZ25hbCBo YW5kbGVyIChVbml4IG9ubHkpLiAgV2FrZXMgdXAgdGhlIGNhbmNlbCB0aHJlYWQgYnkgd3JpdGlu ZyB0byB0aGUKKyAqIHBpcGUuCisgKi8KK3N0YXRpYyB2b2lkCitzaWdUZXJtSGFuZGxlcihTSUdO QUxfQVJHUykKK3sKKwlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87CisJY2hhcgkJYyA9IDE7CisK KwkvKiBXYWtlIHVwIHRoZSBjYW5jZWwgdGhyZWFkIC0gd3JpdGUoKSBpcyBhc3luYy1zaWduYWwt c2FmZSAqLworCWlmIChjYW5jZWxfcGlwZVsxXSA+PSAwKQorCQkodm9pZCkgd3JpdGUoY2FuY2Vs X3BpcGVbMV0sICZjLCAxKTsKKworCWVycm5vID0gc2F2ZV9lcnJubzsKK30KKworI2VuZGlmCQkJ CQkJCS8qIFdJTjMyICovCisKIC8qCiAgKiBFbmFibGUgY2FuY2VsIGludGVycnVwdCBoYW5kbGVy LCBpZiBub3QgYWxyZWFkeSBkb25lLgogICovCiBzdGF0aWMgdm9pZAogc2V0X2NhbmNlbF9oYW5k bGVyKHZvaWQpCiB7Ci0JaWYgKCFzaWduYWxfaW5mby5oYW5kbGVyX3NldCkKKwlpZiAoc2lnbmFs X2luZm8uaGFuZGxlcl9zZXQpCisJCXJldHVybjsKKworCXNpZ25hbF9pbmZvLmhhbmRsZXJfc2V0 ID0gdHJ1ZTsKKworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2lnbmFsX2luZm9fbG9jaywgTlVMTCk7 CisKKyNpZmRlZiBXSU4zMgorCVNldENvbnNvbGVDdHJsSGFuZGxlcihjb25zb2xlSGFuZGxlciwg VFJVRSk7CisjZWxzZQorCisJLyoKKwkgKiBDcmVhdGUgdGhlIHBpcGUgYW5kIGNhbmNlbCB0aHJl YWQgKHNlZSBjb21tZW50IG9uIGNhbmNlbF9waXBlIGFib3ZlKS4KKwkgKi8KKwlpZiAocGlwZShj YW5jZWxfcGlwZSkgPCAwKQogCXsKLQkJc2lnbmFsX2luZm8uaGFuZGxlcl9zZXQgPSB0cnVlOwor CQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgcGlwZSBmb3IgY2FuY2VsOiAlbSIpOwor CQlleGl0KDEpOworCX0KIAotCQlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5m b19sb2NrKTsKKwkvKgorCSAqIE1ha2UgdGhlIHdyaXRlIGVuZCBub24tYmxvY2tpbmcsIHNvIHRo YXQgdGhlIHNpZ25hbCBoYW5kbGVyIHdvbid0IGJsb2NrCisJICogaWYgdGhlIHBpcGUgYnVmZmVy IGlzIGZ1bGwgKHdoaWNoIGlzIHZlcnkgdW5saWtlbHkgaW4gcHJhY3RpY2UgYnV0CisJICogcG9z c2libGUgaW4gdGhlb3J5KS4KKwkgKi8KKwlmY250bChjYW5jZWxfcGlwZVsxXSwgRl9TRVRGTCwg T19OT05CTE9DSyk7CiAKLQkJU2V0Q29uc29sZUN0cmxIYW5kbGVyKGNvbnNvbGVIYW5kbGVyLCBU UlVFKTsKKwl7CisJCWludAkJCXJjID0gcHRocmVhZF9jcmVhdGUoJmNhbmNlbF90aHJlYWQsIE5V TEwsIGNhbmNlbF90aHJlYWRfbWFpbiwgTlVMTCk7CisKKwkJaWYgKHJjICE9IDApCisJCXsKKwkJ CXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBjYW5jZWwgdGhyZWFkOiAlcyIsIHN0cmVy cm9yKHJjKSk7CisJCQlleGl0KDEpOworCQl9CiAJfQotfQogCi0jZW5kaWYJCQkJCQkJLyogV0lO MzIgKi8KKwlwcXNpZ25hbChTSUdJTlQsIHNpZ1Rlcm1IYW5kbGVyKTsKKwlwcXNpZ25hbChTSUdU RVJNLCBzaWdUZXJtSGFuZGxlcik7CisJcHFzaWduYWwoU0lHUVVJVCwgc2lnVGVybUhhbmRsZXIp OworI2VuZGlmCit9CiAKIAogLyoKICAqIHNldF9hcmNoaXZlX2NhbmNlbF9pbmZvCiAgKgotICog RmlsbCBBSC0+Y29ubkNhbmNlbCB3aXRoIGNhbmNlbGxhdGlvbiBpbmZvIGZvciB0aGUgc3BlY2lm aWVkIGRhdGFiYXNlCisgKiBGaWxsIEFILT5jYW5jZWxDb25uIHdpdGggY2FuY2VsbGF0aW9uIGlu Zm8gZm9yIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UKICAqIGNvbm5lY3Rpb247IG9yIGNsZWFyIGl0 IGlmIGNvbm4gaXMgTlVMTC4KICAqLwogdm9pZAogc2V0X2FyY2hpdmVfY2FuY2VsX2luZm8oQXJj aGl2ZUhhbmRsZSAqQUgsIFBHY29ubiAqY29ubikKIHsKLQlQR2NhbmNlbCAgICpvbGRDb25uQ2Fu Y2VsOworCVBHY2FuY2VsQ29ubiAqb2xkQ2FuY2VsQ29ubjsKIAogCS8qCi0JICogQWN0aXZhdGUg dGhlIGludGVycnVwdCBoYW5kbGVyIGlmIHdlIGRpZG4ndCB5ZXQgaW4gdGhpcyBwcm9jZXNzLiAg T24KLQkgKiBXaW5kb3dzLCB0aGlzIGFsc28gaW5pdGlhbGl6ZXMgc2lnbmFsX2luZm9fbG9jazsg dGhlcmVmb3JlIGl0J3MKLQkgKiBpbXBvcnRhbnQgdGhhdCB0aGlzIGhhcHBlbiBhdCBsZWFzdCBv bmNlIGJlZm9yZSB3ZSBmb3JrIG9mZiBhbnkKLQkgKiB0aHJlYWRzLgorCSAqIEFjdGl2YXRlIHRo ZSBpbnRlcnJ1cHQgaGFuZGxlciBpZiB3ZSBkaWRuJ3QgeWV0IGluIHRoaXMgcHJvY2Vzcy4gIFRo aXMKKwkgKiBhbHNvIGluaXRpYWxpemVzIHNpZ25hbF9pbmZvX2xvY2s7IHRoZXJlZm9yZSBpdCdz IGltcG9ydGFudCB0aGF0IHRoaXMKKwkgKiBoYXBwZW4gYXQgbGVhc3Qgb25jZSBiZWZvcmUgd2Ug Zm9yayBvZmYgYW55IHRocmVhZHMuCiAJICovCiAJc2V0X2NhbmNlbF9oYW5kbGVyKCk7CiAKIAkv KgotCSAqIE9uIFVuaXgsIHdlIGFzc3VtZSB0aGF0IHN0b3JpbmcgYSBwb2ludGVyIHZhbHVlIGlz IGF0b21pYyB3aXRoIHJlc3BlY3QKLQkgKiB0byBhbnkgcG9zc2libGUgc2lnbmFsIGludGVycnVw dC4gIE9uIFdpbmRvd3MsIHVzZSBhIGNyaXRpY2FsIHNlY3Rpb24uCisJICogVXNlIG11dGV4IHRv IHByZXZlbnQgdGhlIGNhbmNlbCBoYW5kbGVyIGZyb20gdXNpbmcgdGhlIHBvaW50ZXIgd2hpbGUK KwkgKiB3ZSdyZSBjaGFuZ2luZyBpdC4KIAkgKi8KLQotI2lmZGVmIFdJTjMyCi0JRW50ZXJDcml0 aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOwotI2VuZGlmCisJcHRocmVhZF9tdXRleF9s b2NrKCZzaWduYWxfaW5mb19sb2NrKTsKIAogCS8qIEZyZWUgdGhlIG9sZCBvbmUgaWYgd2UgaGF2 ZSBvbmUgKi8KLQlvbGRDb25uQ2FuY2VsID0gQUgtPmNvbm5DYW5jZWw7CisJb2xkQ2FuY2VsQ29u biA9IEFILT5jYW5jZWxDb25uOwogCS8qIGJlIHN1cmUgaW50ZXJydXB0IGhhbmRsZXIgZG9lc24n dCB1c2UgcG9pbnRlciB3aGlsZSBmcmVlaW5nICovCi0JQUgtPmNvbm5DYW5jZWwgPSBOVUxMOwor CUFILT5jYW5jZWxDb25uID0gTlVMTDsKIAotCWlmIChvbGRDb25uQ2FuY2VsICE9IE5VTEwpCi0J CVBRZnJlZUNhbmNlbChvbGRDb25uQ2FuY2VsKTsKKwlpZiAob2xkQ2FuY2VsQ29ubiAhPSBOVUxM KQorCQlQUWNhbmNlbEZpbmlzaChvbGRDYW5jZWxDb25uKTsKIAogCS8qIFNldCB0aGUgbmV3IG9u ZSBpZiBzcGVjaWZpZWQgKi8KIAlpZiAoY29ubikKLQkJQUgtPmNvbm5DYW5jZWwgPSBQUWdldENh bmNlbChjb25uKTsKKwkJQUgtPmNhbmNlbENvbm4gPSBQUWNhbmNlbENyZWF0ZShjb25uKTsKIAog CS8qCiAJICogT24gVW5peCwgdGhlcmUncyBvbmx5IGV2ZXIgb25lIGFjdGl2ZSBBcmNoaXZlSGFu ZGxlIHBlciBwcm9jZXNzLCBzbyB3ZQpAQCAtNzkwLDQ5ICs3OTcsMzUgQEAgc2V0X2FyY2hpdmVf Y2FuY2VsX2luZm8oQXJjaGl2ZUhhbmRsZSAqQUgsIFBHY29ubiAqY29ubikKIAkJc2lnbmFsX2lu Zm8ubXlBSCA9IEFIOwogI2VuZGlmCiAKLSNpZmRlZiBXSU4zMgotCUxlYXZlQ3JpdGljYWxTZWN0 aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgorCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZz aWduYWxfaW5mb19sb2NrKTsKIH0KIAogLyoKICAqIHNldF9jYW5jZWxfcHN0YXRlCiAgKgogICog U2V0IHNpZ25hbF9pbmZvLnBzdGF0ZSB0byBwb2ludCB0byB0aGUgc3BlY2lmaWVkIFBhcmFsbGVs U3RhdGUsIGlmIGFueS4KLSAqIFdlIG5lZWQgdGhpcyBtYWlubHkgdG8gaGF2ZSBhbiBpbnRlcmxv Y2sgYWdhaW5zdCBXaW5kb3dzIHNpZ25hbCB0aHJlYWQuCisgKiBXZSBuZWVkIHRoaXMgbWFpbmx5 IHRvIGhhdmUgYW4gaW50ZXJsb2NrIGFnYWluc3QgdGhlIGNhbmNlbCBoYW5kbGVyIHRocmVhZC4K ICAqLwogc3RhdGljIHZvaWQKIHNldF9jYW5jZWxfcHN0YXRlKFBhcmFsbGVsU3RhdGUgKnBzdGF0 ZSkKIHsKLSNpZmRlZiBXSU4zMgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19s b2NrKTsKLSNlbmRpZgotCisJcHRocmVhZF9tdXRleF9sb2NrKCZzaWduYWxfaW5mb19sb2NrKTsK IAlzaWduYWxfaW5mby5wc3RhdGUgPSBwc3RhdGU7Ci0KLSNpZmRlZiBXSU4zMgotCUxlYXZlQ3Jp dGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgorCXB0aHJlYWRfbXV0ZXhf dW5sb2NrKCZzaWduYWxfaW5mb19sb2NrKTsKIH0KIAogLyoKICAqIHNldF9jYW5jZWxfc2xvdF9h cmNoaXZlCiAgKgogICogU2V0IFBhcmFsbGVsU2xvdCdzIEFIIGZpZWxkIHRvIHBvaW50IHRvIHRo ZSBzcGVjaWZpZWQgYXJjaGl2ZSwgaWYgYW55LgotICogV2UgbmVlZCB0aGlzIG1haW5seSB0byBo YXZlIGFuIGludGVybG9jayBhZ2FpbnN0IFdpbmRvd3Mgc2lnbmFsIHRocmVhZC4KKyAqIFdlIG5l ZWQgdGhpcyBtYWlubHkgdG8gaGF2ZSBhbiBpbnRlcmxvY2sgYWdhaW5zdCB0aGUgY2FuY2VsIGhh bmRsZXIgdGhyZWFkLgogICovCiBzdGF0aWMgdm9pZAogc2V0X2NhbmNlbF9zbG90X2FyY2hpdmUo UGFyYWxsZWxTbG90ICpzbG90LCBBcmNoaXZlSGFuZGxlICpBSCkKIHsKLSNpZmRlZiBXSU4zMgot CUVudGVyQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgotCisJcHRo cmVhZF9tdXRleF9sb2NrKCZzaWduYWxfaW5mb19sb2NrKTsKIAlzbG90LT5BSCA9IEFIOwotCi0j aWZkZWYgV0lOMzIKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7Ci0j ZW5kaWYKKwlwdGhyZWFkX211dGV4X3VubG9jaygmc2lnbmFsX2luZm9fbG9jayk7CiB9CiAKIApA QCAtOTQ3LDcgKzk0MCw3IEBAIFBhcmFsbGVsQmFja3VwU3RhcnQoQXJjaGl2ZUhhbmRsZSAqQUgp CiAKIAkvKgogCSAqIFRlbXBvcmFyaWx5IGRpc2FibGUgcXVlcnkgY2FuY2VsbGF0aW9uIG9uIHRo ZSBsZWFkZXIgY29ubmVjdGlvbi4gIFRoaXMKLQkgKiBlbnN1cmVzIHRoYXQgY2hpbGQgcHJvY2Vz c2VzIHdvbid0IGluaGVyaXQgdmFsaWQgQUgtPmNvbm5DYW5jZWwKKwkgKiBlbnN1cmVzIHRoYXQg Y2hpbGQgcHJvY2Vzc2VzIHdvbid0IGluaGVyaXQgdmFsaWQgQUgtPmNhbmNlbENvbm4KIAkgKiBz ZXR0aW5ncyBhbmQgdGh1cyB3b24ndCB0cnkgdG8gaXNzdWUgY2FuY2VscyBhZ2FpbnN0IHRoZSBs ZWFkZXIncwogCSAqIGNvbm5lY3Rpb24uICBObyBoYXJtIGlzIGRvbmUgaWYgd2UgZmFpbCB3aGls ZSBpdCdzIGRpc2FibGVkLCBiZWNhdXNlCiAJICogdGhlIGxlYWRlciBjb25uZWN0aW9uIGlzIGlk bGUgYXQgdGhpcyBwb2ludCBhbnl3YXkuCkBAIC0xMDA1LDYgKzk5OCwxNyBAQCBQYXJhbGxlbEJh Y2t1cFN0YXJ0KEFyY2hpdmVIYW5kbGUgKkFIKQogCQkJLyogaW5zdHJ1Y3Qgc2lnbmFsIGhhbmRs ZXIgdGhhdCB3ZSdyZSBpbiBhIHdvcmtlciBub3cgKi8KIAkJCXNpZ25hbF9pbmZvLmFtX3dvcmtl ciA9IHRydWU7CiAKKwkJCS8qCisJCQkgKiBSZXNldCBjYW5jZWwgaGFuZGxlciBzdGF0ZSBzbyB0 aGF0IHRoZSB3b3JrZXIgd2lsbCBzZXQgdXAgaXRzCisJCQkgKiBvd24gY2FuY2VsIHRocmVhZCB3 aGVuIGl0IGNhbGxzIHNldF9hcmNoaXZlX2NhbmNlbF9pbmZvKCkuCisJCQkgKiBUaHJlYWRzIGRv bid0IHN1cnZpdmUgZm9yaygpLCBzbyB3ZSBjYW4ndCB1c2UgdGhlIGxlYWRlcidzLgorCQkJICog QWxzbyBjbG9zZSB0aGUgaW5oZXJpdGVkIHBpcGUgZmRzLgorCQkJICovCisJCQlzaWduYWxfaW5m by5oYW5kbGVyX3NldCA9IGZhbHNlOworCQkJY2xvc2UoY2FuY2VsX3BpcGVbMF0pOworCQkJY2xv c2UoY2FuY2VsX3BpcGVbMV0pOworCQkJY2FuY2VsX3BpcGVbMF0gPSBjYW5jZWxfcGlwZVsxXSA9 IC0xOworCiAJCQkvKiBjbG9zZSByZWFkIGVuZCBvZiBXb3JrZXIgLT4gTGVhZGVyICovCiAJCQlj bG9zZXNvY2tldChwaXBlV01bUElQRV9SRUFEXSk7CiAJCQkvKiBjbG9zZSB3cml0ZSBlbmQgb2Yg TGVhZGVyIC0+IFdvcmtlciAqLwpAQCAtMTQyMSw4ICsxNDI1LDE4IEBAIExpc3RlblRvV29ya2Vy cyhBcmNoaXZlSGFuZGxlICpBSCwgUGFyYWxsZWxTdGF0ZSAqcHN0YXRlLCBib29sIGRvX3dhaXQp CiAKIAlpZiAoIW1zZykKIAl7Ci0JCS8qIElmIGRvX3dhaXQgaXMgdHJ1ZSwgd2UgbXVzdCBoYXZl IGRldGVjdGVkIEVPRiBvbiBzb21lIHNvY2tldCAqLwotCQlpZiAoZG9fd2FpdCkKKwkJLyoKKwkJ ICogSWYgZG9fd2FpdCBpcyB0cnVlLCB3ZSBtdXN0IGhhdmUgZGV0ZWN0ZWQgRU9GIG9uIHNvbWUg c29ja2V0LiBJZgorCQkgKiBpdCdzIGR1ZSB0byBhIGNhbmNlbCByZXF1ZXN0LCB0aGF0J3MgZXhw ZWN0ZWQsIG90aGVyd2lzZSBpdCdzIGEKKwkJICogcHJvYmxlbS4KKwkJICovCisJCWJvb2wJCWNh bmNlbF9yZXF1ZXN0ZWQ7CisKKwkJcHRocmVhZF9tdXRleF9sb2NrKCZzaWduYWxfaW5mb19sb2Nr KTsKKwkJY2FuY2VsX3JlcXVlc3RlZCA9IHNpZ25hbF9pbmZvLmNhbmNlbF9yZXF1ZXN0ZWQ7CisJ CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzaWduYWxfaW5mb19sb2NrKTsKKworCQlpZiAoZG9fd2Fp dCAmJiAhY2FuY2VsX3JlcXVlc3RlZCkKIAkJCXBnX2ZhdGFsKCJhIHdvcmtlciBwcm9jZXNzIGRp ZWQgdW5leHBlY3RlZGx5Iik7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2FyY2hpdmVyLmMKaW5kZXggZGY4YTY5ZDNiNzkuLmFlMDM3ZTcwZDU1IDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC01MjA4LDcgKzUyMDgsNyBAQCBDbG9uZUFyY2hp dmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkvKiBUaGUgY2xvbmUgd2lsbCBoYXZlIGl0cyBvd24g Y29ubmVjdGlvbiwgc28gZGlzcmVnYXJkIGNvbm5lY3Rpb24gc3RhdGUgKi8KIAljbG9uZS0+Y29u bmVjdGlvbiA9IE5VTEw7Ci0JY2xvbmUtPmNvbm5DYW5jZWwgPSBOVUxMOworCWNsb25lLT5jYW5j ZWxDb25uID0gTlVMTDsKIAljbG9uZS0+Y3VyclVzZXIgPSBOVUxMOwogCWNsb25lLT5jdXJyU2No ZW1hID0gTlVMTDsKIAljbG9uZS0+Y3VyclRhYmxlQW0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5oCmluZGV4IDM2NTA3M2IzZWFlLi41NGU0MDk5YmU1MyAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAtMjg4LDggKzI4OCwxMiBAQCBzdHJ1Y3QgX2Fy Y2hpdmVIYW5kbGUKIAljaGFyCSAgICpzYXZlZFBhc3N3b3JkOwkvKiBwYXNzd29yZCBmb3Igcm9w dC0+dXNlcm5hbWUsIGlmIGtub3duICovCiAJY2hhcgkgICAqdXNlX3JvbGU7CiAJUEdjb25uCSAg ICpjb25uZWN0aW9uOwotCS8qIElmIGNvbm5DYW5jZWwgaXNuJ3QgTlVMTCwgU0lHSU5UIGhhbmRs ZXIgd2lsbCBzZW5kIGEgY2FuY2VsICovCi0JUEdjYW5jZWwgICAqdm9sYXRpbGUgY29ubkNhbmNl bDsKKworCS8qCisJICogSWYgY2FuY2VsQ29ubiBpc24ndCBOVUxMLCBTSUdJTlQgaGFuZGxlciB3 aWxsIHRyaWdnZXIgdGhlIGNhbmNlbCB0aHJlYWQKKwkgKiB0byBzZW5kIGEgY2FuY2VsLgorCSAq LworCVBHY2FuY2VsQ29ubiAqY2FuY2VsQ29ubjsKIAogCWludAkJCWNvbm5lY3RUb0RCOwkvKiBG bGFnIHRvIGluZGljYXRlIGlmIGRpcmVjdCBEQiBjb25uZWN0aW9uIGlzCiAJCQkJCQkJCSAqIHJl cXVpcmVkICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMgYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMKaW5kZXggNWMzNDkyNzliZWIuLjBjYzI5YThh YTcwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jCkBAIC04NCw3ICs4NCw3IEBAIFJlY29ubmVjdFRv U2VydmVyKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpkYm5hbWUpCiAKIAkvKgogCSAq IE5vdGU6IHdlIHdhbnQgdG8gZXN0YWJsaXNoIHRoZSBuZXcgY29ubmVjdGlvbiwgYW5kIGluIHBh cnRpY3VsYXIgdXBkYXRlCi0JICogQXJjaGl2ZUhhbmRsZSdzIGNvbm5DYW5jZWwsIGJlZm9yZSBj bG9zaW5nIG9sZCBjb25uZWN0aW9uLiAgT3RoZXJ3aXNlCisJICogQXJjaGl2ZUhhbmRsZSdzIGNh bmNlbENvbm4sIGJlZm9yZSBjbG9zaW5nIG9sZCBjb25uZWN0aW9uLiAgT3RoZXJ3aXNlCiAJICog YW4gaWxsLXRpbWVkIFNJR0lOVCBjb3VsZCB0cnkgdG8gYWNjZXNzIGEgZGVhZCBjb25uZWN0aW9u LgogCSAqLwogCUFILT5jb25uZWN0aW9uID0gTlVMTDsJCS8qIGRvZGdlIGVycm9yIGNoZWNrIGlu IENvbm5lY3REYXRhYmFzZUFoeCAqLwpAQCAtMTY0LDEyICsxNjQsMTEgQEAgdm9pZAogRGlzY29u bmVjdERhdGFiYXNlKEFyY2hpdmUgKkFIWCkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNo aXZlSGFuZGxlICopIEFIWDsKLQljaGFyCQllcnJidWZbMV07CiAKIAlpZiAoIUFILT5jb25uZWN0 aW9uKQogCQlyZXR1cm47CiAKLQlpZiAoQUgtPmNvbm5DYW5jZWwpCisJaWYgKEFILT5jYW5jZWxD b25uKQogCXsKIAkJLyoKIAkJICogSWYgd2UgaGF2ZSBhbiBhY3RpdmUgcXVlcnksIHNlbmQgYSBj YW5jZWwgYmVmb3JlIGNsb3NpbmcsIGlnbm9yaW5nCkBAIC0xNzcsNyArMTc2LDcgQEAgRGlzY29u bmVjdERhdGFiYXNlKEFyY2hpdmUgKkFIWCkKIAkJICogaGVscGZ1bCBkdXJpbmcgcGdfZmF0YWwo KS4KIAkJICovCiAJCWlmIChQUXRyYW5zYWN0aW9uU3RhdHVzKEFILT5jb25uZWN0aW9uKSA9PSBQ UVRSQU5TX0FDVElWRSkKLQkJCSh2b2lkKSBQUWNhbmNlbChBSC0+Y29ubkNhbmNlbCwgZXJyYnVm LCBzaXplb2YoZXJyYnVmKSk7CisJCQkodm9pZCkgUFFjYW5jZWxCbG9ja2luZyhBSC0+Y2FuY2Vs Q29ubik7CiAKIAkJLyoKIAkJICogUHJldmVudCBzaWduYWwgaGFuZGxlciBmcm9tIHNlbmRpbmcg YSBjYW5jZWwgYWZ0ZXIgdGhpcy4KLS0gCjIuNTMuMAoK --7117fd8d597378ce0b11f088c5be594be4d71d04a133b287a4b0d3d697c6--