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 1t5PQq-005uEb-Nh for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Oct 2024 13:05:17 +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 1t5PQo-006UbO-DE for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Oct 2024 13:05:14 +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 1t5PQn-006UbF-9k for pgsql-hackers@lists.postgresql.org; Mon, 28 Oct 2024 13:05:14 +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 1t5PQi-003H30-A1 for pgsql-hackers@lists.postgresql.org; Mon, 28 Oct 2024 13:05:12 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id C550A618D6; Mon, 28 Oct 2024 22:05:03 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_ba3d1ccf32d9af9b5d1425af066f04f9" Content-Transfer-Encoding: 8bit Date: Mon, 28 Oct 2024 22:05:03 +0900 From: torikoshia To: pgsql-hackers@lists.postgresql.org Cc: Robert Haas , pgsql-hackers@lists.postgresql.org, James Coleman , Julien Rouhaud , =?UTF-8?Q?=C3=89tienne_BERSAC?= , ashutosh.bapat.oss@gmail.com, rafaelthca@gmail.com, jian.universality@gmail.com, andres@anarazel.de Subject: Re: RFC: Logging plan of the running query In-Reply-To: <20240326023447.yj5fi5qcbz5ocyrt@awork3.anarazel.de> References: <2c9a3fd390d653f1829b795d0bad4653@oss.nttdata.com> <20240326023447.yj5fi5qcbz5ocyrt@awork3.anarazel.de> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <8a8f2432cf5f196f2732ce9e4da7fb89@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_ba3d1ccf32d9af9b5d1425af066f04f9 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Hi I've recently resumed work on this proposal. I was revising tests that use the injection point, but given that there was a recent talk at PGConf.EU about further features based on this proposal [1], I thought it might be of interest to some. Therefore, I'll share a patch that removes the injection point section for now. Due to both the lack of an alternative implementation and the following comment, I’ve taken the approach of wrapping all plan nodes: On Tue, Mar 26, 2024 at 11:35 AM Andres Freund andres@anarazel.de wrote: >> Andres, did you have some clever idea for this feature that would >> avoid the need to do this? > No. I think it's acceptable though. As a primary change since the last version, I have added wrapping processing for child nodes other than left/right tree nodes in response to the feedback in comment [2]. For nodes other than CustomScanState, I have confirmed via DEBUG logs that the wrap/unwrap code is being executed. However, I'm still somewhat uncertain whether CustomScanState should be included in this process. For testing, I ran below queries in three sessions concurrently during make installcheck and encountered no issues. =# select pg_log_query_plan(pid) from pg_stat_activity; =# \watch 0.1 [1] https://www.postgresql.eu/events/pgconfeu2024/sessions/session/5689-debugging-active-queries-with-mid-flight-instrumented-explain-plans/ [2] https://www.postgresql.org/message-id/CA%2BTgmoaaEQtuope6za%3D3GSCZ%2BWJFT4DbF5Cnv0QXFmDnZ_PqFw%40mail.gmail.com Regards, -- Atsushi Torikoshi Seconded from NTT DATA GROUP CORPORATION to SRA OSS K.K. --=_ba3d1ccf32d9af9b5d1425af066f04f9 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v39-0001-Add-function-to-log-the-plan-of-the-currently-ru.patch Content-Disposition: attachment; filename=v39-0001-Add-function-to-log-the-plan-of-the-currently-ru.patch; size=33614 RnJvbSA0ZDQxZjdlYmNhYzkyNDhjODM0YjI0NWI2MWI3MTQwNjE4Y2YzNzk0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IE1vbiwgMjggT2N0IDIwMjQgMjE6NDg6MDcgKzA5MDAKU3ViamVjdDog W1BBVENIIHYzOV0gQWRkIGZ1bmN0aW9uIHRvIGxvZyB0aGUgcGxhbiBvZiB0aGUgY3VycmVudGx5 IHJ1bm5pbmcKIHF1ZXJ5CgpDdXJyZW50bHksIHdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIHF1ZXJ5 IGV4ZWN1dGlvbiB0byBmaW5pc2gKdG8ga25vdyBpdHMgcGxhbiBlaXRoZXIgdXNpbmcgRVhQTEFJ TiBBTkFMWVpFIG9yIGF1dG9fZXhwbGFpbi4KVGhpcyBpcyBub3Qgc28gY29udmVuaWVudCwgZm9y IGV4YW1wbGUgd2hlbiBpbnZlc3RpZ2F0aW5nCmxvbmctcnVubmluZyBxdWVyaWVzIG9uIHByb2R1 Y3Rpb24gZW52aXJvbm1lbnRzLgpUbyBpbXByb3ZlIHRoaXMgc2l0dWF0aW9uLCB0aGlzIHBhdGNo IGFkZHMgcGdfbG9nX3F1ZXJ5X3BsYW4oKQpmdW5jdGlvbiB0aGF0IHJlcXVlc3RzIHRvIGxvZyB0 aGUgcGxhbiBvZiB0aGUgY3VycmVudGx5CmV4ZWN1dGluZyBxdWVyeS4KCkJ5IGRlZmF1bHQsIG9u bHkgc3VwZXJ1c2VycyBhcmUgYWxsb3dlZCB0byByZXF1ZXN0IHRvIGxvZyB0aGUKcGxhbnMgYmVj YXVzZSBhbGxvd2luZyBhbnkgdXNlcnMgdG8gaXNzdWUgdGhpcyByZXF1ZXN0IGF0IGFuCnVuYm91 bmRlZCByYXRlIHdvdWxkIGNhdXNlIGxvdHMgb2YgbG9nIG1lc3NhZ2VzIGFuZCB3aGljaCBjYW4K bGVhZCB0byBkZW5pYWwgb2Ygc2VydmljZS4KCk9uIHJlY2VpcHQgb2YgdGhlIHJlcXVlc3QsIGNv ZGVzIGZvciBsb2dnaW5nIHBsYW4gaXMgd3JhcHBlZAp0byBldmVyeSBFeGVjUHJvY05vZGUgYW5k IHdoZW4gdGhlIGV4ZWN1dG9yIHJ1bnMgb25lIG9mCkV4ZWNQcm9jTm9kZSwgdGhlIHBsYW4gaXMg YWN0dWFsbHkgbG9nZ2VkLiBUaGVzZSB3cmFwcGVycyBhcmUKdW53cmFwcGVkIHdoZW4gb25jZSB0 aGUgcGxhbiBpcyBsb2dnZWQuCkluIHRoaXMgd2F5LCB3ZSBjYW4gYXZvaWQgYWRkaW5nIHRoZSBv dmVyaGVhZCB3aGljaCB3ZSdsbCBmYWNlCndoZW4gYWRkaW5nIENIRUNLX0ZPUl9JTlRFUlJVUFRT KCkgbGlrZSBtZWNoYW5pc21zIGluIHNvbWV3aGVyZQppbiBleGVjdXRvciBjb2RlcyBzYWZlbHku Ci0tLQogY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19leHBsYWluLmMgICAgICAgICAgfCAgMjMg Ky0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAgIHwgIDUwICsr Kwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jICAgICAgICAgICAgfCAgIDcgKwog c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCAgICAgfCAgIDIgKwogc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgICAgICAgfCAzNzIgKysrKysrKysr KysrKysrKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAg fCAgMTIgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jICAgICAgICAgfCAg IDQgKwogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgfCAgIDQg Kwogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAgICAgICAgICAgfCAgIDIgKwog c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgfCAgIDYgKwogc3Jj L2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oICAgICAgICAgICAgICAgfCAgMTIgKwogc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUv c3RvcmFnZS9wcm9jc2lnbmFsLmggICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdGNv cC9wcXVlcnkuaCAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0IHwgIDU0ICsrLQogc3JjL3Rlc3QvcmVncmVzcy9z cWwvbWlzY19mdW5jdGlvbnMuc3FsICAgICAgfCAgNDEgKy0KIDE3IGZpbGVzIGNoYW5nZWQsIDU1 NSBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL2F1 dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYyBiL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhw bGFpbi5jCmluZGV4IDYyM2E2NzRmOTkuLmJkNDIxZDA4YWMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv YXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvYXV0b19leHBsYWluL2F1 dG9fZXhwbGFpbi5jCkBAIC0zOTksMjYgKzM5OSw5IEBAIGV4cGxhaW5fRXhlY3V0b3JFbmQoUXVl cnlEZXNjICpxdWVyeURlc2MpCiAJCQllcy0+Zm9ybWF0ID0gYXV0b19leHBsYWluX2xvZ19mb3Jt YXQ7CiAJCQllcy0+c2V0dGluZ3MgPSBhdXRvX2V4cGxhaW5fbG9nX3NldHRpbmdzOwogCi0JCQlF eHBsYWluQmVnaW5PdXRwdXQoZXMpOwotCQkJRXhwbGFpblF1ZXJ5VGV4dChlcywgcXVlcnlEZXNj KTsKLQkJCUV4cGxhaW5RdWVyeVBhcmFtZXRlcnMoZXMsIHF1ZXJ5RGVzYy0+cGFyYW1zLCBhdXRv X2V4cGxhaW5fbG9nX3BhcmFtZXRlcl9tYXhfbGVuZ3RoKTsKLQkJCUV4cGxhaW5QcmludFBsYW4o ZXMsIHF1ZXJ5RGVzYyk7Ci0JCQlpZiAoZXMtPmFuYWx5emUgJiYgYXV0b19leHBsYWluX2xvZ190 cmlnZ2VycykKLQkJCQlFeHBsYWluUHJpbnRUcmlnZ2VycyhlcywgcXVlcnlEZXNjKTsKLQkJCWlm IChlcy0+Y29zdHMpCi0JCQkJRXhwbGFpblByaW50SklUU3VtbWFyeShlcywgcXVlcnlEZXNjKTsK LQkJCUV4cGxhaW5FbmRPdXRwdXQoZXMpOwotCi0JCQkvKiBSZW1vdmUgbGFzdCBsaW5lIGJyZWFr ICovCi0JCQlpZiAoZXMtPnN0ci0+bGVuID4gMCAmJiBlcy0+c3RyLT5kYXRhW2VzLT5zdHItPmxl biAtIDFdID09ICdcbicpCi0JCQkJZXMtPnN0ci0+ZGF0YVstLWVzLT5zdHItPmxlbl0gPSAnXDAn OwotCi0JCQkvKiBGaXggSlNPTiB0byBvdXRwdXQgYW4gb2JqZWN0ICovCi0JCQlpZiAoYXV0b19l eHBsYWluX2xvZ19mb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfSlNPTikKLQkJCXsKLQkJCQllcy0+ c3RyLT5kYXRhWzBdID0gJ3snOwotCQkJCWVzLT5zdHItPmRhdGFbZXMtPnN0ci0+bGVuIC0gMV0g PSAnfSc7Ci0JCQl9CisJCQlFeHBsYWluQXNzZW1ibGVMb2dPdXRwdXQoZXMsIHF1ZXJ5RGVzYywg YXV0b19leHBsYWluX2xvZ19mb3JtYXQsCisJCQkJCQkJCQkgYXV0b19leHBsYWluX2xvZ190cmln Z2VycywKKwkJCQkJCQkJCSBhdXRvX2V4cGxhaW5fbG9nX3BhcmFtZXRlcl9tYXhfbGVuZ3RoKTsK IAogCQkJLyoKIAkJCSAqIE5vdGU6IHdlIHJlbHkgb24gdGhlIGV4aXN0aW5nIGxvZ2dpbmcgb2Yg Y29udGV4dCBvcgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMv c2dtbC9mdW5jLnNnbWwKaW5kZXggN2JlMDMyNGFjOC4uZWM2NjI3ZTJlNiAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0y ODI4MSw2ICsyODI4MSwyNSBAQCBhY2wgICAgICB8IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jl cyxmb289ci9wb3N0Z3Jlc30KICAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgIDwvcm93Pgog CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFy YSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8 cHJpbWFyeT5wZ19sb2dfcXVlcnlfcGxhbjwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+ CisgICAgICAgIDxmdW5jdGlvbj5wZ19sb2dfcXVlcnlfcGxhbjwvZnVuY3Rpb24+ICggPHBhcmFt ZXRlcj5waWQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwvdHlwZT4gKQorICAgICAgICA8cmV0 dXJudmFsdWU+Ym9vbGVhbjwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxw YXJhPgorICAgICAgICBSZXF1ZXN0cyB0byBsb2cgdGhlIHBsYW4gb2YgdGhlIHF1ZXJ5IGN1cnJl bnRseSBydW5uaW5nIG9uIHRoZQorICAgICAgICBiYWNrZW5kIHdpdGggc3BlY2lmaWVkIHByb2Nl c3MgSUQuCisgICAgICAgIEl0IHdpbGwgYmUgbG9nZ2VkIGF0IDxsaXRlcmFsPkxPRzwvbGl0ZXJh bD4gbWVzc2FnZSBsZXZlbCBhbmQKKyAgICAgICAgd2lsbCBhcHBlYXIgaW4gdGhlIHNlcnZlciBs b2cgYmFzZWQgb24gdGhlIGxvZworICAgICAgICBjb25maWd1cmF0aW9uIHNldCAoU2VlIDx4cmVm IGxpbmtlbmQ9InJ1bnRpbWUtY29uZmlnLWxvZ2dpbmciLz4KKyAgICAgICAgZm9yIG1vcmUgaW5m b3JtYXRpb24pLCBidXQgd2lsbCBub3QgYmUgc2VudCB0byB0aGUgY2xpZW50CisgICAgICAgIHJl Z2FyZGxlc3Mgb2YgPHhyZWYgbGlua2VuZD0iZ3VjLWNsaWVudC1taW4tbWVzc2FnZXMiLz4uCisg ICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CisKICAgICAgIDxyb3c+CiAgICAg ICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0 dXJlIj4KICAgICAgICAgPGluZGV4dGVybT4KQEAgLTI4Mzk5LDYgKzI4NDE4LDM3IEBAIExPRzog IEdyYW5kIHRvdGFsOiAxNjUxOTIwIGJ5dGVzIGluIDIwMSBibG9ja3M7IDYyMjM2MCBmcmVlICg4 OCBjaHVua3MpOyAxMDI5NTYwCiAgICAgYmVjYXVzZSBpdCBtYXkgZ2VuZXJhdGUgYSBsYXJnZSBu dW1iZXIgb2YgbG9nIG1lc3NhZ2VzLgogICAgPC9wYXJhPgogCisgICA8cGFyYT4KKyAgICA8ZnVu Y3Rpb24+cGdfbG9nX3F1ZXJ5X3BsYW48L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZAorICAgIHRvIGxv ZyB0aGUgcGxhbiBvZiBhIGJhY2tlbmQgcHJvY2Vzcy4gRm9yIGV4YW1wbGU6Cis8cHJvZ3JhbWxp c3Rpbmc+Citwb3N0Z3Jlcz0jIFNFTEVDVCBwZ19sb2dfcXVlcnlfcGxhbigyMDExMTYpOworIHBn X2xvZ19xdWVyeV9wbGFuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cp Cis8L3Byb2dyYW1saXN0aW5nPgorVGhlIGZvcm1hdCBvZiB0aGUgcXVlcnkgcGxhbiBpcyB0aGUg c2FtZSBhcyB3aGVuIDxsaXRlcmFsPlZFUkJPU0U8L2xpdGVyYWw+LAorPGxpdGVyYWw+Q09TVFM8 L2xpdGVyYWw+LCA8bGl0ZXJhbD5TRVRUSU5HUzwvbGl0ZXJhbD4gYW5kCis8bGl0ZXJhbD5GT1JN QVQgVEVYVDwvbGl0ZXJhbD4gYXJlIHVzZWQgaW4gdGhlIDxjb21tYW5kPkVYUExBSU48L2NvbW1h bmQ+Citjb21tYW5kLiBGb3IgZXhhbXBsZToKKzxzY3JlZW4+CitMT0c6ICBxdWVyeSBwbGFuIHJ1 bm5pbmcgb24gYmFja2VuZCB3aXRoIFBJRCAyMDExMTYgaXM6CisgICAgICAgIFF1ZXJ5IFRleHQ6 IFNFTEVDVCAqIEZST00gcGdiZW5jaF9hY2NvdW50czsKKyAgICAgICAgU2VxIFNjYW4gb24gcHVi bGljLnBnYmVuY2hfYWNjb3VudHMgIChjb3N0PTAuMDAuLjUyNzg3LjAwIHJvd3M9MjAwMDAwMCB3 aWR0aD05NykKKyAgICAgICAgICBPdXRwdXQ6IGFpZCwgYmlkLCBhYmFsYW5jZSwgZmlsbGVyCisg ICAgICAgIFNldHRpbmdzOiB3b3JrX21lbSA9ICcxTUInCisgICAgICAgIFF1ZXJ5IElkZW50aWZp ZXI6IDg2MjEyNTU1NDY1NjA3Mzk2ODAKKzwvc2NyZWVuPgorICAgIE5vdGUgdGhhdCB3aGVuIHRo ZSB0YXJnZXQgaXMgZXhlY3V0aW5nIG5lc3RlZCBzdGF0ZW1lbnRzKHN0YXRlbWVudHMgZXhlY3V0 ZWQKKyAgICBpbnNpZGUgYSBmdW5jdGlvbiksIG9ubHkgdGhlIGlubmVybW9zdCBxdWVyeSBwbGFu IGlzIGxvZ2dlZC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgV2hlbiBhIHN1YnRyYW5z YWN0aW9uIGlzIGFib3J0ZWQsIDxmdW5jdGlvbj5wZ19sb2dfcXVlcnlfcGxhbjwvZnVuY3Rpb24+ CisgICAgY2Fubm90IGxvZyB0aGUgcXVlcnkgcGxhbiBhZnRlciB0aGUgYWJvcnQuCisgICA8L3Bh cmE+CisKICAgPC9zZWN0Mj4KIAogICA8c2VjdDIgaWQ9ImZ1bmN0aW9ucy1hZG1pbi1iYWNrdXAi PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4IDAwNGY3ZTEwZTUuLjYyYmQ2ZWU2MWEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2VudW0uaCIKICNpbmNsdWRlICJjYXRhbG9nL3N0b3JhZ2UuaCIKICNpbmNs dWRlICJjb21tYW5kcy9hc3luYy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW4uaCIKICNp bmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2Vy LmgiCiAjaW5jbHVkZSAiY29tbW9uL3BnX3BybmcuaCIKQEAgLTI5MDMsNiArMjkwNCw5IEBAIEFi b3J0VHJhbnNhY3Rpb24odm9pZCkKIAkvKiBSZXNldCBzbmFwc2hvdCBleHBvcnQgc3RhdGUuICov CiAJU25hcEJ1aWxkUmVzZXRFeHBvcnRlZFNuYXBzaG90U3RhdGUoKTsKIAorCS8qIFJlc2V0IHBn X2xvZ19xdWVyeV9wbGFuKCkgcmVsYXRlZCBzdGF0ZS4gKi8KKwlSZXNldExvZ1F1ZXJ5UGxhblN0 YXRlKCk7CisKIAkvKgogCSAqIElmIHRoaXMgeGFjdCBoYXMgc3RhcnRlZCBhbnkgdW5maW5pc2hl ZCBwYXJhbGxlbCBvcGVyYXRpb24sIGNsZWFuIHVwCiAJICogaXRzIHdvcmtlcnMgYW5kIGV4aXQg cGFyYWxsZWwgbW9kZS4gIERvbid0IHdhcm4gYWJvdXQgbGVha2VkIHJlc291cmNlcy4KQEAgLTUz MDQsNiArNTMwOCw5IEBAIEFib3J0U3ViVHJhbnNhY3Rpb24odm9pZCkKIAkvKiBSZXNldCBsb2dp Y2FsIHN0cmVhbWluZyBzdGF0ZS4gKi8KIAlSZXNldExvZ2ljYWxTdHJlYW1pbmdTdGF0ZSgpOwog CisJLyogUmVzZXQgcGdfbG9nX3F1ZXJ5X3BsYW4oKSByZWxhdGVkIHN0YXRlLiAqLworCVJlc2V0 TG9nUXVlcnlQbGFuU3RhdGUoKTsKKwogCS8qCiAJICogTm8gbmVlZCBmb3IgU25hcEJ1aWxkUmVz ZXRFeHBvcnRlZFNuYXBzaG90U3RhdGUoKSBoZXJlLCBzbmFwc2hvdAogCSAqIGV4cG9ydHMgYXJl IG5vdCBzdXBwb3J0ZWQgaW4gc3VidHJhbnNhY3Rpb25zLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lz dGVtX2Z1bmN0aW9ucy5zcWwKaW5kZXggMjBkM2I5YjczZi4uZGVlZDE0YjVmYiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbAorKysgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCkBAIC03OTYsNiArNzk2LDggQEAgUkVW T0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbHNfbG9naWNhbG1hcGRpcigpIEZST00gUFVCTElD OwogCiBSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19sc19yZXBsc2xvdGRpcih0ZXh0KSBG Uk9NIFBVQkxJQzsKIAorUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX3F1ZXJ5X3Bs YW4oaW50ZWdlcikgRlJPTSBQVUJMSUM7CisKIC0tCiAtLSBXZSBhbHNvIHNldCB1cCBzb21lIHRo aW5ncyBhcyBhY2Nlc3NpYmxlIHRvIHN0YW5kYXJkIHJvbGVzLgogLS0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYwppbmRleCA3YzBmZDYzYjJmLi5jNDRjOTQwYjE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j CkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiaml0L2ppdC5oIgogI2luY2x1ZGUgImxpYnBx L3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibGlicHEvcHJvdG9jb2wuaCIKKyNpbmNsdWRlICJtaXNj YWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9leHRlbnNpYmxlLmgiCiAjaW5jbHVkZSAibm9kZXMv bWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCkBAIC0yOSw3ICszMCw5 IEBACiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3 cml0ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUg InV0aWxzL2JhY2tlbmRfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNp bmNsdWRlICJ1dGlscy9ndWNfdGFibGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbi5oIgpAQCAt NDEsNiArNDQsMTEgQEAKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogI2luY2x1ZGUgInV0 aWxzL3htbC5oIgogCitib29sCQlQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0QWN0aXZlID0g ZmFsc2U7CisKKy8qIEN1cnJlbnRseSBleGVjdXRpbmcgcXVlcnkncyBRdWVyeURlc2MgKi8KK1F1 ZXJ5RGVzYyAqQWN0aXZlUXVlcnlEZXNjID0gTlVMTDsKKwogCiAvKiBIb29rIGZvciBwbHVnaW5z IHRvIGdldCBjb250cm9sIGluIEV4cGxhaW5PbmVRdWVyeSgpICovCiBFeHBsYWluT25lUXVlcnlf aG9va190eXBlIEV4cGxhaW5PbmVRdWVyeV9ob29rID0gTlVMTDsKQEAgLTE3OSw3ICsxODcsMTAg QEAgc3RhdGljIHZvaWQgRXhwbGFpbkluZGVudFRleHQoRXhwbGFpblN0YXRlICplcyk7CiBzdGF0 aWMgdm9pZCBFeHBsYWluSlNPTkxpbmVFbmRpbmcoRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMg dm9pZCBFeHBsYWluWUFNTExpbmVTdGFydGluZyhFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2 b2lkIGVzY2FwZV95YW1sKFN0cmluZ0luZm8gYnVmLCBjb25zdCBjaGFyICpzdHIpOworc3RhdGlj IFR1cGxlVGFibGVTbG90ICpFeGVjUHJvY05vZGVXaXRoRXhwbGFpbihQbGFuU3RhdGUgKnBzKTsK IHN0YXRpYyBTZXJpYWxpemVNZXRyaWNzIEdldFNlcmlhbGl6YXRpb25NZXRyaWNzKERlc3RSZWNl aXZlciAqZGVzdCk7CitzdGF0aWMgdm9pZCBXcmFwRXhlY1Byb2NOb2RlV2l0aEV4cGxhaW4oUGxh blN0YXRlICpwcyk7CitzdGF0aWMgdm9pZCBVbndyYXBFeGVjUHJvY05vZGVXaXRoRXhwbGFpbihQ bGFuU3RhdGUgKnBzKTsKIAogCiAKQEAgLTg4Miw2ICs4OTMsMzcgQEAgRXhwbGFpblByaW50U2V0 dGluZ3MoRXhwbGFpblN0YXRlICplcykKIAl9CiB9CiAKKy8qCisgKiBFeHBsYWluQXNzZW1ibGVM b2dPdXRwdXQgLQorICogICAgQXNzZW1ibGUgZXMtPnN0ciBmb3IgbG9nZ2luZyBhY2NvcmRpbmcg dG8gc3BlY2lmaWVkIG9wdGlvbnMgYW5kIGZvcm1hdAorICovCisKK3ZvaWQKK0V4cGxhaW5Bc3Nl bWJsZUxvZ091dHB1dChFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50 IGxvZ0Zvcm1hdCwKKwkJCQkJCSBib29sIGxvZ1RyaWdnZXJzLCBpbnQgbG9nUGFyYW1ldGVyTWF4 TGVuZ3RoKQoreworCUV4cGxhaW5CZWdpbk91dHB1dChlcyk7CisJRXhwbGFpblF1ZXJ5VGV4dChl cywgcXVlcnlEZXNjKTsKKwlFeHBsYWluUXVlcnlQYXJhbWV0ZXJzKGVzLCBxdWVyeURlc2MtPnBh cmFtcywgbG9nUGFyYW1ldGVyTWF4TGVuZ3RoKTsKKwlFeHBsYWluUHJpbnRQbGFuKGVzLCBxdWVy eURlc2MpOworCWlmIChlcy0+YW5hbHl6ZSAmJiBsb2dUcmlnZ2VycykKKwkJRXhwbGFpblByaW50 VHJpZ2dlcnMoZXMsIHF1ZXJ5RGVzYyk7CisJaWYgKGVzLT5jb3N0cykKKwkJRXhwbGFpblByaW50 SklUU3VtbWFyeShlcywgcXVlcnlEZXNjKTsKKwlFeHBsYWluRW5kT3V0cHV0KGVzKTsKKworCS8q IFJlbW92ZSBsYXN0IGxpbmUgYnJlYWsgKi8KKwlpZiAoZXMtPnN0ci0+bGVuID4gMCAmJiBlcy0+ c3RyLT5kYXRhW2VzLT5zdHItPmxlbiAtIDFdID09ICdcbicpCisJCWVzLT5zdHItPmRhdGFbLS1l cy0+c3RyLT5sZW5dID0gJ1wwJzsKKworCS8qIEZpeCBKU09OIHRvIG91dHB1dCBhbiBvYmplY3Qg Ki8KKwlpZiAobG9nRm9ybWF0ID09IEVYUExBSU5fRk9STUFUX0pTT04pCisJeworCQllcy0+c3Ry LT5kYXRhWzBdID0gJ3snOworCQllcy0+c3RyLT5kYXRhW2VzLT5zdHItPmxlbiAtIDFdID0gJ30n OworCX0KK30KKwogLyoKICAqIEV4cGxhaW5QcmludFBsYW4gLQogICoJICBjb252ZXJ0IGEgUXVl cnlEZXNjJ3MgcGxhbiB0cmVlIHRvIHRleHQgYW5kIGFwcGVuZCBpdCB0byBlcy0+c3RyCkBAIC0x OTU0LDYgKzE5OTYsOSBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAq YW5jZXN0b3JzLAogCS8qCiAJICogV2UgaGF2ZSB0byBmb3JjaWJseSBjbGVhbiB1cCB0aGUgaW5z dHJ1bWVudGF0aW9uIHN0YXRlIGJlY2F1c2Ugd2UKIAkgKiBoYXZlbid0IGRvbmUgRXhlY3V0b3JF bmQgeWV0LiAgVGhpcyBpcyBwcmV0dHkgZ3JvdHR5IC4uLgorCSAqIFRoaXMgY2xlYW51cCBzaG91 bGQgbm90IGJlIGRvbmUgd2hlbiB0aGUgcXVlcnkgaGFzIGFscmVhZHkgYmVlbiBleGVjdXRlZAor CSAqIGFuZCBleHBsYWluIGhhcyBiZWVuIGNhbGxlZCBieSBzaWduYWwsIGFzIHRoZSB0YXJnZXQg cXVlcnkgbWF5IHVzZQorCSAqIGluc3RydW1lbnRhdGlvbiBhbmQgY2xlYW4gaXRzZWxmIHVwLgog CSAqCiAJICogTm90ZTogY29udHJpYi9hdXRvX2V4cGxhaW4gY291bGQgY2F1c2UgaW5zdHJ1bWVu dGF0aW9uIHRvIGJlIHNldCB1cAogCSAqIGV2ZW4gdGhvdWdoIHdlIGRpZG4ndCBhc2sgZm9yIGl0 IGhlcmUuICBCZSBjYXJlZnVsIG5vdCB0byBwcmludCBhbnkKQEAgLTE5NjEsNyArMjAwNiw3IEBA IEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJICog SW5zdHJFbmRMb29wIGNhbGwgYW55d2F5LCBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIHRoZSBudW1i ZXIgb2YgY2FzZXMKIAkgKiBhdXRvX2V4cGxhaW4gaGFzIHRvIGNvbnRlbmQgd2l0aC4KIAkgKi8K LQlpZiAocGxhbnN0YXRlLT5pbnN0cnVtZW50KQorCWlmIChwbGFuc3RhdGUtPmluc3RydW1lbnQg JiYgIWVzLT5zaWduYWxlZCkKIAkJSW5zdHJFbmRMb29wKHBsYW5zdGF0ZS0+aW5zdHJ1bWVudCk7 CiAKIAlpZiAoZXMtPmFuYWx5emUgJiYKQEAgLTU5MTAsMyArNTk1NSwzMjggQEAgR2V0U2VyaWFs aXphdGlvbk1ldHJpY3MoRGVzdFJlY2VpdmVyICpkZXN0KQogCiAJcmV0dXJuIGVtcHR5OwogfQor CisvKgorICogSGFuZGxlTG9nUXVlcnlQbGFuSW50ZXJydXB0IC0KKyAqICAgIEhhbmRsZSByZWNl aXB0IG9mIGFuIGludGVycnVwdCBpbmRpY2F0aW5nIGxvZ2dpbmcgdGhlIHBsYW4gb2YgdGhlIGN1 cnJlbnRseQorICogICAgcnVubmluZyBxdWVyeS4KKyAqCisgKiBBbGwgdGhlIGFjdHVhbCB3b3Jr IGlzIGRlZmVycmVkIHRvIFByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHQoKSwKKyAqIGJlY2F1 c2Ugd2UgY2Fubm90IHNhZmVseSBlbWl0IGEgbG9nIG1lc3NhZ2UgaW5zaWRlIHRoZSBzaWduYWwg aGFuZGxlci4KKyAqLwordm9pZAorSGFuZGxlTG9nUXVlcnlQbGFuSW50ZXJydXB0KHZvaWQpCit7 CisJSW50ZXJydXB0UGVuZGluZyA9IHRydWU7CisJTG9nUXVlcnlQbGFuUGVuZGluZyA9IHRydWU7 CisJLyogbGF0Y2ggd2lsbCBiZSBzZXQgYnkgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIgKi8K K30KKworLyoKKyAqIFJlc2V0TG9nUXVlcnlQbGFuU3RhdGUgLQorICogICBDbGVhciBwZ19sb2df cXVlcnlfcGxhbigpIHJlbGF0ZWQgc3RhdGUgZHVyaW5nIChzdWIpdHJhbnNhY3Rpb24gYWJvcnQK KyAqLwordm9pZAorUmVzZXRMb2dRdWVyeVBsYW5TdGF0ZSh2b2lkKQoreworCS8qCisJICogQWZ0 ZXIgYWJvcnQsIHNvbWUgZWxlbWVudHMgb2YgQWN0aXZlUXVlcnlEZXNjIGlzIGZyZWVkLiBUbyBh dm9pZAorCSAqIGFjY2Vzc2luZyB0aGVtLCByZXNldCBBY3RpdmVRdWVyeURlc2MgaGVyZS4KKwkg Ki8KKwlBY3RpdmVRdWVyeURlc2MgPSBOVUxMOworCVByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1 cHRBY3RpdmUgPSBmYWxzZTsKK30KKworLyoKKyAqIFdyYXBNdWx0aUV4ZWNQcm9jTm9kZXNXaXRo RXhwbGFpbiAtCisgKgkgIFdyYXAgYXJyYXkgb2YgUGxhblN0YXRlcyBFeGVjUHJvY05vZGVzIHdp dGggRXhlY1Byb2NOb2RlV2l0aEV4cGxhaW4KKyAqLworc3RhdGljIHZvaWQKK1dyYXBNdWx0aUV4 ZWNQcm9jTm9kZXNXaXRoRXhwbGFpbihQbGFuU3RhdGUgKipwbGFuc3RhdGVzLCBpbnQgbnBsYW5z KQoreworCWludAkJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnBsYW5zOyBpKyspCisJCVdyYXBF eGVjUHJvY05vZGVXaXRoRXhwbGFpbihwbGFuc3RhdGVzW2ldKTsKK30KKworLyoKKyAqIFdyYXBD dXN0b21QbGFuQ2hpbGRFeGVjUHJvY05vZGVzV2l0aEV4cGxhaW4gLQorICoJICBXcmFwIEN1c3Rv bVNjYW5zdGF0ZSBjaGlsZHJlbidzIEV4ZWNQcm9jTm9kZXMgd2l0aCBFeGVjUHJvY05vZGVXaXRo RXhwbGFpbgorICovCitzdGF0aWMgdm9pZAorV3JhcEN1c3RvbVBsYW5DaGlsZEV4ZWNQcm9jTm9k ZXNXaXRoRXhwbGFpbihDdXN0b21TY2FuU3RhdGUgKmNzcykKK3sKKwlMaXN0Q2VsbCAgICpjZWxs OworCisJZm9yZWFjaChjZWxsLCBjc3MtPmN1c3RvbV9wcykKKwkJV3JhcEV4ZWNQcm9jTm9kZVdp dGhFeHBsYWluKChQbGFuU3RhdGUgKikgbGZpcnN0KGNlbGwpKTsKK30KKworLyoKKyAqIFdyYXBF eGVjUHJvY05vZGVXaXRoRXhwbGFpbiAtCisgKgkgIFdyYXAgRXhlY1Byb2NOb2RlIHdpdGggRXhl Y1Byb2NOb2RlV2l0aEV4cGxhaW4gcmVjdXJzaXZlbHkKKyAqLworc3RhdGljIHZvaWQKK1dyYXBF eGVjUHJvY05vZGVXaXRoRXhwbGFpbihQbGFuU3RhdGUgKnBzKQoreworCS8qIHdyYXBwaW5nIGNh biBiZSBkb25lIG9ubHkgb25jZSAqLworCWlmIChwcy0+RXhlY1Byb2NOb2RlT3JpZ2luYWwgIT0g TlVMTCkKKwkJcmV0dXJuOworCisJY2hlY2tfc3RhY2tfZGVwdGgoKTsKKworCXBzLT5FeGVjUHJv Y05vZGVPcmlnaW5hbCA9IHBzLT5FeGVjUHJvY05vZGU7CisJcHMtPkV4ZWNQcm9jTm9kZSA9IEV4 ZWNQcm9jTm9kZVdpdGhFeHBsYWluOworCisJaWYgKHBzLT5sZWZ0dHJlZSAhPSBOVUxMKQorCQlX cmFwRXhlY1Byb2NOb2RlV2l0aEV4cGxhaW4ocHMtPmxlZnR0cmVlKTsKKwlpZiAocHMtPnJpZ2h0 dHJlZSAhPSBOVUxMKQorCQlXcmFwRXhlY1Byb2NOb2RlV2l0aEV4cGxhaW4ocHMtPnJpZ2h0dHJl ZSk7CisKKwkvKiBzcGVjaWFsIGNoaWxkIHBsYW5zICovCisJc3dpdGNoIChub2RlVGFnKHBzLT5w bGFuKSkKKwl7CisJCWNhc2UgVF9BcHBlbmQ6CisJCQllcmVwb3J0KERFQlVHMSwgZXJybXNnKCJ3 cmFwcGluZyBBcHBlbmQiKSk7CisJCQlXcmFwTXVsdGlFeGVjUHJvY05vZGVzV2l0aEV4cGxhaW4o KChBcHBlbmRTdGF0ZSAqKSBwcyktPmFwcGVuZHBsYW5zLAorCQkJCQkJCQkJCQkgICgoQXBwZW5k U3RhdGUgKikgcHMpLT5hc19ucGxhbnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFwcGVu ZDoKKwkJCWVyZXBvcnQoREVCVUcxLCBlcnJtc2coIndyYXBwaW5nIE1lcmdlQXBwZW5kIikpOwor CQkJV3JhcE11bHRpRXhlY1Byb2NOb2Rlc1dpdGhFeHBsYWluKCgoTWVyZ2VBcHBlbmRTdGF0ZSAq KSBwcyktPm1lcmdlcGxhbnMsCisJCQkJCQkJCQkJCSAgKChNZXJnZUFwcGVuZFN0YXRlICopIHBz KS0+bXNfbnBsYW5zKTsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwQW5kOgorCQkJZXJlcG9y dChERUJVRzEsIGVycm1zZygid3JhcHBpbmcgQml0bWFwQW5kU3RhdGUiKSk7CisJCQlXcmFwTXVs dGlFeGVjUHJvY05vZGVzV2l0aEV4cGxhaW4oKChCaXRtYXBBbmRTdGF0ZSAqKSBwcyktPmJpdG1h cHBsYW5zLAorCQkJCQkJCQkJCQkgICgoQml0bWFwQW5kU3RhdGUgKikgcHMpLT5ucGxhbnMpOwor CQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBPcjoKKwkJCWVyZXBvcnQoREVCVUcxLCBlcnJtc2co IndyYXBwaW5nIEJpdG1hcE9ydGF0ZSIpKTsKKwkJCVdyYXBNdWx0aUV4ZWNQcm9jTm9kZXNXaXRo RXhwbGFpbigoKEJpdG1hcE9yU3RhdGUgKikgcHMpLT5iaXRtYXBwbGFucywKKwkJCQkJCQkJCQkJ ICAoKEJpdG1hcE9yU3RhdGUgKikgcHMpLT5ucGxhbnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9T dWJxdWVyeVNjYW46CisJCQllcmVwb3J0KERFQlVHMSwgZXJybXNnKCJ3cmFwcGluZyBTdWJxdWVy eSIpKTsKKwkJCVdyYXBFeGVjUHJvY05vZGVXaXRoRXhwbGFpbigoKFN1YnF1ZXJ5U2NhblN0YXRl ICopIHBzKS0+c3VicGxhbik7CisJCQlicmVhazsKKwkJY2FzZSBUX0N1c3RvbVNjYW46CisJCQll cmVwb3J0KERFQlVHMSwgZXJybXNnKCJ3cmFwcGluZyBDdXN0b21TY2FuU3RhdGUiKSk7CisJCQlX cmFwQ3VzdG9tUGxhbkNoaWxkRXhlY1Byb2NOb2Rlc1dpdGhFeHBsYWluKChDdXN0b21TY2FuU3Rh dGUgKikgcHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9Cit9CisKKy8q CisgKiBVbndyYXBNdWx0aUV4ZWNQcm9jTm9kZXNXaXRoRXhwbGFpbiAtCisgKgkgIFVud3JhcCBh cnJheSBvZiBQbGFuU3RhdGVzIEV4ZWNQcm9jTm9kZXMgd2l0aCBFeGVjUHJvY05vZGVXaXRoRXhw bGFpbgorICovCitzdGF0aWMgdm9pZAorVW53cmFwTXVsdGlFeGVjUHJvY05vZGVzV2l0aEV4cGxh aW4oUGxhblN0YXRlICoqcGxhbnN0YXRlcywgaW50IG5wbGFucykKK3sKKwlpbnQJCQlpOworCisJ Zm9yIChpID0gMDsgaSA8IG5wbGFuczsgaSsrKQorCQlVbndyYXBFeGVjUHJvY05vZGVXaXRoRXhw bGFpbihwbGFuc3RhdGVzW2ldKTsKK30KKworLyoKKyAqIFVud3JhcEN1c3RvbVBsYW5DaGlsZEV4 ZWNQcm9jTm9kZXNXaXRoRXhwbGFpbiAtCisgKgkgIFVud3JhcCBDdXN0b21TY2Fuc3RhdGUgY2hp bGRyZW4ncyBFeGVjUHJvY05vZGVzIHdpdGggRXhlY1Byb2NOb2RlV2l0aEV4cGxhaW4KKyAqLwor c3RhdGljIHZvaWQKK1Vud3JhcEN1c3RvbVBsYW5DaGlsZEV4ZWNQcm9jTm9kZXNXaXRoRXhwbGFp bihDdXN0b21TY2FuU3RhdGUgKmNzcykKK3sKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZm9yZWFj aChjZWxsLCBjc3MtPmN1c3RvbV9wcykKKwkJVW53cmFwRXhlY1Byb2NOb2RlV2l0aEV4cGxhaW4o KFBsYW5TdGF0ZSAqKSBsZmlyc3QoY2VsbCkpOworfQorCisvKgorICogVW53cmFwRXhlY1Byb2NO b2RlV2l0aEV4cGxhaW4gLQorICoJICBVbndyYXAgRXhlY1Byb2NOb2RlIHdpdGggRXhlY1Byb2NO b2RlV2l0aEV4cGxhaW4gcmVjdXJzaXZlbHkKKyAqLworc3RhdGljIHZvaWQKK1Vud3JhcEV4ZWNQ cm9jTm9kZVdpdGhFeHBsYWluKFBsYW5TdGF0ZSAqcHMpCit7CisJQXNzZXJ0KHBzLT5FeGVjUHJv Y05vZGVPcmlnaW5hbCAhPSBOVUxMKTsKKworCWNoZWNrX3N0YWNrX2RlcHRoKCk7CisKKwlwcy0+ RXhlY1Byb2NOb2RlID0gcHMtPkV4ZWNQcm9jTm9kZU9yaWdpbmFsOworCXBzLT5FeGVjUHJvY05v ZGVPcmlnaW5hbCA9IE5VTEw7CisKKwlpZiAocHMtPmxlZnR0cmVlICE9IE5VTEwpCisJCVVud3Jh cEV4ZWNQcm9jTm9kZVdpdGhFeHBsYWluKHBzLT5sZWZ0dHJlZSk7CisJaWYgKHBzLT5yaWdodHRy ZWUgIT0gTlVMTCkKKwkJVW53cmFwRXhlY1Byb2NOb2RlV2l0aEV4cGxhaW4ocHMtPnJpZ2h0dHJl ZSk7CisKKwkvKiBzcGVjaWFsIGNoaWxkIHBsYW5zICovCisJc3dpdGNoIChub2RlVGFnKHBzLT5w bGFuKSkKKwl7CisJCWNhc2UgVF9BcHBlbmQ6CisJCQllcmVwb3J0KERFQlVHMSwgZXJybXNnKCJ1 bndyYXBwaW5nIEFwcGVuZCIpKTsKKwkJCVVud3JhcE11bHRpRXhlY1Byb2NOb2Rlc1dpdGhFeHBs YWluKCgoQXBwZW5kU3RhdGUgKikgcHMpLT5hcHBlbmRwbGFucywKKwkJCQkJCQkJCQkJCSgoQXBw ZW5kU3RhdGUgKikgcHMpLT5hc19ucGxhbnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFw cGVuZDoKKwkJCWVyZXBvcnQoREVCVUcxLCBlcnJtc2coInVud3JhcHBpbmcgTWVyZ2VBcHBlbmQi KSk7CisJCQlVbndyYXBNdWx0aUV4ZWNQcm9jTm9kZXNXaXRoRXhwbGFpbigoKE1lcmdlQXBwZW5k U3RhdGUgKikgcHMpLT5tZXJnZXBsYW5zLAorCQkJCQkJCQkJCQkJKChNZXJnZUFwcGVuZFN0YXRl ICopIHBzKS0+bXNfbnBsYW5zKTsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwQW5kOgorCQkJ ZXJlcG9ydChERUJVRzEsIGVycm1zZygidW53cmFwcGluZyBCaXRtYXBBbmRTdGF0ZSIpKTsKKwkJ CVVud3JhcE11bHRpRXhlY1Byb2NOb2Rlc1dpdGhFeHBsYWluKCgoQml0bWFwQW5kU3RhdGUgKikg cHMpLT5iaXRtYXBwbGFucywKKwkJCQkJCQkJCQkJCSgoQml0bWFwQW5kU3RhdGUgKikgcHMpLT5u cGxhbnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBPcjoKKwkJCWVyZXBvcnQoREVCVUcx LCBlcnJtc2coInVud3JhcHBpbmcgQml0bWFwT3J0YXRlIikpOworCQkJVW53cmFwTXVsdGlFeGVj UHJvY05vZGVzV2l0aEV4cGxhaW4oKChCaXRtYXBPclN0YXRlICopIHBzKS0+Yml0bWFwcGxhbnMs CisJCQkJCQkJCQkJCQkoKEJpdG1hcE9yU3RhdGUgKikgcHMpLT5ucGxhbnMpOworCQkJYnJlYWs7 CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQllcmVwb3J0KERFQlVHMSwgZXJybXNnKCJ1bndy YXBwaW5nIFN1YnF1ZXJ5IikpOworCQkJVW53cmFwRXhlY1Byb2NOb2RlV2l0aEV4cGxhaW4oKChT dWJxdWVyeVNjYW5TdGF0ZSAqKSBwcyktPnN1YnBsYW4pOworCQkJYnJlYWs7CisJCWNhc2UgVF9D dXN0b21TY2FuOgorCQkJZXJlcG9ydChERUJVRzEsIGVycm1zZygidW53cmFwcGluZyBDdXN0b21T Y2FuU3RhdGUiKSk7CisJCQlVbndyYXBDdXN0b21QbGFuQ2hpbGRFeGVjUHJvY05vZGVzV2l0aEV4 cGxhaW4oKEN1c3RvbVNjYW5TdGF0ZSAqKSBwcyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWJyZWFrOworCX0KK30KKworLyoKKyAqIEV4ZWNQcm9jTm9kZVdpdGhFeHBsYWluIC0KKyAqCSAg V3JhcCBFeGVjUHJvY05vZGUgd2l0aCBjb2RlcyB3aGljaCBsb2dzIGN1cnJlbnRseSBydW5uaW5n IHBsYW4KKyAqLworc3RhdGljIFR1cGxlVGFibGVTbG90ICoKK0V4ZWNQcm9jTm9kZVdpdGhFeHBs YWluKFBsYW5TdGF0ZSAqcHMpCit7CisJRXhwbGFpblN0YXRlICplczsKKwlNZW1vcnlDb250ZXh0 IGN4dDsKKwlNZW1vcnlDb250ZXh0IG9sZF9jeHQ7CisKKwljaGVja19zdGFja19kZXB0aCgpOwor CisJY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJ CQkJCQkibG9nX3F1ZXJ5X3BsYW4gdGVtcG9yYXJ5IGNvbnRleHQiLAorCQkJCQkJCQlBTExPQ1NF VF9ERUZBVUxUX1NJWkVTKTsKKworCW9sZF9jeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3h0 KTsKKworCWVzID0gTmV3RXhwbGFpblN0YXRlKCk7CisKKwllcy0+Zm9ybWF0ID0gRVhQTEFJTl9G T1JNQVRfVEVYVDsKKwllcy0+c2V0dGluZ3MgPSB0cnVlOworCWVzLT52ZXJib3NlID0gdHJ1ZTsK Kwllcy0+c2lnbmFsZWQgPSB0cnVlOworCisJRXhwbGFpbkFzc2VtYmxlTG9nT3V0cHV0KGVzLCBB Y3RpdmVRdWVyeURlc2MsIEVYUExBSU5fRk9STUFUX1RFWFQsIDAsIC0xKTsKKworCWVyZXBvcnQo TE9HX1NFUlZFUl9PTkxZLAorCQkJZXJybXNnKCJxdWVyeSBwbGFuIHJ1bm5pbmcgb24gYmFja2Vu ZCB3aXRoIFBJRCAlZCBpczpcbiVzIiwKKwkJCQkgICBNeVByb2NQaWQsIGVzLT5zdHItPmRhdGEp LAorCQkJZXJyaGlkZXN0bXQodHJ1ZSksCisJCQllcnJoaWRlY29udGV4dCh0cnVlKSk7CisKKwlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkX2N4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZShjeHQp OworCisJVW53cmFwRXhlY1Byb2NOb2RlV2l0aEV4cGxhaW4oQWN0aXZlUXVlcnlEZXNjLT5wbGFu c3RhdGUpOworCisJLyoKKwkgKiBTaW5jZSB1bndyYXBwaW5nIGhhcyBhbHJlYWR5IGRvbmUsIGNh bGwgRXhlY1Byb2NOb2RlKCkgbm90CisJICogRXhlY1Byb2NOb2RlT3JpZ2luYWwoKS4KKwkgKi8K KwlyZXR1cm4gcHMtPkV4ZWNQcm9jTm9kZShwcyk7Cit9CisKKy8qCisgKiBQcm9jZXNzTG9nUXVl cnlQbGFuSW50ZXJydXB0CisgKgkgIEFkZCB3cmFwcGVyIHdoaWNoIGxvZ3MgZXhwbGFpbiBvZiB0 aGUgcGxhbiB0byBFeGVjUHJvY05vZGVzCisgKgorICogU2luY2UgcnVubmluZyBFWFBMQUlOIGNv ZGVzIGF0IGFueSBhcmJpdHJhcnkgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBpcworICogdW5zYWZl LCB0aGlzIGZ1bmN0aW9uIGp1c3Qgd3JhcHMgZXZlcnkgRXhlY1Byb2NOb2RlLgorICogSW4gdGhp cyB3YXksIEVYUExBSU4gY29kZSBpcyBvbmx5IGV4ZWN1dGVkIGF0IHRoZSB0aW1pbmcgb2YgRXhl Y1Byb2NOb2RlLAorICogd2hpY2ggc2VlbXMgc2FmZS4KKyAqLwordm9pZAorUHJvY2Vzc0xvZ1F1 ZXJ5UGxhbkludGVycnVwdCh2b2lkKQoreworCUxvZ1F1ZXJ5UGxhblBlbmRpbmcgPSBmYWxzZTsK KworCS8qIENhbm5vdCByZS1lbnRlciAqLworCWlmIChQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJy dXB0QWN0aXZlKQorCQlyZXR1cm47CisKKwlQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0QWN0 aXZlID0gdHJ1ZTsKKworCWlmIChBY3RpdmVRdWVyeURlc2MgPT0gTlVMTCkKKwl7CisJCWVyZXBv cnQoTE9HX1NFUlZFUl9PTkxZLAorCQkJCWVycm1zZygiYmFja2VuZCB3aXRoIFBJRCAlZCBpcyBu b3QgcnVubmluZyBhIHF1ZXJ5IG9yIGEgc3VidHJhbnNhY3Rpb24gaXMgYWJvcnRlZCIsCisJCQkJ CSAgIE15UHJvY1BpZCksCisJCQkJZXJyaGlkZXN0bXQodHJ1ZSksCisJCQkJZXJyaGlkZWNvbnRl eHQodHJ1ZSkpOworCisJCVByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHRBY3RpdmUgPSBmYWxz ZTsKKwkJcmV0dXJuOworCX0KKworCVdyYXBFeGVjUHJvY05vZGVXaXRoRXhwbGFpbihBY3RpdmVR dWVyeURlc2MtPnBsYW5zdGF0ZSk7CisJUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdEFjdGl2 ZSA9IGZhbHNlOworfQorCisvKgorICogcGdfbG9nX3F1ZXJ5X3BsYW4KKyAqICAgIFNpZ25hbCBh IGJhY2tlbmQgcHJvY2VzcyB0byBsb2cgdGhlIHF1ZXJ5IHBsYW4gb2YgdGhlIHJ1bm5pbmcgcXVl cnkuCisgKgorICogQnkgZGVmYXVsdCwgb25seSBzdXBlcnVzZXJzIGFyZSBhbGxvd2VkIHRvIHNp Z25hbCB0byBsb2cgdGhlIHBsYW4gYmVjYXVzZQorICogYWxsb3dpbmcgYW55IHVzZXJzIHRvIGlz c3VlIHRoaXMgcmVxdWVzdCBhdCBhbiB1bmJvdW5kZWQgcmF0ZSB3b3VsZAorICogY2F1c2UgbG90 cyBvZiBsb2cgbWVzc2FnZXMgYW5kIHdoaWNoIGNhbiBsZWFkIHRvIGRlbmlhbCBvZiBzZXJ2aWNl LgorICogQWRkaXRpb25hbCByb2xlcyBjYW4gYmUgcGVybWl0dGVkIHdpdGggR1JBTlQuCisgKi8K K0RhdHVtCitwZ19sb2dfcXVlcnlfcGxhbihQR19GVU5DVElPTl9BUkdTKQoreworCWludAkJCXBp ZCA9IFBHX0dFVEFSR19JTlQzMigwKTsKKwlQR1BST0MJICAgKnByb2M7CisJUGdCYWNrZW5kU3Rh dHVzICpiZV9zdGF0dXM7CisKKwlwcm9jID0gQmFja2VuZFBpZEdldFByb2MocGlkKTsKKworCWlm IChwcm9jID09IE5VTEwpCisJeworCQkvKgorCQkgKiBUaGlzIGlzIGp1c3QgYSB3YXJuaW5nIHNv IGEgbG9vcC10aHJvdWdoLXJlc3VsdHNldCB3aWxsIG5vdCBhYm9ydAorCQkgKiBpZiBvbmUgYmFj a2VuZCB0ZXJtaW5hdGVkIG9uIGl0cyBvd24gZHVyaW5nIHRoZSBydW4uCisJCSAqLworCQllcmVw b3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZygiUElEICVkIGlzIG5vdCBhIFBvc3RncmVTUUwgYmFj a2VuZCBwcm9jZXNzIiwgcGlkKSkpOworCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQorCisJ YmVfc3RhdHVzID0gcGdzdGF0X2dldF9iZWVudHJ5X2J5X3Byb2NfbnVtYmVyKHByb2MtPnZ4aWQu cHJvY051bWJlcik7CisJaWYgKGJlX3N0YXR1cy0+c3RfYmFja2VuZFR5cGUgIT0gQl9CQUNLRU5E KQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQ b3N0Z3JlU1FMIGNsaWVudCBiYWNrZW5kIHByb2Nlc3MiLCBwaWQpKSk7CisJCVBHX1JFVFVSTl9C T09MKGZhbHNlKTsKKwl9CisKKwlpZiAoU2VuZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX0xPR19R VUVSWV9QTEFOLCBwcm9jLT52eGlkLnByb2NOdW1iZXIpIDwgMCkKKwl7CisJCS8qIEFnYWluLCBq dXN0IGEgd2FybmluZyB0byBhbGxvdyBsb29wcyAqLworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJ KGVycm1zZygiY291bGQgbm90IHNlbmQgc2lnbmFsIHRvIHByb2Nlc3MgJWQ6ICVtIiwgcGlkKSkp OworCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQorCisJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwppbmRleCBjYzlhNTk0Y2JhLi5mNTAyYTM3YmQ3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJhY2Nl c3MveGFjdC5oIgogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVk ZSAiY29tbWFuZHMvbWF0dmlldy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKICNp bmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgpAQCAtMjk2LDEwICsyOTcsMjEgQEAgRXhlY3V0 b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCiAJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwg dWludDY0IGNvdW50LAogCQkJYm9vbCBleGVjdXRlX29uY2UpCiB7CisJLyoKKwkgKiBVcGRhdGUg QWN0aXZlUXVlcnlEZXNjIGhlcmUgdG8gZW5hYmxlIHJldHJpZXZhbCBvZiB0aGUgY3VycmVudGx5 CisJICogcnVubmluZyBxdWVyeURlc2MgZm9yIG5lc3RlZCBxdWVyaWVzLgorCSAqLworCVF1ZXJ5 RGVzYyAgKnNhdmVfQWN0aXZlUXVlcnlEZXNjOworCisJc2F2ZV9BY3RpdmVRdWVyeURlc2MgPSBB Y3RpdmVRdWVyeURlc2M7CisJQWN0aXZlUXVlcnlEZXNjID0gcXVlcnlEZXNjOworCiAJaWYgKEV4 ZWN1dG9yUnVuX2hvb2spCiAJCSgqRXhlY3V0b3JSdW5faG9vaykgKHF1ZXJ5RGVzYywgZGlyZWN0 aW9uLCBjb3VudCwgZXhlY3V0ZV9vbmNlKTsKIAllbHNlCiAJCXN0YW5kYXJkX0V4ZWN1dG9yUnVu KHF1ZXJ5RGVzYywgZGlyZWN0aW9uLCBjb3VudCwgZXhlY3V0ZV9vbmNlKTsKKworCUFjdGl2ZVF1 ZXJ5RGVzYyA9IHNhdmVfQWN0aXZlUXVlcnlEZXNjOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9wcm9jc2lnbmFsLmMKaW5kZXggODcwMjdmMjdlYi4uNTBjNWMyNjNhOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSAi YWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRl ICJjb21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi cGdzdGF0LmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgpAQCAtNjg4LDYgKzY4OSw5 IEBAIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1By b2NTaWduYWwoUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQpKQogCQlIYW5kbGVMb2dNZW1vcnlD b250ZXh0SW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfTE9HX1FV RVJZX1BMQU4pKQorCQlIYW5kbGVMb2dRdWVyeVBsYW5JbnRlcnJ1cHQoKTsKKwogCWlmIChDaGVj a1Byb2NTaWduYWwoUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFKSkKIAkJSGFuZGxlUGFy YWxsZWxBcHBseU1lc3NhZ2VJbnRlcnJ1cHQoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDhjYzIz YTljZWYuLjU5YjFjZDQ4ZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMu YworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNp bmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgog I2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9l eHBsYWluLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1ZGUgImNvbW1v bi9wZ19wcm5nLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgpAQCAtMzUwMCw2ICszNTAxLDkgQEAg UHJvY2Vzc0ludGVycnVwdHModm9pZCkKIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJ CVByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiAKKwlpZiAoTG9nUXVlcnlQbGFu UGVuZGluZykKKwkJUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdCgpOworCiAJaWYgKFBhcmFs bGVsQXBwbHlNZXNzYWdlUGVuZGluZykKIAkJSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VzKCk7 CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IDAzYTU0NDUxYWMuLjZjZjEyMTk3YjAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0zOSw2ICszOSw4IEBAIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBJZGxlU2Vzc2lvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBz aWdfYXRvbWljX3QgUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBz aWdfYXRvbWljX3QgTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBJZGxlU3RhdHNVcGRhdGVUaW1lb3V0UGVuZGluZyA9IGZhbHNlOwordm9sYXRp bGUgc2lnX2F0b21pY190IExvZ1F1ZXJ5UGxhblBlbmRpbmcgPSBmYWxzZTsKKwogdm9sYXRpbGUg dWludDMyIEludGVycnVwdEhvbGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgUXVlcnlD YW5jZWxIb2xkb2ZmQ291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIENyaXRTZWN0aW9uQ291bnQg PSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggMWVjMGQ2ZjZiNS4uODQ1MWFjZTdjMCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04NDM0LDYgKzg0MzQsMTIgQEAKICAgcHJvcmV0 dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdpbnQ0JywKICAgcHJvc3JjID0+ICdwZ19s b2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMnIH0sCiAKKyMgbG9nZ2luZyBwbGFuIG9mIHRoZSBy dW5uaW5nIHF1ZXJ5IG9uIHRoZSBzcGVjaWZpZWQgYmFja2VuZAoreyBvaWQgPT4gJzgwMDAnLCBk ZXNjciA9PiAnbG9nIHBsYW4gb2YgdGhlIHJ1bm5pbmcgcXVlcnkgb24gdGhlIHNwZWNpZmllZCBi YWNrZW5kJywKKyAgcHJvbmFtZSA9PiAncGdfbG9nX3F1ZXJ5X3BsYW4nLAorICBwcm92b2xhdGls ZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50NCcs IHByb3NyYyA9PiAncGdfbG9nX3F1ZXJ5X3BsYW4nIH0sCisKICMgbm9uLXBlcnNpc3RlbnQgc2Vy aWVzIGdlbmVyYXRvcgogeyBvaWQgPT4gJzEwNjYnLCBkZXNjciA9PiAnbm9uLXBlcnNpc3RlbnQg c2VyaWVzIGdlbmVyYXRvcicsCiAgIHByb25hbWUgPT4gJ2dlbmVyYXRlX3NlcmllcycsIHByb3Jv d3MgPT4gJzEwMDAnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5o IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCmluZGV4IGFhNTg3MmJjMTUuLjQ1ODUz NzA1ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAorKysgYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKQEAgLTE3LDYgKzE3LDkgQEAKICNpbmNsdWRl ICJsaWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9ub2RlLmgiCiAKK2V4 dGVybiBQR0RMTElNUE9SVCBRdWVyeURlc2MgKkFjdGl2ZVF1ZXJ5RGVzYzsKK2V4dGVybiBQR0RM TElNUE9SVCBib29sIFByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHRBY3RpdmU7CisKIHR5cGVk ZWYgZW51bSBFeHBsYWluU2VyaWFsaXplT3B0aW9uCiB7CiAJRVhQTEFJTl9TRVJJQUxJWkVfTk9O RSwKQEAgLTcxLDYgKzc0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwbGFpblN0YXRlCiAJCQkJCQkJ CSAqIGVudHJ5ICovCiAJLyogc3RhdGUgcmVsYXRlZCB0byB0aGUgY3VycmVudCBwbGFuIG5vZGUg Ki8KIAlFeHBsYWluV29ya2Vyc1N0YXRlICp3b3JrZXJzX3N0YXRlOyAvKiBuZWVkZWQgaWYgcGFy YWxsZWwgcGxhbiAqLworCWJvb2wJCXNpZ25hbGVkOwkJLyogd2hldGhlciBleHBsYWluIGlzIGNh bGxlZCBieSBzaWduYWwgKi8KIH0gRXhwbGFpblN0YXRlOwogCiAvKiBIb29rIGZvciBwbHVnaW5z IHRvIGdldCBjb250cm9sIGluIEV4cGxhaW5PbmVRdWVyeSgpICovCkBAIC0xMTAsNiArMTE0LDEw IEBAIGV4dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwg SW50b0NsYXVzZSAqaW50bywKIAkJCQkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSwK IAkJCQkJCSAgIGNvbnN0IE1lbW9yeUNvbnRleHRDb3VudGVycyAqbWVtX2NvdW50ZXJzKTsKIAor ZXh0ZXJuIHZvaWQgRXhwbGFpbkFzc2VtYmxlTG9nT3V0cHV0KEV4cGxhaW5TdGF0ZSAqZXMsIFF1 ZXJ5RGVzYyAqcXVlcnlEZXNjLAorCQkJCQkJCQkJIGludCBsb2dGb3JtYXQsIGJvb2wgbG9nVHJp Z2dlcnMsCisJCQkJCQkJCQkgaW50IGxvZ1BhcmFtZXRlck1heExlbmd0aCk7CisKIGV4dGVybiB2 b2lkIEV4cGxhaW5QcmludFBsYW4oRXhwbGFpblN0YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURl c2MpOwogZXh0ZXJuIHZvaWQgRXhwbGFpblByaW50VHJpZ2dlcnMoRXhwbGFpblN0YXRlICplcywg UXVlcnlEZXNjICpxdWVyeURlc2MpOwogCkBAIC0xNDQsNCArMTUyLDggQEAgZXh0ZXJuIHZvaWQg RXhwbGFpbkNsb3NlR3JvdXAoY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hhciAqbGFiZWxu YW1lLAogCiBleHRlcm4gRGVzdFJlY2VpdmVyICpDcmVhdGVFeHBsYWluU2VyaWFsaXplRGVzdFJl Y2VpdmVyKEV4cGxhaW5TdGF0ZSAqZXMpOwogCitleHRlcm4gdm9pZCBIYW5kbGVMb2dRdWVyeVBs YW5JbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJy dXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgUmVzZXRMb2dRdWVyeVBsYW5TdGF0ZSh2b2lkKTsKKwog I2VuZGlmCQkJCQkJCS8qIEVYUExBSU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlz Y2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCBlMjZkMTA4YTQ3Li5mNjc1 YzRjNzhmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5j bHVkZS9taXNjYWRtaW4uaApAQCAtOTYsNiArOTYsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgdm9s YXRpbGUgc2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmc7CiBleHRlcm4gUEdE TExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZzsK IGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nTWVtb3J5Q29udGV4 dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVT dGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nOworZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBMb2dRdWVyeVBsYW5QZW5kaW5nOwogCiBleHRlcm4gUEdETExJTVBPUlQgdm9s YXRpbGUgc2lnX2F0b21pY190IENoZWNrQ2xpZW50Q29ubmVjdGlvblBlbmRpbmc7CiBleHRlcm4g UEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENsaWVudENvbm5lY3Rpb25Mb3N0Owpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaAppbmRleCBiNjdkNTE4NmEyLi4zOWFiNjgwYWU2IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaApAQCAtMTEzNSw2ICsxMTM1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhblN0YXRl CiAJRXhlY1Byb2NOb2RlTXRkIEV4ZWNQcm9jTm9kZVJlYWw7CS8qIGFjdHVhbCBmdW5jdGlvbiwg aWYgYWJvdmUgaXMgYQogCQkJCQkJCQkJCSAqIHdyYXBwZXIgKi8KIAorCUV4ZWNQcm9jTm9kZU10 ZCBFeGVjUHJvY05vZGVPcmlnaW5hbDsJLyogdGVtcG9yYXJ5IHBsYWNlIHdoZW4gYWRkaW5nCisJ CQkJCQkJCQkJCSAqIHByb2Nlc3MgZm9yIEV4ZWNQcm9jTm9kZSAqLworCiAJSW5zdHJ1bWVudGF0 aW9uICppbnN0cnVtZW50OwkvKiBPcHRpb25hbCBydW50aW1lIHN0YXRzIGZvciB0aGlzIG5vZGUg Ki8KIAlXb3JrZXJJbnN0cnVtZW50YXRpb24gKndvcmtlcl9pbnN0cnVtZW50OwkvKiBwZXItd29y a2VyIGluc3RydW1lbnRhdGlvbiAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2NzaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IDIy MTA3M2RlZjMuLmZiNzlhNDAzMTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJv Y3NpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNSw2 ICszNSw4IEBAIHR5cGVkZWYgZW51bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcsCS8q IGFzayB3YWxzZW5kZXJzIHRvIHByZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBST0NTSUdfQkFS UklFUiwJCQkvKiBnbG9iYWwgYmFycmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19MT0dfTUVN T1JZX0NPTlRFWFQsIC8qIGFzayBiYWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzICov CisJUFJPQ1NJR19MT0dfUVVFUllfUExBTiwJCS8qIGFzayBiYWNrZW5kIHRvIGxvZyBwbGFuIG9m IHRoZSBjdXJyZW50CisJCQkJCQkJCSAqIHF1ZXJ5ICovCiAJUFJPQ1NJR19QQVJBTExFTF9BUFBM WV9NRVNTQUdFLCAvKiBNZXNzYWdlIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwogCiAJ LyogUmVjb3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dGNvcC9wcXVlcnkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvcHF1ZXJ5LmgKaW5kZXggMDczZmIzMjNi Yy4uM2RkN2VkZjkzYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9wcXVlcnkuaAorKysg Yi9zcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5oCkBAIC0yMSw3ICsyMSw3IEBAIHN0cnVjdCBQbGFu bmVkU3RtdDsJCQkJLyogYXZvaWQgaW5jbHVkaW5nIHBsYW5ub2Rlcy5oIGhlcmUgKi8KIAogCiBl eHRlcm4gUEdETExJTVBPUlQgUG9ydGFsIEFjdGl2ZVBvcnRhbDsKLQorZXh0ZXJuIFBHRExMSU1Q T1JUIFF1ZXJ5RGVzYyAqQWN0aXZlUXVlcnlEZXNjOwogCiBleHRlcm4gUG9ydGFsU3RyYXRlZ3kg Q2hvb3NlUG9ydGFsU3RyYXRlZ3koTGlzdCAqc3RtdHMpOwogCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL21pc2NfZnVuY3Rpb25zLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CmluZGV4IDM2YjEyMDFmOWYuLmRhYTk0NTBlYTUg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CkBAIC0z MTYsMTQgKzMxNiwxNSBAQCBTRUxFQ1QgdGVzdF9jYW5vbmljYWxpemVfcGF0aCgnLi9hYmMvLi9k ZWYvLi4vLi9naGkvLi4vLi4vLi4vamtsL21ubycpOwogIC4uL2prbC9tbm8KICgxIHJvdykKIAor LS0gVGVzdCBsb2dnaW5nIGZ1bmN0aW9ucwogLS0KLS0tIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9j b250ZXh0cygpCi0tLQotLS0gTWVtb3J5IGNvbnRleHRzIGFyZSBsb2dnZWQgYW5kIHRoZXkgYXJl IG5vdCByZXR1cm5lZCB0byB0aGUgZnVuY3Rpb24uCistLSBUaGUgb3V0cHV0cyBvZiB0aGVzZSBm dW5jdGlvbnMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUgbm90IHJldHVybmVkIHRvCistLSB0aGUg ZnVuY3Rpb24uCiAtLSBGdXJ0aGVybW9yZSwgdGhlaXIgY29udGVudHMgY2FuIHZhcnkgZGVwZW5k aW5nIG9uIHRoZSB0aW1pbmcuIEhvd2V2ZXIsCiAtLSB3ZSBjYW4gYXQgbGVhc3QgdmVyaWZ5IHRo YXQgdGhlIGNvZGUgZG9lc24ndCBmYWlsLCBhbmQgdGhhdCB0aGUKIC0tIHBlcm1pc3Npb25zIGFy ZSBzZXQgcHJvcGVybHkuCiAtLQorLS0gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKCkK IFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSk7 CiAgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTMzNyw4ICszMzgsOCBAQCBTRUxFQ1QgcGdfbG9nX2JhY2tlbmRfbWVt b3J5X2NvbnRleHRzKHBpZCkgRlJPTSBwZ19zdGF0X2FjdGl2aXR5CiAgdAogKDEgcm93KQogCi1D UkVBVEUgUk9MRSByZWdyZXNzX2xvZ19tZW1vcnk7Ci1TRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZp bGVnZSgncmVncmVzc19sb2dfbWVtb3J5JywKK0NSRUFURSBST0xFIHJlZ3Jlc3NfbG9nX2Z1bmN0 aW9uOworU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX2Z1bmN0aW9u JywKICAgJ3BnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhpbnRlZ2VyKScsICdFWEVDVVRF Jyk7IC0tIG5vCiAgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSAKIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpAQCAtMzQ2LDE1ICszNDcsMTUgQEAgU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2Uo J3JlZ3Jlc3NfbG9nX21lbW9yeScsCiAoMSByb3cpCiAKIEdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJ T04gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpCi0gIFRPIHJlZ3Jlc3Nf bG9nX21lbW9yeTsKLVNFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19t ZW1vcnknLAorICBUTyByZWdyZXNzX2xvZ19mdW5jdGlvbjsKK1NFTEVDVCBoYXNfZnVuY3Rpb25f cHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlvbicsCiAgICdwZ19sb2dfYmFja2VuZF9tZW1v cnlfY29udGV4dHMoaW50ZWdlciknLCAnRVhFQ1VURScpOyAtLSB5ZXMKICBoYXNfZnVuY3Rpb25f cHJpdmlsZWdlIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgdAogKDEgcm93KQogCi1TRVQg Uk9MRSByZWdyZXNzX2xvZ19tZW1vcnk7CitTRVQgUk9MRSByZWdyZXNzX2xvZ19mdW5jdGlvbjsK IFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSk7 CiAgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTM2Myw4ICszNjQsNDEgQEAgU0VMRUNUIHBnX2xvZ19iYWNrZW5kX21l bW9yeV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgpKTsKIAogUkVTRVQgUk9MRTsKIFJFVk9LRSBF WEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhpbnRlZ2Vy KQotICBGUk9NIHJlZ3Jlc3NfbG9nX21lbW9yeTsKLURST1AgUk9MRSByZWdyZXNzX2xvZ19tZW1v cnk7CisgIEZST00gcmVncmVzc19sb2dfZnVuY3Rpb247CistLSBwZ19sb2dfcXVlcnlfcGxhbigp CitTRUxFQ1QgcGdfbG9nX3F1ZXJ5X3BsYW4ocGdfYmFja2VuZF9waWQoKSk7CisgcGdfbG9nX3F1 ZXJ5X3BsYW4gCistLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgaGFz X2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfZnVuY3Rpb24nLAorICAncGdfbG9nX3F1 ZXJ5X3BsYW4oaW50ZWdlciknLCAnRVhFQ1VURScpOyAtLSBubworIGhhc19mdW5jdGlvbl9wcml2 aWxlZ2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK0dSQU5UIEVY RUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlcikKKyAgVE8gcmVncmVz c19sb2dfZnVuY3Rpb247CitTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19s b2dfZnVuY3Rpb24nLAorICAncGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlciknLCAnRVhFQ1VURScp OyAtLSB5ZXMKKyBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgdAorKDEgcm93KQorCitTRVQgUk9MRSByZWdyZXNzX2xvZ19mdW5jdGlvbjsKK1NFTEVD VCBwZ19sb2dfcXVlcnlfcGxhbihwZ19iYWNrZW5kX3BpZCgpKTsKKyBwZ19sb2dfcXVlcnlfcGxh biAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1JFU0VUIFJPTEU7CitSRVZP S0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKQorICBGUk9N IHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOworRFJPUCBST0xFIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOwog LS0KIC0tIFRlc3Qgc29tZSBidWlsdC1pbiBTUkZzCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlz Y19mdW5jdGlvbnMuc3FsCmluZGV4IGI3NDk1ZDcwZWIuLjJkYTlkZTMwMGIgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwKQEAgLTEwOSwzOSArMTA5LDYwIEBAIFNFTEVD VCB0ZXN0X2Nhbm9uaWNhbGl6ZV9wYXRoKCcuL2FiYy8uL2RlZi8uJyk7CiBTRUxFQ1QgdGVzdF9j YW5vbmljYWxpemVfcGF0aCgnLi9hYmMvLi8uL2RlZi8uJyk7CiBTRUxFQ1QgdGVzdF9jYW5vbmlj YWxpemVfcGF0aCgnLi9hYmMvLi9kZWYvLi4vLi9naGkvLi4vLi4vLi4vamtsL21ubycpOwogCist LSBUZXN0IGxvZ2dpbmcgZnVuY3Rpb25zCiAtLQotLS0gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2Nv bnRleHRzKCkKLS0tCi0tLSBNZW1vcnkgY29udGV4dHMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUg bm90IHJldHVybmVkIHRvIHRoZSBmdW5jdGlvbi4KKy0tIFRoZSBvdXRwdXRzIG9mIHRoZXNlIGZ1 bmN0aW9ucyBhcmUgbG9nZ2VkIGFuZCB0aGV5IGFyZSBub3QgcmV0dXJuZWQgdG8KKy0tIHRoZSBm dW5jdGlvbi4KIC0tIEZ1cnRoZXJtb3JlLCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBkZXBlbmRp bmcgb24gdGhlIHRpbWluZy4gSG93ZXZlciwKIC0tIHdlIGNhbiBhdCBsZWFzdCB2ZXJpZnkgdGhh dCB0aGUgY29kZSBkb2Vzbid0IGZhaWwsIGFuZCB0aGF0IHRoZQogLS0gcGVybWlzc2lvbnMgYXJl IHNldCBwcm9wZXJseS4KIC0tCiAKKy0tIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cygp CisKIFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQo KSk7CiAKIFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGlkKSBGUk9NIHBn X3N0YXRfYWN0aXZpdHkKICAgV0hFUkUgYmFja2VuZF90eXBlID0gJ2NoZWNrcG9pbnRlcic7CiAK LUNSRUFURSBST0xFIHJlZ3Jlc3NfbG9nX21lbW9yeTsKK0NSRUFURSBST0xFIHJlZ3Jlc3NfbG9n X2Z1bmN0aW9uOwogCi1TRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2df bWVtb3J5JywKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5j dGlvbicsCiAgICdwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoaW50ZWdlciknLCAnRVhF Q1VURScpOyAtLSBubwogCiBHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19iYWNrZW5k X21lbW9yeV9jb250ZXh0cyhpbnRlZ2VyKQotICBUTyByZWdyZXNzX2xvZ19tZW1vcnk7CisgIFRP IHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOwogCi1TRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgn cmVncmVzc19sb2dfbWVtb3J5JywKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdy ZXNzX2xvZ19mdW5jdGlvbicsCiAgICdwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoaW50 ZWdlciknLCAnRVhFQ1VURScpOyAtLSB5ZXMKIAotU0VUIFJPTEUgcmVncmVzc19sb2dfbWVtb3J5 OworU0VUIFJPTEUgcmVncmVzc19sb2dfZnVuY3Rpb247CiBTRUxFQ1QgcGdfbG9nX2JhY2tlbmRf bWVtb3J5X2NvbnRleHRzKHBnX2JhY2tlbmRfcGlkKCkpOwogUkVTRVQgUk9MRTsKIAogUkVWT0tF IEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVn ZXIpCi0gIEZST00gcmVncmVzc19sb2dfbWVtb3J5OworICBGUk9NIHJlZ3Jlc3NfbG9nX2Z1bmN0 aW9uOworCistLSBwZ19sb2dfcXVlcnlfcGxhbigpCitTRUxFQ1QgcGdfbG9nX3F1ZXJ5X3BsYW4o cGdfYmFja2VuZF9waWQoKSk7CisKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdy ZXNzX2xvZ19mdW5jdGlvbicsCisgICdwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKScsICdFWEVD VVRFJyk7IC0tIG5vCisKK0dSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX3F1ZXJ5X3Bs YW4oaW50ZWdlcikKKyAgVE8gcmVncmVzc19sb2dfZnVuY3Rpb247CisKK1NFTEVDVCBoYXNfZnVu Y3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlvbicsCisgICdwZ19sb2dfcXVlcnlf cGxhbihpbnRlZ2VyKScsICdFWEVDVVRFJyk7IC0tIHllcworCitTRVQgUk9MRSByZWdyZXNzX2xv Z19mdW5jdGlvbjsKK1NFTEVDVCBwZ19sb2dfcXVlcnlfcGxhbihwZ19iYWNrZW5kX3BpZCgpKTsK K1JFU0VUIFJPTEU7CisKK1JFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9w bGFuKGludGVnZXIpCisgIEZST00gcmVncmVzc19sb2dfZnVuY3Rpb247CiAKLURST1AgUk9MRSBy ZWdyZXNzX2xvZ19tZW1vcnk7CitEUk9QIFJPTEUgcmVncmVzc19sb2dfZnVuY3Rpb247CiAKIC0t CiAtLSBUZXN0IHNvbWUgYnVpbHQtaW4gU1JGcwotLSAKMi4zOS4yCgo= --=_ba3d1ccf32d9af9b5d1425af066f04f9--