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 1qTwyl-00BDN6-Is for pgsql-hackers@arkaria.postgresql.org; Thu, 10 Aug 2023 04:08:56 +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 1qTwyi-00Apbc-Vx for pgsql-hackers@arkaria.postgresql.org; Thu, 10 Aug 2023 04:08:53 +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 1qTwyi-00ApbU-Cc for pgsql-hackers@lists.postgresql.org; Thu, 10 Aug 2023 04:08:53 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qTwyZ-001WDE-Q8 for pgsql-hackers@lists.postgresql.org; Thu, 10 Aug 2023 04:08:51 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id 5659161064; Thu, 10 Aug 2023 13:08:39 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_5ba1696a6c25b315fd6f901ff8a239ef" Content-Transfer-Encoding: 7bit Date: Thu, 10 Aug 2023 13:08:39 +0900 From: Masahiro Ikeda To: Michael Paquier Cc: Andres Freund , Bharath Rupireddy , Tristan Partin , pgsql-hackers@lists.postgresql.org Subject: Re: Support to define custom wait events for extensions In-Reply-To: References: <171b38978ae8a21e5635998d9bfedbf6@oss.nttdata.com> <20230801032349.aaiuvhtrcvvcwzcx@awork3.anarazel.de> <9cc4136f9e3629a2ffc8ac66b4de3f31@oss.nttdata.com> <20230808225954.vh6xwikz4fxjbprz@awork3.anarazel.de> <20230809003710.qhys7nvwhdujd4pm@awork3.anarazel.de> <0850ea2f23217b3a87340dd2d721d051@oss.nttdata.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <53dc58793eb3df17d2da8c2fc2275fac@oss.nttdata.com> X-Sender: ikedamsh@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_5ba1696a6c25b315fd6f901ff8a239ef Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi, Thanks for your comments about the v2 patches. I updated to v3 patches. The main changes are: * remove the AddinShmemInitLock assertion * add the new lock (WaitEventExtensionLock) to wait_event_names.txt * change "static const int wee_hash_XXX_size" to "#define XXX" * simplify worker_spi. I removed codes related to share memory and try to allocate the new wait event before waiting per background worker. * change to elog from ereport because the errors are for developers. * revise comments as advised. * fix the request size for shared memory correctly * simplify dblink.c * fix process ordering of WaitEventExtensionNew() as advised to avoid leading illegal state. In addition, I change the followings: * update about custom wait events in sgml. we don't need to use shmem_startup_hook. * change the hash names for readability. (ex. WaitEventExtensionNameHash -> WaitEventExtensionHashById) * fix a bug to fail to get already defined events by names because HASH_BLOBS was specified. HASH_STRINGS is right since the key is C strings. I create a new entry in commitfest for CI testing. (https://commitfest.postgresql.org/44/4494/) Thanks for closing the former entry. (https://commitfest.postgresql.org/43/4368/) Regards, -- Masahiro Ikeda NTT DATA CORPORATION --=_5ba1696a6c25b315fd6f901ff8a239ef Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v3-0002-poc-custom-wait-event-for-dblink.patch Content-Disposition: attachment; filename=v3-0002-poc-custom-wait-event-for-dblink.patch; size=1098 RnJvbSAyMzRjYzdkODUyYWViZjc4Mjg1Y2NkZTM4M2YyN2VhMzVhMjdkYWQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlybyBJa2VkYSA8bXNoci5pa2VkYUBudHQuY29tPgpE YXRlOiBUaHUsIDEwIEF1ZyAyMDIzIDEwOjQ0OjQxICswOTAwClN1YmplY3Q6IFtQQVRDSCAyLzJd IHBvYzogY3VzdG9tIHdhaXQgZXZlbnQgZm9yIGRibGluawoKLS0tCiBjb250cmliL2RibGluay9k YmxpbmsuYyB8IDUgKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKCmRpZmYgLS1naXQgYS9jb250cmliL2RibGluay9kYmxpbmsuYyBiL2NvbnRyaWIv ZGJsaW5rL2RibGluay5jCmluZGV4IDQxZTFmNmM5MWQuLmI3MTU4ZWNkNGYgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvZGJsaW5rL2RibGluay5jCisrKyBiL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCkBA IC0xMjksNiArMTI5LDcgQEAgc3RhdGljIHZvaWQgcmVzdG9yZUxvY2FsR3VjcyhpbnQgbmVzdGxl dmVsKTsKIC8qIEdsb2JhbCAqLwogc3RhdGljIHJlbW90ZUNvbm4gKnBjb25uID0gTlVMTDsKIHN0 YXRpYyBIVEFCICpyZW1vdGVDb25uSGFzaCA9IE5VTEw7CitzdGF0aWMgdWludDMyIHdhaXRfZXZl bnRfaW5mbyA9IDA7CiAKIC8qCiAgKglGb2xsb3dpbmcgaXMgbGlzdCB0aGF0IGhvbGRzIG11bHRp cGxlIHJlbW90ZSBjb25uZWN0aW9ucy4KQEAgLTIwMyw3ICsyMDQsOSBAQCBkYmxpbmtfZ2V0X2Nv bm4oY2hhciAqY29ubmFtZV9vcl9zdHIsCiAJCWRibGlua19jb25uc3RyX2NoZWNrKGNvbm5zdHIp OwogCiAJCS8qIE9LIHRvIG1ha2UgY29ubmVjdGlvbiAqLwotCQljb25uID0gbGlicHFzcnZfY29u bmVjdChjb25uc3RyLCBXQUlUX0VWRU5UX0VYVEVOU0lPTik7CisJCWlmICh3YWl0X2V2ZW50X2lu Zm8gPT0gMCkKKwkJCXdhaXRfZXZlbnRfaW5mbyA9IFdhaXRFdmVudEV4dGVuc2lvbk5ldygiZGJs aW5rX2dldF9jb24iKTsKKwkJY29ubiA9IGxpYnBxc3J2X2Nvbm5lY3QoY29ubnN0ciwgd2FpdF9l dmVudF9pbmZvKTsKIAogCQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQpCiAJ CXsKLS0gCjIuMjUuMQoK --=_5ba1696a6c25b315fd6f901ff8a239ef Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v3-0001-Change-to-manage-custom-wait-events-in-shared-hash.patch Content-Disposition: attachment; filename=v3-0001-Change-to-manage-custom-wait-events-in-shared-hash.patch; size=24544 RnJvbSAwN2JiZmYwNmEwZjU4ZjA4ZDMxM2MwMmNiYjQxMDRhZDFkYjJhMGU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlybyBJa2VkYSA8bXNoci5pa2VkYUBudHQuY29tPgpE YXRlOiBUaHUsIDEwIEF1ZyAyMDIzIDEwOjQzOjM0ICswOTAwClN1YmplY3Q6IFtQQVRDSCAxLzJd IENoYW5nZSB0byBtYW5hZ2UgY3VzdG9tIHdhaXQgZXZlbnRzIGluIHNoYXJlZCBoYXNoCgpDdXJy ZW50bHksIG5hbWVzIG9mIHRoZSBjdXN0b20gd2FpdCBldmVudCBtdXN0IGJlIHJlZ2lzdGVyZWQK cGVyIGJhY2tlbmRzLiBUaGlzIHBhdGNoIHJlbGF4ZXMgdGhlIGNvbnN0cmFpbnRzIGJ5IHN0b3Jl IHRoZQp3YWl0IGV2ZW50cyBhbmQgdGhlaXIgbmFtZXMgaW4gaGFzaCB0YWJsZXMgaW4gc2hhcmVk IG1lbW9yeS4KClNvLCBhbGwgYmFja2VuZHMgY2FuIGxvb2sgdXAgdGhlIHdhaXQgZXZlbnQgbmFt ZXMgb24KcGdfc3RhdF9hY3Rpdml0eSB2aWV3IHdpdGhvdXQgYWRkaXRpb25hbCBwcm9jZXNzaW5n IGJ5IGV4dGVuc2lvbnMuCgpJbiBhZGRpdGlvbiwgZXh0ZW5zaW9ucyB3aGljaCBkbyBub3QgdXNl IHNoYXJlZCBtZW1vcnkgZm9yIHRoZWlyCnVzZSBjYW4gZGVmaW5lIGN1c3RvbSB3YWl0IGV2ZW50 cyBiZWNhdXNlIFdhaXRFdmVudEV4dGVuc2lvbk5ldygpCndpbGwgbmV2ZXIgYWxsb2NhdGUgbmV3 IG9uZSBpZiB0aGUgd2FpdCBldmVudCBhc3NvY2lhdGVkIHRvIHRoZQpuYW1lIGlzIGFscmVhZHkg YWxsb2NhdGVkLiBJdCB1c2UgaGFzaCB0YWJsZSB0byBpZGVudGlmeSB1bmlxdWVuZXNzLgotLS0K IGRvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgICAgICAgICAgICAgICAgICB8ICAgNyArLQog ZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAgIHwgIDI2ICstLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4dCAgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYyAgICAgICB8IDIxOSArKysrKysr KysrKy0tLS0tLS0KIC4uLi91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCAgICAg ICB8ICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmggICAgICAgICAgICAgICAg fCAgMTcgKy0KIC4uLi9tb2R1bGVzL3dvcmtlcl9zcGkvdC8wMDFfd29ya2VyX3NwaS5wbCAgICB8 ICAxOCArLQogLi4uL21vZHVsZXMvd29ya2VyX3NwaS93b3JrZXJfc3BpLS0xLjAuc3FsICAgIHwg ICA1IC0KIHNyYy90ZXN0L21vZHVsZXMvd29ya2VyX3NwaS93b3JrZXJfc3BpLmMgICAgICB8IDEw OSArLS0tLS0tLS0KIDkgZmlsZXMgY2hhbmdlZCwgMTY1IGluc2VydGlvbnMoKyksIDIzOCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sIGIvZG9j L3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAppbmRleCBmNGZjNWQ4MTRmLi4xOTE4MTgzMmQ3IDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9tb25pdG9yaW5nLnNnbWwKQEAgLTExMjEsMTAgKzExMjEsOSBAQCBTRUxFQ1QgcGlkLCB3YWl0 X2V2ZW50X3R5cGUsIHdhaXRfZXZlbnQgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHdhaXRf ZXZlbnQgaQogICAgICA8bGl0ZXJhbD5MV0xvY2s8L2xpdGVyYWw+IHR5cGVzCiAgICAgIHRvIHRo ZSBsaXN0IHNob3duIGluIDx4cmVmIGxpbmtlbmQ9IndhaXQtZXZlbnQtZXh0ZW5zaW9uLXRhYmxl Ii8+IGFuZAogICAgICA8eHJlZiBsaW5rZW5kPSJ3YWl0LWV2ZW50LWx3bG9jay10YWJsZSIvPi4g SW4gc29tZSBjYXNlcywgdGhlIG5hbWUKLSAgICAgYXNzaWduZWQgYnkgYW4gZXh0ZW5zaW9uIHdp bGwgbm90IGJlIGF2YWlsYWJsZSBpbiBhbGwgc2VydmVyIHByb2Nlc3NlczsKLSAgICAgc28gYW4g PGxpdGVyYWw+RXh0ZW5zaW9uPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5MV0xvY2s8L2xpdGVyYWw+ IHdhaXQKLSAgICAgZXZlbnQgbWlnaHQgYmUgcmVwb3J0ZWQgYXMganVzdAotICAgICA8cXVvdGU+ PGxpdGVyYWw+ZXh0ZW5zaW9uPC9saXRlcmFsPjwvcXVvdGU+IHJhdGhlciB0aGFuIHRoZQorICAg ICBvZiA8bGl0ZXJhbD5MV0xvY2s8L2xpdGVyYWw+IGFzc2lnbmVkIGJ5IGFuIGV4dGVuc2lvbiB3 aWxsIG5vdCBiZQorICAgICBhdmFpbGFibGUgaW4gYWxsIHNlcnZlciBwcm9jZXNzZXM7IHNvIGFu IHdhaXQgZXZlbnQgbWlnaHQgYmUgcmVwb3J0ZWQKKyAgICAgYXMganVzdCA8cXVvdGU+PGxpdGVy YWw+ZXh0ZW5zaW9uPC9saXRlcmFsPjwvcXVvdGU+IHJhdGhlciB0aGFuIHRoZQogICAgICBleHRl bnNpb24tYXNzaWduZWQgbmFtZS4KICAgICA8L3BhcmE+CiAgICA8L25vdGU+CmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC94ZnVuYy5zZ21sCmluZGV4 IGQ2MzQ1YTc3NWIuLjI4MWMxNzhiMGUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC94ZnVuYy5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC94ZnVuYy5zZ21sCkBAIC0zNDU0LDMzICszNDU0LDE1IEBA IGlmICghcHRyKQogICAgPC9zZWN0Mj4KIAogICAgPHNlY3QyIGlkPSJ4ZnVuYy1hZGRpbi13YWl0 LWV2ZW50cyI+Ci0gICAgPHRpdGxlPlNoYXJlZCBNZW1vcnkgYW5kIEN1c3RvbSBXYWl0IEV2ZW50 czwvdGl0bGU+CisgICAgPHRpdGxlPkN1c3RvbSBXYWl0IEV2ZW50czwvdGl0bGU+CiAKICAgICA8 cGFyYT4KICAgICAgQWRkLWlucyBjYW4gZGVmaW5lIGN1c3RvbSB3YWl0IGV2ZW50cyB1bmRlciB0 aGUgd2FpdCBldmVudCB0eXBlCi0gICAgIDxsaXRlcmFsPkV4dGVuc2lvbjwvbGl0ZXJhbD4uIFRo ZSBhZGQtaW4ncyBzaGFyZWQgbGlicmFyeSBtdXN0IGJlCi0gICAgIHByZWxvYWRlZCBieSBzcGVj aWZ5aW5nIGl0IGluIDxsaXRlcmFsPnNoYXJlZF9wcmVsb2FkX2xpYnJhcmllczwvbGl0ZXJhbD4s Ci0gICAgIGFuZCByZWdpc3RlciBhIDxsaXRlcmFsPnNobWVtX3JlcXVlc3RfaG9vazwvbGl0ZXJh bD4gYW5kIGEKLSAgICAgPGxpdGVyYWw+c2htZW1fc3RhcnR1cF9ob29rPC9saXRlcmFsPiBpbiBp dHMKLSAgICAgPGZ1bmN0aW9uPl9QR19pbml0PC9mdW5jdGlvbj4gZnVuY3Rpb24uCi0gICAgIDxs aXRlcmFsPnNobWVtX3JlcXVlc3RfaG9vazwvbGl0ZXJhbD4gY2FuIHJlcXVlc3QgYSBzaGFyZWQg bWVtb3J5IHNpemUKLSAgICAgdG8gYmUgbGF0ZXIgdXNlZCBhdCBzdGFydHVwIGJ5IGNhbGxpbmc6 CisgICAgIDxsaXRlcmFsPkV4dGVuc2lvbjwvbGl0ZXJhbD4gYnkgY2FsbGluZzoKIDxwcm9ncmFt bGlzdGluZz4KLXZvaWQgUmVxdWVzdEFkZGluU2htZW1TcGFjZShpbnQgc2l6ZSkKLTwvcHJvZ3Jh bWxpc3Rpbmc+Ci0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICA8bGl0ZXJhbD5zaG1lbV9z dGFydHVwX2hvb2s8L2xpdGVyYWw+IGNhbiBhbGxvY2F0ZSBpbiBzaGFyZWQgbWVtb3J5Ci0gICAg IGN1c3RvbSB3YWl0IGV2ZW50cyBieSBjYWxsaW5nIHdoaWxlIGhvbGRpbmcgdGhlIExXTG9jawot ICAgICA8ZnVuY3Rpb24+QWRkaW5TaG1lbUluaXRMb2NrPC9mdW5jdGlvbj4gdG8gYXZvaWQgYW55 IHJhY2UgY29uZGl0aW9uczoKLTxwcm9ncmFtbGlzdGluZz4KLXVpbnQzMiBXYWl0RXZlbnRFeHRl bnNpb25OZXcodm9pZCkKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgIE5leHQsIGVhY2ggcHJvY2Vz cyBuZWVkcyB0byBhc3NvY2lhdGUgdGhlIHdhaXQgZXZlbnQgYWxsb2NhdGVkIHByZXZpb3VzbHkK LSAgICAgdG8gYSB1c2VyLWZhY2luZyBjdXN0b20gc3RyaW5nLCB3aGljaCBpcyBzb21ldGhpbmcg ZG9uZSBieSBjYWxsaW5nOgotPHByb2dyYW1saXN0aW5nPgotdm9pZCBXYWl0RXZlbnRFeHRlbnNp b25SZWdpc3Rlck5hbWUodWludDMyIHdhaXRfZXZlbnRfaW5mbywgY29uc3QgY2hhciAqd2FpdF9l dmVudF9uYW1lKQordWludDMyIFdhaXRFdmVudEV4dGVuc2lvbk5ldyhjb25zdCBjaGFyICp3YWl0 X2V2ZW50X25hbWUpCiA8L3Byb2dyYW1saXN0aW5nPgorICAgICBUaGUgd2FpdCBldmVudCBpcyBh c3NvY2lhdGVkIHRvIGEgdXNlci1mYWNpbmcgY3VzdG9tIHN0cmluZy4KICAgICAgQW4gZXhhbXBs ZSBjYW4gYmUgZm91bmQgaW4gPGZpbGVuYW1lPnNyYy90ZXN0L21vZHVsZXMvd29ya2VyX3NwaTwv ZmlsZW5hbWU+CiAgICAgIGluIHRoZSBQb3N0Z3JlU1FMIHNvdXJjZSB0cmVlLgogICAgIDwvcGFy YT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2tuYW1lcy50eHQg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrbmFtZXMudHh0CmluZGV4IGIzNGI2YWZl Y2QuLjdhZjNlMGJhMWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xv Y2tuYW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4 dApAQCAtNTMsMyArNTMsNCBAQCBYYWN0VHJ1bmNhdGlvbkxvY2sJCQkJCTQ0CiAjIDQ1IHdhcyBY YWN0VHJ1bmNhdGlvbkxvY2sgdW50aWwgcmVtb3ZhbCBvZiBCYWNrZW5kUmFuZG9tTG9jawogV3Jh cExpbWl0c1ZhY3V1bUxvY2sJCQkJNDYKIE5vdGlmeVF1ZXVlVGFpbExvY2sJCQkJCTQ3CitXYWl0 RXZlbnRFeHRlbnNpb25Mb2NrICAgICAgICAgICAgICA0OApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudC5jCmluZGV4IGIzNTk2ZWNlODAuLmQyYjIxZDU0YTYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKQEAgLTQ1LDYgKzQ1LDQyIEBAIHVpbnQzMgkg ICAqbXlfd2FpdF9ldmVudF9pbmZvID0gJmxvY2FsX215X3dhaXRfZXZlbnRfaW5mbzsKICNkZWZp bmUgV0FJVF9FVkVOVF9DTEFTU19NQVNLCTB4RkYwMDAwMDAKICNkZWZpbmUgV0FJVF9FVkVOVF9J RF9NQVNLCQkweDAwMDBGRkZGCiAKKy8qCisgKiBIYXNoIHRhYmxlcyBmb3Igc3RvcmluZyBjdXN0 b20gd2FpdCBldmVudCBpZHMgYW5kIHRoZWlyIG5hbWVzIGluCisgKiBzaGFyZWQgbWVtb3J5Lgor ICoKKyAqIFdhaXRFdmVudEV4dGVuc2lvbkhhc2hCeUlkIGlzIHVzZWQgdG8gZmluZCB0aGUgbmFt ZSBmcm9tIGEgZXZlbnQgaWQuCisgKiBJdCBlbmFibGVzIGFsbCBiYWNrZW5kcyBsb29rIHVwIHRo ZW0gd2l0aG91dCBhZGRpdGlvbmFsIHByb2Nlc3NpbmcKKyAqIHBlciBiYWNrZW5kLgorICoKKyAq IFdhaXRFdmVudEV4dGVuc2lvbkhhc2hCeU5hbWUgaXMgdXNlZCB0byBmaW5kIHRoZSBldmVudCBp ZCBmcm9tIGEgbmFtZS4KKyAqIEl0J3MgdXNlZCB0byBlbnN1cmUgdGhhdCBkdXBsaWNhdGVkIGVu dHJpZXMgd29uJ3QgYmUgcmVnaXN0ZXJlZAorICogYnkgaWRlbnRpZnkgdW5pcXVlbmVzcyBieSB0 aGUgbmFtZXMKKyAqCisgKiBUaGUgc2l6ZSBvZiBoYXNoIHRhYmxlIGlzIGJhc2VkIG9uIGFzc3Vt cHRpb24uIEluIG1vc3Qgb2YgdGhlIGNhc2UsCisgKiAxNiBzZWVtIHRvIGJlIHN1ZmZpY2llbnQu IEl0IHNlZW1zIHVubGlrZWx5IHRoYXQgdGhlIG51bWJlciBvZiBlbnRyaWVzCisgKiB3aWxsIHJl YWNoIDUxMi4KKyAqLworc3RhdGljIEhUQUIgKldhaXRFdmVudEV4dGVuc2lvbkhhc2hCeUlkOwkv KiBmaW5kIG5hbWVzIGZyb20gaWRzICovCitzdGF0aWMgSFRBQiAqV2FpdEV2ZW50RXh0ZW5zaW9u SGFzaEJ5TmFtZTsJLyogZmluZCBpZHMgZnJvbSBuYW1lcyAqLworCisjZGVmaW5lIFdhaXRFdmVu dEV4dGVuc2lvbkhhc2hJbml0U2l6ZSAxMjgKKyNkZWZpbmUgV2FpdEV2ZW50RXh0ZW5zaW9uSGFz aE1heFNpemUgNTEyCisKKy8qIGhhc2ggdGFibGUgZW50cmVzICovCit0eXBlZGVmIHN0cnVjdCBX YWl0RXZlbnRFeHRlbnNpb25FbnRyeUJ5SWQKK3sKKwl1aW50MTYJZXZlbnRfaWQ7CQkJCQkJLyog aGFzaCBrZXkgKi8KKwljaGFyCXdhaXRfZXZlbnRfbmFtZVtOQU1FREFUQUxFTl07CS8qIGN1c3Rv bSB3YWl0IGV2ZW50IG5hbWUgKi8KK30gV2FpdEV2ZW50RXh0ZW5zaW9uRW50cnlCeUlkOworCit0 eXBlZGVmIHN0cnVjdCBXYWl0RXZlbnRFeHRlbnNpb25FbnRyeUJ5TmFtZQoreworCWNoYXIJd2Fp dF9ldmVudF9uYW1lW05BTUVEQVRBTEVOXTsJLyogaGFzaCBrZXkgKi8KKwl1aW50MTYJZXZlbnRf aWQ7CQkJCQkJLyogd2FpdCBldmVudCBpZCAqLworfSBXYWl0RXZlbnRFeHRlbnNpb25FbnRyeUJ5 TmFtZTsKKworCiAvKiBkeW5hbWljIGFsbG9jYXRpb24gY291bnRlciBmb3IgY3VzdG9tIHdhaXQg ZXZlbnRzIGluIGV4dGVuc2lvbnMgKi8KIHR5cGVkZWYgc3RydWN0IFdhaXRFdmVudEV4dGVuc2lv bkNvdW50ZXJEYXRhCiB7CkBAIC01OSwzNiArOTUsMzggQEAgc3RhdGljIFdhaXRFdmVudEV4dGVu c2lvbkNvdW50ZXJEYXRhICpXYWl0RXZlbnRFeHRlbnNpb25Db3VudGVyOwogI2RlZmluZSBOVU1f QlVJTFRJTl9XQUlUX0VWRU5UX0VYVEVOU0lPTglcCiAJKFdBSVRfRVZFTlRfRVhURU5TSU9OX0ZJ UlNUX1VTRVJfREVGSU5FRCAtIFdBSVRfRVZFTlRfRVhURU5TSU9OKQogCi0vKgotICogVGhpcyBp cyBpbmRleGVkIGJ5IGV2ZW50IElEIG1pbnVzIE5VTV9CVUlMVElOX1dBSVRfRVZFTlRfRVhURU5T SU9OLCBhbmQKLSAqIHN0b3JlcyB0aGUgbmFtZXMgb2YgYWxsIGR5bmFtaWNhbGx5LWNyZWF0ZWQg ZXZlbnQgSURzIGtub3duIHRvIHRoZSBjdXJyZW50Ci0gKiBwcm9jZXNzLiAgQW55IHVudXNlZCBl bnRyaWVzIGluIHRoZSBhcnJheSB3aWxsIGNvbnRhaW4gTlVMTC4KLSAqLwotc3RhdGljIGNvbnN0 IGNoYXIgKipXYWl0RXZlbnRFeHRlbnNpb25OYW1lcyA9IE5VTEw7Ci1zdGF0aWMgaW50CVdhaXRF dmVudEV4dGVuc2lvbk5hbWVzQWxsb2NhdGVkID0gMDsKKy8qIHdhaXQgZXZlbnQgaW5mbyBmb3Ig ZXh0ZW5zaW9ucyAqLworI2RlZmluZSBXQUlUX0VWRU5UX0VYVEVOU0lPTl9JTkZPKGV2ZW50SWQp CShQR19XQUlUX0VYVEVOU0lPTiB8IGV2ZW50SWQpCiAKIHN0YXRpYyBjb25zdCBjaGFyICpHZXRX YWl0RXZlbnRFeHRlbnNpb25JZGVudGlmaWVyKHVpbnQxNiBldmVudElkKTsKIAogLyoKLSAqICBS ZXR1cm4gdGhlIHNwYWNlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gY291bnRlci4KKyAqICBSZXR1 cm4gdGhlIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlcyBhbmQgZHluYW1pYyBh bGxvY2F0aW9uIGNvdW50ZXIuCiAgKi8KIFNpemUKIFdhaXRFdmVudEV4dGVuc2lvblNobWVtU2l6 ZSh2b2lkKQogewotCXJldHVybiBzaXplb2YoV2FpdEV2ZW50RXh0ZW5zaW9uQ291bnRlckRhdGEp OworCVNpemUJc3o7CisJc3ogPSBNQVhBTElHTihzaXplb2YoV2FpdEV2ZW50RXh0ZW5zaW9uQ291 bnRlckRhdGEpKTsKKwlzeiA9IGFkZF9zaXplKHN6LCBoYXNoX2VzdGltYXRlX3NpemUoV2FpdEV2 ZW50RXh0ZW5zaW9uSGFzaE1heFNpemUsCisJCQkJCQkJCQkJc2l6ZW9mKFdhaXRFdmVudEV4dGVu c2lvbkVudHJ5QnlJZCkpKTsKKwlzeiA9IGFkZF9zaXplKHN6LCBoYXNoX2VzdGltYXRlX3NpemUo V2FpdEV2ZW50RXh0ZW5zaW9uSGFzaE1heFNpemUsCisJCQkJCQkJCQkJc2l6ZW9mKFdhaXRFdmVu dEV4dGVuc2lvbkVudHJ5QnlOYW1lKSkpOworCXJldHVybiBzejsKIH0KIAogLyoKLSAqIEFsbG9j YXRlIHNobWVtIHNwYWNlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gY291bnRlci4KKyAqIEFsbG9j YXRlIHNobWVtIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoIGFuZCBkeW5hbWljIGFsbG9j YXRpb24gY291bnRlci4KICAqLwogdm9pZAogV2FpdEV2ZW50RXh0ZW5zaW9uU2htZW1Jbml0KHZv aWQpCiB7CiAJYm9vbAkJZm91bmQ7CisJSEFTSENUTAkJaW5mbzsKIAogCVdhaXRFdmVudEV4dGVu c2lvbkNvdW50ZXIgPSAoV2FpdEV2ZW50RXh0ZW5zaW9uQ291bnRlckRhdGEgKikKIAkJU2htZW1J bml0U3RydWN0KCJXYWl0RXZlbnRFeHRlbnNpb25Db3VudGVyRGF0YSIsCi0JCQkJCQlXYWl0RXZl bnRFeHRlbnNpb25TaG1lbVNpemUoKSwgJmZvdW5kKTsKKwkJCQkJCU1BWEFMSUdOKHNpemVvZihX YWl0RXZlbnRFeHRlbnNpb25Db3VudGVyRGF0YSkpLCAmZm91bmQpOwogCiAJaWYgKCFmb3VuZCkK IAl7CkBAIC05NiwyMSArMTM0LDc3IEBAIFdhaXRFdmVudEV4dGVuc2lvblNobWVtSW5pdCh2b2lk KQogCQlXYWl0RXZlbnRFeHRlbnNpb25Db3VudGVyLT5uZXh0SWQgPSBOVU1fQlVJTFRJTl9XQUlU X0VWRU5UX0VYVEVOU0lPTjsKIAkJU3BpbkxvY2tJbml0KCZXYWl0RXZlbnRFeHRlbnNpb25Db3Vu dGVyLT5tdXRleCk7CiAJfQorCisJLyogaW5pdGlhbGl6ZSBvciBhdGF0Y2ggdGhlIGhhc2ggdGFi bGVzIHRvIHN0b3JlIGN1c3RvbSB3YWl0IGV2ZW50cyAqLworCWluZm8ua2V5c2l6ZSA9IHNpemVv Zih1aW50MTYpOworCWluZm8uZW50cnlzaXplID0gc2l6ZW9mKFdhaXRFdmVudEV4dGVuc2lvbkVu dHJ5QnlJZCk7CisJV2FpdEV2ZW50RXh0ZW5zaW9uSGFzaEJ5SWQgPSBTaG1lbUluaXRIYXNoKCJX YWl0IEV2ZW50IEV4dGVuc2lvbiBoYXNoIGJ5IGlkIiwKKwkJCQkJV2FpdEV2ZW50RXh0ZW5zaW9u SGFzaEluaXRTaXplLAorCQkJCQlXYWl0RXZlbnRFeHRlbnNpb25IYXNoTWF4U2l6ZSwKKwkJCQkJ JmluZm8sCisJCQkJCUhBU0hfRUxFTSB8IEhBU0hfQkxPQlMpOworCisJaW5mby5rZXlzaXplID0g c2l6ZW9mKGNoYXJbTkFNRURBVEFMRU5dKTsKKwlpbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihXYWl0 RXZlbnRFeHRlbnNpb25FbnRyeUJ5TmFtZSk7CisJV2FpdEV2ZW50RXh0ZW5zaW9uSGFzaEJ5TmFt ZSA9IFNobWVtSW5pdEhhc2goIldhaXQgRXZlbnQgRXh0ZW5zaW9uIGhhc2ggYnkgbmFtZSIsCisJ CQkJCVdhaXRFdmVudEV4dGVuc2lvbkhhc2hJbml0U2l6ZSwKKwkJCQkJV2FpdEV2ZW50RXh0ZW5z aW9uSGFzaE1heFNpemUsCisJCQkJCSZpbmZvLAorCQkJCQlIQVNIX0VMRU0gfCBIQVNIX1NUUklO R1MpOyAgIC8qIGtleSBpcyBOdWxsLXRlcm1pbmF0ZWQgQyBzdHJpbmdzICovCiB9CiAKIC8qCi0g KiBBbGxvY2F0ZSBhIG5ldyBldmVudCBJRCBhbmQgcmV0dXJuIHRoZSB3YWl0IGV2ZW50LgorICog QWxsb2NhdGUgYSBuZXcgZXZlbnQgSUQgYW5kIHJldHVybiB0aGUgd2FpdCBldmVudCBpbmZvLgor ICoKKyAqIElmIHRoZSB3YWl0IGV2ZW50IG5hbWUgaXMgYWxyZWFkeSBkZWZpbmVkLCB0aGlzIGRv bid0CisgKiBhbGxvY2F0ZSBuZXcgb25lLCBidXQgaXQgcmV0dXJuIHRoZSB3YWl0IGV2ZW50IGlu Zm8KKyAqIGFzc29jaWF0ZWQgdG8gdGhlIG5hbWUuCiAgKi8KIHVpbnQzMgotV2FpdEV2ZW50RXh0 ZW5zaW9uTmV3KHZvaWQpCitXYWl0RXZlbnRFeHRlbnNpb25OZXcoY29uc3QgY2hhciAqd2FpdF9l dmVudF9uYW1lKQogewogCXVpbnQxNgkJZXZlbnRJZDsKKwlib29sCQlmb3VuZDsKKwlXYWl0RXZl bnRFeHRlbnNpb25FbnRyeUJ5TmFtZQkqZW50cnlfYnlfbmFtZTsKKwlXYWl0RXZlbnRFeHRlbnNp b25FbnRyeUJ5SWQJKmVudHJ5X2J5X2lkOworCisJLyogQ2hlY2sgdGhlIGxpbWl0IG9mIHRoZSBs ZW5ndGggb2YgdGhlIGV2ZW50IG5hbWUgKi8KKwlpZiAoc3RybGVuKHdhaXRfZXZlbnRfbmFtZSkg Pj0gTkFNRURBVEFMRU4pCisJCWVsb2coRVJST1IsCisJCQkiY2Fubm90IHVzZSBjdXN0b20gd2Fp dCBldmVudCBzdHJpbmcgbG9uZ2VyIHRoYW4gJXUgY2hhcmFjdGVycyIsCisJCQlOQU1FREFUQUxF TiAtIDEpOwogCi0JQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKEFkZGluU2htZW1Jbml0TG9j aywgTFdfRVhDTFVTSVZFKSk7CisJLyoKKwkgKiBDaGVjayB0aGUgd2FpdCBldmVudCBpbmZvIGFz c29jaWF0ZWQgdG8gdGhlIG5hbWUgaXMgYWxyZWFkeSBkZWZpbmVkLgorCSAqIFJldHVybiBpdCBp ZiBzby4KKwkgKi8KKwlMV0xvY2tBY3F1aXJlKFdhaXRFdmVudEV4dGVuc2lvbkxvY2ssIExXX1NI QVJFRCk7CisJZW50cnlfYnlfbmFtZSA9IChXYWl0RXZlbnRFeHRlbnNpb25FbnRyeUJ5TmFtZSAq KQorCQkJCWhhc2hfc2VhcmNoKFdhaXRFdmVudEV4dGVuc2lvbkhhc2hCeU5hbWUsIHdhaXRfZXZl bnRfbmFtZSwKKwkJCQkJCQlIQVNIX0ZJTkQsICZmb3VuZCk7CisJTFdMb2NrUmVsZWFzZShXYWl0 RXZlbnRFeHRlbnNpb25Mb2NrKTsKKwlpZiAoZm91bmQpCisJCXJldHVybiBXQUlUX0VWRU5UX0VY VEVOU0lPTl9JTkZPKGVudHJ5X2J5X25hbWUtPmV2ZW50X2lkKTsKKworCS8qCisJICogQWxsb2Nh dGUgYW5kIHJlZ2lzdGVyIGEgbmV3IHdhaXQgZXZlbnQuIEJ1dCwgd2UgbmVlZCB0byByZWNoZWNr IGJlY2F1c2UKKwkgKiBvdGhlciBwcm9jZXNzZXMgY291bGQgYWxyZWFkeSBkbyBzbyB3aGlsZSBy ZWxlYXNpbmcgdGhlIGxvY2suCisJICovCisJTFdMb2NrQWNxdWlyZShXYWl0RXZlbnRFeHRlbnNp b25Mb2NrLCBMV19FWENMVVNJVkUpOworCWVudHJ5X2J5X25hbWUgPSAoV2FpdEV2ZW50RXh0ZW5z aW9uRW50cnlCeU5hbWUgKikKKwkJCQloYXNoX3NlYXJjaChXYWl0RXZlbnRFeHRlbnNpb25IYXNo QnlOYW1lLCB3YWl0X2V2ZW50X25hbWUsCisJCQkJCQkJSEFTSF9GSU5ELCAmZm91bmQpOworCS8q IFJlY2hlY2sgKi8KKwlpZiAoZm91bmQpCisJeworCQlMV0xvY2tSZWxlYXNlKFdhaXRFdmVudEV4 dGVuc2lvbkxvY2spOworCQlyZXR1cm4gV0FJVF9FVkVOVF9FWFRFTlNJT05fSU5GTyhlbnRyeV9i eV9uYW1lLT5ldmVudF9pZCk7CisJfQogCisJLyogQWxsb2NhdGUgYSBuZXcgZXZlbnQgSWQgKi8K IAlTcGluTG9ja0FjcXVpcmUoJldhaXRFdmVudEV4dGVuc2lvbkNvdW50ZXItPm11dGV4KTsKIAot CWlmIChXYWl0RXZlbnRFeHRlbnNpb25Db3VudGVyLT5uZXh0SWQgPiBQR19VSU5UMTZfTUFYKQor CWlmIChXYWl0RXZlbnRFeHRlbnNpb25Db3VudGVyLT5uZXh0SWQgPj0gV2FpdEV2ZW50RXh0ZW5z aW9uSGFzaE1heFNpemUpCiAJewogCQlTcGluTG9ja1JlbGVhc2UoJldhaXRFdmVudEV4dGVuc2lv bkNvdW50ZXItPm11dGV4KTsKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTEyMiw2NCArMjE2LDIzIEBA IFdhaXRFdmVudEV4dGVuc2lvbk5ldyh2b2lkKQogCiAJU3BpbkxvY2tSZWxlYXNlKCZXYWl0RXZl bnRFeHRlbnNpb25Db3VudGVyLT5tdXRleCk7CiAKLQlyZXR1cm4gUEdfV0FJVF9FWFRFTlNJT04g fCBldmVudElkOwotfQotCi0vKgotICogUmVnaXN0ZXIgYSBkeW5hbWljIHdhaXQgZXZlbnQgbmFt ZSBmb3IgZXh0ZW5zaW9uIGluIHRoZSBsb29rdXAgdGFibGUKLSAqIG9mIHRoZSBjdXJyZW50IHBy b2Nlc3MuCi0gKgotICogVGhpcyByb3V0aW5lIHdpbGwgc2F2ZSBhIHBvaW50ZXIgdG8gdGhlIHdh aXQgZXZlbnQgbmFtZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQsCi0gKiBzbyB0aGUgbmFtZSBzaG91 bGQgYmUgYWxsb2NhdGVkIGluIGEgYmFja2VuZC1saWZldGltZSBjb250ZXh0Ci0gKiAoc2hhcmVk IG1lbW9yeSwgVG9wTWVtb3J5Q29udGV4dCwgc3RhdGljIGNvbnN0YW50LCBvciBzaW1pbGFyKS4K LSAqCi0gKiBUaGUgIndhaXRfZXZlbnRfbmFtZSIgd2lsbCBiZSB1c2VyLXZpc2libGUgYXMgYSB3 YWl0IGV2ZW50IG5hbWUsIHNvIHRyeSB0bwotICogdXNlIGEgbmFtZSB0aGF0IGZpdHMgdGhlIHN0 eWxlIGZvciB0aG9zZS4KLSAqLwotdm9pZAotV2FpdEV2ZW50RXh0ZW5zaW9uUmVnaXN0ZXJOYW1l KHVpbnQzMiB3YWl0X2V2ZW50X2luZm8sCi0JCQkJCQkJICAgY29uc3QgY2hhciAqd2FpdF9ldmVu dF9uYW1lKQotewotCXVpbnQzMgkJY2xhc3NJZDsKLQl1aW50MTYJCWV2ZW50SWQ7Ci0KLQljbGFz c0lkID0gd2FpdF9ldmVudF9pbmZvICYgV0FJVF9FVkVOVF9DTEFTU19NQVNLOwotCWV2ZW50SWQg PSB3YWl0X2V2ZW50X2luZm8gJiBXQUlUX0VWRU5UX0lEX01BU0s7Ci0KLQkvKiBDaGVjayB0aGUg d2FpdCBldmVudCBjbGFzcy4gKi8KLQlpZiAoY2xhc3NJZCAhPSBQR19XQUlUX0VYVEVOU0lPTikK LQkJZXJlcG9ydChFUlJPUiwKLQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAotCQkJCWVycm1zZygiaW52YWxpZCB3YWl0IGV2ZW50IGNsYXNzICV1IiwgY2xhc3NJ ZCkpOwotCi0JLyogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIHVzZXItZGVmaW5lZCB3 YWl0IGV2ZW50LiAqLwotCWlmIChldmVudElkIDwgTlVNX0JVSUxUSU5fV0FJVF9FVkVOVF9FWFRF TlNJT04pCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKLQkJCQllcnJtc2coImludmFsaWQgd2FpdCBldmVudCBJRCAldSIsIGV2 ZW50SWQpKTsKKwkvKiBSZWdpc3RlciB0aGUgbmV3IHdhaXQgZXZlbnQgKi8KKwllbnRyeV9ieV9p ZCA9IChXYWl0RXZlbnRFeHRlbnNpb25FbnRyeUJ5SWQgKikKKwkJCQloYXNoX3NlYXJjaChXYWl0 RXZlbnRFeHRlbnNpb25IYXNoQnlJZCwgJmV2ZW50SWQsCisJCQkJCQkJSEFTSF9FTlRFUiwgJmZv dW5kKTsKKwlBc3NlcnQoIWZvdW5kKTsKKwlzdHJsY3B5KGVudHJ5X2J5X2lkLT53YWl0X2V2ZW50 X25hbWUsIHdhaXRfZXZlbnRfbmFtZSwKKwkJCXNpemVvZihlbnRyeV9ieV9pZC0+d2FpdF9ldmVu dF9uYW1lKSk7CiAKLQkvKiBDb252ZXJ0IHRvIGFycmF5IGluZGV4LiAqLwotCWV2ZW50SWQgLT0g TlVNX0JVSUxUSU5fV0FJVF9FVkVOVF9FWFRFTlNJT047CisJZW50cnlfYnlfbmFtZSA9IChXYWl0 RXZlbnRFeHRlbnNpb25FbnRyeUJ5TmFtZSAqKQorCQkJCWhhc2hfc2VhcmNoKFdhaXRFdmVudEV4 dGVuc2lvbkhhc2hCeU5hbWUsIHdhaXRfZXZlbnRfbmFtZSwKKwkJCQkJCQlIQVNIX0VOVEVSLCAm Zm91bmQpOworCUFzc2VydCghZm91bmQpOworCWVudHJ5X2J5X25hbWUtPmV2ZW50X2lkID0gZXZl bnRJZDsKIAotCS8qIElmIG5lY2Vzc2FyeSwgY3JlYXRlIG9yIGVubGFyZ2UgYXJyYXkuICovCi0J aWYgKGV2ZW50SWQgPj0gV2FpdEV2ZW50RXh0ZW5zaW9uTmFtZXNBbGxvY2F0ZWQpCi0JewotCQl1 aW50MzIJCW5ld2FsbG9jOwotCi0JCW5ld2FsbG9jID0gcGdfbmV4dHBvd2VyMl8zMihNYXgoOCwg ZXZlbnRJZCArIDEpKTsKLQotCQlpZiAoV2FpdEV2ZW50RXh0ZW5zaW9uTmFtZXMgPT0gTlVMTCkK LQkJCVdhaXRFdmVudEV4dGVuc2lvbk5hbWVzID0gKGNvbnN0IGNoYXIgKiopCi0JCQkJTWVtb3J5 Q29udGV4dEFsbG9jWmVybyhUb3BNZW1vcnlDb250ZXh0LAotCQkJCQkJCQkJICAgbmV3YWxsb2Mg KiBzaXplb2YoY2hhciAqKSk7Ci0JCWVsc2UKLQkJCVdhaXRFdmVudEV4dGVuc2lvbk5hbWVzID0K LQkJCQlyZXBhbGxvYzBfYXJyYXkoV2FpdEV2ZW50RXh0ZW5zaW9uTmFtZXMsIGNvbnN0IGNoYXIg KiwKLQkJCQkJCQkJV2FpdEV2ZW50RXh0ZW5zaW9uTmFtZXNBbGxvY2F0ZWQsIG5ld2FsbG9jKTsK LQkJV2FpdEV2ZW50RXh0ZW5zaW9uTmFtZXNBbGxvY2F0ZWQgPSBuZXdhbGxvYzsKLQl9CisJTFdM b2NrUmVsZWFzZShXYWl0RXZlbnRFeHRlbnNpb25Mb2NrKTsKIAotCVdhaXRFdmVudEV4dGVuc2lv bk5hbWVzW2V2ZW50SWRdID0gd2FpdF9ldmVudF9uYW1lOworCXJldHVybiBXQUlUX0VWRU5UX0VY VEVOU0lPTl9JTkZPKGV2ZW50SWQpOwogfQogCiAvKgpAQCAtMTg4LDIzICsyNDEsMjkgQEAgV2Fp dEV2ZW50RXh0ZW5zaW9uUmVnaXN0ZXJOYW1lKHVpbnQzMiB3YWl0X2V2ZW50X2luZm8sCiBzdGF0 aWMgY29uc3QgY2hhciAqCiBHZXRXYWl0RXZlbnRFeHRlbnNpb25JZGVudGlmaWVyKHVpbnQxNiBl dmVudElkKQogeworCWJvb2wgZm91bmQ7CisJV2FpdEV2ZW50RXh0ZW5zaW9uRW50cnlCeUlkCSpl bnRyeTsKKwogCS8qIEJ1aWx0LWluIGV2ZW50PyAqLwogCWlmIChldmVudElkIDwgTlVNX0JVSUxU SU5fV0FJVF9FVkVOVF9FWFRFTlNJT04pCiAJCXJldHVybiAiRXh0ZW5zaW9uIjsKIAorCS8qIEl0 IGlzIGEgdXNlci1kZWZpbmVkIHdhaXQgZXZlbnQsIHNvIGxvb2t1cCBoYXNoIHRhYmxlLiAqLwor CUxXTG9ja0FjcXVpcmUoV2FpdEV2ZW50RXh0ZW5zaW9uTG9jaywgTFdfU0hBUkVEKTsKKwllbnRy eSA9IChXYWl0RXZlbnRFeHRlbnNpb25FbnRyeUJ5SWQgKikKKwkJCQloYXNoX3NlYXJjaChXYWl0 RXZlbnRFeHRlbnNpb25IYXNoQnlJZCwgJmV2ZW50SWQsCisJCQkJCQkJSEFTSF9GSU5ELCAmZm91 bmQpOworCUxXTG9ja1JlbGVhc2UoV2FpdEV2ZW50RXh0ZW5zaW9uTG9jayk7CisKIAkvKgotCSAq IEl0IGlzIGEgdXNlci1kZWZpbmVkIHdhaXQgZXZlbnQsIHNvIGxvb2sgYXQgV2FpdEV2ZW50RXh0 ZW5zaW9uTmFtZXNbXS4KLQkgKiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBuYW1l IGhhcyBuZXZlciBiZWVuIHJlZ2lzdGVyZWQgYnkKLQkgKiBjYWxsaW5nIFdhaXRFdmVudEV4dGVu c2lvblJlZ2lzdGVyTmFtZSgpIGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIGluCi0JICogd2hpY2gg Y2FzZSBnaXZlIHVwIGFuZCByZXR1cm4gImV4dGVuc2lvbiIuCisJICogVGhlIGVudHJ5IG11c3Qg YmUgc3RvcmVkIGJlY2F1c2UgaXQncyByZWdpc3RlcmVkIGluCisJICogV2FpdEV2ZW50RXh0ZW5z aW9uTmV3KCkuCiAJICovCi0JZXZlbnRJZCAtPSBOVU1fQlVJTFRJTl9XQUlUX0VWRU5UX0VYVEVO U0lPTjsKLQotCWlmIChldmVudElkID49IFdhaXRFdmVudEV4dGVuc2lvbk5hbWVzQWxsb2NhdGVk IHx8Ci0JCVdhaXRFdmVudEV4dGVuc2lvbk5hbWVzW2V2ZW50SWRdID09IE5VTEwpCi0JCXJldHVy biAiZXh0ZW5zaW9uIjsKKwlpZiAoIWVudHJ5KQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZp bmQgdGhlIG5hbWUgZm9yIGN1c3RvbSB3YWl0IGV2ZW50IElEICV1IiwKKwkJCWV2ZW50SWQpOwog Ci0JcmV0dXJuIFdhaXRFdmVudEV4dGVuc2lvbk5hbWVzW2V2ZW50SWRdOworCXJldHVybiBlbnRy eS0+d2FpdF9ldmVudF9uYW1lOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudF9uYW1lcy50eHQKaW5kZXggMmVhNDc4OWIwMC4uYTRlNWM4MGJjMCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAg LTMxNyw2ICszMTcsNyBAQCBXQUlUX0VWRU5UX0RPQ09OTFkJTG9naWNhbFJlcFdvcmtlcgkiV2Fp dGluZyB0byByZWFkIG9yIHVwZGF0ZSB0aGUgc3RhdGUgb2YgbG9naQogV0FJVF9FVkVOVF9ET0NP TkxZCVhhY3RUcnVuY2F0aW9uCSJXYWl0aW5nIHRvIGV4ZWN1dGUgPGZ1bmN0aW9uPnBnX3hhY3Rf c3RhdHVzPC9mdW5jdGlvbj4gb3IgdXBkYXRlIHRoZSBvbGRlc3QgdHJhbnNhY3Rpb24gSUQgYXZh aWxhYmxlIHRvIGl0LiIKIFdBSVRfRVZFTlRfRE9DT05MWQlXcmFwTGltaXRzVmFjdXVtCSJXYWl0 aW5nIHRvIHVwZGF0ZSBsaW1pdHMgb24gdHJhbnNhY3Rpb24gaWQgYW5kIG11bHRpeGFjdCBjb25z dW1wdGlvbi4iCiBXQUlUX0VWRU5UX0RPQ09OTFkJTm90aWZ5UXVldWVUYWlsCSJXYWl0aW5nIHRv IHVwZGF0ZSBsaW1pdCBvbiA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+IG1lc3NhZ2Ugc3RvcmFn ZS4iCitXQUlUX0VWRU5UX0RPQ09OTFkJV2FpdEV2ZW50RXh0ZW5zaW9uCSJXYWl0aW5nIHRvIHJl YWQgb3IgdXBkYXRlIGN1c3RvbSB3YWl0IGV2ZW50cyBpbmZvcm1hdGlvbiBmb3IgZXh0ZW5zaW9u cy4iCiAKIFdBSVRfRVZFTlRfRE9DT05MWQlYYWN0QnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24g YSB0cmFuc2FjdGlvbiBzdGF0dXMgU0xSVSBidWZmZXIuIgogV0FJVF9FVkVOVF9ET0NPTkxZCUNv bW1pdFRzQnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBjb21taXQgdGltZXN0YW1wIFNMUlUg YnVmZmVyLiIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaAppbmRleCBhYWQ4YmMwOGZhLi41MWEwYjgzYjc5 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKKysrIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCkBAIC00NCwxMiArNDQsMTMgQEAgZXh0ZXJuIFBHRExM SU1QT1JUIHVpbnQzMiAqbXlfd2FpdF9ldmVudF9pbmZvOwogICogVXNlIHRoaXMgY2F0ZWdvcnkg d2hlbiB0aGUgc2VydmVyIHByb2Nlc3MgaXMgd2FpdGluZyBmb3Igc29tZSBjb25kaXRpb24KICAq IGRlZmluZWQgYnkgYW4gZXh0ZW5zaW9uIG1vZHVsZS4KICAqCi0gKiBFeHRlbnNpb25zIGNhbiBk ZWZpbmUgdGhlaXIgb3duIHdhaXQgZXZlbnRzIGluIHRoaXMgY2F0ZWdvcnkuICBGaXJzdCwKLSAq IHRoZXkgc2hvdWxkIGNhbGwgV2FpdEV2ZW50RXh0ZW5zaW9uTmV3KCkgdG8gZ2V0IG9uZSBvciBt b3JlIHdhaXQgZXZlbnQKLSAqIElEcyB0aGF0IGFyZSBhbGxvY2F0ZWQgZnJvbSBhIHNoYXJlZCBj b3VudGVyLiAgVGhlc2UgY2FuIGJlIHVzZWQgZGlyZWN0bHkKLSAqIHdpdGggcGdzdGF0X3JlcG9y dF93YWl0X3N0YXJ0KCkgb3IgZXF1aXZhbGVudC4gIE5leHQsIGVhY2ggaW5kaXZpZHVhbAotICog cHJvY2VzcyBzaG91bGQgY2FsbCBXYWl0RXZlbnRFeHRlbnNpb25SZWdpc3Rlck5hbWUoKSB0byBh c3NvY2lhdGUgYSB3YWl0Ci0gKiBldmVudCBzdHJpbmcgdG8gdGhlIG51bWJlciBhbGxvY2F0ZWQg cHJldmlvdXNseS4KKyAqIEV4dGVuc2lvbnMgY2FuIGRlZmluZSB0aGVpciBvd24gd2FpdCBldmVu dHMgaW4gdGhpcyBjYXRlZ29yeS4gVGhleSBzaG91bGQKKyAqIGNhbGwgV2FpdEV2ZW50RXh0ZW5z aW9uTmV3KCkgd2l0aCBhIHdhaXQgZXZlbnQgc3RyaW5nLiBJZiB0aGUgd2FpdCBldmVudAorICog YXNzb2NpYXRlZCB0aGUgc3RyaW5nIGlzIGFscmVhZHkgYWxsb2NhdGVkLCBpdCByZXR1cm5zIHRo ZSB3YWl0IGV2ZW50IGluZm8uCisgKiBJZiBub3QsIGl0IHdpbGwgZ2V0IG9uZSB3YWl0IGV2ZW50 IElEIHRoYXQgaXMgYWxsb2NhdGVkIGZyb20gYSBzaGFyZWQgY291bnRlciwKKyAqIGFzc29jaWF0 ZSB0aGUgc3RyaW5nIHRvIHRoZSBudW1iZXIgaW4gdGhlIHNoYXJlZCBkeW5hbWljIGhhc2ggYW5k IHJldHVybiB0aGUKKyAqIHdhaXQgZXZlbnQgaW5mby4gVGhlIHN0cmluZyBjYW4gYmUgdXNlZCBk aXJlY3RseSB3aXRoIHBnc3RhdF9yZXBvcnRfd2FpdF9zdGFydCgpCisgKiBvciBlcXVpdmFsZW50 LgogICovCiB0eXBlZGVmIGVudW0KIHsKQEAgLTYwLDkgKzYxLDcgQEAgdHlwZWRlZiBlbnVtCiBl eHRlcm4gdm9pZCBXYWl0RXZlbnRFeHRlbnNpb25TaG1lbUluaXQodm9pZCk7CiBleHRlcm4gU2l6 ZSBXYWl0RXZlbnRFeHRlbnNpb25TaG1lbVNpemUodm9pZCk7CiAKLWV4dGVybiB1aW50MzIgV2Fp dEV2ZW50RXh0ZW5zaW9uTmV3KHZvaWQpOwotZXh0ZXJuIHZvaWQgV2FpdEV2ZW50RXh0ZW5zaW9u UmVnaXN0ZXJOYW1lKHVpbnQzMiB3YWl0X2V2ZW50X2luZm8sCi0JCQkJCQkJCQkJICAgY29uc3Qg Y2hhciAqd2FpdF9ldmVudF9uYW1lKTsKK2V4dGVybiB1aW50MzIgV2FpdEV2ZW50RXh0ZW5zaW9u TmV3KGNvbnN0IGNoYXIgKndhaXRfZXZlbnRfbmFtZSk7CiAKIC8qIC0tLS0tLS0tLS0KICAqIHBn c3RhdF9yZXBvcnRfd2FpdF9zdGFydCgpIC0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv d29ya2VyX3NwaS90LzAwMV93b3JrZXJfc3BpLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy93b3JrZXJf c3BpL3QvMDAxX3dvcmtlcl9zcGkucGwKaW5kZXggYzNlN2Y1ZmJlNi4uMjZiOGE0OWJlYyAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy93b3JrZXJfc3BpL3QvMDAxX3dvcmtlcl9zcGkucGwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy93b3JrZXJfc3BpL3QvMDAxX3dvcmtlcl9zcGkucGwKQEAg LTM5LDI1ICszOSwxMSBAQCAkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAogJHJl c3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCAqIEZST00gc2NoZW1h NC5jb3VudGVkOycpOwogaXMoJHJlc3VsdCwgcXEodG90YWx8MSksICdkeW5hbWljIGJnd29ya2Vy IGNvcnJlY3RseSBjb25zdW1lZCB0dXBsZSBkYXRhJyk7CiAKLSMgQ2hlY2sgdGhlIHdhaXQgZXZl bnQgdXNlZCBieSB0aGUgZHluYW1pYyBiZ3dvcmtlci4gIEZvciBhIHNlc3Npb24gd2l0aG91dAot IyB0aGUgc3RhdGUgaW4gc2hhcmVkIG1lbW9yeSBrbm93biwgdGhlIGRlZmF1bHQgb2YgImV4dGVu c2lvbiIgaXMgdGhlIHZhbHVlCi0jIHdhaXRlZCBvbi4KKyMgQ2hlY2sgdGhlIHdhaXQgZXZlbnQg dXNlZCBieSB0aGUgZHluYW1pYyBiZ3dvcmtlci4KICRyZXN1bHQgPSAkbm9kZS0+cG9sbF9xdWVy eV91bnRpbCgKIAkncG9zdGdyZXMnLAogCXFxW1NFTEVDVCB3YWl0X2V2ZW50IEZST00gcGdfc3Rh dF9hY3Rpdml0eSBXSEVSRSBiYWNrZW5kX3R5cGUgfiAnd29ya2VyX3NwaSc7XSwKLQknZXh0ZW5z aW9uJyk7Ci1pcygkcmVzdWx0LCAxLCAnZHluYW1pYyBiZ3dvcmtlciBoYXMgcmVwb3J0ZWQgImV4 dGVuc2lvbiIgYXMgd2FpdCBldmVudCcpOwotCi0jIElmIHRoZSBzaGFyZWQgbWVtb3J5IHN0YXRl IGlzIGxvYWRlZCAoaGVyZSB3aXRoIHdvcmtlcl9zcGlfaW5pdCB3aXRoaW4KLSMgdGhlIHNhbWUg Y29ubmVjdGlvbiBhcyB0aGUgb25lIHF1ZXJ5aW5nIHBnX3N0YXRfYWN0aXZpdHkpLCB0aGUgd2Fp dAotIyBldmVudCBpcyB0aGUgY3VzdG9tIG9uZS4KLSMgVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyBh IHNwZWNpYWwgcGF0dGVybiBoZXJlIHdpdGggYSBuZXdsaW5lIGNvbWluZyBmcm9tIHRoZQotIyBm aXJzdCBxdWVyeSB3aGVyZSB0aGUgc2hhcmVkIG1lbW9yeSBzdGF0ZSBpcyBzZXQuCi0kcmVzdWx0 ID0gJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoCi0JJ3Bvc3RncmVzJywKLQlxcVtTRUxFQ1Qgd29y a2VyX3NwaV9pbml0KCk7IFNFTEVDVCB3YWl0X2V2ZW50IEZST00gcGdfc3RhdF9hY3Rpdml0eSBX SEVSRSBiYWNrZW5kX3R5cGUgfiAnd29ya2VyX3NwaSc7XSwKLQlxcVsKLXdvcmtlcl9zcGlfbWFp bl0pOworCXFxW3dvcmtlcl9zcGlfbWFpbl0pOwogaXMoJHJlc3VsdCwgMSwKIAknZHluYW1pYyBi Z3dvcmtlciBoYXMgcmVwb3J0ZWQgIndvcmtlcl9zcGlfbWFpbiIgYXMgd2FpdCBldmVudCcpOwog CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3dvcmtlcl9zcGkvd29ya2VyX3NwaS0tMS4w LnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvd29ya2VyX3NwaS93b3JrZXJfc3BpLS0xLjAuc3FsCmlu ZGV4IGYxM2Y3ZTBmOTguLmU5ZDViMDczNzMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMv d29ya2VyX3NwaS93b3JrZXJfc3BpLS0xLjAuc3FsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvd29y a2VyX3NwaS93b3JrZXJfc3BpLS0xLjAuc3FsCkBAIC03LDggKzcsMyBAQCBDUkVBVEUgRlVOQ1RJ T04gd29ya2VyX3NwaV9sYXVuY2gocGdfY2F0YWxvZy5pbnQ0KQogUkVUVVJOUyBwZ19jYXRhbG9n LmludDQgU1RSSUNUCiBBUyAnTU9EVUxFX1BBVEhOQU1FJwogTEFOR1VBR0UgQzsKLQotQ1JFQVRF IEZVTkNUSU9OIHdvcmtlcl9zcGlfaW5pdCgpCi1SRVRVUk5TIFZPSUQgU1RSSUNUCi1BUyAnTU9E VUxFX1BBVEhOQU1FJwotTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv d29ya2VyX3NwaS93b3JrZXJfc3BpLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3dvcmtlcl9zcGkvd29y a2VyX3NwaS5jCmluZGV4IGM0MzE3MzUxY2UuLjU2ZTQ5MmRkNGIgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L21vZHVsZXMvd29ya2VyX3NwaS93b3JrZXJfc3BpLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy93b3JrZXJfc3BpL3dvcmtlcl9zcGkuYwpAQCAtNDQsMzMgKzQ0LDE3IEBACiAKIFBHX01PRFVM RV9NQUdJQzsKIAotUEdfRlVOQ1RJT05fSU5GT19WMSh3b3JrZXJfc3BpX2luaXQpOwogUEdfRlVO Q1RJT05fSU5GT19WMSh3b3JrZXJfc3BpX2xhdW5jaCk7CiAKIFBHRExMRVhQT1JUIHZvaWQgd29y a2VyX3NwaV9tYWluKERhdHVtIG1haW5fYXJnKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKIAot LyogU2hhcmVkIG1lbW9yeSBzdGF0ZSAqLwotdHlwZWRlZiBzdHJ1Y3Qgd29ya2VyX3NwaV9zdGF0 ZQotewotCS8qIHRoZSB3YWl0IGV2ZW50IGRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIHBo YXNlICovCi0JdWludDMyCQl3YWl0X2V2ZW50OwotfSB3b3JrZXJfc3BpX3N0YXRlOwotCi1zdGF0 aWMgd29ya2VyX3NwaV9zdGF0ZSAqd3NzdGF0ZSA9IE5VTEw7CS8qIHBvaW50ZXIgdG8gc2hhcmVk IG1lbW9yeSAqLwotCi1zdGF0aWMgc2htZW1fcmVxdWVzdF9ob29rX3R5cGUgcHJldl9zaG1lbV9y ZXF1ZXN0X2hvb2sgPSBOVUxMOwotc3RhdGljIHNobWVtX3JlcXVlc3RfaG9va190eXBlIHByZXZf c2htZW1fc3RhcnR1cF9ob29rID0gTlVMTDsKLQotc3RhdGljIHZvaWQgd29ya2VyX3NwaV9zaG1l bV9yZXF1ZXN0KHZvaWQpOwotc3RhdGljIHZvaWQgd29ya2VyX3NwaV9zaG1lbV9zdGFydHVwKHZv aWQpOwotc3RhdGljIHZvaWQgd29ya2VyX3NwaV9zaG1lbV9pbml0KHZvaWQpOwotc3RhdGljIFNp emUgd29ya2VyX3NwaV9tZW1zaXplKHZvaWQpOwotCiAvKiBHVUMgdmFyaWFibGVzICovCiBzdGF0 aWMgaW50CXdvcmtlcl9zcGlfbmFwdGltZSA9IDEwOwogc3RhdGljIGludAl3b3JrZXJfc3BpX3Rv dGFsX3dvcmtlcnMgPSAyOwogc3RhdGljIGNoYXIgKndvcmtlcl9zcGlfZGF0YWJhc2UgPSBOVUxM OwogCisvKiBMb2NhbCB2YXJpYWJsZXMgKi8KK3N0YXRpYyB1aW50MzIgd29ya2VyX3NwaV93YWl0 X2V2ZW50ID0gMDsKIAogdHlwZWRlZiBzdHJ1Y3Qgd29ya3RhYmxlCiB7CkBAIC03OCw2MyArNjIs NiBAQCB0eXBlZGVmIHN0cnVjdCB3b3JrdGFibGUKIAljb25zdCBjaGFyICpuYW1lOwogfSB3b3Jr dGFibGU7CiAKLXN0YXRpYyB2b2lkCi13b3JrZXJfc3BpX3NobWVtX3JlcXVlc3Qodm9pZCkKLXsK LQlpZiAocHJldl9zaG1lbV9yZXF1ZXN0X2hvb2spCi0JCXByZXZfc2htZW1fcmVxdWVzdF9ob29r KCk7Ci0KLQlSZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKHdvcmtlcl9zcGlfbWVtc2l6ZSgpKTsKLX0K LQotc3RhdGljIHZvaWQKLXdvcmtlcl9zcGlfc2htZW1fc3RhcnR1cCh2b2lkKQotewotCWlmIChw cmV2X3NobWVtX3N0YXJ0dXBfaG9vaykKLQkJcHJldl9zaG1lbV9zdGFydHVwX2hvb2soKTsKLQot CXdvcmtlcl9zcGlfc2htZW1faW5pdCgpOwotfQotCi1zdGF0aWMgU2l6ZQotd29ya2VyX3NwaV9t ZW1zaXplKHZvaWQpCi17Ci0JcmV0dXJuIE1BWEFMSUdOKHNpemVvZih3b3JrZXJfc3BpX3N0YXRl KSk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBzaGFyZWQgbWVtb3J5IHN0YXRlIG9mIHdv cmtlcl9zcGkuCi0gKgotICogVGhpcyByb3V0aW5lIGFsbG9jYXRlcyBhIG5ldyB3YWl0IGV2ZW50 IHdoZW4gY2FsbGVkIHRoZSBmaXJzdCB0aW1lLgotICogT24gZm9sbG93LXVwIGNhbGxzLCB0aGUg bmFtZSBvZiB0aGUgd2FpdCBldmVudCBhc3NvY2lhdGVkIHdpdGggdGhlCi0gKiBleGlzdGluZyBz aGFyZWQgbWVtb3J5IHN0YXRlIGlzIHJlZ2lzdGVyZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi13b3Jr ZXJfc3BpX3NobWVtX2luaXQodm9pZCkKLXsKLQlib29sCQlmb3VuZDsKLQotCXdzc3RhdGUgPSBO VUxMOwotCi0JLyogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgc2hhcmVkIG1lbW9yeSBzdGF0ZSAq LwotCUxXTG9ja0FjcXVpcmUoQWRkaW5TaG1lbUluaXRMb2NrLCBMV19FWENMVVNJVkUpOwotCXdz c3RhdGUgPSBTaG1lbUluaXRTdHJ1Y3QoIndvcmtlcl9zcGkgU3RhdGUiLAotCQkJCQkJCSAgc2l6 ZW9mKHdvcmtlcl9zcGlfc3RhdGUpLAotCQkJCQkJCSAgJmZvdW5kKTsKLQotCS8qIERlZmluZSBh IG5ldyB3YWl0IGV2ZW50ICovCi0JaWYgKCFmb3VuZCkKLQkJd3NzdGF0ZS0+d2FpdF9ldmVudCA9 IFdhaXRFdmVudEV4dGVuc2lvbk5ldygpOwotCi0JTFdMb2NrUmVsZWFzZShBZGRpblNobWVtSW5p dExvY2spOwotCi0JLyoKLQkgKiBSZWdpc3RlciB0aGUgd2FpdCBldmVudCBpbiB0aGUgbG9va3Vw IHRhYmxlIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuCi0JICovCi0JV2FpdEV2ZW50RXh0ZW5zaW9u UmVnaXN0ZXJOYW1lKHdzc3RhdGUtPndhaXRfZXZlbnQsICJ3b3JrZXJfc3BpX21haW4iKTsKLQly ZXR1cm47Ci19Ci0KIC8qCiAgKiBJbml0aWFsaXplIHdvcmtzcGFjZSBmb3IgYSB3b3JrZXIgcHJv Y2VzczogY3JlYXRlIHRoZSBzY2hlbWEgaWYgaXQgZG9lc24ndAogICogYWxyZWFkeSBleGlzdC4K QEAgLTIyNCw5ICsxNTEsNiBAQCB3b3JrZXJfc3BpX21haW4oRGF0dW0gbWFpbl9hcmcpCiAJLyog V2UncmUgbm93IHJlYWR5IHRvIHJlY2VpdmUgc2lnbmFscyAqLwogCUJhY2tncm91bmRXb3JrZXJV bmJsb2NrU2lnbmFscygpOwogCi0JLyogQ3JlYXRlIChpZiBuZWNlc3NhcnkpIGFuZCBhdHRhY2gg dG8gb3VyIHNoYXJlZCBtZW1vcnkgYXJlYS4gKi8KLQl3b3JrZXJfc3BpX3NobWVtX2luaXQoKTsK LQogCS8qIENvbm5lY3QgdG8gb3VyIGRhdGFiYXNlICovCiAJQmFja2dyb3VuZFdvcmtlckluaXRp YWxpemVDb25uZWN0aW9uKHdvcmtlcl9zcGlfZGF0YWJhc2UsIE5VTEwsIDApOwogCkBAIC0yNjgs NiArMTkyLDEwIEBAIHdvcmtlcl9zcGlfbWFpbihEYXR1bSBtYWluX2FyZykKIAl7CiAJCWludAkJ CXJldDsKIAorCQkvKiBGaXJzdCB0aW1lLCBhbGxvY2F0ZSBvciBnZXQgdGhlIGN1c3RvbSB3YWl0 IGV2ZW50ICovCisJCWlmICh3b3JrZXJfc3BpX3dhaXRfZXZlbnQgPT0gMCkKKwkJCXdvcmtlcl9z cGlfd2FpdF9ldmVudCA9IFdhaXRFdmVudEV4dGVuc2lvbk5ldygid29ya2VyX3NwaV9tYWluIik7 CisKIAkJLyoKIAkJICogQmFja2dyb3VuZCB3b3JrZXJzIG11c3RuJ3QgY2FsbCB1c2xlZXAoKSBv ciBhbnkgZGlyZWN0IGVxdWl2YWxlbnQ6CiAJCSAqIGluc3RlYWQsIHRoZXkgbWF5IHdhaXQgb24g dGhlaXIgcHJvY2VzcyBsYXRjaCwgd2hpY2ggc2xlZXBzIGFzCkBAIC0yNzcsNyArMjA1LDcgQEAg d29ya2VyX3NwaV9tYWluKERhdHVtIG1haW5fYXJnKQogCQkodm9pZCkgV2FpdExhdGNoKE15TGF0 Y2gsCiAJCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVB VEgsCiAJCQkJCQkgd29ya2VyX3NwaV9uYXB0aW1lICogMTAwMEwsCi0JCQkJCQkgd3NzdGF0ZS0+ d2FpdF9ldmVudCk7CisJCQkJCQkgd29ya2VyX3NwaV93YWl0X2V2ZW50KTsKIAkJUmVzZXRMYXRj aChNeUxhdGNoKTsKIAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwpAQCAtNDA2LDExICszMzQs NiBAQCBfUEdfaW5pdCh2b2lkKQogCiAJTWFya0dVQ1ByZWZpeFJlc2VydmVkKCJ3b3JrZXJfc3Bp Iik7CiAKLQlwcmV2X3NobWVtX3JlcXVlc3RfaG9vayA9IHNobWVtX3JlcXVlc3RfaG9vazsKLQlz aG1lbV9yZXF1ZXN0X2hvb2sgPSB3b3JrZXJfc3BpX3NobWVtX3JlcXVlc3Q7Ci0JcHJldl9zaG1l bV9zdGFydHVwX2hvb2sgPSBzaG1lbV9zdGFydHVwX2hvb2s7Ci0Jc2htZW1fc3RhcnR1cF9ob29r ID0gd29ya2VyX3NwaV9zaG1lbV9zdGFydHVwOwotCiAJLyogc2V0IHVwIGNvbW1vbiBkYXRhIGZv ciBhbGwgb3VyIHdvcmtlcnMgKi8KIAltZW1zZXQoJndvcmtlciwgMCwgc2l6ZW9mKHdvcmtlcikp OwogCXdvcmtlci5iZ3dfZmxhZ3MgPSBCR1dPUktFUl9TSE1FTV9BQ0NFU1MgfApAQCAtNDM0LDIx ICszNTcsNiBAQCBfUEdfaW5pdCh2b2lkKQogCX0KIH0KIAotLyoKLSAqIFdyYXBwZXIgdG8gaW5p dGlhbGl6ZSBhIHNlc3Npb24gd2l0aCB0aGUgc2hhcmVkIG1lbW9yeSBzdGF0ZQotICogdXNlZCBi eSB0aGlzIG1vZHVsZS4gIFRoaXMgaXMgYSBjb252ZW5pZW5jZSByb3V0aW5lIHRvIGJlIGFibGUg dG8KLSAqIHNlZSB0aGUgY3VzdG9tIHdhaXQgZXZlbnQgc3RvcmVkIGluIHNoYXJlZCBtZW1vcnkg d2l0aG91dCBsb2FkaW5nCi0gKiB0aHJvdWdoIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcy4KLSAq LwotRGF0dW0KLXdvcmtlcl9zcGlfaW5pdChQR19GVU5DVElPTl9BUkdTKQotewotCS8qIENyZWF0 ZSAoaWYgbmVjZXNzYXJ5KSBhbmQgYXR0YWNoIHRvIG91ciBzaGFyZWQgbWVtb3J5IGFyZWEuICov Ci0Jd29ya2VyX3NwaV9zaG1lbV9pbml0KCk7Ci0KLQlQR19SRVRVUk5fVk9JRCgpOwotfQotCiAv KgogICogRHluYW1pY2FsbHkgbGF1bmNoIGFuIFNQSSB3b3JrZXIuCiAgKi8KQEAgLTQ2MSw5ICsz NjksNiBAQCB3b3JrZXJfc3BpX2xhdW5jaChQR19GVU5DVElPTl9BUkdTKQogCUJnd0hhbmRsZVN0 YXR1cyBzdGF0dXM7CiAJcGlkX3QJCXBpZDsKIAotCS8qIENyZWF0ZSAoaWYgbmVjZXNzYXJ5KSBh bmQgYXR0YWNoIHRvIG91ciBzaGFyZWQgbWVtb3J5IGFyZWEuICovCi0Jd29ya2VyX3NwaV9zaG1l bV9pbml0KCk7Ci0KIAltZW1zZXQoJndvcmtlciwgMCwgc2l6ZW9mKHdvcmtlcikpOwogCXdvcmtl ci5iZ3dfZmxhZ3MgPSBCR1dPUktFUl9TSE1FTV9BQ0NFU1MgfAogCQlCR1dPUktFUl9CQUNLRU5E X0RBVEFCQVNFX0NPTk5FQ1RJT047Ci0tIAoyLjI1LjEKCg== --=_5ba1696a6c25b315fd6f901ff8a239ef--