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.94.2) (envelope-from ) id 1tweBX-00GI91-HC for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Mar 2025 09:33:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tweBV-00HEmH-R3 for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Mar 2025 09:33:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tweBV-00HEm9-7n for pgsql-hackers@lists.postgresql.org; Mon, 24 Mar 2025 09:33:29 +0000 Received: from mail-yw1-x1136.google.com ([2607:f8b0:4864:20::1136]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tweBT-000pXd-2F for pgsql-hackers@lists.postgresql.org; Mon, 24 Mar 2025 09:33:28 +0000 Received: by mail-yw1-x1136.google.com with SMTP id 00721157ae682-6febf391132so34667717b3.1 for ; Mon, 24 Mar 2025 02:33:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742808806; x=1743413606; 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=vkm9NXV8PtYHGxEh4K9NN+euNPodI+syx3rVjKoeQWw=; b=F4aMc7fYSo0JU5m/WmTu8v/PtYogMaioWR5Y06LT5g9kHp4pm/cfin7wf8CZbnTKOY IrjRhT9/YMxryeB/MAjbsGWgczD8fiuHVkA4mQ3aTLwr+CXhIfuzCgYbZXSI6YvpoWM1 wvhfqVnyetQa0lx/ezZ6N2NiI4U3xysH9dJaljYfSdSGN3harrCKiFi+xoKuy9B6h7fj EqydO4GsXvxIEnqTO1RpiY5rLZaRFHDEMrXon4p12oIx3qf/C4+MlwJ1O6IWB8JZBLXP uPCFqpa7hQWnNKTkP3FUze4UxRt2JUkuvU25ImcYdqmbR1C9nG06PX0YjAMmzjgVmHyn wEnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742808806; x=1743413606; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=vkm9NXV8PtYHGxEh4K9NN+euNPodI+syx3rVjKoeQWw=; b=HV/4KdtXS0lom+WBBxB4YtuaDeXV4D+pd+e3OqCm+QGLpIYIAcD5feOrvNO+z1SR6Q TYAC0ewsU1FAplsDWph+s8IsewUVJBEzTg6fi4d6xCXa82xa/KP+tG74BufCJ7Im4Xai CFpPGjZEdK572gDnphW3SaZIwu6QKQKCnxNS7WIcX9ARBPTpxj0RXlk4Sd2djq5LxMVC VsPIJxzZ5RWTDS9AJzInXorSM4v/0bT7DvKYSepBIwe0IFX2huOuCAipTzH0rxxAtbk9 YsCBHEEHtpn8JIuvG/vSKEyMabbbbj1Ob5LniAd6KFA7dZZ9TAw+H+OvqeaCFTOc9lYI MUfA== X-Forwarded-Encrypted: i=1; AJvYcCX91s/4+XZIUZOViBvH7l8xS8C7VEqKcKXudkLJCtvPJ/2vkr985SfX0iN6x2fmTL1bnkQCOTn3PMOGXSGP@lists.postgresql.org X-Gm-Message-State: AOJu0YyN+rGZ2tX37Vj7/prg3JWFA8bIXjY240UNT03doBhPPc3Mkz0R q0hEaJKge12EJdX04Xtb881DBy2LAmRmydSVrEgrKWt6HjF9XYHX9hvbXaVTNdcdcv1FKVy+xzs QqXWGyXIpXZaFoO8KnmWH6bdKy9s= X-Gm-Gg: ASbGncta8S5iMaG4rLNExKz0RqQ/EEuAc4MkgArKs/Ftqv5OHkrMFOhbAkPAmnYFkpC T26Lixgbv4tsXiYD0Fs5EP9/mFt7Oda3+IEXloC7ApB/VajOt6aHRg1+k8lEoqRHyF4HloFWORC hP+qmCL/KlGbTtGJamgB5TMW6ggaXdCRu9+ac4 X-Google-Smtp-Source: AGHT+IGhuXNYtmxjznMZm0pW9U9CXnFRQ9AaV+tSc3Y8Pnu+5IPO5xSQcyjMxmGdJCDeDG/xCjtCdS+AYaT2YUEhZ5U= X-Received: by 2002:a05:690c:dd4:b0:6fd:4072:2c5b with SMTP id 00721157ae682-700bacfea85mr129400347b3.24.1742808805973; Mon, 24 Mar 2025 02:33:25 -0700 (PDT) MIME-Version: 1.0 References: <202502050844.4lrgg3aoudat@alvherre.pgsql> In-Reply-To: From: Shlok Kyal Date: Mon, 24 Mar 2025 15:03:14 +0530 X-Gm-Features: AQ5f1JrjXd0JiicaXZhgMcV8PVnVArkeQYqGGkqOgd4mczkRggy6WCgRzSJ1RDE Message-ID: Subject: Re: Restrict publishing of partitioned table with a foreign table as partition To: vignesh C Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Sergey Tatarintsev , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000cae0a80631134b30" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cae0a80631134b30 Content-Type: text/plain; charset="UTF-8" On Thu, 20 Feb 2025 at 21:18, vignesh C wrote: > > On Tue, 18 Feb 2025 at 15:59, Shlok Kyal wrote: > > > > On Mon, 17 Feb 2025 at 20:13, vignesh C wrote: > > > > > > On Fri, 14 Feb 2025 at 12:59, Shlok Kyal wrote: > > > > > > > > I have used the changes suggested by you. Also I have updated the > > > > comments and the function name. > > > > > > There is another concurrency issue possible: > > > +/* Check if a partitioned table has a foreign partition */ > > > +bool > > > +check_partrel_has_foreign_table(Form_pg_class relform) > > > +{ > > > + bool has_foreign_tbl = false; > > > + > > > + if (relform->relkind == RELKIND_PARTITIONED_TABLE) > > > + { > > > + List *relids = NIL; > > > + > > > + relids = find_all_inheritors(relform->oid, NoLock, NULL); > > > > > > Create a publication with publish_via_partition_root as true, hold the > > > execution after check_partrel_has_foreign_table execution finishes. > > > Then parallely execute the following: > > > CREATE TABLE t1(id int) PARTITION BY RANGE(id); > > > CREATE TABLE part1 PARTITION OF t1 FOR VALUES FROM (0) TO (5); > > > CREATE TABLE part2 PARTITION OF t1 FOR VALUES FROM (5) TO (15) > > > PARTITION BY RANGE(id); > > > CREATE FOREIGN TABLE part2_1 PARTITION OF part2 FOR VALUES FROM (10) > > > TO (15) SERVER fdw > > > > > > Now both the partitioned table having foreign table and a publication > > > will be created. > > > > > > > Hi Vignesh, > > > > I have addressed the above issue. If we take a ShareLock on the > > pg_class, we won't be able to create table concurrently, which may > > address the issue. Thoughts? > > I have attached the v8 patch here. > > Since pg_class is a very common table it is not a good idea to take > ShareLock on it. Will it be possible to use pg_partitioned_table table > instead? Hi Vignesh, I have addressed comments and I have modified the patch to take a ShareLock on pg_partitioned_table table. Please find the updated v9 patch. Thanks and Regards, Shlok Kyal --000000000000cae0a80631134b30 Content-Type: application/octet-stream; name="v9-0001-Restrict-publishing-of-partitioned-table-with-for.patch" Content-Disposition: attachment; filename="v9-0001-Restrict-publishing-of-partitioned-table-with-for.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8mv1zhh0 RnJvbSBiZGE1NWJmZmZmZjlmMDQ4NzczMGY1ZGRkYTM0YmMwYWY2MzVmYWYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTEgRmViIDIwMjUgMTU6MzI6NTUgKzA1MzAKU3ViamVjdDogW1BBVENIIHY5 XSBSZXN0cmljdCBwdWJsaXNoaW5nIG9mIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbgog cGFydGl0aW9uCgpMb2dpY2FsIHJlcGxpY2F0aW9uIG9mIGZvcmVpZ24gdGFibGUgaXMgbm90IHN1 cHBvcnRlZCBhbmQgd2UgdGhyb3cgYW4KZXJyb3IgaW4gdGhpcyBjYXNlLiBCdXQgd2hlbiBjcmVh dGUgYSBwdWJsaWNhdGlvbiBvbiBhIHBhcnRpdGlvbmVkCnRhYmxlIHRoYXQgaGFzIGEgZm9yZWln biBwYXJ0aXRpb24sIHRoZSBpbml0aWFsIHN5bmMgb2Ygc3VjaCB0YWJsZSBpcwpzdWNjZXNzZnVs IGFuZCB3ZSBzaG91bGQgYXZvaWQgc3VjaCBjYXNlcy4KCkN1cnJlbnQgQmVoYXZpb3VyIGluIEhF QUQsIHdoZW4gcHVibGljYXRpb24gaXMgY3JlYXRlZDoKMS4gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCA9IHRydWUKUm9vdCB0YWJsZSBpcyBwdWJsaXNoZWQgYW5kIHRoZSBpbml0aWFs IGRhdGEgb2YgZm9yZWlnbiBwYXJ0aXRpb25zCmFyZSByZXBsaWNhdGVkLgoKMi4gd2l0aCBwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlIGFuZCBGT1IgQUxMIFRBQkxFUwpBbGwgbGVh ZiB0YWJsZXMgZXhjZXB0IGZvcmVpZ24gcGFydGl0aW9ucyBhcmUgcHVibGlzaGVkLgoKMy4gd2l0 aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlIGFuZApGT1IgVEFCTEUvIEZPUiBU QUJMRVMgSU4gU0NIRU1BCkFsbCBsZWFmIHRhYmxlcyBhcmUgcHVibGlzaGVkLiBJbml0aWFsIGRh dGEgb2YgZm9yZWlnbiBwYXJ0aXRpb25zIGFyZQpyZXBsaWNhdGVkLgoKV2l0aCB0aGlzIHBhdGNo IHdlIGhhdmUgZm9sbG93aW5nIGJlaGF2aW91cjoKMS4gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRp b25fcm9vdCA9IHRydWUKV2UgdGhyb3cgYW4gZXJyb3Igd2hlbiB3ZSB0cnkgdG8gcHVibGlzaCBh IGZvcmVpZ24gcGFydGl0aXRvbi4gRXJyb3IKaXMgdGhyb3duIHdoZW4gd2UgdHJ5IHRvIGNyZWF0 ZSBhIHB1YmxpY2F0aW9uIG9uIChvciBhZGQgdG8gZXhpc3RpbmcKcHVibGljYXRpb24pIGEgcGFy dGl0aW9uZWQgdGFibGUgd2l0aCBmb3JlaWduIHBhcnRpdGlvbiwgd2hlbiB0cnkgdG8KY3JlYXRl IGEgZm9yZWlnbiBwYXJ0aXRpb24gYW5kIHdoZW4gd2UgdHJ5IHRvIGF0dGFjaCBmb3JlaWduIHRh YmxlIChvcgphIHRhYmxlIHdpdGggZm9yZWlnbiBwYXJ0aXRpb24pIHRvIGV4aXN0aW5nIHB1Ymxp c2hlZCB0YWJsZXMuCgoyLiB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UK V2Ugc2tpcCBwdWJsaXNoaW5nIGZvcmVpZ24gcGFydGl0aW9uIHdoaWNoIGFyZSBwYXJ0IG9mIHRo ZSBwdWJsaWNhdGlvbi4KVGhpcyBpcyBkb25lIGJ5IGF2b2lkIGFkZGluZyBmb3JlaWduIHBhcnRp dGlvbnMgaW4gcGdfc3Vic2NyaXB0aW9uX3JlbApjYXRhbG9nIHRhYmxlLgoKV2UgaGF2ZSBpbnRy b2R1Y2VkIHR3byBmdW5jdGlvbnMgJ2NoZWNrX3BhcnRyZWxfaGFzX2ZvcmVpZ25fdGFibGUnIGFu ZAonY2hlY2tfZm9yZWlnbl90YWJsZXMnLiBJbiAnY2hlY2tfcGFydHJlbF9oYXNfZm9yZWlnbl90 YWJsZScgd2UgZ28KdGhyb3VnaCB0aGUgY2hpbGQgbm9kZXMgb2YgYSBwYXJ0aXRpb24gYW5kIGNo ZWNrIGlmIGl0IGhhcyBhIGZvcmVpZ24KdGFibGUuIFdoaWxlIGRvaW5nIHNvLCB3ZSB0YWtlIGEg QWNjZXNzU2hhcmVMb2NrIG9uIGVhY2ggcGFydGl0aW9uIHRhYmxlCnRvIGF2b2lkIGNyZWF0aW9u IG9mIGZvcmVpZ24gcGFydGl0aW9uIGNvbmN1cnJlbnRseS4KSW4gJ2NoZWNrX2ZvcmVpZ25fdGFi bGVzJyBpZiBzY2hlbWEgaWQgaXMgcHJvdmlkZWQgd2UgY2hlY2sgZm9yIGVhY2gKcGFydGl0aW9u ZWQgdGFibGUgaW4gdGhhdCBzY2hlbWEgaWYgaXQgaGFzIGEgZm9yZWlnbiBwYXJ0aXRpb24sIG9y IGlmCnNjaGVtYSBpZCBpcyBub3QgcHJvdmlkZWQgd2UgY2hlY2sgZm9yIGVhY2ggcGFydGl0aW9u ZWQgdGFibGUgaW4gdGhlCmRhdGFiYXNlIGlmIGl0IGhhcyBhIGZvcmVpZ24gcGFydGl0aW9uLiBX aGlsZSBkb2luZyBzbyB3ZSB0YWtlIGEKU2hhcmVMb2NrIG9uIHBnX3BhcnRpdGlvbmVkX3RhYmxl IHNvIG5vIHBhcnRpdGlvbiB0YWJsZSBpcyBjcmVhdGVkCmNvbmN1cnJlbnRseSBhZnRlciB0aGlz IGNoZWNrLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyAgICAgIHwg MTQxICsrKysrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25j bWRzLmMgICAgICAgIHwgIDQ3ICsrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNh dGlvbmNtZHMuYyAgICB8ICA0NyArKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMgICAgICAgICAgfCAgNTMgKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVi bGljYXRpb24uaCAgICAgIHwgICA1ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0IHwgIDg5ICsrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJs aWNhdGlvbi5zcWwgICAgICB8ICA4MSArKysrKysrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDQ0 NiBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmMKaW5kZXggZDZmOTRkYjVkOTkuLmQzZDgxNzM1MDllIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9w YXJ0aXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3BhcnRpdGlvbmVk X3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfcHVibGljYXRpb25fbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19wdWJsaWNhdGlvbl9yZWwuaCIKQEAgLTUzLDcgKzU0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKICAq IGVycm9yIGlmIG5vdC4KICAqLwogc3RhdGljIHZvaWQKLWNoZWNrX3B1YmxpY2F0aW9uX2FkZF9y ZWxhdGlvbihSZWxhdGlvbiB0YXJnZXRyZWwpCitjaGVja19wdWJsaWNhdGlvbl9hZGRfcmVsYXRp b24oUmVsYXRpb24gdGFyZ2V0cmVsLCBQdWJsaWNhdGlvbiAqcHViKQogewogCS8qIE11c3QgYmUg YSByZWd1bGFyIG9yIHBhcnRpdGlvbmVkIHRhYmxlICovCiAJaWYgKFJlbGF0aW9uR2V0Rm9ybSh0 YXJnZXRyZWwpLT5yZWxraW5kICE9IFJFTEtJTkRfUkVMQVRJT04gJiYKQEAgLTY0LDYgKzY1LDE5 IEBAIGNoZWNrX3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihSZWxhdGlvbiB0YXJnZXRyZWwpCiAJ CQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpKSwKIAkJCQkgZXJyZGV0YWls X3JlbGtpbmRfbm90X3N1cHBvcnRlZChSZWxhdGlvbkdldEZvcm0odGFyZ2V0cmVsKS0+cmVsa2lu ZCkpKTsKIAorCS8qCisJICogcHVibGlzaF92aWFfcm9vdF9wYXJ0aXRpb24gY2Fubm90IGJlIHRy dWUgaWYgaXQgaXMgYSBwYXJ0aXRpb25lZCB0YWJsZQorCSAqIGFuZCBoYXMgYW55IGZvcmVpZ24g cGFydGl0aW9uCisJICovCisJaWYgKHB1Yi0+cHVidmlhcm9vdCAmJgorCQljaGVja19wYXJ0cmVs X2hhc19mb3JlaWduX3RhYmxlKFJlbGF0aW9uR2V0Rm9ybSh0YXJnZXRyZWwpKSkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkgZXJybXNnKCJjYW5ub3Qgc2V0IHBhcmFtZXRlciBcIiVzXCIgdG8gdHJ1ZSBmb3IgcHVi bGljYXRpb24gXCIlc1wiIiwKKwkJCQkJCSJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIsIHB1 Yi0+bmFtZSksCisJCQkJIGVycmRldGFpbCgicGFydGl0aW9uIHRhYmxlIFwiJXNcIiBpbiBwdWJs aWNhdGlvbiBjb250YWlucyBhIGZvcmVpZ24gcGFydGl0aW9uIiwKKwkJCQkJCSAgIFJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKHRhcmdldHJlbCkpKSk7CisKIAkvKiBDYW4ndCBiZSBzeXN0ZW0gdGFi bGUgKi8KIAlpZiAoSXNDYXRhbG9nUmVsYXRpb24odGFyZ2V0cmVsKSkKIAkJZXJlcG9ydChFUlJP UiwKQEAgLTMwNCw3ICszMTgsNyBAQCBjaGVja19hbmRfZmV0Y2hfY29sdW1uX2xpc3QoUHVibGlj YXRpb24gKnB1YiwgT2lkIHJlbGlkLCBNZW1vcnlDb250ZXh0IG1jeHQsCiAKIC8qCiAgKiBHZXRz IHRoZSByZWxhdGlvbnMgYmFzZWQgb24gdGhlIHB1YmxpY2F0aW9uIHBhcnRpdGlvbiBvcHRpb24g Zm9yIGEgc3BlY2lmaWVkCi0gKiByZWxhdGlvbi4KKyAqIHJlbGF0aW9uLiBGb3JlaWduIHRhYmxl cyBhcmUgbm90IGluY2x1ZGVkLgogICovCiBMaXN0ICoKIEdldFB1YlBhcnRpdGlvbk9wdGlvblJl bGF0aW9ucyhMaXN0ICpyZXN1bHQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCwKQEAg LTMxMywyNSArMzI3LDIxIEBAIEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhMaXN0ICpy ZXN1bHQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCwKIAlpZiAoZ2V0X3JlbF9yZWxr aW5kKHJlbGlkKSA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFICYmCiAJCXB1Yl9wYXJ0b3B0 ICE9IFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCkKIAl7Ci0JCUxpc3QJICAgKmFsbF9wYXJ0cyA9IGZp bmRfYWxsX2luaGVyaXRvcnMocmVsaWQsIE5vTG9jaywKLQkJCQkJCQkJCQkJCQlOVUxMKTsKKwkJ TGlzdAkgICAqYWxsX3BhcnRzID0gZmluZF9hbGxfaW5oZXJpdG9ycyhyZWxpZCwgTm9Mb2NrLCBO VUxMKTsKIAotCQlpZiAocHViX3BhcnRvcHQgPT0gUFVCTElDQVRJT05fUEFSVF9BTEwpCi0JCQly ZXN1bHQgPSBsaXN0X2NvbmNhdChyZXN1bHQsIGFsbF9wYXJ0cyk7Ci0JCWVsc2UgaWYgKHB1Yl9w YXJ0b3B0ID09IFBVQkxJQ0FUSU9OX1BBUlRfTEVBRikKKwkJZm9yZWFjaF9vaWQocGFydE9pZCwg YWxsX3BhcnRzKQogCQl7Ci0JCQlMaXN0Q2VsbCAgICpsYzsKKwkJCWNoYXIJCXJlbGtpbmQgPSBn ZXRfcmVsX3JlbGtpbmQocGFydE9pZCk7CiAKLQkJCWZvcmVhY2gobGMsIGFsbF9wYXJ0cykKLQkJ CXsKLQkJCQlPaWQJCQlwYXJ0T2lkID0gbGZpcnN0X29pZChsYyk7CisJCQlpZiAocmVsa2luZCA9 PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisJCQkJY29udGludWU7CiAKLQkJCQlpZiAoZ2V0X3Jl bF9yZWxraW5kKHBhcnRPaWQpICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCQkJCXJl c3VsdCA9IGxhcHBlbmRfb2lkKHJlc3VsdCwgcGFydE9pZCk7Ci0JCQl9CisJCQlpZiAocHViX3Bh cnRvcHQgPT0gUFVCTElDQVRJT05fUEFSVF9MRUFGICYmCisJCQkJcmVsa2luZCA9PSBSRUxLSU5E X1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXN1bHQgPSBsYXBwZW5k X29pZChyZXN1bHQsIHBhcnRPaWQpOwogCQl9Ci0JCWVsc2UKLQkJCUFzc2VydChmYWxzZSk7CiAJ fQogCWVsc2UKIAkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCByZWxpZCk7CkBAIC00NjMs NyArNDczLDcgQEAgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRp b25SZWxJbmZvICpwcmksCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwp LCBwdWItPm5hbWUpKSk7CiAJfQogCi0JY2hlY2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKHRh cmdldHJlbCk7CisJY2hlY2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKHRhcmdldHJlbCwgcHVi KTsKIAogCS8qIFZhbGlkYXRlIGFuZCB0cmFuc2xhdGUgY29sdW1uIG5hbWVzIGludG8gYSBCaXRt YXBzZXQgb2YgYXR0bnVtcy4gKi8KIAlhdHRudW1zID0gcHViX2NvbGxpc3RfdmFsaWRhdGUocHJp LT5yZWxhdGlvbiwgcHJpLT5jb2x1bW5zKTsKQEAgLTcwMyw2ICs3MTMsMTMgQEAgcHVibGljYXRp b25fYWRkX3NjaGVtYShPaWQgcHViaWQsIE9pZCBzY2hlbWFpZCwgYm9vbCBpZl9ub3RfZXhpc3Rz KQogCiAJY2hlY2tfcHVibGljYXRpb25fYWRkX3NjaGVtYShzY2hlbWFpZCk7CiAKKwkvKgorCSAq IElmIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIHRydWUsIGNoZWNrIGlmIHNjaGVtYSBo YXMgYW55IGZvcmVpZ24KKwkgKiBwYXJ0aXRpb24KKwkgKi8KKwlpZiAocHViLT5wdWJ2aWFyb290 KQorCQljaGVja19mb3JlaWduX3RhYmxlcyhzY2hlbWFpZCwgcHViLT5uYW1lKTsKKwogCS8qIEZv cm0gYSB0dXBsZSAqLwogCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKIAltZW1z ZXQobnVsbHMsIGZhbHNlLCBzaXplb2YobnVsbHMpKTsKQEAgLTEzMzIsMyArMTM0OSw5MyBAQCBw Z19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlTUkZfUkVUVVJO X0RPTkUoZnVuY2N0eCk7CiB9CisKKy8qIENoZWNrIGlmIGEgcGFydGl0aW9uZWQgdGFibGUgaGFz IGEgZm9yZWlnbiBwYXJ0aXRpb24gKi8KK2Jvb2wKK2NoZWNrX3BhcnRyZWxfaGFzX2ZvcmVpZ25f dGFibGUoRm9ybV9wZ19jbGFzcyByZWxmb3JtKQoreworCWJvb2wJCWhhc19mb3JlaWduX3RibCA9 IGZhbHNlOworCisJaWYgKHJlbGZvcm0tPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9U QUJMRSkKKwl7CisJCUxpc3QJICAgKnJlbGlkcyA9IGZpbmRfYWxsX2luaGVyaXRvcnMocmVsZm9y bS0+b2lkLCBOb0xvY2ssIE5VTEwpOworCisJCWZvcmVhY2hfb2lkKHJlbGlkLCByZWxpZHMpCisJ CXsKKwkJCVJlbGF0aW9uCXJlbCA9IHRhYmxlX29wZW4ocmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwkJCWlmIChSZWxhdGlvbkdldEZvcm0ocmVsKS0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJ R05fVEFCTEUpCisJCQkJaGFzX2ZvcmVpZ25fdGJsID0gdHJ1ZTsKKworCQkJdGFibGVfY2xvc2Uo cmVsLCBOb0xvY2spOworCisJCQlpZiAoaGFzX2ZvcmVpZ25fdGJsKQorCQkJCWJyZWFrOworCQl9 CisJfQorCisJcmV0dXJuIGhhc19mb3JlaWduX3RibDsKK30KKworLyoKKyAqIElmIHZhbGlkIHNj aGVtYWlkIHByb3ZpZGVkLCBjaGVjayBpZiB0aGUgc2NoZW1hIGhhcyBhIHBhcnRpdGlvbiB0YWJs ZSB3aGljaAorICogaGFzIGEgZm9yZWlnbiBwYXJ0aXRpb24uIFRoZSBwYXJ0aXRpb24gdGFibGVz IGluIGEgc2NoZW1hIGNhbiBoYXZlIHBhcnRpdGlvbnMKKyAqIGluIG90aGVyIHNjaGVtYS4gV2Ug YWxzbyBuZWVkIHRvIGNoZWNrIGlmIHN1Y2ggcGFydGl0aW9ucyBhcmUgZm9yZWlnbgorICogcGFy dGl0aW9uLgorICoKKyAqIElmIHZhbGlkIHNjaGVtYWlkIGlzIG5vdCBwcm92aWRlZCwgd2UgZ2V0 IGFsbCBwYXJ0aXRpb24gdGFibGVzIGFuZCBjaGVjayBpZgorICogaXQgaGFzIGFueSBmb3JlaWdu IHBhcnRpdGlvbi4gV2UgdGFrZSBhIGxvY2sgb24gcGFydGl0aW9uIHRhYmxlcyBzbyBubyBuZXcK KyAqIGZvcmVpZ24gcGFydGl0aW9ucyBhcmUgYWRkZWQgY29uY3VycmVudGx5LgorICoKKyAqIFdl IHRha2UgYSBTaGFyZUxvY2sgb24gcGdfY2xhc3MgdG8gcmVzdHJpY3QgYWRkaXRpb24gb2YgbmV3 IHBhcnRpdGlvbmVkIHRhYmxlCisgKiB3aGljaCBtYXkgY29udGFpbiBhIGZvcmVpZ24gcGFydGl0 aW9uIHdoaWxlIHB1YmxpY2F0aW9uIGlzIGJlaW5nIGNyZWF0ZWQuCisgKi8KK3ZvaWQKK2NoZWNr X2ZvcmVpZ25fdGFibGVzKE9pZCBzY2hlbWFpZCwgY2hhciAqcHVibmFtZSkKK3sKKwlSZWxhdGlv bgljbGFzc1JlbDsKKwlSZWxhdGlvbglwYXJ0UmVsOworCVNjYW5LZXlEYXRhIGtleVszXTsKKwlp bnQJCQlrZXljb3VudCA9IDA7CisJVGFibGVTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXBs ZTsKKworCWNsYXNzUmVsID0gdGFibGVfb3BlbihSZWxhdGlvblJlbGF0aW9uSWQsIEFjY2Vzc1No YXJlTG9jayk7CisJcGFydFJlbCA9IHRhYmxlX29wZW4oUGFydGl0aW9uZWRSZWxhdGlvbklkLCBT aGFyZUxvY2spOworCisJLyogR2V0IHRoZSByb290IG5vZGVzIG9mIHBhcnRpdGlvbmVkIHRhYmxl ICovCisJU2NhbktleUluaXQoJmtleVtrZXljb3VudCsrXSwKKwkJCQlBbnVtX3BnX2NsYXNzX3Jl bGtpbmQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0NIQVJFUSwKKwkJCQlDaGFyR2V0 RGF0dW0oUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkpOworCisJU2NhbktleUluaXQoJmtleVtr ZXljb3VudCsrXSwKKwkJCQlBbnVtX3BnX2NsYXNzX3JlbGlzcGFydGl0aW9uLAorCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9CT09MRVEsCisJCQkJQm9vbEdldERhdHVtKGZhbHNlKSk7CisK KwkvKiBJZiBzY2hlbWEgaWQgaXMgcHJvdmlkZWQgY2hlY2sgcGFydGl0aW9uZWQgdGFibGUgaW4g dGhhdCBzY2hlbWEgKi8KKwlpZiAoT2lkSXNWYWxpZChzY2hlbWFpZCkpCisJCVNjYW5LZXlJbml0 KCZrZXlba2V5Y291bnQrK10sCisJCQkJCUFudW1fcGdfY2xhc3NfcmVsbmFtZXNwYWNlLAorCQkJ CQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCXNjaGVtYWlkKTsKKworCXNj YW4gPSB0YWJsZV9iZWdpbnNjYW5fY2F0YWxvZyhjbGFzc1JlbCwga2V5Y291bnQsIGtleSk7CisJ d2hpbGUgKCh0dXBsZSA9IGhlYXBfZ2V0bmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikp ICE9IE5VTEwpCisJeworCQlGb3JtX3BnX2NsYXNzIHJlbEZvcm0gPSAoRm9ybV9wZ19jbGFzcykg R0VUU1RSVUNUKHR1cGxlKTsKKworCQlpZiAoY2hlY2tfcGFydHJlbF9oYXNfZm9yZWlnbl90YWJs ZShyZWxGb3JtKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJjYW5ub3Qgc2V0IHBhcmFtZXRl ciBcIiVzXCIgdG8gdHJ1ZSBmb3IgcHVibGljYXRpb24gXCIlc1wiIiwKKwkJCQkJCQkicHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QiLCBwdWJuYW1lKSwKKwkJCQkJIGVycmRldGFpbCgicGFydGl0 aW9uIHRhYmxlIFwiJXNcIiBpbiBwdWJsaWNhdGlvbiBjb250YWlucyBhIGZvcmVpZ24gcGFydGl0 aW9uIiwKKwkJCQkJCQkgICBnZXRfcmVsX25hbWUocmVsRm9ybS0+b2lkKSkpKTsKKwl9CisKKwl0 YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGNsYXNzUmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCXRhYmxlX2Nsb3NlKHBhcnRSZWwsIE5vTG9jayk7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9mb3JlaWduY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZm9y ZWlnbmNtZHMuYwppbmRleCBjMTRlMDM4ZDU0Zi4uZjQxYTI0YWVhMzkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZm9yZWlnbmNtZHMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvZGVw ZW5kZW5jeS5oIgogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXhpbmcuaCIKICNpbmNsdWRlICJjYXRh bG9nL29iamVjdGFjY2Vzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGFydGl0aW9uLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX2RhdGFfd3JhcHBlci5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfZm9yZWlnbl9zZXJ2ZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fdGFi bGUuaCIKQEAgLTE0MjMsNiArMTQyNCw1MiBAQCBDcmVhdGVGb3JlaWduVGFibGUoQ3JlYXRlRm9y ZWlnblRhYmxlU3RtdCAqc3RtdCwgT2lkIHJlbGlkKQogCiAJZnRyZWwgPSB0YWJsZV9vcGVuKEZv cmVpZ25UYWJsZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCisJLyoKKwkgKiBDaGVj ayBpZiBpdCBpcyBhIGZvcmVpZ24gcGFydGl0aW9uIGFuZCB0aGUgcGFydGl0aW9uZWQgdGFibGUg aXMgbm90CisJICogcHVibGlzaGVkIG9yIHB1Ymxpc2hlZCB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290IG9wdGlvbiBhcyBmYWxzZS4KKwkgKi8KKwlpZiAoc3RtdC0+YmFzZS5wYXJ0Ym91 bmQgIT0gTlVMTCkKKwl7CisJCVJhbmdlVmFyICAgKnJvb3QgPSBjYXN0Tm9kZShSYW5nZVZhciwg bGZpcnN0KGxpc3RfaGVhZChzdG10LT5iYXNlLmluaFJlbGF0aW9ucykpKTsKKwkJUmVsYXRpb24J cm9vdHJlbCA9IHRhYmxlX29wZW5ydihyb290LCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWlmIChS ZWxhdGlvbkdldEZvcm0ocm9vdHJlbCktPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9U QUJMRSkKKwkJeworCQkJT2lkCQkJc2NoZW1haWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyb290 cmVsKTsKKwkJCUxpc3QJICAgKnB1Ym9pZHMgPSBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhyb290 cmVsLT5yZF9pZCk7CisJCQlMaXN0CSAgICphbmNlc3RvcnM7CisKKwkJCXB1Ym9pZHMgPSBsaXN0 X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsIEdldEFsbFRhYmxlc1B1YmxpY2F0aW9ucygpKTsK KwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsIEdldFNjaGVtYVB1 YmxpY2F0aW9ucyhzY2hlbWFpZCkpOworCQkJYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNl c3RvcnMocm9vdHJlbC0+cmRfaWQpOworCisJCQlmb3JlYWNoX29pZChhbmNlc3RvciwgYW5jZXN0 b3JzKQorCQkJeworCQkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMs CisJCQkJCQkJCQkJCQkgR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoYW5jZXN0b3IpKTsKKwkJCQlz Y2hlbWFpZCA9IGdldF9yZWxfbmFtZXNwYWNlKGFuY2VzdG9yKTsKKwkJCQlwdWJvaWRzID0gbGlz dF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLAorCQkJCQkJCQkJCQkJIEdldFNjaGVtYVB1Ymxp Y2F0aW9ucyhzY2hlbWFpZCkpOworCQkJfQorCQkJbGlzdF9mcmVlKGFuY2VzdG9ycyk7CisKKwkJ CWZvcmVhY2hfb2lkKHB1Ym9pZCwgcHVib2lkcykKKwkJCXsKKwkJCQlQdWJsaWNhdGlvbiAqcHVi ID0gR2V0UHVibGljYXRpb24ocHVib2lkKTsKKworCQkJCWlmIChwdWItPnB1YnZpYXJvb3QpCisJ CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1Rf VFlQRSksCisJCQkJCQkJIGVycm1zZygiY2Fubm90IGNyZWF0ZSB0YWJsZSBmb3JlaWduIHBhcnRp dGlvbiBcIiVzXCIiLAorCQkJCQkJCQkJZ2V0X3JlbF9uYW1lKHJlbGlkKSksCisJCQkJCQkJIGVy cmRldGFpbCgicGFydGl0aW9uIHRhYmxlIFwiJXNcIiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24g cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiLAorCQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUocm9vdHJlbCkpKSk7CisJCQl9CisJCX0KKworCQl0YWJsZV9jbG9zZShyb290cmVs LCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKwogCS8qCiAJICogRm9yIG5vdyB0aGUgb3duZXIgY2Fu bm90IGJlIHNwZWNpZmllZCBvbiBjcmVhdGUuIFVzZSBlZmZlY3RpdmUgdXNlciBJRC4KIAkgKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggMGIyM2Q5NGMzOGUuLmY3 NGNiYjJhYmIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtOTE1 LDYgKzkxNSwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0 ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkvKiBBc3NvY2lhdGUgb2JqZWN0cyB3aXRoIHRoZSBw dWJsaWNhdGlvbi4gKi8KIAlpZiAoc3RtdC0+Zm9yX2FsbF90YWJsZXMpCiAJeworCQkvKiBDaGVj ayBpZiBhbnkgcGFydGl0aW9uZWQgdGFibGUgaGFzIGZvcmVpZ24gcGFydGl0aW9uICovCisJCWlm IChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCkKKwkJCWNoZWNrX2ZvcmVpZ25fdGFibGVzKElu dmFsaWRPaWQsIHN0bXQtPnB1Ym5hbWUpOworCiAJCS8qIEludmFsaWRhdGUgcmVsY2FjaGUgc28g dGhhdCBwdWJsaWNhdGlvbiBpbmZvIGlzIHJlYnVpbHQuICovCiAJCUNhY2hlSW52YWxpZGF0ZVJl bGNhY2hlQWxsKCk7CiAJfQpAQCAtMTA4MCw2ICsxMDg0LDQ5IEBAIEFsdGVyUHVibGljYXRpb25P cHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJ CX0KIAl9CiAKKwkvKgorCSAqIElmIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIHNldCB0 byB0cnVlLCBjaGVjayBpZiB0aGUgcHVibGljYXRpb24KKwkgKiBhbHJlYWR5IGhhdmUgYW55IGZv cmVpZ24gcGFydGl0aW9uCisJICovCisJaWYgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dp dmVuICYmIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KQorCXsKKwkJTGlzdAkgICAqc2NoZW1h b2lkcyA9IE5JTDsKKwkJTGlzdAkgICAqcmVsaWRzID0gTklMOworCisJCWNoYXIJICAgKnB1Ym5h bWUgPSBzdG10LT5wdWJuYW1lOworCisJCWlmIChwdWJmb3JtLT5wdWJhbGx0YWJsZXMpCisJCQlj aGVja19mb3JlaWduX3RhYmxlcyhJbnZhbGlkT2lkLCBwdWJuYW1lKTsKKworCQlzY2hlbWFvaWRz ID0gR2V0UHVibGljYXRpb25TY2hlbWFzKHB1YmZvcm0tPm9pZCk7CisKKwkJZm9yZWFjaF9vaWQo c2NoZW1hb2lkLCBzY2hlbWFvaWRzKQorCQkJY2hlY2tfZm9yZWlnbl90YWJsZXMoc2NoZW1hb2lk LCBwdWJuYW1lKTsKKworCQlyZWxpZHMgPSBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJmb3Jt LT5vaWQsIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CisKKwkJZm9yZWFjaF9vaWQocmVsaWQsIHJl bGlkcykKKwkJeworCQkJSGVhcFR1cGxlCXJlbHR1cDsKKwkJCUZvcm1fcGdfY2xhc3MgcmVsZm9y bTsKKworCQkJcmVsdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1 bShyZWxpZCkpOworCQkJcmVsZm9ybSA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QocmVsdHVw KTsKKworCQkJUmVsZWFzZVN5c0NhY2hlKHJlbHR1cCk7CisKKwkJCWlmIChjaGVja19wYXJ0cmVs X2hhc19mb3JlaWduX3RhYmxlKHJlbGZvcm0pKQorCQkJeworCQkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBl cnJtc2coImNhbm5vdCBzZXQgcGFyYW1ldGVyIFwiJXNcIiB0byB0cnVlIGZvciBwdWJsaWNhdGlv biBcIiVzXCIiLAorCQkJCQkJCQkicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiLCBwdWJuYW1l KSwKKwkJCQkJCSBlcnJkZXRhaWwoInBhcnRpdGlvbiB0YWJsZSBcIiVzXCIgaW4gcHVibGljYXRp b24gY29udGFpbnMgYSBmb3JlaWduIHBhcnRpdGlvbiIsCisJCQkJCQkJCSAgIGdldF9yZWxfbmFt ZShyZWxpZCkpKSk7CisJCQl9CisJCX0KKwl9CisKIAkvKiBFdmVyeXRoaW5nIG9rLCBmb3JtIGEg bmV3IHR1cGxlLiAqLwogCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKIAltZW1z ZXQobnVsbHMsIGZhbHNlLCBzaXplb2YobnVsbHMpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMK aW5kZXggMTIwMjU0NGViZDAuLmRhYzFkYjJjZTUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YwpAQCAtMTk2NDQsNiArMTk2NDQsNTkgQEAgQVRFeGVjQXR0YWNoUGFydGl0aW9uKExpc3QgKip3 cXVldWUsIFJlbGF0aW9uIHJlbCwgUGFydGl0aW9uQ21kICpjbWQsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCiAJCQkJIGVycm1zZygiY2Fubm90IGF0dGFjaCB0ZW1w b3JhcnkgcmVsYXRpb24gb2YgYW5vdGhlciBzZXNzaW9uIGFzIHBhcnRpdGlvbiIpKSk7CiAKKwkv KgorCSAqIENoZWNrIGlmIGF0dGFjaHJlbCBpcyBhIGZvcmVpZ24gdGFibGUgb3IgYSBwYXJ0aXRp b25lZCB0YWJsZSB3aXRoCisJICogZm9yZWlnbiBwYXJ0aXRpb24gYW5kIHJlbCBpcyBub3QgcGFy dCBvZiBwdWJsaWNhdGlvbiB3aXRoIG9wdGlvbgorCSAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290IGFzIHRydWUuCisJICovCisJaWYgKGF0dGFjaHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJF TEtJTkRfRk9SRUlHTl9UQUJMRSB8fAorCQljaGVja19wYXJ0cmVsX2hhc19mb3JlaWduX3RhYmxl KFJlbGF0aW9uR2V0Rm9ybShhdHRhY2hyZWwpKSkKKwl7CisJCU9pZAkJCXNjaGVtYWlkID0gUmVs YXRpb25HZXROYW1lc3BhY2UocmVsKTsKKwkJTGlzdAkgICAqcHVib2lkcyA9IEdldFJlbGF0aW9u UHVibGljYXRpb25zKHJlbC0+cmRfaWQpOworCQlMaXN0CSAgICphbmNlc3RvcnM7CisJCWNoYXIJ ICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUocmVsLT5yZF9pZCk7CisJCWNoYXIJICAgKmF0dGFj aHJlbG5hbWUgPSBnZXRfcmVsX25hbWUoYXR0YWNocmVsLT5yZF9pZCk7CisKKwkJcHVib2lkcyA9 IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywgR2V0QWxsVGFibGVzUHVibGljYXRpb25z KCkpOworCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLCBHZXRTY2hl bWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9h bmNlc3RvcnMocmVsLT5yZF9pZCk7CisKKwkJZm9yZWFjaF9vaWQoYW5jZXN0b3IsIGFuY2VzdG9y cykKKwkJeworCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywKKwkJ CQkJCQkJCQkJIEdldFJlbGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9yKSk7CisJCQlzY2hlbWFp ZCA9IGdldF9yZWxfbmFtZXNwYWNlKGFuY2VzdG9yKTsKKwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNh dF91bmlxdWVfb2lkKHB1Ym9pZHMsCisJCQkJCQkJCQkJCSBHZXRTY2hlbWFQdWJsaWNhdGlvbnMo c2NoZW1haWQpKTsKKwkJfQorCisJCWxpc3RfZnJlZShhbmNlc3RvcnMpOworCisJCWZvcmVhY2hf b2lkKHB1Ym9pZCwgcHVib2lkcykKKwkJeworCQkJUHVibGljYXRpb24gKnB1YiA9IEdldFB1Ymxp Y2F0aW9uKHB1Ym9pZCk7CisKKwkJCWlmIChwdWItPnB1YnZpYXJvb3QpCisJCQl7CisJCQkJaWYg KGF0dGFjaHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKKwkJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9U WVBFKSwKKwkJCQkJCQkgZXJybXNnKCJjYW5ub3QgYXR0YWNoIGZvcmVpZ24gdGFibGUgXCIlc1wi IHRvIHBhcnRpdGlvbiB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCQkJYXR0YWNocmVsbmFtZSwgcmVs bmFtZSksCisJCQkJCQkJIGVycmRldGFpbCgicGFydGl0aW9uIHRhYmxlIFwiJXNcIiBpcyBwdWJs aXNoZWQgd2l0aCBvcHRpb24gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiLAorCQkJCQkJCQkJ ICAgcmVsbmFtZSkpKTsKKwkJCQllbHNlCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJCQkJIGVycm1zZygiY2Fubm90 IGF0dGFjaCB0YWJsZSBcIiVzXCIgd2l0aCBmb3JlaWduIHBhcnRpdGlvbiB0byBwYXJ0aXRpb24g dGFibGUgXCIlc1wiIiwKKwkJCQkJCQkJCWF0dGFjaHJlbG5hbWUsIHJlbG5hbWUpLAorCQkJCQkJ CSBlcnJkZXRhaWwoInBhcnRpdGlvbiB0YWJsZSBcIiVzXCIgaXMgcHVibGlzaGVkIHdpdGggb3B0 aW9uIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiwKKwkJCQkJCQkJCSAgIHJlbG5hbWUpKSk7 CisJCQl9CisJCX0KKwl9CisKIAkvKgogCSAqIENoZWNrIGlmIGF0dGFjaHJlbCBoYXMgYW55IGlk ZW50aXR5IGNvbHVtbnMgb3IgYW55IGNvbHVtbnMgdGhhdCBhcmVuJ3QKIAkgKiBpbiB0aGUgcGFy ZW50LgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCmluZGV4IDQ4YzdkMWE4NjE1Li41 MDcwNWQxMmM5OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtMTksNiAr MTksNyBAQAogCiAjaW5jbHVkZSAiY2F0YWxvZy9nZW5ia2kuaCIKICNpbmNsdWRlICJjYXRhbG9n L29iamVjdGFkZHJlc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9kLmgiCS8qIElXWVUgcHJhZ21hOiBleHBvcnQgKi8K IAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTkxLDQgKzE5Miw4IEBAIGV4dGVybiBCaXRtYXBz ZXQgKnB1Yl9jb2xsaXN0X3RvX2JpdG1hcHNldChCaXRtYXBzZXQgKmNvbHVtbnMsIERhdHVtIHB1 YmNvbHMsCiBleHRlcm4gQml0bWFwc2V0ICpwdWJfZm9ybV9jb2xzX21hcChSZWxhdGlvbiByZWxh dGlvbiwKIAkJCQkJCQkJCVB1Ymxpc2hHZW5jb2xzVHlwZSBpbmNsdWRlX2dlbmNvbHNfdHlwZSk7 CiAKK2V4dGVybiBib29sIGNoZWNrX3BhcnRyZWxfaGFzX2ZvcmVpZ25fdGFibGUoRm9ybV9wZ19j bGFzcyByZWxmb3JtKTsKKworZXh0ZXJuIHZvaWQgY2hlY2tfZm9yZWlnbl90YWJsZXMoT2lkIHNj aGVtYWlkLCBjaGFyICpwdWJuYW1lKTsKKwogI2VuZGlmCQkJCQkJCS8qIFBHX1BVQkxJQ0FUSU9O X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24u b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggNGRl OTZjMDRmOWQuLjZhMGMyNDViZDYwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1Ymxp Y2F0aW9uLm91dApAQCAtMTkyNCw2ICsxOTI0LDk1IEBAIERST1AgUFVCTElDQVRJT04gcHViMTsK IERST1AgUFVCTElDQVRJT04gcHViMjsKIERST1AgVEFCTEUgZ2VuY29sczsKIFJFU0VUIGNsaWVu dF9taW5fbWVzc2FnZXM7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKy0tIFRlc3Qgd2hlbiBmb3JlaWduIHRhYmxlIGlzIGEgcGFydGl0 aW9uIG9mIGEgcGFydGl0aW9uZWQgdGFibGUgb24gd2hpY2gKKy0tIHB1YmxpY2F0aW9uIGlzIGNy ZWF0ZWQKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBGT1JFSUdO IERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKK0NSRUFURSBTRVJWRVIgZmR3X3NlcnZlciBGT1JFSUdO IERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKK0NSRUFURSBTQ0hFTUEgc2NoMzsKK0NSRUFURSBUQUJM RSBzY2gzLnRtYWluKGlkIGludCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKK0NSRUFURSBUQUJM RSBzY2gzLnBhcnQxIFBBUlRJVElPTiBPRiBzY2gzLnRtYWluIEZPUiBWQUxVRVMgRlJPTSAoMCkg VE8gKDUpOworQ1JFQVRFIFRBQkxFIHNjaDMucGFydDIoaWQgaW50KSBQQVJUSVRJT04gQlkgUkFO R0UoaWQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5wYXJ0Ml8xIFBBUlRJVElPTiBPRiBz Y2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKSBTRVJWRVIgZmR3X3NlcnZlcjsK K0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyIEZPUiBW QUxVRVMgRlJPTSAoNSkgVE8gKDEwKTsKKy0tIENhbid0IGNyZWF0ZSBwdWJsaWNhdGlvbnMgd2l0 aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUsIGlmIHRhYmxlCistLSBoYXMgYSBm b3JlaWduIHBhcnRpdGlvbgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9SIFRBQkxFIHNjaDMu dG1haW4gV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworRVJST1I6ICBjYW5ub3Qg c2V0IHBhcmFtZXRlciAicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiIHRvIHRydWUgZm9yIHB1 YmxpY2F0aW9uICJwdWIxIgorREVUQUlMOiAgcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIgaW4gcHVi bGljYXRpb24gY29udGFpbnMgYSBmb3JlaWduIHBhcnRpdGlvbgorQ1JFQVRFIFBVQkxJQ0FUSU9O IHB1YjEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgc2NoMyBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRp b25fcm9vdCk7CitFUlJPUjogIGNhbm5vdCBzZXQgcGFyYW1ldGVyICJwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCIgdG8gdHJ1ZSBmb3IgcHVibGljYXRpb24gInB1YjEiCitERVRBSUw6ICBwYXJ0 aXRpb24gdGFibGUgInRtYWluIiBpbiBwdWJsaWNhdGlvbiBjb250YWlucyBhIGZvcmVpZ24gcGFy dGl0aW9uCitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgQUxMIFRBQkxFUyBXSVRIIChwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CitFUlJPUjogIGNhbm5vdCBzZXQgcGFyYW1ldGVyICJw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIgdG8gdHJ1ZSBmb3IgcHVibGljYXRpb24gInB1YjEi CitERVRBSUw6ICBwYXJ0aXRpb24gdGFibGUgInRtYWluIiBpbiBwdWJsaWNhdGlvbiBjb250YWlu cyBhIGZvcmVpZ24gcGFydGl0aW9uCistLSBUZXN0IHdoZW4gYSBwYXJ0aXRpb25lZCB0YWJsZSB3 aXRoIGZvcmVpZ24gdGFibGUgYXMgYSBwYXJ0aXRpb24gaXMgYXR0YWNoZWQKKy0tIHRvIHBhcnRp dGlvbmVkIHRhYmxlIHdoaWNoIGlzIGFscmVhZHkgcHVibGlzaGVkCitBTFRFUiBUQUJMRSBzY2gz LnRtYWluIERFVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0MjsKK0NSRUFURSBQVUJMSUNBVElPTiBw dWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 KTsKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyIEZP UiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKTsKK0VSUk9SOiAgY2Fubm90IGF0dGFjaCB0YWJsZSAi cGFydDIiIHdpdGggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIK K0RFVEFJTDogIHBhcnRpdGlvbiB0YWJsZSAidG1haW4iIGlzIHB1Ymxpc2hlZCB3aXRoIG9wdGlv biBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdAorLS0gQ2FuJ3QgY3JlYXRlIGZvcmVpZ24gcGFy dGl0aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25f cm9vdCA9IHRydWUKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJUSVRJT04g T0Ygc2NoMy50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdfc2Vy dmVyOworRVJST1I6ICBjYW5ub3QgY3JlYXRlIHRhYmxlIGZvcmVpZ24gcGFydGl0aW9uICJwYXJ0 M18xIgorREVUQUlMOiAgcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIgaXMgcHVibGlzaGVkIHdpdGgg b3B0aW9uIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290CistLSBDYW4ndCBhdHRhY2ggZm9yZWln biBwYXJ0aXRpb24gdG8gcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290ID0gdHJ1ZQorQ1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5wYXJ0M18yKGlkIGlu dCkgU0VSVkVSIGZkd19zZXJ2ZXI7CitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQQVJU SVRJT04gc2NoMy5wYXJ0M18yIEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgyMCk7CitFUlJPUjog IGNhbm5vdCBhdHRhY2ggZm9yZWlnbiB0YWJsZSAicGFydDNfMiIgdG8gcGFydGl0aW9uIHRhYmxl ICJ0bWFpbiIKK0RFVEFJTDogIHBhcnRpdGlvbiB0YWJsZSAidG1haW4iIGlzIHB1Ymxpc2hlZCB3 aXRoIG9wdGlvbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdAorQ1JFQVRFIFNDSEVNQSBzY2g0 OworQ1JFQVRFIFRBQkxFIHNjaDQudG1haW4oaWQgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQp OworLS0gcHVibGljYXRpb24gY3JlYXRlZCB3aXRoIEZPUiBUQUJMRVMgSU4gU0NIRU1BCitEUk9Q IFBVQkxJQ0FUSU9OIHB1YjE7CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEVTIElO IFNDSEVNQSBzY2g0IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKy0tIENhbid0 IGNyZWF0ZSBmb3JlaWduIHBhcnRpdGlvbiBvZiBwdWJsaXNoZWQgdGFibGUgd2l0aAorLS0gcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlCitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gz LnBhcnQzXzEgUEFSVElUSU9OIE9GIHNjaDQudG1haW4gRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8g KDE1KSBTRVJWRVIgZmR3X3NlcnZlcjsKK0VSUk9SOiAgY2Fubm90IGNyZWF0ZSB0YWJsZSBmb3Jl aWduIHBhcnRpdGlvbiAicGFydDNfMSIKK0RFVEFJTDogIHBhcnRpdGlvbiB0YWJsZSAidG1haW4i IGlzIHB1Ymxpc2hlZCB3aXRoIG9wdGlvbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdAorLS0g Q2FuJ3QgYXR0YWNoIGZvcmVpZ24gcGFydGl0aW9uIHRvIHB1Ymxpc2hlZCB0YWJsZSB3aXRoCist LSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKK0FMVEVSIFRBQkxFIHNjaDQudG1h aW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQzXzIgRk9SIFZBTFVFUyBGUk9NICgxNSkgVE8g KDIwKTsKK0VSUk9SOiAgY2Fubm90IGF0dGFjaCBmb3JlaWduIHRhYmxlICJwYXJ0M18yIiB0byBw YXJ0aXRpb24gdGFibGUgInRtYWluIgorREVUQUlMOiAgcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIg aXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290CitEUk9Q IFBVQkxJQ0FUSU9OIHB1YjE7CistLSBUZXN0IHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgPSBmYWxzZQorLS0gRm9yZWlnbiBwYXJ0aXRpb25zIGFyZSBza2lwcGVkIGJ5IGRlZmF1bHQK K0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluOworQ1JFQVRFIFBV QkxJQ0FUSU9OIHB1YjIgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgc2NoMzsKK0NSRUFURSBQVUJMSUNB VElPTiBwdWIzIEZPUiBBTEwgVEFCTEVTOworLS0gQ3JlYXRlIGZvcmVpZ24gcGFydGl0aW9uIG9m IHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZh bHNlCitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQzXzEgUEFSVElUSU9OIE9GIHNjaDMu dG1haW4gRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDE1KSBTRVJWRVIgZmR3X3NlcnZlcjsKKy0t IEF0dGFjaCBmb3JlaWduIHBhcnRpdGlvbiB0byBwdWJsaXNoZWQgdGFibGUKKy0tIHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNI IFBBUlRJVElPTiBzY2gzLnBhcnQzXzIgRk9SIFZBTFVFUyBGUk9NICgxNSkgVE8gKDIwKTsKKy0t IENoZWNrIHRoZSBwdWJsaXNoZWQgdGFibGVzCitTRUxFQ1QgcHVibmFtZSwgdGFibGVuYW1lIEZS T00gcGdfcHVibGljYXRpb25fdGFibGVzIFdIRVJFIHNjaGVtYW5hbWUgaW4gKCdzY2gzJywgJ3Nj aDQnKSBPUkRFUiBCWSBwdWJuYW1lLCB0YWJsZW5hbWU7CisgcHVibmFtZSB8IHRhYmxlbmFtZSAK Ky0tLS0tLS0tLSstLS0tLS0tLS0tLQorIHB1YjEgICAgfCBwYXJ0MQorIHB1YjIgICAgfCBwYXJ0 MQorIHB1YjMgICAgfCBwYXJ0MQorKDMgcm93cykKKworLS0gQ2FuJ3QgYWx0ZXIgcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QgdG8gdHJ1ZSwgaWYgcHVibGljYXRpb24gYWxyZWFkeSBoYXZlCist LSBmb3JlaWduIHBhcnRpdGlvbgorQUxURVIgUFVCTElDQVRJT04gcHViMSBTRVQgKHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290KTsKK0VSUk9SOiAgY2Fubm90IHNldCBwYXJhbWV0ZXIgInB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290IiB0byB0cnVlIGZvciBwdWJsaWNhdGlvbiAicHViMSIKK0RF VEFJTDogIHBhcnRpdGlvbiB0YWJsZSAidG1haW4iIGluIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEg Zm9yZWlnbiBwYXJ0aXRpb24KK0RST1AgUFVCTElDQVRJT04gcHViMTsKK0RST1AgUFVCTElDQVRJ T04gcHViMjsKK0RST1AgUFVCTElDQVRJT04gcHViMzsKK0RST1AgU0NIRU1BIHNjaDMgQ0FTQ0FE RTsKK0RST1AgU0NIRU1BIHNjaDQgQ0FTQ0FERTsKK0RST1AgU0VSVkVSIGZkd19zZXJ2ZXI7CitE Uk9QIEZPUkVJR04gREFUQSBXUkFQUEVSIHRlc3RfZmR3OwogUkVTRVQgU0VTU0lPTiBBVVRIT1JJ WkFUSU9OOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciwgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyMjsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXJfZHVtbXk7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5kZXggNjgwMDFkZTQwMDAuLjQ5Yzlk OThiNjY4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCkBAIC0xMjIzLDYgKzEy MjMsODcgQEAgRFJPUCBQVUJMSUNBVElPTiBwdWIyOwogRFJPUCBUQUJMRSBnZW5jb2xzOwogCiBS RVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0tIFRlc3Qgd2hlbiBmb3JlaWduIHRhYmxl IGlzIGEgcGFydGl0aW9uIG9mIGEgcGFydGl0aW9uZWQgdGFibGUgb24gd2hpY2gKKy0tIHB1Ymxp Y2F0aW9uIGlzIGNyZWF0ZWQKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NS RUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKK0NSRUFURSBTRVJWRVIgZmR3X3Nl cnZlciBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKKworQ1JFQVRFIFNDSEVNQSBzY2gz OworQ1JFQVRFIFRBQkxFIHNjaDMudG1haW4oaWQgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQp OworQ1JFQVRFIFRBQkxFIHNjaDMucGFydDEgUEFSVElUSU9OIE9GIHNjaDMudG1haW4gRk9SIFZB TFVFUyBGUk9NICgwKSBUTyAoNSk7CitDUkVBVEUgVEFCTEUgc2NoMy5wYXJ0MihpZCBpbnQpIFBB UlRJVElPTiBCWSBSQU5HRShpZCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQyXzEg UEFSVElUSU9OIE9GIHNjaDMucGFydDIgRk9SIFZBTFVFUyBGUk9NICg1KSBUTyAoMTApIFNFUlZF UiBmZHdfc2VydmVyOworQUxURVIgVEFCTEUgc2NoMy50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNj aDMucGFydDIgRk9SIFZBTFVFUyBGUk9NICg1KSBUTyAoMTApOworCistLSBDYW4ndCBjcmVhdGUg cHVibGljYXRpb25zIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlLCBpZiB0 YWJsZQorLS0gaGFzIGEgZm9yZWlnbiBwYXJ0aXRpb24KK0NSRUFURSBQVUJMSUNBVElPTiBwdWIx IEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsK K0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHNjaDMgV0lUSCAo cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9S IEFMTCBUQUJMRVMgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworCistLSBUZXN0 IHdoZW4gYSBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24gdGFibGUgYXMgYSBwYXJ0aXRp b24gaXMgYXR0YWNoZWQKKy0tIHRvIHBhcnRpdGlvbmVkIHRhYmxlIHdoaWNoIGlzIGFscmVhZHkg cHVibGlzaGVkCitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIERFVEFDSCBQQVJUSVRJT04gc2NoMy5w YXJ0MjsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJVEgg KHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRU QUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKTsKKwor LS0gQ2FuJ3QgY3JlYXRlIGZvcmVpZ24gcGFydGl0aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRo CistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKK0NSRUFURSBGT1JFSUdOIFRB QkxFIHNjaDMucGFydDNfMSBQQVJUSVRJT04gT0Ygc2NoMy50bWFpbiBGT1IgVkFMVUVTIEZST00g KDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdfc2VydmVyOworCistLSBDYW4ndCBhdHRhY2ggZm9yZWln biBwYXJ0aXRpb24gdG8gcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290ID0gdHJ1ZQorQ1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5wYXJ0M18yKGlkIGlu dCkgU0VSVkVSIGZkd19zZXJ2ZXI7CitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQQVJU SVRJT04gc2NoMy5wYXJ0M18yIEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgyMCk7CisKK0NSRUFU RSBTQ0hFTUEgc2NoNDsKK0NSRUFURSBUQUJMRSBzY2g0LnRtYWluKGlkIGludCkgUEFSVElUSU9O IEJZIFJBTkdFKGlkKTsKKworLS0gcHVibGljYXRpb24gY3JlYXRlZCB3aXRoIEZPUiBUQUJMRVMg SU4gU0NIRU1BCitEUk9QIFBVQkxJQ0FUSU9OIHB1YjE7CitDUkVBVEUgUFVCTElDQVRJT04gcHVi MSBGT1IgVEFCTEVTIElOIFNDSEVNQSBzY2g0IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290KTsKKworLS0gQ2FuJ3QgY3JlYXRlIGZvcmVpZ24gcGFydGl0aW9uIG9mIHB1Ymxpc2hlZCB0 YWJsZSB3aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKK0NSRUFURSBG T1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJUSVRJT04gT0Ygc2NoNC50bWFpbiBGT1IgVkFM VUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdfc2VydmVyOworCistLSBDYW4ndCBhdHRh Y2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorQUxURVIgVEFCTEUgc2NoNC50bWFpbiBBVFRBQ0gg UEFSVElUSU9OIHNjaDMucGFydDNfMiBGT1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworRFJP UCBQVUJMSUNBVElPTiBwdWIxOworCistLSBUZXN0IHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QgPSBmYWxzZQorLS0gRm9yZWlnbiBwYXJ0aXRpb25zIGFyZSBza2lwcGVkIGJ5IGRlZmF1 bHQKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluOworQ1JFQVRF IFBVQkxJQ0FUSU9OIHB1YjIgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgc2NoMzsKK0NSRUFURSBQVUJM SUNBVElPTiBwdWIzIEZPUiBBTEwgVEFCTEVTOworCistLSBDcmVhdGUgZm9yZWlnbiBwYXJ0aXRp b24gb2YgcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gZmFsc2UKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJUSVRJT04gT0Yg c2NoMy50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdfc2VydmVy OworCistLSBBdHRhY2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVibGlzaGVkIHRhYmxlCistLSBw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCitBTFRFUiBUQUJMRSBzY2gzLnRtYWlu IEFUVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0M18yIEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgy MCk7CisKKy0tIENoZWNrIHRoZSBwdWJsaXNoZWQgdGFibGVzCitTRUxFQ1QgcHVibmFtZSwgdGFi bGVuYW1lIEZST00gcGdfcHVibGljYXRpb25fdGFibGVzIFdIRVJFIHNjaGVtYW5hbWUgaW4gKCdz Y2gzJywgJ3NjaDQnKSBPUkRFUiBCWSBwdWJuYW1lLCB0YWJsZW5hbWU7CisKKy0tIENhbid0IGFs dGVyIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IHRvIHRydWUsIGlmIHB1YmxpY2F0aW9uIGFs cmVhZHkgaGF2ZQorLS0gZm9yZWlnbiBwYXJ0aXRpb24KK0FMVEVSIFBVQkxJQ0FUSU9OIHB1YjEg U0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisKK0RST1AgUFVCTElDQVRJT04gcHVi MTsKK0RST1AgUFVCTElDQVRJT04gcHViMjsKK0RST1AgUFVCTElDQVRJT04gcHViMzsKK0RST1Ag U0NIRU1BIHNjaDMgQ0FTQ0FERTsKK0RST1AgU0NIRU1BIHNjaDQgQ0FTQ0FERTsKK0RST1AgU0VS VkVSIGZkd19zZXJ2ZXI7CitEUk9QIEZPUkVJR04gREFUQSBXUkFQUEVSIHRlc3RfZmR3OworCiBS RVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyLCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlcl9kdW1teTsKLS0gCjIuMzQuMQoK --000000000000cae0a80631134b30--