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 1rzBRY-002LtO-7P for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Apr 2024 08:24:00 +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 1rzBRV-007GHn-W6 for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Apr 2024 08:23:57 +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 1rzBRV-007GHe-9H for pgsql-hackers@lists.postgresql.org; Tue, 23 Apr 2024 08:23:57 +0000 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rzBRS-004Dj5-1q for pgsql-hackers@lists.postgresql.org; Tue, 23 Apr 2024 08:23:56 +0000 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-2a87bd53dc3so4344089a91.2 for ; Tue, 23 Apr 2024 01:23:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713860633; x=1714465433; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=i5vBylWlA9IeWP5h+iGUtsIgUZCQg0O0rlM+DFFmgBA=; b=jHfnaR66sHJKm+ec8d0VZF6BOkwjpypZWF2UMKxaiNeOprFY8QojHEw/oioc7tE6gM 8AkO8c/sQm7SXWSj+npm+d40GqH24bkCReOA9LMd5Tqsid9ZBoQmI4CGzWhlDJAWcN/m 1VY5hUMW+ghDSntf+x01EkhCHKLfyQwzJOHkZoOda2y5ZkhCoI5jL1aT3cHgY1G+Jfzv DoQl2ruTHUXECLzF/B14AqblSQMiqBTXDlpspBtGCs4/w10xpsJRC/q6QP0keceh0GdI We5f9jSVKi8cg6i1VFfKaywmbAfkHCFiUVFJYnL8NlPumzaXwcObn9qkyFheOx7fc4SR w98Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713860633; x=1714465433; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=i5vBylWlA9IeWP5h+iGUtsIgUZCQg0O0rlM+DFFmgBA=; b=TMk3W3F3I81XTfmxLpMk/A5BOIMWk8zZVEFokq6xeZ5xwpHpaaQald3mSB+Qp7wwCo iti2u5Okw/t4L0DsedUy6B70Cq5O+PWgf2X5/EXinXGb8975vbiXpdiqZSDLeylHi1wS lD6UZIeeonO6XX2jcWjvHBY2UDhIDGy/hmPJpgtZbKoMOzAuoT5kf64LUqSY5IitjSWW 3UY4FLuNRXYfjBRHDN94eickd4yDhF9ETNCofwKCIOag/WIceuySDB2I4aiORT9pQ546 ZU9tExN9x5Wic7t7mS6I2ClQuH2pBIKq3aHl64NvPvKZLZiIYo/+b0Pb/2ic210piMJf ITmA== X-Gm-Message-State: AOJu0YzuEKpR+OSaBtcbla0x49j1VwvGswb1Ig3aOyxT3OmjvjtAMjVz Jiy/eiPBKm2GJHg1mF9dlXY5P8xa7iqHLL16m3gF5vh5u533je+mANt7q0dg5CVOah3zJc+aTCP DXvwiRKRqbVzhWyEfDqgX8xC/c5Fj5hsE X-Google-Smtp-Source: AGHT+IGbgrHqZ2jH4bCSSOl7uv2YxJ8bc1vi/LogftX01Mw05PdX0+h3u9yXRXmjpG5BEwKS2wwOy1IVw/PKVma/S8Q= X-Received: by 2002:a17:90a:ebd1:b0:2a3:be59:e969 with SMTP id cf17-20020a17090aebd100b002a3be59e969mr8625934pjb.47.1713860632726; Tue, 23 Apr 2024 01:23:52 -0700 (PDT) MIME-Version: 1.0 From: Maxim Orlov Date: Tue, 23 Apr 2024 11:23:41 +0300 Message-ID: Subject: POC: make mxidoff 64 bits To: Postgres hackers Content-Type: multipart/mixed; boundary="0000000000003581fa0616bf4656" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003581fa0616bf4656 Content-Type: multipart/alternative; boundary="0000000000003581f80616bf4654" --0000000000003581f80616bf4654 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi! I've been trying to introduce 64-bit transaction identifications to Postgres for quite a while [0]. All this implies, of course, an enormous amount of change that will have to take place in various modules. Consider this, the patch set become too big to be committed =E2=80=9Cat once=E2=80=9D. The obvious solutions was to try to split the patch set into smaller ones. But here it comes a new challenge, not every one of these parts, make Postgres better at the moment. Actually, even switching to a FullTransactionId in PGPROC will have disadvantage in increasing of WAL size [1]. In fact, I believe, we're dealing with the chicken and the egg problem here. Not able to commit full patch set since it is too big to handle and not able to commit parts of it, since they make sense all together and do not help improve Postgres at the moment. But it's not that bad. Since the commit 4ed8f0913bfdb5f, added in [3], we are capable to use 64 bits to indexing SLRUs. PROPOSAL Make multixact offsets 64 bit. RATIONALE It is not very difficult to overflow 32-bit mxidoff. Since, it is created for every unique combination of the transaction for each tuple, including XIDs and respective flags. And when a transaction is added to a specific multixact, it is rewritten with a new offset. In other words, it is possible to overflow the offsets of multixacts without overflowing the multixacts themselves and/or ordinary transactions. I believe, there was something about in the hackers mail lists, but I could not find links now. PFA, patch. Here is a WIP version. Upgrade machinery should be added later. As always, any opinions on a subject a very welcome! [0] https://www.postgresql.org/message-id/flat/CACG%3DezZe1NQSCnfHOr78AtAZxJZeC= vxrts0ygrxYwe%3DpyyjVWA%40mail.gmail.com [1] https://www.postgresql.org/message-id/flat/CACG%3DezY7msw%2Bjip%3Drtfvnfz05= 1dRqz4s-diuO46v3rAoAE0T0g%40mail.gmail.com [3] https://postgr.es/m/CAJ7c6TPDOYBYrnCAeyndkBktO0WG2xSdYduTF0nxq%2BvfkmTF5Q%4= 0mail.gmail.com --=20 Best regards, Maxim Orlov. --0000000000003581f80616bf4654 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi!

I'= ve been trying to introduce 64-bit transaction identifications to Postgres = for quite a while [0]. All this implies,
of course, an enormous amount of change that will have to take pla= ce in various modules. Consider this, the
patch set become too big to be committed =E2=80=9Cat once=E2=80=9D= .

The obvious solutions was to try to split the patch set into smaller ones. But here it come= s a new challenge,
not every one = of these parts, make Postgres better at the moment. Actually, even switch= ing to a
FullTransactionId in PGP= ROC will have disadvantage in increasing of WAL size [1].

In = fact, I believe, we're dealing with the chicken and the egg problem her= e. Not able to commit full patch set
since it is too big to handle and not able to commit parts of it, sinc= e they make sense all together and do not
help improve Postgres at the moment.

But it's not = that bad. Since the commit 4ed8f0913bfdb5f, added in [3], we are capable t= o use 64 bits to
indexing SLRUs.<= /div>

PROPOSAL
Make multixac= t offsets 64 bit.

RATIONALE
It is not very difficult to over= flow 32-bit mxidoff. Since, it is created for every unique combination of = the
transaction for each tuple, i= ncluding XIDs and respective flags. And when a transaction is added = to a
specific multix= act, it is rewritten with a new offset. In other words, it is= possible to overflow the offsets of
multixacts without overflowing the multixacts themselv= es and/or ordinary transactions. I believe, there
was something about in the hackers mail lists, bu= t I could not find links now.

=
PFA, patch. Here is a WIP versio= n. Upgrade machinery should be added later.

As always, any opi= nions on a subject a very welcome!

[1] https://www.postgresql.org/message-id/flat/CACG= %3DezY7msw%2Bjip%3Drtfvnfz051dRqz4s-diuO46v3rAoAE0T0g%40mail.gmail.com<= /div>
--
Best regards,
Maxim Orlov.<= /div>
--0000000000003581f80616bf4654-- --0000000000003581fa0616bf4656 Content-Type: application/octet-stream; name="0001-WIP-mxidoff-to-64bit.patch" Content-Disposition: attachment; filename="0001-WIP-mxidoff-to-64bit.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvc4bgpd0 RnJvbSA2MjJhNDdjMmZlN2IxMGRlMzk4MzkwMzU4Y2VlOTcxNTFmMTBmYmI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8bS5vcmxvdkBwb3N0Z3Jlc3Byby5ydT4K RGF0ZTogV2VkLCA2IE1hciAyMDI0IDExOjExOjMzICswMzAwClN1YmplY3Q6IFtQQVRDSF0gV0lQ IDogbXhpZG9mZiB0byA2NGJpdAoKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhh Y3RkZXNjLmMgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNj LmMgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jICAg IHwgMjMwICsrKystLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2dyZWNvdmVyeS5jIHwgICA1ICstCiBzcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRy b2xkYXRhLmMgICB8ICAgNCArLQogc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jICAg ICAgICAgfCAgMTAgKy0KIHNyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwgICAgICAg IHwgICAyICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggICAgICAgICAgICB8ICAg MiArLQogc3JjL2luY2x1ZGUvYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0K IDkgZmlsZXMgY2hhbmdlZCwgNTggaW5zZXJ0aW9ucygrKSwgMjEwIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYwppbmRleCAzZThhZDRkNWVmLi4xYjQ4 NmRlMzhjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNj LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5jCkBAIC02NSw4 ICs2NSw4IEBAIG11bHRpeGFjdF9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCkKIAkJeGxfbXVsdGl4YWN0X2NyZWF0ZSAqeGxyZWMgPSAoeGxfbXVsdGl4YWN0X2Ny ZWF0ZSAqKSByZWM7CiAJCWludAkJCWk7CiAKLQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIldSBv ZmZzZXQgJXUgbm1lbWJlcnMgJWQ6ICIsIHhscmVjLT5taWQsCi0JCQkJCQkgeGxyZWMtPm1vZmYs IHhscmVjLT5ubWVtYmVycyk7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXUgb2Zmc2V0ICVs bHUgbm1lbWJlcnMgJWQ6ICIsIHhscmVjLT5taWQsCisJCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9u ZykgeGxyZWMtPm1vZmYsIHhscmVjLT5ubWVtYmVycyk7CiAJCWZvciAoaSA9IDA7IGkgPCB4bHJl Yy0+bm1lbWJlcnM7IGkrKykKIAkJCW91dF9tZW1iZXIoYnVmLCAmeGxyZWMtPm1lbWJlcnNbaV0p OwogCX0KQEAgLTc0LDkgKzc0LDEwIEBAIG11bHRpeGFjdF9kZXNjKFN0cmluZ0luZm8gYnVmLCBY TG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAl7CiAJCXhsX211bHRpeGFjdF90cnVuY2F0ZSAqeGxy ZWMgPSAoeGxfbXVsdGl4YWN0X3RydW5jYXRlICopIHJlYzsKIAotCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIm9mZnNldHMgWyV1LCAldSksIG1lbWJlcnMgWyV1LCAldSkiLAorCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIm9mZnNldHMgWyV1LCAldSksIG1lbWJlcnMgWyVsbHUsICVsbHUpIiwKIAkJ CQkJCSB4bHJlYy0+c3RhcnRUcnVuY09mZiwgeGxyZWMtPmVuZFRydW5jT2ZmLAotCQkJCQkJIHhs cmVjLT5zdGFydFRydW5jTWVtYiwgeGxyZWMtPmVuZFRydW5jTWVtYik7CisJCQkJCQkgKHVuc2ln bmVkIGxvbmcgbG9uZykgeGxyZWMtPnN0YXJ0VHJ1bmNNZW1iLAorCQkJCQkJICh1bnNpZ25lZCBs b25nIGxvbmcpIHhscmVjLT5lbmRUcnVuY01lbWIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MveGxvZ2Rlc2MuYwppbmRleCBlNDU1NDAwNzE2Li4xZTRhYmM3YmNmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYwpAQCAtNDUsNyArNDUsNyBAQCB4bG9nX2Rl c2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQlDaGVja1BvaW50 ICpjaGVja3BvaW50ID0gKENoZWNrUG9pbnQgKikgcmVjOwogCiAJCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAicmVkbyAlWC8lWDsgIgotCQkJCQkJICJ0bGkgJXU7IHByZXYgdGxpICV1OyBmcHcgJXM7 IHhpZCAldToldTsgb2lkICV1OyBtdWx0aSAldTsgb2Zmc2V0ICV1OyAiCisJCQkJCQkgInRsaSAl dTsgcHJldiB0bGkgJXU7IGZwdyAlczsgeGlkICV1OiV1OyBvaWQgJXU7IG11bHRpICV1OyBvZmZz ZXQgJWxsdTsgIgogCQkJCQkJICJvbGRlc3QgeGlkICV1IGluIERCICV1OyBvbGRlc3QgbXVsdGkg JXUgaW4gREIgJXU7ICIKIAkJCQkJCSAib2xkZXN0L25ld2VzdCBjb21taXQgdGltZXN0YW1wIHhp ZDogJXUvJXU7ICIKIAkJCQkJCSAib2xkZXN0IHJ1bm5pbmcgeGlkICV1OyAlcyIsCkBAIC01Nyw3 ICs1Nyw3IEBAIHhsb2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNv cmQpCiAJCQkJCQkgWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKGNoZWNrcG9pbnQtPm5leHRYaWQp LAogCQkJCQkJIGNoZWNrcG9pbnQtPm5leHRPaWQsCiAJCQkJCQkgY2hlY2twb2ludC0+bmV4dE11 bHRpLAotCQkJCQkJIGNoZWNrcG9pbnQtPm5leHRNdWx0aU9mZnNldCwKKwkJCQkJCSAodW5zaWdu ZWQgbG9uZyBsb25nKSBjaGVja3BvaW50LT5uZXh0TXVsdGlPZmZzZXQsCiAJCQkJCQkgY2hlY2tw b2ludC0+b2xkZXN0WGlkLAogCQkJCQkJIGNoZWNrcG9pbnQtPm9sZGVzdFhpZERCLAogCQkJCQkJ IGNoZWNrcG9pbnQtPm9sZGVzdE11bHRpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhh Y3QuYwppbmRleCAzODBjODY2ZDcxLi5hNTQ3ZDY1OThmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9tdWx0aXhhY3QuYwpAQCAtOTUsMTQgKzk1LDYgQEAKIC8qCiAgKiBEZWZpbmVzIGZvciBN dWx0aVhhY3RPZmZzZXQgcGFnZSBzaXplcy4gIEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMg aXMKICAqIHVzZWQgZXZlcnl3aGVyZSBlbHNlIGluIFBvc3RncmVzLgotICoKLSAqIE5vdGU6IGJl Y2F1c2UgTXVsdGlYYWN0T2Zmc2V0cyBhcmUgMzIgYml0cyBhbmQgd3JhcCBhcm91bmQgYXQgMHhG RkZGRkZGRiwKLSAqIE11bHRpWGFjdCBwYWdlIG51bWJlcmluZyBhbHNvIHdyYXBzIGFyb3VuZCBh dAotICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSwgYW5kIHNlZ21lbnQg bnVtYmVyaW5nIGF0Ci0gKiAweEZGRkZGRkZGL01VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFL1NM UlVfUEFHRVNfUEVSX1NFR01FTlQuICBXZSBuZWVkCi0gKiB0YWtlIG5vIGV4cGxpY2l0IG5vdGlj ZSBvZiB0aGF0IGZhY3QgaW4gdGhpcyBtb2R1bGUsIGV4Y2VwdCB3aGVuIGNvbXBhcmluZwotICog c2VnbWVudCBhbmQgcGFnZSBudW1iZXJzIGluIFRydW5jYXRlTXVsdGlYYWN0IChzZWUKLSAqIE11 bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcykuCiAgKi8KIAogLyogV2UgbmVlZCBmb3VyIGJ5dGVz IHBlciBvZmZzZXQgKi8KQEAgLTE1Niw3ICsxNDgsNyBAQAogCQkoKHVpbnQzMikgKCgweEZGRkZG RkZGICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UpICsgMSkpCiAKIC8qIHBhZ2UgaW4gd2hp Y2ggYSBtZW1iZXIgaXMgdG8gYmUgZm91bmQgKi8KLSNkZWZpbmUgTVhPZmZzZXRUb01lbWJlclBh Z2UoeGlkKSAoKHhpZCkgLyAoVHJhbnNhY3Rpb25JZCkgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BB R0UpCisjZGVmaW5lIE1YT2Zmc2V0VG9NZW1iZXJQYWdlKHhpZCkgKCh4aWQpIC8gKE11bHRpWGFj dE9mZnNldCkgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UpCiAjZGVmaW5lIE1YT2Zmc2V0VG9N ZW1iZXJTZWdtZW50KHhpZCkgKE1YT2Zmc2V0VG9NZW1iZXJQYWdlKHhpZCkgLyBTTFJVX1BBR0VT X1BFUl9TRUdNRU5UKQogCiAvKiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9m IGZsYWcgd29yZCBmb3IgYSBnaXZlbiBtZW1iZXIgKi8KQEAgLTIzMCw5ICsyMjIsNiBAQCB0eXBl ZGVmIHN0cnVjdCBNdWx0aVhhY3RTdGF0ZURhdGEKIAlNdWx0aVhhY3RJZCBtdWx0aVN0b3BMaW1p dDsKIAlNdWx0aVhhY3RJZCBtdWx0aVdyYXBMaW1pdDsKIAotCS8qIHN1cHBvcnQgZm9yIG1lbWJl cnMgYW50aS13cmFwYXJvdW5kIG1lYXN1cmVzICovCi0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldFN0 b3BMaW1pdDsJLyoga25vd24gaWYgb2xkZXN0T2Zmc2V0S25vd24gKi8KLQogCS8qCiAJICogVGhp cyBpcyB1c2VkIHRvIHNsZWVwIHVudGlsIGEgbXVsdGl4YWN0IG9mZnNldCBpcyB3cml0dGVuIHdo ZW4gd2Ugd2FudAogCSAqIHRvIGNyZWF0ZSB0aGUgbmV4dCBvbmUuCkBAIC0zNjcsOCArMzU2LDYg QEAgc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlYYWN0T2Zmc2V0IG9m ZnNldDEsCiAJCQkJCQkJCQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0Mik7CiBzdGF0aWMgdm9pZCBF eHRlbmRNdWx0aVhhY3RPZmZzZXQoTXVsdGlYYWN0SWQgbXVsdGkpOwogc3RhdGljIHZvaWQgRXh0 ZW5kTXVsdGlYYWN0TWVtYmVyKE11bHRpWGFjdE9mZnNldCBvZmZzZXQsIGludCBubWVtYmVycyk7 Ci1zdGF0aWMgYm9vbCBNdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVsdGlYYWN0T2Zmc2V0IGJv dW5kYXJ5LAotCQkJCQkJCQkJIE11bHRpWGFjdE9mZnNldCBzdGFydCwgdWludDMyIGRpc3RhbmNl KTsKIHN0YXRpYyBib29sIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCk7CiBz dGF0aWMgYm9vbCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlY YWN0T2Zmc2V0ICpyZXN1bHQpOwogc3RhdGljIHZvaWQgV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKGlu dDY0IHBhZ2VubywgdWludDggaW5mbyk7CkBAIC0xMTE3LDc4ICsxMTA0LDYgQEAgR2V0TmV3TXVs dGlYYWN0SWQoaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RPZmZzZXQgKm9mZnNldCkKIAllbHNlCiAJ CSpvZmZzZXQgPSBuZXh0T2Zmc2V0OwogCi0JLyotLS0tLS0tLS0tCi0JICogUHJvdGVjdCBhZ2Fp bnN0IG92ZXJydW4gb2YgdGhlIG1lbWJlcnMgc3BhY2UgYXMgd2VsbCwgd2l0aCB0aGUKLQkgKiBm b2xsb3dpbmcgcnVsZXM6Ci0JICoKLQkgKiBJZiB3ZSdyZSBwYXN0IG9mZnNldFN0b3BMaW1pdCwg cmVmdXNlIHRvIGdlbmVyYXRlIG1vcmUgbXVsdGlzLgotCSAqIElmIHdlJ3JlIGNsb3NlIHRvIG9m ZnNldFN0b3BMaW1pdCwgZW1pdCBhIHdhcm5pbmcuCi0JICoKLQkgKiBBcmJpdHJhcmlseSwgd2Ug c3RhcnQgZW1pdHRpbmcgd2FybmluZ3Mgd2hlbiB3ZSdyZSAyMCBzZWdtZW50cyBvciBsZXNzCi0J ICogZnJvbSBvZmZzZXRTdG9wTGltaXQuCi0JICoKLQkgKiBOb3RlIHdlIGhhdmVuJ3QgdXBkYXRl ZCB0aGUgc2hhcmVkIHN0YXRlIHlldCwgc28gaWYgd2UgZmFpbCBhdCB0aGlzCi0JICogcG9pbnQs IHRoZSBtdWx0aXhhY3QgSUQgd2UgZ3JhYmJlZCBjYW4gc3RpbGwgYmUgdXNlZCBieSB0aGUgbmV4 dCBndXkuCi0JICoKLQkgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gcG9pbnQgaW4gZm9yY2luZyBh dXRvdmFjdXVtIHJ1bnMgaGVyZTogdGhlCi0JICogbXVsdGl4YWN0IGZyZWV6ZSBzZXR0aW5ncyB3 b3VsZCBoYXZlIHRvIGJlIHJlZHVjZWQgZm9yIHRoYXQgdG8gaGF2ZSBhbnkKLQkgKiBlZmZlY3Qu Ci0JICotLS0tLS0tLS0tCi0JICovCi0jZGVmaW5lIE9GRlNFVF9XQVJOX1NFR01FTlRTCTIwCi0J aWYgKE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93biAmJgotCQlNdWx0aVhhY3RPZmZz ZXRXb3VsZFdyYXAoTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdCwgbmV4dE9mZnNldCwK LQkJCQkJCQkJIG5tZW1iZXJzKSkKLQl7Ci0JCS8qIHNlZSBjb21tZW50IGluIHRoZSBjb3JyZXNw b25kaW5nIG9mZnNldHMgd3JhcGFyb3VuZCBjYXNlICovCi0JCVNlbmRQb3N0bWFzdGVyU2lnbmFs KFBNU0lHTkFMX1NUQVJUX0FVVE9WQUNfTEFVTkNIRVIpOwotCi0JCWVyZXBvcnQoRVJST1IsCi0J CQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKLQkJCQkgZXJybXNn KCJtdWx0aXhhY3QgXCJtZW1iZXJzXCIgbGltaXQgZXhjZWVkZWQiKSwKLQkJCQkgZXJyZGV0YWls X3BsdXJhbCgiVGhpcyBjb21tYW5kIHdvdWxkIGNyZWF0ZSBhIG11bHRpeGFjdCB3aXRoICV1IG1l bWJlcnMsIGJ1dCB0aGUgcmVtYWluaW5nIHNwYWNlIGlzIG9ubHkgZW5vdWdoIGZvciAldSBtZW1i ZXIuIiwKLQkJCQkJCQkJICAiVGhpcyBjb21tYW5kIHdvdWxkIGNyZWF0ZSBhIG11bHRpeGFjdCB3 aXRoICV1IG1lbWJlcnMsIGJ1dCB0aGUgcmVtYWluaW5nIHNwYWNlIGlzIG9ubHkgZW5vdWdoIGZv ciAldSBtZW1iZXJzLiIsCi0JCQkJCQkJCSAgTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1p dCAtIG5leHRPZmZzZXQgLSAxLAotCQkJCQkJCQkgIG5tZW1iZXJzLAotCQkJCQkJCQkgIE11bHRp WGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zmc2V0IC0gMSksCi0JCQkJIGVycmhp bnQoIkV4ZWN1dGUgYSBkYXRhYmFzZS13aWRlIFZBQ1VVTSBpbiBkYXRhYmFzZSB3aXRoIE9JRCAl dSB3aXRoIHJlZHVjZWQgdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWluX2FnZSBhbmQgdmFjdXVt X211bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlIHNldHRpbmdzLiIsCi0JCQkJCQkgTXVsdGlYYWN0 U3RhdGUtPm9sZGVzdE11bHRpWGFjdERCKSkpOwotCX0KLQotCS8qCi0JICogQ2hlY2sgd2hldGhl ciB3ZSBzaG91bGQga2ljayBhdXRvdmFjdXVtIGludG8gYWN0aW9uLCB0byBwcmV2ZW50IG1lbWJl cnMKLQkgKiB3cmFwYXJvdW5kLiBOQiB3ZSB1c2UgYSBtdWNoIGxhcmdlciB3aW5kb3cgdG8gdHJp Z2dlciBhdXRvdmFjdXVtIHRoYW4KLQkgKiBqdXN0IHRoZSB3YXJuaW5nIGxpbWl0LiBUaGUgd2Fy bmluZyBpcyBqdXN0IGEgbWVhc3VyZSBvZiBsYXN0IHJlc29ydCAtCi0JICogdGhpcyBpcyBpbiBs aW5lIHdpdGggR2V0TmV3VHJhbnNhY3Rpb25JZCdzIGJlaGF2aW91ci4KLQkgKi8KLQlpZiAoIU11 bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93biB8fAotCQkoTXVsdGlYYWN0U3RhdGUtPm5l eHRPZmZzZXQgLSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0Ci0JCSA+IE1VTFRJWEFDVF9N RU1CRVJfU0FGRV9USFJFU0hPTEQpKQotCXsKLQkJLyoKLQkJICogVG8gYXZvaWQgc3dhbXBpbmcg dGhlIHBvc3RtYXN0ZXIgd2l0aCBzaWduYWxzLCB3ZSBpc3N1ZSB0aGUgYXV0b3ZhYwotCQkgKiBy ZXF1ZXN0IG9ubHkgd2hlbiBjcm9zc2luZyBhIHNlZ21lbnQgYm91bmRhcnkuIFdpdGggZGVmYXVs dAotCQkgKiBjb21waWxhdGlvbiBzZXR0aW5ncyB0aGF0J3Mgcm91Z2hseSBhZnRlciA1MGsgbWVt YmVycy4gIFRoaXMgc3RpbGwKLQkJICogZ2l2ZXMgcGxlbnR5IG9mIGNoYW5jZXMgYmVmb3JlIHdl IGdldCBpbnRvIHJlYWwgdHJvdWJsZS4KLQkJICovCi0JCWlmICgoTVhPZmZzZXRUb01lbWJlclBh Z2UobmV4dE9mZnNldCkgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSAhPQotCQkJKE1YT2Zmc2V0 VG9NZW1iZXJQYWdlKG5leHRPZmZzZXQgKyBubWVtYmVycykgLyBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UKSkKLQkJCVNlbmRQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX1NUQVJUX0FVVE9WQUNfTEFV TkNIRVIpOwotCX0KLQotCWlmIChNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gJiYK LQkJTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGlt aXQsCi0JCQkJCQkJCSBuZXh0T2Zmc2V0LAotCQkJCQkJCQkgbm1lbWJlcnMgKyBNVUxUSVhBQ1Rf TUVNQkVSU19QRVJfUEFHRSAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgKiBPRkZTRVRfV0FSTl9T RUdNRU5UUykpCi0JCWVyZXBvcnQoV0FSTklORywKLQkJCQkoZXJyY29kZShFUlJDT0RFX1BST0dS QU1fTElNSVRfRVhDRUVERUQpLAotCQkJCSBlcnJtc2dfcGx1cmFsKCJkYXRhYmFzZSB3aXRoIE9J RCAldSBtdXN0IGJlIHZhY3V1bWVkIGJlZm9yZSAlZCBtb3JlIG11bHRpeGFjdCBtZW1iZXIgaXMg dXNlZCIsCi0JCQkJCQkJICAgImRhdGFiYXNlIHdpdGggT0lEICV1IG11c3QgYmUgdmFjdXVtZWQg YmVmb3JlICVkIG1vcmUgbXVsdGl4YWN0IG1lbWJlcnMgYXJlIHVzZWQiLAotCQkJCQkJCSAgIE11 bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zmc2V0ICsgbm1lbWJlcnMsCi0J CQkJCQkJICAgTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdERCLAotCQkJCQkJCSAgIE11 bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zmc2V0ICsgbm1lbWJlcnMpLAot CQkJCSBlcnJoaW50KCJFeGVjdXRlIGEgZGF0YWJhc2Utd2lkZSBWQUNVVU0gaW4gdGhhdCBkYXRh YmFzZSB3aXRoIHJlZHVjZWQgdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWluX2FnZSBhbmQgdmFj dXVtX211bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlIHNldHRpbmdzLiIpKSk7Ci0KIAlFeHRlbmRN dWx0aVhhY3RNZW1iZXIobmV4dE9mZnNldCwgbm1lbWJlcnMpOwogCiAJLyoKQEAgLTEyMTcsNyAr MTEzMiw4IEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywgTXVsdGlYYWN0T2Zmc2V0 ICpvZmZzZXQpCiAKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCi0JZGVidWdf ZWxvZzQoREVCVUcyLCAiR2V0TmV3OiByZXR1cm5pbmcgJXUgb2Zmc2V0ICV1IiwgcmVzdWx0LCAq b2Zmc2V0KTsKKwlkZWJ1Z19lbG9nNChERUJVRzIsICJHZXROZXc6IHJldHVybmluZyAldSBvZmZz ZXQgJWxsdSIsIHJlc3VsdCwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSAqb2Zmc2V0KTsKIAly ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xOTI2LDcgKzE4NDIsNyBAQCBNdWx0aVhhY3RTaG1lbUlu aXQodm9pZCkKIAkJCQkgICJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsIExXVFJBTkNIRV9NVUxUSVhB Q1RPRkZTRVRfQlVGRkVSLAogCQkJCSAgTFdUUkFOQ0hFX01VTFRJWEFDVE9GRlNFVF9TTFJVLAog CQkJCSAgU1lOQ19IQU5ETEVSX01VTFRJWEFDVF9PRkZTRVQsCi0JCQkJICBmYWxzZSk7CisJCQkJ ICB0cnVlKTsKIAlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKE11bHRpWGFjdE9mZnNldEN0bCwg TVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UpOwogCVNpbXBsZUxydUluaXQoTXVsdGlYYWN0TWVt YmVyQ3RsLAogCQkJCSAgIm11bHRpeGFjdF9tZW1iZXIiLCBtdWx0aXhhY3RfbWVtYmVyX2J1ZmZl cnMsIDAsCkBAIC0yMjQ0LDggKzIxNjAsOSBAQCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9v bCBpc19zaHV0ZG93biwKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCiAJZGVi dWdfZWxvZzYoREVCVUcyLAotCQkJCSJNdWx0aVhhY3Q6IGNoZWNrcG9pbnQgaXMgbmV4dE11bHRp ICV1LCBuZXh0T2Zmc2V0ICV1LCBvbGRlc3RNdWx0aSAldSBpbiBEQiAldSIsCi0JCQkJKm5leHRN dWx0aSwgKm5leHRNdWx0aU9mZnNldCwgKm9sZGVzdE11bHRpLCAqb2xkZXN0TXVsdGlEQik7CisJ CQkJIk11bHRpWGFjdDogY2hlY2twb2ludCBpcyBuZXh0TXVsdGkgJXUsIG5leHRPZmZzZXQgJWxs dSwgb2xkZXN0TXVsdGkgJXUgaW4gREIgJXUiLAorCQkJCSpuZXh0TXVsdGksICh1bnNpZ25lZCBs b25nIGxvbmcpICpuZXh0TXVsdGlPZmZzZXQsICpvbGRlc3RNdWx0aSwKKwkJCQkqb2xkZXN0TXVs dGlEQik7CiB9CiAKIC8qCkBAIC0yMjc5LDggKzIxOTYsOCBAQCB2b2lkCiBNdWx0aVhhY3RTZXRO ZXh0TVhhY3QoTXVsdGlYYWN0SWQgbmV4dE11bHRpLAogCQkJCQkgIE11bHRpWGFjdE9mZnNldCBu ZXh0TXVsdGlPZmZzZXQpCiB7Ci0JZGVidWdfZWxvZzQoREVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0 aW5nIG5leHQgbXVsdGkgdG8gJXUgb2Zmc2V0ICV1IiwKLQkJCQluZXh0TXVsdGksIG5leHRNdWx0 aU9mZnNldCk7CisJZGVidWdfZWxvZzQoREVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQg bXVsdGkgdG8gJXUgb2Zmc2V0ICVsbHUiLAorCQkJCW5leHRNdWx0aSwgKHVuc2lnbmVkIGxvbmcg bG9uZykgbmV4dE11bHRpT2Zmc2V0KTsKIAlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ss IExXX0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCA9IG5leHRNdWx0aTsK IAlNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldCA9IG5leHRNdWx0aU9mZnNldDsKQEAgLTI0NzAs OCArMjM4Nyw4IEBAIE11bHRpWGFjdEFkdmFuY2VOZXh0TVhhY3QoTXVsdGlYYWN0SWQgbWluTXVs dGksCiAJfQogCWlmIChNdWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RTdGF0ZS0+bmV4 dE9mZnNldCwgbWluTXVsdGlPZmZzZXQpKQogCXsKLQkJZGVidWdfZWxvZzMoREVCVUcyLCAiTXVs dGlYYWN0OiBzZXR0aW5nIG5leHQgb2Zmc2V0IHRvICV1IiwKLQkJCQkJbWluTXVsdGlPZmZzZXQp OworCQlkZWJ1Z19lbG9nMyhERUJVRzIsICJNdWx0aVhhY3Q6IHNldHRpbmcgbmV4dCBvZmZzZXQg dG8gJWxsdSIsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIG1pbk11bHRpT2Zmc2V0KTsKIAkJ TXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQgPSBtaW5NdWx0aU9mZnNldDsKIAl9CiAJTFdMb2Nr UmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKQEAgLTI2NzAsOCArMjU4Nyw2IEBAIFNldE9mZnNl dFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAlNdWx0aVhhY3RPZmZzZXQgbmV4dE9mZnNl dDsKIAlib29sCQlvbGRlc3RPZmZzZXRLbm93biA9IGZhbHNlOwogCWJvb2wJCXByZXZPbGRlc3RP ZmZzZXRLbm93bjsKLQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0U3RvcExpbWl0ID0gMDsKLQlNdWx0 aVhhY3RPZmZzZXQgcHJldk9mZnNldFN0b3BMaW1pdDsKIAogCS8qCiAJICogTkI6IEhhdmUgdG8g cHJldmVudCBjb25jdXJyZW50IHRydW5jYXRpb24sIHdlIG1pZ2h0IG90aGVyd2lzZSB0cnkgdG8K QEAgLTI2ODYsNyArMjYwMSw2IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1 cCkKIAluZXh0T2Zmc2V0ID0gTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQ7CiAJcHJldk9sZGVz dE9mZnNldEtub3duID0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duOwogCXByZXZP bGRlc3RPZmZzZXQgPSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0OwotCXByZXZPZmZzZXRT dG9wTGltaXQgPSBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0OwogCUFzc2VydChNdWx0 aVhhY3RTdGF0ZS0+ZmluaXNoZWRTdGFydHVwKTsKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdl bkxvY2spOwogCkBAIC0yNzE3LDExICsyNjMxLDcgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9v bCBpc19zdGFydHVwKQogCQlvbGRlc3RPZmZzZXRLbm93biA9CiAJCQlmaW5kX211bHRpeGFjdF9z dGFydChvbGRlc3RNdWx0aVhhY3RJZCwgJm9sZGVzdE9mZnNldCk7CiAKLQkJaWYgKG9sZGVzdE9m ZnNldEtub3duKQotCQkJZXJlcG9ydChERUJVRzEsCi0JCQkJCShlcnJtc2dfaW50ZXJuYWwoIm9s ZGVzdCBNdWx0aVhhY3RJZCBtZW1iZXIgaXMgYXQgb2Zmc2V0ICV1IiwKLQkJCQkJCQkJCSBvbGRl c3RPZmZzZXQpKSk7Ci0JCWVsc2UKKwkJaWYgKCFvbGRlc3RPZmZzZXRLbm93bikKIAkJCWVyZXBv cnQoTE9HLAogCQkJCQkoZXJybXNnKCJNdWx0aVhhY3QgbWVtYmVyIHdyYXBhcm91bmQgcHJvdGVj dGlvbnMgYXJlIGRpc2FibGVkIGJlY2F1c2Ugb2xkZXN0IGNoZWNrcG9pbnRlZCBNdWx0aVhhY3Qg JXUgZG9lcyBub3QgZXhpc3Qgb24gZGlzayIsCiAJCQkJCQkJb2xkZXN0TXVsdGlYYWN0SWQpKSk7 CkBAIC0yNzM0LDI0ICsyNjQ0LDcgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFy dHVwKQogCSAqIG92ZXJydW4gb2Ygb2xkIGRhdGEgaW4gdGhlIG1lbWJlcnMgU0xSVSBhcmVhLiBX ZSBjYW4gb25seSBkbyBzbyBpZiB0aGUKIAkgKiBvbGRlc3Qgb2Zmc2V0IGlzIGtub3duIHRob3Vn aC4KIAkgKi8KLQlpZiAob2xkZXN0T2Zmc2V0S25vd24pCi0JewotCQkvKiBtb3ZlIGJhY2sgdG8g c3RhcnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2VnbWVudCAqLwotCQlvZmZzZXRTdG9wTGltaXQg PSBvbGRlc3RPZmZzZXQgLSAob2xkZXN0T2Zmc2V0ICUKLQkJCQkJCQkJCQkgIChNVUxUSVhBQ1Rf TUVNQkVSU19QRVJfUEFHRSAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpKTsKLQotCQkvKiBhbHdh eXMgbGVhdmUgb25lIHNlZ21lbnQgYmVmb3JlIHRoZSB3cmFwYXJvdW5kIHBvaW50ICovCi0JCW9m ZnNldFN0b3BMaW1pdCAtPSAoTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgKiBTTFJVX1BBR0VT X1BFUl9TRUdNRU5UKTsKLQotCQlpZiAoIXByZXZPbGRlc3RPZmZzZXRLbm93biAmJiAhaXNfc3Rh cnR1cCkKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJNdWx0aVhhY3QgbWVtYmVyIHdy YXBhcm91bmQgcHJvdGVjdGlvbnMgYXJlIG5vdyBlbmFibGVkIikpKTsKLQotCQllcmVwb3J0KERF QlVHMSwKLQkJCQkoZXJybXNnX2ludGVybmFsKCJNdWx0aVhhY3QgbWVtYmVyIHN0b3AgbGltaXQg aXMgbm93ICV1IGJhc2VkIG9uIE11bHRpWGFjdCAldSIsCi0JCQkJCQkJCSBvZmZzZXRTdG9wTGlt aXQsIG9sZGVzdE11bHRpWGFjdElkKSkpOwotCX0KLQllbHNlIGlmIChwcmV2T2xkZXN0T2Zmc2V0 S25vd24pCisJaWYgKHByZXZPbGRlc3RPZmZzZXRLbm93bikKIAl7CiAJCS8qCiAJCSAqIElmIHdl IGZhaWxlZCB0byBnZXQgdGhlIG9sZGVzdCBvZmZzZXQgdGhpcyB0aW1lLCBidXQgd2UgaGF2ZSBh CkBAIC0yNzYxLDE0ICsyNjU0LDEyIEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3Rh cnR1cCkKIAkJICovCiAJCW9sZGVzdE9mZnNldCA9IHByZXZPbGRlc3RPZmZzZXQ7CiAJCW9sZGVz dE9mZnNldEtub3duID0gdHJ1ZTsKLQkJb2Zmc2V0U3RvcExpbWl0ID0gcHJldk9mZnNldFN0b3BM aW1pdDsKIAl9CiAKIAkvKiBJbnN0YWxsIHRoZSBjb21wdXRlZCB2YWx1ZXMgKi8KIAlMV0xvY2tB Y3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0U3RhdGUt Pm9sZGVzdE9mZnNldCA9IG9sZGVzdE9mZnNldDsKIAlNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zm c2V0S25vd24gPSBvbGRlc3RPZmZzZXRLbm93bjsKLQlNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3Rv cExpbWl0ID0gb2Zmc2V0U3RvcExpbWl0OwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9j ayk7CiAKIAkvKgpAQCAtMjc3OCw1NCArMjY2OSw2IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJv b2wgaXNfc3RhcnR1cCkKIAkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxUSVhBQ1Rf TUVNQkVSX1NBRkVfVEhSRVNIT0xEKTsKIH0KIAotLyoKLSAqIFJldHVybiB3aGV0aGVyIGFkZGlu ZyAiZGlzdGFuY2UiIHRvICJzdGFydCIgd291bGQgbW92ZSBwYXN0ICJib3VuZGFyeSIuCi0gKgot ICogV2UgdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkZGl0aW9uIGlzICJ3cmFw cGluZyBhcm91bmQiIHRoZQotICogYm91bmRhcnkgcG9pbnQsIGhlbmNlIHRoZSBuYW1lLiAgVGhl IHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgcmVndWxhcgotICogMl4zMS1tb2R1bG8g YXJpdGhtZXRpYyBoZXJlIGlzIHRoYXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgd2hv bGUgb2YKLSAqIHRoZSAyXjMyLTEgc3BhY2UgaGVyZSwgYWxsb3dpbmcgZm9yIG1vcmUgbXVsdGl4 YWN0cyB0aGFuIHdvdWxkIGZpdAotICogb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgYm9vbAotTXVs dGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdE9mZnNldCBib3VuZGFyeSwgTXVsdGlYYWN0 T2Zmc2V0IHN0YXJ0LAotCQkJCQkJIHVpbnQzMiBkaXN0YW5jZSkKLXsKLQlNdWx0aVhhY3RPZmZz ZXQgZmluaXNoOwotCi0JLyoKLQkgKiBOb3RlIHRoYXQgb2Zmc2V0IG51bWJlciAwIGlzIG5vdCB1 c2VkIChzZWUgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKSwgc28KLQkgKiBpZiB0aGUgYWRkaXRpb24g d3JhcHMgYXJvdW5kIHRoZSBVSU5UX01BWCBib3VuZGFyeSwgc2tpcCB0aGF0IHZhbHVlLgotCSAq LwotCWZpbmlzaCA9IHN0YXJ0ICsgZGlzdGFuY2U7Ci0JaWYgKGZpbmlzaCA8IHN0YXJ0KQotCQlm aW5pc2grKzsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBu dW1lcmljYWxseSBncmVhdGVyIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50LCBhbnkKLQkgKiB2YWx1 ZSBudW1lcmljYWxseSBiZXR3ZWVuIHRoZSB0d28gaXMgbm90IHdyYXBwZWQ6Ci0JICoKLQkgKgk8 LS0tLVMtLS0tQi0tLS0+Ci0JICoJWy0tLSkJCQkgPSBGIHdyYXBwZWQgcGFzdCBCIChhbmQgVUlO VF9NQVgpCi0JICoJCSBbLS0tKQkJID0gRiBub3Qgd3JhcHBlZAotCSAqCQkJICBbLS0tLV0gPSBG IHdyYXBwZWQgcGFzdCBCCi0JICoKLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBudW1lcmljYWxs eSBsZXNzIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50IChpLmUuIHRoZQotCSAqIFVJTlRfTUFYIHdy YXBhcm91bmQgb2NjdXJzIHNvbWV3aGVyZSBpbiBiZXR3ZWVuKSB0aGVuIGFsbCB2YWx1ZXMgaW4K LQkgKiBiZXR3ZWVuIGFyZSB3cmFwcGVkOgotCSAqCi0JICoJPC0tLS1CLS0tLVMtLS0tPgotCSAq CVstLS0pCQkJID0gRiBub3Qgd3JhcHBlZCBwYXN0IEIgKGJ1dCB3cmFwcGVkIHBhc3QgVUlOVF9N QVgpCi0JICoJCSBbLS0tKQkJID0gRiB3cmFwcGVkIHBhc3QgQiAoYW5kIFVJTlRfTUFYKQotCSAq CQkJICBbLS0tLV0gPSBGIG5vdCB3cmFwcGVkCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqLwotCWlm IChzdGFydCA8IGJvdW5kYXJ5KQotCQlyZXR1cm4gZmluaXNoID49IGJvdW5kYXJ5IHx8IGZpbmlz aCA8IHN0YXJ0OwotCWVsc2UKLQkJcmV0dXJuIGZpbmlzaCA+PSBib3VuZGFyeSAmJiBmaW5pc2gg PCBzdGFydDsKLX0KLQogLyoKICAqIEZpbmQgdGhlIHN0YXJ0aW5nIG9mZnNldCBvZiB0aGUgZ2l2 ZW4gTXVsdGlYYWN0SWQuCiAgKgpAQCAtMjk0Niw4ICsyNzg5LDkgQEAgTXVsdGlYYWN0TWVtYmVy RnJlZXplVGhyZXNob2xkKHZvaWQpCiAJICogd2UgdHJ5IHRvIGVsaW1pbmF0ZSBmcm9tIHRoZSBz eXN0ZW0gaXMgYmFzZWQgb24gaG93IGZhciB3ZSBhcmUgcGFzdAogCSAqIE1VTFRJWEFDVF9NRU1C RVJfU0FGRV9USFJFU0hPTEQuCiAJICovCi0JZnJhY3Rpb24gPSAoZG91YmxlKSAobWVtYmVycyAt IE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpIC8KLQkJKE1VTFRJWEFDVF9NRU1CRVJf REFOR0VSX1RIUkVTSE9MRCAtIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpOworCWZy YWN0aW9uID0gKGRvdWJsZSkgKG1lbWJlcnMgLSBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhSRVNI T0xEKTsKKwlmcmFjdGlvbiAvPSAoZG91YmxlKSAoTVVMVElYQUNUX01FTUJFUl9EQU5HRVJfVEhS RVNIT0xEIC0gTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRCk7CisKIAl2aWN0aW1fbXVs dGl4YWN0cyA9IG11bHRpeGFjdHMgKiBmcmFjdGlvbjsKIAogCS8qIGZyYWN0aW9uIGNvdWxkIGJl ID4gMS4wLCBidXQgbG93ZXN0IHBvc3NpYmxlIGZyZWV6ZSBhZ2UgaXMgemVybyAqLwpAQCAtMjk5 MSwxMCArMjgzNSwxMCBAQCBTbHJ1U2NhbkRpckNiRmluZEVhcmxpZXN0KFNscnVDdGwgY3RsLCBj aGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwgdm9pZCAqZGF0YQogc3RhdGljIHZvaWQKIFBl cmZvcm1NZW1iZXJzVHJ1bmNhdGlvbihNdWx0aVhhY3RPZmZzZXQgb2xkZXN0T2Zmc2V0LCBNdWx0 aVhhY3RPZmZzZXQgbmV3T2xkZXN0T2Zmc2V0KQogewotCWNvbnN0IGludAltYXhzZWdtZW50ID0g TVhPZmZzZXRUb01lbWJlclNlZ21lbnQoTWF4TXVsdGlYYWN0T2Zmc2V0KTsKLQlpbnQJCQlzdGFy dHNlZ21lbnQgPSBNWE9mZnNldFRvTWVtYmVyU2VnbWVudChvbGRlc3RPZmZzZXQpOwotCWludAkJ CWVuZHNlZ21lbnQgPSBNWE9mZnNldFRvTWVtYmVyU2VnbWVudChuZXdPbGRlc3RPZmZzZXQpOwot CWludAkJCXNlZ21lbnQgPSBzdGFydHNlZ21lbnQ7CisJY29uc3QgaW50NjQJbWF4c2VnbWVudCA9 IE1YT2Zmc2V0VG9NZW1iZXJTZWdtZW50KE1heE11bHRpWGFjdE9mZnNldCk7CisJaW50NjQJCXN0 YXJ0c2VnbWVudCA9IE1YT2Zmc2V0VG9NZW1iZXJTZWdtZW50KG9sZGVzdE9mZnNldCk7CisJaW50 NjQJCWVuZHNlZ21lbnQgPSBNWE9mZnNldFRvTWVtYmVyU2VnbWVudChuZXdPbGRlc3RPZmZzZXQp OworCWludDY0CQlzZWdtZW50ID0gc3RhcnRzZWdtZW50OwogCiAJLyoKIAkgKiBEZWxldGUgYWxs IHRoZSBzZWdtZW50cyBidXQgdGhlIGxhc3Qgb25lLiBUaGUgbGFzdCBzZWdtZW50IGNhbiBzdGls bApAQCAtMzAwMiw3ICsyODQ2LDggQEAgUGVyZm9ybU1lbWJlcnNUcnVuY2F0aW9uKE11bHRpWGFj dE9mZnNldCBvbGRlc3RPZmZzZXQsIE11bHRpWGFjdE9mZnNldCBuZXdPbGRlc3QKIAkgKi8KIAl3 aGlsZSAoc2VnbWVudCAhPSBlbmRzZWdtZW50KQogCXsKLQkJZWxvZyhERUJVRzIsICJ0cnVuY2F0 aW5nIG11bHRpeGFjdCBtZW1iZXJzIHNlZ21lbnQgJXgiLCBzZWdtZW50KTsKKwkJZWxvZyhERUJV RzIsICJ0cnVuY2F0aW5nIG11bHRpeGFjdCBtZW1iZXJzIHNlZ21lbnQgJWxseCIsCisJCQkgKHVu c2lnbmVkIGxvbmcgbG9uZykgc2VnbWVudCk7CiAJCVNscnVEZWxldGVTZWdtZW50KE11bHRpWGFj dE1lbWJlckN0bCwgc2VnbWVudCk7CiAKIAkJLyogbW92ZSB0byBuZXh0IHNlZ21lbnQsIGhhbmRs aW5nIHdyYXBhcm91bmQgY29ycmVjdGx5ICovCkBAIC0zMTUzLDE0ICsyOTk4LDE0IEBAIFRydW5j YXRlTXVsdGlYYWN0KE11bHRpWGFjdElkIG5ld09sZGVzdE11bHRpLCBPaWQgbmV3T2xkZXN0TXVs dGlEQikKIAl9CiAKIAllbG9nKERFQlVHMSwgInBlcmZvcm1pbmcgbXVsdGl4YWN0IHRydW5jYXRp b246ICIKLQkJICJvZmZzZXRzIFsldSwgJXUpLCBvZmZzZXRzIHNlZ21lbnRzIFsleCwgJXgpLCAi Ci0JCSAibWVtYmVycyBbJXUsICV1KSwgbWVtYmVycyBzZWdtZW50cyBbJXgsICV4KSIsCisJCSAi b2Zmc2V0cyBbJXUsICV1KSwgb2Zmc2V0cyBzZWdtZW50cyBbJWxseCwgJWxseCksICIKKwkJICJt ZW1iZXJzIFslbGx1LCAlbGx1KSwgbWVtYmVycyBzZWdtZW50cyBbJWxseCwgJWxseCkiLAogCQkg b2xkZXN0TXVsdGksIG5ld09sZGVzdE11bHRpLAotCQkgTXVsdGlYYWN0SWRUb09mZnNldFNlZ21l bnQob2xkZXN0TXVsdGkpLAotCQkgTXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQobmV3T2xkZXN0 TXVsdGkpLAotCQkgb2xkZXN0T2Zmc2V0LCBuZXdPbGRlc3RPZmZzZXQsCi0JCSBNWE9mZnNldFRv TWVtYmVyU2VnbWVudChvbGRlc3RPZmZzZXQpLAotCQkgTVhPZmZzZXRUb01lbWJlclNlZ21lbnQo bmV3T2xkZXN0T2Zmc2V0KSk7CisJCSAodW5zaWduZWQgbG9uZyBsb25nKSBNdWx0aVhhY3RJZFRv T2Zmc2V0U2VnbWVudChvbGRlc3RNdWx0aSksCisJCSAodW5zaWduZWQgbG9uZyBsb25nKSBNdWx0 aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChuZXdPbGRlc3RNdWx0aSksCisJCSAodW5zaWduZWQgbG9u ZyBsb25nKSBvbGRlc3RPZmZzZXQsICh1bnNpZ25lZCBsb25nIGxvbmcpIG5ld09sZGVzdE9mZnNl dCwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpIE1YT2Zmc2V0VG9NZW1iZXJTZWdtZW50KG9sZGVz dE9mZnNldCksCisJCSAodW5zaWduZWQgbG9uZyBsb25nKSBNWE9mZnNldFRvTWVtYmVyU2VnbWVu dChuZXdPbGRlc3RPZmZzZXQpKTsKIAogCS8qCiAJICogRG8gdHJ1bmNhdGlvbiwgYW5kIHRoZSBX QUwgbG9nZ2luZyBvZiB0aGUgdHJ1bmNhdGlvbiwgaW4gYSBjcml0aWNhbApAQCAtMzI4NSw3ICsz MTMwLDcgQEAgTXVsdGlYYWN0SWRQcmVjZWRlc09yRXF1YWxzKE11bHRpWGFjdElkIG11bHRpMSwg TXVsdGlYYWN0SWQgbXVsdGkyKQogc3RhdGljIGJvb2wKIE11bHRpWGFjdE9mZnNldFByZWNlZGVz KE11bHRpWGFjdE9mZnNldCBvZmZzZXQxLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MikKIHsKLQlp bnQzMgkJZGlmZiA9IChpbnQzMikgKG9mZnNldDEgLSBvZmZzZXQyKTsKKwlpbnQ2NAkJZGlmZiA9 IChpbnQ2NCkgKG9mZnNldDEgLSBvZmZzZXQyKTsKIAogCXJldHVybiAoZGlmZiA8IDApOwogfQpA QCAtMzQxMywxNCArMzI1OCwxNSBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCkKIAkJCSAgIFNpemVPZk11bHRpWGFjdFRydW5jYXRlKTsKIAogCQllbG9nKERFQlVHMSwg InJlcGxheWluZyBtdWx0aXhhY3QgdHJ1bmNhdGlvbjogIgotCQkJICJvZmZzZXRzIFsldSwgJXUp LCBvZmZzZXRzIHNlZ21lbnRzIFsleCwgJXgpLCAiCi0JCQkgIm1lbWJlcnMgWyV1LCAldSksIG1l bWJlcnMgc2VnbWVudHMgWyV4LCAleCkiLAorCQkJICJvZmZzZXRzIFsldSwgJXUpLCBvZmZzZXRz IHNlZ21lbnRzIFslbGx4LCAlbGx4KSwgIgorCQkJICJtZW1iZXJzIFslbGx1LCAlbGx1KSwgbWVt YmVycyBzZWdtZW50cyBbJWxseCwgJWxseCkiLAogCQkJIHhscmVjLnN0YXJ0VHJ1bmNPZmYsIHhs cmVjLmVuZFRydW5jT2ZmLAotCQkJIE11bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50KHhscmVjLnN0 YXJ0VHJ1bmNPZmYpLAotCQkJIE11bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50KHhscmVjLmVuZFRy dW5jT2ZmKSwKLQkJCSB4bHJlYy5zdGFydFRydW5jTWVtYiwgeGxyZWMuZW5kVHJ1bmNNZW1iLAot CQkJIE1YT2Zmc2V0VG9NZW1iZXJTZWdtZW50KHhscmVjLnN0YXJ0VHJ1bmNNZW1iKSwKLQkJCSBN WE9mZnNldFRvTWVtYmVyU2VnbWVudCh4bHJlYy5lbmRUcnVuY01lbWIpKTsKKwkJCSAodW5zaWdu ZWQgbG9uZyBsb25nKSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudCh4bHJlYy5zdGFydFRydW5j T2ZmKSwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVu dCh4bHJlYy5lbmRUcnVuY09mZiksCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgeGxyZWMuc3Rh cnRUcnVuY01lbWIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgeGxyZWMuZW5kVHJ1bmNNZW1i LAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIE1YT2Zmc2V0VG9NZW1iZXJTZWdtZW50KHhscmVj LnN0YXJ0VHJ1bmNNZW1iKSwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBNWE9mZnNldFRvTWVt YmVyU2VnbWVudCh4bHJlYy5lbmRUcnVuY01lbWIpKTsKIAogCQkvKiBzaG91bGQgbm90IGJlIHJl cXVpcmVkLCBidXQgbW9yZSB0aGFuIGNoZWFwIGVub3VnaCAqLwogCQlMV0xvY2tBY3F1aXJlKE11 bHRpWGFjdFRydW5jYXRpb25Mb2NrLCBMV19FWENMVVNJVkUpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCAyOWM1YmVjMDg0Li5hYTk1NjZiMDFjIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpAQCAtODc2LDggKzg3Niw5 IEBAIEluaXRXYWxSZWNvdmVyeShDb250cm9sRmlsZURhdGEgKkNvbnRyb2xGaWxlLCBib29sICp3 YXNTaHV0ZG93bl9wdHIsCiAJCQkJCQkJIFU2NEZyb21GdWxsVHJhbnNhY3Rpb25JZChjaGVja1Bv aW50Lm5leHRYaWQpLAogCQkJCQkJCSBjaGVja1BvaW50Lm5leHRPaWQpKSk7CiAJZXJlcG9ydChE RUJVRzEsCi0JCQkoZXJybXNnX2ludGVybmFsKCJuZXh0IE11bHRpWGFjdElkOiAldTsgbmV4dCBN dWx0aVhhY3RPZmZzZXQ6ICV1IiwKLQkJCQkJCQkgY2hlY2tQb2ludC5uZXh0TXVsdGksIGNoZWNr UG9pbnQubmV4dE11bHRpT2Zmc2V0KSkpOworCQkJKGVycm1zZ19pbnRlcm5hbCgibmV4dCBNdWx0 aVhhY3RJZDogJXU7IG5leHQgTXVsdGlYYWN0T2Zmc2V0OiAlbGx1IiwKKwkJCQkJCQkgY2hlY2tQ b2ludC5uZXh0TXVsdGksCisJCQkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGNoZWNrUG9pbnQu bmV4dE11bHRpT2Zmc2V0KSkpOwogCWVyZXBvcnQoREVCVUcxLAogCQkJKGVycm1zZ19pbnRlcm5h bCgib2xkZXN0IHVuZnJvemVuIHRyYW5zYWN0aW9uIElEOiAldSwgaW4gZGF0YWJhc2UgJXUiLAog CQkJCQkJCSBjaGVja1BvaW50Lm9sZGVzdFhpZCwgY2hlY2tQb2ludC5vbGRlc3RYaWREQikpKTsK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYyBiL3Ny Yy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYwppbmRleCA5M2UwODM3OTQ3Li5k MzhjNzUyODYwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xk YXRhLmMKKysrIGIvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jCkBAIC0y NTMsOCArMjUzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkgICBDb250cm9s RmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE9pZCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3Bv aW50J3MgTmV4dE11bHRpWGFjdElkOiAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQ b2ludENvcHkubmV4dE11bHRpKTsKLQlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0 TXVsdGlPZmZzZXQ6ICAldVxuIiksCi0JCSAgIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5u ZXh0TXVsdGlPZmZzZXQpOworCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0 aU9mZnNldDogICVsbHVcbiIpLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBDb250cm9sRmls ZS0+Y2hlY2tQb2ludENvcHkubmV4dE11bHRpT2Zmc2V0KTsKIAlwcmludGYoXygiTGF0ZXN0IGNo ZWNrcG9pbnQncyBvbGRlc3RYSUQ6ICAgICAgICAldVxuIiksCiAJCSAgIENvbnRyb2xGaWxlLT5j aGVja1BvaW50Q29weS5vbGRlc3RYaWQpOwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdz IG9sZGVzdFhJRCdzIERCOiAgICV1XG4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3 YWwvcGdfcmVzZXR3YWwuYyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYwppbmRl eCBlOWRjYjVhNmQ4Li4xYWYyY2U0YjkzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jlc2V0d2Fs L3BnX3Jlc2V0d2FsLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jCkBA IC0yNjQsNyArMjY0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCQljYXNl ICdPJzoKIAkJCQllcnJubyA9IDA7Ci0JCQkJc2V0X214b2ZmID0gc3RydG91bChvcHRhcmcsICZl bmRwdHIsIDApOworCQkJCXNldF9teG9mZiA9IHN0cnRvdTY0KG9wdGFyZywgJmVuZHB0ciwgMCk7 CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vICE9 IDApCiAJCQkJewogCQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQgYXJndW1lbnQgZm9yIG9wdGlv biAlcyIsICItTyIpOwpAQCAtNzM3LDggKzczNyw4IEBAIFByaW50Q29udHJvbFZhbHVlcyhib29s IGd1ZXNzZWQpCiAJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRPaWQpOwogCXBy aW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aVhhY3RJZDogICV1XG4iKSwKIAkJ ICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE11bHRpKTsKLQlwcmludGYoXygiTGF0 ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6ICAldVxuIiksCi0JCSAgIENvbnRyb2xG aWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CisJcHJpbnRmKF8oIkxhdGVzdCBj aGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJWxsdVxuIiksCisJCSAgICh1bnNpZ25lZCBs b25nIGxvbmcpIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJ cHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3Mgb2xkZXN0WElEOiAgICAgICAgJXVcbiIpLAog CQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5vbGRlc3RYaWQpOwogCXByaW50ZihfKCJM YXRlc3QgY2hlY2twb2ludCdzIG9sZGVzdFhJRCdzIERCOiAgICV1XG4iKSwKQEAgLTgwOSw4ICs4 MDksOCBAQCBQcmludE5ld0NvbnRyb2xWYWx1ZXModm9pZCkKIAogCWlmIChzZXRfbXhvZmYgIT0g LTEpCiAJewotCQlwcmludGYoXygiTmV4dE11bHRpT2Zmc2V0OiAgICAgICAgICAgICAgICAgICAg ICAldVxuIiksCi0JCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0TXVsdGlPZmZz ZXQpOworCQlwcmludGYoXygiTmV4dE11bHRpT2Zmc2V0OiAgICAgICAgICAgICAgICAgICAgICAl bGx1XG4iKSwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIENvbnRyb2xGaWxlLmNoZWNrUG9p bnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJfQogCiAJaWYgKHNldF9vaWQgIT0gMCkKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX3Jl c2V0d2FsL3QvMDAxX2Jhc2ljLnBsCmluZGV4IDk4MjllNDgxMDYuLmY4YThlZWY0NGQgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwKKysrIGIvc3JjL2Jpbi9w Z19yZXNldHdhbC90LzAwMV9iYXNpYy5wbApAQCAtMjA2LDcgKzIwNiw3IEBAIHB1c2ggQGNtZCwK ICAgc3ByaW50ZigiJWQsJWQiLCBoZXgoJGZpbGVzWzBdKSA9PSAwID8gMyA6IGhleCgkZmlsZXNb MF0pLCBoZXgoJGZpbGVzWy0xXSkpOwogCiBAZmlsZXMgPSBnZXRfc2xydV9maWxlcygncGdfbXVs dGl4YWN0L29mZnNldHMnKTsKLSRtdWx0ID0gMzIgKiAkYmxja3N6IC8gNDsKKyRtdWx0ID0gMzIg KiAkYmxja3N6IC8gODsKICMgLW0gYXJndW1lbnQgaXMgIm5ldyxvbGQiCiBwdXNoIEBjbWQsICct bScsCiAgIHNwcmludGYoIiVkLCVkIiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9t dWx0aXhhY3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAppbmRleCA3ZmZkMjU2 Yzc0Li45MDU4MzYzNGVjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0 LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCkBAIC0yNyw3ICsyNyw3IEBA CiAKICNkZWZpbmUgTXVsdGlYYWN0SWRJc1ZhbGlkKG11bHRpKSAoKG11bHRpKSAhPSBJbnZhbGlk TXVsdGlYYWN0SWQpCiAKLSNkZWZpbmUgTWF4TXVsdGlYYWN0T2Zmc2V0CSgoTXVsdGlYYWN0T2Zm c2V0KSAweEZGRkZGRkZGKQorI2RlZmluZSBNYXhNdWx0aVhhY3RPZmZzZXQJVUlOVDY0Q09OU1Qo MHhGRkZGRkZGRkZGRkZGRkZGKQogCiAvKgogICogUG9zc2libGUgbXVsdGl4YWN0IGxvY2sgbW9k ZXMgKCJzdGF0dXMiKS4gIFRoZSBmaXJzdCBmb3VyIG1vZGVzIGFyZSBmb3IKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2MuaCBiL3NyYy9pbmNsdWRlL2MuaAppbmRleCBkYzE4NDEzNDZjLi5jY2Zi ODJiNDc4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jLmgKKysrIGIvc3JjL2luY2x1ZGUvYy5o CkBAIC02NjEsNyArNjYxLDcgQEAgdHlwZWRlZiB1aW50MzIgU3ViVHJhbnNhY3Rpb25JZDsKIC8q IE11bHRpWGFjdElkIG11c3QgYmUgZXF1aXZhbGVudCB0byBUcmFuc2FjdGlvbklkLCB0byBmaXQg aW4gdF94bWF4ICovCiB0eXBlZGVmIFRyYW5zYWN0aW9uSWQgTXVsdGlYYWN0SWQ7CiAKLXR5cGVk ZWYgdWludDMyIE11bHRpWGFjdE9mZnNldDsKK3R5cGVkZWYgdWludDY0IE11bHRpWGFjdE9mZnNl dDsKIAogdHlwZWRlZiB1aW50MzIgQ29tbWFuZElkOwogCi0tIAoyLjM0LjEKCg== --0000000000003581fa0616bf4656--