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 1vzint-001Fm4-1N for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 22:10:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vzinr-000wOt-2t for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 22:10:20 +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 1vzinr-000wOl-1b for pgsql-hackers@lists.postgresql.org; Mon, 09 Mar 2026 22:10:20 +0000 Received: from mail-lf1-x12b.google.com ([2a00:1450:4864:20::12b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vzinp-00000001s8y-1IsC for pgsql-hackers@lists.postgresql.org; Mon, 09 Mar 2026 22:10:19 +0000 Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-5a0fc5e2c59so8236771e87.1 for ; Mon, 09 Mar 2026 15:10:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773094215; cv=none; d=google.com; s=arc-20240605; b=UV8qnW/RZoOAgoq4VsXzm02pIqf1zgdoJFyhT1BJuNRQakHmjBf2hNGa6QLGTnbQRS CUy6N6G41cwKdA07Ho+Q7XDo86lzKNYQuzRWK68c5BjlbMDUuUtN6ftOPhuYL/3SBQSW anXN6M+o0aQ/2ro/dhQ9T/HPdlyjkXsen6AqHsSuSCKxDHvxJRUbFf0+DB38dogkciCv EET/z5P+Kko4HxJ+iX9gq97nB8f0CYC42orzPA+LF5TYTDj9M0s+9QQLxSDv1X9d3jDF Bq7iNzb4Gw4tSR4GdRDQRa0+OrX1FDaiqJvTw9L4lnl+Nc6JZT6dtCJvnnYRwbPKXBIU 1H0A== 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=o+RWyTSWavnDZqgb6+iOd6njV/P0db7TOsh8BJTNGpM=; fh=1oJF/VuIr0dzsAEVCpO47TMMSQwgJLUbo11w28i+c64=; b=F/z7u9iXg0YgxE382GZE5Gdy91q+lm8IRfYRJOISlo6ZOFzK6jUMVBrG4fNLg8r8ZT Bi4BQIPojfbEsownzhsg+Ku7yF/WMaqVRDOVxiqvAHrbmItTIPbWbbjNqH4w8TWZegdO efpDF/Z8PSSHVFkL/GQV4RW/qythWDmnZ9ngyvbQcoxYl1pNSu2II3IxVV97GGPW+NQx hRY1xe7w/9FeJSlmlXG/I3qzHGPUXuh6aBkUAzpPPWWwe1IyDijBch5AvkzVWhfO+CZz OwANJQD7jOHd8utdCWlji1VQyTeWWJ+C6GX/8U9EY3+LAKl33Ff8uZG/CxZsnxAiSH63 wM1w==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773094215; x=1773699015; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=o+RWyTSWavnDZqgb6+iOd6njV/P0db7TOsh8BJTNGpM=; b=IyQGDy7R1Si0Xfi0NYPbp0u55g/0hvGpUk0bdUfx0reFcZSobinGqntxJ43SJTOuXo Txz2kSJNTzsE0pt2eeAgk63q6fwgKbHF7HKXb08Lj7PYistHQgRplK750XrDfUCdTNsi dzYiTiW3XWkLtWAebpRVf5MzIUw2sNDBgwarw1I86ub2QT22AQTcAbiiBq+n/O+mwEg2 sngAou8jHLip5QkWVUBYKdZA0O7389uMHyx01lcmmF2oBqkbVnfQj1yys71/ye51tLKj yB+qrNCctFl915bmsRI/TFkT8+ohNEZ386CMi7CbVIRfWEsS5AMu144jZTu47pDCg31e JtEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773094215; x=1773699015; 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=o+RWyTSWavnDZqgb6+iOd6njV/P0db7TOsh8BJTNGpM=; b=M7QSgyuNanBHlAaML+yGZJ0gX+ozhMFKCP8EGenbDYLJh0pHU6ab08bX5h6LOI5267 kHBuRiSPOiX3RQNyFhj7OWO4gK7baxfCH1enQyASUcFx/WO03FvrlX0Kci7a6nQV3V/r +8/+PtSAMYpo6k4tRHQTs+NoQbKx3JjSB43cOmLFQBvNYOfSNQt8gdBbZKMyF6nLPOn7 fNm0gw3c3PF/Ak4vb7ii3rnP6BrUGbmWOA9wR4DcgWlp7sY24hqsCgL6F8oWAnEULKIp 3KXE/YrTFXdUbkkmbITi+pygqAKrB1JFdA8kqWCQ0PrS6JM93j8ufa6ExRvXZJR541EX KAWw== X-Forwarded-Encrypted: i=1; AJvYcCW0FTghNJ770NUHo9BYN2UKbodjkEy2Nv2801bJZRXc9n+6N40Z+qG+aY39CSHylq96uHQYl5oamRmQM3sx@lists.postgresql.org X-Gm-Message-State: AOJu0Yz4HV+LYQCA+mdw7ddmbVFHZLMrjuopQTr298jc7pR3KwzF6Nl0 kyIejiKZWJyUzwD/Uo9FW5khtCW/FSMdfTAvRp2NbOFJG7dsjnd+n0XaOzYkVc4XQ4FNCAGdbh/ RhZzixx8NimI/r69tdcTxM70wORpM5ug= X-Gm-Gg: ATEYQzyBCLFBRC+LC5nLqyRPjU3B9q3fXPIpmq14mSdkiy+K+zDLktE9J8VYrov+TEt u1W/jGOmraWjqBYrQ2cZx7KeQBWLn7c/c1YOTUFaFB/d3UlWb+HP78kHAHSJcxg/5D1NzAiFj3I 1Bmhu92lwycsIiVbn5Rczj2r0AyhL3EY1ddnnzsWZOlhKshGovR8v3TI+ZWiirNjCAFRPONt3Bo dqkPGDfuwp+BcCYkZiUFzWyPkpXxj7BrMW7WzC19ERp11VXLwb/FPpDcGjme5NVUbeFHMPH9RIn /szPxB8WtJa0AYFXQAg= X-Received: by 2002:ac2:4eda:0:b0:5a1:292:10a4 with SMTP id 2adb3069b0e04-5a13cd3fc8dmr3146791e87.45.1773094215212; Mon, 09 Mar 2026 15:10:15 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Masahiko Sawada Date: Mon, 9 Mar 2026 15:09:38 -0700 X-Gm-Features: AaiRm53hm9aCmOqbd4jYFFUoF7jWCG1VKlZcW4CE8qAZ-QQ1n8FTX_JFKlDRG1Y Message-ID: Subject: Re: Initial COPY of Logical Replication is too slow To: "Zhijie Hou (Fujitsu)" Cc: Marcos Pegoraro , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d9f987064c9eaad3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d9f987064c9eaad3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 3, 2026 at 2:22=E2=80=AFAM Zhijie Hou (Fujitsu) wrote: > > On Saturday, February 28, 2026 7:48 AM Masahiko Sawada wrote: > > To: Marcos Pegoraro > > Cc: PostgreSQL Hackers > > Subject: Re: Initial COPY of Logical Replication is too slow > > > > Another variant of this approach is to extend > > pg_get_publication_table() so that it can accept a relid to get the pub= lication > > information of the specific table. I've attached the patch for this ide= a. I'm > > going to add regression test cases. > > > > pg_get_publication_table() is a VARIACID array function so the patch ch= anges > > its signature to {text[] [, oid]}, breaking the tool compatibility. Giv= en this > > function is mostly an internal-use function (we don't have the document= ation > > for it), it would probably be okay with it. I find it's clearer than th= e other > > approach of introducing pg_get_publication_table_info(). Feedback is ve= ry > > welcome. > > Thanks for updating the patch. > > I have few comments for the function change: > > 1. > > If we change the function signature, will it affect use cases where the > publisher version is newer and the subscriber version is older ? E.g., wh= en > publisher is passing text style publication name to pg_get_publication_ta= bles(). Good point. I noticed that changing the function signature of pg_get_publication_tables() breaks logical replication setups where the subscriber is 18 or older. In the latest patch, I've switched the approach back to the pg_get_publication_table_info() idea. > > 2. > > In the following example, I expected it to output a table with valid row > filter, but it returns 0 row after applying the patch. > > CREATE TABLE measurements ( > city_id int not null, > logdate date not null, > peaktemp int, > unitsales int > ) PARTITION BY RANGE (logdate); > > -- Create partitions > CREATE TABLE measurements_2023_q1 PARTITION OF measurements > FOR VALUES FROM ('2023-01-01') TO ('2023-04-01'); > > CREATE PUBLICATION pub FOR TABLE measurements_2023_q1 WHERE (city_id =3D = 2); > > select pg_get_publication_tables(ARRAY['pub2'], 'measurements_2023_q1'::r= egclass); > pg_get_publication_tables > --------------------------- > (0 rows) Thank you for testing the patch. I've fixed it and added regression tests in the latest patch. I've attached the updated patch. Regards, -- Masahiko Sawada Amazon Web Services: https://aws.amazon.com --000000000000d9f987064c9eaad3 Content-Type: application/x-patch; name="v2-0001-Avoid-full-table-scans-when-getting-publication-t.patch" Content-Disposition: attachment; filename="v2-0001-Avoid-full-table-scans-when-getting-publication-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmjpjruy0 RnJvbSA3ZmZhNTVlNzc0MTM3NDNiNjMwOTJhODI0YzFhNzBmNzRkZDEyMmYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyNyBGZWIgMjAyNiAxNTo0MjozOCAtMDgwMApTdWJqZWN0OiBbUEFUQ0gg djJdIEF2b2lkIGZ1bGwgdGFibGUgc2NhbnMgd2hlbiBnZXR0aW5nIHB1YmxpY2F0aW9uIHRhYmxl CiBpbmZvcm1hdGlvbiBieSB0YWJsZXN5bmMgd29ya2Vycy4KClJlcG9ydGVkLWJ5OiBNYXJjb3Mg UGVnb3Jhcm8gPG1hcmNvc0BmMTAuY29tLmJyPgpSZXZpZXdlZC1ieTogWmhpamllIEhvdSAoRnVq aXRzdSkgPGhvdXpqLmZuc3RAZnVqaXRzdS5jb20+ClJldmlld2VkLWJ5OiBNYXRoZXVzIEFsY2Fu dGFyYSA8bWF0aGV1c3NzaWx2OTdAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGku ZXZhbi5jaGFvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUIt Skx3YkJGTnVBU3lFblpXUDBUY2s5dU5rdGhCWnFpNldvWE5ldlVUNittVjhYbUFAbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAgIHwg MzgyICsrKysrKysrKysrKysrKy0tLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3RhYmxlc3luYy5jIHwgIDY4ICsrKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg ICAgICAgICAgICAgfCAgIDkgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQgICB8IDEyOSArKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5z cWwgICAgICAgIHwgIDY3ICsrKysKIDUgZmlsZXMgY2hhbmdlZCwgNTQzIGluc2VydGlvbnMoKyks IDExMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXgg YWFkYzdjMjAyYzYuLjUyMTNmMWQwYTIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5jCkBAIC0xMjA3LDYgKzEyMDcsMjQwIEBAIEdldFB1YmxpY2F0aW9uQnlOYW1lKGNvbnN0IGNo YXIgKnB1Ym5hbWUsIGJvb2wgbWlzc2luZ19vaykKIAlyZXR1cm4gT2lkSXNWYWxpZChvaWQpID8g R2V0UHVibGljYXRpb24ob2lkKSA6IE5VTEw7CiB9CiAKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYg dGhlIHRhYmxlIG9mIHRoZSBnaXZlbiByZWxpZCBpcyBwdWJsaXNoZWQgZm9yIHRoZSBzcGVjaWZp ZWQKKyAqIHB1YmxpY2F0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZXZhbHVhdGVzIHRoZSBl ZmZlY3RpdmUgcHVibGlzaGVkIE9JRCBiYXNlZCBvbiB0aGUKKyAqIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290IHNldHRpbmcsIHJhdGhlciB0aGFuIGp1c3QgY2hlY2tpbmcgY2F0YWxvZyBlbnRy aWVzCisgKiAoZS5nLiwgcGdfcHVibGljYXRpb25fcmVsKS4gRm9yIGluc3RhbmNlLCB3aGVuIHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzCisgKiBmYWxzZSwgaXQgcmV0dXJucyBmYWxzZSBm b3IgYSBwYXJlbnQgcGFydGl0aW9uZWQgdGFibGUgYW5kIHRydWUgZm9yIGl0cyBsZWFmCisgKiBw YXJ0aXRpb25zLCBldmVuIGlmIHRoZSBwYXJlbnQgaXMgdGhlIG9uZSBleHBsaWNpdGx5IGFkZGVk IHRvIHRoZSBwdWJsaWNhdGlvbi4KKyAqCisgKiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdGhp cyBmdW5jdGlvbiBhdm9pZHMgdGhlIG92ZXJoZWFkIG9mIGNvbnN0cnVjdGluZworICogdGhlIGNv bXBsZXRlIGxpc3Qgb2YgcHVibGlzaGVkIHRhYmxlcyBkdXJpbmcgdGhlIGV2YWx1YXRpb24uIEl0 IGNhbiBleGVjdXRlCisgKiBxdWlja2x5IGV2ZW4gd2hlbiB0aGUgcHVibGljYXRpb24gY29udGFp bnMgYSBsYXJnZSBudW1iZXIgb2YgcmVsYXRpb25zLgorICovCitzdGF0aWMgYm9vbAoraXNfdGFi bGVfcHVibGlzaGFibGVfaW5fcHVibGljYXRpb24oT2lkIHJlbGlkLCBQdWJsaWNhdGlvbiAqcHVi KQoreworCWlmIChwdWItPnB1YnZpYXJvb3QpCisJeworCQlpZiAocHViLT5hbGx0YWJsZXMpCisJ CXsKKwkJCS8qCisJCQkgKiBBTEwgVEFCTEUgcHVibGljYXRpb25zIHdpdGggcHVidmlhcm9vdD10 cnVlIGluY2x1ZGUgb25seSB0YWJsZXMKKwkJCSAqIHRoYXQgYXJlIGVpdGhlciByZWd1bGFyIHRh YmxlcyBvciB0b3AtbW9zdCBwYXJ0aXRpb25lZCB0YWJsZXMuCisJCQkgKi8KKwkJCWlmIChnZXRf cmVsX3JlbGlzcGFydGl0aW9uKHJlbGlkKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCS8qCisJ CQkgKiBDaGVjayBpZiB0aGUgdGFibGUgaXMgc3BlY2lmaWVkIGluIHRoZSBFWENFUFQgY2xhdXNl IGluIHRoZQorCQkJICogcHVibGljYXRpb24uIEFMTCBUQUJMRSBwdWJsaWNhdGlvbnMgaGF2ZSBw Z19wdWJsaWNhdGlvbl9yZWwKKwkJCSAqIGVudHJpZXMgb25seSBmb3IgRVhDRVBUJ2VkIHRhYmxl cywgc28gaXQncyBzdWZmaWNpZW50IHRvIGNoZWNrCisJCQkgKiB0aGUgZXhpc3RlbmNlIG9mIGl0 cyBlbnRyeS4KKwkJCSAqLworCQkJcmV0dXJuICFTZWFyY2hTeXNDYWNoZUV4aXN0czIoUFVCTElD QVRJT05SRUxNQVAsCisJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwKKwkJCQkJ CQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViLT5vaWQpKTsKKwkJfQorCisJCS8qCisJCSAqIENo ZWNrIGlmIGl0cyBjb3JyZXNwb25kaW5nIGVudHJ5IGV4aXN0cyBlaXRoZXIgaW4KKwkJICogcGdf cHVibGljYXRpb25fcmVsIG9yIHBnX3B1YmxpY2F0aW9uX25hbWVzcGFjZS4KKwkJICovCisJCXJl dHVybiAoU2VhcmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkJ ICBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwKKwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShw dWItPm9pZCkpIHx8CisJCQkJU2VhcmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FUSU9OTkFNRVNQ QUNFTUFQLAorCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGdldF9yZWxfbmFtZXNwYWNlKHJl bGlkKSksCisJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViLT5vaWQpKSk7CisJfQorCisJ LyoKKwkgKiBGb3Igbm9uLXB1YnZpYXJvb3QgcHVibGljYXRpb25zLCBwYXJ0aXRpb25lZCB0YWJs ZSdzIE9JRCBjYW4gbmV2ZXIgYmUgYQorCSAqIHB1Ymxpc2hlZCBPSUQuCisJICovCisJaWYgKGdl dF9yZWxfcmVsa2luZChyZWxpZCkgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJcmV0 dXJuIGZhbHNlOworCisJaWYgKHB1Yi0+YWxsdGFibGVzKQorCXsKKwkJT2lkCQkJdGFyZ2V0X3Jl bGlkID0gcmVsaWQ7CisKKwkJaWYgKGdldF9yZWxfcmVsaXNwYXJ0aXRpb24ocmVsaWQpKQorCQl7 CisJCQlMaXN0CSAgICphbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWxpZCk7 CisKKwkJCS8qCisJCQkgKiBPbmx5IHRoZSB0b3AtbW9zdCBhbmNlc3RvciBjYW4gYXBwZWFyIGlu IHRoZSBFWENFUFQgY2xhdXNlLgorCQkJICogVGhlcmVmb3JlLCBmb3IgYSBwYXJ0aXRpb24sIGV4 Y2x1c2lvbiBtdXN0IGJlIGV2YWx1YXRlZCBhdCB0aGUKKwkJCSAqIHRvcC1tb3N0IGFuY2VzdG9y LgorCQkJICovCisJCQl0YXJnZXRfcmVsaWQgPSBsbGFzdF9vaWQoYW5jZXN0b3JzKTsKKworCQkJ bGlzdF9mcmVlKGFuY2VzdG9ycyk7CisJCX0KKworCQkvKgorCQkgKiBUaGUgdGFibGUgaXMgcHVi bGlzaGVkIHVubGVzcyBpdCdzIHNwZWNpZmllZCBpbiB0aGUgRVhDRVBUIGNsYXVzZS4KKwkJICog QUxMIFRBQkxFIHB1YmxpY2F0aW9ucyBoYXZlIHBnX3B1YmxpY2F0aW9uX3JlbCBlbnRyaWVzIG9u bHkgZm9yCisJCSAqIEVYQ0VQVCdlZCB0YWJsZXMsIHNvIGl0J3Mgc3VmZmljaWVudCB0byBjaGVj ayB0aGUgZXhpc3RlbmNlIG9mIGl0cworCQkgKiBlbnRyeS4KKwkJICovCisJCXJldHVybiAhU2Vh cmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkJICBPYmplY3RJ ZEdldERhdHVtKHRhcmdldF9yZWxpZCksCisJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHVi LT5vaWQpKTsKKwl9CisKKwlpZiAoZ2V0X3JlbF9yZWxpc3BhcnRpdGlvbihyZWxpZCkpCisJewor CQlMaXN0CSAgICphbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWxpZCk7CisJ CU9pZAkJCXRvcG1vc3QgPSBHZXRUb3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKHB1Yi0+b2lk LCBhbmNlc3RvcnMsCisJCQkJCQkJCQkJCQkJCQkgIE5VTEwpOworCisJCWxpc3RfZnJlZShhbmNl c3RvcnMpOworCisJCS8qIFRoaXMgdGFibGUgaXMgcHVibGlzaGVkIGlmIGl0cyBhbmNlc3RvciBp cyBwdWJsaXNoZWQgKi8KKwkJaWYgKE9pZElzVmFsaWQodG9wbW9zdCkpCisJCQlyZXR1cm4gdHJ1 ZTsKKworCQkvKiBUaGUgcGFydGl0aW9uIGl0c2VsZiBtaWdodCBiZSBwdWJsaXNoZWQsIHNvIGNo ZWNrIGJlbG93ICovCisJfQorCisJcmV0dXJuIChTZWFyY2hTeXNDYWNoZUV4aXN0czIoUFVCTElD QVRJT05SRUxNQVAsCisJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShyZWxpZCksCisJCQkJCQkJ CSAgT2JqZWN0SWRHZXREYXR1bShwdWItPm9pZCkpIHx8CisJCQlTZWFyY2hTeXNDYWNoZUV4aXN0 czIoUFVCTElDQVRJT05OQU1FU1BBQ0VNQVAsCisJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShn ZXRfcmVsX25hbWVzcGFjZShyZWxpZCkpLAorCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHVi LT5vaWQpKSk7Cit9CisKKy8qCisgKiBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKCkgYW5kIHBn X2dldF9wdWJsaWNhdGlvbl90YWJsZV9pbmZvKCkgdXNlCisgKiB0aGUgc2FtZSByZWNvcmQgdHlw ZS4KKyAqLworI2RlZmluZSBOVU1fUFVCTElDQVRJT05fVEFCTEVTX0VMRU0gNAorCisvKgorICog Q29uc3RydWN0IGEgdHVwbGUgZGVzY3JpcHRvciBmb3IgYm90aCBwZ19nZXRfcHVibGljYXRpb25f dGFsZXMoKSBhbmQKKyAqIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZV9pbmZvKCkgZnVuY3Rpb25z LgorICovCitzdGF0aWMgVHVwbGVEZXNjCitjcmVhdGVfcHVibGlzaGVkX3JlbF90dXBsZV9kZXNj KHZvaWQpCit7CisJVHVwbGVEZXNjCXR1cGRlc2M7CisKKwl0dXBkZXNjID0gQ3JlYXRlVGVtcGxh dGVUdXBsZURlc2MoTlVNX1BVQkxJQ0FUSU9OX1RBQkxFU19FTEVNKTsKKwlUdXBsZURlc2NJbml0 RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJwdWJpZCIsCisJCQkJCSAgIE9JRE9JRCwg LTEsIDApOworCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgInJl bGlkIiwKKwkJCQkJICAgT0lET0lELCAtMSwgMCk7CisJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRl c2MsIChBdHRyTnVtYmVyKSAzLCAiYXR0cnMiLAorCQkJCQkgICBJTlQyVkVDVE9ST0lELCAtMSwg MCk7CisJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0LCAicXVhbCIs CisJCQkJCSAgIFBHX05PREVfVFJFRU9JRCwgLTEsIDApOworCisJcmV0dXJuIEJsZXNzVHVwbGVE ZXNjKHR1cGRlc2MpOworfQorCisvKgorICogQ29tbW9uIHJvdXRpbmUgZm9yIHBnX2dldF9wdWJs aWNhdGlvbl90YWJsZXMoKSBhbmQKKyAqIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZV9pbmZvKCkg dG8gY29uc3RydWN0IHRoZSByZXN1bHQgdHVwbGUuCisgKiB0dXBsZV9kZXNjIHNob3VsZCBiZSB0 aGUgdHVwbGUgZGVzY3JpcHRpb24gcmV0dXJuZWQgYnkKKyAqIGNyZWF0ZV9wdWJsaXNoZWRfcmVs X3R1cGxlX2Rlc2MoKS4KKyAqLworc3RhdGljIEhlYXBUdXBsZQorY29uc3RydWN0X3B1Ymxpc2hl ZF9yZWxfdHVwbGUocHVibGlzaGVkX3JlbCAqdGFibGVfaW5mbywgVHVwbGVEZXNjIHR1cGxlX2Rl c2MpCit7CisJUHVibGljYXRpb24gKnB1YjsKKwlPaWQJCQlyZWxpZCA9IHRhYmxlX2luZm8tPnJl bGlkOworCU9pZAkJCXNjaGVtYWlkID0gZ2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpOworCUhlYXBU dXBsZQlwdWJ0dXBsZSA9IE5VTEw7CisJRGF0dW0JCXZhbHVlc1tOVU1fUFVCTElDQVRJT05fVEFC TEVTX0VMRU1dID0gezB9OworCWJvb2wJCW51bGxzW05VTV9QVUJMSUNBVElPTl9UQUJMRVNfRUxF TV0gPSB7MH07CisKKwlwdWIgPSBHZXRQdWJsaWNhdGlvbih0YWJsZV9pbmZvLT5wdWJpZCk7CisK Kwl2YWx1ZXNbMF0gPSBPYmplY3RJZEdldERhdHVtKHB1Yi0+b2lkKTsKKwl2YWx1ZXNbMV0gPSBP YmplY3RJZEdldERhdHVtKHJlbGlkKTsKKworCS8qCisJICogV2UgZG9uJ3QgY29uc2lkZXIgcm93 IGZpbHRlcnMgb3IgY29sdW1uIGxpc3RzIGZvciBGT1IgQUxMIFRBQkxFUyBvciBGT1IKKwkgKiBU QUJMRVMgSU4gU0NIRU1BIHB1YmxpY2F0aW9ucy4KKwkgKi8KKwlpZiAoIXB1Yi0+YWxsdGFibGVz ICYmCisJCSFTZWFyY2hTeXNDYWNoZUV4aXN0czIoUFVCTElDQVRJT05OQU1FU1BBQ0VNQVAsCisJ CQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShzY2hlbWFpZCksCisJCQkJCQkJICAgT2JqZWN0SWRH ZXREYXR1bShwdWItPm9pZCkpKQorCQlwdWJ0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTIoUFVC TElDQVRJT05SRUxNQVAsCisJCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwKKwkJ CQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ocHViLT5vaWQpKTsKKworCWlmIChIZWFwVHVwbGVJ c1ZhbGlkKHB1YnR1cGxlKSkKKwl7CisJCS8qIExvb2t1cCB0aGUgY29sdW1uIGxpc3QgYXR0cmli dXRlLiAqLworCQl2YWx1ZXNbMl0gPSBTeXNDYWNoZUdldEF0dHIoUFVCTElDQVRJT05SRUxNQVAs IHB1YnR1cGxlLAorCQkJCQkJCQkJQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycywKKwkJ CQkJCQkJCSYobnVsbHNbMl0pKTsKKworCQkvKiBOdWxsIGluZGljYXRlcyBubyBmaWx0ZXIuICov CisJCXZhbHVlc1szXSA9IFN5c0NhY2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgcHVidHVw bGUsCisJCQkJCQkJCQlBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcnF1YWwsCisJCQkJCQkJCQkm KG51bGxzWzNdKSk7CisJfQorCWVsc2UKKwl7CisJCW51bGxzWzJdID0gdHJ1ZTsKKwkJbnVsbHNb M10gPSB0cnVlOworCX0KKworCS8qIFNob3cgYWxsIGNvbHVtbnMgd2hlbiB0aGUgY29sdW1uIGxp c3QgaXMgbm90IHNwZWNpZmllZC4gKi8KKwlpZiAobnVsbHNbMl0pCisJeworCQlSZWxhdGlvbgly ZWwgPSB0YWJsZV9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlpbnQJCQluYXR0bnVt cyA9IDA7CisJCWludDE2CSAgICphdHRudW1zOworCQlUdXBsZURlc2MJZGVzYyA9IFJlbGF0aW9u R2V0RGVzY3IocmVsKTsKKworCQlhdHRudW1zID0gcGFsbG9jX2FycmF5KGludDE2LCBkZXNjLT5u YXR0cyk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5uYXR0czsgaSsrKQorCQl7CisJ CQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGRlc2MsIGkpOworCisJCQlp ZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJCQkJY29udGludWU7CisKKwkJCWlmIChhdHQtPmF0dGdl bmVyYXRlZCkKKwkJCXsKKwkJCQkvKiBXZSBvbmx5IHN1cHBvcnQgcmVwbGljYXRpb24gb2YgU1RP UkVEIGdlbmVyYXRlZCBjb2xzLiAqLworCQkJCWlmIChhdHQtPmF0dGdlbmVyYXRlZCAhPSBBVFRS SUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKgorCQkJCSAq IFVzZXIgaGFzbid0IHJlcXVlc3RlZCB0byByZXBsaWNhdGUgU1RPUkVEIGdlbmVyYXRlZCBjb2xz LgorCQkJCSAqLworCQkJCWlmIChwdWItPnB1YmdlbmNvbHNfdHlwZSAhPSBQVUJMSVNIX0dFTkNP TFNfU1RPUkVEKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYXR0bnVtc1tuYXR0bnVtcysr XSA9IGF0dC0+YXR0bnVtOworCQl9CisKKwkJaWYgKG5hdHRudW1zID4gMCkKKwkJeworCQkJdmFs dWVzWzJdID0gUG9pbnRlckdldERhdHVtKGJ1aWxkaW50MnZlY3RvcihhdHRudW1zLCBuYXR0bnVt cykpOworCQkJbnVsbHNbMl0gPSBmYWxzZTsKKwkJfQorCisJCXRhYmxlX2Nsb3NlKHJlbCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwl9CisKKwlyZXR1cm4gaGVhcF9mb3JtX3R1cGxlKHR1cGxlX2Rlc2Ms IHZhbHVlcywgbnVsbHMpOworfQorCiAvKgogICogR2V0IGluZm9ybWF0aW9uIG9mIHRoZSB0YWJs ZXMgaW4gdGhlIGdpdmVuIHB1YmxpY2F0aW9uIGFycmF5LgogICoKQEAgLTEyMTUsMTQgKzE0NDks MTIgQEAgR2V0UHVibGljYXRpb25CeU5hbWUoY29uc3QgY2hhciAqcHVibmFtZSwgYm9vbCBtaXNz aW5nX29rKQogRGF0dW0KIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJH UykKIHsKLSNkZWZpbmUgTlVNX1BVQkxJQ0FUSU9OX1RBQkxFU19FTEVNCTQKIAlGdW5jQ2FsbENv bnRleHQgKmZ1bmNjdHg7CiAJTGlzdAkgICAqdGFibGVfaW5mb3MgPSBOSUw7CiAKIAkvKiBzdHVm ZiBkb25lIG9ubHkgb24gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGZ1bmN0aW9uICovCiAJaWYgKFNS Rl9JU19GSVJTVENBTEwoKSkKIAl7Ci0JCVR1cGxlRGVzYwl0dXBkZXNjOwogCQlNZW1vcnlDb250 ZXh0IG9sZGNvbnRleHQ7CiAJCUFycmF5VHlwZSAgKmFycjsKIAkJRGF0dW0JICAgKmVsZW1zOwpA QCAtMTMxMSwxOCArMTU0Myw3IEBAIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJ T05fQVJHUykKIAkJaWYgKHZpYXJvb3QpCiAJCQlmaWx0ZXJfcGFydGl0aW9ucyh0YWJsZV9pbmZv cyk7CiAKLQkJLyogQ29uc3RydWN0IGEgdHVwbGUgZGVzY3JpcHRvciBmb3IgdGhlIHJlc3VsdCBy b3dzLiAqLwotCQl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoTlVNX1BVQkxJQ0FU SU9OX1RBQkxFU19FTEVNKTsKLQkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVt YmVyKSAxLCAicHViaWQiLAotCQkJCQkJICAgT0lET0lELCAtMSwgMCk7Ci0JCVR1cGxlRGVzY0lu aXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgInJlbGlkIiwKLQkJCQkJCSAgIE9JRE9J RCwgLTEsIDApOwotCQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDMs ICJhdHRycyIsCi0JCQkJCQkgICBJTlQyVkVDVE9ST0lELCAtMSwgMCk7Ci0JCVR1cGxlRGVzY0lu aXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNCwgInF1YWwiLAotCQkJCQkJICAgUEdfTk9E RV9UUkVFT0lELCAtMSwgMCk7Ci0KLQkJZnVuY2N0eC0+dHVwbGVfZGVzYyA9IEJsZXNzVHVwbGVE ZXNjKHR1cGRlc2MpOworCQlmdW5jY3R4LT50dXBsZV9kZXNjID0gY3JlYXRlX3B1Ymxpc2hlZF9y ZWxfdHVwbGVfZGVzYygpOwogCQlmdW5jY3R4LT51c2VyX2ZjdHggPSB0YWJsZV9pbmZvczsKIAog CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CkBAIC0xMzM0LDk5ICsxNTU1LDc0 IEBAIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAogCWlmIChm dW5jY3R4LT5jYWxsX2NudHIgPCBsaXN0X2xlbmd0aCh0YWJsZV9pbmZvcykpCiAJewotCQlIZWFw VHVwbGUJcHVidHVwbGUgPSBOVUxMOwogCQlIZWFwVHVwbGUJcmV0dHVwbGU7Ci0JCVB1YmxpY2F0 aW9uICpwdWI7CiAJCXB1Ymxpc2hlZF9yZWwgKnRhYmxlX2luZm8gPSAocHVibGlzaGVkX3JlbCAq KSBsaXN0X250aCh0YWJsZV9pbmZvcywgZnVuY2N0eC0+Y2FsbF9jbnRyKTsKLQkJT2lkCQkJcmVs aWQgPSB0YWJsZV9pbmZvLT5yZWxpZDsKLQkJT2lkCQkJc2NoZW1haWQgPSBnZXRfcmVsX25hbWVz cGFjZShyZWxpZCk7Ci0JCURhdHVtCQl2YWx1ZXNbTlVNX1BVQkxJQ0FUSU9OX1RBQkxFU19FTEVN XSA9IHswfTsKLQkJYm9vbAkJbnVsbHNbTlVNX1BVQkxJQ0FUSU9OX1RBQkxFU19FTEVNXSA9IHsw fTsKLQotCQkvKgotCQkgKiBGb3JtIHR1cGxlIHdpdGggYXBwcm9wcmlhdGUgZGF0YS4KLQkJICov CiAKLQkJcHViID0gR2V0UHVibGljYXRpb24odGFibGVfaW5mby0+cHViaWQpOworCQlyZXR0dXBs ZSA9IGNvbnN0cnVjdF9wdWJsaXNoZWRfcmVsX3R1cGxlKHRhYmxlX2luZm8sIGZ1bmNjdHgtPnR1 cGxlX2Rlc2MpOwogCi0JCXZhbHVlc1swXSA9IE9iamVjdElkR2V0RGF0dW0ocHViLT5vaWQpOwot CQl2YWx1ZXNbMV0gPSBPYmplY3RJZEdldERhdHVtKHJlbGlkKTsKKwkJU1JGX1JFVFVSTl9ORVhU KGZ1bmNjdHgsIEhlYXBUdXBsZUdldERhdHVtKHJldHR1cGxlKSk7CisJfQogCi0JCS8qCi0JCSAq IFdlIGRvbid0IGNvbnNpZGVyIHJvdyBmaWx0ZXJzIG9yIGNvbHVtbiBsaXN0cyBmb3IgRk9SIEFM TCBUQUJMRVMgb3IKLQkJICogRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHVibGljYXRpb25zLgotCQkg Ki8KLQkJaWYgKCFwdWItPmFsbHRhYmxlcyAmJgotCQkJIVNlYXJjaFN5c0NhY2hlRXhpc3RzMihQ VUJMSUNBVElPTk5BTUVTUEFDRU1BUCwKLQkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShzY2hl bWFpZCksCi0JCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ocHViLT5vaWQpKSkKLQkJCXB1YnR1 cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MihQVUJMSUNBVElPTlJFTE1BUCwKLQkJCQkJCQkJCQkg ICBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwKLQkJCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVt KHB1Yi0+b2lkKSk7Ci0KLQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQocHVidHVwbGUpKQotCQl7Ci0J CQkvKiBMb29rdXAgdGhlIGNvbHVtbiBsaXN0IGF0dHJpYnV0ZS4gKi8KLQkJCXZhbHVlc1syXSA9 IFN5c0NhY2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgcHVidHVwbGUsCi0JCQkJCQkJCQkJ QW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycywKLQkJCQkJCQkJCQkmKG51bGxzWzJdKSk7 Ci0KLQkJCS8qIE51bGwgaW5kaWNhdGVzIG5vIGZpbHRlci4gKi8KLQkJCXZhbHVlc1szXSA9IFN5 c0NhY2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgcHVidHVwbGUsCi0JCQkJCQkJCQkJQW51 bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJxdWFsLAotCQkJCQkJCQkJCSYobnVsbHNbM10pKTsKLQkJ fQotCQllbHNlCi0JCXsKLQkJCW51bGxzWzJdID0gdHJ1ZTsKLQkJCW51bGxzWzNdID0gdHJ1ZTsK LQkJfQorCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKK30KIAotCQkvKiBTaG93IGFsbCBjb2x1 bW5zIHdoZW4gdGhlIGNvbHVtbiBsaXN0IGlzIG5vdCBzcGVjaWZpZWQuICovCi0JCWlmIChudWxs c1syXSkKLQkJewotCQkJUmVsYXRpb24JcmVsID0gdGFibGVfb3BlbihyZWxpZCwgQWNjZXNzU2hh cmVMb2NrKTsKLQkJCWludAkJCW5hdHRudW1zID0gMDsKLQkJCWludDE2CSAgICphdHRudW1zOwot CQkJVHVwbGVEZXNjCWRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7Ci0JCQlpbnQJCQlpOwor LyoKKyAqIFNpbWlsYXIgdG8gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcygpLCBidXQgcmV0cmll dmVzIHB1YmxpY2F0aW9uCisgKiBpbmZvcm1hdGlvbiBvbmx5IGZvciB0aGUgc3BlY2lmaWVkIHRh YmxlLgorICovCitEYXR1bQorcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlX2luZm8oUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJcHVibGlzaGVkX3JlbCAq dGFibGVfaW5mbyA9IE5VTEw7CiAKLQkJCWF0dG51bXMgPSBwYWxsb2NfYXJyYXkoaW50MTYsIGRl c2MtPm5hdHRzKTsKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OworCQlPaWQJCQlyZWxpZDsKKwkJTmFtZQkJcHVibmFtZTsKKwkJUmVsYXRp b24JcmVsOworCQlQdWJsaWNhdGlvbiAqcHViOworCQlwdWJsaXNoZWRfcmVsICpwdWJyZWwgPSBO VUxMOwogCi0JCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bmF0dHM7IGkrKykKLQkJCXsKLQkJCQlG b3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGRlc2MsIGkpOworCQkvKiBjcmVh dGUgYSBmdW5jdGlvbiBjb250ZXh0IGZvciBjcm9zcy1jYWxsIHBlcnNpc3RlbmNlICovCisJCWZ1 bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKIAotCQkJCWlmIChhdHQtPmF0dGlzZHJvcHBl ZCkKLQkJCQkJY29udGludWU7CisJCS8qIHN3aXRjaCB0byBtZW1vcnkgY29udGV4dCBhcHByb3By aWF0ZSBmb3IgbXVsdGlwbGUgZnVuY3Rpb24gY2FsbHMgKi8KKwkJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOwogCi0JCQkJ aWYgKGF0dC0+YXR0Z2VuZXJhdGVkKQotCQkJCXsKLQkJCQkJLyogV2Ugb25seSBzdXBwb3J0IHJl cGxpY2F0aW9uIG9mIFNUT1JFRCBnZW5lcmF0ZWQgY29scy4gKi8KLQkJCQkJaWYgKGF0dC0+YXR0 Z2VuZXJhdGVkICE9IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQotCQkJCQkJY29udGludWU7 Ci0KLQkJCQkJLyoKLQkJCQkJICogVXNlciBoYXNuJ3QgcmVxdWVzdGVkIHRvIHJlcGxpY2F0ZSBT VE9SRUQgZ2VuZXJhdGVkCi0JCQkJCSAqIGNvbHMuCi0JCQkJCSAqLwotCQkJCQlpZiAocHViLT5w dWJnZW5jb2xzX3R5cGUgIT0gUFVCTElTSF9HRU5DT0xTX1NUT1JFRCkKLQkJCQkJCWNvbnRpbnVl OwotCQkJCX0KLQotCQkJCWF0dG51bXNbbmF0dG51bXMrK10gPSBhdHQtPmF0dG51bTsKLQkJCX0K KwkJcmVsaWQgPSBQR19HRVRBUkdfT0lEKDApOworCQlwdWJuYW1lID0gUEdfR0VUQVJHX05BTUUo MSk7CiAKLQkJCWlmIChuYXR0bnVtcyA+IDApCi0JCQl7Ci0JCQkJdmFsdWVzWzJdID0gUG9pbnRl ckdldERhdHVtKGJ1aWxkaW50MnZlY3RvcihhdHRudW1zLCBuYXR0bnVtcykpOwotCQkJCW51bGxz WzJdID0gZmFsc2U7Ci0JCQl9CisJCXJlbCA9IHRhYmxlX29wZW4ocmVsaWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJCXB1YiA9IEdldFB1YmxpY2F0aW9uQnlOYW1lKE5hbWVTdHIoKnB1Ym5hbWUpLCBm YWxzZSk7CiAKLQkJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJaWYgKGlz X3RhYmxlX3B1Ymxpc2hhYmxlX2luX3B1YmxpY2F0aW9uKHJlbGlkLCBwdWIpKQorCQl7CisJCQlw dWJyZWwgPSBwYWxsb2Nfb2JqZWN0KHB1Ymxpc2hlZF9yZWwpOworCQkJcHVicmVsLT5yZWxpZCA9 IHJlbGlkOworCQkJcHVicmVsLT5wdWJpZCA9IHB1Yi0+b2lkOwogCQl9CiAKLQkJcmV0dHVwbGUg PSBoZWFwX2Zvcm1fdHVwbGUoZnVuY2N0eC0+dHVwbGVfZGVzYywgdmFsdWVzLCBudWxscyk7CisJ CXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkvKiBDb25zdHJ1Y3QgYSB0 dXBsZSBkZXNjcmlwdG9yIGZvciB0aGUgcmVzdWx0IHJvd3MuICovCisJCWZ1bmNjdHgtPnR1cGxl X2Rlc2MgPSBjcmVhdGVfcHVibGlzaGVkX3JlbF90dXBsZV9kZXNjKCk7CisJCWZ1bmNjdHgtPnVz ZXJfZmN0eCA9IHB1YnJlbDsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CisJfQorCisJLyogc3R1ZmYgZG9uZSBvbiBldmVyeSBjYWxsIG9mIHRoZSBmdW5jdGlvbiAqLwor CWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCXRhYmxlX2luZm8gPSAocHVibGlzaGVk X3JlbCAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7CisKKwkvKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB6 ZXJvIG9yIG9uZSB0dXBsZSAqLworCWlmICh0YWJsZV9pbmZvICYmIGZ1bmNjdHgtPmNhbGxfY250 ciA9PSAwKQorCXsKKwkJSGVhcFR1cGxlCXJldHR1cGxlOworCisJCXJldHR1cGxlID0gY29uc3Ry dWN0X3B1Ymxpc2hlZF9yZWxfdHVwbGUodGFibGVfaW5mbywgZnVuY2N0eC0+dHVwbGVfZGVzYyk7 CiAKIAkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIEhlYXBUdXBsZUdldERhdHVtKHJldHR1cGxl KSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJs ZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKaW5k ZXggZjQ5YTQ4NTJlY2IuLmNlN2FmZDY4NTMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTc5OCwxNyArNzk4LDM0IEBAIGZldGNoX3JlbW90ZV90 YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsIExvZ2ljYWxSZXBSZWxhdGlv biAqbHJlbCwKIAkJICogcHVibGljYXRpb25zKS4KIAkJICovCiAJCXJlc2V0U3RyaW5nSW5mbygm Y21kKTsKLQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLAotCQkJCQkJICJTRUxFQ1QgRElTVElOQ1Qi Ci0JCQkJCQkgIiAgKENBU0UgV0hFTiAoYXJyYXlfbGVuZ3RoKGdwdC5hdHRycywgMSkgPSBjLnJl bG5hdHRzKSIKLQkJCQkJCSAiICAgVEhFTiBOVUxMIEVMU0UgZ3B0LmF0dHJzIEVORCkiCi0JCQkJ CQkgIiAgRlJPTSBwZ19wdWJsaWNhdGlvbiBwLCIKLQkJCQkJCSAiICBMQVRFUkFMIHBnX2dldF9w dWJsaWNhdGlvbl90YWJsZXMocC5wdWJuYW1lKSBncHQsIgotCQkJCQkJICIgIHBnX2NsYXNzIGMi Ci0JCQkJCQkgIiBXSEVSRSBncHQucmVsaWQgPSAldSBBTkQgYy5vaWQgPSBncHQucmVsaWQiCi0J CQkJCQkgIiAgIEFORCBwLnB1Ym5hbWUgSU4gKCAlcyApIiwKLQkJCQkJCSBscmVsLT5yZW1vdGVp ZCwKLQkJCQkJCSBwdWJfbmFtZXMtPmRhdGEpOworCisJCWlmIChzZXJ2ZXJfdmVyc2lvbiA+PSAx OTAwMDApCisJCXsKKwkJCS8qIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZV9pbmZvKCkgaXMgYXZh aWxhYmxlIHNpbmNlIHZlc2lvbiAxOSAqLworCQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJ CQkJCSAiU0VMRUNUIERJU1RJTkNUIgorCQkJCQkJCSAiICAoQ0FTRSBXSEVOIChhcnJheV9sZW5n dGgoZ3B0LmF0dHJzLCAxKSA9IGMucmVsbmF0dHMpIgorCQkJCQkJCSAiICAgVEhFTiBOVUxMIEVM U0UgZ3B0LmF0dHJzIEVORCkiCisJCQkJCQkJICIgIEZST00gcGdfcHVibGljYXRpb24gcCwiCisJ CQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlX2luZm8oJXUsIHAucHVi bmFtZSkgZ3B0LCIKKwkJCQkJCQkgIiAgcGdfY2xhc3MgYyIKKwkJCQkJCQkgIiBXSEVSRSBjLm9p ZCA9IGdwdC5yZWxpZCIKKwkJCQkJCQkgIiAgIEFORCBwLnB1Ym5hbWUgSU4gKCAlcyApIiwKKwkJ CQkJCQkgbHJlbC0+cmVtb3RlaWQsCisJCQkJCQkJIHB1Yl9uYW1lcy0+ZGF0YSk7CisJCX0KKwkJ ZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJCSAiU0VMRUNUIERJU1RJTkNU IgorCQkJCQkJCSAiICAoQ0FTRSBXSEVOIChhcnJheV9sZW5ndGgoZ3B0LmF0dHJzLCAxKSA9IGMu cmVsbmF0dHMpIgorCQkJCQkJCSAiICAgVEhFTiBOVUxMIEVMU0UgZ3B0LmF0dHJzIEVORCkiCisJ CQkJCQkJICIgIEZST00gcGdfcHVibGljYXRpb24gcCwiCisJCQkJCQkJICIgIExBVEVSQUwgcGdf Z2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUpIGdwdCwiCisJCQkJCQkJICIgIHBnX2Ns YXNzIGMiCisJCQkJCQkJICIgV0hFUkUgZ3B0LnJlbGlkID0gJXUgQU5EIGMub2lkID0gZ3B0LnJl bGlkIgorCQkJCQkJCSAiICAgQU5EIHAucHVibmFtZSBJTiAoICVzICkiLAorCQkJCQkJCSBscmVs LT5yZW1vdGVpZCwKKwkJCQkJCQkgcHViX25hbWVzLT5kYXRhKTsKIAogCQlwdWJyZXMgPSB3YWxy Y3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBjbWQuZGF0YSwKIAkJCQkJCQkgbGVuZ3Ro b2YoYXR0cnNSb3cpLCBhdHRyc1Jvdyk7CkBAIC05ODIsMTQgKzk5OSwyNyBAQCBmZXRjaF9yZW1v dGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLCBMb2dpY2FsUmVwUmVs YXRpb24gKmxyZWwsCiAKIAkJLyogQ2hlY2sgZm9yIHJvdyBmaWx0ZXJzLiAqLwogCQlyZXNldFN0 cmluZ0luZm8oJmNtZCk7Ci0JCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwKLQkJCQkJCSAiU0VMRUNU IERJU1RJTkNUIHBnX2dldF9leHByKGdwdC5xdWFsLCBncHQucmVsaWQpIgotCQkJCQkJICIgIEZS T00gcGdfcHVibGljYXRpb24gcCwiCi0JCQkJCQkgIiAgTEFURVJBTCBwZ19nZXRfcHVibGljYXRp b25fdGFibGVzKHAucHVibmFtZSkgZ3B0IgotCQkJCQkJICIgV0hFUkUgZ3B0LnJlbGlkID0gJXUi Ci0JCQkJCQkgIiAgIEFORCBwLnB1Ym5hbWUgSU4gKCAlcyApIiwKLQkJCQkJCSBscmVsLT5yZW1v dGVpZCwKLQkJCQkJCSBwdWJfbmFtZXMtPmRhdGEpOworCisJCWlmIChzZXJ2ZXJfdmVyc2lvbiA+ PSAxOTAwMDApCisJCXsKKwkJCS8qIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZV9pbmZvKCkgaXMg YXZhaWxhYmxlIHNpbmNlIHZlcnNpb24gMTkgKi8KKwkJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwK KwkJCQkJCQkgIlNFTEVDVCBESVNUSU5DVCBwZ19nZXRfZXhwcihncHQucXVhbCwgZ3B0LnJlbGlk KSIKKwkJCQkJCQkgIiAgRlJPTSBwZ19wdWJsaWNhdGlvbiBwLCIKKwkJCQkJCQkgIiAgTEFURVJB TCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVfaW5mbygldSwgcC5wdWJuYW1lKSBncHQiCisJCQkJ CQkJICIgV0hFUkUgIHAucHVibmFtZSBJTiAoICVzICkiLAorCQkJCQkJCSBscmVsLT5yZW1vdGVp ZCwKKwkJCQkJCQkgcHViX25hbWVzLT5kYXRhKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRTdHJp bmdJbmZvKCZjbWQsCisJCQkJCQkJICJTRUxFQ1QgRElTVElOQ1QgcGdfZ2V0X2V4cHIoZ3B0LnF1 YWwsIGdwdC5yZWxpZCkiCisJCQkJCQkJICIgIEZST00gcGdfcHVibGljYXRpb24gcCwiCisJCQkJ CQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUpIGdwdCIK KwkJCQkJCQkgIiBXSEVSRSBncHQucmVsaWQgPSAldSIKKwkJCQkJCQkgIiAgIEFORCBwLnB1Ym5h bWUgSU4gKCAlcyApIiwKKwkJCQkJCQkgbHJlbC0+cmVtb3RlaWQsCisJCQkJCQkJIHB1Yl9uYW1l cy0+ZGF0YSk7CiAKIAkJcmVzID0gd2FscmN2X2V4ZWMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwg Y21kLmRhdGEsIDEsIHF1YWxSb3cpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAzNjFl MmNmZmZlYi4uYjM1N2E2N2JhN2QgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTI0NTEs NiArMTI0NTEsMTUgQEAKICAgcHJvYXJnbW9kZXMgPT4gJ3t2LG8sbyxvLG99JywKICAgcHJvYXJn bmFtZXMgPT4gJ3twdWJuYW1lLHB1YmlkLHJlbGlkLGF0dHJzLHF1YWx9JywKICAgcHJvc3JjID0+ ICdwZ19nZXRfcHVibGljYXRpb25fdGFibGVzJyB9LAoreyBvaWQgPT4gJzgwNjAnLAorICBkZXNj ciA9PiAnZ2V0IGluZm9ybWF0aW9uIG9mIHRoZSB0YWJsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIHNw ZWNpZmllZCBwdWJsaWNhdGlvbicsCisgIHByb25hbWUgPT4gJ3BnX2dldF9wdWJsaWNhdGlvbl90 YWJsZV9pbmZvJywgcHJvcm93cyA9PiAnMScsCisgIHByb3JldHNldCA9PiAndCcsIHByb3ZvbGF0 aWxlID0+ICdzJywKKyAgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywgcHJvYXJndHlwZXMgPT4gJ29p ZCBuYW1lJywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3tvaWQsbmFtZSxvaWQsb2lkLGludDJ2ZWN0 b3IscGdfbm9kZV90cmVlfScsCisgIHByb2FyZ21vZGVzID0+ICd7aSxpLG8sbyxvLG99JywKKyAg cHJvYXJnbmFtZXMgPT4gJ3tyZWxpZCxwdWJuYW1lLHB1YmlkLHJlbGlkLGF0dHJzLHF1YWx9JywK KyAgcHJvc3JjID0+ICdwZ19nZXRfcHVibGljYXRpb25fdGFibGVfaW5mbycgfSwKIHsgb2lkID0+ ICc4MDUyJywgZGVzY3IgPT4gJ2dldCBPSURzIG9mIHNlcXVlbmNlcyBpbiBhIHB1YmxpY2F0aW9u JywKICAgcHJvbmFtZSA9PiAncGdfZ2V0X3B1YmxpY2F0aW9uX3NlcXVlbmNlcycsIHByb3Jvd3Mg PT4gJzEwMDAnLCBwcm9yZXRzZXQgPT4gJ3QnLAogICBwcm92b2xhdGlsZSA9PiAncycsIHByb3Jl dHR5cGUgPT4gJ29pZCcsIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggNjgxZDI1NjRlZDUuLmU5OTE0YzE0N2ZhIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMjE4Miw2ICsy MTgyLDEzNSBAQCBEUk9QIFRBQkxFIHRlc3RwdWJfbWVyZ2VfcGs7CiBSRVNFVCBTRVNTSU9OIEFV VEhPUklaQVRJT047CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyLCByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcl9k dW1teTsKKy0tIFRlc3QgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlX2luZm8oKSBmdW5jdGlvbgor Q1JFQVRFIFNDSEVNQSBncHRfdGVzdF9zY2g7CitDUkVBVEUgVEFCTEUgZ3B0X3Rlc3Rfc2NoLnRi bF9zY2ggKGlkIGludCk7CitDUkVBVEUgVEFCTEUgdGJsX25vcm1hbCAoaWQgaW50KTsKK0NSRUFU RSBUQUJMRSB0YmxfcGFyZW50IChpZDEgaW50LCBpZDIgaW50LCBpZDMgaW50KSBQQVJUSVRJT04g QlkgUkFOR0UgKGlkMSk7CitDUkVBVEUgVEFCTEUgdGJsX3BhcnQxIFBBUlRJVElPTiBPRiB0Ymxf cGFyZW50IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKTsKK0NSRUFURSBQVUJMSUNBVElPTiBw dWJfYWxsIEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0g dHJ1ZSk7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX2FsbF9ub3ZpYV9yb290IEZPUiBBTEwgVEFC TEVTIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOworQ1JFQVRFIFBV QkxJQ0FUSU9OIHB1Yl9hbGxfZXhjZXB0IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGJs X3BhcmVudCwgZ3B0X3Rlc3Rfc2NoLnRibF9zY2gpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9z Y2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgZ3B0X3Rlc3Rfc2NoOworQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1Yl9ub3JtYWwgRk9SIFRBQkxFIHRibF9ub3JtYWwgV0hFUkUgKGlkIDwgMTApOworQ1JF QVRFIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X2xlYWYgRk9SIFRBQkxFIHRibF9wYXJ0MSBXSVRIIChw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsKK0NSRUFURSBQVUJMSUNBVElPTiBw dWJfcGFydF9wYXJlbnQgRk9SIFRBQkxFIHRibF9wYXJlbnQgKGlkMSwgaWQyKSBXSEVSRSAoaWQx ID0gMTApIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CitDUkVBVEUg UFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3QgRk9SIFRBQkxFIHRibF9wYXJl bnQgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSk7CitDUkVBVEUgRlVO Q1RJT04gdGVzdF9ncHQocHVibmFtZSB0ZXh0LCByZWxuYW1lIHRleHQpCitSRVRVUk5TIFRBQkxF ICgKKyAgcHVibmFtZSB0ZXh0LAorICByZWxuYW1lIG5hbWUsCisgIGF0dHJzIHRleHQsCisgIHF1 YWwgdGV4dAorKQorQkVHSU4gQVRPTUlDCisgIFNFTEVDVCBwLnB1Ym5hbWUsIGMucmVsbmFtZSwg Z3B0LmF0dHJzOjp0ZXh0LCBwZ19nZXRfZXhwcihncHQucXVhbCwgZ3B0LnJlbGlkKQorICAgIEZS T00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlX2luZm8ocmVsbmFtZTo6cmVnY2xhc3M6Om9pZCwg cHVibmFtZSkgZ3B0CisgICAgSk9JTiBwZ19wdWJsaWNhdGlvbiBwIE9OIHAub2lkID0gZ3B0LnB1 YmlkCisgICAgSk9JTiBwZ19jbGFzcyBjIE9OIGMub2lkID0gZ3B0LnJlbGlkCisgIE9SREVSIEJZ IHAucHVibmFtZSwgYy5yZWxuYW1lOworRU5EOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHVi X25vcm1hbCcsICd0Ymxfbm9ybWFsJyk7CisgIHB1Ym5hbWUgICB8ICByZWxuYW1lICAgfCBhdHRy cyB8ICAgcXVhbCAgICAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0t LS0tLQorIHB1Yl9ub3JtYWwgfCB0Ymxfbm9ybWFsIHwgMSAgICAgfCAoaWQgPCAxMCkKKygxIHJv dykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX3NjaGVtYScsICd0Ymxfbm9ybWFsJyk7 IC0tIG5vIHJlc3VsdAorIHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0 ZXN0X2dwdCgncHViX3BhcnRfcGFyZW50JywgJ3RibF9wYXJlbnQnKTsKKyAgICAgcHVibmFtZSAg ICAgfCAgcmVsbmFtZSAgIHwgYXR0cnMgfCAgICBxdWFsICAgIAorLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tCisgcHViX3BhcnRfcGFyZW50IHwgdGJs X3BhcmVudCB8IDEgMiAgIHwgKGlkMSA9IDEwKQorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHRl c3RfZ3B0KCdwdWJfcGFydF9wYXJlbnQnLCAndGJsX3BhcnQxJyk7IC0tIG5vIHJlc3VsdAorIHB1 Ym5hbWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tKy0tLS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX3BhcnRf cGFyZW50X25vdmlhX3Jvb3QnLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQKKyBwdWJuYW1l IHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSst LS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X3BhcmVu dF9ub3ZpYV9yb290JywgJ3RibF9wYXJ0MScpOworICAgICAgICAgIHB1Ym5hbWUgICAgICAgICAg IHwgIHJlbG5hbWUgIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorIHB1Yl9wYXJ0X3BhcmVudF9ub3ZpYV9yb290 IHwgdGJsX3BhcnQxIHwgMSAyIDMgfCAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dw dCgncHViX3BhcnRfbGVhZicsICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdAorIHB1Ym5hbWUg fCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0t LS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX3BhcnRfbGVhZics ICd0YmxfcGFydDEnKTsKKyAgICBwdWJuYW1lICAgIHwgIHJlbG5hbWUgIHwgYXR0cnMgfCBxdWFs IAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisgcHViX3BhcnRf bGVhZiB8IHRibF9wYXJ0MSB8IDEgMiAzIHwgCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVz dF9ncHQoJ3B1Yl9hbGwnLCAndGJsX3BhcmVudCcpOworIHB1Ym5hbWUgfCAgcmVsbmFtZSAgIHwg YXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorIHB1 Yl9hbGwgfCB0YmxfcGFyZW50IHwgMSAyIDMgfCAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0 ZXN0X2dwdCgncHViX2FsbCcsICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0CisgcHVibmFtZSB8 IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX2V4Y2VwdCcs ICd0Ymxfbm9ybWFsJyk7CisgICAgcHVibmFtZSAgICAgfCAgcmVsbmFtZSAgIHwgYXR0cnMgfCBx dWFsIAorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKyBwdWJf YWxsX2V4Y2VwdCB8IHRibF9ub3JtYWwgfCAxICAgICB8IAorKDEgcm93KQorCitTRUxFQ1QgKiBG Uk9NIHRlc3RfZ3B0KCdwdWJfYWxsX2V4Y2VwdCcsICdncHRfdGVzdF9zY2gudGJsX3NjaCcpOyAt LSBubyByZXN1bHQgKGV4Y2x1ZGVkKQorIHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFs IAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworU0VMRUNU ICogRlJPTSB0ZXN0X2dwdCgncHViX2FsbF9leGNlcHQnLCAndGJsX3BhcmVudCcpOyAtLSBubyBy ZXN1bHQgKGV4Y2x1ZGVkKQorIHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJP TSB0ZXN0X2dwdCgncHViX2FsbF9leGNlcHQnLCAndGJsX3BhcnQxJyk7IC0tIG5vIHJlc3VsdCAo ZXhjbHVkZWQpCisgcHVibmFtZSB8IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlc3Rf Z3B0KCdwdWJfYWxsX25vdmlhX3Jvb3QnLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQKKyBw dWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxf bm92aWFfcm9vdCcsICd0YmxfcGFydDEnKTsKKyAgICAgIHB1Ym5hbWUgICAgICAgfCAgcmVsbmFt ZSAgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tKy0tLS0tLQorIHB1Yl9hbGxfbm92aWFfcm9vdCB8IHRibF9wYXJ0MSB8IDEgMiAzIHwgCiso MSByb3cpCisKKy0tIENsZWFuIHVwCitEUk9QIEZVTkNUSU9OIHRlc3RfZ3B0KHRleHRbXSwgcmVs bmFtZSk7CitFUlJPUjogIHR5cGUgInJlbG5hbWUiIGRvZXMgbm90IGV4aXN0CitEUk9QIFBVQkxJ Q0FUSU9OIHB1Yl9hbGw7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9hbGxfbm92aWFfcm9vdDsKK0RS T1AgUFVCTElDQVRJT04gcHViX2FsbF9leGNlcHQ7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9zY2hl bWE7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9ub3JtYWw7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9w YXJ0X2xlYWY7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X3BhcmVudDsKK0RST1AgUFVCTElD QVRJT04gcHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3Q7CitEUk9QIFRBQkxFIHRibF9ub3JtYWws IHRibF9wYXJlbnQsIHRibF9wYXJ0MTsKK0RST1AgU0NIRU1BIGdwdF90ZXN0X3NjaCBDQVNDQURF OworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBncHRfdGVzdF9zY2gudGJsX3NjaAog LS0gc3RhZ2Ugb2JqZWN0cyBmb3IgcGdfZHVtcCB0ZXN0cwogQ1JFQVRFIFNDSEVNQSBwdWJtZSBD UkVBVEUgVEFCTEUgdDAgKGMgaW50LCBkIGludCkgQ1JFQVRFIFRBQkxFIHQxIChjIGludCk7CiBD UkVBVEUgU0NIRU1BIHB1Ym1lMiBDUkVBVEUgVEFCTEUgdDAgKGMgaW50LCBkIGludCk7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5kZXggNDA1NTc5ZGFkNTIuLjc1ZjFiYzJmMmZj IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCkBAIC0xMzc4LDYgKzEzNzgsNzMg QEAgUkVTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1AgUk9MRSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXJfZHVtbXk7CiAKKy0tIFRlc3QgcGdfZ2V0X3B1YmxpY2F0aW9uX3Rh YmxlX2luZm8oKSBmdW5jdGlvbgorQ1JFQVRFIFNDSEVNQSBncHRfdGVzdF9zY2g7CitDUkVBVEUg VEFCTEUgZ3B0X3Rlc3Rfc2NoLnRibF9zY2ggKGlkIGludCk7CitDUkVBVEUgVEFCTEUgdGJsX25v cm1hbCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSB0YmxfcGFyZW50IChpZDEgaW50LCBpZDIgaW50 LCBpZDMgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkMSk7CitDUkVBVEUgVEFCTEUgdGJsX3Bh cnQxIFBBUlRJVElPTiBPRiB0YmxfcGFyZW50IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKTsK KworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9hbGwgRk9SIEFMTCBUQUJMRVMgV0lUSCAocHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfYWxs X25vdmlhX3Jvb3QgRk9SIEFMTCBUQUJMRVMgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgPSBmYWxzZSk7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX2FsbF9leGNlcHQgRk9SIEFMTCBU QUJMRVMgRVhDRVBUIFRBQkxFICh0YmxfcGFyZW50LCBncHRfdGVzdF9zY2gudGJsX3NjaCk7CitD UkVBVEUgUFVCTElDQVRJT04gcHViX3NjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBncHRfdGVz dF9zY2g7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX25vcm1hbCBGT1IgVEFCTEUgdGJsX25vcm1h bCBXSEVSRSAoaWQgPCAxMCk7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX3BhcnRfbGVhZiBGT1Ig VEFCTEUgdGJsX3BhcnQxIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2Up OworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X3BhcmVudCBGT1IgVEFCTEUgdGJsX3BhcmVu dCAoaWQxLCBpZDIpIFdIRVJFIChpZDEgPSAxMCkgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QgPSB0cnVlKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfcGFydF9wYXJlbnRfbm92aWFf cm9vdCBGT1IgVEFCTEUgdGJsX3BhcmVudCBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IGZhbHNlKTsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfZ3B0KHB1Ym5hbWUgdGV4dCwgcmVs bmFtZSB0ZXh0KQorUkVUVVJOUyBUQUJMRSAoCisgIHB1Ym5hbWUgdGV4dCwKKyAgcmVsbmFtZSBu YW1lLAorICBhdHRycyB0ZXh0LAorICBxdWFsIHRleHQKKykKK0JFR0lOIEFUT01JQworICBTRUxF Q1QgcC5wdWJuYW1lLCBjLnJlbG5hbWUsIGdwdC5hdHRyczo6dGV4dCwgcGdfZ2V0X2V4cHIoZ3B0 LnF1YWwsIGdwdC5yZWxpZCkKKyAgICBGUk9NIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZV9pbmZv KHJlbG5hbWU6OnJlZ2NsYXNzOjpvaWQsIHB1Ym5hbWUpIGdwdAorICAgIEpPSU4gcGdfcHVibGlj YXRpb24gcCBPTiBwLm9pZCA9IGdwdC5wdWJpZAorICAgIEpPSU4gcGdfY2xhc3MgYyBPTiBjLm9p ZCA9IGdwdC5yZWxpZAorICBPUkRFUiBCWSBwLnB1Ym5hbWUsIGMucmVsbmFtZTsKK0VORDsKKwor U0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX25vcm1hbCcsICd0Ymxfbm9ybWFsJyk7CitTRUxF Q1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfc2NoZW1hJywgJ3RibF9ub3JtYWwnKTsgLS0gbm8gcmVz dWx0CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X3BhcmVudCcsICd0YmxfcGFy ZW50Jyk7CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfcGFydF9wYXJlbnQnLCAndGJsX3Bh cnQxJyk7IC0tIG5vIHJlc3VsdAorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfcGFydF9w YXJlbnRfbm92aWFfcm9vdCcsICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdAorU0VMRUNUICog RlJPTSB0ZXN0X2dwdCgncHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3QnLCAndGJsX3BhcnQxJyk7 CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X2xlYWYnLCAndGJsX3BhcmVudCcp OyAtLSBubyByZXN1bHQKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X2xlYWYnLCAn dGJsX3BhcnQxJyk7CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGwnLCAndGJsX3Bh cmVudCcpOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX2FsbCcsICd0YmxfcGFydDEnKTsg LS0gbm8gcmVzdWx0CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxfZXhjZXB0Jywg J3RibF9ub3JtYWwnKTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxfZXhjZXB0Jywg J2dwdF90ZXN0X3NjaC50Ymxfc2NoJyk7IC0tIG5vIHJlc3VsdCAoZXhjbHVkZWQpCitTRUxFQ1Qg KiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX2V4Y2VwdCcsICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJl c3VsdCAoZXhjbHVkZWQpCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX2V4Y2VwdCcs ICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0IChleGNsdWRlZCkKKworU0VMRUNUICogRlJPTSB0 ZXN0X2dwdCgncHViX2FsbF9ub3ZpYV9yb290JywgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0 CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX25vdmlhX3Jvb3QnLCAndGJsX3BhcnQx Jyk7CisKKy0tIENsZWFuIHVwCitEUk9QIEZVTkNUSU9OIHRlc3RfZ3B0KHRleHRbXSwgcmVsbmFt ZSk7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9hbGw7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9hbGxf bm92aWFfcm9vdDsKK0RST1AgUFVCTElDQVRJT04gcHViX2FsbF9leGNlcHQ7CitEUk9QIFBVQkxJ Q0FUSU9OIHB1Yl9zY2hlbWE7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9ub3JtYWw7CitEUk9QIFBV QkxJQ0FUSU9OIHB1Yl9wYXJ0X2xlYWY7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X3BhcmVu dDsKK0RST1AgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3Q7CitEUk9QIFRB QkxFIHRibF9ub3JtYWwsIHRibF9wYXJlbnQsIHRibF9wYXJ0MTsKK0RST1AgU0NIRU1BIGdwdF90 ZXN0X3NjaCBDQVNDQURFOworCiAtLSBzdGFnZSBvYmplY3RzIGZvciBwZ19kdW1wIHRlc3RzCiBD UkVBVEUgU0NIRU1BIHB1Ym1lIENSRUFURSBUQUJMRSB0MCAoYyBpbnQsIGQgaW50KSBDUkVBVEUg VEFCTEUgdDEgKGMgaW50KTsKIENSRUFURSBTQ0hFTUEgcHVibWUyIENSRUFURSBUQUJMRSB0MCAo YyBpbnQsIGQgaW50KTsKLS0gCjIuNTMuMAoK --000000000000d9f987064c9eaad3--