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 1tY004-000kds-GV for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Jan 2025 09:47:49 +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 1tY002-009gl1-UE for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Jan 2025 09:47:47 +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 1tY002-009gkt-Ba for pgsql-hackers@lists.postgresql.org; Wed, 15 Jan 2025 09:47:47 +0000 Received: from forward102d.mail.yandex.net ([2a02:6b8:c41:1300:1:45:d181:d102]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tXzzz-000Vuk-1k for pgsql-hackers@postgresql.org; Wed, 15 Jan 2025 09:47:45 +0000 Received: from mail-nwsmtp-smtp-production-main-47.klg.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-47.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:8f4f:0:640:c72e:0]) by forward102d.mail.yandex.net (Yandex) with ESMTPS id 2628F60986; Wed, 15 Jan 2025 12:47:38 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-47.klg.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id YlM7107Oe4Y0-YlcsHxzY; Wed, 15 Jan 2025 12:47:37 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1736934457; bh=MWgTLWY/N4LHAtagcvcVyYLjA+RnjoEnUNQuAw8EReo=; h=In-Reply-To:Cc:Date:References:To:Subject:Message-ID:From; b=MyKYfvM/UDm41JX3Ii24/D5MLOqcOJ9R9CcyAy+tih1ijIQF1axyUXyrPKzLPAEON 2CzwMrDxszb+EN/LbZt4/8oqq6nhAdwOXtnTBq+TdAzgOirzk00CbZDaYn7Tm4e9QU VEYjDGrP87E2BCrLYqCJlDYbFj4yiHe+vUe3BPVU= Authentication-Results: mail-nwsmtp-smtp-production-main-47.klg.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------eTH2IqIg42ZUC5elDRsiTkp0" Message-ID: Date: Wed, 15 Jan 2025 12:47:33 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Sample rate added to pg_stat_statements To: Sami Imseih , "Andrey M. Borodin" Cc: Alena Rybakina , Alexander Korotkov , Michael Paquier , Greg Sabino Mullane , pgsql-hackers References: <320a31e6-4c91-438b-ab17-8a1d72384727@tantorlabs.com> <52e5e3aa-066a-4daf-8d65-77c34a2f0d98@tantorlabs.com> <6482A576-4465-4E46-A42C-F1767E8DDE30@yandex-team.ru> <20994d10-ab44-4c6b-91bc-c4675cd2e58e@tantorlabs.com> <9D8A5BC8-A3A5-4DA9-9382-F30D343247D1@yandex-team.ru> <6cf6270b-e8fa-4d99-b74a-17e781cdf309@tantorlabs.com> <3a27c830-b81f-4560-9774-a87d9b922fbd@tantorlabs.com> Content-Language: en-US From: Ilia Evdokimov In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------eTH2IqIg42ZUC5elDRsiTkp0 Content-Type: multipart/alternative; boundary="------------LPcxRyfkf0sjgQPyN40okjv8" --------------LPcxRyfkf0sjgQPyN40okjv8 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 15.01.2025 01:07, Sami Imseih wrote: >> Alena, Sami – I apologize for not including you in the previous email. >> If you're interested in this approach, I'm open to any suggestions. >> >> [0]: >> https://www.postgresql.org/message-id/1b13d748-5e98-479c-9222-3253a734a038%40tantorlabs.com > Here are my thoughts on this: > > There is good reason to apply sample rate selectively, > but I am not sure if execution time is the way to go. I > would rather apply a sample rate on the most frequently > called queries, since I can gather enough samples > to draw conclusions about performance of the query. > I just don't know if that can be done in a sensible way, > because while we can check the number of calls in the entry, > we will need to do that with a shared lock and spin lock, > which will defeat the purpose of this patch. Agree. Indeed, we should reduce the load on the spin locks, but we can’t check the most popular called queries without inspecting the hash table and locking spin locks. > > This also got me thinking if maybe we should > allow the user to disable sample rate for > utility statements as those are less frequent > in most workloads and a user may want to capture > all such statements, i.e. DROP, CREATE, etc. > > Regards, > > Sami > Probably, but first I suggest benchmarking with sampling applied to all queries. If the results are good, we can later filter certain queries based on different characteristics. On 06.01.2025 18:57, Andrey M. Borodin wrote: > 1. This code seems a little different from your patch. It is trying to avoid engaging PRNG. I'm not sure it's a good idea, but still. Also, it uses "<=", not "<". > > xact_is_sampled = log_xact_sample_rate != 0 && > (log_xact_sample_rate == 1 || > pg_prng_double(&pg_global_prng_state) <= log_xact_sample_rate); Sorry for the delayed reply. Andrey was right about this suggestion—first, it makes the code more readable for others, and second, it avoids engaging the PRNG on edge values of 0.0 and 1.0. I’ve attached patch v11 with these changes. -- Best regards, Ilia Evdokimov, Tantor Labs LLC. --------------LPcxRyfkf0sjgQPyN40okjv8 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit


On 15.01.2025 01:07, Sami Imseih wrote:
Alena, Sami – I apologize for not including you in the previous email.
If you're interested in this approach, I'm open to any suggestions.

[0]:
https://www.postgresql.org/message-id/1b13d748-5e98-479c-9222-3253a734a038%40tantorlabs.com
Here are my thoughts on this:

There is good reason to apply sample rate selectively,
but I am not sure if execution time is the way to go. I
would rather apply a sample rate on the most frequently
called queries, since I can gather enough samples
to draw conclusions about performance of the query.
I just don't know if that can be done in a sensible way,
because while we can check the number of calls in the entry,
we will need to do that with a shared lock and spin lock,
which will defeat the purpose of this patch.


Agree. Indeed, we should reduce the load on the spin locks, but we can’t check the most popular called queries without inspecting the hash table and locking spin locks.




This also got me thinking if maybe we should
allow the user to disable sample rate for
utility statements as those are less frequent
in most workloads and a user may want to capture
all such statements, i.e. DROP, CREATE, etc.

Regards,

Sami


Probably, but first I suggest benchmarking with sampling applied to all queries. If the results are good, we can later filter certain queries based on different characteristics.


On 06.01.2025 18:57, Andrey M. Borodin wrote:
1. This code seems a little different from your patch. It is trying to avoid engaging PRNG. I'm not sure it's a good idea, but still. Also, it uses "<=", not "<".

    xact_is_sampled = log_xact_sample_rate != 0 &&
(log_xact_sample_rate == 1 ||
pg_prng_double(&pg_global_prng_state) <= log_xact_sample_rate);

    

Sorry for the delayed reply. Andrey was right about this suggestion—first, it makes the code more readable for others, and second, it avoids engaging the PRNG on edge values of 0.0 and 1.0. I’ve attached patch v11 with these changes.

--
Best regards,
Ilia Evdokimov,
Tantor Labs LLC.
--------------LPcxRyfkf0sjgQPyN40okjv8-- --------------eTH2IqIg42ZUC5elDRsiTkp0 Content-Type: text/x-patch; charset=UTF-8; name="v11-0001-Allow-setting-sample-ratio-for-pg_stat_statements.patch" Content-Disposition: attachment; filename*0="v11-0001-Allow-setting-sample-ratio-for-pg_stat_statements.p"; filename*1="atch" Content-Transfer-Encoding: base64 RnJvbSA4MzhjN2U1OTFhNWNmMTU3ZTg4YmM4MmNkOGFkZjU0OWI2MGNlMjEyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZA dGFudG9ybGFicy5ydT4KRGF0ZTogV2VkLCAxNSBKYW4gMjAyNSAxMjozNzozNiArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjFdIEFsbG93IHNldHRpbmcgc2FtcGxlIHJhdGlvIGZvciBwZ19z dGF0X3N0YXRlbWVudHMKCk5ldyBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBwZ19zdGF0X3N0 YXRlbWVudHMuc2FtcGxlX3JhdGlvIG1ha2VzIGl0CnBvc3NpYmxlIHRvIHRyYWNrIGp1c3Qg YSBmcmFjdGlvbiBvZiB0aGUgcXVlcmllcyBtZWV0aW5nIHRoZSBjb25maWd1cmVkCnRocmVz aG9sZCwgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgdHJhY2tpbmcuCi0tLQogLi4uL3BnX3N0 YXRfc3RhdGVtZW50cy9leHBlY3RlZC9zZWxlY3Qub3V0ICAgIHwgNzYgKysrKysrKysrKysr KysrKysrKwogLi4uL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYyAg IHwgNDggKysrKysrKysrKystCiBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvc2Vs ZWN0LnNxbCAgICAgfCAyMSArKysrKwogZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMu c2dtbCAgICAgICAgICAgIHwgMTggKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMTYwIGluc2Vy dGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0 X3N0YXRlbWVudHMvZXhwZWN0ZWQvc2VsZWN0Lm91dCBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0 ZW1lbnRzL2V4cGVjdGVkL3NlbGVjdC5vdXQKaW5kZXggMzdhMzBhZjAzNC4uNTU4ZDkzZmI0 NiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvc2Vs ZWN0Lm91dAorKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9leHBlY3RlZC9zZWxl Y3Qub3V0CkBAIC0xNTMsNiArMTUzLDgyIEBAIFNFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNf cmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OwogIHQKICgxIHJvdykKIAorLS0KKy0tIHNhbXBs ZSBzdGF0ZW1lbnRzCistLQorU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9 IDAuMDsKK1NFTEVDVCAxIEFTICJpbnQiOworIGludCAKKy0tLS0tCisgICAxCisoMSByb3cp CisKK1NFTEVDVCBxdWVyeSwgY2FsbHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIg QlkgcXVlcnkgQ09MTEFURSAiQyI7CisgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ICAg ICAgICAgICAgICAgICAgICAgICAgfCBjYWxscyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQorIFNFTEVDVCBwZ19zdGF0 X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0IHwgICAgIDEKKygxIHJvdykK KworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDEuMDsKK1NFTEVDVCAx IEFTICJpbnQiOworIGludCAKKy0tLS0tCisgICAxCisoMSByb3cpCisKK1NFTEVDVCBxdWVy eSwgY2FsbHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFU RSAiQyI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbGxzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0KKyBTRUxFQ1QgJDEgQVMgImludCIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIDEKKyBTRUxFQ1QgcGdfc3RhdF9z dGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdCAgICAgICAgICAgICAgICAgICAg IHwgICAgIDEKKyBTRUxFQ1QgcXVlcnksIGNhbGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRz IE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiIHwgICAgIDAKKygzIHJvd3MpCisKK1NFTEVD VCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworIHQgCist LS0KKyB0CisoMSByb3cpCisKK3NldCBwZ19zdGF0X3N0YXRlbWVudHMuc2FtcGxlX3JhdGUg PSAwLjA7CitzZWxlY3QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwg QVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgMSBccGFyc2Ugc3RtdAor XGJpbmRfbmFtZWQgc3RtdCBcZworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorICAgICAgICAx CisoMSByb3cpCisKK1NFTEVDVCBxdWVyeSwgY2FsbHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVu dHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7CisgcXVlcnkgfCBjYWxscyAKKy0tLS0t LS0rLS0tLS0tLQorKDAgcm93cykKKworc2V0IHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVf cmF0ZSA9IDEuMDsKK1xiaW5kX25hbWVkIHN0bXQgXGcKKyA/Y29sdW1uPyAKKy0tLS0tLS0t LS0KKyAgICAgICAgMQorKDEgcm93KQorCitTRUxFQ1QgcXVlcnksIGNhbGxzIEZST00gcGdf c3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCBjYWxscyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tCisgU0VMRUNU ICQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgICAxCisgU0VMRUNUIHF1ZXJ5LCBjYWxscyBGUk9NIHBnX3N0YXRf c3RhdGVtZW50cyBPUkRFUiBCWSBxdWVyeSBDT0xMQVRFICJDIiB8ICAgICAwCisoMiByb3dz KQorCitzZWxlY3QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMg dDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCiAtLQogLS0gcXVlcmllcyB3aXRoIGxvY2tp bmcgY2xhdXNlcwogLS0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRz L3BnX3N0YXRfc3RhdGVtZW50cy5jIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdf c3RhdF9zdGF0ZW1lbnRzLmMKaW5kZXggYmViZjgxMzRlYi4uZWQ1NzI2OWI1NCAxMDA2NDQK LS0tIGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMK KysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMK QEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgogI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKKyNp bmNsdWRlICJjb21tb24vcGdfcHJuZy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1l bnQuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgpAQCAt Mjk0LDYgKzI5NSwxMCBAQCBzdGF0aWMgYm9vbCBwZ3NzX3RyYWNrX3V0aWxpdHkgPSB0cnVl OwkvKiB3aGV0aGVyIHRvIHRyYWNrIHV0aWxpdHkgY29tbWFuZHMgKi8KIHN0YXRpYyBib29s IHBnc3NfdHJhY2tfcGxhbm5pbmcgPSBmYWxzZTsJLyogd2hldGhlciB0byB0cmFjayBwbGFu bmluZwogCQkJCQkJCQkJCQkgKiBkdXJhdGlvbiAqLwogc3RhdGljIGJvb2wgcGdzc19zYXZl ID0gdHJ1ZTsJLyogd2hldGhlciB0byBzYXZlIHN0YXRzIGFjcm9zcyBzaHV0ZG93biAqLwor c3RhdGljIGRvdWJsZSBwZ3NzX3NhbXBsZV9yYXRlID0gMS4wOworCisvKiBJcyB0aGUgY3Vy cmVudCB0b3AtbGV2ZWwgcXVlcnkgdG8gYmUgc2FtcGxlZD8gKi8KK3N0YXRpYyBib29sIGN1 cnJlbnRfcXVlcnlfc2FtcGxlZCA9IGZhbHNlOwogCiAKICNkZWZpbmUgcGdzc19lbmFibGVk KGxldmVsKSBcCkBAIC00MTQsNiArNDE5LDE5IEBAIF9QR19pbml0KHZvaWQpCiAJCQkJCQkJ TlVMTCwKIAkJCQkJCQlOVUxMKTsKIAorCURlZmluZUN1c3RvbVJlYWxWYXJpYWJsZSgicGdf c3RhdF9zdGF0ZW1lbnRzLnNhbXBsZV9yYXRlIiwKKwkJCQkJCQkgIkZyYWN0aW9uIG9mIHF1 ZXJpZXMgdG8gdHJhY2suIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnc3Nfc2FtcGxl X3JhdGUsCisJCQkJCQkJIDEuMCwKKwkJCQkJCQkgMC4wLAorCQkJCQkJCSAxLjAsCisJCQkJ CQkJIFBHQ19TVVNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVM TCwKKwkJCQkJCQkgTlVMTCk7CisKIAlEZWZpbmVDdXN0b21FbnVtVmFyaWFibGUoInBnX3N0 YXRfc3RhdGVtZW50cy50cmFjayIsCiAJCQkJCQkJICJTZWxlY3RzIHdoaWNoIHN0YXRlbWVu dHMgYXJlIHRyYWNrZWQgYnkgcGdfc3RhdF9zdGF0ZW1lbnRzLiIsCiAJCQkJCQkJIE5VTEws CkBAIC04NzcsNiArODk1LDIxIEBAIHBnc3NfcG9zdF9wYXJzZV9hbmFseXplKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgUXVlcnkgKnF1ZXJ5LCBKdW1ibGVTdGF0ZSAqanN0YXRlKQogCQkJCSAg IDApOwogfQogCitzdGF0aWMgdm9pZAordXBkYXRlX2N1cnJlbnRfcXVlcnlfc2FtcGxlZCgp Cit7CisJaWYgKG5lc3RpbmdfbGV2ZWwgPT0gMCkKKwl7CisJCWlmICghSXNQYXJhbGxlbFdv cmtlcigpKQorCQkJY3VycmVudF9xdWVyeV9zYW1wbGVkID0gcGdzc19zYW1wbGVfcmF0ZSAh PSAwLjAgJiYKKwkJCQkocGdzc19zYW1wbGVfcmF0ZSA9PSAxLjAgfHwKKwkJCQlwZ19wcm5n X2RvdWJsZSgmcGdfZ2xvYmFsX3Bybmdfc3RhdGUpIDw9IHBnc3Nfc2FtcGxlX3JhdGUpOwor CQllbHNlCisJCQljdXJyZW50X3F1ZXJ5X3NhbXBsZWQgPSBmYWxzZTsKKworCX0KK30KKwog LyoKICAqIFBsYW5uZXIgaG9vazogZm9yd2FyZCB0byByZWd1bGFyIHBsYW5uZXIsIGJ1dCBt ZWFzdXJlIHBsYW5uaW5nIHRpbWUKICAqIGlmIG5lZWRlZC4KQEAgLTg4OSwxMiArOTIyLDE0 IEBAIHBnc3NfcGxhbm5lcihRdWVyeSAqcGFyc2UsCiB7CiAJUGxhbm5lZFN0bXQgKnJlc3Vs dDsKIAorCXVwZGF0ZV9jdXJyZW50X3F1ZXJ5X3NhbXBsZWQoKTsKKwogCS8qCiAJICogV2Ug Y2FuJ3QgcHJvY2VzcyB0aGUgcXVlcnkgaWYgbm8gcXVlcnlfc3RyaW5nIGlzIHByb3ZpZGVk LCBhcwogCSAqIHBnc3Nfc3RvcmUgbmVlZHMgaXQuICBXZSBhbHNvIGlnbm9yZSBxdWVyeSB3 aXRob3V0IHF1ZXJ5aWQsIGFzIGl0IHdvdWxkCiAJICogYmUgdHJlYXRlZCBhcyBhIHV0aWxp dHkgc3RhdGVtZW50LCB3aGljaCBtYXkgbm90IGJlIHRoZSBjYXNlLgogCSAqLwotCWlmIChw Z3NzX2VuYWJsZWQobmVzdGluZ19sZXZlbCkKKwlpZiAocGdzc19lbmFibGVkKG5lc3Rpbmdf bGV2ZWwpICYmIGN1cnJlbnRfcXVlcnlfc2FtcGxlZAogCQkmJiBwZ3NzX3RyYWNrX3BsYW5u aW5nICYmIHF1ZXJ5X3N0cmluZwogCQkmJiBwYXJzZS0+cXVlcnlJZCAhPSBVSU5UNjRDT05T VCgwKSkKIAl7CkBAIC05OTQsMTIgKzEwMjksMTUgQEAgcGdzc19FeGVjdXRvclN0YXJ0KFF1 ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCWVsc2UKIAkJc3RhbmRhcmRfRXhl Y3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7CiAKKwl1cGRhdGVfY3VycmVudF9xdWVy eV9zYW1wbGVkKCk7CisKIAkvKgogCSAqIElmIHF1ZXJ5IGhhcyBxdWVyeUlkIHplcm8sIGRv bid0IHRyYWNrIGl0LiAgVGhpcyBwcmV2ZW50cyBkb3VibGUKIAkgKiBjb3VudGluZyBvZiBv cHRpbWl6YWJsZSBzdGF0ZW1lbnRzIHRoYXQgYXJlIGRpcmVjdGx5IGNvbnRhaW5lZCBpbgog CSAqIHV0aWxpdHkgc3RhdGVtZW50cy4KIAkgKi8KLQlpZiAocGdzc19lbmFibGVkKG5lc3Rp bmdfbGV2ZWwpICYmIHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnF1ZXJ5SWQgIT0gVUlOVDY0 Q09OU1QoMCkpCisJaWYgKHBnc3NfZW5hYmxlZChuZXN0aW5nX2xldmVsKSAmJiBjdXJyZW50 X3F1ZXJ5X3NhbXBsZWQgJiYKKwkJcXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+cXVlcnlJZCAh PSBVSU5UNjRDT05TVCgwKSkKIAl7CiAJCS8qCiAJCSAqIFNldCB1cCB0byB0cmFjayB0b3Rh bCBlbGFwc2VkIHRpbWUgaW4gRXhlY3V0b3JSdW4uICBNYWtlIHN1cmUgdGhlCkBAIC0xMTEx LDcgKzExNDksMTEgQEAgcGdzc19Qcm9jZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0bXQs IGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCXVpbnQ2NAkJc2F2ZWRfcXVlcnlJZCA9IHBz dG10LT5xdWVyeUlkOwogCWludAkJCXNhdmVkX3N0bXRfbG9jYXRpb24gPSBwc3RtdC0+c3Rt dF9sb2NhdGlvbjsKIAlpbnQJCQlzYXZlZF9zdG10X2xlbiA9IHBzdG10LT5zdG10X2xlbjsK LQlib29sCQllbmFibGVkID0gcGdzc190cmFja191dGlsaXR5ICYmIHBnc3NfZW5hYmxlZChu ZXN0aW5nX2xldmVsKTsKKwlib29sCQllbmFibGVkOworCisJdXBkYXRlX2N1cnJlbnRfcXVl cnlfc2FtcGxlZCgpOworCisJZW5hYmxlZCA9IHBnc3NfdHJhY2tfdXRpbGl0eSAmJiBwZ3Nz X2VuYWJsZWQobmVzdGluZ19sZXZlbCkgJiYgY3VycmVudF9xdWVyeV9zYW1wbGVkOwogCiAJ LyoKIAkgKiBGb3JjZSB1dGlsaXR5IHN0YXRlbWVudHMgdG8gZ2V0IHF1ZXJ5SWQgemVyby4g IFdlIGRvIHRoaXMgZXZlbiBpbiBjYXNlcwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0 X3N0YXRlbWVudHMvc3FsL3NlbGVjdC5zcWwgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50 cy9zcWwvc2VsZWN0LnNxbAppbmRleCBlMGJlNThkNWUyLi4yMWYwOWVmOTRhIDEwMDY0NAot LS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvc2VsZWN0LnNxbAorKysgYi9j b250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvc2VsZWN0LnNxbApAQCAtNTksNiArNTks MjcgQEAgREVBTExPQ0FURSBwZ3NzX3Rlc3Q7CiBTRUxFQ1QgY2FsbHMsIHJvd3MsIHF1ZXJ5 IEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOwog U0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CiAK Ky0tCistLSBzYW1wbGUgc3RhdGVtZW50cworLS0KK1NFVCBwZ19zdGF0X3N0YXRlbWVudHMu c2FtcGxlX3JhdGUgPSAwLjA7CitTRUxFQ1QgMSBBUyAiaW50IjsKK1NFTEVDVCBxdWVyeSwg Y2FsbHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAi QyI7CitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnNhbXBsZV9yYXRlID0gMS4wOworU0VMRUNU IDEgQVMgImludCI7CitTRUxFQ1QgcXVlcnksIGNhbGxzIEZST00gcGdfc3RhdF9zdGF0ZW1l bnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOworU0VMRUNUIHBnX3N0YXRfc3RhdGVt ZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CisKK3NldCBwZ19zdGF0X3N0YXRlbWVu dHMuc2FtcGxlX3JhdGUgPSAwLjA7CitzZWxlY3QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0 KCkgSVMgTk9UIE5VTEwgQVMgdDsKK1NFTEVDVCAxIFxwYXJzZSBzdG10CitcYmluZF9uYW1l ZCBzdG10IFxnCitTRUxFQ1QgcXVlcnksIGNhbGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRz IE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOworc2V0IHBnX3N0YXRfc3RhdGVtZW50cy5z YW1wbGVfcmF0ZSA9IDEuMDsKK1xiaW5kX25hbWVkIHN0bXQgXGcKK1NFTEVDVCBxdWVyeSwg Y2FsbHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAi QyI7CitzZWxlY3QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMg dDsKKwogLS0KIC0tIHF1ZXJpZXMgd2l0aCBsb2NraW5nIGNsYXVzZXMKIC0tCmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sIGIvZG9jL3NyYy9zZ21s L3Bnc3RhdHN0YXRlbWVudHMuc2dtbAppbmRleCA1MDFiNDY4ZTlhLi44YWRlNGUzY2VkIDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNnbWwKQEAgLTkzNiw2ICs5MzYsMjQgQEAK ICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50 cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3N0YXRfc3RhdGVtZW50cy5zYW1w bGVfcmF0ZTwvdmFybmFtZT4gKDx0eXBlPnJlYWw8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJt PgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRzLnNhbXBsZV9y YXRlPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAg PC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIDx2YXJuYW1lPnBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZTwvdmFy bmFtZT4gY2F1c2VzIHBnX3N0YXRfc3RhdGVtZW50cyB0byBvbmx5CisgICAgICB0cmFjayBh IGZyYWN0aW9uIG9mIHRoZSBzdGF0ZW1lbnRzIGluIGVhY2ggc2Vzc2lvbi4gVGhlIGRlZmF1 bHQgaXMgMSwKKyAgICAgIG1lYW5pbmcgdHJhY2sgYWxsIHRoZSBxdWVyaWVzLiBJbiBjYXNl IG9mIG5lc3RlZCBzdGF0ZW1lbnRzLAorICAgICAgZWl0aGVyIGFsbCB3aWxsIGJlIHRyYWNr ZWQgb3Igbm9uZS4gT25seSBzdXBlcnVzZXJzIGNhbiBjaGFuZ2UgdGhpcyBzZXR0aW5nLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAg ICA8dmFybGlzdGVudHJ5PgogICAgIDx0ZXJtPgogICAgICA8dmFybmFtZT5wZ19zdGF0X3N0 YXRlbWVudHMuc2F2ZTwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQotLSAKMi4z NC4xCgo= --------------eTH2IqIg42ZUC5elDRsiTkp0--