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 1vH9ji-00FYyz-91 for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Nov 2025 23:49:50 +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 1vH9je-00AyIO-KM for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Nov 2025 23:49: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.94.2) (envelope-from ) id 1vH9je-00AyIG-6x for pgsql-hackers@lists.postgresql.org; Thu, 06 Nov 2025 23:49:46 +0000 Received: from mail-vs1-xe29.google.com ([2607:f8b0:4864:20::e29]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vH9jb-006Odr-1E for pgsql-hackers@postgresql.org; Thu, 06 Nov 2025 23:49:45 +0000 Received: by mail-vs1-xe29.google.com with SMTP id ada2fe7eead31-5d967b67003so131749137.2 for ; Thu, 06 Nov 2025 15:49:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762472981; x=1763077781; darn=postgresql.org; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=JPACIc6cAWNBc2d8KTmgadUK1mlPKwTfWFnObWJfGMA=; b=cTryVIIXnWJJ7h+HELfBEbbvVKQRslWYyDXloc0d+xsCs7jtm3Ga8uTuq2ymkWyFZD +lUhPsMbagKrAX11hbqO0YfEJAxPqj76g31Bt22N3Xav0OMEKEMPsZ88tvmjH7IruBea e4U70Pn1uXJdcL2W/kcPYI8RY1Pn5F+i3ruRsIIvzOYT2hF4CQicXuZfOzWBO8iUSGy5 ubEiaijbohnCxN8o3Guwx4vyJwg8BhMsH3l6y+kjBukvAMZfKYwMhyZaX3MDyir/OY1o LXPhY3iZXsChvupfrMOD/QJdbcLSIkyShFc1f0jehxUUKseMOXkI5/xDKsPkK6PfydSZ oLRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762472981; x=1763077781; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=JPACIc6cAWNBc2d8KTmgadUK1mlPKwTfWFnObWJfGMA=; b=LTTrnIYxrRBYz/YR4c158OO0ucZXHo3sJzULBB+mz62ATQ+bA4eCas5xz69dO291z3 wbK3B+gjudRsCRJ5pKkPonFc+O2m8riEMlhjnwkE/SDud4lFry7jPQ6OwAAqUqY43VU0 d6wdt9PeQOChnQxqVe4oYvNxukfT/n3k+vs1g0XgpTr4ozzrlsT0In/7LWU4qqdbCz5M mTS/qjH7jnGUrdV3NYR/Y7eXYqsbptla9AZJFrmrpdQAFNW17VgITwYfnohr+cqo8EB4 AplEF7cFQWWWNuM1+0iJK7mmVgiC2dJEG4/7Bjtnbr57y9dCHo6+k/5/8IXIwgN+BjEI KP6g== X-Forwarded-Encrypted: i=1; AJvYcCUPTTU0vZwF5/ybRMVeW1ojWq7hTBHB7pH9b7V5D0Ml2GPpkk9W909I2T8eEV1M1m6znc1y3aNlPgeYTJAf@postgresql.org X-Gm-Message-State: AOJu0YxnK/dRmm4ZkdXgRIII52Faq+IHCoee2uny810mQ/wQpz19rAc6 lj0XYE544SnhWVj66TUgERcJAU47fSvquMSy/iEM/c953M/m5PxyzAqJIFuY0Q== X-Gm-Gg: ASbGncuQDU9oacGmNrGID6uSAnbRGM01ayjGfpbJA78aTBdj9CUlIRvIbAVZosplN6I Dvg2gs8+PhBdwq2C6nbPEoVtZdSoCQx46D8vWfPNgvYGdLLmU6oNFFR8VneRBbTiTnxmDYVF+Hk BH6zSi01P7DLgnfD2pMGdvddmTdYRpO21WiiJQNinH4djO0BjD7kQ3oOUyDPvo8cjr8AsaZXfRZ 9yqlvMpTl6gjcgK0wLSQ5zAxd4dnQPsawyxe4VFy5VwYRYVCzmA0YS+9bhNcfOCIQaJVEwTCnUz /2Z71VLIHsX55pxAZpvBPmbKAGRvkcYZoNX/Ln4Q+HfvSRhhfBwRTHHGvkLywpEfW17MdsyioSg CwDkdZ2cstdhnIZnG3zJsm44x9rFENqPU/VzGF7q7J10HKBNObOnVYYdcYtwl50KcV0XIt/q+Hs VOAJL7pBhrFi04INqIlsXN2fw= X-Google-Smtp-Source: AGHT+IE8Xgy0W44DwtRjGTdMcGVG/8vYkhjsSN1JYGoDG9V4qfWQxfgRf8RP0g2Cg4TVEdhlt2zc4A== X-Received: by 2002:a05:6102:30ca:10b0:5db:2301:aa07 with SMTP id ada2fe7eead31-5ddb22c3be8mr446382137.37.1762472980974; Thu, 06 Nov 2025 15:49:40 -0800 (PST) Received: from localhost ([2804:14d:328a:a59c:2547:787e:e735:96d5]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5dda205691csm1662176137.12.2025.11.06.15.49.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 06 Nov 2025 15:49:40 -0800 (PST) Content-Type: multipart/mixed; boundary=4154961385d9cdd4c3af0012e6b3ab7bb39c7893c2cc94850e4d5a7c81c8 Mime-Version: 1.0 Date: Thu, 06 Nov 2025 20:49:37 -0300 Message-Id: Cc: "Tomas Vondra" , Subject: Re: postgres_fdw: Use COPY to speed up batch inserts From: "Matheus Alcantara" To: "Andrew Dunstan" , "jian he" X-Mailer: aerc 0.21.0 References: <5c52f4c7-74fa-4594-8378-53fd49f39329@dunslane.net> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --4154961385d9cdd4c3af0012e6b3ab7bb39c7893c2cc94850e4d5a7c81c8 Content-Type: multipart/alternative; boundary=6eacf62bf4ca7cc05671ba5e031ba6189d2ab701aff04070e0db6da1d73b --6eacf62bf4ca7cc05671ba5e031ba6189d2ab701aff04070e0db6da1d73b Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Fri Oct 31, 2025 at 4:02 PM -03, I wrote: > It's showing a bit complicated to decide at runtime if we should use the > COPY or INSERT for batch insert into a foreign table. Perhaps we could > add a new option on CREATE FOREIGN TABLE to enable this usage or not? We > could document the performance improvements and the limitations so the > user can decide if it should enable or not. > Here is v5 that implement this idea. On this version I've introduced a foreign table and foreign server option "use_copy_for_insert" (I'm open for a better name) that enable the use of the COPY as remote command to execute an INSERT into a foreign table. The COPY can be used if the user enable this option on the foreign table or the foreign server and if the original INSERT statement don't have a RETURNING clause. See the benchmark results: pgbench -n -c 10 -j 10 -t 100 -f bench.sql postgres Master (batch_size =3D 1 with a single row to insert): tps =3D 16000.768037 Master (batch_size =3D 1 with 1000 rows to insert): tps =3D 133.451518 Master (batch_size =3D 100 with 1000 rows to insert): tps =3D 1274.096347 ----------------- Patch(batch_size =3D 1, use_copy_for_insert =3D false with single row to insert) tps =3D 15734.155705 Master (batch_size =3D 1, use_copy_for_insert =3D false with 1000 rows to insert): tps =3D 132.644801 Master (batch_size =3D 100, use_copy_for_insert =3D false with 1000 rows to insert): tps =3D 1245.514591 ----------------- Patch(batch_size =3D 1, use_copy_for_insert =3D true with single row to insert) tps =3D 17604.394057 Master (batch_size =3D 1, use_copy_for_insert =3D true with 1000 rows to insert): tps =3D 88.998804 Master (batch_size =3D 100, use_copy_for_insert =3D true with 1000 rows to insert): tps =3D 2406.009249 ----------------- We can see that when batching inserting with the batch_size configured properly we have a very significant performance improvement and when the "use_copy_for_insert" option is disabled the performance are close compared with master. The problem is when the "batch_size" is 1 (default) and "use_copy_for_insert" is enabled. This is because on this scenario we are sending multiple COPY commands with a single row to the foreign server. One way to fix this would to decide at runtime (at execute_foreign_modify()) if the COPY can be used based on the number of rows being insert. I don't think that I like this option because it would make the EXPLAIN output different when the ANALYZE option is used since during planning time we don't have the number of rows being inserted, so if just EXPLAIN(VERBOSE) is executed we would show the INSERT as remote SQL, and if the ANALYZE is included and we have enough rows to enable the COPY usage, the remote SQL would show the COPY command. Since the new "use_copy_for_insert" option is be disabled by default I think that we could document this limitation and mention the performance improvements when used correctly with the batch_size option. Another option would be to use the COPY command only if the "use_copy_for_insert" is true and also if the "batch_size" is > 1. We would still have the performance issue if the user insert a single row but we would close to less scenarios. The attached 0002 implement this idea. Thoughts? --=20 Matheus Alcantara EDB: http://www.enterprisedb.com --6eacf62bf4ca7cc05671ba5e031ba6189d2ab701aff04070e0db6da1d73b-- --4154961385d9cdd4c3af0012e6b3ab7bb39c7893c2cc94850e4d5a7c81c8 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0001-postgres_fdw-Enable-the-use-of-COPY-to-speed-up-i.patch Content-Type: text/plain; charset=utf-8; name=v5-0001-postgres_fdw-Enable-the-use-of-COPY-to-speed-up-i.patch RnJvbSBkZmZlM2Y4NmRhOTU0NTFjODUyNzdhMTdkZTdmZGEyMDRiNjc4YTIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IEZyaSwgMTAgT2N0IDIwMjUgMTY6MDc6MDggLTAzMDAKU3ViamVjdDogW1BBVENIIHY1IDEv Ml0gcG9zdGdyZXNfZmR3OiBFbmFibGUgdGhlIHVzZSBvZiBDT1BZIHRvIHNwZWVkIHVwCiBpbnNl cnRzCgotLS0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYyAgICAgICAgICAgICAgICB8 ICAzMCArKysKIC4uLi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCAgICB8 IDE2OCArKysrKysrKysrKysrKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L29wdGlvbi5jICAgICAg ICAgICAgICAgICB8ICAgMyArCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAg ICAgICAgICAgfCAxOTEgKysrKysrKysrKysrKysrKystCiBjb250cmliL3Bvc3RncmVzX2Zkdy9w b3N0Z3Jlc19mZHcuaCAgICAgICAgICAgfCAgIDEgKwogY29udHJpYi9wb3N0Z3Jlc19mZHcvc3Fs L3Bvc3RncmVzX2Zkdy5zcWwgICAgIHwgIDc0ICsrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgNDUy IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9z dGdyZXNfZmR3L2RlcGFyc2UuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYwppbmRl eCBmMmZiMDA1MTg0My4uMWNkZjFkOGNjOGQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L2RlcGFyc2UuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMKQEAgLTIy MzYsNiArMjIzNiwzNiBAQCByZWJ1aWxkSW5zZXJ0U3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlv biByZWwsCiAJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIG9yaWdfcXVlcnkgKyB2YWx1ZXNf ZW5kX2xlbik7CiB9CiAKKy8qCisgKiAgQnVpbGQgYSBDT1BZIEZST00gU1RESU4gc3RhdGVtZW50 IHVzaW5nIHRoZSBURVhUIGZvcm1hdAorICovCit2b2lkCitkZXBhcnNlQ29weVNxbChTdHJpbmdJ bmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBMaXN0ICp0YXJnZXRfYXR0cnMpCit7CisJVHVwbGVEZXNj CXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJYm9vbAkJZmlyc3QgPSB0cnVlOwor CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJDT1BZICIpOworCWRlcGFyc2VSZWxhdGlvbihidWYs IHJlbCk7CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIoIik7CisKKwlmb3JlYWNoX2ludChhdHRu dW0sIHRhcmdldF9hdHRycykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURl c2NBdHRyKHR1cGRlc2MsIGF0dG51bSAtIDEpOworCisJCWlmIChhdHRyLT5hdHRnZW5lcmF0ZWQp CisJCQljb250aW51ZTsKKworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsICIsICIpOworCisJCWZpcnN0ID0gZmFsc2U7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhdHRyLT5hdHRuYW1lKSkpOworCX0K KwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIikgRlJPTSBTVERJTiIpOworfQorCiAvKgog ICogZGVwYXJzZSByZW1vdGUgVVBEQVRFIHN0YXRlbWVudAogICoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4IGNkMjgxMjYwNDlkLi5iYzk5 ZTI3OGYwMCAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdy ZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19m ZHcub3V0CkBAIC01MCw2ICs1MCwxOCBAQCBDUkVBVEUgVEFCTEUgIlMgMSIuIlQgNCIgKAogCWMz IHRleHQsCiAJQ09OU1RSQUlOVCB0NF9wa2V5IFBSSU1BUlkgS0VZIChjMSkKICk7CitDUkVBVEUg VEFCTEUgIlMgMSIuIlQgNSIoCisgICAgeCBpbnQKKyk7CitDUkVBVEUgVEFCTEUgIlMgMSIuIlQg NiIoCisgICAgaWQgaW50IG5vdCBudWxsLAorICAgIG5vdGUgdGV4dCwKKyAgICB2YWx1ZSBpbnQg Tk9UIE5VTEwKKyk7CitDUkVBVEUgVEFCTEUgIlMgMSIuIlQgNyIoCisgICAgaWQgaW50LAorICAg IHQgdGV4dAorKTsKIC0tIERpc2FibGUgYXV0b3ZhY3V1bSBmb3IgdGhlc2UgdGFibGVzIHRvIGF2 b2lkIHVuZXhwZWN0ZWQgZWZmZWN0cyBvZiB0aGF0CiBBTFRFUiBUQUJMRSAiUyAxIi4iVCAxIiBT RVQgKGF1dG92YWN1dW1fZW5hYmxlZCA9ICdmYWxzZScpOwogQUxURVIgVEFCTEUgIlMgMSIuIlQg MiIgU0VUIChhdXRvdmFjdXVtX2VuYWJsZWQgPSAnZmFsc2UnKTsKQEAgLTEzMiw2ICsxNDQsMjQg QEAgQ1JFQVRFIEZPUkVJR04gVEFCTEUgZnQ3ICgKIAljMiBpbnQgTk9UIE5VTEwsCiAJYzMgdGV4 dAogKSBTRVJWRVIgbG9vcGJhY2szIE9QVElPTlMgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9u YW1lICdUIDQnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGZ0OCAoCisgICAgeCBpbnQKKykKK1NF UlZFUiBsb29wYmFjaworT1BUSU9OUyAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1Qg NScsIHVzZV9jb3B5X2Zvcl9pbnNlcnQgJ3RydWUnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGZ0 OSAoCisgICAgaWQgaW50IG5vdCBudWxsLAorICAgIG5vdGUgdGV4dCwKKyAgICB2YWx1ZSBpbnQg Tk9UIE5VTEwKKykKK1NFUlZFUiBsb29wYmFjaworT1BUSU9OUyAoc2NoZW1hX25hbWUgJ1MgMScs IHRhYmxlX25hbWUgJ1QgNicsIHVzZV9jb3B5X2Zvcl9pbnNlcnQgJ3RydWUnKTsKK0NSRUFURSBG T1JFSUdOIFRBQkxFIGZ0MTAgKAorICAgIGlkIGludCwKKyAgICB0IHRleHQKKykKK1NFUlZFUiBs b29wYmFjaworT1BUSU9OUyAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgNycsIHVz ZV9jb3B5X2Zvcl9pbnNlcnQgJ3RydWUnKTsKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIHRlc3RzIGZvciB2 YWxpZGF0b3IKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIwNSwxNiArMjM1LDE5IEBAIEFMVEVSIEZPUkVJ R04gVEFCTEUgZnQyIE9QVElPTlMgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDEn KTsKIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjMSBPUFRJT05TIChjb2x1 bW5fbmFtZSAnQyAxJyk7CiBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MiBBTFRFUiBDT0xVTU4gYzEg T1BUSU9OUyAoY29sdW1uX25hbWUgJ0MgMScpOwogXGRldCsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExpc3Qgb2YgZm9yZWlnbiB0YWJsZXMKLSBTY2hlbWEgfCBUYWJsZSB8ICBTZXJ2 ZXIgICB8ICAgICAgICAgICAgICBGRFcgb3B0aW9ucyAgICAgICAgICAgICAgfCBEZXNjcmlwdGlv biAKLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KLSBwdWJsaWMgfCBmdDEgICB8IGxvb3BiYWNr ICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCAxJykgfCAKLSBwdWJsaWMgfCBm dDIgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCAxJykg fCAKLSBwdWJsaWMgfCBmdDQgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFi bGVfbmFtZSAnVCAzJykgfCAKLSBwdWJsaWMgfCBmdDUgICB8IGxvb3BiYWNrICB8IChzY2hlbWFf bmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0JykgfCAKLSBwdWJsaWMgfCBmdDYgICB8IGxvb3Bi YWNrMiB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0JykgfCAKLSBwdWJsaWMg fCBmdDcgICB8IGxvb3BiYWNrMyB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0 JykgfCAKLSg2IHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExpc3Qgb2YgZm9yZWlnbiB0YWJsZXMKKyBTY2hlbWEgfCBUYWJsZSB8ICBTZXJ2ZXIgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZEVyBvcHRpb25zICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgRGVzY3JpcHRpb24gCistLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIHB1YmxpYyB8IGZ0MSAgIHwgbG9vcGJhY2sgIHwgKHNj aGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDEnKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAKKyBwdWJsaWMgfCBmdDEwICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAx JywgdGFibGVfbmFtZSAnVCA3JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScpIHwgCisgcHVi bGljIHwgZnQyICAgfCBsb29wYmFjayAgfCAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUg J1QgMScpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorIHB1YmxpYyB8IGZ0NCAgIHwg bG9vcGJhY2sgIHwgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDMnKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDUgICB8IGxvb3BiYWNrICB8IChz Y2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0JykgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgCisgcHVibGljIHwgZnQ2ICAgfCBsb29wYmFjazIgfCAoc2NoZW1hX25hbWUgJ1Mg MScsIHRhYmxlX25hbWUgJ1QgNCcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorIHB1 YmxpYyB8IGZ0NyAgIHwgbG9vcGJhY2szIHwgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1l ICdUIDQnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDggICB8 IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA1JywgdXNlX2Nv cHlfZm9yX2luc2VydCAndHJ1ZScpIHwgCisgcHVibGljIHwgZnQ5ICAgfCBsb29wYmFjayAgfCAo c2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgNicsIHVzZV9jb3B5X2Zvcl9pbnNlcnQg J3RydWUnKSB8IAorKDkgcm93cykKIAogLS0gVGVzdCB0aGF0IGFsdGVyYXRpb24gb2Ygc2VydmVy IG9wdGlvbnMgY2F1c2VzIHJlY29ubmVjdGlvbgogLS0gUmVtb3RlJ3MgZXJyb3JzIG1pZ2h0IGJl IG5vbi1FbmdsaXNoLCBzbyBoaWRlIHRoZW0gdG8gZW5zdXJlIHN0YWJsZSByZXN1bHRzCkBAIC0x MjY2NSw2ICsxMjY5OCwxMjEgQEAgQU5BTFlaRSBhbmFseXplX2Z0YWJsZTsKIERST1AgRk9SRUlH TiBUQUJMRSBhbmFseXplX2Z0YWJsZTsKIERST1AgVEFCTEUgYW5hbHl6ZV90YWJsZTsKIC0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKy0tIHRlc3QgZm9yIENPUFkgdXNhZ2UgdG8gcGVyZm9ybSBJTlNFUlQncworLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorLS0gVGVzdCB0aGF0IHRhcmdldCBhdHRyIGlzIGNvcnJlY3RseSB1c2VkIHRv IGJ1aWxkIHRoZSBDT1BZIGNvbW1hbmQKK0FMVEVSIEZPUkVJR04gVEFCTEUgZnQ4IERST1AgQ09M VU1OIHg7CitBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0OCBhZGQgQ09MVU1OIHggaW50OworRVhQTEFJ TihBTkFMWVpFLCBWRVJCT1NFLCBDT1NUUyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9GRiwg VElNSU5HIE9GRikKK0lOU0VSVCBJTlRPIGZ0OCBTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCAxMCkgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5zZXJ0IG9uIHB1YmxpYy5mdDggKGFjdHVhbCByb3dzPTAuMDAgbG9vcHM9MSkK KyAgIFJlbW90ZSBTUUw6IENPUFkgIlMgMSIuIlQgNSIoeCkgRlJPTSBTVERJTgorICAgQmF0Y2gg U2l6ZTogMQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJp ZXMgaSAoYWN0dWFsIHJvd3M9MTAuMDAgbG9vcHM9MSkKKyAgICAgICAgIE91dHB1dDogTlVMTDo6 aW50ZWdlciwgaS5pCisgICAgICAgICBGdW5jdGlvbiBDYWxsOiBnZW5lcmF0ZV9zZXJpZXMoMSwg MTApCisoNiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZ0ODsKKyB4ICAKKy0tLS0KKyAgMQorICAy CisgIDMKKyAgNAorICA1CisgIDYKKyAgNworICA4CisgIDkKKyAxMAorKDEwIHJvd3MpCisKKy0t IFRlc3Qgb3V0ZXIgb2Ygb3JkZXIgY29sdW1ucyBhbmQgYmF0Y2hfc2l6ZSB3aXRoIENPUFkKK0FM VEVSIEZPUkVJR04gVEFCTEUgZnQ5IE9QVElPTlMoQUREIGJhdGNoX3NpemUgJzEwJyk7CitFWFBM QUlOKEFOQUxZWkUsIFZFUkJPU0UsIENPU1RTIE9GRiwgU1VNTUFSWSBPRkYsIEJVRkZFUlMgT0ZG LCBUSU1JTkcgT0ZGKSBJTlNFUlQgSU5UTyBmdDkgKGlkLCB2YWx1ZSwgbm90ZSkKK1NFTEVDVCBn LAorICAgICAgIGcgKiAyLAorICAgICAgICdiYXRjaCBpbnNlcnQgdGVzdCBkYXRhJyB8fCBnCitG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMCkgZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5zZXJ0IG9uIHB1YmxpYy5mdDkgKGFjdHVhbCBy b3dzPTAuMDAgbG9vcHM9MSkKKyAgIFJlbW90ZSBTUUw6IENPUFkgIlMgMSIuIlQgNiIoaWQsIG5v dGUsIHZhbHVlKSBGUk9NIFNURElOCisgICBCYXRjaCBTaXplOiAxMAorICAgLT4gIEZ1bmN0aW9u IFNjYW4gb24gcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMgZyAoYWN0dWFsIHJvd3M9MjAuMDAg bG9vcHM9MSkKKyAgICAgICAgIE91dHB1dDogZy5nLCAoJ2JhdGNoIGluc2VydCB0ZXN0IGRhdGEn Ojp0ZXh0IHx8IChnLmcpOjp0ZXh0KSwgKGcuZyAqIDIpCisgICAgICAgICBGdW5jdGlvbiBDYWxs OiBnZW5lcmF0ZV9zZXJpZXMoMSwgMjApCisoNiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZ0OTsK KyBpZCB8ICAgICAgICAgICBub3RlICAgICAgICAgICB8IHZhbHVlIAorLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tCisgIDEgfCBiYXRjaCBpbnNlcnQgdGVzdCBkYXRhMSAg fCAgICAgMgorICAyIHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTIgIHwgICAgIDQKKyAgMyB8IGJh dGNoIGluc2VydCB0ZXN0IGRhdGEzICB8ICAgICA2CisgIDQgfCBiYXRjaCBpbnNlcnQgdGVzdCBk YXRhNCAgfCAgICAgOAorICA1IHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTUgIHwgICAgMTAKKyAg NiB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGE2ICB8ICAgIDEyCisgIDcgfCBiYXRjaCBpbnNlcnQg dGVzdCBkYXRhNyAgfCAgICAxNAorICA4IHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTggIHwgICAg MTYKKyAgOSB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGE5ICB8ICAgIDE4CisgMTAgfCBiYXRjaCBp bnNlcnQgdGVzdCBkYXRhMTAgfCAgICAyMAorIDExIHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTEx IHwgICAgMjIKKyAxMiB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGExMiB8ICAgIDI0CisgMTMgfCBi YXRjaCBpbnNlcnQgdGVzdCBkYXRhMTMgfCAgICAyNgorIDE0IHwgYmF0Y2ggaW5zZXJ0IHRlc3Qg ZGF0YTE0IHwgICAgMjgKKyAxNSB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGExNSB8ICAgIDMwCisg MTYgfCBiYXRjaCBpbnNlcnQgdGVzdCBkYXRhMTYgfCAgICAzMgorIDE3IHwgYmF0Y2ggaW5zZXJ0 IHRlc3QgZGF0YTE3IHwgICAgMzQKKyAxOCB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGExOCB8ICAg IDM2CisgMTkgfCBiYXRjaCBpbnNlcnQgdGVzdCBkYXRhMTkgfCAgICAzOAorIDIwIHwgYmF0Y2gg aW5zZXJ0IHRlc3QgZGF0YTIwIHwgICAgNDAKKygyMCByb3dzKQorCistLSBUZXN0IGJ1ZmZlciBs aW1pdCBvZiBjb3B5IGRhdGEgb24gQ09QWUJVRlNJWgorSU5TRVJUIElOVE8gZnQxMCAoaWQsIHQp CitTRUxFQ1QgcywgcmVwZWF0KG1kNShzOjp0ZXh0KSwgMTAwMDApIGZyb20gZ2VuZXJhdGVfc2Vy aWVzKDEwMCwgMTAzKSBzOworU0VMRUNUIENPVU5UKCopIEZST00gZnQxMDsKKyBjb3VudCAKKy0t LS0tLS0KKyAgICAgNAorKDEgcm93KQorCistLSBEaXNhYmxlIHRoZSB1c2VfY29weV9mb3JfaW5z ZXJ0IHRhYmxlIG9wdGlvbiBhbmQgY2hlY2sgdGhhdCB0aGUgSU5TRVJUIGlzCistLSB1c2VkCitB TFRFUiBGT1JFSUdOIFRBQkxFIGZ0OCBPUFRJT05TKERST1AgdXNlX2NvcHlfZm9yX2luc2VydCk7 CitFWFBMQUlOKFZFUkJPU0UsIENPU1RTIE9GRiwgU1VNTUFSWSBPRkYsIEJVRkZFUlMgT0ZGLCBU SU1JTkcgT0ZGKQorSU5TRVJUIElOVE8gZnQ4IFZBTFVFUyAoMTApOworICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbnNlcnQgb24gcHVibGlj LmZ0OAorICAgUmVtb3RlIFNRTDogSU5TRVJUIElOVE8gIlMgMSIuIlQgNSIoeCkgVkFMVUVTICgk MSkKKyAgIEJhdGNoIFNpemU6IDEKKyAgIC0+ICBSZXN1bHQKKyAgICAgICAgIE91dHB1dDogTlVM TDo6aW50ZWdlciwgMTAKKyg1IHJvd3MpCisKKy0tIEVuYWJsZSB0aGUgdXNlX2NvcHlfZm9yX2lu c2VydCBmb3IgdGhlIGZvcmVpZ24gc2VydmVyIGFuZCBjaGVjayB0aGF0IHRoZQorLS0gQ09QWSBp cyB1c2VkCitBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyhBREQgdXNlX2NvcHlfZm9yX2lu c2VydCAndHJ1ZScpOworRVhQTEFJTihWRVJCT1NFLCBDT1NUUyBPRkYsIFNVTU1BUlkgT0ZGLCBC VUZGRVJTIE9GRiwgVElNSU5HIE9GRikKK0lOU0VSVCBJTlRPIGZ0OCBWQUxVRVMgKDIwKTsKKyAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbnNlcnQgb24gcHVibGljLmZ0 OAorICAgUmVtb3RlIFNRTDogQ09QWSAiUyAxIi4iVCA1Iih4KSBGUk9NIFNURElOCisgICBCYXRj aCBTaXplOiAxCisgICAtPiAgUmVzdWx0CisgICAgICAgICBPdXRwdXQ6IE5VTEw6OmludGVnZXIs IDIwCisoNSByb3dzKQorCistLSBSZXNldCBzdGF0ZQorQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9Q VElPTlMoRFJPUCB1c2VfY29weV9mb3JfaW5zZXJ0KTsKK0FMVEVSIEZPUkVJR04gVEFCTEUgZnQ4 IE9QVElPTlMoQUREIHVzZV9jb3B5X2Zvcl9pbnNlcnQgJ3RydWUnKTsKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K IC0tIHRlc3QgZm9yIHBvc3RncmVzX2Zkd19nZXRfY29ubmVjdGlvbnMgZnVuY3Rpb24gd2l0aCBj aGVja19jb25uID0gdHJ1ZQogLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0gRGlzYWJsZSBkZWJ1Z19kaXNjYXJk X2NhY2hlcyBpbiBvcmRlciB0byBtYW5hZ2UgcmVtb3RlIGNvbm5lY3Rpb25zCmRpZmYgLS1naXQg YS9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L29w dGlvbi5jCmluZGV4IDA0Nzg4YjdlOGIzLi5kZTBmNTkzMzJjMyAxMDA2NDQKLS0tIGEvY29udHJp Yi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9u LmMKQEAgLTI2Myw2ICsyNjMsOSBAQCBJbml0UGdGZHdPcHRpb25zKHZvaWQpCiAJCS8qIGJhdGNo X3NpemUgaXMgYXZhaWxhYmxlIG9uIGJvdGggc2VydmVyIGFuZCB0YWJsZSAqLwogCQl7ImJhdGNo X3NpemUiLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9LAogCQl7ImJhdGNoX3NpemUi LCBGb3JlaWduVGFibGVSZWxhdGlvbklkLCBmYWxzZX0sCisJCS8qIHVzZV9jb3B5X2Zvcl9pbnNl cnQgaXMgYXZhaWxhYmxlIG9uIGJvdGggc2VydmVyIGFuZCB0YWJsZSAqLworCQl7InVzZV9jb3B5 X2Zvcl9pbnNlcnQiLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9LAorCQl7InVzZV9j b3B5X2Zvcl9pbnNlcnQiLCBGb3JlaWduVGFibGVSZWxhdGlvbklkLCBmYWxzZX0sCiAJCS8qIGFz eW5jX2NhcGFibGUgaXMgYXZhaWxhYmxlIG9uIGJvdGggc2VydmVyIGFuZCB0YWJsZSAqLwogCQl7 ImFzeW5jX2NhcGFibGUiLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9LAogCQl7ImFz eW5jX2NhcGFibGUiLCBGb3JlaWduVGFibGVSZWxhdGlvbklkLCBmYWxzZX0sCmRpZmYgLS1naXQg YS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IDA2YjUyYzY1MzAwLi43N2VmZmRmZmViMiAxMDA2NDQK LS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9w b3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTYzLDYgKzYzLDkgQEAgUEdfTU9EVUxFX01B R0lDX0VYVCgKIC8qIElmIG5vIHJlbW90ZSBlc3RpbWF0ZXMsIGFzc3VtZSBhIHNvcnQgY29zdHMg MjAlIGV4dHJhICovCiAjZGVmaW5lIERFRkFVTFRfRkRXX1NPUlRfTVVMVElQTElFUiAxLjIKIAor LyogQnVmZmVyIHNpemUgdG8gc2VuZCBDT1BZIElOIGRhdGEqLworI2RlZmluZSBDT1BZQlVGU0la IDgxOTIKKwogLyoKICAqIEluZGV4ZXMgb2YgRkRXLXByaXZhdGUgaW5mb3JtYXRpb24gc3RvcmVk IGluIGZkd19wcml2YXRlIGxpc3RzLgogICoKQEAgLTE5Nyw2ICsyMDAsNyBAQCB0eXBlZGVmIHN0 cnVjdCBQZ0Zkd01vZGlmeVN0YXRlCiAJaW50CQkJYmF0Y2hfc2l6ZTsJCS8qIHZhbHVlIG9mIEZE VyBvcHRpb24gImJhdGNoX3NpemUiICovCiAJYm9vbAkJaGFzX3JldHVybmluZzsJLyogaXMgdGhl cmUgYSBSRVRVUk5JTkcgY2xhdXNlPyAqLwogCUxpc3QJICAgKnJldHJpZXZlZF9hdHRyczsJLyog YXR0ciBudW1iZXJzIHJldHJpZXZlZCBieSBSRVRVUk5JTkcgKi8KKwlib29sCQl1c2VfY29weV9m b3JfaW5zZXJ0OwkvKiBpcyB0aGUgQ09QWSBlbmFibGVkIGZvciBJTlNFUlQncz8gKi8KIAogCS8q IGluZm8gYWJvdXQgcGFyYW1ldGVycyBmb3IgcHJlcGFyZWQgc3RhdGVtZW50ICovCiAJQXR0ck51 bWJlcgljdGlkQXR0bm87CQkvKiBhdHRudW0gb2YgaW5wdXQgcmVzanVuayBjdGlkIGNvbHVtbiAq LwpAQCAtNTQ1LDYgKzU0OSwxMCBAQCBzdGF0aWMgdm9pZCBtZXJnZV9mZHdfb3B0aW9ucyhQZ0Zk d1JlbGF0aW9uSW5mbyAqZnBpbmZvLAogCQkJCQkJCSAgY29uc3QgUGdGZHdSZWxhdGlvbkluZm8g KmZwaW5mb19vLAogCQkJCQkJCSAgY29uc3QgUGdGZHdSZWxhdGlvbkluZm8gKmZwaW5mb19pKTsK IHN0YXRpYyBpbnQJZ2V0X2JhdGNoX3NpemVfb3B0aW9uKFJlbGF0aW9uIHJlbCk7CitzdGF0aWMg Ym9vbCBnZXRfdXNlX2NvcHlfZm9yX2luc2VydChSZWxhdGlvbiByZWwpOworc3RhdGljIFR1cGxl VGFibGVTbG90ICoqZXhlY3V0ZV9mb3JlaWduX2luc2VydF91c2luZ19jb3B5KFBnRmR3TW9kaWZ5 U3RhdGUgKmZtc3RhdGUsCisJCQkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKipzbG90cywK KwkJCQkJCQkJCQkJCQkJICBpbnQgKm51bVNsb3RzKTsKIAogCiAvKgpAQCAtMTc4OCw2ICsxNzk2 LDcgQEAgcG9zdGdyZXNQbGFuRm9yZWlnbk1vZGlmeShQbGFubmVySW5mbyAqcm9vdCwKIAlMaXN0 CSAgICpyZXRyaWV2ZWRfYXR0cnMgPSBOSUw7CiAJYm9vbAkJZG9Ob3RoaW5nID0gZmFsc2U7CiAJ aW50CQkJdmFsdWVzX2VuZF9sZW4gPSAtMTsKKwlib29sCQl1c2VfY29weV9mb3JfaW5zZXJ0ID0g ZmFsc2U7CiAKIAlpbml0U3RyaW5nSW5mbygmc3FsKTsKIApAQCAtMTg2NywxNyArMTg3NiwyNSBA QCBwb3N0Z3Jlc1BsYW5Gb3JlaWduTW9kaWZ5KFBsYW5uZXJJbmZvICpyb290LAogCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBPTiBDT05GTElDVCBzcGVjaWZpY2F0aW9uOiAlZCIsCiAJCQkgKGlu dCkgcGxhbi0+b25Db25mbGljdEFjdGlvbik7CiAKKwlpZiAob3BlcmF0aW9uID09IENNRF9JTlNF UlQgJiYgcGxhbi0+cmV0dXJuaW5nTGlzdHMgPT0gTlVMTCkKKwkJdXNlX2NvcHlfZm9yX2luc2Vy dCA9IGdldF91c2VfY29weV9mb3JfaW5zZXJ0KHJlbCk7CisKIAkvKgogCSAqIENvbnN0cnVjdCB0 aGUgU1FMIGNvbW1hbmQgc3RyaW5nLgogCSAqLwogCXN3aXRjaCAob3BlcmF0aW9uKQogCXsKIAkJ Y2FzZSBDTURfSU5TRVJUOgotCQkJZGVwYXJzZUluc2VydFNxbCgmc3FsLCBydGUsIHJlc3VsdFJl bGF0aW9uLCByZWwsCi0JCQkJCQkJIHRhcmdldEF0dHJzLCBkb05vdGhpbmcsCi0JCQkJCQkJIHdp dGhDaGVja09wdGlvbkxpc3QsIHJldHVybmluZ0xpc3QsCi0JCQkJCQkJICZyZXRyaWV2ZWRfYXR0 cnMsICZ2YWx1ZXNfZW5kX2xlbik7Ci0JCQlicmVhazsKKwkJCXsKKwkJCQlpZiAodXNlX2NvcHlf Zm9yX2luc2VydCkKKwkJCQkJZGVwYXJzZUNvcHlTcWwoJnNxbCwgcmVsLCB0YXJnZXRBdHRycyk7 CisJCQkJZWxzZQorCQkJCQlkZXBhcnNlSW5zZXJ0U3FsKCZzcWwsIHJ0ZSwgcmVzdWx0UmVsYXRp b24sIHJlbCwKKwkJCQkJCQkJCSB0YXJnZXRBdHRycywgZG9Ob3RoaW5nLAorCQkJCQkJCQkJIHdp dGhDaGVja09wdGlvbkxpc3QsIHJldHVybmluZ0xpc3QsCisJCQkJCQkJCQkgJnJldHJpZXZlZF9h dHRycywgJnZhbHVlc19lbmRfbGVuKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBDTURfVVBE QVRFOgogCQkJZGVwYXJzZVVwZGF0ZVNxbCgmc3FsLCBydGUsIHJlc3VsdFJlbGF0aW9uLCByZWws CiAJCQkJCQkJIHRhcmdldEF0dHJzLApAQCAtNDA1OCw2ICs0MDc1LDkgQEAgY3JlYXRlX2ZvcmVp Z25fbW9kaWZ5KEVTdGF0ZSAqZXN0YXRlLAogCWlmIChvcGVyYXRpb24gPT0gQ01EX0lOU0VSVCkK IAkJZm1zdGF0ZS0+YmF0Y2hfc2l6ZSA9IGdldF9iYXRjaF9zaXplX29wdGlvbihyZWwpOwogCisJ aWYgKG9wZXJhdGlvbiA9PSBDTURfSU5TRVJUICYmICFmbXN0YXRlLT5oYXNfcmV0dXJuaW5nKQor CQlmbXN0YXRlLT51c2VfY29weV9mb3JfaW5zZXJ0ID0gZ2V0X3VzZV9jb3B5X2Zvcl9pbnNlcnQo cmVsKTsKKwogCWZtc3RhdGUtPm51bV9zbG90cyA9IDE7CiAKIAkvKiBJbml0aWFsaXplIGF1eGls aWFyeSBzdGF0ZSAqLwpAQCAtNDA2Niw2ICs0MDg2LDUwIEBAIGNyZWF0ZV9mb3JlaWduX21vZGlm eShFU3RhdGUgKmVzdGF0ZSwKIAlyZXR1cm4gZm1zdGF0ZTsKIH0KIAorLyoKKyAqICBXcml0ZSB0 YXJnZXQgYXR0cmlidXRlIHZhbHVlcyBmcm9tIGZtc3RhdGUgaW50byBidWYgYnVmZmVyIHRvIGJl IHNlbnQgYXMKKyAqICBDT1BZIEZST00gU1RESU4gZGF0YQorICovCitzdGF0aWMgdm9pZAorY29u dmVydF9zbG90X3RvX2NvcHlfdGV4dChTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCSAgUGdGZHdNb2Rp ZnlTdGF0ZSAqZm1zdGF0ZSwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJVHVw bGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKGZtc3RhdGUtPnJlbCk7CisJYm9vbAkJ Zmlyc3QgPSB0cnVlOworCWludAkJCWkgPSAwOworCisJZm9yZWFjaF9pbnQoYXR0bnVtLCBmbXN0 YXRlLT50YXJnZXRfYXR0cnMpCisJeworCQlDb21wYWN0QXR0cmlidXRlICphdHRyID0gVHVwbGVE ZXNjQ29tcGFjdEF0dHIodHVwZGVzYywgYXR0bnVtIC0gMSk7CisJCURhdHVtCQlkYXR1bTsKKwkJ Ym9vbAkJaXNudWxsOworCisJCS8qIElnbm9yZSBnZW5lcmF0ZWQgY29sdW1uczsgdGhleSBhcmUg c2V0IHRvIERFRkFVTFQgKi8KKwkJaWYgKGF0dHItPmF0dGdlbmVyYXRlZCkKKwkJCWNvbnRpbnVl OworCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgJ1x0 Jyk7CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJZGF0dW0gPSBzbG90X2dldGF0dHIoc2xvdCwgYXR0 bnVtLCAmaXNudWxsKTsKKworCQlpZiAoaXNudWxsKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsICJcXE4iKTsKKwkJZWxzZQorCQl7CisJCQljb25zdCBjaGFyICp2YWx1ZSA9IE91dHB1 dEZ1bmN0aW9uQ2FsbCgmZm1zdGF0ZS0+cF9mbGluZm9baV0sCisJCQkJCQkJCQkJCQkgICBkYXR1 bSk7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCB2YWx1ZSk7CisJCX0KKwkJaSsr OworCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAnXG4nKTsKK30KKwogLyoK ICAqIGV4ZWN1dGVfZm9yZWlnbl9tb2RpZnkKICAqCQlQZXJmb3JtIGZvcmVpZ24tdGFibGUgbW9k aWZpY2F0aW9uIGFzIHJlcXVpcmVkLCBhbmQgZmV0Y2ggUkVUVVJOSU5HCkBAIC00MDk3LDYgKzQx NjEsMTQgQEAgZXhlY3V0ZV9mb3JlaWduX21vZGlmeShFU3RhdGUgKmVzdGF0ZSwKIAlpZiAoZm1z dGF0ZS0+Y29ubl9zdGF0ZS0+cGVuZGluZ0FyZXEpCiAJCXByb2Nlc3NfcGVuZGluZ19yZXF1ZXN0 KGZtc3RhdGUtPmNvbm5fc3RhdGUtPnBlbmRpbmdBcmVxKTsKIAorCS8qIENoZWNrIGlmIHRoZSBD T1BZIGNvbW1hbmQgaXMgZW5hYmxlZCB0byB1c2UgZm9yIElOU0VSVCdzICovCisJaWYgKG9wZXJh dGlvbiA9PSBDTURfSU5TRVJUICYmIGZtc3RhdGUtPnVzZV9jb3B5X2Zvcl9pbnNlcnQpCisJewor CQkvKiBDT1BZIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCBJTlNFUlQgd2l0aG91dCBSRVRVUk5J TkcgY2xhdXNlLiAqLworCQlBc3NlcnQoIWZtc3RhdGUtPmhhc19yZXR1cm5pbmcpOworCQlyZXR1 cm4gZXhlY3V0ZV9mb3JlaWduX2luc2VydF91c2luZ19jb3B5KGZtc3RhdGUsIHNsb3RzLCBudW1T bG90cyk7CisJfQorCiAJLyoKIAkgKiBJZiB0aGUgZXhpc3RpbmcgcXVlcnkgd2FzIGRlcGFyc2Vk IGFuZCBwcmVwYXJlZCBmb3IgYSBkaWZmZXJlbnQgbnVtYmVyCiAJICogb2Ygcm93cywgcmVidWls ZCBpdCBmb3IgdGhlIHByb3BlciBudW1iZXIuCkBAIC03ODg2LDMgKzc5NTgsMTEyIEBAIGdldF9i YXRjaF9zaXplX29wdGlvbihSZWxhdGlvbiByZWwpCiAKIAlyZXR1cm4gYmF0Y2hfc2l6ZTsKIH0K KworLyoKKyAqIERldGVybWluZSBpZiB0aGUgdXNhZ2Ugb2YgdGhlIENPUFkgY29tbWFuZCB0byBl eGVjdXRlIGEgSU5TRVJUIGludG8gYSBmb3JlaWduCisgKiB0YWJsZSBpcyBlbmFibGVkLiBUaGUg b3B0aW9uIHNwZWNpZmllZCBmb3IgYSB0YWJsZSBoYXMgcHJlY2VkZW5jZS4KKyAqLworc3RhdGlj IGJvb2wKK2dldF91c2VfY29weV9mb3JfaW5zZXJ0KFJlbGF0aW9uIHJlbCkKK3sKKwlPaWQJCQlm b3JlaWdudGFibGVpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwlMaXN0CSAgICpvcHRpb25z ID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCUZvcmVpZ25UYWJsZSAqdGFibGU7CisJRm9yZWln blNlcnZlciAqc2VydmVyOworCWJvb2wJCWVuYWJsZV9iYXRjaF93aXRoX2NvcHkgPSBmYWxzZTsK KworCS8qCisJICogTG9hZCBvcHRpb25zIGZvciB0YWJsZSBhbmQgc2VydmVyLiBXZSBhcHBlbmQg c2VydmVyIG9wdGlvbnMgYWZ0ZXIgdGFibGUKKwkgKiBvcHRpb25zLCBiZWNhdXNlIHRhYmxlIG9w dGlvbnMgdGFrZSBwcmVjZWRlbmNlLgorCSAqLworCXRhYmxlID0gR2V0Rm9yZWlnblRhYmxlKGZv cmVpZ250YWJsZWlkKTsKKwlzZXJ2ZXIgPSBHZXRGb3JlaWduU2VydmVyKHRhYmxlLT5zZXJ2ZXJp ZCk7CisKKwlvcHRpb25zID0gbGlzdF9jb25jYXQob3B0aW9ucywgdGFibGUtPm9wdGlvbnMpOwor CW9wdGlvbnMgPSBsaXN0X2NvbmNhdChvcHRpb25zLCBzZXJ2ZXItPm9wdGlvbnMpOworCisJLyog U2VlIGlmIGVpdGhlciB0YWJsZSBvciBzZXJ2ZXIgc3BlY2lmaWVzIGVuYWJsZV9iYXRjaF93aXRo X2NvcHkuICovCisJZm9yZWFjaChsYywgb3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRlZiA9 IChEZWZFbGVtICopIGxmaXJzdChsYyk7CisKKwkJaWYgKHN0cmNtcChkZWYtPmRlZm5hbWUsICJ1 c2VfY29weV9mb3JfaW5zZXJ0IikgPT0gMCkKKwkJeworCQkJKHZvaWQpIHBhcnNlX2Jvb2woZGVm R2V0U3RyaW5nKGRlZiksICZlbmFibGVfYmF0Y2hfd2l0aF9jb3B5KTsKKwkJCWJyZWFrOworCQl9 CisJfQorCXJldHVybiBlbmFibGVfYmF0Y2hfd2l0aF9jb3B5OworfQorCisvKiBFeGVjdXRlIGFu IGluc2VydCBpbnRvIGEgZm9yZWlnbiB0YWJsZSB1c2luZyB0aGUgQ09QWSBjb21tYW5kICovCitz dGF0aWMgVHVwbGVUYWJsZVNsb3QgKioKK2V4ZWN1dGVfZm9yZWlnbl9pbnNlcnRfdXNpbmdfY29w eShQZ0Zkd01vZGlmeVN0YXRlICpmbXN0YXRlLAorCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICoq c2xvdHMsCisJCQkJCQkJCSAgaW50ICpudW1TbG90cykKK3sKKwlQR3Jlc3VsdCAgICpyZXM7CisJ U3RyaW5nSW5mb0RhdGEgY29weV9kYXRhOworCWludAkJCW5fcm93czsKKwlpbnQJCQlpOworCisJ LyogU2VuZCBDT1BZIGNvbW1hbmQgKi8KKwlpZiAoIVBRc2VuZFF1ZXJ5KGZtc3RhdGUtPmNvbm4s IGZtc3RhdGUtPnF1ZXJ5KSkKKwkJcGdmZHdfcmVwb3J0X2Vycm9yKE5VTEwsIGZtc3RhdGUtPmNv bm4sIGZtc3RhdGUtPnF1ZXJ5KTsKKworCS8qIGdldCB0aGUgQ09QWSByZXN1bHQgKi8KKwlyZXMg PSBwZ2Zkd19nZXRfcmVzdWx0KGZtc3RhdGUtPmNvbm4pOworCWlmIChQUXJlc3VsdFN0YXR1cyhy ZXMpICE9IFBHUkVTX0NPUFlfSU4pCisJCXBnZmR3X3JlcG9ydF9lcnJvcihyZXMsIGZtc3RhdGUt PmNvbm4sIGZtc3RhdGUtPnF1ZXJ5KTsKKworCS8qIENvbnZlcnQgdGhlIFR1cGxlVGFibGVTbG90 IGRhdGEgaW50byBhIFRFWFQtZm9ybWF0dGVkIGxpbmUgKi8KKwlpbml0U3RyaW5nSW5mbygmY29w eV9kYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgKm51bVNsb3RzOyBpKyspCisJeworCQljb252ZXJ0 X3Nsb3RfdG9fY29weV90ZXh0KCZjb3B5X2RhdGEsIGZtc3RhdGUsIHNsb3RzW2ldKTsKKworCQkv KgorCQkgKiBTZW5kIGluaXRpYWwgQ09QWSBkYXRhIGlmIHRoZSBidWZmZXIgcmVhY2ggdGhlIGxp bWl0IHRvIGF2b2lkIGxhcmdlCisJCSAqIG1lbW9yeSB1c2FnZS4KKwkJICovCisJCWlmIChjb3B5 X2RhdGEubGVuID49IENPUFlCVUZTSVopCisJCXsKKwkJCWlmIChQUXB1dENvcHlEYXRhKGZtc3Rh dGUtPmNvbm4sIGNvcHlfZGF0YS5kYXRhLCBjb3B5X2RhdGEubGVuKSA8PSAwKQorCQkJCXBnZmR3 X3JlcG9ydF9lcnJvcihOVUxMLCBmbXN0YXRlLT5jb25uLCBmbXN0YXRlLT5xdWVyeSk7CisJCQly ZXNldFN0cmluZ0luZm8oJmNvcHlfZGF0YSk7CisJCX0KKwl9CisKKwkvKiBTZW5kIHRoZSByZW1h aW5pbmcgQ09QWSBkYXRhICovCisJaWYgKGNvcHlfZGF0YS5sZW4gPiAwKQorCXsKKwkJaWYgKFBR cHV0Q29weURhdGEoZm1zdGF0ZS0+Y29ubiwgY29weV9kYXRhLmRhdGEsIGNvcHlfZGF0YS5sZW4p IDw9IDApCisJCQlwZ2Zkd19yZXBvcnRfZXJyb3IoTlVMTCwgZm1zdGF0ZS0+Y29ubiwgZm1zdGF0 ZS0+cXVlcnkpOworCX0KKworCS8qIEVuZCB0aGUgQ09QWSBvcGVyYXRpb24gKi8KKwlpZiAoUFFw dXRDb3B5RW5kKGZtc3RhdGUtPmNvbm4sIE5VTEwpIDwgMCB8fCBQUWZsdXNoKGZtc3RhdGUtPmNv bm4pKQorCQlwZ2Zkd19yZXBvcnRfZXJyb3IoTlVMTCwgZm1zdGF0ZS0+Y29ubiwgZm1zdGF0ZS0+ cXVlcnkpOworCisJLyoKKwkgKiBHZXQgdGhlIHJlc3VsdCwgYW5kIGNoZWNrIGZvciBzdWNjZXNz LgorCSAqLworCXJlcyA9IHBnZmR3X2dldF9yZXN1bHQoZm1zdGF0ZS0+Y29ubik7CisJaWYgKFBR cmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdmZHdfcmVwb3J0X2Vy cm9yKHJlcywgZm1zdGF0ZS0+Y29ubiwgZm1zdGF0ZS0+cXVlcnkpOworCisJbl9yb3dzID0gYXRv aShQUWNtZFR1cGxlcyhyZXMpKTsKKworCS8qIEFuZCBjbGVhbiB1cCAqLworCVBRY2xlYXIocmVz KTsKKworCU1lbW9yeUNvbnRleHRSZXNldChmbXN0YXRlLT50ZW1wX2N4dCk7CisKKwkqbnVtU2xv dHMgPSBuX3Jvd3M7CisKKwkvKgorCSAqIFJldHVybiBOVUxMIGlmIG5vdGhpbmcgd2FzIGluc2Vy dGVkIG9uIHRoZSByZW1vdGUgZW5kCisJICovCisJcmV0dXJuIChuX3Jvd3MgPiAwKSA/IHNsb3Rz IDogTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zk dy5oIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmgKaW5kZXggZTY5NzM1Mjk4 ZDcuLmFhNTRkNmJiYTUzIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl c19mZHcuaAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaApAQCAtMjA0 LDYgKzIwNCw3IEBAIGV4dGVybiB2b2lkIHJlYnVpbGRJbnNlcnRTcWwoU3RyaW5nSW5mbyBidWYs IFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkgY2hhciAqb3JpZ19xdWVyeSwgTGlzdCAqdGFyZ2V0X2F0 dHJzLAogCQkJCQkJCSBpbnQgdmFsdWVzX2VuZF9sZW4sIGludCBudW1fcGFyYW1zLAogCQkJCQkJ CSBpbnQgbnVtX3Jvd3MpOworZXh0ZXJuIHZvaWQgZGVwYXJzZUNvcHlTcWwoU3RyaW5nSW5mbyBi dWYsIFJlbGF0aW9uIHJlbCwgTGlzdCAqdGFyZ2V0X2F0dHJzKTsKIGV4dGVybiB2b2lkIGRlcGFy c2VVcGRhdGVTcWwoU3RyaW5nSW5mbyBidWYsIFJhbmdlVGJsRW50cnkgKnJ0ZSwKIAkJCQkJCQkg SW5kZXggcnRpbmRleCwgUmVsYXRpb24gcmVsLAogCQkJCQkJCSBMaXN0ICp0YXJnZXRBdHRycywK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsIGIv Y29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5kZXggOWE4ZjllMjgx MzUuLjBkMjliOWQ5YmFlIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9z dGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3 LnNxbApAQCAtNTQsNiArNTQsMTggQEAgQ1JFQVRFIFRBQkxFICJTIDEiLiJUIDQiICgKIAljMyB0 ZXh0LAogCUNPTlNUUkFJTlQgdDRfcGtleSBQUklNQVJZIEtFWSAoYzEpCiApOworQ1JFQVRFIFRB QkxFICJTIDEiLiJUIDUiKAorICAgIHggaW50CispOworQ1JFQVRFIFRBQkxFICJTIDEiLiJUIDYi KAorICAgIGlkIGludCBub3QgbnVsbCwKKyAgICBub3RlIHRleHQsCisgICAgdmFsdWUgaW50IE5P VCBOVUxMCispOworQ1JFQVRFIFRBQkxFICJTIDEiLiJUIDciKAorICAgIGlkIGludCwKKyAgICB0 IHRleHQKKyk7CiAKIC0tIERpc2FibGUgYXV0b3ZhY3V1bSBmb3IgdGhlc2UgdGFibGVzIHRvIGF2 b2lkIHVuZXhwZWN0ZWQgZWZmZWN0cyBvZiB0aGF0CiBBTFRFUiBUQUJMRSAiUyAxIi4iVCAxIiBT RVQgKGF1dG92YWN1dW1fZW5hYmxlZCA9ICdmYWxzZScpOwpAQCAtMTQ2LDYgKzE1OCwyNyBAQCBD UkVBVEUgRk9SRUlHTiBUQUJMRSBmdDcgKAogCWMzIHRleHQKICkgU0VSVkVSIGxvb3BiYWNrMyBP UFRJT05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0Jyk7CiAKK0NSRUFURSBG T1JFSUdOIFRBQkxFIGZ0OCAoCisgICAgeCBpbnQKKykKK1NFUlZFUiBsb29wYmFjaworT1BUSU9O UyAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgNScsIHVzZV9jb3B5X2Zvcl9pbnNl cnQgJ3RydWUnKTsKKworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZnQ5ICgKKyAgICBpZCBpbnQgbm90 IG51bGwsCisgICAgbm90ZSB0ZXh0LAorICAgIHZhbHVlIGludCBOT1QgTlVMTAorKQorU0VSVkVS IGxvb3BiYWNrCitPUFRJT05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA2Jywg dXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScpOworCitDUkVBVEUgRk9SRUlHTiBUQUJMRSBmdDEw ICgKKyAgICBpZCBpbnQsCisgICAgdCB0ZXh0CispCitTRVJWRVIgbG9vcGJhY2sKK09QVElPTlMg KHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDcnLCB1c2VfY29weV9mb3JfaW5zZXJ0 ICd0cnVlJyk7CisKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIHRlc3RzIGZvciB2YWxpZGF0b3IKIC0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KQEAgLTQzNzksNiArNDQxMiw0NyBAQCBBTkFMWVpFIGFuYWx5emVfZnRhYmxlOwog RFJPUCBGT1JFSUdOIFRBQkxFIGFuYWx5emVfZnRhYmxlOwogRFJPUCBUQUJMRSBhbmFseXplX3Rh YmxlOwogCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CistLSB0ZXN0IGZvciBDT1BZIHVzYWdlIHRvIHBlcmZvcm0g SU5TRVJUJ3MKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0gVGVzdCB0aGF0IHRhcmdldCBhdHRyIGlzIGNv cnJlY3RseSB1c2VkIHRvIGJ1aWxkIHRoZSBDT1BZIGNvbW1hbmQKK0FMVEVSIEZPUkVJR04gVEFC TEUgZnQ4IERST1AgQ09MVU1OIHg7CitBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0OCBhZGQgQ09MVU1O IHggaW50OworRVhQTEFJTihBTkFMWVpFLCBWRVJCT1NFLCBDT1NUUyBPRkYsIFNVTU1BUlkgT0ZG LCBCVUZGRVJTIE9GRiwgVElNSU5HIE9GRikKK0lOU0VSVCBJTlRPIGZ0OCBTRUxFQ1QgKiBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMCkgaTsKK1NFTEVDVCAqIEZST00gZnQ4OworCistLSBUZXN0 IG91dGVyIG9mIG9yZGVyIGNvbHVtbnMgYW5kIGJhdGNoX3NpemUgd2l0aCBDT1BZCitBTFRFUiBG T1JFSUdOIFRBQkxFIGZ0OSBPUFRJT05TKEFERCBiYXRjaF9zaXplICcxMCcpOworRVhQTEFJTihB TkFMWVpFLCBWRVJCT1NFLCBDT1NUUyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9GRiwgVElN SU5HIE9GRikgSU5TRVJUIElOVE8gZnQ5IChpZCwgdmFsdWUsIG5vdGUpCitTRUxFQ1QgZywKKyAg ICAgICBnICogMiwKKyAgICAgICAnYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YScgfHwgZworRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMjApIGc7CitTRUxFQ1QgKiBGUk9NIGZ0OTsKKworLS0gVGVzdCBi dWZmZXIgbGltaXQgb2YgY29weSBkYXRhIG9uIENPUFlCVUZTSVoKK0lOU0VSVCBJTlRPIGZ0MTAg KGlkLCB0KQorU0VMRUNUIHMsIHJlcGVhdChtZDUoczo6dGV4dCksIDEwMDAwKSBmcm9tIGdlbmVy YXRlX3NlcmllcygxMDAsIDEwMykgczsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIGZ0MTA7CisKKy0t IERpc2FibGUgdGhlIHVzZV9jb3B5X2Zvcl9pbnNlcnQgdGFibGUgb3B0aW9uIGFuZCBjaGVjayB0 aGF0IHRoZSBJTlNFUlQgaXMKKy0tIHVzZWQKK0FMVEVSIEZPUkVJR04gVEFCTEUgZnQ4IE9QVElP TlMoRFJPUCB1c2VfY29weV9mb3JfaW5zZXJ0KTsKK0VYUExBSU4oVkVSQk9TRSwgQ09TVFMgT0ZG LCBTVU1NQVJZIE9GRiwgQlVGRkVSUyBPRkYsIFRJTUlORyBPRkYpCitJTlNFUlQgSU5UTyBmdDgg VkFMVUVTICgxMCk7CisKKy0tIEVuYWJsZSB0aGUgdXNlX2NvcHlfZm9yX2luc2VydCBmb3IgdGhl IGZvcmVpZ24gc2VydmVyIGFuZCBjaGVjayB0aGF0IHRoZQorLS0gQ09QWSBpcyB1c2VkCitBTFRF UiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyhBREQgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScp OworRVhQTEFJTihWRVJCT1NFLCBDT1NUUyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9GRiwg VElNSU5HIE9GRikKK0lOU0VSVCBJTlRPIGZ0OCBWQUxVRVMgKDIwKTsKKworLS0gUmVzZXQgc3Rh dGUKK0FMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TKERST1AgdXNlX2NvcHlfZm9yX2luc2Vy dCk7CitBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0OCBPUFRJT05TKEFERCB1c2VfY29weV9mb3JfaW5z ZXJ0ICd0cnVlJyk7CisKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIHRlc3QgZm9yIHBvc3RncmVzX2Zkd19n ZXRfY29ubmVjdGlvbnMgZnVuY3Rpb24gd2l0aCBjaGVja19jb25uID0gdHJ1ZQogLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLSAKMi41MS4yCgo= --4154961385d9cdd4c3af0012e6b3ab7bb39c7893c2cc94850e4d5a7c81c8 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0002-postgres_fdw-Only-use-COPY-if-batch_size-is-1.patch Content-Type: text/plain; charset=utf-8; name=v5-0002-postgres_fdw-Only-use-COPY-if-batch_size-is-1.patch RnJvbSAxZmI5M2M4YjE1NDhiODM2YzY4YzNlMmU0YzEyNGViNTdmMmVlNTE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFRodSwgNiBOb3YgMjAyNSAyMDoxNzoxOSAtMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjUgMi8y XSBwb3N0Z3Jlc19mZHc6IE9ubHkgdXNlIENPUFkgaWYgYmF0Y2hfc2l6ZSBpcyA+IDEKCi0tLQog Li4uL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0ICAgIHwgMzkgKysrKysr KysrLS0tLS0tLS0tLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAgICAg ICAgIHwgIDkgKysrKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3Fs ICAgICB8ICA5ICsrLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDI3IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bv c3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19m ZHcub3V0CmluZGV4IGJjOTllMjc4ZjAwLi45NTZmZjEyYjU5MCAxMDA2NDQKLS0tIGEvY29udHJp Yi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bv c3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC0xNDgsMjAgKzE0OCwyMCBA QCBDUkVBVEUgRk9SRUlHTiBUQUJMRSBmdDggKAogICAgIHggaW50CiApCiBTRVJWRVIgbG9vcGJh Y2sKLU9QVElPTlMgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDUnLCB1c2VfY29w eV9mb3JfaW5zZXJ0ICd0cnVlJyk7CitPUFRJT05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVf bmFtZSAnVCA1JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScsIGJhdGNoX3NpemUgJzEwJyk7 CiBDUkVBVEUgRk9SRUlHTiBUQUJMRSBmdDkgKAogICAgIGlkIGludCBub3QgbnVsbCwKICAgICBu b3RlIHRleHQsCiAgICAgdmFsdWUgaW50IE5PVCBOVUxMCiApCiBTRVJWRVIgbG9vcGJhY2sKLU9Q VElPTlMgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDYnLCB1c2VfY29weV9mb3Jf aW5zZXJ0ICd0cnVlJyk7CitPUFRJT05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAn VCA2JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScsIGJhdGNoX3NpemUgJzEwJyk7CiBDUkVB VEUgRk9SRUlHTiBUQUJMRSBmdDEwICgKICAgICBpZCBpbnQsCiAgICAgdCB0ZXh0CiApCiBTRVJW RVIgbG9vcGJhY2sKLU9QVElPTlMgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDcn LCB1c2VfY29weV9mb3JfaW5zZXJ0ICd0cnVlJyk7CitPUFRJT05TIChzY2hlbWFfbmFtZSAnUyAx JywgdGFibGVfbmFtZSAnVCA3JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScsIGJhdGNoX3Np emUgJzEwJyk7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSB0ZXN0cyBmb3IgdmFsaWRhdG9yCiAtLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CkBAIC0yMzUsMTggKzIzNSwxOCBAQCBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MiBPUFRJ T05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCAxJyk7CiBBTFRFUiBGT1JFSUdO IFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzEgT1BUSU9OUyAoY29sdW1uX25hbWUgJ0MgMScpOwog QUxURVIgRk9SRUlHTiBUQUJMRSBmdDIgQUxURVIgQ09MVU1OIGMxIE9QVElPTlMgKGNvbHVtbl9u YW1lICdDIDEnKTsKIFxkZXQrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExpc3Qgb2YgZm9yZWlnbiB0YWJsZXMKLSBTY2hlbWEgfCBUYWJsZSB8ICBTZXJ2ZXIg ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZEVyBvcHRpb25zICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gCi0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQotIHB1YmxpYyB8IGZ0MSAgIHwgbG9vcGJhY2sgIHwg KHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDEnKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAKLSBwdWJsaWMgfCBmdDEwICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAn UyAxJywgdGFibGVfbmFtZSAnVCA3JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScpIHwgCi0g cHVibGljIHwgZnQyICAgfCBsb29wYmFjayAgfCAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25h bWUgJ1QgMScpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAotIHB1YmxpYyB8IGZ0NCAg IHwgbG9vcGJhY2sgIHwgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDMnKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAKLSBwdWJsaWMgfCBmdDUgICB8IGxvb3BiYWNrICB8 IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0JykgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgCi0gcHVibGljIHwgZnQ2ICAgfCBsb29wYmFjazIgfCAoc2NoZW1hX25hbWUg J1MgMScsIHRhYmxlX25hbWUgJ1QgNCcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAot IHB1YmxpYyB8IGZ0NyAgIHwgbG9vcGJhY2szIHwgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9u YW1lICdUIDQnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKLSBwdWJsaWMgfCBmdDgg ICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA1JywgdXNl X2NvcHlfZm9yX2luc2VydCAndHJ1ZScpIHwgCi0gcHVibGljIHwgZnQ5ICAgfCBsb29wYmFjayAg fCAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgNicsIHVzZV9jb3B5X2Zvcl9pbnNl cnQgJ3RydWUnKSB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExpc3Qgb2YgZm9yZWlnbiB0YWJsZXMKKyBTY2hlbWEgfCBUYWJsZSB8ICBTZXJ2 ZXIgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkRXIG9wdGlvbnMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0t Ky0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0KKyBwdWJsaWMgfCBmdDEgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywg dGFibGVfbmFtZSAnVCAxJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAKKyBwdWJsaWMgfCBmdDEwICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAx JywgdGFibGVfbmFtZSAnVCA3JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScsIGJhdGNoX3Np emUgJzEwJykgfCAKKyBwdWJsaWMgfCBmdDIgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAn UyAxJywgdGFibGVfbmFtZSAnVCAxJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDQgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFt ZSAnUyAxJywgdGFibGVfbmFtZSAnVCAzJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDUgICB8IGxvb3BiYWNrICB8IChzY2hlbWFf bmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0JykgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDYgICB8IGxvb3BiYWNrMiB8IChzY2hl bWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0JykgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDcgICB8IGxvb3BiYWNrMyB8IChz Y2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0JykgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDggICB8IGxvb3BiYWNrICB8 IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA1JywgdXNlX2NvcHlfZm9yX2luc2Vy dCAndHJ1ZScsIGJhdGNoX3NpemUgJzEwJykgfCAKKyBwdWJsaWMgfCBmdDkgICB8IGxvb3BiYWNr ICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA2JywgdXNlX2NvcHlfZm9yX2lu c2VydCAndHJ1ZScsIGJhdGNoX3NpemUgJzEwJykgfCAKICg5IHJvd3MpCiAKIC0tIFRlc3QgdGhh dCBhbHRlcmF0aW9uIG9mIHNlcnZlciBvcHRpb25zIGNhdXNlcyByZWNvbm5lY3Rpb24KQEAgLTEy NzA5LDcgKzEyNzA5LDcgQEAgSU5TRVJUIElOVE8gZnQ4IFNFTEVDVCAqIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDEwKSBpOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgSW5zZXJ0IG9uIHB1 YmxpYy5mdDggKGFjdHVhbCByb3dzPTAuMDAgbG9vcHM9MSkKICAgIFJlbW90ZSBTUUw6IENPUFkg IlMgMSIuIlQgNSIoeCkgRlJPTSBTVERJTgotICAgQmF0Y2ggU2l6ZTogMQorICAgQmF0Y2ggU2l6 ZTogMTAKICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVz IGkgKGFjdHVhbCByb3dzPTEwLjAwIGxvb3BzPTEpCiAgICAgICAgICBPdXRwdXQ6IE5VTEw6Omlu dGVnZXIsIGkuaQogICAgICAgICAgRnVuY3Rpb24gQ2FsbDogZ2VuZXJhdGVfc2VyaWVzKDEsIDEw KQpAQCAtMTI3MzAsOCArMTI3MzAsNyBAQCBTRUxFQ1QgKiBGUk9NIGZ0ODsKICAxMAogKDEwIHJv d3MpCiAKLS0tIFRlc3Qgb3V0ZXIgb2Ygb3JkZXIgY29sdW1ucyBhbmQgYmF0Y2hfc2l6ZSB3aXRo IENPUFkKLUFMVEVSIEZPUkVJR04gVEFCTEUgZnQ5IE9QVElPTlMoQUREIGJhdGNoX3NpemUgJzEw Jyk7CistLSBUZXN0IG91dGVyIG9mIG9yZGVyIGNvbHVtbnMKIEVYUExBSU4oQU5BTFlaRSwgVkVS Qk9TRSwgQ09TVFMgT0ZGLCBTVU1NQVJZIE9GRiwgQlVGRkVSUyBPRkYsIFRJTUlORyBPRkYpIElO U0VSVCBJTlRPIGZ0OSAoaWQsIHZhbHVlLCBub3RlKQogU0VMRUNUIGcsCiAgICAgICAgZyAqIDIs CkBAIC0xMjc5MCw3ICsxMjc4OSw3IEBAIElOU0VSVCBJTlRPIGZ0OCBWQUxVRVMgKDEwKTsKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIElu c2VydCBvbiBwdWJsaWMuZnQ4CiAgICBSZW1vdGUgU1FMOiBJTlNFUlQgSU5UTyAiUyAxIi4iVCA1 Iih4KSBWQUxVRVMgKCQxKQotICAgQmF0Y2ggU2l6ZTogMQorICAgQmF0Y2ggU2l6ZTogMTAKICAg IC0+ICBSZXN1bHQKICAgICAgICAgIE91dHB1dDogTlVMTDo6aW50ZWdlciwgMTAKICg1IHJvd3Mp CkBAIC0xMjgwNCw3ICsxMjgwMyw3IEBAIElOU0VSVCBJTlRPIGZ0OCBWQUxVRVMgKDIwKTsKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBJbnNlcnQgb24g cHVibGljLmZ0OAogICAgUmVtb3RlIFNRTDogQ09QWSAiUyAxIi4iVCA1Iih4KSBGUk9NIFNURElO Ci0gICBCYXRjaCBTaXplOiAxCisgICBCYXRjaCBTaXplOiAxMAogICAgLT4gIFJlc3VsdAogICAg ICAgICAgT3V0cHV0OiBOVUxMOjppbnRlZ2VyLCAyMAogKDUgcm93cykKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv cG9zdGdyZXNfZmR3LmMKaW5kZXggNzdlZmZkZmZlYjIuLjRhODk1MjJhMjIxIDEwMDY0NAotLS0g YS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtMTg3Nyw3ICsxODc3LDEyIEBAIHBvc3RncmVzUGxh bkZvcmVpZ25Nb2RpZnkoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkgKGludCkgcGxhbi0+b25Db25m bGljdEFjdGlvbik7CiAKIAlpZiAob3BlcmF0aW9uID09IENNRF9JTlNFUlQgJiYgcGxhbi0+cmV0 dXJuaW5nTGlzdHMgPT0gTlVMTCkKLQkJdXNlX2NvcHlfZm9yX2luc2VydCA9IGdldF91c2VfY29w eV9mb3JfaW5zZXJ0KHJlbCk7CisJeworCQlpbnQJCQliYXRjaF9zaXplID0gZ2V0X2JhdGNoX3Np emVfb3B0aW9uKHJlbCk7CisKKwkJaWYgKGJhdGNoX3NpemUgPiAxKQorCQkJdXNlX2NvcHlfZm9y X2luc2VydCA9IGdldF91c2VfY29weV9mb3JfaW5zZXJ0KHJlbCk7CisJfQogCiAJLyoKIAkgKiBD b25zdHJ1Y3QgdGhlIFNRTCBjb21tYW5kIHN0cmluZy4KQEAgLTQwNzUsNyArNDA4MCw3IEBAIGNy ZWF0ZV9mb3JlaWduX21vZGlmeShFU3RhdGUgKmVzdGF0ZSwKIAlpZiAob3BlcmF0aW9uID09IENN RF9JTlNFUlQpCiAJCWZtc3RhdGUtPmJhdGNoX3NpemUgPSBnZXRfYmF0Y2hfc2l6ZV9vcHRpb24o cmVsKTsKIAotCWlmIChvcGVyYXRpb24gPT0gQ01EX0lOU0VSVCAmJiAhZm1zdGF0ZS0+aGFzX3Jl dHVybmluZykKKwlpZiAob3BlcmF0aW9uID09IENNRF9JTlNFUlQgJiYgIWZtc3RhdGUtPmhhc19y ZXR1cm5pbmcgJiYgZm1zdGF0ZS0+YmF0Y2hfc2l6ZSA+IDEpCiAJCWZtc3RhdGUtPnVzZV9jb3B5 X2Zvcl9pbnNlcnQgPSBnZXRfdXNlX2NvcHlfZm9yX2luc2VydChyZWwpOwogCiAJZm1zdGF0ZS0+ bnVtX3Nsb3RzID0gMTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0 Z3Jlc19mZHcuc3FsIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwK aW5kZXggMGQyOWI5ZDliYWUuLjA5M2Y4NmFiZWI0IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3Rn cmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9z cWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtMTYyLDcgKzE2Miw3IEBAIENSRUFURSBGT1JFSUdOIFRB QkxFIGZ0OCAoCiAgICAgeCBpbnQKICkKIFNFUlZFUiBsb29wYmFjawotT1BUSU9OUyAoc2NoZW1h X25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgNScsIHVzZV9jb3B5X2Zvcl9pbnNlcnQgJ3RydWUn KTsKK09QVElPTlMgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDUnLCB1c2VfY29w eV9mb3JfaW5zZXJ0ICd0cnVlJywgYmF0Y2hfc2l6ZSAnMTAnKTsKIAogQ1JFQVRFIEZPUkVJR04g VEFCTEUgZnQ5ICgKICAgICBpZCBpbnQgbm90IG51bGwsCkBAIC0xNzAsMTQgKzE3MCwxNCBAQCBD UkVBVEUgRk9SRUlHTiBUQUJMRSBmdDkgKAogICAgIHZhbHVlIGludCBOT1QgTlVMTAogKQogU0VS VkVSIGxvb3BiYWNrCi1PUFRJT05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA2 JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScpOworT1BUSU9OUyAoc2NoZW1hX25hbWUgJ1Mg MScsIHRhYmxlX25hbWUgJ1QgNicsIHVzZV9jb3B5X2Zvcl9pbnNlcnQgJ3RydWUnLCBiYXRjaF9z aXplICcxMCcpOwogCiBDUkVBVEUgRk9SRUlHTiBUQUJMRSBmdDEwICgKICAgICBpZCBpbnQsCiAg ICAgdCB0ZXh0CiApCiBTRVJWRVIgbG9vcGJhY2sKLU9QVElPTlMgKHNjaGVtYV9uYW1lICdTIDEn LCB0YWJsZV9uYW1lICdUIDcnLCB1c2VfY29weV9mb3JfaW5zZXJ0ICd0cnVlJyk7CitPUFRJT05T IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA3JywgdXNlX2NvcHlfZm9yX2luc2Vy dCAndHJ1ZScsIGJhdGNoX3NpemUgJzEwJyk7CiAKIC0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIHRlc3RzIGZv ciB2YWxpZGF0b3IKQEAgLTQ0MjMsOCArNDQyMyw3IEBAIEVYUExBSU4oQU5BTFlaRSwgVkVSQk9T RSwgQ09TVFMgT0ZGLCBTVU1NQVJZIE9GRiwgQlVGRkVSUyBPRkYsIFRJTUlORyBPRkYpCiBJTlNF UlQgSU5UTyBmdDggU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIGk7CiBTRUxF Q1QgKiBGUk9NIGZ0ODsKIAotLS0gVGVzdCBvdXRlciBvZiBvcmRlciBjb2x1bW5zIGFuZCBiYXRj aF9zaXplIHdpdGggQ09QWQotQUxURVIgRk9SRUlHTiBUQUJMRSBmdDkgT1BUSU9OUyhBREQgYmF0 Y2hfc2l6ZSAnMTAnKTsKKy0tIFRlc3Qgb3V0ZXIgb2Ygb3JkZXIgY29sdW1ucwogRVhQTEFJTihB TkFMWVpFLCBWRVJCT1NFLCBDT1NUUyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9GRiwgVElN SU5HIE9GRikgSU5TRVJUIElOVE8gZnQ5IChpZCwgdmFsdWUsIG5vdGUpCiBTRUxFQ1QgZywKICAg ICAgICBnICogMiwKLS0gCjIuNTEuMgoK --4154961385d9cdd4c3af0012e6b3ab7bb39c7893c2cc94850e4d5a7c81c8--