Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mNRxn-00076w-8R for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Sep 2021 03:39:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mNRxm-0007jJ-0F for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Sep 2021 03:39:58 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mNRxl-0007jA-C1 for pgsql-hackers@lists.postgresql.org; Tue, 07 Sep 2021 03:39:57 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mNRxd-0008Jj-Hw for pgsql-hackers@postgresql.org; Tue, 07 Sep 2021 03:39:56 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id AF89A6079E; Tue, 7 Sep 2021 12:39:46 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_0ee29c65e29ffb298e3319283623bae5" Content-Transfer-Encoding: 7bit Date: Tue, 07 Sep 2021 12:39:46 +0900 From: torikoshia To: Fujii Masao Cc: Pavel Stehule , Bharath Rupireddy , Dilip Kumar , Pgsql Hackers Subject: Re: RFC: Logging plan of the running query In-Reply-To: <0642712f-1298-960a-a3ba-e256d56040ac@oss.nttdata.com> References: <0842b5da697a03869fb50be93817e4e1@oss.nttdata.com> <1c1590d3962cea6e06621da76677b5f3@oss.nttdata.com> <64f716c44629e303b66e6c24502147cc@oss.nttdata.com> <8b53b32f-26cc-0531-4ac0-27310e0bef4b@oss.nttdata.com> <7958d03fffe3bafcfe8a505145c63928@oss.nttdata.com> <9c4d9da6-48a5-fa18-4bff-f8eb0d4c9787@oss.nttdata.com> <59e6df324b41176d319f9c30bdb1d858@oss.nttdata.com> <0642712f-1298-960a-a3ba-e256d56040ac@oss.nttdata.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <3d345c49561f31a1d8ff60ea86f88840@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 --=_0ee29c65e29ffb298e3319283623bae5 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2021-08-20 01:12, Fujii Masao wrote: > On 2021/08/11 21:14, torikoshia wrote: >> As far as I looked into, pg_log_current_plan() can call InstrEndLoop() >> through ExplainNode(). >> I added a flag to ExplainState to avoid calling InstrEndLoop() when >> ExplainNode() is called from pg_log_current_plan(). > > Thanks for updating the patch! > I tried to test the patch again and encountered two issues. Thanks for finding these issues! > > (1) > The following WITH RECURSIVE query failed with the error > "ERROR: failed to find plan for CTE sg" when I ran > pg_log_current_query_plan() against the backend executing that query. > Is this a bug? > > create table graph0( f int, t int, label text ); > insert into graph0 values (1, 2, 'arc 1 -> 2'),(1, 3, 'arc 1 -> > 3'),(2, 3, 'arc 2 -> 3'),(1, 4, 'arc 1 -> 4'),(4, 5, 'arc 4 -> 5'); > > with recursive search_graph(f, t, label, i) as ( > select *, 1||pg_sleep(1)::text from graph0 g > union distinct > select g.*,1||pg_sleep(1)::text > from graph0 g, search_graph sg > where g.f = sg.t > ) search breadth first by f, t set seq > select * from search_graph order by seq; This ERROR occurred without applying the patch and just calling EXPLAIN(VERBOSE) to CTE with SEARCH BREADTH FIRST. I'm going to make another thread to discuss it. > (2) > When I ran pg_log_current_query_plan() while "make installcheck" test > was running, I got the following assertion failure. > > TRAP: FailedAssertion("!IsPageLockHeld || (locktag->locktag_type == > LOCKTAG_RELATION_EXTEND)", File: "lock.c", Line: 894, PID: 61512) > > 0 postgres 0x000000010ec23557 > ExceptionalCondition + 231 > 1 postgres 0x000000010e9eff15 > LockAcquireExtended + 1461 > 2 postgres 0x000000010e9ed14d > LockRelationOid + 61 > 3 postgres 0x000000010e41251b > relation_open + 91 > 4 postgres 0x000000010e509679 table_open + > 25 > 5 postgres 0x000000010ebf9462 > SearchCatCacheMiss + 274 > 6 postgres 0x000000010ebf5979 > SearchCatCacheInternal + 761 > 7 postgres 0x000000010ebf566c > SearchCatCache + 60 > 8 postgres 0x000000010ec1a9e0 > SearchSysCache + 144 > 9 postgres 0x000000010ec1ae03 > SearchSysCacheExists + 51 > 10 postgres 0x000000010e58ce35 > TypeIsVisible + 437 > 11 postgres 0x000000010ea98e4c > format_type_extended + 1964 > 12 postgres 0x000000010ea9900e > format_type_with_typemod + 30 > 13 postgres 0x000000010eb78d76 > get_const_expr + 742 > 14 postgres 0x000000010eb79bc8 > get_rule_expr + 232 > 15 postgres 0x000000010eb8140f > get_func_expr + 1247 > 16 postgres 0x000000010eb79dcd > get_rule_expr + 749 > 17 postgres 0x000000010eb81688 > get_rule_expr_paren + 136 > 18 postgres 0x000000010eb7bf38 > get_rule_expr + 9304 > 19 postgres 0x000000010eb72ad5 > deparse_expression_pretty + 149 > 20 postgres 0x000000010eb73463 > deparse_expression + 83 > 21 postgres 0x000000010e68eaf1 > show_plan_tlist + 353 > 22 postgres 0x000000010e68adaf ExplainNode > + 4991 > 23 postgres 0x000000010e688b4b > ExplainPrintPlan + 283 > 24 postgres 0x000000010e68e1aa > ProcessLogCurrentPlanInterrupt + 266 > 25 postgres 0x000000010ea133bb > ProcessInterrupts + 3435 > 26 postgres 0x000000010e738c97 > vacuum_delay_point + 55 > 27 postgres 0x000000010e42bb4b > ginInsertCleanup + 1531 > 28 postgres 0x000000010e42d418 > gin_clean_pending_list + 776 > 29 postgres 0x000000010e74955a > ExecInterpExpr + 2522 > 30 postgres 0x000000010e7487e2 > ExecInterpExprStillValid + 82 > 31 postgres 0x000000010e7ae83b > ExecEvalExprSwitchContext + 59 > 32 postgres 0x000000010e7ae7be ExecProject > + 78 > 33 postgres 0x000000010e7ae4e9 ExecResult + > 345 > 34 postgres 0x000000010e764e42 > ExecProcNodeFirst + 82 > 35 postgres 0x000000010e75ccb2 ExecProcNode > + 50 > 36 postgres 0x000000010e758301 ExecutePlan > + 193 > 37 postgres 0x000000010e7581d1 > standard_ExecutorRun + 609 > 38 auto_explain.so 0x000000010f1df3a7 > explain_ExecutorRun + 247 > 39 postgres 0x000000010e757f3b ExecutorRun > + 91 > 40 postgres 0x000000010ea1cb49 > PortalRunSelect + 313 > 41 postgres 0x000000010ea1c4dd PortalRun + > 861 > 42 postgres 0x000000010ea17474 > exec_simple_query + 1540 > 43 postgres 0x000000010ea164d4 PostgresMain > + 2580 > 44 postgres 0x000000010e91d159 BackendRun + > 89 > 45 postgres 0x000000010e91c6a5 > BackendStartup + 565 > 46 postgres 0x000000010e91b3fe ServerLoop + > 638 > 47 postgres 0x000000010e918b9d > PostmasterMain + 6717 > 48 postgres 0x000000010e7efd43 main + 819 > 49 libdyld.dylib 0x00007fff6a46e3d5 start + 1 > 50 ??? 0x0000000000000003 0x0 + 3 > > LOG: server process (PID 61512) was terminated by signal 6: Abort > trap: 6 > DETAIL: Failed process was running: select > gin_clean_pending_list('t_gin_test_tbl_i_j_idx') is not null; As far as I understand, since explaining plans can acquire heavyweight lock for example to get column names, when page lock is held at the time of the interrupt, this assertion error occurs. The attached patch tries to avoid this by checking each LocalLock entry and when finding even one, giving up logging the plan. Thoughts? Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_0ee29c65e29ffb298e3319283623bae5 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v9-0001-log-running-query-plan.patch Content-Disposition: attachment; filename=v9-0001-log-running-query-plan.patch; size=24895 RnJvbSAyNjM1NmVmYjA5NGFjMjViMTFmZTY1ZGY5M2YxMWM2NGFkMTM2NzIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IE1vbiwgNiBTZXAgMjAyMSAxNDoxODo1MSArMDkwMApTdWJqZWN0OiBb UEFUQ0ggdjhdIEFkZCBmdW5jdGlvbiB0byBsb2cgdGhlIHVudHJ1bmNhdGVkIHF1ZXJ5IHN0cmlu ZyBhbmQgaXRzCiBwbGFuIGZvciB0aGUgcXVlcnkgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIGJh Y2tlbmQgd2l0aCB0aGUgc3BlY2lmaWVkCiBwcm9jZXNzIElELgoKQ3VycmVudGx5LCB3ZSBoYXZl IHRvIHdhaXQgZm9yIHRoZSBxdWVyeSBleGVjdXRpb24gdG8gZmluaXNoCmJlZm9yZSB3ZSBjaGVj ayBpdHMgcGxhbi4gVGhpcyBpcyBub3Qgc28gY29udmVuaWVudCB3aGVuCmludmVzdGlnYXRpbmcg bG9uZy1ydW5uaW5nIHF1ZXJpZXMgb24gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMKd2hlcmUgd2Ug Y2Fubm90IHVzZSBkZWJ1Z2dlcnMuClRvIGltcHJvdmUgdGhpcyBzaXR1YXRpb24sIHRoaXMgcGF0 Y2ggYWRkcwpwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuKCkgZnVuY3Rpb24gdGhhdCByZXF1ZXN0 cyB0byBsb2cgdGhlCnBsYW4gb2YgdGhlIHNwZWNpZmllZCBiYWNrZW5kIHByb2Nlc3MuCgpPbmx5 IHN1cGVydXNlcnMgYXJlIGFsbG93ZWQgdG8gcmVxdWVzdCB0byBsb2cgdGhlIHBsYW5zIGJlY2F1 c2UKYWxsb3dpbmcgYW55IHVzZXJzIHRvIGlzc3VlIHRoaXMgcmVxdWVzdCBhdCBhbiB1bmJvdW5k ZWQgcmF0ZQp3b3VsZCBjYXVzZSBsb3RzIG9mIGxvZyBtZXNzYWdlcyBhbmQgd2hpY2ggY2FuIGxl YWQgdG8gZGVuaWFsCm9mIHNlcnZpY2UuCgpPbiByZWNlaXB0IG9mIHRoZSByZXF1ZXN0LCBhdCB0 aGUgbmV4dCBDSEVDS19GT1JfSU5URVJSVVBUUygpLAp0aGUgdGFyZ2V0IGJhY2tlbmQgbG9ncyBp dHMgcGxhbiBhdCBMT0dfU0VSVkVSX09OTFkgbGV2ZWwsIHNvCnRoYXQgdGhlc2UgcGxhbnMgd2ls bCBhcHBlYXIgaW4gdGhlIHNlcnZlciBsb2cgYnV0IG5vdCBiZSBzZW50CnRvIHRoZSBjbGllbnQu CgpTaW5jZSBzb21lIGNvZGVzLCB0ZXN0cyBhbmQgY29tbWVudHMgb2YKcGdfbG9nX2N1cnJlbnRf cXVlcnlfcGxhbigpIGFyZSB0aGUgc2FtZSB3aXRoCnBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250 ZXh0cygpLCB0aGlzIHBhdGNoIGFsc28gcmVmYWN0b3JzCnRoZW0gdG8gbWFrZSB0aGVtIGNvbW1v bi4KClJldmlld2VkLWJ5OiBCaGFyYXRoIFJ1cGlyZWRkeSwgRnVqaWkgTWFzYW8sIERpbGlwIEt1 bWFyLCBNYXNhaGlybyBJa2VkYQoKLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAg ICAgICAgICAgICAgICB8ICA0NiArKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jICAgICAgICAgICAgICAgfCAxMTcgKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgfCAgMTAgKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3NpZ25hbGZ1bmNzLmMgICAgICAgIHwgIDYxICsrKysrKysrKysKIHNyYy9iYWNrZW5k L3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAgICAgIHwgICA3ICsrCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvbWN4dGZ1bmNzLmMgICAgICAgICAgICB8ICA1NCArLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL2Nv bW1hbmRzL2V4cGxhaW4uaCAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL21pc2Nh ZG1pbi5oICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvY3NpZ25hbC5oICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc2ln bmFsZnVuY3MuaCAgICAgICAgICAgIHwgIDIyICsrKysKIHNyYy9pbmNsdWRlL3Rjb3AvcHF1ZXJ5 LmggICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv bWlzY19mdW5jdGlvbnMub3V0IHwgIDE2ICsrLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzY19m dW5jdGlvbnMuc3FsICAgICAgfCAgMTIgKy0KIDE2IGZpbGVzIGNoYW5nZWQsIDMwMyBpbnNlcnRp b25zKCspLCA1OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9z dG9yYWdlL3NpZ25hbGZ1bmNzLmgKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21s IGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCA3ODgxMmIyZGJlLi4xM2I0NGI0MmNiIDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5j LnNnbWwKQEAgLTI1MjgxLDYgKzI1MjgxLDI3IEBAIFNFTEVDVCBjb2xsYXRpb24gZm9yICgnZm9v JyBDT0xMQVRFICJkZV9ERSIpOwogICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICAgPC9yb3c+ CiAKKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxw YXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAg IDxwcmltYXJ5PnBnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW48L3ByaW1hcnk+CisgICAgICAgIDwv aW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfbG9nX2N1cnJlbnRfcXVlcnlfcGxhbjwv ZnVuY3Rpb24+ICggPHBhcmFtZXRlcj5waWQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwvdHlw ZT4gKQorICAgICAgICA8cmV0dXJudmFsdWU+Ym9vbGVhbjwvcmV0dXJudmFsdWU+CisgICAgICAg PC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXF1ZXN0cyB0byBsb2cgdGhlIHBsYW4g b2YgdGhlIHF1ZXJ5IGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZQorICAgICAgICBiYWNrZW5kIHdp dGggc3BlY2lmaWVkIHByb2Nlc3MgSUQgYWxvbmcgd2l0aCB0aGUgdW50cnVuY2F0ZWQKKyAgICAg ICAgcXVlcnkgc3RyaW5nLgorICAgICAgICBUaGV5IHdpbGwgYmUgbG9nZ2VkIGF0IDxsaXRlcmFs PkxPRzwvbGl0ZXJhbD4gbWVzc2FnZSBsZXZlbCBhbmQKKyAgICAgICAgd2lsbCBhcHBlYXIgaW4g dGhlIHNlcnZlciBsb2cgYmFzZWQgb24gdGhlIGxvZworICAgICAgICBjb25maWd1cmF0aW9uIHNl dCAoU2VlIDx4cmVmIGxpbmtlbmQ9InJ1bnRpbWUtY29uZmlnLWxvZ2dpbmciLz4KKyAgICAgICAg Zm9yIG1vcmUgaW5mb3JtYXRpb24pLCBidXQgd2lsbCBub3QgYmUgc2VudCB0byB0aGUgY2xpZW50 CisgICAgICAgIHJlZ2FyZGxlc3Mgb2YgPHhyZWYgbGlua2VuZD0iZ3VjLWNsaWVudC1taW4tbWVz c2FnZXMiLz4uCisgICAgICAgIE9ubHkgc3VwZXJ1c2VycyBjYW4gcmVxdWVzdCB0byBsb2cgcGxh biBvZiB0aGUgcnVubmluZyBxdWVyeS4KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwv cm93PgorCiAgICAgICA8cm93PgogICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5 Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CiAgICAgICAgIDxpbmRleHRlcm0+CkBAIC0y NTM5NCw2ICsyNTQxNSwzMSBAQCBMT0c6ICBHcmFuZCB0b3RhbDogMTY1MTkyMCBieXRlcyBpbiAy MDEgYmxvY2tzOyA2MjIzNjAgZnJlZSAoODggY2h1bmtzKTsgMTAyOTU2MAogICAgIGJlY2F1c2Ug aXQgbWF5IGdlbmVyYXRlIGEgbGFyZ2UgbnVtYmVyIG9mIGxvZyBtZXNzYWdlcy4KICAgIDwvcGFy YT4KIAorICAgPHBhcmE+CisgICAgPGZ1bmN0aW9uPnBnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW48 L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZAorICAgIHRvIGxvZyB0aGUgcGxhbiBvZiBhIGJhY2tlbmQg cHJvY2Vzcy4gRm9yIGV4YW1wbGU6Cis8cHJvZ3JhbWxpc3Rpbmc+Citwb3N0Z3Jlcz0jIFNFTEVD VCBwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuKDIwMTExNik7CisgcGdfbG9nX2N1cnJlbnRfcXVl cnlfcGxhbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorPC9wcm9n cmFtbGlzdGluZz4KK1RoZSBmb3JtYXQgb2YgdGhlIHF1ZXJ5IHBsYW4gaXMgdGhlIHNhbWUgYXMg d2hlbiA8bGl0ZXJhbD5WRVJCT1NFPC9saXRlcmFsPiwKKzxsaXRlcmFsPkNPU1RTPC9saXRlcmFs PiwgPGxpdGVyYWw+U0VUVElOR1M8L2xpdGVyYWw+IGFuZAorPGxpdGVyYWw+Rk9STUFUIFRFWFQ8 L2xpdGVyYWw+IGFyZSB1c2VkIGluIHRoZSA8Y29tbWFuZD5FWFBMQUlOPC9jb21tYW5kPgorY29t bWFuZC4gRm9yIGV4YW1wbGU6Cis8c2NyZWVuPgorTE9HOiAgcGxhbiBvZiB0aGUgcXVlcnkgcnVu bmluZyBvbiBiYWNrZW5kIHdpdGggUElEIDE3NzkzIGlzOgorICAgICAgICBRdWVyeSBUZXh0OiBT RUxFQ1QgKiBGUk9NIHBnYmVuY2hfYWNjb3VudHM7CisgICAgICAgIFNlcSBTY2FuIG9uIHB1Ymxp Yy5wZ2JlbmNoX2FjY291bnRzICAoY29zdD0wLjAwLi41Mjc4Ny4wMCByb3dzPTIwMDAwMDAgd2lk dGg9OTcpCisgICAgICAgICAgT3V0cHV0OiBhaWQsIGJpZCwgYWJhbGFuY2UsIGZpbGxlcgorICAg ICAgICBTZXR0aW5nczogd29ya19tZW0gPSAnMU1CJworPC9zY3JlZW4+CisgICAgTm90ZSB0aGF0 IG5lc3RlZCBzdGF0ZW1lbnRzIChzdGF0ZW1lbnRzIGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9u KSBhcmUgbm90CisgICAgY29uc2lkZXJlZCBmb3IgbG9nZ2luZy4gT25seSB0aGUgZGVlcGVzdCBu ZXN0aW5nIHF1ZXJ5J3MgcGxhbiBpcyBsb2dnZWQuCisgICA8L3BhcmE+CisKICAgPC9zZWN0Mj4K IAogICA8c2VjdDIgaWQ9ImZ1bmN0aW9ucy1hZG1pbi1iYWNrdXAiPgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jCmluZGV4IDEwNjQ0ZGZhYzQuLmY1MjgzMDFjYzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMK QEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSGFzaC5oIgogI2luY2x1 ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgorI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIKICNpbmNsdWRlICJub2Rl cy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKQEAgLTI4LDYgKzI5 LDkgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9y ZXdyaXRlSGFuZGxlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NpZ25hbGZ1bmNzLmgiCisj aW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfdGFibGVzLmgiCkBA IC00MCw3ICs0NCw2IEBACiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKICNpbmNsdWRlICJ1 dGlscy94bWwuaCIKIAotCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIEV4 cGxhaW5PbmVRdWVyeSgpICovCiBFeHBsYWluT25lUXVlcnlfaG9va190eXBlIEV4cGxhaW5PbmVR dWVyeV9ob29rID0gTlVMTDsKIApAQCAtMTU5NCw2ICsxNTk3LDkgQEAgRXhwbGFpbk5vZGUoUGxh blN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkvKgogCSAqIFdlIGhhdmUgdG8g Zm9yY2libHkgY2xlYW4gdXAgdGhlIGluc3RydW1lbnRhdGlvbiBzdGF0ZSBiZWNhdXNlIHdlCiAJ ICogaGF2ZW4ndCBkb25lIEV4ZWN1dG9yRW5kIHlldC4gIFRoaXMgaXMgcHJldHR5IGdyb3R0eSAu Li4KKwkgKiBUaGlzIGNsZWFudXAgc2hvdWxkIG5vdCBiZSBkb25lIHdoZW4gdGhlIHF1ZXJ5IGhh cyBhbHJlYWR5IGJlZW4KKwkgKiBleGVjdXRlZCwgYXMgdGhlIHRhcmdldCBxdWVyeSBtYXkgdXNl IGluc3RydW1lbnRhdGlvbiBhbmQgY2xlYW4KKwkgKiBpdHNlbGYgdXAuCiAJICoKIAkgKiBOb3Rl OiBjb250cmliL2F1dG9fZXhwbGFpbiBjb3VsZCBjYXVzZSBpbnN0cnVtZW50YXRpb24gdG8gYmUg c2V0IHVwCiAJICogZXZlbiB0aG91Z2ggd2UgZGlkbid0IGFzayBmb3IgaXQgaGVyZS4gIEJlIGNh cmVmdWwgbm90IHRvIHByaW50IGFueQpAQCAtMTYwMSw3ICsxNjA3LDcgQEAgRXhwbGFpbk5vZGUo UGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkgKiBJbnN0ckVuZExvb3Ag Y2FsbCBhbnl3YXksIGlmIHBvc3NpYmxlLCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBjYXNlcwog CSAqIGF1dG9fZXhwbGFpbiBoYXMgdG8gY29udGVuZCB3aXRoLgogCSAqLwotCWlmIChwbGFuc3Rh dGUtPmluc3RydW1lbnQpCisJaWYgKHBsYW5zdGF0ZS0+aW5zdHJ1bWVudCAmJiAhZXMtPnJ1bm5p bmcpCiAJCUluc3RyRW5kTG9vcChwbGFuc3RhdGUtPmluc3RydW1lbnQpOwogCiAJaWYgKGVzLT5h bmFseXplICYmCkBAIC00OTIyLDMgKzQ5MjgsMTEwIEBAIGVzY2FwZV95YW1sKFN0cmluZ0luZm8g YnVmLCBjb25zdCBjaGFyICpzdHIpCiB7CiAJZXNjYXBlX2pzb24oYnVmLCBzdHIpOwogfQorCisv KgorICogSGFuZGxlTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQKKyAqCQlIYW5kbGUgcmVjZWlwdCBv ZiBhbiBpbnRlcnJ1cHQgaW5kaWNhdGluZyBsb2dnaW5nIHRoZSBwbGFuIG9mCisgKgkJdGhlIGN1 cnJlbnRseSBydW5uaW5nIHF1ZXJ5LgorICoKKyAqIEFsbCB0aGUgYWN0dWFsIHdvcmsgaXMgZGVm ZXJyZWQgdG8gUHJvY2Vzc0xvZ0N1cnJlbnRQbGFuSW50ZXJydXB0KCksCisgKiBiZWNhdXNlIHdl IGNhbm5vdCBzYWZlbHkgZW1pdCBhIGxvZyBtZXNzYWdlIGluc2lkZSB0aGUgc2lnbmFsIGhhbmRs ZXIuCisgKi8KK3ZvaWQKK0hhbmRsZUxvZ0N1cnJlbnRQbGFuSW50ZXJydXB0KHZvaWQpCit7CisJ SW50ZXJydXB0UGVuZGluZyA9IHRydWU7CisJTG9nQ3VycmVudFBsYW5QZW5kaW5nID0gdHJ1ZTsK KwkvKiBsYXRjaCB3aWxsIGJlIHNldCBieSBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlciAqLwor fQorCisvKgorICogUHJvY2Vzc0xvZ0N1cnJlbnRQbGFuSW50ZXJydXB0CisgKiAJCVBlcmZvcm0g bG9nZ2luZyB0aGUgcGxhbiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcXVlcnkgb24gdGhpcwor ICogCQliYWNrZW5kIHByb2Nlc3MuCisgKgorICogQW55IGJhY2tlbmQgdGhhdCBwYXJ0aWNpcGF0 ZXMgaW4gUHJvY1NpZ25hbCBzaWduYWxpbmcgbXVzdCBhcnJhbmdlIHRvIGNhbGwKKyAqIHRoaXMg ZnVuY3Rpb24gaWYgd2Ugc2VlIExvZ0N1cnJlbnRQbGFuUGVuZGluZyBzZXQuCisgKiBJdCBpcyBj YWxsZWQgZnJvbSBDSEVDS19GT1JfSU5URVJSVVBUUygpLCB3aGljaCBpcyBlbm91Z2ggYmVjYXVz ZSB0aGUgdGFyZ2V0CisgKiBwcm9jZXNzIGZvciBsb2dnaW5nIHBsYW4gaXMgYSBiYWNrZW5kLgor ICovCit2b2lkCitQcm9jZXNzTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQodm9pZCkKK3sKKwlFeHBs YWluU3RhdGUgKmVzOworCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJTE9DQUxMT0NLICAqbG9j YWxsb2NrOworCUxvZ0N1cnJlbnRQbGFuUGVuZGluZyA9IGZhbHNlOworCisJaWYgKEFjdGl2ZVF1 ZXJ5RGVzYyA9PSBOVUxMKQorCXsKKwkJZXJlcG9ydChMT0dfU0VSVkVSX09OTFksCisJCQkJKGVy cm1zZygiYmFja2VuZCB3aXRoIFBJRCAlZCBpcyBub3QgcnVubmluZyBhIHF1ZXJ5IiwKKwkJCQkJ TXlQcm9jUGlkKSkpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBFbnN1cmUgbm8gcGFnZSBs b2NrIGlzIGhlbGQgb24gdGhpcyBwcm9jZXNzLgorCSAqCisJICogSWYgcGFnZSBsb2NrIGlzIGhl bGQgYXQgdGhlIHRpbWUgb2YgdGhlIGludGVycnVwdCwgd2UgY2FuJ3QgYWNxdWlyZSBhbnkKKwkg KiBvdGhlciBoZWF2eXdlaWdodCBsb2NrLCB3aGljaCBtaWdodCBiZSBuZWNlc3NhcnkgZm9yIGV4 cGxhaW5pbmcgdGhlIHBsYW4KKwkgKiB3aGVuIHJldHJpZXZpbmcgY29sdW1uIG5hbWVzLgorCSAq CisJICogVGhpcyBtYXkgYmUgb3ZlcmtpbGwsIGJ1dCBzaW5jZSBwYWdlIGxvY2tzIGFyZSBoZWxk IGZvciBhIHNob3J0IGR1cmF0aW9uCisJICogd2UgY2hlY2sgYWxsIHRoZSBMb2NhbExvY2sgZW50 cmllcyBhbmQgd2hlbiBmaW5kaW5nIGV2ZW4gb25lLCBnaXZlIHVwCisJICogbG9nZ2luZyB0aGUg cGxhbi4KKwkgKi8KKwloYXNoX3NlcV9pbml0KCZzdGF0dXMsIEdldExvY2tNZXRob2RMb2NhbEhh c2goKSk7CisJd2hpbGUgKChsb2NhbGxvY2sgPSAoTE9DQUxMT0NLICopIGhhc2hfc2VxX3NlYXJj aCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJCWlmIChMT0NBTExPQ0tfTE9DS1RBRygqbG9jYWxs b2NrKSA9PSBMT0NLVEFHX1BBR0UpCisJCXsKKwkJCWVyZXBvcnQoTE9HX1NFUlZFUl9PTkxZLAor CQkJCShlcnJtc2coImJhY2tlbmQgd2l0aCBQSUQgJWQgaXMgbm93IGhvbGRpbmcgYSBwYWdlIGxv Y2suIFRyeSBhZ2FpbiIsCisJCQkJCU15UHJvY1BpZCkpKTsKKwkJCWhhc2hfc2VxX3Rlcm0oJnN0 YXR1cyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwllcyA9IE5ld0V4cGxhaW5TdGF0ZSgpOwor CisJZXMtPmZvcm1hdCA9IEVYUExBSU5fRk9STUFUX1RFWFQ7CisJZXMtPnNldHRpbmdzID0gdHJ1 ZTsKKwllcy0+dmVyYm9zZSA9IHRydWU7CisJZXMtPnJ1bm5pbmcgPSB0cnVlOworCisJRXhwbGFp bkJlZ2luT3V0cHV0KGVzKTsKKwlFeHBsYWluUXVlcnlUZXh0KGVzLCBBY3RpdmVRdWVyeURlc2Mp OworCUV4cGxhaW5QcmludFBsYW4oZXMsIEFjdGl2ZVF1ZXJ5RGVzYyk7CisJaWYgKGVzLT5jb3N0 cykKKwkJRXhwbGFpblByaW50SklUU3VtbWFyeShlcywgQWN0aXZlUXVlcnlEZXNjKTsKKwlFeHBs YWluRW5kT3V0cHV0KGVzKTsKKworCS8qIFJlbW92ZSBsYXN0IGxpbmUgYnJlYWsgKi8KKwlpZiAo ZXMtPnN0ci0+bGVuID4gMCAmJiBlcy0+c3RyLT5kYXRhW2VzLT5zdHItPmxlbiAtIDFdID09ICdc bicpCisJCWVzLT5zdHItPmRhdGFbLS1lcy0+c3RyLT5sZW5dID0gJ1wwJzsKKworCWVyZXBvcnQo TE9HX1NFUlZFUl9PTkxZLAorCQkJKGVycm1zZygicGxhbiBvZiB0aGUgcXVlcnkgcnVubmluZyBv biBiYWNrZW5kIHdpdGggUElEICVkIGlzOlxuJXMiLAorCQkJCQlNeVByb2NQaWQsIGVzLT5zdHIt PmRhdGEpLAorCQkJIGVycmhpZGVzdG10KHRydWUpLAorCQkJIGVycmhpZGVjb250ZXh0KHRydWUp KSk7Cit9CisKKy8qCisgKiBwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuCisgKgkJU2lnbmFsIGEg YmFja2VuZCBwcm9jZXNzIHRvIGxvZyB0aGUgcXVlcnkgcGxhbiBvZiB0aGUgcnVubmluZyBxdWVy eS4KKyAqLworRGF0dW0KK3BnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW4oUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlwaWRfdAkJcGlkOworCWJvb2wJCXJlc3VsdDsKKworCXBpZCA9IFBHX0dFVEFSR19J TlQzMigwKTsKKwlyZXN1bHQgPSBTZW5kUHJvY1NpZ25hbEZvckxvZ0luZm8ocGlkLCBQUk9DU0lH X0xPR19DVVJSRU5UX1BMQU4pOworCisJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjTWFpbi5jCmluZGV4IGIzY2U0YmFlNTMuLmM3NGFhMWQwNGUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYwpAQCAtNzYsNiArNzYsOSBAQCBFeGVjdXRvckVuZF9ob29rX3R5cGUgRXhl Y3V0b3JFbmRfaG9vayA9IE5VTEw7CiAvKiBIb29rIGZvciBwbHVnaW4gdG8gZ2V0IGNvbnRyb2wg aW4gRXhlY0NoZWNrUlRQZXJtcygpICovCiBFeGVjdXRvckNoZWNrUGVybXNfaG9va190eXBlIEV4 ZWN1dG9yQ2hlY2tQZXJtc19ob29rID0gTlVMTDsKIAorLyogQ3VycmVudGx5IGV4ZWN1dGluZyBx dWVyeSdzIFF1ZXJ5RGVzYyAqLworUXVlcnlEZXNjICpBY3RpdmVRdWVyeURlc2MgPSBOVUxMOwor CiAvKiBkZWNscyBmb3IgbG9jYWwgcm91dGluZXMgb25seSB1c2VkIHdpdGhpbiB0aGlzIG1vZHVs ZSAqLwogc3RhdGljIHZvaWQgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxh Z3MpOwogc3RhdGljIHZvaWQgQ2hlY2tWYWxpZFJvd01hcmtSZWwoUmVsYXRpb24gcmVsLCBSb3dN YXJrVHlwZSBtYXJrVHlwZSk7CkBAIC0yOTksMTAgKzMwMiwxNyBAQCBFeGVjdXRvclJ1bihRdWVy eURlc2MgKnF1ZXJ5RGVzYywKIAkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCB1aW50NjQgY291 bnQsCiAJCQlib29sIGV4ZWN1dGVfb25jZSkKIHsKKwlRdWVyeURlc2MgKnNhdmVfQWN0aXZlUXVl cnlEZXNjOworCisJc2F2ZV9BY3RpdmVRdWVyeURlc2MgPSBBY3RpdmVRdWVyeURlc2M7CisJQWN0 aXZlUXVlcnlEZXNjID0gcXVlcnlEZXNjOworCiAJaWYgKEV4ZWN1dG9yUnVuX2hvb2spCiAJCSgq RXhlY3V0b3JSdW5faG9vaykgKHF1ZXJ5RGVzYywgZGlyZWN0aW9uLCBjb3VudCwgZXhlY3V0ZV9v bmNlKTsKIAllbHNlCiAJCXN0YW5kYXJkX0V4ZWN1dG9yUnVuKHF1ZXJ5RGVzYywgZGlyZWN0aW9u LCBjb3VudCwgZXhlY3V0ZV9vbmNlKTsKKworCUFjdGl2ZVF1ZXJ5RGVzYyA9IHNhdmVfQWN0aXZl UXVlcnlEZXNjOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5k ZXggZGVmYjc1YWEyNi4uOWI5NjUzNTQ0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWdu YWwuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgogI2lu Y2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgor I2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW4uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxzZW5kZXIuaCIKQEAg LTY2MSw2ICs2NjIsOSBAQCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcihTSUdOQUxfQVJHUykK IAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfTE9HX01FTU9SWV9DT05URVhUKSkKIAkJSGFu ZGxlTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogCisJaWYgKENoZWNrUHJvY1NpZ25hbChQ Uk9DU0lHX0xPR19DVVJSRU5UX1BMQU4pKQorCQlIYW5kbGVMb2dDdXJyZW50UGxhbkludGVycnVw dCgpOworCiAJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RB VEFCQVNFKSkKIAkJUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChQUk9DU0lHX1JFQ09WRVJZX0NP TkZMSUNUX0RBVEFCQVNFKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv c2lnbmFsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpZ25hbGZ1bmNzLmMKaW5k ZXggZGU2OWQ2MGU3OS4uMWFhZDEyMDc5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvc2lnbmFsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaWduYWxm dW5jcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5Lmgi CisjaW5jbHVkZSAic3RvcmFnZS9zaWduYWxmdW5jcy5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5o IgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAKQEAgLTI5OCwzICsyOTksNjMgQEAgcGdf cm90YXRlX2xvZ2ZpbGVfdjIoUEdfRlVOQ1RJT05fQVJHUykKIAlTZW5kUG9zdG1hc3RlclNpZ25h bChQTVNJR05BTF9ST1RBVEVfTE9HRklMRSk7CiAJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7CiB9CisK Ky8qCisgKiBTaWduYWwgYSBiYWNrZW5kIHByb2Nlc3MgdG8gbG9nIGl0cyBpbmZvcm1hdGlvbi4K KyAqCisgKiBPbmx5IHN1cGVydXNlcnMgYXJlIGFsbG93ZWQgdG8gc2lnbmFsIHRvIGxvZyBpbmZv cm1hdGlvbiBiZWNhdXNlCisgKiBhbGxvd2luZyBhbnkgdXNlcnMgdG8gaXNzdWUgdGhpcyByZXF1 ZXN0IGF0IGFuIHVuYm91bmRlZCByYXRlCisgKiB3b3VsZCBjYXVzZSBsb3RzIG9mIGxvZyBtZXNz YWdlcyBhbmQgd2hpY2ggY2FuIGxlYWQgdG8gZGVuaWFsIG9mCisgKiBzZXJ2aWNlLgorICoKKyAq IE9uIHJlY2VpcHQgb2YgdGhpcyBzaWduYWwsIGEgYmFja2VuZCBzZXRzIHRoZSBmbGFnIGluIHRo ZSBzaWduYWwKKyAqIGhhbmRsZXIsIHdoaWNoIGNhdXNlcyB0aGUgbmV4dCBDSEVDS19GT1JfSU5U RVJSVVBUUygpIHRvIGxvZyB0aGUKKyAqIGluZm9ybWF0aW9uLgorICovCitib29sCitTZW5kUHJv Y1NpZ25hbEZvckxvZ0luZm8ocGlkX3QgcGlkLCBQcm9jU2lnbmFsUmVhc29uIHJlYXNvbikKK3sK KwlQR1BST0MJICAgKnByb2M7CisKKwlBc3NlcnQocmVhc29uID09IFBST0NTSUdfTE9HX01FTU9S WV9DT05URVhUIHx8CisJCSAgIHJlYXNvbiA9PSBQUk9DU0lHX0xPR19DVVJSRU5UX1BMQU4pOwor CisJLyogT25seSBhbGxvdyBzdXBlcnVzZXJzIHRvIGxvZyBpbmZvcm1hdGlvbi4gKi8KKwlpZiAo IXN1cGVydXNlcigpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5T VUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJIGVycm1zZygibXVzdCBiZSBhIHN1cGVydXNlciB0 byBsb2cgaW5mb3JtYXRpb24gYWJvdXQgc3BlY2lmaWVkIHByb2Nlc3MiKSkpOworCisJcHJvYyA9 IEJhY2tlbmRQaWRHZXRQcm9jKHBpZCk7CisKKwkvKgorCSAqIEJhY2tlbmRQaWRHZXRQcm9jIHJl dHVybnMgTlVMTCBpZiB0aGUgcGlkIGlzbid0IHZhbGlkOyBidXQgYnkgdGhlIHRpbWUKKwkgKiB3 ZSByZWFjaCBraWxsKCksIGEgcHJvY2VzcyBmb3Igd2hpY2ggd2UgZ2V0IGEgdmFsaWQgcHJvYyBo ZXJlIG1pZ2h0CisJICogaGF2ZSB0ZXJtaW5hdGVkIG9uIGl0cyBvd24uICBUaGVyZSdzIG5vIHdh eSB0byBhY3F1aXJlIGEgbG9jayBvbiBhbgorCSAqIGFyYml0cmFyeSBwcm9jZXNzIHRvIHByZXZl bnQgdGhhdC4gQnV0IHNpbmNlIHRoaXMgbWVjaGFuaXNtIGlzIHVzdWFsbHkKKwkgKiB1c2VkIHRv IGJlbG93IHB1cnBvc2VzLCBpdCBtaWdodCBlbmQgaXRzIG93biBmaXJzdCBhbmQgdGhlIGluZm9y bWF0aW9uCisJICogaXMgbm90IGxvZ2dlZCBpcyBub3QgYSBwcm9ibGVtLgorCSAqIC0gZGVidWcg YSBiYWNrZW5kIHJ1bm5pbmcgYW5kIGNvbnN1bWluZyBsb3RzIG9mIG1lbW9yeQorCSAqIC0gbG9v ayBpbnRvIHRoZSBwbGFuIG9mIHRoZSBsb25nIHJ1bm5pbmcgcXVlcnkKKwkgKi8KKwlpZiAocHJv YyA9PSBOVUxMKQorCXsKKwkJLyoKKwkJICogVGhpcyBpcyBqdXN0IGEgd2FybmluZyBzbyBhIGxv b3AtdGhyb3VnaC1yZXN1bHRzZXQgd2lsbCBub3QgYWJvcnQKKwkJICogaWYgb25lIGJhY2tlbmQg dGVybWluYXRlZCBvbiBpdHMgb3duIGR1cmluZyB0aGUgcnVuLgorCQkgKi8KKwkJZXJlcG9ydChX QVJOSU5HLAorCQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQb3N0Z3JlU1FMIHNlcnZlciBw cm9jZXNzIiwgcGlkKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKFNlbmRQcm9jU2ln bmFsKHBpZCwgcmVhc29uLCBwcm9jLT5iYWNrZW5kSWQpIDwgMCkKKwl7CisJCS8qIEFnYWluLCBq dXN0IGEgd2FybmluZyB0byBhbGxvdyBsb29wcyAqLworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJ KGVycm1zZygiY291bGQgbm90IHNlbmQgc2lnbmFsIHRvIHByb2Nlc3MgJWQ6ICVtIiwgcGlkKSkp OworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK aW5kZXggNThiNTk2MGUyNy4uOGI4ODA4ZGI4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtNDEsNiAr NDEsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190 eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9l eHBsYWluLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL3NwaS5oIgogI2luY2x1ZGUgImppdC9qaXQuaCIKQEAgLTMzNjYsNiArMzM2Nyw5IEBAIFBy b2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCiAKIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJ CVByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CisKKwlpZiAoTG9nQ3VycmVudFBs YW5QZW5kaW5nKQorCQlQcm9jZXNzTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQoKTsKIH0KIAogCkBA IC00Mjc4LDYgKzQyODIsOSBAQCBQb3N0Z3Jlc01haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwK IAkJLyogV2UgZG9uJ3QgaGF2ZSBhIHRyYW5zYWN0aW9uIGNvbW1hbmQgb3BlbiBhbnltb3JlICov CiAJCXhhY3Rfc3RhcnRlZCA9IGZhbHNlOwogCisJCS8qIFdlIGhhdmUgbm8gcnVubmluZyBxdWVy eSAqLworCQlBY3RpdmVRdWVyeURlc2MgPSBOVUxMOworCiAJCS8qCiAJCSAqIElmIGFuIGVycm9y IG9jY3VycmVkIHdoaWxlIHdlIHdlcmUgcmVhZGluZyBhIG1lc3NhZ2UgZnJvbSB0aGUKIAkJICog Y2xpZW50LCB3ZSBoYXZlIHBvdGVudGlhbGx5IGxvc3QgdHJhY2sgb2Ygd2hlcmUgdGhlIHByZXZp b3VzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKaW5kZXggMGQ1MjYxM2JjMy4uMzA0ZjM2YmRh MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwpAQCAtMTgsOCArMTgsOCBAQAogI2luY2x1 ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJtYi9wZ193 Y2hhci5oIgotI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJv Y2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaWduYWxmdW5jcy5oIgogI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCiAKIC8qIC0tLS0tLS0tLS0KQEAgLTE2MSw1NyArMTYxLDE1IEBAIHBn X2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhQR19GVU5DVElPTl9BUkdTKQogLyoKICAqIHBn X2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cwogICoJCVNpZ25hbCBhIGJhY2tlbmQgcHJvY2Vz cyB0byBsb2cgaXRzIG1lbW9yeSBjb250ZXh0cy4KLSAqCi0gKiBPbmx5IHN1cGVydXNlcnMgYXJl IGFsbG93ZWQgdG8gc2lnbmFsIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzCi0gKiBiZWNhdXNl IGFsbG93aW5nIGFueSB1c2VycyB0byBpc3N1ZSB0aGlzIHJlcXVlc3QgYXQgYW4gdW5ib3VuZGVk Ci0gKiByYXRlIHdvdWxkIGNhdXNlIGxvdHMgb2YgbG9nIG1lc3NhZ2VzIGFuZCB3aGljaCBjYW4g bGVhZCB0bwotICogZGVuaWFsIG9mIHNlcnZpY2UuCi0gKgotICogT24gcmVjZWlwdCBvZiB0aGlz IHNpZ25hbCwgYSBiYWNrZW5kIHNldHMgdGhlIGZsYWcgaW4gdGhlIHNpZ25hbAotICogaGFuZGxl ciwgd2hpY2ggY2F1c2VzIHRoZSBuZXh0IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgdG8gbG9nIHRo ZQotICogbWVtb3J5IGNvbnRleHRzLgogICovCiBEYXR1bQogcGdfbG9nX2JhY2tlbmRfbWVtb3J5 X2NvbnRleHRzKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JaW50CQkJcGlkID0gUEdfR0VUQVJHX0lO VDMyKDApOwotCVBHUFJPQwkgICAqcHJvYzsKLQotCS8qIE9ubHkgYWxsb3cgc3VwZXJ1c2VycyB0 byBsb2cgbWVtb3J5IGNvbnRleHRzLiAqLwotCWlmICghc3VwZXJ1c2VyKCkpCi0JCWVyZXBvcnQo RVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKLQkJ CQkgZXJybXNnKCJtdXN0IGJlIGEgc3VwZXJ1c2VyIHRvIGxvZyBtZW1vcnkgY29udGV4dHMiKSkp OwotCi0JcHJvYyA9IEJhY2tlbmRQaWRHZXRQcm9jKHBpZCk7Ci0KLQkvKgotCSAqIEJhY2tlbmRQ aWRHZXRQcm9jIHJldHVybnMgTlVMTCBpZiB0aGUgcGlkIGlzbid0IHZhbGlkOyBidXQgYnkgdGhl IHRpbWUKLQkgKiB3ZSByZWFjaCBraWxsKCksIGEgcHJvY2VzcyBmb3Igd2hpY2ggd2UgZ2V0IGEg dmFsaWQgcHJvYyBoZXJlIG1pZ2h0Ci0JICogaGF2ZSB0ZXJtaW5hdGVkIG9uIGl0cyBvd24uICBU aGVyZSdzIG5vIHdheSB0byBhY3F1aXJlIGEgbG9jayBvbiBhbgotCSAqIGFyYml0cmFyeSBwcm9j ZXNzIHRvIHByZXZlbnQgdGhhdC4gQnV0IHNpbmNlIHRoaXMgbWVjaGFuaXNtIGlzIHVzdWFsbHkK LQkgKiB1c2VkIHRvIGRlYnVnIGEgYmFja2VuZCBydW5uaW5nIGFuZCBjb25zdW1pbmcgbG90cyBv ZiBtZW1vcnksIHRoYXQgaXQKLQkgKiBtaWdodCBlbmQgb24gaXRzIG93biBmaXJzdCBhbmQgaXRz IG1lbW9yeSBjb250ZXh0cyBhcmUgbm90IGxvZ2dlZCBpcwotCSAqIG5vdCBhIHByb2JsZW0uCi0J ICovCi0JaWYgKHByb2MgPT0gTlVMTCkKLQl7Ci0JCS8qCi0JCSAqIFRoaXMgaXMganVzdCBhIHdh cm5pbmcgc28gYSBsb29wLXRocm91Z2gtcmVzdWx0c2V0IHdpbGwgbm90IGFib3J0Ci0JCSAqIGlm IG9uZSBiYWNrZW5kIHRlcm1pbmF0ZWQgb24gaXRzIG93biBkdXJpbmcgdGhlIHJ1bi4KLQkJICov Ci0JCWVyZXBvcnQoV0FSTklORywKLQkJCQkoZXJybXNnKCJQSUQgJWQgaXMgbm90IGEgUG9zdGdy ZVNRTCBzZXJ2ZXIgcHJvY2VzcyIsIHBpZCkpKTsKLQkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOwot CX0KKwlwaWRfdAkJcGlkOworCWJvb2wJCXJlc3VsdDsKIAotCWlmIChTZW5kUHJvY1NpZ25hbChw aWQsIFBST0NTSUdfTE9HX01FTU9SWV9DT05URVhULCBwcm9jLT5iYWNrZW5kSWQpIDwgMCkKLQl7 Ci0JCS8qIEFnYWluLCBqdXN0IGEgd2FybmluZyB0byBhbGxvdyBsb29wcyAqLwotCQllcmVwb3J0 KFdBUk5JTkcsCi0JCQkJKGVycm1zZygiY291bGQgbm90IHNlbmQgc2lnbmFsIHRvIHByb2Nlc3Mg JWQ6ICVtIiwgcGlkKSkpOwotCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7Ci0JfQorCXBpZCA9IFBH X0dFVEFSR19JTlQzMigwKTsKKwlyZXN1bHQgPSBTZW5kUHJvY1NpZ25hbEZvckxvZ0luZm8ocGlk LCBQUk9DU0lHX0xPR19NRU1PUllfQ09OVEVYVCk7CiAKLQlQR19SRVRVUk5fQk9PTCh0cnVlKTsK KwlQR19SRVRVUk5fQk9PTChyZXN1bHQpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRl eCAzODFkOWU1NDhkLi4xMjZlZDEwMzYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9p bml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwpAQCAt MzYsNiArMzYsNyBAQCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZUluVHJhbnNhY3Rpb25TZXNz aW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlU2Vz c2lvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJvY1Np Z25hbEJhcnJpZXJQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nTWVt b3J5Q29udGV4dFBlbmRpbmcgPSBmYWxzZTsKK3ZvbGF0aWxlIHNpZ19hdG9taWNfdCBMb2dDdXJy ZW50UGxhblBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHVpbnQzMiBJbnRlcnJ1cHRIb2xkb2Zm Q291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIFF1ZXJ5Q2FuY2VsSG9sZG9mZkNvdW50ID0gMDsK IHZvbGF0aWxlIHVpbnQzMiBDcml0U2VjdGlvbkNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CmluZGV4IGMwN2IyYzZhNTUuLjZiNGVmMTZkODEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dApAQCAtODAzOCw2ICs4MDM4LDEyIEBACiAgIHByb3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0 eXBlcyA9PiAnaW50NCcsCiAgIHByb3NyYyA9PiAncGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzJyB9LAogCisjIGxvZ2dpbmcgcGxhbiBvZiB0aGUgcnVubmluZyBxdWVyeSBvbiB0aGUgc3Bl Y2lmaWVkIGJhY2tlbmQKK3sgb2lkID0+ICc0NTQ0JywgZGVzY3IgPT4gJ2xvZyBwbGFuIG9mIHRo ZSBydW5uaW5nIHF1ZXJ5IG9uIHRoZSBzcGVjaWZpZWQgYmFja2VuZCcsCisgIHByb25hbWUgPT4g J3BnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW4nLAorICBwcm92b2xhdGlsZSA9PiAndicsIHByb3Jl dHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50NCcsIHByb3NyYyA9PiAncGdf bG9nX2N1cnJlbnRfcXVlcnlfcGxhbicgfSwKKwogIyBub24tcGVyc2lzdGVudCBzZXJpZXMgZ2Vu ZXJhdG9yCiB7IG9pZCA9PiAnMTA2NicsIGRlc2NyID0+ICdub24tcGVyc2lzdGVudCBzZXJpZXMg Z2VuZXJhdG9yJywKICAgcHJvbmFtZSA9PiAnZ2VuZXJhdGVfc2VyaWVzJywgcHJvcm93cyA9PiAn MTAwMCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKaW5kZXggZTk0ZDllNDljZi4uN2MyZGNlN2NkZiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCisrKyBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2V4cGxhaW4uaApAQCAtNTksNiArNTksNyBAQCB0eXBlZGVmIHN0cnVjdCBF eHBsYWluU3RhdGUKIAlib29sCQloaWRlX3dvcmtlcnM7CS8qIHNldCBpZiB3ZSBmaW5kIGFuIGlu dmlzaWJsZSBHYXRoZXIgKi8KIAkvKiBzdGF0ZSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHBsYW4g bm9kZSAqLwogCUV4cGxhaW5Xb3JrZXJzU3RhdGUgKndvcmtlcnNfc3RhdGU7IC8qIG5lZWRlZCBp ZiBwYXJhbGxlbCBwbGFuICovCisJYm9vbAkJcnVubmluZzsJCS8qIHdoZXRoZXIgdGFyZ2V0IHF1 ZXJ5IGlzIGFscmVhZHkgcnVubmluZyAqLwogfSBFeHBsYWluU3RhdGU7CiAKIC8qIEhvb2sgZm9y IHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gRXhwbGFpbk9uZVF1ZXJ5KCkgKi8KQEAgLTEyNCw0 ICsxMjUsNiBAQCBleHRlcm4gdm9pZCBFeHBsYWluT3Blbkdyb3VwKGNvbnN0IGNoYXIgKm9ianR5 cGUsIGNvbnN0IGNoYXIgKmxhYmVsbmFtZSwKIGV4dGVybiB2b2lkIEV4cGxhaW5DbG9zZUdyb3Vw KGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKmxhYmVsbmFtZSwKIAkJCQkJCQkgIGJv b2wgbGFiZWxlZCwgRXhwbGFpblN0YXRlICplcyk7CiAKK2V4dGVybiB2b2lkIEhhbmRsZUxvZ0N1 cnJlbnRQbGFuSW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY2Vzc0xvZ0N1cnJlbnRQ bGFuSW50ZXJydXB0KHZvaWQpOwogI2VuZGlmCQkJCQkJCS8qIEVYUExBSU5fSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApp bmRleCAyZTJlOWEzNjRhLi4wOTdlYmFhOTZkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNj YWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtOTQsNiArOTQsNyBAQCBl eHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVJblRyYW5zYWN0aW9u U2Vzc2lvblRpbWVvdXRQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19h dG9taWNfdCBJZGxlU2Vzc2lvblRpbWVvdXRQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZv bGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmc7CiBleHRlcm4gUEdE TExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IExvZ01lbW9yeUNvbnRleHRQZW5kaW5nOwor ZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBMb2dDdXJyZW50UGxhblBl bmRpbmc7CiAKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2hlY2tD bGllbnRDb25uZWN0aW9uUGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdf YXRvbWljX3QgQ2xpZW50Q29ubmVjdGlvbkxvc3Q7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL3Byb2NzaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmlu ZGV4IGVlYzE4NmJlMmUuLmMxYTcyMThkNjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBA IC0zNSw2ICszNSw3IEBAIHR5cGVkZWYgZW51bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJ TkcsCS8qIGFzayB3YWxzZW5kZXJzIHRvIHByZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBST0NT SUdfQkFSUklFUiwJCQkvKiBnbG9iYWwgYmFycmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19M T0dfTUVNT1JZX0NPTlRFWFQsIC8qIGFzayBiYWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRl eHRzICovCisJUFJPQ1NJR19MT0dfQ1VSUkVOVF9QTEFOLCAvKiBhc2sgYmFja2VuZCB0byBsb2cg cGxhbiBvZiB0aGUgY3VycmVudCBxdWVyeSAqLwogCiAJLyogUmVjb3ZlcnkgY29uZmxpY3QgcmVh c29ucyAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UsCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NpZ25hbGZ1bmNzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdl L3NpZ25hbGZ1bmNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNWY2 YjEyNDM3MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2lnbmFsZnVu Y3MuaApAQCAtMCwwICsxLDIyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBzaWduYWxm dW5jcy5oCisgKgkgIEZ1bmN0aW9ucyBmb3Igc2lnbmFsaW5nIGJhY2tlbmRzCisgKgorICoKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIxLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9m IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9zdG9yYWdl L3NpZ25hbGZ1bmNzLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQUk9D U0lHTkFMRlVOQ19ICisjZGVmaW5lIFBST0NTSUdOQUxGVU5DX0gKKworLyoKKyAqIHByb3RvdHlw ZXMgZm9yIGZ1bmN0aW9ucyBpbiBzaWduYWxmdW5jcy5jCisgKi8KK2V4dGVybiBib29sIFNlbmRQ cm9jU2lnbmFsRm9yTG9nSW5mbyhwaWRfdCBwaWQsIFByb2NTaWduYWxSZWFzb24gcmVhc29uKTsK KworI2VuZGlmCQkJCQkJCS8qIFBST0NTSUdOQUxGVU5DX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3Rjb3AvcHF1ZXJ5LmggYi9zcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5oCmluZGV4IDIz MThmMDRmZjAuLmQzN2E1ZWI4MzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvcHF1ZXJ5 LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9wcXVlcnkuaApAQCAtMjEsNiArMjEsNyBAQCBzdHJ1 Y3QgUGxhbm5lZFN0bXQ7CQkJCS8qIGF2b2lkIGluY2x1ZGluZyBwbGFubm9kZXMuaCBoZXJlICov CiAKIAogZXh0ZXJuIFBHRExMSU1QT1JUIFBvcnRhbCBBY3RpdmVQb3J0YWw7CitleHRlcm4gUEdE TExJTVBPUlQgUXVlcnlEZXNjICpBY3RpdmVRdWVyeURlc2M7CiAKIAogZXh0ZXJuIFBvcnRhbFN0 cmF0ZWd5IENob29zZVBvcnRhbFN0cmF0ZWd5KExpc3QgKnN0bXRzKTsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKaW5kZXggZTg0NTA0MmQzOC4uOTgwMTdm ODNhOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9u cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQK QEAgLTEzNCwxOCArMTM0LDI2IEBAIExJTkUgMTogU0VMRUNUIG51bV9udWxscygpOwogICAgICAg ICAgICAgICAgXgogSElOVDogIE5vIGZ1bmN0aW9uIG1hdGNoZXMgdGhlIGdpdmVuIG5hbWUgYW5k IGFyZ3VtZW50IHR5cGVzLiBZb3UgbWlnaHQgbmVlZCB0byBhZGQgZXhwbGljaXQgdHlwZSBjYXN0 cy4KIC0tCi0tLSBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKQorLS0gVGVzdCBsb2dn aW5nIGZ1bmN0aW9ucwogLS0KLS0tIE1lbW9yeSBjb250ZXh0cyBhcmUgbG9nZ2VkIGFuZCB0aGV5 IGFyZSBub3QgcmV0dXJuZWQgdG8gdGhlIGZ1bmN0aW9uLgotLS0gRnVydGhlcm1vcmUsIHRoZWly IGNvbnRlbnRzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdGltaW5nLiBIb3dldmVyLAorLS0g VGhlc2UgZnVuY3Rpb25zIHJldHVybiB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgYmFja2VuZCBpcyBz dWNjZXNzZnVsbHkKKy0tIHNpZ25hbGVkLCBvdGhlcndpc2UgZmFsc2UuIFVwb24gcmVjZWl2aW5n IHRoZSBzaWduYWwsIHRoZSBiYWNrZW5kCistLSB3aWxsIGxvZyB0aGUgaW5mb3JtYXRpb24gdG8g dGhlIHNlcnZlciBsb2cuCistLSBBbHRob3VnaCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBkZXBl bmRpbmcgb24gdGhlIHRpbWluZywKIC0tIHdlIGNhbiBhdCBsZWFzdCB2ZXJpZnkgdGhhdCB0aGUg Y29kZSBkb2Vzbid0IGZhaWwuCiAtLQotU0VMRUNUICogRlJPTSBwZ19sb2dfYmFja2VuZF9tZW1v cnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSk7CitTRUxFQ1QgcGdfbG9nX2JhY2tlbmRfbWVt b3J5X2NvbnRleHRzKHBnX2JhY2tlbmRfcGlkKCkpOwogIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9j b250ZXh0cyAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgdAogKDEgcm93KQog CitTRUxFQ1QgcGdfbG9nX2N1cnJlbnRfcXVlcnlfcGxhbihwZ19iYWNrZW5kX3BpZCgpKTsKKyBw Z19sb2dfY3VycmVudF9xdWVyeV9wbGFuIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg dAorKDEgcm93KQorCiAtLQogLS0gVGVzdCBzb21lIGJ1aWx0LWluIFNSRnMKIC0tCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwKaW5kZXggYTM5ODM0OWFmYy4uOTc5YTQxOGU4 ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbApAQCAtMjksMTUgKzI5 LDE3IEBAIFNFTEVDVCBudW1fbnVsbHMoVkFSSUFESUMgJ3t9Jzo6aW50W10pOwogLS0gc2hvdWxk IGZhaWwsIG9uZSBvciBtb3JlIGFyZ3VtZW50cyBpcyByZXF1aXJlZAogU0VMRUNUIG51bV9ub25u dWxscygpOwogU0VMRUNUIG51bV9udWxscygpOwotCiAtLQotLS0gcGdfbG9nX2JhY2tlbmRfbWVt b3J5X2NvbnRleHRzKCkKKy0tIFRlc3QgbG9nZ2luZyBmdW5jdGlvbnMKIC0tCi0tLSBNZW1vcnkg Y29udGV4dHMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUgbm90IHJldHVybmVkIHRvIHRoZSBmdW5j dGlvbi4KLS0tIEZ1cnRoZXJtb3JlLCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBkZXBlbmRpbmcg b24gdGhlIHRpbWluZy4gSG93ZXZlciwKKy0tIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdHJ1ZSBp ZiB0aGUgc3BlY2lmaWVkIGJhY2tlbmQgaXMgc3VjY2Vzc2Z1bGx5CistLSBzaWduYWxlZCwgb3Ro ZXJ3aXNlIGZhbHNlLiBVcG9uIHJlY2VpdmluZyB0aGUgc2lnbmFsLCB0aGUgYmFja2VuZAorLS0g d2lsbCBsb2cgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBzZXJ2ZXIgbG9nLgorLS0gQWx0aG91Z2gg dGhlaXIgY29udGVudHMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB0aW1pbmcsCiAtLSB3ZSBj YW4gYXQgbGVhc3QgdmVyaWZ5IHRoYXQgdGhlIGNvZGUgZG9lc24ndCBmYWlsLgogLS0KLVNFTEVD VCAqIEZST00gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKHBnX2JhY2tlbmRfcGlkKCkp OworU0VMRUNUIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgp KTsKK1NFTEVDVCBwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuKHBnX2JhY2tlbmRfcGlkKCkpOwog CiAtLQogLS0gVGVzdCBzb21lIGJ1aWx0LWluIFNSRnMKCmJhc2UtY29tbWl0OiAwYmQzMDVlZTFk NDI3ZWYyOWY1ZmE0ZmEyMDU2N2UzYjNmNWZmNzkyCi0tIAoyLjI3LjAKCg== --=_0ee29c65e29ffb298e3319283623bae5--