Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vTfOP-0070hj-1S for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Dec 2025 12:03:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vTfOM-003ZWV-24 for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Dec 2025 12:03:31 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vTfOM-003ZWN-09 for pgsql-hackers@lists.postgresql.org; Thu, 11 Dec 2025 12:03:31 +0000 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vTfOK-0008ff-1s for pgsql-hackers@postgresql.org; Thu, 11 Dec 2025 12:03:29 +0000 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-3436d6ca17bso1012801a91.3 for ; Thu, 11 Dec 2025 04:03:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765454607; x=1766059407; darn=postgresql.org; h=in-reply-to:references:from:subject:cc:to:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=nREf0IiDoXaE6kHmhOBqMVQCUavK/S6gqgnkN7PWp4c=; b=RrnmTt8RspWkojLkl6v96+5tlvdUvFpYjf3mVe7Iq187d+dQPvTbbG4IMVG6uQCsqT uvWdAEYclkhPkb73fAPtoz9gUjBk6rf+p312enFemRBI64bSmPo/PutAlJd5JKcSs1Ri inih2DP83jN26Q2RKzt0P9MkuP4Mc33Q/CQUby5vJP8sFSUwNuasEMz87WOdJlojlPw+ haUQwfDOVGREZiHG5QQwEER7g9TMTW9x1HvFPDM/clTWo790OGIbNIAnMCiM1SihYewE 3ZhBD4IqGNq/mvvLdN9bbjwEmPQQAD3GoJF8xFModAONvXeXoclT8NOS46m0E2HA0DAP 2Sxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765454607; x=1766059407; h=in-reply-to:references:from:subject:cc:to:message-id:date :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=nREf0IiDoXaE6kHmhOBqMVQCUavK/S6gqgnkN7PWp4c=; b=h6brQBxNppI5E5ds3tAr5q2yS8WrCmDOmcYxhKoCnR3xmWL9tHDk6874hOh86lyqlJ HWewNngaRjwEvPPQlO16txxxWs2gijVQXZXeGQqzwquENCo0p55MM9xrQsQQvk3GNu8v 7VmfAsGpXonjWaRUhaXASKHbA8aefkMA6sa2vjsyrYO7IZ484ybPYVUE208ceBEITafj +R2jInrviV6iPZkkjayUGxIC+AUXuNFupvTIYWXvWGtQYe7Vs3OA6jjvtjoGZbjFIww4 p2e9Zc+3axVCUgDDyySUPg+kJwAwBHGxxno0+6AKVA+KAutyBLxJXVEo6Vlj4hK0XkP7 IkGQ== X-Forwarded-Encrypted: i=1; AJvYcCXFzP7zl98FBa+KqHYdhfpoFxIYshubIg57H6c0g7msevpOeXb/DKu48a8P7638idV6jXSs1CRoiBirdFdt@postgresql.org X-Gm-Message-State: AOJu0YwNUbcpl+jL2u9sWWfFkYG87sDodeAYZdUx2sDgpvhS8LJbP7pd NJjslh9QQImOpVzMBMJDRNpJ148oxZHb0gkhm+e+nsKOUMParwuKSqRi X-Gm-Gg: AY/fxX6I9vs2onsPIVyo+mVNup2VjEH684hpm+FV/SwEFpWfM5WteiniyKPJNcGLlOj 5RIrpOhNp7+eefK7Twbfaez+AOAPfcXExrIkMIfdeXW1QO2lgCmo5Cj3J4JUsVipGUIHjzq45Em UNOEUXJv2Pot7LqlbNHHYEzc6C/nAk2/enJ8bofZb6eICAL4U2OErRQfwtJurdjAIhgkl+qtjqc qyo3E6iRJ3q0z54lvSRPsSEcLqWp5zS4yWakhhYsaJYFKeHb9LdvxoOO1yjKw377Fn6uiA1Yd8s lKlVCTjrfXef764uXeJiwKKJ+e/x+69ou4zeLskwUwc33pc8Z3BZu7wHAILuMhyWM/AN63kTbED dbh+oUcdMT34O+CJelmxqvNJWFDqV0lPyGcxXbPGH3iRTECiQj5S9M5jdBym3swRm9oICgqgcDM xZmDLjl5AumUmsZSqpXEc3y86EmTLkjQm07Q== X-Google-Smtp-Source: AGHT+IEn5Y9xEIvuV9QcM8B7j/hG1Hegce1N8r9PQFAkaeZYkJYJJl+4OLu4nsVS6hOxjvJ3DDIXZw== X-Received: by 2002:a05:7022:ba2:b0:11b:9b98:aa4b with SMTP id a92af1059eb24-11f2966a1dbmr4193958c88.6.1765454607205; Thu, 11 Dec 2025 04:03:27 -0800 (PST) Received: from localhost ([2804:14d:328a:a59c:85b2:56a2:2c57:3c23]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-11f2e1bb2f4sm7147952c88.3.2025.12.11.04.03.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 11 Dec 2025 04:03:26 -0800 (PST) Content-Type: multipart/mixed; boundary=7db0270bc2d4f65dc574f80c058a77966dbfe4fafb120bf16963caf7b82d Mime-Version: 1.0 Date: Thu, 11 Dec 2025 09:03:23 -0300 Message-Id: To: "Masahiko Sawada" Cc: "Andrew Dunstan" , "jian he" , "Tomas Vondra" , Subject: Re: postgres_fdw: Use COPY to speed up batch inserts From: "Matheus Alcantara" 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 --7db0270bc2d4f65dc574f80c058a77966dbfe4fafb120bf16963caf7b82d Content-Type: multipart/alternative; boundary=1e23ec3fa3036af11361d65fcb9e7f0cb97ebd1947ba40e9d053cc2ce70c --1e23ec3fa3036af11361d65fcb9e7f0cb97ebd1947ba40e9d053cc2ce70c Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 I've spent some more time on this patch cleaning up some things and trying to simplify some things. I've renamed "copy_for_batch_insert_threshold" to "batch_with_copy_threshold" and removed the boolean option "use_copy_for_batch_insert", so now to enable the COPY usage for batch inserts it only need to set batch_with_copy_threshold to a number greater than 0. Also the COPY can only be used if batching is also enabled (batch_size > 1) and it will only be used for the COPY FROM on a foreign table and for inserts into table partitions that are also foreign tables. -- Matheus Alcantara EDB: http://www.enterprisedb.com --1e23ec3fa3036af11361d65fcb9e7f0cb97ebd1947ba40e9d053cc2ce70c-- --7db0270bc2d4f65dc574f80c058a77966dbfe4fafb120bf16963caf7b82d Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0001-postgres_fdw-speed-up-batch-inserts-using-COPY.patch Content-Type: text/plain; charset=utf-8; name=v8-0001-postgres_fdw-speed-up-batch-inserts-using-COPY.patch RnJvbSBkZWFkOTllOGEyZGI2NjNkZjg2NzZmMWNhY2ExZDgzNGUxOWNhMDc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFdlZCwgMjYgTm92IDIwMjUgMTY6MzQ6NDYgLTAzMDAKU3ViamVjdDogW1BBVENIIHY4XSBw b3N0Z3Jlc19mZHc6IHNwZWVkIHVwIGJhdGNoIGluc2VydHMgdXNpbmcgQ09QWQoKVGhpcyBjb21t aXQgaW5jbHVkZSBhIG5ldyBmb3JlaWduIHRhYmxlL3NlcnZlciBvcHRpb24KImJhdGNoX3dpdGhf Y29weV90aHJlc2hvbGQiIHRoYXQgZW5hYmxlIHRoZSB1c2FnZSBvZiB0aGUgQ09QWSBjb21tYW5k IHRvCnNwZWVkIHVwIGJhdGNoIGluc2VydHMgd2hlbiBhIENPUFkgRlJPTSBvciBhbiBpbnNlcnQg aW50byBhIHRhYmxlCnBhcnRpdGlvbiB0aGF0IGlzIGEgZm9yZWlnbiB0YWJsZSBpcyBleGVjdXRl ZC4gSW4gYm90aCBjYXNlcyB0aGUKQmVnaW5Gb3JlaWduSW5zZXJ0IGZkdyByb3V0aW5lIGlzIGNh bGxlZCwgc28gdGhpcyBuZXcgb3B0aW9uIGlzCnJldHJpZXZlZCBvbmx5IG9uIHRoaXMgcm91dGlu ZS4gRm9yIHRoZSBvdGhlciBjYXNlcyB0aGF0IHVzZSB0aGUKRm9yZWlnbk1vZGlmeSByb3V0aW5l cyBzdGlsbCB1c2UgdGhlIElOU0VSVCBhcyBhIHJlbW90ZSBTUUwuCgpOb3RlIHRoYXQgdGhlIENP UFkgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIGJhdGNoIGluc2VydHMgYW5kIG9ubHkgaWYgdGhlCmN1 cnJlbnQgbnVtYmVyIG9mIHJvd3MgYmVpbmcgaW5zZXJ0ZWQgb24gdGhlIGJhdGNoIG9wZXJhdGlv biBpcyA+PQpiYXRjaF93aXRoX2NvcHlfdGhyZXNob2xkLiBJZiBiYXRjaF9zaXplPTEwMCwgYmF0 Y2hfd2l0aF9jb3B5X3RocmVzaG9sZD01MAphbmQgbnVtYmVyIG9mIHJvd3MgYmVpbmcgaW5zZXJ0 ZWQgaXMgMTIwIHRoZSBmaXJzdCAxMDAgcm93cyB3aWxsIGJlCmluc2VydGVkIHVzaW5nIHRoZSBD T1BZIGNvbW1hbmQgYW5kIHRoZSByZW1haW5pbmcgMjAgcm93cyB3aWxsIGJlCmluc2VydGVkIHVz aW5nIElOU0VSVCBzdGF0ZW1lbnQgYmVjYXVzZSBpdCBkaWQgbm90IHJlYWNoIHRoZSBjb3B5CnRo cmVzaG9sZC4KLS0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMgICAgICAgICAgICAg ICAgfCAgMzUgKysrCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQg ICAgfCAgMjYgKysrCiBjb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYyAgICAgICAgICAgICAg ICAgfCAgIDYgKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jICAgICAgICAg ICB8IDIxMCArKysrKysrKysrKysrKysrKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVz X2Zkdy5oICAgICAgICAgICB8ICAgMSArCiBjb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdy ZXNfZmR3LnNxbCAgICAgfCAgMjMgKysKIDYgZmlsZXMgY2hhbmdlZCwgMjk4IGluc2VydGlvbnMo KyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVw YXJzZS5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jCmluZGV4IGYyZmIwMDUxODQz Li41NGU4MjFmNmJmNSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5j CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYwpAQCAtMjIzNiw2ICsyMjM2LDQx IEBAIHJlYnVpbGRJbnNlcnRTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwKIAlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgb3JpZ19xdWVyeSArIHZhbHVlc19lbmRfbGVuKTsKIH0K IAorLyoKKyAqICBCdWlsZCBhIENPUFkgRlJPTSBTVERJTiBzdGF0ZW1lbnQgdXNpbmcgdGhlIFRF WFQgZm9ybWF0CisgKi8KK3ZvaWQKK2RlcGFyc2VDb3B5U3FsKFN0cmluZ0luZm8gYnVmLCBSZWxh dGlvbiByZWwsIExpc3QgKnRhcmdldF9hdHRycykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJl bGF0aW9uR2V0RGVzY3IocmVsKTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJaW50CQkJbmF0dHJz ID0gbGlzdF9sZW5ndGgodGFyZ2V0X2F0dHJzKTsKKworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi Q09QWSAiKTsKKwlkZXBhcnNlUmVsYXRpb24oYnVmLCByZWwpOworCWlmIChuYXR0cnMgPiAwKQor CQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIigiKTsKKworCWZvcmVhY2hfaW50KGF0dG51bSwgdGFy Z2V0X2F0dHJzKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIo dHVwZGVzYywgYXR0bnVtIC0gMSk7CisKKwkJaWYgKGF0dHItPmF0dGdlbmVyYXRlZCkKKwkJCWNv bnRpbnVlOworCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg IiwgIik7CisKKwkJZmlyc3QgPSBmYWxzZTsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dHItPmF0dG5hbWUpKSk7CisJfQorCWlmIChu YXR0cnMgPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIikgRlJPTSBTVERJTiIp OworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgRlJPTSBTVERJTiIpOwor fQorCiAvKgogICogZGVwYXJzZSByZW1vdGUgVVBEQVRFIHN0YXRlbWVudAogICoKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250 cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4IDQ4ZTMxODVi MjI3Li5mZmJhMjQzZGVjZSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0 ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9w b3N0Z3Jlc19mZHcub3V0CkBAIC05MjE1LDYgKzkyMTUsMTkgQEAgd2l0aCByZXN1bHQgYXMgKGlu c2VydCBpbnRvIGl0cnRlc3QgdmFsdWVzICgxLCAndGVzdDEnKSwgKDIsICd0ZXN0MicpIHJldHVy bmluZwogCiBkcm9wIHRyaWdnZXIgbG9jdDFfYnJfaW5zZXJ0X3RyaWdnZXIgb24gbG9jdDE7CiBk cm9wIHRyaWdnZXIgbG9jdDJfYnJfaW5zZXJ0X3RyaWdnZXIgb24gbG9jdDI7CistLSBUZXN0IGJh dGNoIGluc2VydCB1c2luZyBDT1BZIHdpdGggYmF0Y2hfd2l0aF9jb3B5X3RocmVzaG9sZAorZGVs ZXRlIGZyb20gaXRydGVzdDsKK2FsdGVyIHNlcnZlciBsb29wYmFjayBvcHRpb25zIChhZGQgYmF0 Y2hfd2l0aF9jb3B5X3RocmVzaG9sZCAnMicsIGJhdGNoX3NpemUgJzMnKTsKK2luc2VydCBpbnRv IGl0cnRlc3QgdmFsdWVzICgxLCAndGVzdDEnKSwgKDIsICd0ZXN0MicpLCAoMiwgJ3Rlc3QzJyk7 CitzZWxlY3QgKiBmcm9tIGl0cnRlc3Q7CisgYSB8ICAgYiAgIAorLS0tKy0tLS0tLS0KKyAxIHwg dGVzdDEKKyAyIHwgdGVzdDIKKyAyIHwgdGVzdDMKKygzIHJvd3MpCisKK2FsdGVyIHNlcnZlciBs b29wYmFjayBvcHRpb25zIChkcm9wIGJhdGNoX3dpdGhfY29weV90aHJlc2hvbGQsIGRyb3AgYmF0 Y2hfc2l6ZSk7CiBkcm9wIHRhYmxlIGl0cnRlc3Q7CiBkcm9wIHRhYmxlIGxvY3QxOwogZHJvcCB0 YWJsZSBsb2N0MjsKQEAgLTk1MjQsNiArOTUzNywxOSBAQCBzZWxlY3QgKiBmcm9tIHJlbTI7CiAg IDIgfCBiYXIKICgyIHJvd3MpCiAKK2RlbGV0ZSBmcm9tIHJlbTI7CistLSBUZXN0IENPUFkgd2l0 aCBiYXRjaF93aXRoX2NvcHlfdGhyZXNob2xkCithbHRlciBmb3JlaWduIHRhYmxlIHJlbTIgb3B0 aW9ucyAoYWRkIGJhdGNoX3dpdGhfY29weV90aHJlc2hvbGQgJzInKTsKKy0tIEluc2VydCAzIHJv d3Mgc28gdGhhdCB0aGUgdGhpcmQgcm93IGZhbGxiYWNrIHRvIG5vcm1hbCBJTlNFUlQgc3RhdGVt ZW50IHBhdGgKK2NvcHkgcmVtMiBmcm9tIHN0ZGluOworc2VsZWN0ICogZnJvbSByZW0yOworIGYx IHwgZjIgIAorLS0tLSstLS0tLQorICAxIHwgZm9vCisgIDIgfCBiYXIKKyAgMyB8IGJhegorKDMg cm93cykKKwogZGVsZXRlIGZyb20gcmVtMjsKIC0tIFRlc3QgY2hlY2sgY29uc3RyYWludHMKIGFs dGVyIHRhYmxlIGxvYzIgYWRkIGNvbnN0cmFpbnQgbG9jMl9mMXBvc2l0aXZlIGNoZWNrIChmMSA+ PSAwKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L29wdGlvbi5jIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKaW5kZXggMDQ3ODhiN2U4YjMuLmQyNjk2MjA2ZTc1IDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYworKysgYi9jb250cmliL3Bv c3RncmVzX2Zkdy9vcHRpb24uYwpAQCAtMTU3LDcgKzE1Nyw4IEBAIHBvc3RncmVzX2Zkd192YWxp ZGF0b3IoUEdfRlVOQ1RJT05fQVJHUykKIAkJCSh2b2lkKSBFeHRyYWN0RXh0ZW5zaW9uTGlzdChk ZWZHZXRTdHJpbmcoZGVmKSwgdHJ1ZSk7CiAJCX0KIAkJZWxzZSBpZiAoc3RyY21wKGRlZi0+ZGVm bmFtZSwgImZldGNoX3NpemUiKSA9PSAwIHx8Ci0JCQkJIHN0cmNtcChkZWYtPmRlZm5hbWUsICJi YXRjaF9zaXplIikgPT0gMCkKKwkJCQkgc3RyY21wKGRlZi0+ZGVmbmFtZSwgImJhdGNoX3NpemUi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChkZWYtPmRlZm5hbWUsICJiYXRjaF93aXRoX2NvcHlfdGhy ZXNob2xkIikgPT0gMCkKIAkJewogCQkJY2hhcgkgICAqdmFsdWU7CiAJCQlpbnQJCQlpbnRfdmFs OwpAQCAtMjYzLDYgKzI2NCw5IEBAIEluaXRQZ0Zkd09wdGlvbnModm9pZCkKIAkJLyogYmF0Y2hf c2l6ZSBpcyBhdmFpbGFibGUgb24gYm90aCBzZXJ2ZXIgYW5kIHRhYmxlICovCiAJCXsiYmF0Y2hf c2l6ZSIsIEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBmYWxzZX0sCiAJCXsiYmF0Y2hfc2l6ZSIs IEZvcmVpZ25UYWJsZVJlbGF0aW9uSWQsIGZhbHNlfSwKKwkJLyogYmF0Y2hfd2l0aF9jb3B5X3Ro cmVzaG9sZCBpcyBhdmFpbGFibGUgb24gYm90aCBzZXJ2ZXIgYW5kIHRhYmxlICovCisJCXsiYmF0 Y2hfd2l0aF9jb3B5X3RocmVzaG9sZCIsIEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBmYWxzZX0s CisJCXsiYmF0Y2hfd2l0aF9jb3B5X3RocmVzaG9sZCIsIEZvcmVpZ25UYWJsZVJlbGF0aW9uSWQs IGZhbHNlfSwKIAkJLyogYXN5bmNfY2FwYWJsZSBpcyBhdmFpbGFibGUgb24gYm90aCBzZXJ2ZXIg YW5kIHRhYmxlICovCiAJCXsiYXN5bmNfY2FwYWJsZSIsIEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklk LCBmYWxzZX0sCiAJCXsiYXN5bmNfY2FwYWJsZSIsIEZvcmVpZ25UYWJsZVJlbGF0aW9uSWQsIGZh bHNlfSwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIv Y29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggMDZiNTJjNjUzMDAuLjc4 OTY3NjBkNTFhIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcu YworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtNjMsNiArNjMs OSBAQCBQR19NT0RVTEVfTUFHSUNfRVhUKAogLyogSWYgbm8gcmVtb3RlIGVzdGltYXRlcywgYXNz dW1lIGEgc29ydCBjb3N0cyAyMCUgZXh0cmEgKi8KICNkZWZpbmUgREVGQVVMVF9GRFdfU09SVF9N VUxUSVBMSUVSIDEuMgogCisvKiBCdWZmZXIgc2l6ZSB0byBzZW5kIENPUFkgSU4gZGF0YSovCisj ZGVmaW5lIENPUFlCVUZTSVogODE5MgorCiAvKgogICogSW5kZXhlcyBvZiBGRFctcHJpdmF0ZSBp bmZvcm1hdGlvbiBzdG9yZWQgaW4gZmR3X3ByaXZhdGUgbGlzdHMuCiAgKgpAQCAtMTk4LDYgKzIw MSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Zkd01vZGlmeVN0YXRlCiAJYm9vbAkJaGFzX3JldHVy bmluZzsJLyogaXMgdGhlcmUgYSBSRVRVUk5JTkcgY2xhdXNlPyAqLwogCUxpc3QJICAgKnJldHJp ZXZlZF9hdHRyczsJLyogYXR0ciBudW1iZXJzIHJldHJpZXZlZCBieSBSRVRVUk5JTkcgKi8KIAor CS8qIENPUFkgdXNhZ2Ugc3R1ZmYgKi8KKwlpbnQJCQliYXRjaF93aXRoX2NvcHlfdGhyZXNob2xk OwkvKiB2YWx1ZSBvZiBGRFcgb3B0aW9uICovCisJY2hhcgkgICAqY21kX2NvcHk7CQkvKiBDT1BZ IHN0YXRlbWVudCAqLworCiAJLyogaW5mbyBhYm91dCBwYXJhbWV0ZXJzIGZvciBwcmVwYXJlZCBz dGF0ZW1lbnQgKi8KIAlBdHRyTnVtYmVyCWN0aWRBdHRubzsJCS8qIGF0dG51bSBvZiBpbnB1dCBy ZXNqdW5rIGN0aWQgY29sdW1uICovCiAJaW50CQkJcF9udW1zOwkJCS8qIG51bWJlciBvZiBwYXJh bWV0ZXJzIHRvIHRyYW5zbWl0ICovCkBAIC01NDUsNiArNTUyLDEwIEBAIHN0YXRpYyB2b2lkIG1l cmdlX2Zkd19vcHRpb25zKFBnRmR3UmVsYXRpb25JbmZvICpmcGluZm8sCiAJCQkJCQkJICBjb25z dCBQZ0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvX28sCiAJCQkJCQkJICBjb25zdCBQZ0Zkd1JlbGF0 aW9uSW5mbyAqZnBpbmZvX2kpOwogc3RhdGljIGludAlnZXRfYmF0Y2hfc2l6ZV9vcHRpb24oUmVs YXRpb24gcmVsKTsKK3N0YXRpYyBpbnQJZ2V0X2JhdGNoX3dpdGhfY29weV90aHJlc2hvbGQoUmVs YXRpb24gcmVsKTsKK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqKmV4ZWN1dGVfZm9yZWlnbl9tb2Rp ZnlfdXNpbmdfY29weShQZ0Zkd01vZGlmeVN0YXRlICpmbXN0YXRlLAorCQkJCQkJCQkJCQkJCQkg IFR1cGxlVGFibGVTbG90ICoqc2xvdHMsCisJCQkJCQkJCQkJCQkJCSAgaW50ICpudW1TbG90cyk7 CiAKIAogLyoKQEAgLTIwMTMsOCArMjAyNCwzMCBAQCBwb3N0Z3Jlc0V4ZWNGb3JlaWduQmF0Y2hJ bnNlcnQoRVN0YXRlICplc3RhdGUsCiAJICovCiAJaWYgKGZtc3RhdGUtPmF1eF9mbXN0YXRlKQog CQlyZXN1bHRSZWxJbmZvLT5yaV9GZHdTdGF0ZSA9IGZtc3RhdGUtPmF1eF9mbXN0YXRlOwotCXJz bG90ID0gZXhlY3V0ZV9mb3JlaWduX21vZGlmeShlc3RhdGUsIHJlc3VsdFJlbEluZm8sIENNRF9J TlNFUlQsCi0JCQkJCQkJCSAgIHNsb3RzLCBwbGFuU2xvdHMsIG51bVNsb3RzKTsKKworCS8qCisJ ICogQ2hlY2sgaWYgImJhdGNoX3dpdGhfY29weV90aHJlc2hvbGQiIGlzIGVuYWJsZSAoPiAwKSBh bmQgaWYgdGhlIENPUFkKKwkgKiBjYW4gYmUgdXNlZCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHJv d3MgYmVpbmcgaW5zZXJ0ZWQgb24gdGhpcyBiYXRjaC4KKwkgKiBUaGUgb3JpZ2luYWwgcXVlcnkg YWxzbyBzaG91bGQgbm90IGhhdmUgYSBSRVRVUk5JTkcgY2xhdXNlLgorCSAqLworCWlmIChmbXN0 YXRlLT5iYXRjaF93aXRoX2NvcHlfdGhyZXNob2xkID4gMCAmJgorCQlmbXN0YXRlLT5iYXRjaF93 aXRoX2NvcHlfdGhyZXNob2xkIDw9ICpudW1TbG90cyAmJgorCQkhZm1zdGF0ZS0+aGFzX3JldHVy bmluZykKKwl7CisJCWlmIChmbXN0YXRlLT5jbWRfY29weSA9PSBOVUxMKQorCQl7CisJCQlTdHJp bmdJbmZvRGF0YSBzcWw7CisKKwkJCWluaXRTdHJpbmdJbmZvKCZzcWwpOworCQkJZGVwYXJzZUNv cHlTcWwoJnNxbCwgZm1zdGF0ZS0+cmVsLCBmbXN0YXRlLT50YXJnZXRfYXR0cnMpOworCQkJZm1z dGF0ZS0+Y21kX2NvcHkgPSBzcWwuZGF0YTsKKwkJfQorCisJCXJzbG90ID0gZXhlY3V0ZV9mb3Jl aWduX21vZGlmeV91c2luZ19jb3B5KGZtc3RhdGUsIHNsb3RzLCBudW1TbG90cyk7CisJfQorCWVs c2UKKwkJcnNsb3QgPSBleGVjdXRlX2ZvcmVpZ25fbW9kaWZ5KGVzdGF0ZSwgcmVzdWx0UmVsSW5m bywgQ01EX0lOU0VSVCwKKwkJCQkJCQkJCSAgIHNsb3RzLCBwbGFuU2xvdHMsIG51bVNsb3RzKTsK IAkvKiBSZXZlcnQgdGhhdCBjaGFuZ2UgKi8KIAlpZiAoZm1zdGF0ZS0+YXV4X2Ztc3RhdGUpCiAJ CXJlc3VsdFJlbEluZm8tPnJpX0Zkd1N0YXRlID0gZm1zdGF0ZTsKQEAgLTIyNjUsNiArMjI5OCwx NiBAQCBwb3N0Z3Jlc0JlZ2luRm9yZWlnbkluc2VydChNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRl LAogCQkJCQkJCQkJcmV0cmlldmVkX2F0dHJzICE9IE5JTCwKIAkJCQkJCQkJCXJldHJpZXZlZF9h dHRycyk7CiAKKworCS8qCisJICogU2V0IGJhdGNoX3dpdGhfY29weV90aHJlc2hvbGQgZnJvbSBm b3JlaWduIHNlcnZlci90YWJsZSBvcHRpb25zLiBXZSBkbworCSAqIHRoaXMgb3V0c2lkZSBvZiBj cmVhdGVfZm9yZWlnbl9tb2RpZnkoKSBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byB1c2UKKwkgKiBD T1BZIGFzIGEgcmVtb3RlIFNRTCB3aGVuIGEgQ09QWSBGUk9NIG9uIGEgZm9yZWlnbiB0YWJsZSBp cyBleGVjdXRlZCBvcgorCSAqIGFuIGluc2VydCBpcyBiZWluZyBwZXJmb3JtZWQgb24gYSB0YWJs ZSBwYXJ0aXRpb24uIEluIGJvdGggY2FzZXMgdGhlCisJICogQmVnaW5Gb3JlaWduSW5zZXJ0IGZk dyByb3V0aW5lIGlzIGNhbGxlZC4KKwkgKi8KKwlmbXN0YXRlLT5iYXRjaF93aXRoX2NvcHlfdGhy ZXNob2xkID0gZ2V0X2JhdGNoX3dpdGhfY29weV90aHJlc2hvbGQocmVsKTsKKwogCS8qCiAJICog SWYgdGhlIGdpdmVuIHJlc3VsdFJlbEluZm8gYWxyZWFkeSBoYXMgUGdGZHdNb2RpZnlTdGF0ZSBz ZXQsIGl0IG1lYW5zCiAJICogdGhlIGZvcmVpZ24gdGFibGUgaXMgYW4gVVBEQVRFIHN1YnBsYW4g cmVzdWx0IHJlbDsgaW4gd2hpY2ggY2FzZSwgc3RvcmUKQEAgLTQwNjYsNiArNDEwOSw1MCBAQCBj cmVhdGVfZm9yZWlnbl9tb2RpZnkoRVN0YXRlICplc3RhdGUsCiAJcmV0dXJuIGZtc3RhdGU7CiB9 CiAKKy8qCisgKiAgV3JpdGUgdGFyZ2V0IGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSBmbXN0YXRlIGlu dG8gYnVmIGJ1ZmZlciB0byBiZSBzZW50IGFzCisgKiAgQ09QWSBGUk9NIFNURElOIGRhdGEKKyAq Lworc3RhdGljIHZvaWQKK2NvbnZlcnRfc2xvdF90b19jb3B5X3RleHQoU3RyaW5nSW5mbyBidWYs CisJCQkJCQkgIFBnRmR3TW9kaWZ5U3RhdGUgKmZtc3RhdGUsCisJCQkJCQkgIFR1cGxlVGFibGVT bG90ICpzbG90KQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihmbXN0 YXRlLT5yZWwpOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlpbnQJCQlpID0gMDsKKworCWZvcmVh Y2hfaW50KGF0dG51bSwgZm1zdGF0ZS0+dGFyZ2V0X2F0dHJzKQorCXsKKwkJQ29tcGFjdEF0dHJp YnV0ZSAqYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGRlc2MsIGF0dG51bSAtIDEpOwor CQlEYXR1bQkJZGF0dW07CisJCWJvb2wJCWlzbnVsbDsKKworCQkvKiBJZ25vcmUgZ2VuZXJhdGVk IGNvbHVtbnM7IHRoZXkgYXJlIHNldCB0byBERUZBVUxUICovCisJCWlmIChhdHRyLT5hdHRnZW5l cmF0ZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXJNYWNybyhidWYsICdcdCcpOworCQlmaXJzdCA9IGZhbHNlOworCisJCWRhdHVtID0gc2xv dF9nZXRhdHRyKHNsb3QsIGF0dG51bSwgJmlzbnVsbCk7CisKKwkJaWYgKGlzbnVsbCkKKwkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXFxOIik7CisJCWVsc2UKKwkJeworCQkJY29uc3Qg Y2hhciAqdmFsdWUgPSBPdXRwdXRGdW5jdGlvbkNhbGwoJmZtc3RhdGUtPnBfZmxpbmZvW2ldLAor CQkJCQkJCQkJCQkJICAgZGF0dW0pOworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg dmFsdWUpOworCQl9CisJCWkrKzsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1 ZiwgJ1xuJyk7Cit9CisKIC8qCiAgKiBleGVjdXRlX2ZvcmVpZ25fbW9kaWZ5CiAgKgkJUGVyZm9y bSBmb3JlaWduLXRhYmxlIG1vZGlmaWNhdGlvbiBhcyByZXF1aXJlZCwgYW5kIGZldGNoIFJFVFVS TklORwpAQCAtNzg4NiwzICs3OTczLDEyMiBAQCBnZXRfYmF0Y2hfc2l6ZV9vcHRpb24oUmVsYXRp b24gcmVsKQogCiAJcmV0dXJuIGJhdGNoX3NpemU7CiB9CisKKy8qCisgKiBEZXRlcm1pbmUgQ09Q WSB1c2FnZSB0aHJlc2hvbGQgZm9yIGJhdGNoaW5nIGluc2VydHMgZm9yIGEgZ2l2ZW4gZm9yZWln bgorICogdGFibGUuIFRoZSBvcHRpb24gc3BlY2lmaWVkIGZvciBhIHRhYmxlIGhhcyBwcmVjZWRl bmNlLgorICovCitzdGF0aWMgaW50CitnZXRfYmF0Y2hfd2l0aF9jb3B5X3RocmVzaG9sZChSZWxh dGlvbiByZWwpCit7CisJT2lkCQkJZm9yZWlnbnRhYmxlaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJl bCk7CisJTGlzdAkgICAqb3B0aW9ucyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlGb3JlaWdu VGFibGUgKnRhYmxlOworCUZvcmVpZ25TZXJ2ZXIgKnNlcnZlcjsKKworCS8qCisJICogV2UgdXNl IDAgYXMgZGVmYXVsdCwgd2hpY2ggbWVhbnMgdGhhdCBDT1BZIHdpbGwgbm90IGJlIHVzZWQgYnkg ZGVmYXVsdAorCSAqIGZvciBiYXRjaGluZyBpbnNlcnQuCisJICovCisJaW50CQkJY29weV9mb3Jf YmF0Y2hfaW5zZXJ0X3RocmVzaG9sZCA9IDA7CisKKwkvKgorCSAqIExvYWQgb3B0aW9ucyBmb3Ig dGFibGUgYW5kIHNlcnZlci4gV2UgYXBwZW5kIHNlcnZlciBvcHRpb25zIGFmdGVyIHRhYmxlCisJ ICogb3B0aW9ucywgYmVjYXVzZSB0YWJsZSBvcHRpb25zIHRha2UgcHJlY2VkZW5jZS4KKwkgKi8K Kwl0YWJsZSA9IEdldEZvcmVpZ25UYWJsZShmb3JlaWdudGFibGVpZCk7CisJc2VydmVyID0gR2V0 Rm9yZWlnblNlcnZlcih0YWJsZS0+c2VydmVyaWQpOworCisJb3B0aW9ucyA9IGxpc3RfY29uY2F0 KG9wdGlvbnMsIHRhYmxlLT5vcHRpb25zKTsKKwlvcHRpb25zID0gbGlzdF9jb25jYXQob3B0aW9u cywgc2VydmVyLT5vcHRpb25zKTsKKworCS8qIFNlZSBpZiBlaXRoZXIgdGFibGUgb3Igc2VydmVy IHNwZWNpZmllcyBlbmFibGVfYmF0Y2hfd2l0aF9jb3B5LiAqLworCWZvcmVhY2gobGMsIG9wdGlv bnMpCisJeworCQlEZWZFbGVtICAgICpkZWYgPSAoRGVmRWxlbSAqKSBsZmlyc3QobGMpOworCisJ CWlmIChzdHJjbXAoZGVmLT5kZWZuYW1lLCAiYmF0Y2hfd2l0aF9jb3B5X3RocmVzaG9sZCIpID09 IDApCisJCXsKKwkJCSh2b2lkKSBwYXJzZV9pbnQoZGVmR2V0U3RyaW5nKGRlZiksICZjb3B5X2Zv cl9iYXRjaF9pbnNlcnRfdGhyZXNob2xkLCAwLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisJfQor CXJldHVybiBjb3B5X2Zvcl9iYXRjaF9pbnNlcnRfdGhyZXNob2xkOworfQorCisvKgorICogZXhl Y3V0ZV9mb3JlaWduX21vZGlmeV91c2luZ19jb3B5CisgKgkJUGVyZm9ybSBmb3JlaWduLXRhYmxl IG1vZGlmaWNhdGlvbiB1c2luZyB0aGUgQ09QWSBjb21tYW5kLgorICovCitzdGF0aWMgVHVwbGVU YWJsZVNsb3QgKioKK2V4ZWN1dGVfZm9yZWlnbl9tb2RpZnlfdXNpbmdfY29weShQZ0Zkd01vZGlm eVN0YXRlICpmbXN0YXRlLAorCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICoqc2xvdHMsCisJCQkJ CQkJCSAgaW50ICpudW1TbG90cykKK3sKKwlQR3Jlc3VsdCAgICpyZXM7CisJU3RyaW5nSW5mb0Rh dGEgY29weV9kYXRhOworCWludAkJCW5fcm93czsKKwlpbnQJCQlpOworCisJQXNzZXJ0KGZtc3Rh dGUtPmNtZF9jb3B5ICE9IE5VTEwpOworCisJLyogU2VuZCBDT1BZIGNvbW1hbmQgKi8KKwlpZiAo IVBRc2VuZFF1ZXJ5KGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUtPmNtZF9jb3B5KSkKKwkJcGdmZHdf cmVwb3J0X2Vycm9yKE5VTEwsIGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUtPmNtZF9jb3B5KTsKKwor CS8qIGdldCB0aGUgQ09QWSByZXN1bHQgKi8KKwlyZXMgPSBwZ2Zkd19nZXRfcmVzdWx0KGZtc3Rh dGUtPmNvbm4pOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPUFlfSU4pCisJ CXBnZmR3X3JlcG9ydF9lcnJvcihyZXMsIGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUtPmNtZF9jb3B5 KTsKKworCS8qIENvbnZlcnQgdGhlIFR1cGxlVGFibGVTbG90IGRhdGEgaW50byBhIFRFWFQtZm9y bWF0dGVkIGxpbmUgKi8KKwlpbml0U3RyaW5nSW5mbygmY29weV9kYXRhKTsKKwlmb3IgKGkgPSAw OyBpIDwgKm51bVNsb3RzOyBpKyspCisJeworCQljb252ZXJ0X3Nsb3RfdG9fY29weV90ZXh0KCZj b3B5X2RhdGEsIGZtc3RhdGUsIHNsb3RzW2ldKTsKKworCQkvKgorCQkgKiBTZW5kIGluaXRpYWwg Q09QWSBkYXRhIGlmIHRoZSBidWZmZXIgcmVhY2ggdGhlIGxpbWl0IHRvIGF2b2lkIGxhcmdlCisJ CSAqIG1lbW9yeSB1c2FnZS4KKwkJICovCisJCWlmIChjb3B5X2RhdGEubGVuID49IENPUFlCVUZT SVopCisJCXsKKwkJCWlmIChQUXB1dENvcHlEYXRhKGZtc3RhdGUtPmNvbm4sIGNvcHlfZGF0YS5k YXRhLCBjb3B5X2RhdGEubGVuKSA8PSAwKQorCQkJCXBnZmR3X3JlcG9ydF9lcnJvcihOVUxMLCBm bXN0YXRlLT5jb25uLCBmbXN0YXRlLT5jbWRfY29weSk7CisJCQlyZXNldFN0cmluZ0luZm8oJmNv cHlfZGF0YSk7CisJCX0KKwl9CisKKwkvKiBTZW5kIHRoZSByZW1haW5pbmcgQ09QWSBkYXRhICov CisJaWYgKGNvcHlfZGF0YS5sZW4gPiAwKQorCXsKKwkJaWYgKFBRcHV0Q29weURhdGEoZm1zdGF0 ZS0+Y29ubiwgY29weV9kYXRhLmRhdGEsIGNvcHlfZGF0YS5sZW4pIDw9IDApCisJCQlwZ2Zkd19y ZXBvcnRfZXJyb3IoTlVMTCwgZm1zdGF0ZS0+Y29ubiwgZm1zdGF0ZS0+Y21kX2NvcHkpOworCX0K KworCS8qIEVuZCB0aGUgQ09QWSBvcGVyYXRpb24gKi8KKwlpZiAoUFFwdXRDb3B5RW5kKGZtc3Rh dGUtPmNvbm4sIE5VTEwpIDwgMCB8fCBQUWZsdXNoKGZtc3RhdGUtPmNvbm4pKQorCQlwZ2Zkd19y ZXBvcnRfZXJyb3IoTlVMTCwgZm1zdGF0ZS0+Y29ubiwgZm1zdGF0ZS0+Y21kX2NvcHkpOworCisJ LyoKKwkgKiBHZXQgdGhlIHJlc3VsdCwgYW5kIGNoZWNrIGZvciBzdWNjZXNzLgorCSAqLworCXJl cyA9IHBnZmR3X2dldF9yZXN1bHQoZm1zdGF0ZS0+Y29ubik7CisJaWYgKFBRcmVzdWx0U3RhdHVz KHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdmZHdfcmVwb3J0X2Vycm9yKHJlcywgZm1z dGF0ZS0+Y29ubiwgZm1zdGF0ZS0+Y21kX2NvcHkpOworCisJbl9yb3dzID0gYXRvaShQUWNtZFR1 cGxlcyhyZXMpKTsKKworCS8qIEFuZCBjbGVhbiB1cCAqLworCVBRY2xlYXIocmVzKTsKKworCU1l bW9yeUNvbnRleHRSZXNldChmbXN0YXRlLT50ZW1wX2N4dCk7CisKKwkqbnVtU2xvdHMgPSBuX3Jv d3M7CisKKwkvKgorCSAqIFJldHVybiBOVUxMIGlmIG5vdGhpbmcgd2FzIGluc2VydGVkIG9uIHRo ZSByZW1vdGUgZW5kCisJICovCisJcmV0dXJuIChuX3Jvd3MgPiAwKSA/IHNsb3RzIDogTlVMTDsK K30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5oIGIvY29u dHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmgKaW5kZXggZTY5NzM1Mjk4ZDcuLmFhNTRk NmJiYTUzIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaAor KysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaApAQCAtMjA0LDYgKzIwNCw3 IEBAIGV4dGVybiB2b2lkIHJlYnVpbGRJbnNlcnRTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9u IHJlbCwKIAkJCQkJCQkgY2hhciAqb3JpZ19xdWVyeSwgTGlzdCAqdGFyZ2V0X2F0dHJzLAogCQkJ CQkJCSBpbnQgdmFsdWVzX2VuZF9sZW4sIGludCBudW1fcGFyYW1zLAogCQkJCQkJCSBpbnQgbnVt X3Jvd3MpOworZXh0ZXJuIHZvaWQgZGVwYXJzZUNvcHlTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0 aW9uIHJlbCwgTGlzdCAqdGFyZ2V0X2F0dHJzKTsKIGV4dGVybiB2b2lkIGRlcGFyc2VVcGRhdGVT cWwoU3RyaW5nSW5mbyBidWYsIFJhbmdlVGJsRW50cnkgKnJ0ZSwKIAkJCQkJCQkgSW5kZXggcnRp bmRleCwgUmVsYXRpb24gcmVsLAogCQkJCQkJCSBMaXN0ICp0YXJnZXRBdHRycywKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsIGIvY29udHJpYi9w b3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5kZXggOWE4ZjllMjgxMzUuLmY5NzNl ZjA3ZDgwIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3 LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAt MjYzNSw2ICsyNjM1LDE2IEBAIHdpdGggcmVzdWx0IGFzIChpbnNlcnQgaW50byBpdHJ0ZXN0IHZh bHVlcyAoMSwgJ3Rlc3QxJyksICgyLCAndGVzdDInKSByZXR1cm5pbmcKIGRyb3AgdHJpZ2dlciBs b2N0MV9icl9pbnNlcnRfdHJpZ2dlciBvbiBsb2N0MTsKIGRyb3AgdHJpZ2dlciBsb2N0Ml9icl9p bnNlcnRfdHJpZ2dlciBvbiBsb2N0MjsKIAorLS0gVGVzdCBiYXRjaCBpbnNlcnQgdXNpbmcgQ09Q WSB3aXRoIGJhdGNoX3dpdGhfY29weV90aHJlc2hvbGQKK2RlbGV0ZSBmcm9tIGl0cnRlc3Q7Cith bHRlciBzZXJ2ZXIgbG9vcGJhY2sgb3B0aW9ucyAoYWRkIGJhdGNoX3dpdGhfY29weV90aHJlc2hv bGQgJzInLCBiYXRjaF9zaXplICczJyk7CisKK2luc2VydCBpbnRvIGl0cnRlc3QgdmFsdWVzICgx LCAndGVzdDEnKSwgKDIsICd0ZXN0MicpLCAoMiwgJ3Rlc3QzJyk7CisKK3NlbGVjdCAqIGZyb20g aXRydGVzdDsKKworYWx0ZXIgc2VydmVyIGxvb3BiYWNrIG9wdGlvbnMgKGRyb3AgYmF0Y2hfd2l0 aF9jb3B5X3RocmVzaG9sZCwgZHJvcCBiYXRjaF9zaXplKTsKKwogZHJvcCB0YWJsZSBpdHJ0ZXN0 OwogZHJvcCB0YWJsZSBsb2N0MTsKIGRyb3AgdGFibGUgbG9jdDI7CkBAIC0yODA3LDYgKzI4MTcs MTkgQEAgc2VsZWN0ICogZnJvbSByZW0yOwogCiBkZWxldGUgZnJvbSByZW0yOwogCistLSBUZXN0 IENPUFkgd2l0aCBiYXRjaF93aXRoX2NvcHlfdGhyZXNob2xkCithbHRlciBmb3JlaWduIHRhYmxl IHJlbTIgb3B0aW9ucyAoYWRkIGJhdGNoX3dpdGhfY29weV90aHJlc2hvbGQgJzInKTsKKworLS0g SW5zZXJ0IDMgcm93cyBzbyB0aGF0IHRoZSB0aGlyZCByb3cgZmFsbGJhY2sgdG8gbm9ybWFsIElO U0VSVCBzdGF0ZW1lbnQgcGF0aAorY29weSByZW0yIGZyb20gc3RkaW47CisxCWZvbworMgliYXIK KzMJYmF6CitcLgorc2VsZWN0ICogZnJvbSByZW0yOworCitkZWxldGUgZnJvbSByZW0yOworCiAt LSBUZXN0IGNoZWNrIGNvbnN0cmFpbnRzCiBhbHRlciB0YWJsZSBsb2MyIGFkZCBjb25zdHJhaW50 IGxvYzJfZjFwb3NpdGl2ZSBjaGVjayAoZjEgPj0gMCk7CiBhbHRlciBmb3JlaWduIHRhYmxlIHJl bTIgYWRkIGNvbnN0cmFpbnQgcmVtMl9mMXBvc2l0aXZlIGNoZWNrIChmMSA+PSAwKTsKLS0gCjIu NTEuMgoK --7db0270bc2d4f65dc574f80c058a77966dbfe4fafb120bf16963caf7b82d--