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 1vEigS-00Ga3R-Ge for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Oct 2025 06:32:24 +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 1vEigR-00CK1x-6e for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Oct 2025 06:32:22 +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 1vEigQ-00CK1o-Qt for pgsql-hackers@lists.postgresql.org; Fri, 31 Oct 2025 06:32:21 +0000 Received: from mail-qk1-x734.google.com ([2607:f8b0:4864:20::734]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vEigM-005CNK-2d for pgsql-hackers@lists.postgresql.org; Fri, 31 Oct 2025 06:32:21 +0000 Received: by mail-qk1-x734.google.com with SMTP id af79cd13be357-89ead335959so174167185a.2 for ; Thu, 30 Oct 2025 23:32:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761892337; x=1762497137; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=EJ8w1lxzKU9W0TVMtzMGRGMNc1YxebOUNZQXmMRG7bs=; b=LBFlkptA3c3IZQSIAOZtQ4rwDfMu9KjDE6/iAfRkvNa11AQ/yoTUw/LeVxo8ShckEx u4MgDFyaYg5nwFX0NOXQ1z8uUWsxGTloZPmiPPgc+HDfhdXNmIERAzeHbuvCBdo7Gopi mQK2PZT16EmzS0vxn573Dnow2QlJ+wSHY3NsQeuo7wSX3qBA9vMkKPpr5ytt97oAUZnt IqobwQHAJQ0LAtK6fXjBSrS90tfMim5+rc9+m34uGdJIgR/5wHr1NbrK7d+nUhcr4K0T hEDWvdFsBwio5OarEKm8GRQ5QIDDq52DfNj0AAqWBEtgf6mvwYKmUzvFzGdRvBI1dppk 9jwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761892337; x=1762497137; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=EJ8w1lxzKU9W0TVMtzMGRGMNc1YxebOUNZQXmMRG7bs=; b=s2tgwbVh+Vq+7kguIGUh+nlx+NyppbLHYN0T89fKreHTGxMZi5jTNuKUa6O+7UBo9w m+xOcPpb6qCj+/dEeLhY+l6nPQxQAq160Xq4V9/EFJgfdXMsbK2rq0FOIxjBd/VXI9zW nA/Y6LMBY8/asv3hO6OjdFJ7AOXvZsQsXYYVm+exbWqxPur8pBTKd7mjvKJftT/xtT8O BUJxmKbb8k8RBHmFeI4uEZUk9Zw0wyhqru453WjfQRqECbD68dxmV7qoAAYc8Iu4C367 YHSM3DHFpskC2IrSnElgCunjvtZKj4OIs28Nq+abHtpVCdokhYGuRlJSMBMN2dZYF1TK QU1Q== X-Gm-Message-State: AOJu0YwhlM9NeMEb0oC2Qqts+Y8AJ3hNq0n+dPKPFn2CSI/5idz1UIIb Lq4RU8WtZy35gXiLJDhe+XKOxHcZbJmTLZa8ACQt7VsdeUwwoJvxryqDDIDtpo1hPO97Cw2vHvk p0PBxYJEYl6dRiJABrswVi43zksFYL42iuJ8zDw== X-Gm-Gg: ASbGncunLnzp3PplSFBDn+QOo3tj5nMHzLyjIKMrF4/vdvGQ+xlq+cJ8crmQy4YwZ20 s/jGFVivX0jpL4tzOD44fLkwDLd6NTeB6eR3Cnme0YPqbxeq1BH8KtN2loELsdKabbsDc4T7zwa YcpL9coKrp+LKwuDjAHJ73ulRZLzOQrHk8X0tcRHp4GQlpdC8I0YnPVQMrcEw1Pn39D7iOjJjaA 47yyNbHOzFT7Pf3BHoRhibtKEA93IU+adeXUUbNp6aD6vSsCEXhOvDqDD81NipWuPUQiq6Wu6Gq XgjWTckboySxR7mBUaBaDg== X-Google-Smtp-Source: AGHT+IHQla+0ztktfpdqNw+Ac7CkO+Urt4LfLZFjqO79YzbuiwJkvsfKImTkLWk55ZGIJ2x5KBCCdEQiuD2V27exfNo= X-Received: by 2002:a05:620a:4612:b0:8a1:21a6:e054 with SMTP id af79cd13be357-8ab988ede73mr229886085a.4.1761892337027; Thu, 30 Oct 2025 23:32:17 -0700 (PDT) MIME-Version: 1.0 From: Shinya Kato Date: Fri, 31 Oct 2025 15:31:40 +0900 X-Gm-Features: AWmQ_bkgbXsC0NOpU97ck5ORSRM0c1qoboJbCaNbdBLrcilcIEvRUHuh_sneujs Message-ID: Subject: Report oldest xmin source when autovacuum cannot remove tuples To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000e1ea7306426e86d5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e1ea7306426e86d5 Content-Type: text/plain; charset="UTF-8" Hi hackers, I am proposing to add the reason for the oldest xmin to VACUUM logs. This feature would be useful for identifying why dead tuples cannot be removed, thereby helping to diagnose and prevent table bloat. The current logs only indicate that dead tuples could not be reclaimed due to the oldest xmin, but they do not reveal the underlying reason. To identify the cause, it is necessary to query multiple views: pg_stat_activity (for active transactions), pg_prepared_xacts (for prepared statements), pg_replication_slots (for replication slots), and pg_stat_replication (for hot standby feedback). However, because the data in these views is volatile, it is difficult to retroactively determine what was holding the oldest xmin at the specific time the log message was generated. This PoC patch addresses this problem. The implementation now outputs the reason for the oldest xmin and, where applicable, the backend PID. This information was originally discarded when calculating the oldest xmin horizon, and the computation required to retrieve these reasons is considered reasonable. The patch is attached. What do you think? -- Best regards, Shinya Kato NTT OSS Center --000000000000e1ea7306426e86d5 Content-Type: application/octet-stream; name="v1-0001-Report-oldest-xmin-source-when-autovacuum-cannot-.patch" Content-Disposition: attachment; filename="v1-0001-Report-oldest-xmin-source-when-autovacuum-cannot-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mheh5uec0 RnJvbSBlZjBjZTBkM2ZhNDVkNjM5YWU5ZDA4YTU1NTAxNjNiMDhjODBjMjFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGlueWEgS2F0byA8c2hpbnlhMTEua2F0b0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMjkgT2N0IDIwMjUgMjE6MDQ6NTIgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx XSBSZXBvcnQgb2xkZXN0IHhtaW4gc291cmNlIHdoZW4gYXV0b3ZhY3V1bSBjYW5ub3QgcmVtb3Zl CiB0dXBsZXMKCkF1dG92YWN1dW0gbG9nZ2luZyBub3cgdGVsbHMgd2hpY2ggYmFja2VuZCBvciBt ZWNoYW5pc20ga2VwdCBPbGRlc3RYbWluCmZyb20gYWR2YW5jaW5nIHdoZW4gZGVhZCB0dXBsZXMg cmVtYWluLCBpbXByb3ZpbmcgZGlhZ25vc2lzIG9mIGJsb2F0aW5nCmFuZCB3cmFwYXJvdW5kIGhh emFyZHMuIFByb2NBcnJheSBub3cgcmVjb3JkcyBhbiBPbGRlc3RYbWluU291cmNlIGZvcgplYWNo IGNvbXB1dGVkIGhvcml6b24sIGFuZCBWQUNVVU0gcmV0cmlldmVzIGl0IHRocm91Z2ggdGhlIG5l dwpHZXRPbGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklkV2l0aFJlYXNvbigpIGhlbHBlci4g VGhlIGxvZyBvdXRwdXQKbmFtZXMgYWN0aXZlIHRyYW5zYWN0aW9ucyAod2l0aCBwaWQpLCBob3Qg c3RhbmRieSBmZWVkYmFjaywgcHJlcGFyZWQKdHJhbnNhY3Rpb25zLCByZXBsaWNhdGlvbiBzbG90 cywgb3Igb3RoZXJ3aXNlIGxhYmVscyB0aGUgY2F1c2UgYXMKIm90aGVyIi4KCkF1dGhvcjogU2hp bnlhIEthdG8gPHNoaW55YTExLmthdG9AZ21haWwuY29tPgpSZXZpZXdlZC1ieToKRGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1 dW1sYXp5LmMgICAgICAgICAgfCAgMzcgKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVt LmMgICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j YXJyYXkuYyAgICAgICAgICAgfCAxNjUgKysrKysrKysrKysrKy0tLQogc3JjL2luY2x1ZGUvY29t bWFuZHMvdmFjdXVtLmggICAgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvY2FycmF5LmggICAgICAgICAgICAgICB8ICAyMSArKwogc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X21pc2MvbWVzb24uYnVpbGQgICAgICAgIHwgICAxICsKIC4uLi90LzAxMF9hdXRvdmFjdXVt X29sZGVzdF94bWluX3JlYXNvbi5wbCAgICB8IDE4NiArKysrKysrKysrKysrKysrKysKIDcgZmls ZXMgY2hhbmdlZCwgMzg4IGluc2VydGlvbnMoKyksIDMwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDEwX2F1dG92YWN1dW1fb2xk ZXN0X3htaW5fcmVhc29uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv dmFjdXVtbGF6eS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4 IGQyYjAzMWZkZDA2Li5lNGU3YzZlZTY3NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvdmFjdXVtbGF6eS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxh enkuYwpAQCAtMTA0Nyw2ICsxMDQ3LDQzIEBAIGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWws IGNvbnN0IFZhY3V1bVBhcmFtcyBwYXJhbXMsCiAJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsCiAJ CQkJCQkJIF8oInJlbW92YWJsZSBjdXRvZmY6ICV1LCB3aGljaCB3YXMgJWQgWElEcyBvbGQgd2hl biBvcGVyYXRpb24gZW5kZWRcbiIpLAogCQkJCQkJCSB2YWNyZWwtPmN1dG9mZnMuT2xkZXN0WG1p biwgZGlmZik7CisJCQkvKgorCQkJICogSWYgdGhlcmUgYXJlIGRlYWQgdHVwbGVzIG5vdCB5ZXQg cmVtb3ZhYmxlLCByZXBvcnQgd2hhdAorCQkJICogZGV0ZXJtaW5lZCB0aGUgT2xkZXN0WG1pbiBo b3Jpem9uIHRvIGFpZCBkaWFnbm9zdGljcy4KKwkJCSAqLworCQkJaWYgKHZhY3JlbC0+cmVjZW50 bHlfZGVhZF90dXBsZXMgPiAwKQorCQkJeworCQkJCWludAkJCXBpZCA9IHZhY3JlbC0+Y3V0b2Zm cy5vbGRlc3RfeG1pbl9pbmZvLmJhY2tlbmRfcGlkOworCQkJCWJvb2wJCWluY2x1ZGVfcGlkID0g cGlkID4gMDsKKworCQkJCXN3aXRjaCAodmFjcmVsLT5jdXRvZmZzLm9sZGVzdF94bWluX2luZm8u c291cmNlKQorCQkJCXsKKwkJCQkJY2FzZSBPTERFU1RYTUlOX1NPVVJDRV9BQ1RJVkVfVFJBTlNB Q1RJT046CisJCQkJCQltc2dmbXQgPSBpbmNsdWRlX3BpZCA/CisJCQkJCQkJXygib2xkZXN0IHht aW4gc291cmNlOiBhY3RpdmUgdHJhbnNhY3Rpb24gKHBpZD0lZClcbiIpIDoKKwkJCQkJCQlfKCJv bGRlc3QgeG1pbiBzb3VyY2U6IGFjdGl2ZSB0cmFuc2FjdGlvblxuIik7CisJCQkJCQlicmVhazsK KwkJCQkJY2FzZSBPTERFU1RYTUlOX1NPVVJDRV9IT1RfU1RBTkRCWV9GRUVEQkFDSzoKKwkJCQkJ CW1zZ2ZtdCA9IGluY2x1ZGVfcGlkID8KKwkJCQkJCQlfKCJvbGRlc3QgeG1pbiBzb3VyY2U6IGhv dCBzdGFuZGJ5IGZlZWRiYWNrIChwaWQ9JWQpXG4iKSA6CisJCQkJCQkJXygib2xkZXN0IHhtaW4g c291cmNlOiBob3Qgc3RhbmRieSBmZWVkYmFja1xuIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2Fz ZSBPTERFU1RYTUlOX1NPVVJDRV9QUkVQQVJFRF9UUkFOU0FDVElPTjoKKwkJCQkJCW1zZ2ZtdCA9 IF8oIm9sZGVzdCB4bWluIHNvdXJjZTogcHJlcGFyZWQgdHJhbnNhY3Rpb25cbiIpOworCQkJCQkJ YnJlYWs7CisJCQkJCWNhc2UgT0xERVNUWE1JTl9TT1VSQ0VfUkVQTElDQVRJT05fU0xPVDoKKwkJ CQkJCW1zZ2ZtdCA9IF8oIm9sZGVzdCB4bWluIHNvdXJjZTogcmVwbGljYXRpb24gc2xvdFxuIik7 CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCW1zZ2ZtdCA9IF8oIm9sZGVzdCB4 bWluIHNvdXJjZTogb3RoZXJcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKGlu Y2x1ZGVfcGlkKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsIG1zZ2ZtdCwgcGlkKTsKKwkJ CQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgbXNnZm10KTsKKwkJCX0K IAkJCWlmIChmcm96ZW54aWRfdXBkYXRlZCkKIAkJCXsKIAkJCQlkaWZmID0gKGludDMyKSAodmFj cmVsLT5OZXdSZWxmcm96ZW5YaWQgLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv dmFjdXVtLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCBlZDAzZTNiZDUw ZC4uMWE3Y2U5MWY2ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC0xMTMwLDcgKzExMzAsOSBA QCB2YWN1dW1fZ2V0X2N1dG9mZnMoUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgcGFy YW1zLAogCSAqIHRoYXQgb25seSBvbmUgdmFjdXVtIHByb2Nlc3MgY2FuIGJlIHdvcmtpbmcgb24g YSBwYXJ0aWN1bGFyIHRhYmxlIGF0CiAJICogYW55IHRpbWUsIGFuZCB0aGF0IGVhY2ggdmFjdXVt IGlzIGFsd2F5cyBhbiBpbmRlcGVuZGVudCB0cmFuc2FjdGlvbi4KIAkgKi8KLQljdXRvZmZzLT5P bGRlc3RYbWluID0gR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZChyZWwpOworCWN1 dG9mZnMtPk9sZGVzdFhtaW4gPQorCQlHZXRPbGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklk V2l0aFJlYXNvbihyZWwsCisJCQkJCQkJCQkJCQkJICZjdXRvZmZzLT5vbGRlc3RfeG1pbl9pbmZv KTsKIAogCUFzc2VydChUcmFuc2FjdGlvbklkSXNOb3JtYWwoY3V0b2Zmcy0+T2xkZXN0WG1pbikp OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCmluZGV4IDIwMGY3MmM2ZTI1Li41ZmUy NjYyMzRiMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKQEAgLTI0MSw2ICsyNDEs MTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0CiAJICogc2Vzc2lv bidzIHRlbXBvcmFyeSB0YWJsZXMuCiAJICovCiAJVHJhbnNhY3Rpb25JZCB0ZW1wX29sZGVzdF9u b25yZW1vdmFibGU7CisKKwkvKiBJZGVudGlmeSB3aGF0IGZvcmNlZCBlYWNoIG9mIHRoZSBob3Jp em9ucyBhYm92ZS4gKi8KKwlPbGRlc3RYbWluSW5mbyBzaGFyZWRfb2xkZXN0X25vbnJlbW92YWJs ZV9pbmZvOworCU9sZGVzdFhtaW5JbmZvIGNhdGFsb2dfb2xkZXN0X25vbnJlbW92YWJsZV9pbmZv OworCU9sZGVzdFhtaW5JbmZvIGRhdGFfb2xkZXN0X25vbnJlbW92YWJsZV9pbmZvOworCU9sZGVz dFhtaW5JbmZvIHRlbXBfb2xkZXN0X25vbnJlbW92YWJsZV9pbmZvOwogfSBDb21wdXRlWGlkSG9y aXpvbnNSZXN1bHQ7CiAKIC8qCkBAIC0xNjIyLDYgKzE2MjgsNDYgQEAgVHJhbnNhY3Rpb25JZElz SW5Qcm9ncmVzcyhUcmFuc2FjdGlvbklkIHhpZCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisg KiBTdG9yZSBob3Jpem9uIHByb3ZlbmFuY2UgaW4gKmluZm8gaWYgY2FsbGVyIHJlcXVlc3RlZCBp dC4KKyAqCisgKiBDYWxsZXJzIHBhc3MgTlVMTCB3aGVuIHRoZXkgYXJlIG5vdCBpbnRlcmVzdGVk IGluIHRyYWNraW5nIHRoZSBzb3VyY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorT2xkZXN0 WG1pbkluZm9TZXQoT2xkZXN0WG1pbkluZm8gKmluZm8sIE9sZGVzdFhtaW5Tb3VyY2Ugc291cmNl LAorCQkJCSAgaW50IGJhY2tlbmRfcGlkKQoreworCWlmIChpbmZvID09IE5VTEwpCisJCXJldHVy bjsKKworCWluZm8tPnNvdXJjZSA9IHNvdXJjZTsKKwlpbmZvLT5iYWNrZW5kX3BpZCA9IGJhY2tl bmRfcGlkOworfQorCisvKgorICogVXBkYXRlIGEgdHJhY2tlZCBPbGRlc3RYbWluIGhvcml6b24g d2l0aCBhIGNhbmRpZGF0ZSB4aWQgYW5kIHNvdXJjZS4KKyAqCisgKiBJZiB0aGUgY2FuZGlkYXRl IGlzIG9sZGVyIHRoYW4gKnRhcmdldCwgYWRvcHQgaXQgYW5kIHJlbWVtYmVyIHdoeS4KKyAqLwor c3RhdGljIGlubGluZSB2b2lkCitVcGRhdGVPbGRlc3RYbWluKFRyYW5zYWN0aW9uSWQgKnRhcmdl dCwgT2xkZXN0WG1pbkluZm8gKmluZm8sCisJCQkJIFRyYW5zYWN0aW9uSWQgY2FuZGlkYXRlLCBP bGRlc3RYbWluU291cmNlIHNvdXJjZSwKKwkJCQkgaW50IGJhY2tlbmRfcGlkKQoreworCVRyYW5z YWN0aW9uSWQgb2xkOworCVRyYW5zYWN0aW9uSWQgbmV3X2hvcml6b247CisKKwlpZiAoIVRyYW5z YWN0aW9uSWRJc1ZhbGlkKGNhbmRpZGF0ZSkpCisJCXJldHVybjsKKworCW9sZCA9ICp0YXJnZXQ7 CisJbmV3X2hvcml6b24gPSBUcmFuc2FjdGlvbklkT2xkZXIob2xkLCBjYW5kaWRhdGUpOworCWlm IChUcmFuc2FjdGlvbklkRXF1YWxzKG5ld19ob3Jpem9uLCBvbGQpKQorCQlyZXR1cm47CisKKwkq dGFyZ2V0ID0gbmV3X2hvcml6b247CisJT2xkZXN0WG1pbkluZm9TZXQoaW5mbywgc291cmNlLCBi YWNrZW5kX3BpZCk7Cit9CiAKIC8qCiAgKiBEZXRlcm1pbmUgWElEIGhvcml6b25zLgpAQCAtMTY4 OSw2ICsxNzM1LDggQEAgQ29tcHV0ZVhpZEhvcml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3Vs dCAqaCkKIAogCS8qIGluZmVycmVkIGFmdGVyIFByb2NBcnJheUxvY2sgaXMgcmVsZWFzZWQgKi8K IAloLT5jYXRhbG9nX29sZGVzdF9ub25yZW1vdmFibGUgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsK KwlPbGRlc3RYbWluSW5mb1NldCgmaC0+Y2F0YWxvZ19vbGRlc3Rfbm9ucmVtb3ZhYmxlX2luZm8s CisJCQkJCSAgT0xERVNUWE1JTl9TT1VSQ0VfT1RIRVIsIDApOwogCiAJTFdMb2NrQWNxdWlyZShQ cm9jQXJyYXlMb2NrLCBMV19TSEFSRUQpOwogCkBAIC0xNzEwLDYgKzE3NTgsMTAgQEAgQ29tcHV0 ZVhpZEhvcml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaCkKIAkJaC0+b2xkZXN0X2Nv bnNpZGVyZWRfcnVubmluZyA9IGluaXRpYWw7CiAJCWgtPnNoYXJlZF9vbGRlc3Rfbm9ucmVtb3Zh YmxlID0gaW5pdGlhbDsKIAkJaC0+ZGF0YV9vbGRlc3Rfbm9ucmVtb3ZhYmxlID0gaW5pdGlhbDsK KwkJT2xkZXN0WG1pbkluZm9TZXQoJmgtPnNoYXJlZF9vbGRlc3Rfbm9ucmVtb3ZhYmxlX2luZm8s CisJCQkJCQkgIE9MREVTVFhNSU5fU09VUkNFX09USEVSLCAwKTsKKwkJT2xkZXN0WG1pbkluZm9T ZXQoJmgtPmRhdGFfb2xkZXN0X25vbnJlbW92YWJsZV9pbmZvLAorCQkJCQkJICBPTERFU1RYTUlO X1NPVVJDRV9PVEhFUiwgMCk7CiAKIAkJLyoKIAkJICogT25seSBtb2RpZmljYXRpb25zIG1hZGUg YnkgdGhpcyBiYWNrZW5kIGFmZmVjdCB0aGUgaG9yaXpvbiBmb3IKQEAgLTE3MjQsOSArMTc3Niwx NyBAQCBDb21wdXRlWGlkSG9yaXpvbnMoQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0ICpoKQogCQkg KiBsYXRlc3RDb21wbGV0ZWRYaWQuCiAJCSAqLwogCQlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQo TXlQcm9jLT54aWQpKQorCQl7CiAJCQloLT50ZW1wX29sZGVzdF9ub25yZW1vdmFibGUgPSBNeVBy b2MtPnhpZDsKKwkJCU9sZGVzdFhtaW5JbmZvU2V0KCZoLT50ZW1wX29sZGVzdF9ub25yZW1vdmFi bGVfaW5mbywKKwkJCQkJCQkgIE9MREVTVFhNSU5fU09VUkNFX0FDVElWRV9UUkFOU0FDVElPTiwg TXlQcm9jUGlkKTsKKwkJfQogCQllbHNlCisJCXsKIAkJCWgtPnRlbXBfb2xkZXN0X25vbnJlbW92 YWJsZSA9IGluaXRpYWw7CisJCQlPbGRlc3RYbWluSW5mb1NldCgmaC0+dGVtcF9vbGRlc3Rfbm9u cmVtb3ZhYmxlX2luZm8sCisJCQkJCQkJICBPTERFU1RYTUlOX1NPVVJDRV9PVEhFUiwgMCk7CisJ CX0KIAl9CiAKIAkvKgpAQCAtMTc0NCw2ICsxODA0LDggQEAgQ29tcHV0ZVhpZEhvcml6b25zKENv bXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaCkKIAkJaW50OAkJc3RhdHVzRmxhZ3MgPSBQcm9jR2xv YmFsLT5zdGF0dXNGbGFnc1tpbmRleF07CiAJCVRyYW5zYWN0aW9uSWQgeGlkOwogCQlUcmFuc2Fj dGlvbklkIHhtaW47CisJCU9sZGVzdFhtaW5Tb3VyY2UgY2FuZGlkYXRlX3NvdXJjZTsKKwkJaW50 CQkJY2FuZGlkYXRlX3BpZDsKIAogCQkvKiBGZXRjaCB4aWQganVzdCBvbmNlIC0gc2VlIEdldE5l d1RyYW5zYWN0aW9uSWQgKi8KIAkJeGlkID0gVUlOVDMyX0FDQ0VTU19PTkNFKG90aGVyX3hpZHNb aW5kZXhdKTsKQEAgLTE3NjgsOCArMTgzMCw4IEBAIENvbXB1dGVYaWRIb3Jpem9ucyhDb21wdXRl WGlkSG9yaXpvbnNSZXN1bHQgKmgpCiAJCSAqIGJhY2tlbmRzIGFyZSBwcm90ZWN0ZWQgZXZlbiB3 aXRob3V0IHRoaXMgY2hlY2ssIGl0IGNhbid0IGh1cnQgdG8KIAkJICogaW5jbHVkZSB0aGVtIGhl cmUgYXMgd2VsbC4uCiAJCSAqLwotCQloLT5vbGRlc3RfY29uc2lkZXJlZF9ydW5uaW5nID0KLQkJ CVRyYW5zYWN0aW9uSWRPbGRlcihoLT5vbGRlc3RfY29uc2lkZXJlZF9ydW5uaW5nLCB4bWluKTsK KwkJVXBkYXRlT2xkZXN0WG1pbigmaC0+b2xkZXN0X2NvbnNpZGVyZWRfcnVubmluZywgTlVMTCwg eG1pbiwKKwkJCQkJCSBPTERFU1RYTUlOX1NPVVJDRV9PVEhFUiwgMCk7CiAKIAkJLyoKIAkJICog U2tpcCBvdmVyIGJhY2tlbmRzIGVpdGhlciB2YWN1dW1pbmcgKHdoaWNoIGlzIG9rIHdpdGggcm93 cyBiZWluZwpAQCAtMTc4MCw4ICsxODQyLDE3IEBAIENvbXB1dGVYaWRIb3Jpem9ucyhDb21wdXRl WGlkSG9yaXpvbnNSZXN1bHQgKmgpCiAJCQljb250aW51ZTsKIAogCQkvKiBzaGFyZWQgdGFibGVz IG5lZWQgdG8gdGFrZSBiYWNrZW5kcyBpbiBhbGwgZGF0YWJhc2VzIGludG8gYWNjb3VudCAqLwot CQloLT5zaGFyZWRfb2xkZXN0X25vbnJlbW92YWJsZSA9Ci0JCQlUcmFuc2FjdGlvbklkT2xkZXIo aC0+c2hhcmVkX29sZGVzdF9ub25yZW1vdmFibGUsIHhtaW4pOworCQljYW5kaWRhdGVfcGlkID0g cHJvYy0+cGlkOworCQlpZiAocHJvYy0+cGlkID09IDApCisJCQljYW5kaWRhdGVfc291cmNlID0g T0xERVNUWE1JTl9TT1VSQ0VfUFJFUEFSRURfVFJBTlNBQ1RJT047CisJCWVsc2UgaWYgKHN0YXR1 c0ZsYWdzICYgUFJPQ19BRkZFQ1RTX0FMTF9IT1JJWk9OUykKKwkJCWNhbmRpZGF0ZV9zb3VyY2Ug PSBPTERFU1RYTUlOX1NPVVJDRV9IT1RfU1RBTkRCWV9GRUVEQkFDSzsKKwkJZWxzZQorCQkJY2Fu ZGlkYXRlX3NvdXJjZSA9IE9MREVTVFhNSU5fU09VUkNFX0FDVElWRV9UUkFOU0FDVElPTjsKKwor CQlVcGRhdGVPbGRlc3RYbWluKCZoLT5zaGFyZWRfb2xkZXN0X25vbnJlbW92YWJsZSwKKwkJCQkJ CSAmaC0+c2hhcmVkX29sZGVzdF9ub25yZW1vdmFibGVfaW5mbywKKwkJCQkJCSB4bWluLCBjYW5k aWRhdGVfc291cmNlLCBjYW5kaWRhdGVfcGlkKTsKIAogCQkvKgogCQkgKiBOb3JtYWxseSBzZXNz aW9ucyBpbiBvdGhlciBkYXRhYmFzZXMgYXJlIGlnbm9yZWQgZm9yIGFueXRoaW5nIGJ1dApAQCAt MTgwNyw4ICsxODc4LDkgQEAgQ29tcHV0ZVhpZEhvcml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jl c3VsdCAqaCkKIAkJCShzdGF0dXNGbGFncyAmIFBST0NfQUZGRUNUU19BTExfSE9SSVpPTlMpIHx8 CiAJCQlpbl9yZWNvdmVyeSkKIAkJewotCQkJaC0+ZGF0YV9vbGRlc3Rfbm9ucmVtb3ZhYmxlID0K LQkJCQlUcmFuc2FjdGlvbklkT2xkZXIoaC0+ZGF0YV9vbGRlc3Rfbm9ucmVtb3ZhYmxlLCB4bWlu KTsKKwkJCVVwZGF0ZU9sZGVzdFhtaW4oJmgtPmRhdGFfb2xkZXN0X25vbnJlbW92YWJsZSwKKwkJ CQkJCQkgJmgtPmRhdGFfb2xkZXN0X25vbnJlbW92YWJsZV9pbmZvLAorCQkJCQkJCSB4bWluLCBj YW5kaWRhdGVfc291cmNlLCBjYW5kaWRhdGVfcGlkKTsKIAkJfQogCX0KIApAQCAtMTgyNywxMiAr MTg5OSwxNCBAQCBDb21wdXRlWGlkSG9yaXpvbnMoQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0ICpo KQogCiAJaWYgKGluX3JlY292ZXJ5KQogCXsKLQkJaC0+b2xkZXN0X2NvbnNpZGVyZWRfcnVubmlu ZyA9Ci0JCQlUcmFuc2FjdGlvbklkT2xkZXIoaC0+b2xkZXN0X2NvbnNpZGVyZWRfcnVubmluZywg a2F4bWluKTsKLQkJaC0+c2hhcmVkX29sZGVzdF9ub25yZW1vdmFibGUgPQotCQkJVHJhbnNhY3Rp b25JZE9sZGVyKGgtPnNoYXJlZF9vbGRlc3Rfbm9ucmVtb3ZhYmxlLCBrYXhtaW4pOwotCQloLT5k YXRhX29sZGVzdF9ub25yZW1vdmFibGUgPQotCQkJVHJhbnNhY3Rpb25JZE9sZGVyKGgtPmRhdGFf b2xkZXN0X25vbnJlbW92YWJsZSwga2F4bWluKTsKKwkJVXBkYXRlT2xkZXN0WG1pbigmaC0+b2xk ZXN0X2NvbnNpZGVyZWRfcnVubmluZywgTlVMTCwKKwkJCQkJCSBrYXhtaW4sIE9MREVTVFhNSU5f U09VUkNFX09USEVSLCAwKTsKKwkJVXBkYXRlT2xkZXN0WG1pbigmaC0+c2hhcmVkX29sZGVzdF9u b25yZW1vdmFibGUsCisJCQkJCQkgJmgtPnNoYXJlZF9vbGRlc3Rfbm9ucmVtb3ZhYmxlX2luZm8s CisJCQkJCQkga2F4bWluLCBPTERFU1RYTUlOX1NPVVJDRV9PVEhFUiwgMCk7CisJCVVwZGF0ZU9s ZGVzdFhtaW4oJmgtPmRhdGFfb2xkZXN0X25vbnJlbW92YWJsZSwKKwkJCQkJCSAmaC0+ZGF0YV9v bGRlc3Rfbm9ucmVtb3ZhYmxlX2luZm8sCisJCQkJCQkga2F4bWluLCBPTERFU1RYTUlOX1NPVVJD RV9PVEhFUiwgMCk7CiAJCS8qIHRlbXAgcmVsYXRpb25zIGNhbm5vdCBiZSBhY2Nlc3NlZCBpbiBy ZWNvdmVyeSAqLwogCX0KIApAQCAtMTg0NCwxMCArMTkxOCwxMiBAQCBDb21wdXRlWGlkSG9yaXpv bnMoQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0ICpoKQogCS8qCiAJICogQ2hlY2sgd2hldGhlciB0 aGVyZSBhcmUgcmVwbGljYXRpb24gc2xvdHMgcmVxdWlyaW5nIGFuIG9sZGVyIHhtaW4uCiAJICov Ci0JaC0+c2hhcmVkX29sZGVzdF9ub25yZW1vdmFibGUgPQotCQlUcmFuc2FjdGlvbklkT2xkZXIo aC0+c2hhcmVkX29sZGVzdF9ub25yZW1vdmFibGUsIGgtPnNsb3RfeG1pbik7Ci0JaC0+ZGF0YV9v bGRlc3Rfbm9ucmVtb3ZhYmxlID0KLQkJVHJhbnNhY3Rpb25JZE9sZGVyKGgtPmRhdGFfb2xkZXN0 X25vbnJlbW92YWJsZSwgaC0+c2xvdF94bWluKTsKKwlVcGRhdGVPbGRlc3RYbWluKCZoLT5zaGFy ZWRfb2xkZXN0X25vbnJlbW92YWJsZSwKKwkJCQkJICZoLT5zaGFyZWRfb2xkZXN0X25vbnJlbW92 YWJsZV9pbmZvLAorCQkJCQkgaC0+c2xvdF94bWluLCBPTERFU1RYTUlOX1NPVVJDRV9SRVBMSUNB VElPTl9TTE9ULCAwKTsKKwlVcGRhdGVPbGRlc3RYbWluKCZoLT5kYXRhX29sZGVzdF9ub25yZW1v dmFibGUsCisJCQkJCSAmaC0+ZGF0YV9vbGRlc3Rfbm9ucmVtb3ZhYmxlX2luZm8sCisJCQkJCSBo LT5zbG90X3htaW4sIE9MREVTVFhNSU5fU09VUkNFX1JFUExJQ0FUSU9OX1NMT1QsIDApOwogCiAJ LyoKIAkgKiBUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gY2F0YWxvZyAvIGRhdGEgaG9yaXpv bnMgaXMgdGhhdCB0aGUgc2xvdCdzCkBAIC0xODU3LDEzICsxOTMzLDE2IEBAIENvbXB1dGVYaWRI b3Jpem9ucyhDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgKmgpCiAJICogdGhhdCBhbHNvIGNhbiBj b250YWluIGNhdGFsb2dzLgogCSAqLwogCWgtPnNoYXJlZF9vbGRlc3Rfbm9ucmVtb3ZhYmxlX3Jh dyA9IGgtPnNoYXJlZF9vbGRlc3Rfbm9ucmVtb3ZhYmxlOwotCWgtPnNoYXJlZF9vbGRlc3Rfbm9u cmVtb3ZhYmxlID0KLQkJVHJhbnNhY3Rpb25JZE9sZGVyKGgtPnNoYXJlZF9vbGRlc3Rfbm9ucmVt b3ZhYmxlLAotCQkJCQkJICAgaC0+c2xvdF9jYXRhbG9nX3htaW4pOworCVVwZGF0ZU9sZGVzdFht aW4oJmgtPnNoYXJlZF9vbGRlc3Rfbm9ucmVtb3ZhYmxlLAorCQkJCQkgJmgtPnNoYXJlZF9vbGRl c3Rfbm9ucmVtb3ZhYmxlX2luZm8sCisJCQkJCSBoLT5zbG90X2NhdGFsb2dfeG1pbiwKKwkJCQkJ IE9MREVTVFhNSU5fU09VUkNFX1JFUExJQ0FUSU9OX1NMT1QsIDApOwogCWgtPmNhdGFsb2dfb2xk ZXN0X25vbnJlbW92YWJsZSA9IGgtPmRhdGFfb2xkZXN0X25vbnJlbW92YWJsZTsKLQloLT5jYXRh bG9nX29sZGVzdF9ub25yZW1vdmFibGUgPQotCQlUcmFuc2FjdGlvbklkT2xkZXIoaC0+Y2F0YWxv Z19vbGRlc3Rfbm9ucmVtb3ZhYmxlLAotCQkJCQkJICAgaC0+c2xvdF9jYXRhbG9nX3htaW4pOwor CWgtPmNhdGFsb2dfb2xkZXN0X25vbnJlbW92YWJsZV9pbmZvID0gaC0+ZGF0YV9vbGRlc3Rfbm9u cmVtb3ZhYmxlX2luZm87CisJVXBkYXRlT2xkZXN0WG1pbigmaC0+Y2F0YWxvZ19vbGRlc3Rfbm9u cmVtb3ZhYmxlLAorCQkJCQkgJmgtPmNhdGFsb2dfb2xkZXN0X25vbnJlbW92YWJsZV9pbmZvLAor CQkJCQkgaC0+c2xvdF9jYXRhbG9nX3htaW4sCisJCQkJCSBPTERFU1RYTUlOX1NPVVJDRV9SRVBM SUNBVElPTl9TTE9ULCAwKTsKIAogCS8qCiAJICogSXQncyBwb3NzaWJsZSB0aGF0IHNsb3RzIGJh Y2tlZCB1cCB0aGUgaG9yaXpvbnMgZnVydGhlciB0aGFuCkBAIC0xOTUxLDI1ICsyMDMwLDUzIEBA IEdsb2JhbFZpc0hvcml6b25LaW5kRm9yUmVsKFJlbGF0aW9uIHJlbCkKICAqLwogVHJhbnNhY3Rp b25JZAogR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZChSZWxhdGlvbiByZWwpCit7 CisJLyogRGVsZWdhdGUgdG8gdGhlIFdpdGhSZWFzb24gdmFyaWFudCB0byBhdm9pZCBkdXBsaWNh dGVkIGxvZ2ljICovCisJcmV0dXJuIEdldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWRX aXRoUmVhc29uKHJlbCwgTlVMTCk7Cit9CisKKy8qCisgKiBSZXR1cm4gaG9yaXpvbiBsaWtlIEdl dE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWQoKSwgYW5kIGFsc28gY2xhc3NpZnkKKyAq IHRoZSByZWFzb24gdGhhdCBkZXRlcm1pbmVkIHRoYXQgaG9yaXpvbiBhdCB0aGUgdGltZSBvZiBj b21wdXRhdGlvbi4KKyAqLworVHJhbnNhY3Rpb25JZAorR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJh bnNhY3Rpb25JZFdpdGhSZWFzb24oUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQkgT2xkZXN0WG1p bkluZm8gKm91dF9pbmZvKQogewogCUNvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCBob3Jpem9uczsK KwlUcmFuc2FjdGlvbklkIHRhcmdldCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCUdsb2JhbFZp c0hvcml6b25LaW5kIGtpbmQ7CisJY29uc3QgT2xkZXN0WG1pbkluZm8gKnNvdXJjZV9pbmZvID0g TlVMTDsKKworCWlmIChvdXRfaW5mbyAhPSBOVUxMKQorCQlPbGRlc3RYbWluSW5mb1NldChvdXRf aW5mbywgT0xERVNUWE1JTl9TT1VSQ0VfT1RIRVIsIDApOwogCiAJQ29tcHV0ZVhpZEhvcml6b25z KCZob3Jpem9ucyk7CiAKLQlzd2l0Y2ggKEdsb2JhbFZpc0hvcml6b25LaW5kRm9yUmVsKHJlbCkp CisJa2luZCA9IEdsb2JhbFZpc0hvcml6b25LaW5kRm9yUmVsKHJlbCk7CisJc3dpdGNoIChraW5k KQogCXsKIAkJY2FzZSBWSVNIT1JJWk9OX1NIQVJFRDoKLQkJCXJldHVybiBob3Jpem9ucy5zaGFy ZWRfb2xkZXN0X25vbnJlbW92YWJsZTsKKwkJCXRhcmdldCA9IGhvcml6b25zLnNoYXJlZF9vbGRl c3Rfbm9ucmVtb3ZhYmxlOworCQkJc291cmNlX2luZm8gPSAmaG9yaXpvbnMuc2hhcmVkX29sZGVz dF9ub25yZW1vdmFibGVfaW5mbzsKKwkJCWJyZWFrOwogCQljYXNlIFZJU0hPUklaT05fQ0FUQUxP RzoKLQkJCXJldHVybiBob3Jpem9ucy5jYXRhbG9nX29sZGVzdF9ub25yZW1vdmFibGU7CisJCQl0 YXJnZXQgPSBob3Jpem9ucy5jYXRhbG9nX29sZGVzdF9ub25yZW1vdmFibGU7CisJCQlzb3VyY2Vf aW5mbyA9ICZob3Jpem9ucy5jYXRhbG9nX29sZGVzdF9ub25yZW1vdmFibGVfaW5mbzsKKwkJCWJy ZWFrOwogCQljYXNlIFZJU0hPUklaT05fREFUQToKLQkJCXJldHVybiBob3Jpem9ucy5kYXRhX29s ZGVzdF9ub25yZW1vdmFibGU7CisJCQl0YXJnZXQgPSBob3Jpem9ucy5kYXRhX29sZGVzdF9ub25y ZW1vdmFibGU7CisJCQlzb3VyY2VfaW5mbyA9ICZob3Jpem9ucy5kYXRhX29sZGVzdF9ub25yZW1v dmFibGVfaW5mbzsKKwkJCWJyZWFrOwogCQljYXNlIFZJU0hPUklaT05fVEVNUDoKLQkJCXJldHVy biBob3Jpem9ucy50ZW1wX29sZGVzdF9ub25yZW1vdmFibGU7CisJCQl0YXJnZXQgPSBob3Jpem9u cy50ZW1wX29sZGVzdF9ub25yZW1vdmFibGU7CisJCQlzb3VyY2VfaW5mbyA9ICZob3Jpem9ucy50 ZW1wX29sZGVzdF9ub25yZW1vdmFibGVfaW5mbzsKKwkJCWJyZWFrOwogCX0KIAotCS8qIGp1c3Qg dG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncyAqLwotCXJldHVybiBJbnZhbGlkVHJhbnNhY3Rp b25JZDsKKwlpZiAob3V0X2luZm8gIT0gTlVMTCAmJiBUcmFuc2FjdGlvbklkSXNWYWxpZCh0YXJn ZXQpICYmIHNvdXJjZV9pbmZvICE9IE5VTEwpCisJCSpvdXRfaW5mbyA9ICpzb3VyY2VfaW5mbzsK KwlyZXR1cm4gdGFyZ2V0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvdmFjdXVtLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAppbmRleCAxZjMyOTBj N2ZiZi4uMDI1YzIyZWFiZDIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1 bS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCkBAIC0yNCw2ICsyNCw3IEBA CiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zi5o IgogI2luY2x1ZGUgInN0b3JhZ2UvbG9jay5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5 LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKIAogLyoKQEAgLTI4OCw2ICsyODksOSBA QCBzdHJ1Y3QgVmFjdXVtQ3V0b2ZmcwogCSAqLwogCVRyYW5zYWN0aW9uSWQgRnJlZXplTGltaXQ7 CiAJTXVsdGlYYWN0SWQgTXVsdGlYYWN0Q3V0b2ZmOworCisJLyogV2hhdCBkZWNpZGVkIE9sZGVz dFhtaW4gYXQgYWNxdWlzaXRpb24gdGltZSAqLworCU9sZGVzdFhtaW5JbmZvIG9sZGVzdF94bWlu X2luZm87CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJy YXkuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKaW5kZXggMmY0YWUwNmMyNzku LmZiNDU5ZjliNmM5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKQEAgLTIwLDYgKzIwLDI1IEBA CiAjaW5jbHVkZSAidXRpbHMvc25hcHNob3QuaCIKIAogCisvKgorICogSWRlbnRpZmllcyB3aGF0 IGRldGVybWluZWQgYSByZWxhdGlvbidzIE9sZGVzdFhtaW4gaG9yaXpvbi4KKyAqIFVzZWQgYnkg YXV0b3ZhY3V1bSB0byByZXBvcnQgd2h5IGRlYWQgdHVwbGVzIHdlcmUgbm90IHJlbW92YWJsZS4K KyAqLwordHlwZWRlZiBlbnVtIE9sZGVzdFhtaW5Tb3VyY2UKK3sKKwlPTERFU1RYTUlOX1NPVVJD RV9BQ1RJVkVfVFJBTlNBQ1RJT04sCisJT0xERVNUWE1JTl9TT1VSQ0VfSE9UX1NUQU5EQllfRkVF REJBQ0ssCisJT0xERVNUWE1JTl9TT1VSQ0VfUFJFUEFSRURfVFJBTlNBQ1RJT04sCisJT0xERVNU WE1JTl9TT1VSQ0VfUkVQTElDQVRJT05fU0xPVCwKKwlPTERFU1RYTUlOX1NPVVJDRV9PVEhFUgor fSBPbGRlc3RYbWluU291cmNlOworCit0eXBlZGVmIHN0cnVjdCBPbGRlc3RYbWluSW5mbworewor CU9sZGVzdFhtaW5Tb3VyY2Ugc291cmNlOworCWludAkJCWJhY2tlbmRfcGlkOworfSBPbGRlc3RY bWluSW5mbzsKKwogZXh0ZXJuIFNpemUgUHJvY0FycmF5U2htZW1TaXplKHZvaWQpOwogZXh0ZXJu IHZvaWQgUHJvY0FycmF5U2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgUHJvY0FycmF5QWRk KFBHUFJPQyAqcHJvYyk7CkBAIC01NCw2ICs3Myw4IEBAIGV4dGVybiBSdW5uaW5nVHJhbnNhY3Rp b25zIEdldFJ1bm5pbmdUcmFuc2FjdGlvbkRhdGEodm9pZCk7CiAKIGV4dGVybiBib29sIFRyYW5z YWN0aW9uSWRJc0luUHJvZ3Jlc3MoVHJhbnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJuIFRyYW5zYWN0 aW9uSWQgR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZChSZWxhdGlvbiByZWwpOwor ZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZFdp dGhSZWFzb24oUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQkJCQkJCSAgT2xkZXN0WG1pbkluZm8g KmluZm8pOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xkZXN0VHJhbnNhY3Rpb25JZENvbnNp ZGVyZWRSdW5uaW5nKHZvaWQpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xkZXN0QWN0aXZl VHJhbnNhY3Rpb25JZChib29sIGluQ29tbWl0T25seSwKIAkJCQkJCQkJCQkJCSAgYm9vbCBhbGxE YnMpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZAppbmRleCBmMjU4YmYxY2Nk OS4uYjQyZmVkOTExODQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21l c29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCkBA IC0xOCw2ICsxOCw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwN19jYXRjYWNoZV9pbnZhbC5w bCcsCiAgICAgICAndC8wMDhfcmVwbHNsb3Rfc2luZ2xlX3VzZXIucGwnLAogICAgICAgJ3QvMDA5 X2xvZ190ZW1wX2ZpbGVzLnBsJywKKyAgICAgICd0LzAxMF9hdXRvdmFjdXVtX29sZGVzdF94bWlu X3JlYXNvbi5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9taXNjL3QvMDEwX2F1dG92YWN1dW1fb2xkZXN0X3htaW5fcmVhc29uLnBsIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMTBfYXV0b3ZhY3V1bV9vbGRlc3RfeG1pbl9yZWFz b24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU4MThmMTQzMTgy Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMTBfYXV0 b3ZhY3V1bV9vbGRlc3RfeG1pbl9yZWFzb24ucGwKQEAgLTAsMCArMSwxODYgQEAKKyMgQ29weXJp Z2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIworIyBW YWxpZGF0ZSB0aGF0IGF1dG92YWN1dW0gbG9ncyBleHBsYWluIHdoeSBkZWFkIHR1cGxlcyBjb3Vs ZCBub3QgYmUgcmVtb3ZlZC4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAn YWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBTZXQgdXAgYSBjbHVzdGVyCitteSAk bm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOworJG5vZGUtPmlu aXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGUtPmFwcGVuZF9jb25mKCdw b3N0Z3Jlc3FsLmNvbmYnLCBxcVsKK21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMgPSA1CithdXRv dmFjdXVtX25hcHRpbWUgPSAxcworYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9kZWxheSA9IDAKK2xv Z19hdXRvdmFjdXVtX21pbl9kdXJhdGlvbiA9IDAKK10pOworJG5vZGUtPnN0YXJ0OworCisjIEhl bHBlciB0byB3YWl0IGZvciBhdXRvdmFjdXVtIHRvIGNvbXBsZXRlCitzdWIgd2FpdF9mb3JfYXV0 b3ZhY3V1bQoreworCW15ICgkcmVsbmFtZSkgPSBAXzsKKwlteSAkdmFjdXVtZWQgPSAkbm9kZS0+ cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywgcXFbCisJCVNFTEVDVCBsYXN0X2F1dG92 YWN1dW0gSVMgTk9UIE5VTEwKKwkJRlJPTSBwZ19zdGF0X3VzZXJfdGFibGVzCisJCVdIRVJFIHJl bG5hbWUgPSAnJHJlbG5hbWUnOworCV0sICd0Jyk7CisJb2soJHZhY3V1bWVkLCAiYXV0b3ZhY3V1 bSBjb21wbGV0ZWQgb24gJHJlbG5hbWUiKQorCSAgb3IgQkFJTF9PVVQoInRpbWVkIG91dCB3YWl0 aW5nIGZvciBhdXRvdmFjdXVtIG9uICRyZWxuYW1lIik7Cit9CisKKyMKKyMgQWN0aXZlIHRyYW5z YWN0aW9uCisjCitteSAkYWN0aXZlX3RhYmxlID0gJ2F2X29sZGVzdHhtaW5fYWN0aXZlJzsKKyRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbCitDUkVBVEUgVEFCTEUgJGFjdGl2ZV90YWJs ZShpZCBpbnQpCisgIFdJVEggKGF1dG92YWN1dW1fdmFjdXVtX3NjYWxlX2ZhY3RvciA9IDAsCisJ CWF1dG92YWN1dW1fdmFjdXVtX3RocmVzaG9sZCA9IDEpOworSU5TRVJUIElOVE8gJGFjdGl2ZV90 YWJsZSBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKTsKK10pOworCitteSAkb2Zmc2V0ID0g LXMgJG5vZGUtPmxvZ2ZpbGU7CisKK215ICRibG9ja2VyID0gJG5vZGUtPmJhY2tncm91bmRfcHNx bCgncG9zdGdyZXMnKTsKKyRibG9ja2VyLT5xdWVyeV9zYWZlKHFxWworQkVHSU47CitTRVQgVFJB TlNBQ1RJT04gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsKK1NFTEVDVCAqIEZST00g JGFjdGl2ZV90YWJsZTsKK10pOworCitteSAkYmxvY2tlcl9waWQgPSAkYmxvY2tlci0+cXVlcnlf c2FmZSgnU0VMRUNUIHBnX2JhY2tlbmRfcGlkKCk7Jyk7CitjaG9tcCgkYmxvY2tlcl9waWQpOwor Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSAkYWN0aXZlX3RhYmxl OyIpOworCit3YWl0X2Zvcl9hdXRvdmFjdXVtKCRhY3RpdmVfdGFibGUpOworCitvayggJG5vZGUt PndhaXRfZm9yX2xvZygKKwkJcXIvYXV0b21hdGljIHZhY3V1bSBvZiB0YWJsZSAiXFFwb3N0Z3Jl cy5wdWJsaWMuJGFjdGl2ZV90YWJsZVxFIjouKm9sZGVzdCB4bWluIHNvdXJjZTogYWN0aXZlIHRy YW5zYWN0aW9uIFwocGlkPSRibG9ja2VyX3BpZFwpL3MsCisJCSRvZmZzZXQpLAorCSdhdXRvdmFj dXVtIHJlcG9ydGVkIGFjdGl2ZSB0cmFuc2FjdGlvbiBhcyBvbGRlc3QgeG1pbiBzb3VyY2UnKTsK KworJGJsb2NrZXItPnF1ZXJ5X3NhZmUoJ1JPTExCQUNLOycpOworJGJsb2NrZXItPnF1aXQ7Cisk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFICRhY3RpdmVfdGFibGU7Iik7 CisKKyMKKyMgUHJlcGFyZWQgdHJhbnNhY3Rpb24KKyMKK215ICRwcmVwYXJlZF90YWJsZSA9ICdh dl9vbGRlc3R4bWluX3ByZXBhcmVkJzsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFb CitDUkVBVEUgVEFCTEUgJHByZXBhcmVkX3RhYmxlKGlkIGludCkKKyAgV0lUSCAoYXV0b3ZhY3V1 bV92YWN1dW1fc2NhbGVfZmFjdG9yID0gMCwKKwkJYXV0b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xk ID0gMSk7CitJTlNFUlQgSU5UTyAkcHJlcGFyZWRfdGFibGUgU0VMRUNUIGdlbmVyYXRlX3Nlcmll cygxLCAxMCk7CitdKTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK0JFR0lO OworUFJFUEFSRSBUUkFOU0FDVElPTiAnZ3hfYXV0b3ZhY194bWluJzsKK10pOworCiskb2Zmc2V0 ID0gLXMgJG5vZGUtPmxvZ2ZpbGU7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRF TEVURSBGUk9NICRwcmVwYXJlZF90YWJsZTsiKTsKKword2FpdF9mb3JfYXV0b3ZhY3V1bSgkcHJl cGFyZWRfdGFibGUpOworCitvayggJG5vZGUtPndhaXRfZm9yX2xvZygKKwkJcXIvYXV0b21hdGlj IHZhY3V1bSBvZiB0YWJsZSAiXFFwb3N0Z3Jlcy5wdWJsaWMuJHByZXBhcmVkX3RhYmxlXEUiOi4q b2xkZXN0IHhtaW4gc291cmNlOiBwcmVwYXJlZCB0cmFuc2FjdGlvbi9zLAorCQkkb2Zmc2V0KSwK KwknYXV0b3ZhY3V1bSByZXBvcnRlZCBwcmVwYXJlZCB0cmFuc2FjdGlvbiBhcyBvbGRlc3QgeG1p biBzb3VyY2UnKTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiUk9MTEJBQ0sgUFJF UEFSRUQgJ2d4X2F1dG92YWNfeG1pbic7Iik7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFICRwcmVwYXJlZF90YWJsZTsiKTsKKworIworIyBSZXBsaWNhdGlvbiBzbG90 CisjCitteSAkc2xvdF90YWJsZSA9ICdhdl9vbGRlc3R4bWluX3Nsb3QnOworJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxcVsKK0NSRUFURSBUQUJMRSAkc2xvdF90YWJsZShpZCBpbnQpOwor XSk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJyxxWworU0VMRUNUIHBnX2NyZWF0ZV9s b2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoJ2F1dG92YWNfb2xkZXN0eG1pbl9zbG90JywgJ3Rlc3Rf ZGVjb2RpbmcnKTsKK10pOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSAkc2xvdF90YWJsZTsiKTsKKworbXkgJHNsb3RzdGRlcnIgPSAnJzsKKyRub2RlLT5wc3FsKCdw b3N0Z3JlcycsCisJJ1ZBQ1VVTSAoVkVSQk9TRSkgcGdfY2F0YWxvZy5wZ19jbGFzczsnLAorCXN0 ZGVyciA9PiBcJHNsb3RzdGRlcnIKKyk7CitsaWtlKAorCSRzbG90c3RkZXJyLAorCXFyL29sZGVz dCB4bWluIHNvdXJjZTogcmVwbGljYXRpb24gc2xvdC8sCisJJ1ZBQ1VVTSBWRVJCT1NFIHJlcG9y dGVkIHJlcGxpY2F0aW9uIHNsb3QgYXMgb2xkZXN0IHhtaW4gc291cmNlJyk7CisKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcVsKK1NFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3Qo J2F1dG92YWNfb2xkZXN0eG1pbl9zbG90Jyk7CitdKTsKKworIworIyBIb3Qgc3RhbmRieSBmZWVk YmFjaworIworbXkgJGhzX3RhYmxlID0gJ2F2X29sZGVzdHhtaW5faG90c3RhbmRieSc7Ciskbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworQ1JFQVRFIFRBQkxFICRoc190YWJsZShpZCBp bnQpCisgIFdJVEggKGF1dG92YWN1dW1fdmFjdXVtX3NjYWxlX2ZhY3RvciA9IDAsCisJCWF1dG92 YWN1dW1fdmFjdXVtX3RocmVzaG9sZCA9IDEpOworSU5TRVJUIElOVE8gJGhzX3RhYmxlIFNFTEVD VCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApOworXSk7CisKKyMgU2V0IHVwIGEgaG90IHN0YW5kYnkK KyRub2RlLT5iYWNrdXAoJ29sZGVzdHhtaW5faG90c3RhbmRieV9ia3AnKTsKK215ICRzdGFuZGJ5 ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdvbGRlc3R4bWluX3N0YW5kYnknKTsK KyRzdGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRub2RlLCAnb2xkZXN0eG1pbl9ob3RzdGFuZGJ5 X2JrcCcsCisJaGFzX3N0cmVhbWluZyA9PiAxKTsKKyRzdGFuZGJ5LT5hcHBlbmRfY29uZigncG9z dGdyZXNxbC5jb25mJywgcXFbCitob3Rfc3RhbmRieV9mZWVkYmFjayA9IG9uCit3YWxfcmVjZWl2 ZXJfc3RhdHVzX2ludGVydmFsID0gMXMKK10pOworJHN0YW5kYnktPnN0YXJ0OworJG5vZGUtPndh aXRfZm9yX2NhdGNodXAoJHN0YW5kYnksICdyZXBsYXknLCAkbm9kZS0+bHNuKCdmbHVzaCcpKTsK KworbXkgJHN0YW5kYnlfcmVhZGVyID0gJHN0YW5kYnktPmJhY2tncm91bmRfcHNxbCgncG9zdGdy ZXMnKTsKKyRzdGFuZGJ5X3JlYWRlci0+cXVlcnlfc2FmZSgnQkVHSU47Jyk7CisKKyRub2RlLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsIHFbCitTRUxFQ1QgYm9vbF9vcihiYWNrZW5kX3ht aW4gSVMgTk9UIE5VTEwpCitGUk9NIHBnX3N0YXRfcmVwbGljYXRpb247CitdLCAndCcpOworCitt eSAkaHNfcGlkID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxWworU0VMRUNUIHBpZCBG Uk9NIHBnX3N0YXRfcmVwbGljYXRpb24KK1dIRVJFIGJhY2tlbmRfeG1pbiBJUyBOT1QgTlVMTAor T1JERVIgQlkgcGlkCitMSU1JVCAxOworXSk7CitjaG9tcCgkaHNfcGlkKTsKKworJG9mZnNldCA9 IC1zICRub2RlLT5sb2dmaWxlOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxF VEUgRlJPTSAkaHNfdGFibGU7Iik7CisKK3dhaXRfZm9yX2F1dG92YWN1dW0oJGhzX3RhYmxlKTsK Kworb2soICRub2RlLT53YWl0X2Zvcl9sb2coCisJCXFyL29sZGVzdCB4bWluIHNvdXJjZTogaG90 IHN0YW5kYnkgZmVlZGJhY2sgXChwaWQ9JGhzX3BpZFwpLywKKwkJJG9mZnNldCksCisJJ2F1dG92 YWN1dW0gcmVwb3J0ZWQgaG90IHN0YW5kYnkgZmVlZGJhY2sgYXMgb2xkZXN0IHhtaW4gc291cmNl Jyk7CisKKyRzdGFuZGJ5X3JlYWRlci0+cXVlcnlfc2FmZSgnUk9MTEJBQ0s7Jyk7Ciskc3RhbmRi eV9yZWFkZXItPnF1aXQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxF ICRoc190YWJsZTsiKTsKKworJHN0YW5kYnktPnN0b3A7Ciskbm9kZS0+c3RvcDsKK2RvbmVfdGVz dGluZygpOwotLSAKMi40Ny4zCgo= --000000000000e1ea7306426e86d5--