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 1w16nb-002ZA1-0x for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 17:59:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w16nZ-005lNA-2V for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 17:59:46 +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 1w16nZ-005lMy-17 for pgsql-hackers@lists.postgresql.org; Fri, 13 Mar 2026 17:59:45 +0000 Received: from mail-qt1-x82a.google.com ([2607:f8b0:4864:20::82a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w16nQ-000000000ST-3sUJ for pgsql-hackers@postgresql.org; Fri, 13 Mar 2026 17:59:39 +0000 Received: by mail-qt1-x82a.google.com with SMTP id d75a77b69052e-509101189f4so21427511cf.1 for ; Fri, 13 Mar 2026 10:59:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773424774; cv=none; d=google.com; s=arc-20240605; b=DBp/emKhRwt/wdUC2t4AO/FPAFXa+eQbne3nj93u2KbzKyzPHxW384w6pTGaTbxwG3 OnmJ987VXn0s1A1BqeV0UHg2UMDJoD434eeBEEbDyDFPVdz5loTvD/NXADblBztocJz4 5KECUOXwAa8iWT/hPqUT5pRdMiNVg/9B1NG3K3pCsWkqFtZMu7YaJeIlurDd4VU5WPvt qgEBf4KoZNo0WK1we4QbIuO1BByDXvuXYsiukZO20D6H1bXSPaAR+5BrThZATbuO8lI+ WsVwPmqb7fznLFX5//pUwZQd2lRUVC9DKuO5xySBLIv3rSK7Ox3ux3M3GhTjgkwKILJ6 +w3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=fNRPthM5q6vCoStCsjhxnqSrBbs5rcZUrpuOJ0zubBw=; fh=lgyvck+cigeThyyu8xjJj4jyvT5bRmPJcXTbn5nEkmc=; b=Ty4X/omhqa2T6m8bqtO/WuP3nqy5A8LAgUkorth7c3cmtOyBA3f+UPbxJvawiIVP4w cWCLzaDeqd+9PsZwoF1CFQPXS1Y835tilPEW11VZ2VHcLa1g3ailtFWbdigZ0HUHXrao kps3eiYyXTyI3iPhQFNh8jI2CzLiiAvjhrAyqxppuRhecvFTj/lv9O0gJP7ye36M64Ef NiTE9p1JPGS9Ac+HL/21siwswGBps2u4FJT5oDalAl/QfnB2biE3nXHLBFe0C6b35QnT IGDLg4aY5A1aY3ZdjIpnC5TTNZNC6tnL+hWqRrPpW5nDIuUjT32KPFhC+m9Kw4IE0rLr Cd7w==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1773424774; x=1774029574; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=fNRPthM5q6vCoStCsjhxnqSrBbs5rcZUrpuOJ0zubBw=; b=WcmZfH9XLrHf61T6my1i6RrySE9P7M91qadAx1kfdFYbbyDCTj0vWpE4J/PFm5Q4KP AtD2vHyTsmsr5ig2CWUm0id3a6riCKaHAlv8sGm906FtsAzt682zCp9iObtdX4a/0/9C BzlT9Qj+t1QJjpfNAMuyLXHid9VhjByfzl01I6HxtOjjU0oBlWyUEdsYLQYtCs8TeCiz vQs6muSrnveG+XkivqaaHx3J6pc8hxnOGbAAwWAwH2j7sFluTeQ8v4N5mh5lhy+1HDq/ pDj4xfYeTHe/wHCk0fZ9ZNWGYl8Kku1MAehPriKL030tD5oepDmqqzyn60OgXXkhFbcM 9zXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773424774; x=1774029574; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=fNRPthM5q6vCoStCsjhxnqSrBbs5rcZUrpuOJ0zubBw=; b=f3TKsnQvB2Z5q1FNXBA4BizNVGqNRs9a9rkc0JGe6Zc93Q2uNgp8yPHdP1U6vKIoON JPDxcFxCbDCPVytZz5JZC3i/EYaO6Uomyguyy+71KkXpuN3OajsET90CUbYlr6W3Qh3h DCIJsxa6IGOLWOf1pphmgfoowjU7qejhOyqjQKDcIzpouxy1pS37zuZZYCZXP2d6kbLV j5lx+z8yuzBeyaj2OMidJA5twoNojSgodhtIKVFDkJsZcfRjfu2ae1haEhBXdRT2t/OT C9SKwV35kRpxAjxt9TRSkC8j3hJ7B7LdllQ7Imcjs3VP8JkMFM1gbybqHUpKvZzEBmxj jK4A== X-Forwarded-Encrypted: i=1; AJvYcCXGVzsq6wFuf+msryyUs80ODGYKYjnEmg5foICwskvPDnGA2rrIPGC/gc6YHViBV+dTBB5/JIj8+Khc27zO@postgresql.org X-Gm-Message-State: AOJu0YzK7z+30veN7Ndk3mkTSQPgp83IoqfGhdiegzpX7cd9V/gcCusv Qz6XUaK38Fyma5dMaDpOx2aKVgNrDgCRb95Enyg3UOSGG2bZ0FRxtrXY/M3tmls+wZaI0uRdDrN mywHNvHODyJXd45BuVzreWKVNRWA600Xthqe8g3QK X-Gm-Gg: ATEYQzy93tOTgkpDFe2k3QJT/Q2+JAMB5qz1T2BA4S2xZfeA0YaW/5Ie5iQM7EOoLoI e6SMboOLE77bWZ9bKhMxwhvEiUmeHGKNh3jM7mUv4ibw166AcPUsObOOjzbkBHuuye2pLBZopSp /U0kY+Eigg9CgktIcMV9EESxqCJ7rrzZWPguYOzeDzkJpwAdBJq3cp8XupE2eU1HOV64X8Feddt WSIEBD2H+9IyHki8T19KxtZaSpHKKQ67TsVIYQz16r5WlbYbXxc+X/3/XJx+ki280AilTO8XbVr MZS7Scw06Q== X-Received: by 2002:ac8:7f42:0:b0:509:1009:e78a with SMTP id d75a77b69052e-50957e227e9mr49726251cf.40.1773424774630; Fri, 13 Mar 2026 10:59:34 -0700 (PDT) MIME-Version: 1.0 References: <3720B2E1-0B96-4063-8D63-B5AE6AFEA159@gmail.com> In-Reply-To: From: Jacob Champion Date: Fri, 13 Mar 2026 10:59:23 -0700 X-Gm-Features: AaiRm516pzDz0Mm0KHJ-Q29jLxgNAhf3r4OAZesew19hXSn73HWKzEA5na8ur2A Message-ID: Subject: Re: [oauth] Stabilize the libpq-oauth ABI (and allow alternative implementations?) To: "Jonathan Gonzalez V." Cc: Zsolt Parragi , PostgreSQL Hackers , Chao Li Content-Type: multipart/mixed; boundary="000000000000bb1124064ceba11a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000bb1124064ceba11a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Mar 13, 2026 at 12:24=E2=80=AFAM Jonathan Gonzalez V. wrote: > While rebasing this patch[1] I notice that the test where wailing, that > was due to the following missing dependency in the test, small patch > here: Fixed in v8, thanks. v7-0001 and -0002 are committed, plus the removal of some additional typedefs, plus a fix for a silly bug in the Makefile that indri caught. --Jacob --000000000000bb1124064ceba11a Content-Type: text/plain; charset="US-ASCII"; name="since-v7.diff.txt" Content-Disposition: attachment; filename="since-v7.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmp7awqm0 MTogIGY1Yjg2MWY3ZWZkIDwgLTogIC0tLS0tLS0tLS0tIGxpYnBxLW9hdXRoOiBVc2UgdGhlIFBH b2F1dGhCZWFyZXJSZXF1ZXN0VjIgQVBJCjI6ICBmNTlkNjQzMWIwNCA8IC06ICAtLS0tLS0tLS0t LSBsaWJwcS1vYXV0aDogTmV2ZXIgbGluayBhZ2FpbnN0IGxpYnBxJ3MgZW5jb2RpbmcgZnVuY3Rp b25zCjM6ICA3NWFjN2RkYzEyMCAhIDE6ICAxNmZhMDMzZjE4NCBsaWJwcTogUG9pc29uIHRoZSB2 MiBwYXJ0IG9mIGEgdjEgQmVhcmVyIHJlcXVlc3QKICAgIEBAIENvbW1pdCBtZXNzYWdlCiAgICAg ICAgIFRoZSBzdHJ1Y3QgaXMgdW5wb2lzb25lZCBhZnRlciB0aGUgY2FsbCwgc28gd2UgY2FuIHN3 aXRjaCBiYWNrIHRvIHRoZSB2MgogICAgICAgICBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiB3aGVu IG5lY2Vzc2FyeS4KICAgICAKICAgICsgICAgUmV2aWV3ZWQtYnk6IFpzb2x0IFBhcnJhZ2kgPHpz b2x0LnBhcnJhZ2lAcGVyY29uYS5jb20+CiAgICAgICAgIERpc2N1c3Npb246IGh0dHBzOi8vcG9z dGdyLmVzL20vQ0FPWW1pJTJCbXJHZyUyQm5fWDJNT0xnZVdjajN2X00wMGdSOHV6X0Q3bU04eiUz RGRYMUpZVmJnJTQwbWFpbC5nbWFpbC5jb20KICAgICAKICAgICAgIyMgc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtYXV0aC1vYXV0aC5oICMjCiAgICBAQCBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1h dXRoLW9hdXRoLmM6IG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCh2b2lkKQogICAgICtz dGF0aWMgdm9pZAogICAgICtwb2lzb25fcmVxX3YyKFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJl cXVlc3QsIGJvb2wgcG9pc29uKQogICAgICt7CiAgICArKyNpZmRlZiBVU0VfVkFMR1JJTkQKICAg ICArCXZvaWQJICAgKmNvbnN0IGJhc2UgPSAoY2hhciAqKSByZXF1ZXN0ICsgc2l6ZW9mKHJlcXVl c3QtPnYxKTsKICAgICArCWNvbnN0IHNpemVfdCBsZW4gPSBzaXplb2YoKnJlcXVlc3QpIC0gc2l6 ZW9mKHJlcXVlc3QtPnYxKTsKICAgICsrI2VuZGlmCiAgICAgKwogICAgICsJaWYgKHBvaXNvbikK ICAgICArCXsKNDogIDdhNDMzOThjOTBhICEgMjogIDZmODg2OTE0YzgzIGxpYnBxOiBBbGxvdyBk ZXZlbG9wZXJzIHRvIHJlaW1wbGVtZW50IGxpYnBxLW9hdXRoCiAgICBAQCBDb21taXQgbWVzc2Fn ZQogICAgICAgICBwcm92aWRlIGZlZWRiYWNrIGZvciBQRzIwLCBieSB0ZWxsaW5nIHRoZSBydW50 aW1lIGxpbmtlciB0byBmaW5kIGEKICAgICAgICAgZGlmZmVyZW50IGxpYnBxLW9hdXRoLiBJdCBy ZW1haW5zIHVuZG9jdW1lbnRlZCBmb3IgZW5kIHVzZXJzLgogICAgIAogICAgKyAgICBSZXZpZXdl ZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KICAgICAgICAg RGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQU9ZbWklMkJtckdnJTJCbl9YMk1PTGdl V2NqM3ZfTTAwZ1I4dXpfRDdtTTh6JTNEZFgxSllWYmclNDBtYWlsLmdtYWlsLmNvbQogICAgIAog ICAgICAjIyBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmggIyMKNTogIGIzZGFm MzE0MGY4ICEgMzogIDY1MWQ5YmRjYmMzIFdJUDogSW50cm9kdWNlIHRoaXJkLXBhcnR5IE9BdXRo IGZsb3cgcGx1Z2lucz8KICAgIEBAIENvbW1pdCBtZXNzYWdlCiAgICAgICAgIFRPRE86IGhvdyBo YXJkIHdvdWxkIGl0IGJlIHRvIHN1cHBvcnQgV2luZG93cyBoZXJlPwogICAgIAogICAgICAgICBS ZXZpZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KICAg ICsgICAgUmV2aWV3ZWQtYnk6IEpvbmF0aGFuIEdvbnphbGV6IFYuIDxqb25hdGhhbi5hYmRpZWxA Z21haWwuY29tPgogICAgICAgICBEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1lt aSUyQm1yR2clMkJuX1gyTU9MZ2VXY2ozdl9NMDBnUjh1el9EN21NOHolM0RkWDFKWVZiZyU0MG1h aWwuZ21haWwuY29tCiAgICAgCiAgICAgICMjIHNyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1 aWxkICMjCiAgICBAQCBzcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9tZXNvbi5idWls ZDogdGVzdHMgKz0gewogICAgICAgICAgICAnY2VydF9kaXInOiBtZXNvbi5wcm9qZWN0X3NvdXJj ZV9yb290KCkgLyAnc3JjL3Rlc3Qvc3NsL3NzbCcsCiAgICAgKyAgICAgICdmbG93X21vZHVsZV9w YXRoJzogb2F1dGhfZmxvdy5mdWxsX3BhdGgoKSwKICAgICAgICAgIH0sCiAgICAtICAgICAnZGVw cyc6IFtvYXV0aF9ob29rX2NsaWVudF0sCiAgICArLSAgICAnZGVwcyc6IFtvYXV0aF9ob29rX2Ns aWVudF0sCiAgICArKyAgICAnZGVwcyc6IFtvYXV0aF9ob29rX2NsaWVudCwgb2F1dGhfZmxvd10s CiAgICAgICAgfSwKICAgICsgfQogICAgIAogICAgICAjIyBzcmMvdGVzdC9tb2R1bGVzL29hdXRo X3ZhbGlkYXRvci9NYWtlZmlsZSAjIwogICAgIEBAIHNyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFs aWRhdG9yL01ha2VmaWxlOiBQR0ZJTEVERVNDID0gInZhbGlkYXRvciAtIHRlc3QgT0F1dGggdmFs aWRhdG9yIG1vZHVsZSIK --000000000000bb1124064ceba11a Content-Type: application/octet-stream; name="v8-0001-libpq-Poison-the-v2-part-of-a-v1-Bearer-request.patch" Content-Disposition: attachment; filename="v8-0001-libpq-Poison-the-v2-part-of-a-v1-Bearer-request.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmp7b01d1 RnJvbSAxNmZhMDMzZjE4NDVlMzRkYzJlOTZmNGNhNTIyYmQzMGI2YzY4YjZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAzIE1hciAyMDI2IDA5OjQ1OjM3IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2OCAxLzNdIGxpYnBxOiBQb2lzb24gdGhlIHYyIHBhcnQgb2YgYSB2MSBCZWFyZXIg cmVxdWVzdAoKVGhlIG5ldyBQR29hdXRoQmVhcmVyUmVxdWVzdFYyIEFQSSAod2hpY2ggaGFzIHNp bWlsYXJpdGllcyB0byB0aGUKInN1YmNsYXNzIiBwb2ludGVyIGFyY2hpdGVjdHVyZSBpbiB1c2Ug YnkgdGhlIGJhY2tlbmQsIGZvciBOb2RlcykKY2FycmllcyB0aGUgcmlzayBvZiBhIGRldmVsb3Bl ciBpZ25vcmluZyB0aGUgdHlwZSBvZiBob29rIGluIHVzZSBhbmQKanVzdCBjYXN0aW5nIGRpcmVj dGx5IHRvIHRoZSBWMiBzdHJ1Y3QuIFRoaXMgd2lsbCBhcHBlYXIgdG8gd29yayBmaW5lIGluCjE5 LCBidXQgY3Jhc2ggKG9yIHdvcnNlKSB3aGVuIHNwZWFraW5nIHRvIGxpYnBxIDE4LgoKSG93ZXZl ciwgd2UncmUgaW4gYSB1bmlxdWUgcG9zaXRpb24gdG8gY2F0Y2ggdGhpcyBwcm9ibGVtLCBiZWNh dXNlIHdlCmhhdmUgdGlnaHQgY29udHJvbCBvdmVyIHRoZSBzdHJ1Y3QuIEFkZCBwb2lzb25pbmcg Y29kZSB0byB0aGUgdjEgcGF0aAp3aGljaCBkb2VzIHRoZSBmb2xsb3dpbmc6CgotIG1hc2tzIHRo ZSB2MiByZXF1ZXN0LT5pc3N1ZXIgcG9pbnRlciwgdG8gaG9wZWZ1bGx5IHBvaW50IGF0IG5vbnNl bnNlCiAgbWVtb3J5Ci0gYWJvcnQoKXMgaWYgdGhlIHYyIHJlcXVlc3QtPmVycm9yIGlzIGFzc2ln bmVkIGJ5IHRoZSBob29rCi0gYXR0ZW1wdHMgdG8gY292ZXIgYm90aCB3aXRoIFZBTEdSSU5EX01B S0VfTUVNX05PQUNDRVNTIGZvciB0aGUKICBkdXJhdGlvbiBvZiB0aGUgY2FsbGJhY2sgKGEgcG90 ZW50aWFsIEFkZHJlc3NTYW5pdGl6ZXIgaW1wbGVtZW50YXRpb24KICBpcyBsZWZ0IGZvciBmdXR1 cmUgd29yaykKClRoZSBzdHJ1Y3QgaXMgdW5wb2lzb25lZCBhZnRlciB0aGUgY2FsbCwgc28gd2Ug Y2FuIHN3aXRjaCBiYWNrIHRvIHRoZSB2MgppbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiB3aGVuIG5l Y2Vzc2FyeS4KClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNv bmEuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1ltaSUyQm1yR2clMkJu X1gyTU9MZ2VXY2ozdl9NMDBnUjh1el9EN21NOHolM0RkWDFKWVZiZyU0MG1haWwuZ21haWwuY29t Ci0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5oIHwgICAxICsKIHNyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYyB8IDEzNSArKysrKysrKysrKysrKysrKysr KysrKysrLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTI3IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5oIGIv c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5oCmluZGV4IDUxMTI4NDYxNGY3Li4y YjIyZDIzZmZkZSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0 aC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaApAQCAtMzQsNiAr MzQsNyBAQCB0eXBlZGVmIHN0cnVjdAogCVBHY29ubgkgICAqY29ubjsKIAl2b2lkCSAgICphc3lu Y19jdHg7CiAKKwlib29sCQl2MTsKIAlib29sCQlidWlsdGluOwogCXZvaWQJICAgKmJ1aWx0aW5f ZmxvdzsKIH0gZmVfb2F1dGhfc3RhdGU7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLW9hdXRoLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMK aW5kZXggZjkzMTg0ZjA0ZGIuLmM1OWI0Y2U2ZDMwIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0 aC1vYXV0aC5jCkBAIC0yNyw2ICsyNywxMSBAQAogI2luY2x1ZGUgImZlLWF1dGgtb2F1dGguaCIK ICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgInBnX2NvbmZpZ19wYXRocy5oIgor I2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCisKK3N0YXRpYyBpbnQJZG9fYXN5bmMoZmVfb2F1 dGhfc3RhdGUgKnN0YXRlLCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KTsKK3N0YXRp YyB2b2lkIGRvX2NsZWFudXAoZmVfb2F1dGhfc3RhdGUgKnN0YXRlLCBQR29hdXRoQmVhcmVyUmVx dWVzdFYyICpyZXF1ZXN0KTsKK3N0YXRpYyB2b2lkIHBvaXNvbl9yZXFfdjIoUEdvYXV0aEJlYXJl clJlcXVlc3RWMiAqcmVxdWVzdCwgYm9vbCBwb2lzb24pOwogCiAvKiBUaGUgZXhwb3J0ZWQgT0F1 dGggY2FsbGJhY2sgbWVjaGFuaXNtLiAqLwogc3RhdGljIHZvaWQgKm9hdXRoX2luaXQoUEdjb25u ICpjb25uLCBjb25zdCBjaGFyICpwYXNzd29yZCwKQEAgLTc0MSw5ICs3NDYsNyBAQCBydW5fb2F1 dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiAJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKIAl9 CiAKLQlzdGF0dXMgPSByZXF1ZXN0LT52MS5hc3luYyhjb25uLAotCQkJCQkJCSAgIChQR29hdXRo QmVhcmVyUmVxdWVzdCAqKSByZXF1ZXN0LAotCQkJCQkJCSAgICZjb25uLT5hbHRzb2NrKTsKKwlz dGF0dXMgPSBkb19hc3luYyhzdGF0ZSwgcmVxdWVzdCk7CiAKIAlpZiAoc3RhdHVzID09IFBHUkVT X1BPTExJTkdfRkFJTEVEKQogCXsKQEAgLTgwNCw4ICs4MDcsNyBAQCBjbGVhbnVwX29hdXRoX2Zs b3coUEdjb25uICpjb25uKQogCiAJQXNzZXJ0KHJlcXVlc3QpOwogCi0JaWYgKHJlcXVlc3QtPnYx LmNsZWFudXApCi0JCXJlcXVlc3QtPnYxLmNsZWFudXAoY29ubiwgKFBHb2F1dGhCZWFyZXJSZXF1 ZXN0ICopIHJlcXVlc3QpOworCWRvX2NsZWFudXAoc3RhdGUsIHJlcXVlc3QpOwogCWNvbm4tPmFs dHNvY2sgPSBQR0lOVkFMSURfU09DS0VUOwogCiAJZnJlZShyZXF1ZXN0KTsKQEAgLTEwMTksNyAr MTAyMSwxNCBAQCBzZXR1cF90b2tlbl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3Rh dGUgKnN0YXRlKQogCSAqLwogCXJlcyA9IFBRYXV0aERhdGFIb29rKFBRQVVUSERBVEFfT0FVVEhf QkVBUkVSX1RPS0VOX1YyLCBjb25uLCAmcmVxdWVzdCk7CiAJaWYgKHJlcyA9PSAwKQorCXsKKwkJ cG9pc29uX3JlcV92MigmcmVxdWVzdCwgdHJ1ZSk7CisKIAkJcmVzID0gUFFhdXRoRGF0YUhvb2so UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU4sIGNvbm4sICZyZXF1ZXN0KTsKKwkJc3RhdGUt PnYxID0gKHJlcyAhPSAwKTsKKworCQlwb2lzb25fcmVxX3YyKCZyZXF1ZXN0LCBmYWxzZSk7CisJ fQogCWlmIChyZXMgPT0gMCkKIAl7CiAJCXN0YXRlLT5idWlsdGluID0gdHJ1ZTsKQEAgLTEwNDUs OCArMTA1NCw3IEBAIHNldHVwX3Rva2VuX3JlcXVlc3QoUEdjb25uICpjb25uLCBmZV9vYXV0aF9z dGF0ZSAqc3RhdGUpCiAJCQl9CiAKIAkJCS8qIHNob3J0LWNpcmN1aXQgKi8KLQkJCWlmIChyZXF1 ZXN0LnYxLmNsZWFudXApCi0JCQkJcmVxdWVzdC52MS5jbGVhbnVwKGNvbm4sIChQR29hdXRoQmVh cmVyUmVxdWVzdCAqKSAmcmVxdWVzdCk7CisJCQlkb19jbGVhbnVwKHN0YXRlLCAmcmVxdWVzdCk7 CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCkBAIC0xMDc2LDggKzEwODQsNyBAQCBzZXR1cF90b2tl bl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQogCQlsaWJwcV9h cHBlbmRfY29ubl9lcnJvcihjb25uLCAibm8gT0F1dGggZmxvd3MgYXJlIGF2YWlsYWJsZSAodHJ5 IGluc3RhbGxpbmcgdGhlIGxpYnBxLW9hdXRoIHBhY2thZ2UpIik7CiAKIGZhaWw6Ci0JaWYgKHJl cXVlc3QudjEuY2xlYW51cCkKLQkJcmVxdWVzdC52MS5jbGVhbnVwKGNvbm4sIChQR29hdXRoQmVh cmVyUmVxdWVzdCAqKSAmcmVxdWVzdCk7CisJZG9fY2xlYW51cChzdGF0ZSwgJnJlcXVlc3QpOwog CXJldHVybiBmYWxzZTsKIH0KIApAQCAtMTQyOCwzICsxNDM1LDExMyBAQCBvYXV0aF91bnNhZmVf ZGVidWdnaW5nX2VuYWJsZWQodm9pZCkKIAogCXJldHVybiAoZW52ICYmIHN0cmNtcChlbnYsICJV TlNBRkUiKSA9PSAwKTsKIH0KKworLyoKKyAqIEhvb2sgdjEgUG9pc29uaW5nCisgKgorICogVHJ5 IHRvIGNhdGNoIG1pc3VzZXMgb2YgdGhlIHYxIFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VO IGhvb2sgYW5kIGl0cworICogY2FsbGJhY2tzLCB3aGljaCBhcmUgbm90IGFsbG93ZWQgdG8gZG93 bmNhc3QgdGhlaXIgcmVxdWVzdCBhcmd1bWVudCB0bworICogUEdvYXV0aEJlYXJlclJlcXVlc3RW Mi4gKFN1Y2ggY2xpZW50cyBtYXkgY3Jhc2ggb3Igd29yc2Ugd2hlbiBzcGVha2luZyB0bworICog bGlicHEgMTguKQorICoKKyAqIFRoaXMgYXR0ZW1wdHMgdG8gdXNlIFZhbGdyaW5kIGhvb2tzLCBp ZiBwcmVzZW50LCB0byBtYXJrIHRoZSBleHRyYSBtZW1iZXJzIGFzCisgKiBpbmFjY2Vzc2libGUu IEZvciB1bmluc3RydW1lbnRlZCBidWlsZHMsIGl0IGFsc28gbXVuZ2VzIHJlcXVlc3QtPmlzc3Vl ciB0bworICogdHJ5IHRvIGNyYXNoIGNsaWVudHMgdGhhdCBwZXJmb3JtIHN0cmluZyBvcGVyYXRp b25zLCBhbmQgaXQgYWJvcnRzIGlmCisgKiByZXF1ZXN0LT5lcnJvciBpcyBzZXQuCisgKi8KKwor I2RlZmluZSBNQVNLX0JJVFMgKCh1aW50cHRyX3QpIDB4NTVhYTU1YWE1NWFhNTVhYSkKKyNkZWZp bmUgUE9JU09OX01BU0socHRyKSAoKHZvaWQgKikgKCgodWludHB0cl90KSBwdHIpIF4gTUFTS19C SVRTKSkKKworLyoKKyAqIFdvcmtob3JzZSBmb3IgdjIgcmVxdWVzdCBwb2lzb25pbmcuIFRoaXMg bXVzdCBiZSBjYWxsZWQgZXhhY3RseSB0d2ljZTogb25jZQorICogdG8gcG9pc29uLCBvbmNlIHRv IHVucG9pc29uLgorICoKKyAqIE5COiBVbnBvaXNvbmluZyBtdXN0IHJlc3RvcmUgdGhlIHJlcXVl c3QgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLCBiZWNhdXNlIHdlCisgKiBtaWdodCBzdGlsbCBzd2l0 Y2ggYmFjayB0byBhIHYyIGltcGxlbWVudGF0aW9uIGludGVybmFsbHkuIERvbid0IGRvIGFueXRo aW5nCisgKiBkZXN0cnVjdGl2ZSBkdXJpbmcgdGhlIHBvaXNvbiBvcGVyYXRpb24uCisgKi8KK3N0 YXRpYyB2b2lkCitwb2lzb25fcmVxX3YyKFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3Qs IGJvb2wgcG9pc29uKQoreworI2lmZGVmIFVTRV9WQUxHUklORAorCXZvaWQJICAgKmNvbnN0IGJh c2UgPSAoY2hhciAqKSByZXF1ZXN0ICsgc2l6ZW9mKHJlcXVlc3QtPnYxKTsKKwljb25zdCBzaXpl X3QgbGVuID0gc2l6ZW9mKCpyZXF1ZXN0KSAtIHNpemVvZihyZXF1ZXN0LT52MSk7CisjZW5kaWYK KworCWlmIChwb2lzb24pCisJeworCQkvKiBQb2lzb24gcmVxdWVzdC0+aXNzdWVyIHdpdGggYSBt YXNrIHRvIGhlbHAgdW5pbnN0cnVtZW50ZWQgYnVpbGRzLiAqLworCQlyZXF1ZXN0LT5pc3N1ZXIg PSBQT0lTT05fTUFTSyhyZXF1ZXN0LT5pc3N1ZXIpOworCisJCVZBTEdSSU5EX01BS0VfTUVNX05P QUNDRVNTKGJhc2UsIGxlbik7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIFhYWCBVc2luZyBE RUZJTkVEIGhlcmUgaXMgdGVjaG5pY2FsbHkgdG9vIGxheDsgd2UgbWlnaHQgY2F0Y2gKKwkJICog c3RydWN0IHBhZGRpbmcgaW4gdGhlIGJsYXN0IHJhZGl1cy4gQnV0IHNpbmNlIHRoaXMgQVBJIGhh cyB0bworCQkgKiBwb2lzb24gc3RhY2sgYWRkcmVzc2VzLCBhbmQgVmFsZ3JpbmQgY2FuJ3QgdHJh Y2svbWFuYWdlIHVuZGVmaW5lZAorCQkgKiBzdGFjayByZWdpb25zLCB3ZSBjYW4ndCBiZSBhbnkg c3RyaWN0ZXIgd2l0aG91dCB0cmFja2luZyB0aGUKKwkJICogb3JpZ2luYWwgc3RhdGUgb2YgdGhl IG1lbW9yeS4KKwkJICovCisJCVZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQoYmFzZSwgbGVuKTsK KworCQkvKiBVbmRvIG91ciBtYXNrLiAqLworCQlyZXF1ZXN0LT5pc3N1ZXIgPSBQT0lTT05fTUFT SyhyZXF1ZXN0LT5pc3N1ZXIpOworCisJCS8qCisJCSAqIEZvciB1bmluc3RydW1lbnRlZCBidWls ZHMsIG1ha2Ugc3VyZSByZXF1ZXN0LT5lcnJvciB3YXNuJ3QgdG91Y2hlZC4KKwkJICovCisJCWlm IChyZXF1ZXN0LT5lcnJvcikKKwkJeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJhYm9ydCEg b3V0LW9mLWJvdW5kcyB3cml0ZSB0byBQR29hdXRoQmVhcmVyUmVxdWVzdCBieSBQUUFVVEhEQVRB X09BVVRIX0JFQVJFUl9UT0tFTiBob29rXG4iKTsKKwkJCWFib3J0KCk7CisJCX0KKwl9Cit9CisK Ky8qCisgKiBXcmFwcGVyIGFyb3VuZCBQR29hdXRoQmVhcmVyUmVxdWVzdC5hc3luYygpIHdoaWNo IGFwcGxpZXMgcG9pc29uIGR1cmluZyB0aGUKKyAqIGNhbGxiYWNrIHdoZW4gbmVjZXNzYXJ5Lgor ICovCitzdGF0aWMgaW50Citkb19hc3luYyhmZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhC ZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpCit7CisJUEdjb25uCSAgICpjb25uID0gc3RhdGUtPmNv bm47CisJaW50CQkJcmV0OworCisJQXNzZXJ0KHJlcXVlc3QtPnYxLmFzeW5jKTsKKworCWlmIChz dGF0ZS0+djEpCisJCXBvaXNvbl9yZXFfdjIocmVxdWVzdCwgdHJ1ZSk7CisKKwlyZXQgPSByZXF1 ZXN0LT52MS5hc3luYyhjb25uLAorCQkJCQkJCShQR29hdXRoQmVhcmVyUmVxdWVzdCAqKSByZXF1 ZXN0LAorCQkJCQkJCSZjb25uLT5hbHRzb2NrKTsKKworCWlmIChzdGF0ZS0+djEpCisJCXBvaXNv bl9yZXFfdjIocmVxdWVzdCwgZmFsc2UpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNp bWlsYXIgd3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0LmNsZWFu dXAoKSBjYWxsYmFjay4KKyAqIERvZXMgbm90aGluZyBpZiBvbmUgaXMgbm90IGRlZmluZWQuCisg Ki8KK3N0YXRpYyB2b2lkCitkb19jbGVhbnVwKGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdvYXV0 aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCkKK3sKKwlpZiAoIXJlcXVlc3QtPnYxLmNsZWFudXAp CisJCXJldHVybjsKKworCWlmIChzdGF0ZS0+djEpCisJCXBvaXNvbl9yZXFfdjIocmVxdWVzdCwg dHJ1ZSk7CisKKwlyZXF1ZXN0LT52MS5jbGVhbnVwKHN0YXRlLT5jb25uLCAoUEdvYXV0aEJlYXJl clJlcXVlc3QgKikgcmVxdWVzdCk7CisKKwlpZiAoc3RhdGUtPnYxKQorCQlwb2lzb25fcmVxX3Yy KHJlcXVlc3QsIGZhbHNlKTsKK30KLS0gCjIuMzQuMQoK --000000000000bb1124064ceba11a Content-Type: application/octet-stream; name="v8-0002-libpq-Allow-developers-to-reimplement-libpq-oauth.patch" Content-Disposition: attachment; filename="v8-0002-libpq-Allow-developers-to-reimplement-libpq-oauth.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmp7b2an2 RnJvbSA2Zjg4NjkxNGM4MzZjMzhlMGZlZGY0ZmMwZGNjM2EzYmU1YzczNjliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogRnJpLCA2IE1hciAyMDI2IDE0OjE4OjQ5IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2OCAyLzNdIGxpYnBxOiBBbGxvdyBkZXZlbG9wZXJzIHRvIHJlaW1wbGVtZW50IGxp YnBxLW9hdXRoCgpGb3IgUEcxOSwgc2luY2Ugd2Ugd29uJ3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBv ZmZpY2lhbGx5IHN3aXRjaCBvdXQgZmxvdwpwbHVnaW5zLCByZWxheCB0aGUgZmxvdy1sb2FkaW5n IGNvZGUgdG8gbm90IHJlcXVpcmUgdGhlIGludGVybmFsIGluaXQKZnVuY3Rpb24uIE1vZHVsZXMg dGhhdCBkb24ndCBoYXZlIG9uZSB3aWxsIGJlIHRyZWF0ZWQgYXMgY3VzdG9tIHVzZXIKZmxvd3Mg aW4gZXJyb3IgbWVzc2FnZXMuCgpUaGlzIHdpbGwgbGV0IGJsZWVkaW5nLWVkZ2UgZGV2ZWxvcGVy cyBtb3JlIGVhc2lseSB0ZXN0IG91dCB0aGUgQVBJIGFuZApwcm92aWRlIGZlZWRiYWNrIGZvciBQ RzIwLCBieSB0ZWxsaW5nIHRoZSBydW50aW1lIGxpbmtlciB0byBmaW5kIGEKZGlmZmVyZW50IGxp YnBxLW9hdXRoLiBJdCByZW1haW5zIHVuZG9jdW1lbnRlZCBmb3IgZW5kIHVzZXJzLgoKUmV2aWV3 ZWQtYnk6IFpzb2x0IFBhcnJhZ2kgPHpzb2x0LnBhcnJhZ2lAcGVyY29uYS5jb20+CkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FPWW1pJTJCbXJHZyUyQm5fWDJNT0xnZVdjajN2X00w MGdSOHV6X0Q3bU04eiUzRGRYMUpZVmJnJTQwbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmggfCAgMiArLQogc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtYXV0aC1vYXV0aC5jIHwgNzEgKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogMiBmaWxl cyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmggYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1hdXRoLW9hdXRoLmgKaW5kZXggMmIyMmQyM2ZmZGUuLjg3MmY1ZGY1NTFhIDEwMDY0 NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmgKKysrIGIvc3JjL2lu dGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5oCkBAIC0zNiw3ICszNiw3IEBAIHR5cGVkZWYg c3RydWN0CiAKIAlib29sCQl2MTsKIAlib29sCQlidWlsdGluOwotCXZvaWQJICAgKmJ1aWx0aW5f ZmxvdzsKKwl2b2lkCSAgICpmbG93X21vZHVsZTsKIH0gZmVfb2F1dGhfc3RhdGU7CiAKIGV4dGVy biB2b2lkIHBxQ2xlYXJPQXV0aFRva2VuKFBHY29ubiAqY29ubik7CmRpZmYgLS1naXQgYS9zcmMv aW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9m ZS1hdXRoLW9hdXRoLmMKaW5kZXggYzU5YjRjZTZkMzAuLjhkZDAzOTJiM2QwIDEwMDY0NAotLS0g YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKKysrIGIvc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5jCkBAIC04ODksOCArODg5LDggQEAgdXNlX2J1aWx0aW5f ZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdvYXV0aEJlYXJlclJl cXVlc3RWMiAqcmUKIAkJImxpYnBxLW9hdXRoIiBETFNVRkZJWDsKICNlbmRpZgogCi0Jc3RhdGUt PmJ1aWx0aW5fZmxvdyA9IGRsb3Blbihtb2R1bGVfbmFtZSwgUlRMRF9OT1cgfCBSVExEX0xPQ0FM KTsKLQlpZiAoIXN0YXRlLT5idWlsdGluX2Zsb3cpCisJc3RhdGUtPmZsb3dfbW9kdWxlID0gZGxv cGVuKG1vZHVsZV9uYW1lLCBSVExEX05PVyB8IFJUTERfTE9DQUwpOworCWlmICghc3RhdGUtPmZs b3dfbW9kdWxlKQogCXsKIAkJLyoKIAkJICogRm9yIGVuZCB1c2VycywgdGhpcyBwcm9iYWJseSBp c24ndCBhbiBlcnJvciBjb25kaXRpb24sIGl0IGp1c3QKQEAgLTkwNSw4ICs5MDUsMTYgQEAgdXNl X2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdvYXV0 aEJlYXJlclJlcXVlc3RWMiAqcmUKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKChpbml0ID0gZGxz eW0oc3RhdGUtPmJ1aWx0aW5fZmxvdywgImxpYnBxX29hdXRoX2luaXQiKSkgPT0gTlVMTAotCQl8 fCAoc3RhcnRfZmxvdyA9IGRsc3ltKHN0YXRlLT5idWlsdGluX2Zsb3csICJwZ19zdGFydF9vYXV0 aGJlYXJlciIpKSA9PSBOVUxMKQorCS8qCisJICogT3VyIGxpYnBxLW9hdXRoLnNvIHByb3ZpZGVz IGEgc3BlY2lhbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgbGlicHEKKwkgKiBpbnRlZ3Jh dGlvbi4gSWYgd2UgZG9uJ3QgZmluZCB0aGlzLCBhc3N1bWUgdGhhdCBhIGN1c3RvbSBtb2R1bGUg aXMgaW4KKwkgKiB1c2UgaW5zdGVhZC4KKwkgKi8KKwlpbml0ID0gZGxzeW0oc3RhdGUtPmZsb3df bW9kdWxlLCAibGlicHFfb2F1dGhfaW5pdCIpOworCWlmICghaW5pdCkKKwkJc3RhdGUtPmJ1aWx0 aW4gPSBmYWxzZTsgLyogYWRqdXN0IG91ciBlcnJvciBtZXNzYWdlcyAqLworCisJaWYgKChzdGFy dF9mbG93ID0gZGxzeW0oc3RhdGUtPmZsb3dfbW9kdWxlLCAicGdfc3RhcnRfb2F1dGhiZWFyZXIi KSkgPT0gTlVMTCkKIAl7CiAJCS8qCiAJCSAqIFRoaXMgaXMgbW9yZSBvZiBhbiBlcnJvciBjb25k aXRpb24gdGhhbiB0aGUgb25lIGFib3ZlLCBidXQgdGhlCkBAIC05MTYsOCArOTI0LDggQEAgdXNl X2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdvYXV0 aEJlYXJlclJlcXVlc3RWMiAqcmUKIAkJaWYgKG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxl ZCgpKQogCQkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgZGxzeW0gZm9yIGxpYnBxLW9hdXRoOiAl c1xuIiwgZGxlcnJvcigpKTsKIAotCQlkbGNsb3NlKHN0YXRlLT5idWlsdGluX2Zsb3cpOwotCQlz dGF0ZS0+YnVpbHRpbl9mbG93ID0gTlVMTDsKKwkJZGxjbG9zZShzdGF0ZS0+Zmxvd19tb2R1bGUp OworCQlzdGF0ZS0+Zmxvd19tb2R1bGUgPSBOVUxMOwogCiAJCXJlcXVlc3QtPmVycm9yID0gbGli cHFfZ2V0dGV4dCgiY291bGQgbm90IGZpbmQgZW50cnkgcG9pbnQgZm9yIGxpYnBxLW9hdXRoIik7 CiAJCXJldHVybiAtMTsKQEAgLTkyOCwzOSArOTM2LDQyIEBAIHVzZV9idWlsdGluX2Zsb3coUEdj b25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIg KnJlCiAJICogcGVybWFuZW50bHkuCiAJICovCiAKLQkvKgotCSAqIFdlIG5lZWQgdG8gaW5qZWN0 IG5lY2Vzc2FyeSBmdW5jdGlvbiBwb2ludGVycyBpbnRvIHRoZSBtb2R1bGUuIFRoaXMKLQkgKiBv bmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSAtLSBldmVuIGlmIHRoZSBwb2ludGVycyBhcmUgY29u c3RhbnQsCi0JICogYXNzaWduaW5nIHRoZW0gd2hpbGUgYW5vdGhlciB0aHJlYWQgaXMgZXhlY3V0 aW5nIHRoZSBmbG93cyBmZWVscyBsaWtlCi0JICogdGVtcHRpbmcgZmF0ZS4KLQkgKi8KLQlpZiAo KGxvY2tlcnIgPSBwdGhyZWFkX211dGV4X2xvY2soJmluaXRfbXV0ZXgpKSAhPSAwKQorCWlmIChp bml0KQogCXsKLQkJLyogU2hvdWxkIG5vdCBoYXBwZW4uLi4gYnV0IGRvbid0IGNvbnRpbnVlIGlm IGl0IGRvZXMuICovCi0JCUFzc2VydChmYWxzZSk7CisJCS8qCisJCSAqIFdlIG5lZWQgdG8gaW5q ZWN0IG5lY2Vzc2FyeSBmdW5jdGlvbiBwb2ludGVycyBpbnRvIHRoZSBtb2R1bGUuIFRoaXMKKwkJ ICogb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UgLS0gZXZlbiBpZiB0aGUgcG9pbnRlcnMgYXJl IGNvbnN0YW50LAorCQkgKiBhc3NpZ25pbmcgdGhlbSB3aGlsZSBhbm90aGVyIHRocmVhZCBpcyBl eGVjdXRpbmcgdGhlIGZsb3dzIGZlZWxzCisJCSAqIGxpa2UgdGVtcHRpbmcgZmF0ZS4KKwkJICov CisJCWlmICgobG9ja2VyciA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmaW5pdF9tdXRleCkpICE9IDAp CisJCXsKKwkJCS8qIFNob3VsZCBub3QgaGFwcGVuLi4uIGJ1dCBkb24ndCBjb250aW51ZSBpZiBp dCBkb2VzLiAqLworCQkJQXNzZXJ0KGZhbHNlKTsKIAotCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29u bi0+ZXJyb3JNZXNzYWdlLAotCQkJCQkJICAidXNlX2J1aWx0aW5fZmxvdzogZmFpbGVkIHRvIGxv Y2sgbXV0ZXggKCVkKVxuIiwKLQkJCQkJCSAgbG9ja2Vycik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZl cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCSAgInVzZV9idWlsdGluX2Zsb3c6IGZhaWxl ZCB0byBsb2NrIG11dGV4ICglZClcbiIsCisJCQkJCQkJICBsb2NrZXJyKTsKIAotCQlyZXF1ZXN0 LT5lcnJvciA9ICIiOwkvKiBzYXRpc2Z5IHJlcG9ydF9mbG93X2Vycm9yKCkgKi8KLQkJcmV0dXJu IC0xOwotCX0KKwkJCXJlcXVlc3QtPmVycm9yID0gIiI7CS8qIHNhdGlzZnkgcmVwb3J0X2Zsb3df ZXJyb3IoKSAqLworCQkJcmV0dXJuIC0xOworCQl9CiAKLQlpZiAoIWluaXRpYWxpemVkKQotCXsK LQkJaW5pdCgKKwkJaWYgKCFpbml0aWFsaXplZCkKKwkJeworCQkJaW5pdCgKICNpZmRlZiBFTkFC TEVfTkxTCi0JCQkgbGlicHFfZ2V0dGV4dAorCQkJCSBsaWJwcV9nZXR0ZXh0CiAjZWxzZQotCQkJ IE5VTEwKKwkJCQkgTlVMTAogI2VuZGlmCi0JCQkpOworCQkJCSk7CiAKLQkJaW5pdGlhbGl6ZWQg PSB0cnVlOwotCX0KKwkJCWluaXRpYWxpemVkID0gdHJ1ZTsKKwkJfQogCi0JcHRocmVhZF9tdXRl eF91bmxvY2soJmluaXRfbXV0ZXgpOworCQlwdGhyZWFkX211dGV4X3VubG9jaygmaW5pdF9tdXRl eCk7CisJfQogCiAJcmV0dXJuIChzdGFydF9mbG93KGNvbm4sIHJlcXVlc3QpID09IDApID8gMSA6 IC0xOwogfQotLSAKMi4zNC4xCgo= --000000000000bb1124064ceba11a Content-Type: application/octet-stream; name="v8-0003-WIP-Introduce-third-party-OAuth-flow-plugins.patch" Content-Disposition: attachment; filename="v8-0003-WIP-Introduce-third-party-OAuth-flow-plugins.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmp7b4zc3 RnJvbSA2NTFkOWJkY2JjM2YwODZiYmRhOWZjMTQ1NTk1OWQ2NmJmYjA5NDAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAzIERlYyAyMDI1IDE1OjQ3OjIzIC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2OCAzLzNdIFdJUDogSW50cm9kdWNlIHRoaXJkLXBhcnR5IE9BdXRoIGZsb3cgcGx1 Z2lucz8KCltOb3QgaW50ZW5kZWQgZm9yIFBHMTkuXQoKVGhpcyBleHBlcmltZW50YWwgY29tbWl0 IHByb21vdGVzIHRoZSBwZ19zdGFydF9vYXV0aGJlYXJlciBBUEkgdG8gYQpwdWJsaWMgaGVhZGVy IChsaWJwcS1vYXV0aC5oKSBhbmQgYWRkcyBhIFBHT0FVVEhNT0RVTEUgZW52aXJvbm1lbnQKdmFy aWFibGUgdGhhdCBvdmVycmlkZXMgdGhlIGxvYWQgcGF0aCBmb3IgdGhlIHBsdWdpbiwgYWxsb3dp bmcgdXNlcnMgdG8KcHJvdmlkZSB0aGVpciBvd24uIEl0J3MgcHJvYmFibHkgbm90IGEgZ29vZCBz b2x1dGlvbjsgaXQgcHJvdmlkZXMgYWxtb3N0Cm5vdGhpbmcgb3ZlciBMRF9MSUJSQVJZX1BBVEgg KG90aGVyIHRoYW4gbm90IGJlaW5nIExEX0xJQlJBUllfUEFUSCkuCgpUaGlzIGlzIGEgcmVsYXRp dmVseSBzbWFsbCBhbW91bnQgb2YgaW1wbGVtZW50YXRpb24gY2hhbmdlLCBidXQKdW5mb3J0dW5h dGVseSB0aGUgdGVzdHMgaGF2ZSBhIGxhcmdlIGFtb3VudCBvZiBjb2RlIG1vdGlvbiB0byBiZSBh YmxlIHRvCnNoYXJlIGxvZ2ljIGJldHdlZW4gdGhlIHRlc3QgZXhlY3V0YWJsZSBhbmQgcGx1Z2lu LiBJIG1pZ2h0IG5lZWQgdG8Kc3BsaXQgdGhhdCBpbnRvIG11bHRpcGxlIHNxdWFzaCEgY29tbWl0 cyB0byBtYWtlIGl0IG1vcmUgZWFzaWx5CnJldmlld2FibGUuCgpUT0RPOiBmaWd1cmUgb3V0IFBH RExMRVhQT1JULCB3aGljaCB3ZSBkbyBub3QgY3VycmVudGx5IHByb3ZpZGUgcHVibGljbHkKVE9E TzogbG9jayBkb3duIFBHT0FVVEhNT0RVTEUgYXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGludHJvZHVj aW5nIGV4Y2l0aW5nCiAgICAgIG5ldyB2dWxuZXJhYmlsaXRpZXMKVE9ETzogaG93IGhhcmQgd291 bGQgaXQgYmUgdG8gc3VwcG9ydCBXaW5kb3dzIGhlcmU/CgpSZXZpZXdlZC1ieTogWnNvbHQgUGFy cmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KUmV2aWV3ZWQtYnk6IEpvbmF0aGFuIEdv bnphbGV6IFYuIDxqb25hdGhhbi5hYmRpZWxAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL0NBT1ltaSUyQm1yR2clMkJuX1gyTU9MZ2VXY2ozdl9NMDBnUjh1el9EN21N OHolM0RkWDFKWVZiZyU0MG1haWwuZ21haWwuY29tCi0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEv bWVzb24uYnVpbGQgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBxL01h a2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0 aC9vYXV0aC1jdXJsLmggICAgICAgfCAgMjQgLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBx LW9hdXRoLmggICAgICAgICAgICB8ICA1MiArKysKIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRo L29hdXRoLWN1cmwuYyAgICAgICB8ICAgMiArLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0 aC1vYXV0aC5jICAgICAgICAgIHwgIDQ2ICsrLQogc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxp ZGF0b3IvbWVzb24uYnVpbGQgIHwgIDE3ICstCiBzcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlk YXRvci9NYWtlZmlsZSAgICAgfCAgMTIgKy0KIC4uLi9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfdGVz dF9jb21tb24uaCAgICAgICB8ICAyNiArKwogc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0 b3Ivb2F1dGhfZmxvdy5jIHwgIDcyICsrKysKIC4uLi9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfaG9v a19jbGllbnQuYyAgICAgICB8IDMxOCArLS0tLS0tLS0tLS0tLS0KIC4uLi9vYXV0aF92YWxpZGF0 b3Ivb2F1dGhfdGVzdF9jb21tb24uYyAgICAgICB8IDM3MyArKysrKysrKysrKysrKysrKysKIC4u Li9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwgICB8ICA1NyArKy0KIDEz IGZpbGVzIGNoYW5nZWQsIDY0NyBpbnNlcnRpb25zKCspLCAzNTUgZGVsZXRpb25zKC0pCiBkZWxl dGUgbW9kZSAxMDA2NDQgc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtb2F1dGguaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX3Rl c3RfY29tbW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL29hdXRoX3Zh bGlkYXRvci9vYXV0aF9mbG93LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L29hdXRoX3ZhbGlkYXRvci9vYXV0aF90ZXN0X2NvbW1vbi5jCgpkaWZmIC0tZ2l0IGEvc3JjL2lu dGVyZmFjZXMvbGlicHEvbWVzb24uYnVpbGQgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5i dWlsZAppbmRleCBiMGFlNzIxNjdhMS4uNGViMDI5Y2MyYTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29u LmJ1aWxkCkBAIC0xMzUsNiArMTM1LDcgQEAgcGtnY29uZmlnLmdlbmVyYXRlKAogaW5zdGFsbF9o ZWFkZXJzKAogICAnbGlicHEtZmUuaCcsCiAgICdsaWJwcS1ldmVudHMuaCcsCisgICdsaWJwcS1v YXV0aC5oJywKICkKIAogaW5zdGFsbF9oZWFkZXJzKApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFj ZXMvbGlicHEvTWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZQppbmRleCAw OTYzOTk1ZWVkNC4uYTY1YzM2YTYzZmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx L01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCkBAIC0xNTcsNiAr MTU3LDcgQEAgJCh0b3BfYnVpbGRkaXIpL3NyYy9wb3J0L3BnX2NvbmZpZ19wYXRocy5oOgogaW5z dGFsbDogYWxsIGluc3RhbGxkaXJzIGluc3RhbGwtbGliCiAJJChJTlNUQUxMX0RBVEEpICQoc3Jj ZGlyKS9saWJwcS1mZS5oICckKERFU1RESVIpJChpbmNsdWRlZGlyKScKIAkkKElOU1RBTExfREFU QSkgJChzcmNkaXIpL2xpYnBxLWV2ZW50cy5oICckKERFU1RESVIpJChpbmNsdWRlZGlyKScKKwkk KElOU1RBTExfREFUQSkgJChzcmNkaXIpL2xpYnBxLW9hdXRoLmggJyQoREVTVERJUikkKGluY2x1 ZGVkaXIpJwogCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvbGlicHEtaW50LmggJyQoREVTVERJ UikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpJwogCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZmUt YXV0aC1zYXNsLmggJyQoREVTVERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpJwogCSQoSU5TVEFM TF9EQVRBKSAkKHNyY2RpcikvcHFleHBidWZmZXIuaCAnJChERVNURElSKSQoaW5jbHVkZWRpcl9p bnRlcm5hbCknCkBAIC0xNzksNiArMTgwLDcgQEAgaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWxp YgogdW5pbnN0YWxsOiB1bmluc3RhbGwtbGliCiAJcm0gLWYgJyQoREVTVERJUikkKGluY2x1ZGVk aXIpL2xpYnBxLWZlLmgnCiAJcm0gLWYgJyQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYnBxLWV2 ZW50cy5oJworCXJtIC1mICckKERFU1RESVIpJChpbmNsdWRlZGlyKS9saWJwcS1vYXV0aC5oJwog CXJtIC1mICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKS9saWJwcS1pbnQuaCcKIAly bSAtZiAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCkvZmUtYXV0aC1zYXNsLmgnCiAJ cm0gLWYgJyQoREVTVERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpL3BxZXhwYnVmZmVyLmgnCmRp ZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmggYi9zcmMv aW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDFkNGRkNzY2MjE3Li4wMDAwMDAwMDAwMAotLS0gYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS1vYXV0aC9vYXV0aC1jdXJsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0v Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBvYXV0aC1jdXJsLmgKLSAqCi0gKgkgIERlZmluaXRp b25zIGZvciBPQXV0aCBEZXZpY2UgQXV0aG9yaXphdGlvbiBtb2R1bGUKLSAqCi0gKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5p dmVyc2l0eSBvZiBDYWxpZm9ybmlhCi0gKgotICogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgv b2F1dGgtY3VybC5oCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotI2lmbmRlZiBPQVVU SF9DVVJMX0gKLSNkZWZpbmUgT0FVVEhfQ1VSTF9ICi0KLSNpbmNsdWRlICJsaWJwcS1mZS5oIgot Ci0vKiBFeHBvcnRlZCBmbG93IGNhbGxiYWNrLiAqLwotZXh0ZXJuIFBHRExMRVhQT1JUIGludCBw Z19zdGFydF9vYXV0aGJlYXJlcihQR2Nvbm4gKmNvbm4sCi0JCQkJCQkJCQkJCVBHb2F1dGhCZWFy ZXJSZXF1ZXN0VjIgKnJlcXVlc3QpOwotCi0jZW5kaWYJCQkJCQkJLyogT0FVVEhfQ1VSTF9IICov CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1vYXV0aC5oIGIvc3JjL2lu dGVyZmFjZXMvbGlicHEvbGlicHEtb2F1dGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMmE2MmIzMzBiMWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1vYXV0aC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGxpYnBxLW9hdXRoLmgKKyAqCSAgVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHMg YW5kIGZ1bmN0aW9ucyB1c2VkIGJ5IGN1c3RvbSBPQXV0aCBwbHVnaW5zLgorICoKKyAqIENvcHly aWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KiBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1vYXV0aC5oCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworI2lmbmRlZiBMSUJQUV9PQVVUSF9ICisjZGVmaW5lIExJQlBRX09BVVRIX0gK KworI2luY2x1ZGUgImxpYnBxLWZlLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJD IgoreworI2VuZGlmCisKKy8qIFhYWCBjYW4ndCByZWx5IG9uIGMuaCwgYnV0IGR1cGxpY2F0aW5n IHRoaXMgaXMgYXNraW5nIGZvciB0cm91YmxlICovCisjaWZuZGVmIFBHRExMRVhQT1JUCisjaWZk ZWYgX1dJTjMyCisjZGVmaW5lIFBHRExMRVhQT1JUIF9fZGVjbHNwZWMgKGRsbGV4cG9ydCkKKyNl bGlmIGRlZmluZWQoX19oYXNfYXR0cmlidXRlKQorI2lmIF9faGFzX2F0dHJpYnV0ZSh2aXNpYmls aXR5KQorI2RlZmluZSBQR0RMTEVYUE9SVCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZh dWx0IikpKQorI2Vsc2UKKyNkZWZpbmUgUEdETExFWFBPUlQKKyNlbmRpZgorI2Vsc2UKKyNkZWZp bmUgUEdETExFWFBPUlQKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBWMSBBUEkKKyAqCisgKiBG bG93IHBsdWdpbnMgbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2FsbGJh Y2suCisgKgorICogVE9ETzogcHJvdmlkZSBhIG1hZ2ljIHN0cnVjdCB0aGF0IGFsbG93cyBiYWNr d2FyZHMgYnV0IG5vdCBmb3J3YXJkcyBjb21wYXQ/CisgKi8KK2V4dGVybiBQR0RMTEVYUE9SVCBp bnQgcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpjb25uLAorCQkJCQkJCQkJCQlQR29hdXRo QmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5k aWYKKworI2VuZGlmCQkJCQkJCS8qIExJQlBRX09BVVRIX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx LW9hdXRoL29hdXRoLWN1cmwuYwppbmRleCAwNTJlY2QzMmRhMi4uNDAwY2EwN2MyOTcgMTAwNjQ0 Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYworKysgYi9zcmMv aW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKQEAgLTI5LDggKzI5LDggQEAKICNl bmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2pzb25hcGkuaCIKKyNpbmNsdWRlICJsaWJwcS1vYXV0 aC5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCi0jaW5jbHVkZSAib2F1dGgtY3VybC5oIgog CiAjaWZkZWYgVVNFX0RZTkFNSUNfT0FVVEgKIApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtYXV0aC1vYXV0aC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0 aC5jCmluZGV4IDhkZDAzOTJiM2QwLi5iNmNiN2RmOTQ5NyAxMDA2NDQKLS0tIGEvc3JjL2ludGVy ZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWF1dGgtb2F1dGguYwpAQCAtMTcsNiArMTcsOCBAQAogCiAjaWZkZWYgVVNFX0RZTkFNSUNfT0FV VEgKICNpbmNsdWRlIDxkbGZjbi5oPgorI2Vsc2UKKyNpbmNsdWRlICJsaWJwcS1vYXV0aC5oIgog I2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24vYmFzZTY0LmgiCkBAIC04ODIsMzMgKzg4NCw1NSBA QCB1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlLCBQ R29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZQogCSAqIE9uIHRoZSBvdGhlciBwbGF0Zm9ybXMsIGxv YWQgdGhlIG1vZHVsZSB1c2luZyBvbmx5IHRoZSBiYXNlbmFtZSwgdG8KIAkgKiByZWx5IG9uIHRo ZSBydW50aW1lIGxpbmtlcidzIHN0YW5kYXJkIHNlYXJjaCBiZWhhdmlvci4KIAkgKi8KLQljb25z dCBjaGFyICpjb25zdCBtb2R1bGVfbmFtZSA9CisJY29uc3QgY2hhciAqbW9kdWxlX25hbWUgPQog I2lmIGRlZmluZWQoX19kYXJ3aW5fXykKIAkJTElCRElSICIvbGlicHEtb2F1dGgiIERMU1VGRklY OwogI2Vsc2UKIAkJImxpYnBxLW9hdXRoIiBETFNVRkZJWDsKICNlbmRpZgogCisJLyotCisJICog QWRkaXRpb25hbGx5LCB0aGUgdXNlciBtYXkgb3ZlcnJpZGUgdGhlIG1vZHVsZSBwYXRoIGV4cGxp Y2l0bHkgdG8gYmUKKwkgKiBhYmxlIHRvIHByb3ZpZGUgdGhlaXIgb3duIG1vZHVsZSwgdmlhIFBH T0FVVEhNT0RVTEUuCisJICoKKwkgKiBUT0RPOiBoYXZlIHRvIHRoaW5rIGFib3V0IF9hbGxfIHRo ZSBzZWN1cml0eSByYW1pZmljYXRpb25zIG9mIHRoaXMuIFdoYXQKKwkgKiBleGlzdGluZyBwcm90 ZWN0aW9ucyBpbiBMRF9MSUJSQVJZX1BBVEggKGFuZC9vciBTSVApIGFyZSB3ZSBwb3RlbnRpYWxs eQorCSAqIGJ5cGFzc2luZz8gU2hvdWxkIHdlIGNoZWNrIHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUg ZmlsZSBzb21laG93Li4uPworCSAqIFRPRE86IG1heWJlIGRpc2FsbG93IGFueXRoaW5nIG5vdCB1 bmRlcm5lYXRoIExJQkRJUj8gb3IgUEtHTElCRElSPworCSAqIFNob3VsZCBpdCBoYXZlIGEgbmFt aW5nIGNvbnZlbnRpb24/CisJICovCisJY29uc3QgY2hhciAqZW52ID0gZ2V0ZW52KCJQR09BVVRI TU9EVUxFIik7CisKKwlpZiAoZW52ICYmIGVudlswXSkKKwkJbW9kdWxlX25hbWUgPSBlbnY7CisJ ZWxzZQorCQlzdGF0ZS0+YnVpbHRpbiA9IHRydWU7CisKIAlzdGF0ZS0+Zmxvd19tb2R1bGUgPSBk bG9wZW4obW9kdWxlX25hbWUsIFJUTERfTk9XIHwgUlRMRF9MT0NBTCk7CiAJaWYgKCFzdGF0ZS0+ Zmxvd19tb2R1bGUpCiAJewogCQkvKgogCQkgKiBGb3IgZW5kIHVzZXJzLCB0aGlzIHByb2JhYmx5 IGlzbid0IGFuIGVycm9yIGNvbmRpdGlvbiwgaXQganVzdAogCQkgKiBtZWFucyB0aGUgZmxvdyBp c24ndCBpbnN0YWxsZWQuIERldmVsb3BlcnMgYW5kIHBhY2thZ2UgbWFpbnRhaW5lcnMKLQkJICog bWF5IHdhbnQgdG8gZGVidWcgdGhpcyB2aWEgdGhlIFBHT0FVVEhERUJVRyBlbnZ2YXIsIHRob3Vn aC4KKwkJICogbWF5IHdhbnQgdG8gZGVidWcgdGhpcyB2aWEgdGhlIFBHT0FVVEhERUJVRyBlbnZ2 YXIsIHRob3VnaCwgYW5kIHdlCisJCSAqIHNob3VsZCBiZSBtb3JlIG5vaXN5IGlmIHVzZXJzIHRy aWVkIHRvIHByb3ZpZGUgYSBQR09BVVRITU9EVUxFLgogCQkgKgogCQkgKiBOb3RlIHRoYXQgUE9T SVggZGxlcnJvcigpIGlzbid0IGd1YXJhbnRlZWQgdG8gYmUgdGhyZWFkc2FmZS4KIAkJICovCiAJ CWlmIChvYXV0aF91bnNhZmVfZGVidWdnaW5nX2VuYWJsZWQoKSkKLQkJCWZwcmludGYoc3RkZXJy LCAiZmFpbGVkIGRsb3BlbiBmb3IgbGlicHEtb2F1dGg6ICVzXG4iLCBkbGVycm9yKCkpOworCQkJ ZnByaW50ZihzdGRlcnIsICJmYWlsZWQgZGxvcGVuIGZvciAlczogJXNcbiIsIG1vZHVsZV9uYW1l LCBkbGVycm9yKCkpOworCisJCWlmIChzdGF0ZS0+YnVpbHRpbikKKwkJCXJldHVybiAwOwogCi0J CXJldHVybiAwOworCQlyZXF1ZXN0LT5lcnJvciA9IGxpYnBxX2dldHRleHQoInBsdWdpbiBjb3Vs ZCBub3QgYmUgbG9hZGVkIik7CisJCXJldHVybiAtMTsKIAl9CiAKIAkvKgogCSAqIE91ciBsaWJw cS1vYXV0aC5zbyBwcm92aWRlcyBhIHNwZWNpYWwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9y IGxpYnBxCi0JICogaW50ZWdyYXRpb24uIElmIHdlIGRvbid0IGZpbmQgdGhpcywgYXNzdW1lIHRo YXQgYSBjdXN0b20gbW9kdWxlIGlzIGluCi0JICogdXNlIGluc3RlYWQuCisJICogaW50ZWdyYXRp b24uIEl0J3Mgbm90IGEgcHJvYmxlbSBpZiB3ZSBkb24ndCBmaW5kIHRoaXM7IGl0IGp1c3QgbWVh bnMKKwkgKiB0aGF0IGEgdXNlci1kZWZpbmVkIG1vZHVsZSBpcyBiZWluZyB1c2VkLgogCSAqLwog CWluaXQgPSBkbHN5bShzdGF0ZS0+Zmxvd19tb2R1bGUsICJsaWJwcV9vYXV0aF9pbml0Iik7CiAJ aWYgKCFpbml0KQpAQCAtOTIyLDEyICs5NDYsMTQgQEAgdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4g KmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmUK IAkJICogdGhyZWFkc2FmZXR5IGlzc3VlLgogCQkgKi8KIAkJaWYgKG9hdXRoX3Vuc2FmZV9kZWJ1 Z2dpbmdfZW5hYmxlZCgpKQotCQkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgZGxzeW0gZm9yIGxp YnBxLW9hdXRoOiAlc1xuIiwgZGxlcnJvcigpKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVk IGRsc3ltIGZvciAlczogJXNcbiIsIG1vZHVsZV9uYW1lLCBkbGVycm9yKCkpOwogCiAJCWRsY2xv c2Uoc3RhdGUtPmZsb3dfbW9kdWxlKTsKIAkJc3RhdGUtPmZsb3dfbW9kdWxlID0gTlVMTDsKIAot CQlyZXF1ZXN0LT5lcnJvciA9IGxpYnBxX2dldHRleHQoImNvdWxkIG5vdCBmaW5kIGVudHJ5IHBv aW50IGZvciBsaWJwcS1vYXV0aCIpOworCQlyZXF1ZXN0LT5lcnJvciA9IHN0YXRlLT5idWlsdGlu ID8KKwkJCWxpYnBxX2dldHRleHQoImNvdWxkIG5vdCBmaW5kIGVudHJ5IHBvaW50IGZvciBsaWJw cS1vYXV0aCIpIDoKKwkJCWxpYnBxX2dldHRleHQoImNvdWxkIG5vdCBmaW5kIGVudHJ5IHBvaW50 IGZvciBjdXN0b20gcGx1Z2luIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTk4OCw2ICsxMDE0 LDcgQEAgZXh0ZXJuIGludAlwZ19zdGFydF9vYXV0aGJlYXJlcihQR2Nvbm4gKmNvbm4sIFBHb2F1 dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpOwogc3RhdGljIGludAogdXNlX2J1aWx0aW5fZmxv dyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdvYXV0aEJlYXJlclJlcXVl c3RWMiAqcmVxdWVzdCkKIHsKKwlzdGF0ZS0+YnVpbHRpbiA9IHRydWU7CiAJcmV0dXJuIChwZ19z dGFydF9vYXV0aGJlYXJlcihjb25uLCByZXF1ZXN0KSA9PSAwKSA/IDEgOiAtMTsKIH0KIApAQCAt MTA0MSwxMCArMTA2OCw3IEBAIHNldHVwX3Rva2VuX3JlcXVlc3QoUEdjb25uICpjb25uLCBmZV9v YXV0aF9zdGF0ZSAqc3RhdGUpCiAJCXBvaXNvbl9yZXFfdjIoJnJlcXVlc3QsIGZhbHNlKTsKIAl9 CiAJaWYgKHJlcyA9PSAwKQotCXsKLQkJc3RhdGUtPmJ1aWx0aW4gPSB0cnVlOwogCQlyZXMgPSB1 c2VfYnVpbHRpbl9mbG93KGNvbm4sIHN0YXRlLCAmcmVxdWVzdCk7Ci0JfQogCiAJaWYgKHJlcyA+ IDApCiAJewpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvbWVz b24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9tZXNvbi5idWlsZApp bmRleCA1MDZhOTg5NGI4ZC4uYmMzNDBjMTI3NTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvb2F1dGhfdmFsaWRhdG9yL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1 dGhfdmFsaWRhdG9yL21lc29uLmJ1aWxkCkBAIC01MCw2ICs1MCw3IEBAIHRlc3RfaW5zdGFsbF9s aWJzICs9IG1hZ2ljX3ZhbGlkYXRvcgogCiBvYXV0aF9ob29rX2NsaWVudF9zb3VyY2VzID0gZmls ZXMoCiAgICdvYXV0aF9ob29rX2NsaWVudC5jJywKKyAgJ29hdXRoX3Rlc3RfY29tbW9uLmMnLAog KQogCiBpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKQEAgLTY3LDYgKzY4LDE5IEBAIG9hdXRo X2hvb2tfY2xpZW50ID0gZXhlY3V0YWJsZSgnb2F1dGhfaG9va19jbGllbnQnLAogKQogdGVzdHBy ZXBfdGFyZ2V0cyArPSBvYXV0aF9ob29rX2NsaWVudAogCitvYXV0aF9mbG93ID0gc2hhcmVkX21v ZHVsZSgnb2F1dGhfZmxvdycsCisgIGZpbGVzKAorICAgICdvYXV0aF9mbG93LmMnLAorICAgICdv YXV0aF90ZXN0X2NvbW1vbi5jJywKKyAgKSwKKyAgaW5jbHVkZV9kaXJlY3RvcmllczogW3Bvc3Rn cmVzX2luY10sCisgIGRlcGVuZGVuY2llczogW2Zyb250ZW5kX3NobGliX2NvZGUsIGxpYnBxXSwK KyAga3dhcmdzOiBkZWZhdWx0X2xpYl9hcmdzICsgeworICAgICdpbnN0YWxsJzogZmFsc2UsCisg IH0sCispCit0ZXN0cHJlcF90YXJnZXRzICs9IG9hdXRoX2Zsb3cKKwogdGVzdHMgKz0gewogICAn bmFtZSc6ICdvYXV0aF92YWxpZGF0b3InLAogICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9k aXIoKSwKQEAgLTgxLDcgKzk1LDggQEAgdGVzdHMgKz0gewogICAgICAgJ3dpdGhfbGliY3VybCc6 IG9hdXRoX2Zsb3dfc3VwcG9ydGVkID8gJ3llcycgOiAnbm8nLAogICAgICAgJ3dpdGhfcHl0aG9u JzogJ3llcycsCiAgICAgICAnY2VydF9kaXInOiBtZXNvbi5wcm9qZWN0X3NvdXJjZV9yb290KCkg LyAnc3JjL3Rlc3Qvc3NsL3NzbCcsCisgICAgICAnZmxvd19tb2R1bGVfcGF0aCc6IG9hdXRoX2Zs b3cuZnVsbF9wYXRoKCksCiAgICAgfSwKLSAgICAnZGVwcyc6IFtvYXV0aF9ob29rX2NsaWVudF0s CisgICAgJ2RlcHMnOiBbb2F1dGhfaG9va19jbGllbnQsIG9hdXRoX2Zsb3ddLAogICB9LAogfQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvTWFrZWZpbGUgYi9z cmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9NYWtlZmlsZQppbmRleCAwYjM5YTg4ZmQ5 Zi4uNDhiMzBhZWEyNGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRh dG9yL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL01ha2Vm aWxlCkBAIC0xNCwxMSArMTQsMTMgQEAgUEdGSUxFREVTQyA9ICJ2YWxpZGF0b3IgLSB0ZXN0IE9B dXRoIHZhbGlkYXRvciBtb2R1bGUiCiAKIFBST0dSQU0gPSBvYXV0aF9ob29rX2NsaWVudAogUEdB UFBJQ09OID0gd2luMzIKLU9CSlMgPSAkKFdJTjMyUkVTKSBvYXV0aF9ob29rX2NsaWVudC5vCitP QkpTID0gJChXSU4zMlJFUykgb2F1dGhfaG9va19jbGllbnQubyBvYXV0aF90ZXN0X2NvbW1vbi5v CiAKIFBHX0NQUEZMQUdTID0gLUkkKGxpYnBxX3NyY2RpcikKIFBHX0xJQlNfSU5URVJOQUwgKz0g JChsaWJwcV9wZ3BvcnQpCiAKK0VYVFJBX0NMRUFOID0gb2F1dGhfZmxvdyQoRExTVUZGSVgpIG9h dXRoX2Zsb3cubworCiBOT19JTlNUQUxMQ0hFQ0sgPSAxCiAKIFRBUF9URVNUUyA9IDEKQEAgLTMz LDkgKzM1LDE1IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCiBpbmNsdWRlICQodG9wX2J1 aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJp Yi9jb250cmliLWdsb2JhbC5tawogCithbGw6IG9hdXRoX2Zsb3ckKERMU1VGRklYKQorCitvYXV0 aF9mbG93JChETFNVRkZJWCk6IG9hdXRoX2Zsb3cubyBvYXV0aF90ZXN0X2NvbW1vbi5vCisJJChD QykgJChDRkxBR1MpICReICQoTERGTEFHUykgJChsaWJwcV9wZ3BvcnRfc2hsaWIpICQoTERGTEFH U19TTCkgLXNoYXJlZCAtbyAkQAorCiBleHBvcnQgUFlUSE9OCiBleHBvcnQgd2l0aF9saWJjdXJs CiBleHBvcnQgd2l0aF9weXRob24KLWV4cG9ydCBjZXJ0X2Rpcj0kKHRvcF9zcmNkaXIpL3NyYy90 ZXN0L3NzbC9zc2wKK2V4cG9ydCBjZXJ0X2RpciA6PSAkKHRvcF9zcmNkaXIpL3NyYy90ZXN0L3Nz bC9zc2wKK2V4cG9ydCBmbG93X21vZHVsZV9wYXRoIDo9ICQoYWJzX3RvcF9idWlsZGRpcikvJChz dWJkaXIpL29hdXRoX2Zsb3ckKERMU1VGRklYKQogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uaCBiL3NyYy90ZXN0 L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX3Rlc3RfY29tbW9uLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMzZTcyZTMwNDQwCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uaApA QCAtMCwwICsxLDI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBvYXV0aF90ZXN0X2Nv bW1vbi5oCisgKgkgIFNoYXJlZCBmdW5jdGlvbmFsaXR5IGZvciBvYXV0aF9ob29rX2NsaWVudCBh bmQgb2F1dGhfZmxvdworICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZu ZGVmIE9BVVRIX1RFU1RfQ09NTU9OX0gKKyNkZWZpbmUgT0FVVEhfVEVTVF9DT01NT05fSAorCisv KgorICogT25seSBwdWJsaWMgaGVhZGVycyBjYW4gYmUgaGVyZSwgc2luY2Ugb2F1dGhfZmxvdy5j IGlzIHRyeWluZyB0byB0ZXN0IG9ubHkKKyAqIHRoZSBwdWJsaWMgQVBJLgorICovCisjaW5jbHVk ZSAibGlicHEtZmUuaCIKKworZXh0ZXJuIGludAlzdHJlc3NfYXN5bmM7CQkvKiBmb3Igb2F1dGhf aG9va19jbGllbnQgKi8KKworZXh0ZXJuIGNoYXIgKm9hdXRoX3Rlc3RfcGFyc2VfYXJndihpbnQg YXJnYywgY2hhciAqYXJndltdLCBpbnQgZm9yX3BsdWdpbik7CitleHRlcm4gaW50CW9hdXRoX3Rl c3RfYXV0aGRhdGFfaG9vayhQR2F1dGhEYXRhIHR5cGUsIFBHY29ubiAqY29ubiwgdm9pZCAqZGF0 YSk7CitleHRlcm4gaW50CW9hdXRoX3Rlc3Rfc3RhcnRfZmxvdyhQR2Nvbm4gKmNvbm4sIFBHb2F1 dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpOworCisjZW5kaWYJCQkJCQkJLyogT0FVVEhfVEVT VF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0 b3Ivb2F1dGhfZmxvdy5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhf Zmxvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZWY2N2YwM2Vi MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29h dXRoX2Zsb3cuYwpAQCAtMCwwICsxLDcyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBv YXV0aF9mbG93LmMKKyAqCSAgVGVzdCBwbHVnaW4gZm9yIGNsaWVudHNpZGUgT0F1dGggZmxvd3MK KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5o PgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBTaW5jZSB3ZSB3YW50IHRvIHRlc3QgdGhlIHB1 YmxpYyBBUEksIG9ubHkgaW5jbHVkZSBwdWJsaWMgaGVhZGVycyBoZXJlLiAqLworI2luY2x1ZGUg ImxpYnBxLWZlLmgiCisjaW5jbHVkZSAibGlicHEtb2F1dGguaCIKKyNpbmNsdWRlICJvYXV0aF90 ZXN0X2NvbW1vbi5oIgorCitzdGF0aWMgdm9pZAorbG9hZF90ZXN0X2ZsYWdzKHZvaWQpCit7CisJ aW50CQkJYXJnYzsKKwljaGFyCSAgKiphcmd2OworCWNoYXIJICAgKmVudiA9IGdldGVudigiT0FV VEhfVEVTVF9GTEFHUyIpOworCWludAkJCWZsYWdfY291bnQ7CisJaW50CQkJaTsKKworCWlmICgh ZW52IHx8ICFlbnZbMF0pCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIk9BVVRIX1RFU1RfRkxBR1Mg bXVzdCBiZSBzZXRcbiIpOworCQlleGl0KDEpOworCX0KKworCWZsYWdfY291bnQgPSAxOworCWZv ciAoY2hhciAqYyA9IGVudjsgKmM7IGMrKykKKwl7CisJCWlmICgqYyA9PSAnXHgwMScpCisJCQlm bGFnX2NvdW50Kys7CisJfQorCisJLyogU2xpY2UgT0FVVEhfVEVTVF9GTEFHUyBpbnRvIGEgZmFr ZSBhcmd2IGFycmF5LiAqLworCWVudiA9IHN0cmR1cChlbnYpOworCWFyZ2MgPSBmbGFnX2NvdW50 ICsgMTsKKwlhcmd2ID0gbWFsbG9jKHNpemVvZigqYXJndikgKiAoYXJnYyArIDEpKTsKKworCWlm ICghZW52IHx8ICFhcmd2KQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJvdXQgb2YgbWVtb3J5Iik7 CisJCWV4aXQoMSk7CisJfQorCisJYXJndlswXSA9ICJbcGx1Z2luIHRlc3RdIjsKKwlmb3IgKGkg PSAxOyBpIDwgZmxhZ19jb3VudDsgaSsrKQorCXsKKwkJYXJndltpXSA9IGVudjsKKworCQllbnYg PSBzdHJjaHIoZW52LCAnXHgwMScpOworCQkqZW52KysgPSAnXDAnOworCX0KKwlhcmd2W2ZsYWdf Y291bnRdID0gZW52OworCWFyZ3ZbYXJnY10gPSBOVUxMOworCisJb2F1dGhfdGVzdF9wYXJzZV9h cmd2KGFyZ2MsIGFyZ3YsIDEgLyogcGx1Z2luICovICk7Cit9CisKK2ludAorcGdfc3RhcnRfb2F1 dGhiZWFyZXIoUEdjb25uICpjb25uLCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KQor eworCWxvYWRfdGVzdF9mbGFncygpOworCisJcmV0dXJuIG9hdXRoX3Rlc3Rfc3RhcnRfZmxvdyhj b25uLCByZXF1ZXN0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFs aWRhdG9yL29hdXRoX2hvb2tfY2xpZW50LmMgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlk YXRvci9vYXV0aF9ob29rX2NsaWVudC5jCmluZGV4IDQ2OTVkNzNlOGY3Li41ZjkzMmFjYzU3MSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfaG9va19j bGllbnQuYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF9ob29r X2NsaWVudC5jCkBAIC0xOCwxNDMgKzE4LDE4IEBACiAKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+ CiAKLSNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgImxpYnBxLWZlLmgiCiAKLXN0 YXRpYyBpbnQJaGFuZGxlX2F1dGhfZGF0YShQR2F1dGhEYXRhIHR5cGUsIFBHY29ubiAqY29ubiwg dm9pZCAqZGF0YSk7Ci1zdGF0aWMgUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBhc3luY19jYihQ R2Nvbm4gKmNvbm4sCi0JCQkJCQkJCQkJICBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxLAotCQkJ CQkJCQkJCSAgcGdzb2NrZXQgKmFsdHNvY2spOwotc3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1 c1R5cGUgbWlzYmVoYXZlX2NiKFBHY29ubiAqY29ubiwKLQkJCQkJCQkJCQkJICBQR29hdXRoQmVh cmVyUmVxdWVzdCAqcmVxLAotCQkJCQkJCQkJCQkgIHBnc29ja2V0ICphbHRzb2NrKTsKLQotc3Rh dGljIHZvaWQKLXVzYWdlKGNoYXIgKmFyZ3ZbXSkKLXsKLQlwcmludGYoInVzYWdlOiAlcyBbZmxh Z3NdIENPTk5JTkZPXG5cbiIsIGFyZ3ZbMF0pOwotCi0JcHJpbnRmKCJyZWNvZ25pemVkIGZsYWdz OlxuIik7Ci0JcHJpbnRmKCIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIHNob3cgdGhpcyBtZXNz YWdlXG4iKTsKLQlwcmludGYoIiAgLXYgVkVSU0lPTiAgICAgICAgICAgICAgc2VsZWN0IHRoZSBo b29rIEFQSSB2ZXJzaW9uIChkZWZhdWx0IDIpXG4iKTsKLQlwcmludGYoIiAgLS1leHBlY3RlZC1z Y29wZSBTQ09QRSAgZmFpbCBpZiByZWNlaXZlZCBzY29wZXMgZG8gbm90IG1hdGNoIFNDT1BFXG4i KTsKLQlwcmludGYoIiAgLS1leHBlY3RlZC11cmkgVVJJICAgICAgZmFpbCBpZiByZWNlaXZlZCBj b25maWd1cmF0aW9uIGxpbmsgZG9lcyBub3QgbWF0Y2ggVVJJXG4iKTsKLQlwcmludGYoIiAgLS1l eHBlY3RlZC1pc3N1ZXIgSVNTICAgZmFpbCBpZiByZWNlaXZlZCBpc3N1ZXIgZG9lcyBub3QgbWF0 Y2ggSVNTICh2MiBvbmx5KVxuIik7Ci0JcHJpbnRmKCIgIC0tbWlzYmVoYXZlPU1PREUgICAgICAg IGhhdmUgdGhlIGhvb2sgZmFpbCByZXF1aXJlZCBwb3N0Y29uZGl0aW9uc1xuIgotCQkgICAiICAg ICAgICAgICAgICAgICAgICAgICAgICAoTU9ERXM6IG5vLWhvb2ssIGZhaWwtYXN5bmMsIG5vLXRv a2VuLCBuby1zb2NrZXQpXG4iKTsKLQlwcmludGYoIiAgLS1uby1ob29rICAgICAgICAgICAgICAg ZG9uJ3QgaW5zdGFsbCBPQXV0aCBob29rc1xuIik7Ci0JcHJpbnRmKCIgIC0taGFuZy1mb3JldmVy ICAgICAgICAgIGRvbid0IGV2ZXIgcmV0dXJuIGEgdG9rZW4gKGNvbWJpbmUgd2l0aCBjb25uZWN0 X3RpbWVvdXQpXG4iKTsKLQlwcmludGYoIiAgLS10b2tlbiBUT0tFTiAgICAgICAgICAgdXNlIHRo ZSBwcm92aWRlZCBUT0tFTiB2YWx1ZVxuIik7Ci0JcHJpbnRmKCIgIC0tZXJyb3IgRVJSTVNHICAg ICAgICAgIGZhaWwgaW5zdGVhZCwgd2l0aCB0aGUgZ2l2ZW4gRVJSTVNHICh2MiBvbmx5KVxuIik7 Ci0JcHJpbnRmKCIgIC0tc3RyZXNzLWFzeW5jICAgICAgICAgIGJ1c3ktbG9vcCBvbiBQUWNvbm5l Y3RQb2xsIHJhdGhlciB0aGFuIHBvbGxpbmdcbiIpOwotfQotCi0vKiAtLW9wdGlvbnMgKi8KLXN0 YXRpYyBib29sIG5vX2hvb2sgPSBmYWxzZTsKLXN0YXRpYyBib29sIGhhbmdfZm9yZXZlciA9IGZh bHNlOwotc3RhdGljIGJvb2wgc3RyZXNzX2FzeW5jID0gZmFsc2U7Ci1zdGF0aWMgY29uc3QgY2hh ciAqZXhwZWN0ZWRfdXJpID0gTlVMTDsKLXN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF9pc3N1 ZXIgPSBOVUxMOwotc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3Njb3BlID0gTlVMTDsKLXN0 YXRpYyBjb25zdCBjaGFyICptaXNiZWhhdmVfbW9kZSA9IE5VTEw7Ci1zdGF0aWMgY2hhciAqdG9r ZW4gPSBOVUxMOwotc3RhdGljIGNoYXIgKmVycm1zZyA9IE5VTEw7Ci1zdGF0aWMgaW50CWhvb2tf dmVyc2lvbiA9IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyOworI2luY2x1ZGUgIm9h dXRoX3Rlc3RfY29tbW9uLmgiCiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog ewotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gewotCQl7Imhl bHAiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gnfSwKLQotCQl7ImV4cGVjdGVkLXNjb3BlIiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDB9LAotCQl7ImV4cGVjdGVkLXVyaSIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAxMDAxfSwKLQkJeyJuby1ob29rIiwgbm9fYXJndW1lbnQsIE5VTEws IDEwMDJ9LAotCQl7InRva2VuIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDN9LAotCQl7 ImhhbmctZm9yZXZlciIsIG5vX2FyZ3VtZW50LCBOVUxMLCAxMDA0fSwKLQkJeyJtaXNiZWhhdmUi LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTAwNX0sCi0JCXsic3RyZXNzLWFzeW5jIiwgbm9f YXJndW1lbnQsIE5VTEwsIDEwMDZ9LAotCQl7ImV4cGVjdGVkLWlzc3VlciIsIHJlcXVpcmVkX2Fy Z3VtZW50LCBOVUxMLCAxMDA3fSwKLQkJeyJlcnJvciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCAxMDA4fSwKLQkJezB9Ci0JfTsKLQotCWNvbnN0IGNoYXIgKmNvbm5pbmZvOworCWNvbnN0IGNo YXIgKmNvbm5pbmZvID0gb2F1dGhfdGVzdF9wYXJzZV9hcmd2KGFyZ2MsIGFyZ3YsIDAgLyogaG9v ayAqLyApOwogCVBHY29ubgkgICAqY29ubjsKLQlpbnQJCQljOwotCi0Jd2hpbGUgKChjID0gZ2V0 b3B0X2xvbmcoYXJnYywgYXJndiwgImh2OiIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKQot CXsKLQkJc3dpdGNoIChjKQotCQl7Ci0JCQljYXNlICdoJzoKLQkJCQl1c2FnZShhcmd2KTsKLQkJ CQlyZXR1cm4gMDsKLQotCQkJY2FzZSAndic6Ci0JCQkJaWYgKHN0cmNtcChvcHRhcmcsICIxIikg PT0gMCkKLQkJCQkJaG9va192ZXJzaW9uID0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU47 Ci0JCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgIjIiKSA9PSAwKQotCQkJCQlob29rX3ZlcnNp b24gPSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjsKLQkJCQllbHNlCi0JCQkJewot CQkJCQl1c2FnZShhcmd2KTsKLQkJCQkJcmV0dXJuIDE7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0J CQljYXNlIDEwMDA6CQkJLyogLS1leHBlY3RlZC1zY29wZSAqLwotCQkJCWV4cGVjdGVkX3Njb3Bl ID0gb3B0YXJnOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDEwMDE6CQkJLyogLS1leHBlY3RlZC11 cmkgKi8KLQkJCQlleHBlY3RlZF91cmkgPSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2Ug MTAwMjoJCQkvKiAtLW5vLWhvb2sgKi8KLQkJCQlub19ob29rID0gdHJ1ZTsKLQkJCQlicmVhazsK LQotCQkJY2FzZSAxMDAzOgkJCS8qIC0tdG9rZW4gKi8KLQkJCQl0b2tlbiA9IG9wdGFyZzsKLQkJ CQlicmVhazsKLQotCQkJY2FzZSAxMDA0OgkJCS8qIC0taGFuZy1mb3JldmVyICovCi0JCQkJaGFu Z19mb3JldmVyID0gdHJ1ZTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAxMDA1OgkJCS8qIC0tbWlz YmVoYXZlICovCi0JCQkJbWlzYmVoYXZlX21vZGUgPSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0KLQkJ CWNhc2UgMTAwNjoJCQkvKiAtLXN0cmVzcy1hc3luYyAqLwotCQkJCXN0cmVzc19hc3luYyA9IHRy dWU7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMTAwNzoJCQkvKiAtLWV4cGVjdGVkLWlzc3VlciAq LwotCQkJCWV4cGVjdGVkX2lzc3VlciA9IG9wdGFyZzsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAx MDA4OgkJCS8qIC0tZXJyb3IgKi8KLQkJCQllcnJtc2cgPSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0K LQkJCWRlZmF1bHQ6Ci0JCQkJdXNhZ2UoYXJndik7Ci0JCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0K LQlpZiAoYXJnYyAhPSBvcHRpbmQgKyAxKQotCXsKLQkJdXNhZ2UoYXJndik7Ci0JCXJldHVybiAx OwotCX0KLQotCWNvbm5pbmZvID0gYXJndltvcHRpbmRdOwogCiAJLyogU2V0IHVwIG91ciBPQXV0 aCBob29rcy4gKi8KLQlQUXNldEF1dGhEYXRhSG9vayhoYW5kbGVfYXV0aF9kYXRhKTsKKwlQUXNl dEF1dGhEYXRhSG9vayhvYXV0aF90ZXN0X2F1dGhkYXRhX2hvb2spOwogCiAJLyogQ29ubmVjdC4g KEFsbCB0aGUgYWN0dWFsIHdvcmsgaXMgaW4gdGhlIGhvb2suKSAqLwogCWlmIChzdHJlc3NfYXN5 bmMpCkBAIC0xOTIsMTkwICs2NywzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlQ UWZpbmlzaChjb25uKTsKIAlyZXR1cm4gMDsKIH0KLQotLyoKLSAqIFBRYXV0aERhdGFIb29rIGlt cGxlbWVudGF0aW9uLiBSZXBsYWNlcyB0aGUgZGVmYXVsdCBjbGllbnQgZmxvdyBieSBoYW5kbGlu ZwotICogUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5bX1YyXS4KLSAqLwotc3RhdGljIGlu dAotaGFuZGxlX2F1dGhfZGF0YShQR2F1dGhEYXRhIHR5cGUsIFBHY29ubiAqY29ubiwgdm9pZCAq ZGF0YSkKLXsKLQlQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxOwotCVBHb2F1dGhCZWFyZXJSZXF1 ZXN0VjIgKnJlcTIgPSBOVUxMOwotCi0JQXNzZXJ0KGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRB X09BVVRIX0JFQVJFUl9UT0tFTiB8fAotCQkgICBob29rX3ZlcnNpb24gPT0gUFFBVVRIREFUQV9P QVVUSF9CRUFSRVJfVE9LRU5fVjIpOwotCi0JaWYgKG5vX2hvb2sgfHwgdHlwZSAhPSBob29rX3Zl cnNpb24pCi0JCXJldHVybiAwOwotCi0JcmVxID0gZGF0YTsKLQlpZiAodHlwZSA9PSBQUUFVVEhE QVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMikKLQkJcmVxMiA9IGRhdGE7Ci0KLQlpZiAoaGFuZ19m b3JldmVyKQotCXsKLQkJLyogU3RhcnQgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcuICovCi0JCXJl cS0+YXN5bmMgPSBhc3luY19jYjsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKG1pc2JlaGF2ZV9t b2RlKQotCXsKLQkJaWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgIm5vLWhvb2siKSAhPSAwKQot CQkJcmVxLT5hc3luYyA9IG1pc2JlaGF2ZV9jYjsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKGV4 cGVjdGVkX3VyaSkKLQl7Ci0JCWlmICghcmVxLT5vcGVuaWRfY29uZmlndXJhdGlvbikKLQkJewot CQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBVUkkgXCIlc1wiLCBnb3QgTlVMTFxuIiwgZXhw ZWN0ZWRfdXJpKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWlmIChzdHJjbXAoZXhwZWN0ZWRf dXJpLCByZXEtPm9wZW5pZF9jb25maWd1cmF0aW9uKSAhPSAwKQotCQl7Ci0JCQlmcHJpbnRmKHN0 ZGVyciwgImV4cGVjdGVkIFVSSSBcIiVzXCIsIGdvdCBcIiVzXCJcbiIsIGV4cGVjdGVkX3VyaSwg cmVxLT5vcGVuaWRfY29uZmlndXJhdGlvbik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlp ZiAoZXhwZWN0ZWRfc2NvcGUpCi0JewotCQlpZiAoIXJlcS0+c2NvcGUpCi0JCXsKLQkJCWZwcmlu dGYoc3RkZXJyLCAiZXhwZWN0ZWQgc2NvcGUgXCIlc1wiLCBnb3QgTlVMTFxuIiwgZXhwZWN0ZWRf c2NvcGUpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJaWYgKHN0cmNtcChleHBlY3RlZF9zY29w ZSwgcmVxLT5zY29wZSkgIT0gMCkKLQkJewotCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBz Y29wZSBcIiVzXCIsIGdvdCBcIiVzXCJcbiIsIGV4cGVjdGVkX3Njb3BlLCByZXEtPnNjb3BlKTsK LQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQotCWlmIChleHBlY3RlZF9pc3N1ZXIpCi0JewotCQlp ZiAoIXJlcTIpCi0JCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiLS1leHBlY3RlZC1pc3N1ZXIgY2Fu bm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWlm ICghcmVxMi0+aXNzdWVyKQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImV4cGVjdGVkIGlzc3Vl ciBcIiVzXCIsIGdvdCBOVUxMXG4iLCBleHBlY3RlZF9pc3N1ZXIpOwotCQkJcmV0dXJuIC0xOwot CQl9Ci0KLQkJaWYgKHN0cmNtcChleHBlY3RlZF9pc3N1ZXIsIHJlcTItPmlzc3VlcikgIT0gMCkK LQkJewotCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBpc3N1ZXIgXCIlc1wiLCBnb3QgXCIl c1wiXG4iLCBleHBlY3RlZF9pc3N1ZXIsIHJlcTItPmlzc3Vlcik7Ci0JCQlyZXR1cm4gLTE7Ci0J CX0KLQl9Ci0KLQlpZiAoZXJybXNnKQotCXsKLQkJaWYgKHRva2VuKQotCQl7Ci0JCQlmcHJpbnRm KHN0ZGVyciwgIi0tZXJyb3IgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLS10b2tlblxuIik7Ci0J CQlyZXR1cm4gLTE7Ci0JCX0KLQkJZWxzZSBpZiAoIXJlcTIpCi0JCXsKLQkJCWZwcmludGYoc3Rk ZXJyLCAiLS1lcnJvciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtdjFcbiIpOwotCQkJcmV0dXJu IC0xOwotCQl9Ci0KLQkJcmVxMi0+ZXJyb3IgPSBlcnJtc2c7Ci0JCXJldHVybiAtMTsKLQl9Ci0K LQlyZXEtPnRva2VuID0gdG9rZW47Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQb3N0Z3Jlc1Bv bGxpbmdTdGF0dXNUeXBlCi1hc3luY19jYihQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1 ZXN0ICpyZXEsIHBnc29ja2V0ICphbHRzb2NrKQotewotCWlmIChoYW5nX2ZvcmV2ZXIpCi0Jewot CQkvKgotCQkgKiBUaGlzIGNvZGUgdGVzdHMgdGhhdCBub3RoaW5nIGlzIGludGVyZmVyaW5nIHdp dGggbGlicHEncyBoYW5kbGluZwotCQkgKiBvZiBjb25uZWN0X3RpbWVvdXQuCi0JCSAqLwotCQlz dGF0aWMgcGdzb2NrZXQgc29jayA9IFBHSU5WQUxJRF9TT0NLRVQ7Ci0KLQkJaWYgKHNvY2sgPT0g UEdJTlZBTElEX1NPQ0tFVCkKLQkJewotCQkJLyogRmlyc3QgY2FsbC4gQ3JlYXRlIGFuIHVuYm91 bmQgc29ja2V0IHRvIHdhaXQgb24uICovCi0jaWZkZWYgV0lOMzIKLQkJCVdTQURBVEEJCXdzYURh dGE7Ci0JCQlpbnQJCQllcnI7Ci0KLQkJCWVyciA9IFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwgMiks ICZ3c2FEYXRhKTsKLQkJCWlmIChlcnIpCi0JCQl7Ci0JCQkJcGVycm9yKCJXU0FTdGFydHVwIGZh aWxlZCIpOwotCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKLQkJCX0KLSNlbmRpZgot CQkJc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKLQkJCWlmIChzb2NrID09 IFBHSU5WQUxJRF9TT0NLRVQpCi0JCQl7Ci0JCQkJcGVycm9yKCJmYWlsZWQgdG8gY3JlYXRlIGRh dGFncmFtIHNvY2tldCIpOwotCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKLQkJCX0K LQkJfQotCi0JCS8qIE1ha2UgbGlicHEgd2FpdCBvbiB0aGUgKHVucmVhZGFibGUpIHNvY2tldC4g Ki8KLQkJKmFsdHNvY2sgPSBzb2NrOwotCQlyZXR1cm4gUEdSRVNfUE9MTElOR19SRUFESU5HOwot CX0KLQotCXJlcS0+dG9rZW4gPSB0b2tlbjsKLQlyZXR1cm4gUEdSRVNfUE9MTElOR19PSzsKLX0K LQotc3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUKLW1pc2JlaGF2ZV9jYihQR2Nvbm4g KmNvbm4sIFBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXEsIHBnc29ja2V0ICphbHRzb2NrKQotewot CWlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUsICJmYWlsLWFzeW5jIikgPT0gMCkKLQl7Ci0JCS8q IEp1c3QgZmFpbCAibm9ybWFsbHkiLiAqLwotCQlpZiAoZXJybXNnKQotCQl7Ci0JCQlQR29hdXRo QmVhcmVyUmVxdWVzdFYyICpyZXEyOwotCi0JCQlpZiAoaG9va192ZXJzaW9uID09IFBRQVVUSERB VEFfT0FVVEhfQkVBUkVSX1RPS0VOKQotCQkJewotCQkJCWZwcmludGYoc3RkZXJyLCAiLS1lcnJv ciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtdjFcbiIpOwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0K LQkJCXJlcTIgPSAoUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqKSByZXE7Ci0JCQlyZXEyLT5lcnJv ciA9IGVycm1zZzsKLQkJfQotCi0JCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKLQl9Ci0J ZWxzZSBpZiAoc3RyY21wKG1pc2JlaGF2ZV9tb2RlLCAibm8tdG9rZW4iKSA9PSAwKQotCXsKLQkJ LyogQ2FsbGJhY2tzIG11c3QgYXNzaWduIHJlcS0+dG9rZW4gYmVmb3JlIHJldHVybmluZyBPSy4g Ki8KLQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfT0s7Ci0JfQotCWVsc2UgaWYgKHN0cmNtcChtaXNi ZWhhdmVfbW9kZSwgIm5vLXNvY2tldCIpID09IDApCi0JewotCQkvKiBDYWxsYmFja3MgbXVzdCBh c3NpZ24gKmFsdHNvY2sgYmVmb3JlIGFza2luZyBmb3IgcG9sbGluZy4gKi8KLQkJcmV0dXJuIFBH UkVTX1BPTExJTkdfUkVBRElORzsKLQl9Ci0JZWxzZQotCXsKLQkJZnByaW50ZihzdGRlcnIsICJ1 bnJlY29nbml6ZWQgLS1taXNiZWhhdmUgbW9kZTogJXNcbiIsIG1pc2JlaGF2ZV9tb2RlKTsKLQkJ ZXhpdCgxKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlk YXRvci9vYXV0aF90ZXN0X2NvbW1vbi5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0 b3Ivb2F1dGhfdGVzdF9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uY2ZjYjRhMzU0YTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL29h dXRoX3ZhbGlkYXRvci9vYXV0aF90ZXN0X2NvbW1vbi5jCkBAIC0wLDAgKzEsMzczIEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBvYXV0aF90ZXN0X2NvbW1vbi5jCisgKgkgIFNoYXJlZCBm dW5jdGlvbmFsaXR5IGZvciBvYXV0aF9ob29rX2NsaWVudCBhbmQgb2F1dGhfZmxvdworICoKKyAq IENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIK KworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCisj aW5jbHVkZSAibGlicHEtZmUuaCIKKworI2luY2x1ZGUgIm9hdXRoX3Rlc3RfY29tbW9uLmgiCisK K3N0YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIGFzeW5jX2NiKFBHY29ubiAqY29ubiwK KwkJCQkJCQkJCQkgIFBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXEsCisJCQkJCQkJCQkJICBwZ3Nv Y2tldCAqYWx0c29jayk7CitzdGF0aWMgUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBtaXNiZWhh dmVfY2IoUEdjb25uICpjb25uLAorCQkJCQkJCQkJCQkgIFBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpy ZXEsCisJCQkJCQkJCQkJCSAgcGdzb2NrZXQgKmFsdHNvY2spOworCisvKiAtLW9wdGlvbnMgKi8K K3N0YXRpYyBib29sIG5vX2hvb2sgPSBmYWxzZTsKK3N0YXRpYyBib29sIGhhbmdfZm9yZXZlciA9 IGZhbHNlOworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3VyaSA9IE5VTEw7CitzdGF0aWMg Y29uc3QgY2hhciAqZXhwZWN0ZWRfaXNzdWVyID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICpl eHBlY3RlZF9zY29wZSA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqbWlzYmVoYXZlX21vZGUg PSBOVUxMOworc3RhdGljIGNoYXIgKnRva2VuID0gTlVMTDsKK3N0YXRpYyBjaGFyICplcnJtc2cg PSBOVUxMOworc3RhdGljIGludAlob29rX3ZlcnNpb24gPSBQUUFVVEhEQVRBX09BVVRIX0JFQVJF Ul9UT0tFTl9WMjsKKworLyoKKyAqIFhYWDogc3RyZXNzX2FzeW5jIGlzIGV4cG9ydGVkIGZvciB0 aGUgYmVuZWZpdCBvZiBvYXV0aF9ob29rX2NsaWVudC4gU2luY2UKKyAqIHdlIG9ubHkgdXNlIHB1 YmxpYyBoZWFkZXJzIChsaWJwcS1mZS5oKSBmb3Igb2F1dGhfZmxvdywgaXQgbmVlZHMgdG8gYmUg YW4gaW50CisgKiByYXRoZXIgdGhhbiBhIGJvb2wuCisgKi8KK2ludAkJCXN0cmVzc19hc3luYyA9 IGZhbHNlOworCitzdGF0aWMgdm9pZAordXNhZ2UoY2hhciAqYXJndltdKQoreworCXByaW50Zigi dXNhZ2U6ICVzIFtmbGFnc10gQ09OTklORk9cblxuIiwgYXJndlswXSk7CisKKwlwcmludGYoInJl Y29nbml6ZWQgZmxhZ3M6XG4iKTsKKwlwcmludGYoIiAgLWgsIC0taGVscCAgICAgICAgICAgICAg c2hvdyB0aGlzIG1lc3NhZ2VcbiIpOworCXByaW50ZigiICAtdiBWRVJTSU9OICAgICAgICAgICAg ICBzZWxlY3QgdGhlIGhvb2sgQVBJIHZlcnNpb24gKGRlZmF1bHQgMilcbiIpOworCXByaW50Zigi ICAtLWV4cGVjdGVkLXNjb3BlIFNDT1BFICBmYWlsIGlmIHJlY2VpdmVkIHNjb3BlcyBkbyBub3Qg bWF0Y2ggU0NPUEVcbiIpOworCXByaW50ZigiICAtLWV4cGVjdGVkLXVyaSBVUkkgICAgICBmYWls IGlmIHJlY2VpdmVkIGNvbmZpZ3VyYXRpb24gbGluayBkb2VzIG5vdCBtYXRjaCBVUklcbiIpOwor CXByaW50ZigiICAtLWV4cGVjdGVkLWlzc3VlciBJU1MgICBmYWlsIGlmIHJlY2VpdmVkIGlzc3Vl ciBkb2VzIG5vdCBtYXRjaCBJU1MgKHYyIG9ubHkpXG4iKTsKKwlwcmludGYoIiAgLS1taXNiZWhh dmU9TU9ERSAgICAgICAgaGF2ZSB0aGUgaG9vayBmYWlsIHJlcXVpcmVkIHBvc3Rjb25kaXRpb25z XG4iCisJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIChNT0RFczogbm8taG9vaywgZmFp bC1hc3luYywgbm8tdG9rZW4sIG5vLXNvY2tldClcbiIpOworCXByaW50ZigiICAtLW5vLWhvb2sg ICAgICAgICAgICAgICBkb24ndCBpbnN0YWxsIE9BdXRoIGhvb2tzXG4iKTsKKwlwcmludGYoIiAg LS1oYW5nLWZvcmV2ZXIgICAgICAgICAgZG9uJ3QgZXZlciByZXR1cm4gYSB0b2tlbiAoY29tYmlu ZSB3aXRoIGNvbm5lY3RfdGltZW91dClcbiIpOworCXByaW50ZigiICAtLXRva2VuIFRPS0VOICAg ICAgICAgICB1c2UgdGhlIHByb3ZpZGVkIFRPS0VOIHZhbHVlXG4iKTsKKwlwcmludGYoIiAgLS1l cnJvciBFUlJNU0cgICAgICAgICAgZmFpbCBpbnN0ZWFkLCB3aXRoIHRoZSBnaXZlbiBFUlJNU0cg KHYyIG9ubHkpXG4iKTsKKwlwcmludGYoIiAgLS1zdHJlc3MtYXN5bmMgICAgICAgICAgYnVzeS1s b29wIG9uIFBRY29ubmVjdFBvbGwgcmF0aGVyIHRoYW4gcG9sbGluZ1xuIik7Cit9CisKK2NoYXIg Kgorb2F1dGhfdGVzdF9wYXJzZV9hcmd2KGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBmb3Jf cGx1Z2luKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0g eworCQl7ImhlbHAiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gnfSwKKworCQl7ImV4cGVjdGVkLXNj b3BlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDB9LAorCQl7ImV4cGVjdGVkLXVyaSIs IHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDAxfSwKKwkJeyJuby1ob29rIiwgbm9fYXJndW1l bnQsIE5VTEwsIDEwMDJ9LAorCQl7InRva2VuIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEw MDN9LAorCQl7ImhhbmctZm9yZXZlciIsIG5vX2FyZ3VtZW50LCBOVUxMLCAxMDA0fSwKKwkJeyJt aXNiZWhhdmUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTAwNX0sCisJCXsic3RyZXNzLWFz eW5jIiwgbm9fYXJndW1lbnQsIE5VTEwsIDEwMDZ9LAorCQl7ImV4cGVjdGVkLWlzc3VlciIsIHJl cXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDA3fSwKKwkJeyJlcnJvciIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCBOVUxMLCAxMDA4fSwKKwkJezB9CisJfTsKKworCWludAkJCWM7CisKKwlpZiAoZm9yX3Bs dWdpbikKKwl7CisJCS8qIFRoZSAicmVhbCIgYXJndiBoYXMgYWxyZWFkeSBiZWVuIHBhcnNlZC4g UmVzZXQgb3B0aW5kLiAqLworCQlvcHRpbmQgPSAxOworCX0KKworCXdoaWxlICgoYyA9IGdldG9w dF9sb25nKGFyZ2MsIGFyZ3YsICJodjoiLCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkKKwl7 CisJCXN3aXRjaCAoYykKKwkJeworCQkJY2FzZSAnaCc6CisJCQkJdXNhZ2UoYXJndik7CisJCQkJ ZXhpdCgwKTsKKworCQkJY2FzZSAndic6CisJCQkJaWYgKHN0cmNtcChvcHRhcmcsICIxIikgPT0g MCkKKwkJCQkJaG9va192ZXJzaW9uID0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU47CisJ CQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgIjIiKSA9PSAwKQorCQkJCQlob29rX3ZlcnNpb24g PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjsKKwkJCQllbHNlCisJCQkJeworCQkJ CQl1c2FnZShhcmd2KTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgMTAwMDoJCQkvKiAtLWV4cGVjdGVkLXNjb3BlICovCisJCQkJZXhwZWN0ZWRfc2NvcGUgPSBv cHRhcmc7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTAwMToJCQkvKiAtLWV4cGVjdGVkLXVyaSAq LworCQkJCWV4cGVjdGVkX3VyaSA9IG9wdGFyZzsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxMDAy OgkJCS8qIC0tbm8taG9vayAqLworCQkJCW5vX2hvb2sgPSB0cnVlOworCQkJCWJyZWFrOworCisJ CQljYXNlIDEwMDM6CQkJLyogLS10b2tlbiAqLworCQkJCXRva2VuID0gb3B0YXJnOworCQkJCWJy ZWFrOworCisJCQljYXNlIDEwMDQ6CQkJLyogLS1oYW5nLWZvcmV2ZXIgKi8KKwkJCQloYW5nX2Zv cmV2ZXIgPSB0cnVlOworCQkJCWJyZWFrOworCisJCQljYXNlIDEwMDU6CQkJLyogLS1taXNiZWhh dmUgKi8KKwkJCQltaXNiZWhhdmVfbW9kZSA9IG9wdGFyZzsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSAxMDA2OgkJCS8qIC0tc3RyZXNzLWFzeW5jICovCisJCQkJc3RyZXNzX2FzeW5jID0gdHJ1ZTsK KwkJCQlicmVhazsKKworCQkJY2FzZSAxMDA3OgkJCS8qIC0tZXhwZWN0ZWQtaXNzdWVyICovCisJ CQkJZXhwZWN0ZWRfaXNzdWVyID0gb3B0YXJnOworCQkJCWJyZWFrOworCisJCQljYXNlIDEwMDg6 CQkJLyogLS1lcnJvciAqLworCQkJCWVycm1zZyA9IG9wdGFyZzsKKwkJCQlicmVhazsKKworCQkJ ZGVmYXVsdDoKKwkJCQl1c2FnZShhcmd2KTsKKwkJCQlleGl0KDEpOworCQl9CisJfQorCisJaWYg KGFyZ2MgIT0gKGZvcl9wbHVnaW4gPyBvcHRpbmQgOiBvcHRpbmQgKyAxKSkKKwl7CisJCXVzYWdl KGFyZ3YpOworCQlleGl0KDEpOworCX0KKworCXJldHVybiBhcmd2W29wdGluZF07Cit9CisKKy8q CisgKiBQUWF1dGhEYXRhSG9vayBpbXBsZW1lbnRhdGlvbi4gUmVwbGFjZXMgdGhlIGRlZmF1bHQg Y2xpZW50IGZsb3cgYnkgaGFuZGxpbmcKKyAqIFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VO W19WMl0uCisgKi8KK2ludAorb2F1dGhfdGVzdF9hdXRoZGF0YV9ob29rKFBHYXV0aERhdGEgdHlw ZSwgUEdjb25uICpjb25uLCB2b2lkICpkYXRhKQoreworCVBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpy ZXE7CisJUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxMiA9IE5VTEw7CisKKwlBc3NlcnQoaG9v a192ZXJzaW9uID09IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOIHx8CisJCSAgIGhvb2tf dmVyc2lvbiA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMik7CisKKwlpZiAobm9f aG9vayB8fCB0eXBlICE9IGhvb2tfdmVyc2lvbikKKwkJcmV0dXJuIDA7CisKKwlyZXEgPSBkYXRh OworCWlmICh0eXBlID09IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyKQorCQlyZXEy ID0gZGF0YTsKKworCWlmIChoYW5nX2ZvcmV2ZXIpCisJeworCQkvKiBTdGFydCBhc3luY2hyb25v dXMgcHJvY2Vzc2luZy4gKi8KKwkJcmVxLT5hc3luYyA9IGFzeW5jX2NiOworCQlyZXR1cm4gMTsK Kwl9CisKKwlpZiAobWlzYmVoYXZlX21vZGUpCisJeworCQlpZiAoc3RyY21wKG1pc2JlaGF2ZV9t b2RlLCAibm8taG9vayIpICE9IDApCisJCQlyZXEtPmFzeW5jID0gbWlzYmVoYXZlX2NiOworCQly ZXR1cm4gMTsKKwl9CisKKwlpZiAoZXhwZWN0ZWRfdXJpKQorCXsKKwkJaWYgKCFyZXEtPm9wZW5p ZF9jb25maWd1cmF0aW9uKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgImV4cGVjdGVkIFVSSSBc IiVzXCIsIGdvdCBOVUxMXG4iLCBleHBlY3RlZF91cmkpOworCQkJcmV0dXJuIC0xOworCQl9CisK KwkJaWYgKHN0cmNtcChleHBlY3RlZF91cmksIHJlcS0+b3BlbmlkX2NvbmZpZ3VyYXRpb24pICE9 IDApCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgVVJJIFwiJXNcIiwgZ290IFwi JXNcIlxuIiwgZXhwZWN0ZWRfdXJpLCByZXEtPm9wZW5pZF9jb25maWd1cmF0aW9uKTsKKwkJCXJl dHVybiAtMTsKKwkJfQorCX0KKworCWlmIChleHBlY3RlZF9zY29wZSkKKwl7CisJCWlmICghcmVx LT5zY29wZSkKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBzY29wZSBcIiVzXCIs IGdvdCBOVUxMXG4iLCBleHBlY3RlZF9zY29wZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlp ZiAoc3RyY21wKGV4cGVjdGVkX3Njb3BlLCByZXEtPnNjb3BlKSAhPSAwKQorCQl7CisJCQlmcHJp bnRmKHN0ZGVyciwgImV4cGVjdGVkIHNjb3BlIFwiJXNcIiwgZ290IFwiJXNcIlxuIiwgZXhwZWN0 ZWRfc2NvcGUsIHJlcS0+c2NvcGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKGV4 cGVjdGVkX2lzc3VlcikKKwl7CisJCWlmICghcmVxMikKKwkJeworCQkJZnByaW50ZihzdGRlcnIs ICItLWV4cGVjdGVkLWlzc3VlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtdjFcbiIpOworCQkJ cmV0dXJuIC0xOworCQl9CisKKwkJaWYgKCFyZXEyLT5pc3N1ZXIpCisJCXsKKwkJCWZwcmludGYo c3RkZXJyLCAiZXhwZWN0ZWQgaXNzdWVyIFwiJXNcIiwgZ290IE5VTExcbiIsIGV4cGVjdGVkX2lz c3Vlcik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoc3RyY21wKGV4cGVjdGVkX2lzc3Vl ciwgcmVxMi0+aXNzdWVyKSAhPSAwKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgImV4cGVjdGVk IGlzc3VlciBcIiVzXCIsIGdvdCBcIiVzXCJcbiIsIGV4cGVjdGVkX2lzc3VlciwgcmVxMi0+aXNz dWVyKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWlmIChlcnJtc2cpCisJeworCQlpZiAo dG9rZW4pCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiLS1lcnJvciBjYW5ub3QgYmUgY29tYmlu ZWQgd2l0aCAtLXRva2VuXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQllbHNlIGlmICghcmVx MikKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICItLWVycm9yIGNhbm5vdCBiZSBjb21iaW5lZCB3 aXRoIC12MVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlyZXEyLT5lcnJvciA9IGVycm1z ZzsKKwkJcmV0dXJuIC0xOworCX0KKworCXJlcS0+dG9rZW4gPSB0b2tlbjsKKwlyZXR1cm4gMTsK K30KKworLyoKKyAqIFNldHMgdXAgYSByZXF1ZXN0IGZvciBhIHBsdWdpbiBtb2R1bGUgKHBnX3N0 YXJ0X29hdXRoYmVhcmVyKCkpIHJhdGhlciB0aGFuCisgKiB1c2luZyB0aGUgaG9vay4KKyAqLwor aW50CitvYXV0aF90ZXN0X3N0YXJ0X2Zsb3coUEdjb25uICpjb25uLCBQR29hdXRoQmVhcmVyUmVx dWVzdFYyICpyZXF1ZXN0KQoreworCWludAkJCXJldDsKKworCS8qCisJICogV2UgY2FuIHN0aWxs IGRlZmVyIHRvIHRoZSBob29rIGFib3ZlIHRvIGF2b2lkIGNvcHlpbmcgY29kZTsgd2UganVzdAor CSAqIGhhdmUgdG8gdHJhbnNsYXRlIHRoZSByZXR1cm4gdmFsdWUuCisJICovCisJcmV0ID0gb2F1 dGhfdGVzdF9hdXRoZGF0YV9ob29rKFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOX1YyLCBj b25uLAorCQkJCQkJCQkgICByZXF1ZXN0KTsKKworCWlmIChyZXQgPT0gMCkKKwl7CisJCS8qIFRo aXMgaXMgYSBidWcgaW4gdGhlIHRlc3QuICovCisJCWZwcmludGYoc3RkZXJyLCAicGx1Z2luIHRl c3RzIGNhbm5vdCBtYWtlIHVzZSBvZiAtdjEgb3IgLS1uby1ob29rXG4iKTsKKwkJZXhpdCgxKTsK Kwl9CisKKwlyZXR1cm4gKHJldCA9PSAxKSA/IDAgOiAtMTsKK30KKworc3RhdGljIFBvc3RncmVz UG9sbGluZ1N0YXR1c1R5cGUKK2FzeW5jX2NiKFBHY29ubiAqY29ubiwgUEdvYXV0aEJlYXJlclJl cXVlc3QgKnJlcSwgcGdzb2NrZXQgKmFsdHNvY2spCit7CisJaWYgKGhhbmdfZm9yZXZlcikKKwl7 CisJCS8qCisJCSAqIFRoaXMgY29kZSB0ZXN0cyB0aGF0IG5vdGhpbmcgaXMgaW50ZXJmZXJpbmcg d2l0aCBsaWJwcSdzIGhhbmRsaW5nCisJCSAqIG9mIGNvbm5lY3RfdGltZW91dC4KKwkJICovCisJ CXN0YXRpYyBwZ3NvY2tldCBzb2NrID0gUEdJTlZBTElEX1NPQ0tFVDsKKworCQlpZiAoc29jayA9 PSBQR0lOVkFMSURfU09DS0VUKQorCQl7CisJCQkvKiBGaXJzdCBjYWxsLiBDcmVhdGUgYW4gdW5i b3VuZCBzb2NrZXQgdG8gd2FpdCBvbi4gKi8KKyNpZmRlZiBXSU4zMgorCQkJV1NBREFUQQkJd3Nh RGF0YTsKKwkJCWludAkJCWVycjsKKworCQkJZXJyID0gV1NBU3RhcnR1cChNQUtFV09SRCgyLCAy KSwgJndzYURhdGEpOworCQkJaWYgKGVycikKKwkJCXsKKwkJCQlwZXJyb3IoIldTQVN0YXJ0dXAg ZmFpbGVkIik7CisJCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOworCQkJfQorI2VuZGlm CisJCQlzb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOworCQkJaWYgKHNvY2sg PT0gUEdJTlZBTElEX1NPQ0tFVCkKKwkJCXsKKwkJCQlwZXJyb3IoImZhaWxlZCB0byBjcmVhdGUg ZGF0YWdyYW0gc29ja2V0Iik7CisJCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOworCQkJ fQorCQl9CisKKwkJLyogTWFrZSBsaWJwcSB3YWl0IG9uIHRoZSAodW5yZWFkYWJsZSkgc29ja2V0 LiAqLworCQkqYWx0c29jayA9IHNvY2s7CisJCXJldHVybiBQR1JFU19QT0xMSU5HX1JFQURJTkc7 CisJfQorCisJcmVxLT50b2tlbiA9IHRva2VuOworCXJldHVybiBQR1JFU19QT0xMSU5HX09LOwor fQorCitzdGF0aWMgUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZQorbWlzYmVoYXZlX2NiKFBHY29u biAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcSwgcGdzb2NrZXQgKmFsdHNvY2spCit7 CisJaWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgImZhaWwtYXN5bmMiKSA9PSAwKQorCXsKKwkJ LyogSnVzdCBmYWlsICJub3JtYWxseSIuICovCisJCWlmIChlcnJtc2cpCisJCXsKKwkJCVBHb2F1 dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcTI7CisKKwkJCWlmIChob29rX3ZlcnNpb24gPT0gUFFBVVRI REFUQV9PQVVUSF9CRUFSRVJfVE9LRU4pCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsICItLWVy cm9yIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC12MVxuIik7CisJCQkJZXhpdCgxKTsKKwkJCX0K KworCQkJcmVxMiA9IChQR29hdXRoQmVhcmVyUmVxdWVzdFYyICopIHJlcTsKKwkJCXJlcTItPmVy cm9yID0gZXJybXNnOworCQl9CisKKwkJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOworCX0K KwllbHNlIGlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUsICJuby10b2tlbiIpID09IDApCisJewor CQkvKiBDYWxsYmFja3MgbXVzdCBhc3NpZ24gcmVxLT50b2tlbiBiZWZvcmUgcmV0dXJuaW5nIE9L LiAqLworCQlyZXR1cm4gUEdSRVNfUE9MTElOR19PSzsKKwl9CisJZWxzZSBpZiAoc3RyY21wKG1p c2JlaGF2ZV9tb2RlLCAibm8tc29ja2V0IikgPT0gMCkKKwl7CisJCS8qIENhbGxiYWNrcyBtdXN0 IGFzc2lnbiAqYWx0c29jayBiZWZvcmUgYXNraW5nIGZvciBwb2xsaW5nLiAqLworCQlyZXR1cm4g UEdSRVNfUE9MTElOR19SRUFESU5HOworCX0KKwllbHNlCisJeworCQlmcHJpbnRmKHN0ZGVyciwg InVucmVjb2duaXplZCAtLW1pc2JlaGF2ZSBtb2RlOiAlc1xuIiwgbWlzYmVoYXZlX21vZGUpOwor CQlleGl0KDEpOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFs aWRhdG9yL3QvMDAyX2NsaWVudC5wbCBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9y L3QvMDAyX2NsaWVudC5wbAppbmRleCBkYWM2ODRkNzg1Mi4uMmY2ZjYwMzMxYTEgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwKQEAgLTEs NiArMSw2IEBACiAjCiAjIEV4ZXJjaXNlcyB0aGUgQVBJIGZvciBjdXN0b20gT0F1dGggY2xpZW50 IGZsb3dzLCB1c2luZyB0aGUgb2F1dGhfaG9va19jbGllbnQKLSMgdGVzdCBkcml2ZXIuCisjIHRl c3QgZHJpdmVyIGFuZCB0aGUgb2F1dGhfZmxvdyBjdXN0b20gcGx1Z2luLgogIwogIyBDb3B5cmln aHQgKGMpIDIwMjEtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICMK QEAgLTIwLDYgKzIwLDEwIEBAIGlmICghJEVOVntQR19URVNUX0VYVFJBfSB8fCAkRU5We1BHX1RF U1RfRVhUUkF9ICF+IC9cYm9hdXRoXGIvKQogCSAgJ1BvdGVudGlhbGx5IHVuc2FmZSB0ZXN0IG9h dXRoIG5vdCBlbmFibGVkIGluIFBHX1RFU1RfRVhUUkEnOwogfQogCitteSAkcGx1Z2luX3N1cHBv cnRlZCA9ICgKKwkJIGNoZWNrX3BnX2NvbmZpZygiI2RlZmluZSBIQVZFX1NZU19FVkVOVF9IIDEi KQorCSAgb3IgY2hlY2tfcGdfY29uZmlnKCIjZGVmaW5lIEhBVkVfU1lTX0VQT0xMX0ggMSIpKTsK KwogIwogIyBDbHVzdGVyIFNldHVwCiAjCkBAIC03Miw2ICs3Niw4IEBAIHN1YiB0ZXN0CiAJCSRm bGFncyA9ICRwYXJhbXN7ZmxhZ3N9OwogCX0KIAorCSMgRmlyc3QgcnVuIHRoZSBvYXV0aF9ob29r X2NsaWVudCwgd2hpY2ggdXNlcyBQUWF1dGhEYXRhSG9vayB0byBpbnNlcnQgYSBuZXcKKwkjIE9B dXRoIGZsb3cuCiAJbXkgQGNtZCA9ICgib2F1dGhfaG9va19jbGllbnQiLCBAeyRmbGFnc30sICRj b21tb25fY29ubnN0cik7CiAJbm90ZSAicnVubmluZyAnIiAuIGpvaW4oIicgJyIsIEBjbWQpIC4g IiciOwogCkBAIC0xMDMsNiArMTA5LDM3IEBAIHN1YiB0ZXN0CiAJCSRub2RlLT5sb2dfY2hlY2so IiR0ZXN0X25hbWU6IGxvZyBtYXRjaGVzIiwKIAkJCSRsb2dfc3RhcnQsIGxvZ19saWtlID0+ICRw YXJhbXN7bG9nX2xpa2V9KTsKIAl9CisKKyAgU0tJUDoKKwl7CisJCWxhc3QgU0tJUCBpZiAkcGFy YW1ze2hvb2tfb25seX07CisJCXNraXAgIk9BdXRoIG1vZHVsZXMgYXJlIG5vdCBzdXBwb3J0ZWQg b24gdGhpcyBwbGF0Zm9ybSIKKwkJICB1bmxlc3MgJHBsdWdpbl9zdXBwb3J0ZWQ7CisKKwkJIyBS dW4gdGhlIHNhbWUgdGVzdCB3aXRoIHBzcWwgaXRzZWxmLCBsb2FkaW5nIHRoZSBvYXV0aF9mbG93 LnNvIG1vZHVsZS4KKwkJbG9jYWwgJEVOVntQR09BVVRITU9EVUxFfSA9ICRFTlZ7Zmxvd19tb2R1 bGVfcGF0aH07CisKKwkJIyBGbGFncyBhcmUgcGFzc2VkIHRvIHRoZSBtb2R1bGUgdmlhIE9BVVRI X1RFU1RfRkxBR1MsIHdpdGggMHgwMSBhcyBhCisJCSMgc2VwYXJhdG9yLgorCQlsb2NhbCAkRU5W e09BVVRIX1RFU1RfRkxBR1N9ID0gam9pbigiXHgwMSIsIEB7JGZsYWdzfSk7CisKKwkJaWYgKCRw YXJhbXN7ZXhwZWN0X3N1Y2Nlc3N9KQorCQl7CisJCQkkbm9kZS0+Y29ubmVjdF9vaygKKwkJCQkk Y29tbW9uX2Nvbm5zdHIsCisJCQkJIltwbHVnaW4gZmxvd10gJHRlc3RfbmFtZSIsCisJCQkJZXhw ZWN0ZWRfc3RkZXJyID0+ICRwYXJhbXN7ZXhwZWN0ZWRfc3RkZXJyfSwKKwkJCQlsb2dfbGlrZSA9 PiAkcGFyYW1ze2xvZ19saWtlfSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkkbm9kZS0+Y29ubmVj dF9mYWlscygKKwkJCQkkY29tbW9uX2Nvbm5zdHIsCisJCQkJIltwbHVnaW4gZmxvd10gJHRlc3Rf bmFtZSIsCisJCQkJZXhwZWN0ZWRfc3RkZXJyID0+ICRwYXJhbXN7ZXhwZWN0ZWRfc3RkZXJyfSwK KwkJCQlsb2dfbGlrZSA9PiAkcGFyYW1ze2xvZ19saWtlfSk7CisJCX0KKwl9CiB9CiAKIHRlc3Qo CkBAIC0xMzYsNiArMTczLDcgQEAgJGNvbW1vbl9jb25uc3RyID0gIiRiYXNlX2Nvbm5zdHIgb2F1 dGhfaXNzdWVyPSRpc3N1ZXIgb2F1dGhfY2xpZW50X2lkPW15SUQiOwogIyBNYWtlIHN1cmUgdGhl IHYxIGhvb2sgY29udGludWVzIHRvIHdvcmsuCiB0ZXN0KAogCSJ2MSBzeW5jaHJvbm91cyBob29r IGNhbiBwcm92aWRlIGEgdG9rZW4iLAorCWhvb2tfb25seSA9PiAxLCAgICAjIHBsdWdpbnMgZG9u J3Qgc3VwcG9ydCBBUEkgdjEKIAlmbGFncyA9PiBbCiAJCSItdjEiLAogCQkiLS10b2tlbiIgPT4g Im15LXRva2VuLXYxIiwKQEAgLTE1MCw2ICsxODgsNyBAQCBpZiAoJEVOVnt3aXRoX2xpYmN1cmx9 IG5lICd5ZXMnKQogCSMgbGlicHEgc2hvdWxkIGhlbHAgdXNlcnMgb3V0IGlmIG5vIE9BdXRoIHN1 cHBvcnQgaXMgYnVpbHQgaW4uCiAJdGVzdCgKIAkJImZhaWxzIHdpdGhvdXQgY3VzdG9tIGhvb2sg aW5zdGFsbGVkIiwKKwkJaG9va19vbmx5ID0+IDEsICAgICMgcGx1Z2lucyBjYW4ndCB1c2UgLS1u by1ob29rCiAJCWZsYWdzID0+IFsiLS1uby1ob29rIl0sCiAJCWV4cGVjdGVkX3N0ZGVyciA9Pgog CQkgIHFyL25vIE9BdXRoIGZsb3dzIGFyZSBhdmFpbGFibGUgXCh0cnkgaW5zdGFsbGluZyB0aGUg bGlicHEtb2F1dGggcGFja2FnZVwpLwpAQCAtMjA2LDYgKzI0NSw3IEBAIGZvcmVhY2ggbXkgJGMg KEBjYXNlcykKIAl0ZXN0KAogCQkiaG9vayBtaXNiZWhhdmlvcjogJGMtPnsnZmxhZyd9ICh2MSki LAogCQlmbGFncyA9PiBbICctdjEnLCAkYy0+eydmbGFnJ30gXSwKKwkJaG9va19vbmx5ID0+IDEs ICAgICMgcGx1Z2lucyBjYW4ndCB1c2UgLXYxCiAJCWV4cGVjdGVkX3N0ZGVyciA9PiAkYy0+eydl eHBlY3RlZF9lcnJvcid9KTsKIH0KIApAQCAtMjE5LDQgKzI1OSwxOSBAQCB0ZXN0KAogCWV4cGVj dGVkX3N0ZGVyciA9PgogCSAgcXIvdXNlci1kZWZpbmVkIE9BdXRoIGZsb3cgZmFpbGVkOiBhc3lu YyBlcnJvciBtZXNzYWdlLyk7CiAKK1NLSVA6Cit7CisJc2tpcCAiT0F1dGggbW9kdWxlcyBhcmUg bm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIgorCSAgdW5sZXNzICRwbHVnaW5fc3VwcG9y dGVkOworCisJIyBNYWtlIHN1cmUgYSBtaXNhaW1lZCBQR09BVVRITU9EVUxFIGdpdmVzIHRoZSBj b3JyZWN0IGVycm9yIG1lc3NhZ2UuCisJbG9jYWwgJEVOVntQR09BVVRITU9EVUxFfSA9ICRub2Rl LT5iYXNlZGlyIC4gJy9ub25leGlzdGVudC5zbyc7CisKKwkkbm9kZS0+Y29ubmVjdF9mYWlscygK KwkJJGNvbW1vbl9jb25uc3RyLAorCQkiUEdPQVVUSE1PRFVMRSBlcnJvciBtZXNzYWdlcyIsCisJ CWV4cGVjdGVkX3N0ZGVyciA9PgorCQkgIHFyL3VzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxl ZDogcGx1Z2luIGNvdWxkIG5vdCBiZSBsb2FkZWQvKTsKK30KKwogZG9uZV90ZXN0aW5nKCk7Ci0t IAoyLjM0LjEKCg== --000000000000bb1124064ceba11a--