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 1uyVlc-00938z-Ku for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Sep 2025 13:30:45 +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 1uyVla-000RUA-Dz for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Sep 2025 13:30:43 +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 1uyVlZ-000RSi-Nu for pgsql-hackers@lists.postgresql.org; Tue, 16 Sep 2025 13:30:42 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1uyVlV-000jMc-1b for pgsql-hackers@lists.postgresql.org; Tue, 16 Sep 2025 13:30:41 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id C21E361BED; Tue, 16 Sep 2025 22:30:32 +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="=_5afc857134a53d38480c6c1f46264180" Date: Tue, 16 Sep 2025 22:30:31 +0900 From: torikoshia To: Robert Haas Cc: Atsushi Torikoshi , pgsql-hackers@lists.postgresql.org, samimseih@gmail.com, destrex271@gmail.com Subject: Re: RFC: Logging plan of the running query In-Reply-To: References: <2aedcb5e8120bfdee994775e660f8718@oss.nttdata.com> <174144854199.294105.9417032645816235284.pgcf@coridan.postgresql.org> <784224198089cbe3cc3825332f195475@oss.nttdata.com> <8de51267059a43f53848c69a2bd9bc3b@oss.nttdata.com> <8f99161d84373ea46fb305ad75affa28@oss.nttdata.com> <01962a4f656356fb2899a0c4ace83019@oss.nttdata.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <6143f00af4bfdba95a85cf866f4acb41@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com Content-Transfer-Encoding: 7bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_5afc857134a53d38480c6c1f46264180 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable On 2025-09-10 02:59, Robert Haas wrote: > I haven't had time to review this in a while -- sorry about that -- > and I have only limited time now, but let me try to give you some > comments in the time that I do have. Thank you very much for taking the time to review this! > I bet some users would really like a feature that allows them to get > the plans for their own running queries. They will be sad with the > limitation of this feature, that it only writes to the logs. We should > probably just live with that limitation, because doing anything else > seems a lot more complicated. Still, it's not great. I agree. Regarding output in a form other than the logs, I think the idea=20 proposed in [1] =E2=80=94 making it possible to inspect memory contexts o= f other=20 backends via a view =E2=80=94 would be a useful reference. [1]=20 https://www.postgresql.org/message-id/flat/CAH2L28v8mc9HDt8QoSJ8TRmKau_8F= M_HKS41NeO9-6ZAkuZKXw@mail.gmail.com > The first of these messages ends with a period, which is contrary to > style guidelines. Removed the period. > All of them do errhidestmt() and errhidecontext(), > which is an unusual choice. I don't see why it's appropriate here. > Wanting to see both the query and the query plan seems pretty > reasonable to me. Removed errhidestmt() and errhidecontext(). > The first two messages seem fairly unhelpful to me: > the user isn't going to understand the distinction between those two > states and it's unclear why we should give them that information. I'm > not sure if we should log a generic message in these kinds of cases or > log nothing at all, but I feel like this is too much technical > information. I'm not sure if this is the best approach, but I changed them to log=20 nothing in these cases. In addition to the reason you mentioned, I found that when=20 pg_log_query_plan() is executed repeatedly at very short intervals=20 (e.g., every 0.01 seconds), ereport() could lead to=20 ProcessLogQueryPlanInterrupt() being invoked again inside errfinish via=20 CFI(), which resulted in a stack overflow. While this could be processed with check_stack_depth(), it doesn=E2=80=99= t seem=20 worthwhile to use it just to emit a message of limited usefulness. Additionally, there are other cases where the plan cannot be logged=20 (e.g., when the query is in a state which ExecProcNode will not be=20 invoked any further). So instead, I added the following note to the documentation: Note that depending on the execution state of the query, it may not be possible to log the plan. > Also, I think that we don't normally put the PID of the > process that is performing an action in the primary error message, > because the user can include %p in log_line_prefix if they so desire. That makes sense, but I had used the following message from pg_log_backend_memory_contexts()=20 as a reference and put the PID in the message: errmsg("logging memory contexts of PID %d", MyProcPid))); Since both pg_log_query_plan() and pg_log_backend_memory_contexts()=20 output information about another other backend, it feels slightly odd=20 that their log messages would be inconsistent. Perhaps should we consider changing pg_log_backend_memory_contexts() for=20 consistency as well? > But there's another, subtler point here, which is that I feel like "is > not running a query or a subtransaction is aborted" is pointing to a > design defect in the patch. When we enter an inner query, we switch > activeQueryDesc to point to the inner QueryDesc. When we abort a > subtransaction, instead of resetting it to the outer query's > QueryDesc, we reset it to NULL. I don't really think that's > acceptable. Consider this: >=20 > SELECT some_slow_function_that_uses_a_subtransaction_which_aborts(g) > FROM generate_series(1,1000000) g; >=20 > What's going to happen here is that for 99.9999% of the execution time > of this function, you can't print the query plan. And that won't be > because of any fundamental thing is preventing you from so doing -- it > will just be because the patch doesn't have the right bookkeeping. If > you added a QueryDesc * pointer to TransactionStateData, then > ExecutorRun could (1) save the current value of that pointer from the > topmost element of the transaction state stack, (2) update the pointer > value to the new QueryDesc, and (3) put the old pointer back at the > end. Thank you for pointing out the issue and suggesting a fix. Attached patch added a QueryDesc pointer to TransactionStateData and=20 updated it accordingly. With this change, while running the query below, pg_log_query_plan() is=20 now able to output the plan for SELECT gen_subtxn(g) FROM=20 generate_series(1,1000000) g as below: (session1)=3D# CREATE OR REPLACE FUNCTION gen_subtxn(i int) RETURNS int LANGUAGE plpgsql AS $$ DECLARE result int; BEGIN BEGIN PERFORM 1 / 0; EXCEPTION WHEN division_by_zero THEN result :=3D -i; END; RETURN result; END; $$; =3D# SELECT gen_subtxn(g) from generate_series(1,1000000) g; (session2)=3D# SELECT pg_log_query_plan(pid) FROM pg_stat_activity WHE= RE=20 backend_type =3D 'client backend'; (session2)=3D# \watch 0.1 (in the log) LOG: 00000: query and its plan running on the backend are: Query Text: SELECT gen_subtxn(g) from generate_series(1,1000000) g; Function Scan on pg_catalog.generate_series g (cost=3D0.00..260000.0= 0=20 rows=3D1000000 width=3D4) Output: gen_subtxn(g) Function Call: generate_series(1, 1000000) > Then, you wouldn't need any cleanup in AbortSubTransaction, and > this value would always be right, even after an outer query continues > after an abort, because the subtransaction abort would pop the > transaction state stack, leaving the right thing on top. It seems that simply making the above change is not sufficient. In particular, when raising an error inside a subtransaction, I=20 sometimes observed segfaults: BEGIN; savepoint x; CREATE TABLE koju (a INT UNIQUE); INSERT INTO koju VALUES (1); INSERT INTO koju VALUES (1); -- key duplicate error Inspecting the crash showed that the argument *ps to=20 ExecSetExecProcNodeRecurse() was 0x7f7f7f.... (lldb) f 0 frame #0: 0x000000010102ec40=20 postgres`ExecSetExecProcNodeRecurse(ps=3D0x7f7f7f7f7f7f7f7f) at=20 execProcnode.c:601:30 600 { -> 601 ExecSetExecProcNode(ps, ps->ExecProcNodeReal); This happens when the plan-logging function is called after an ERROR is=20 raised but before the transaction state stack is popped. So in the attached patch, as in the previous version, I reset QueryDesc=20 to NULL during that interval. I have also confirmed that even with this change, the above test (SELECT=20 gen_subtxn(g) from generate_series(1,1000000) g;) can still have its=20 plan logged successfully. > The changes to miscadmin.h delete a blank line. They probably=20 > shouldn't. Fixed. > The only change to pquery.h is to delete a blank line. That hunk needs > reverting. Fixed. > +-- Note that we're using a slightly more complex query here because > +-- a simple 'SELECT pg_log_query_plan(pg_backend_pid())' would finish > +-- before it reaches the code path that actually outputs the plan. > +SELECT result FROM (SELECT pg_log_query_plan(pg_backend_pid()))=20 > result; > + result > +-------- > + (t) > +(1 row) >=20 > I seriously doubt that this will be stable across the entire > buildfarm. You're going to need a different approach here. Changed it to the following query: WITH t AS MATERIALIZED (SELECT pg_log_query_plan(pg_backend_pid())) SELECT * FROM t; Also since when the target query is using CTE, pg_log_query_plan() had=20 few chance to log the plan, attached patch added T_CteScan handling. > Is there any real reason to rename regress_log_memory to > regress_log_function, vs. just introducing a separate regress_log_plan > role? I don=E2=80=99t have any particular reason to insist on unifying them. In the attached patch, I created a regress_log_plan role and used that=20 to run the same test. --=20 Regards, -- Atsushi Torikoshi Seconded from NTT DATA Japan Corporation to SRA OSS K.K. --=_5afc857134a53d38480c6c1f46264180 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v47-0001-Add-function-to-log-the-plan-of-the-currently-ru.patch Content-Disposition: attachment; filename=v47-0001-Add-function-to-log-the-plan-of-the-currently-ru.patch; size=35294 RnJvbSA0MGFjZDViZjllY2JiMzg2YmE5ODRhNzQ1NTJhYzczOTNlNmNjNzVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFR1ZSwgMTYgU2VwIDIwMjUgMjI6MDc6MTMgKzA5MDAKU3ViamVjdDog W1BBVENIIHY0N10gQWRkIGZ1bmN0aW9uIHRvIGxvZyB0aGUgcGxhbiBvZiB0aGUgY3VycmVudGx5 IHJ1bm5pbmcgCiBxdWVyeQoKQ3VycmVudGx5LCB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBxdWVy eSBleGVjdXRpb24gdG8gZmluaXNoCnRvIGtub3cgaXRzIHBsYW4gZWl0aGVyIHVzaW5nIEVYUExB SU4gQU5BTFlaRSBvciBhdXRvX2V4cGxhaW4uClRoaXMgaXMgbm90IHNvIGNvbnZlbmllbnQsIGZv ciBleGFtcGxlIHdoZW4gaW52ZXN0aWdhdGluZwpsb25nLXJ1bm5pbmcgcXVlcmllcyBvbiBwcm9k dWN0aW9uIGVudmlyb25tZW50cy4KVG8gaW1wcm92ZSB0aGlzIHNpdHVhdGlvbiwgdGhpcyBwYXRj aCBhZGRzIHBnX2xvZ19xdWVyeV9wbGFuKCkKZnVuY3Rpb24gdGhhdCByZXF1ZXN0cyB0byBsb2cg dGhlIHBsYW4gb2YgdGhlIGN1cnJlbnRseQpleGVjdXRpbmcgcXVlcnkuCgpPbiByZWNlaXB0IG9m IHRoZSByZXF1ZXN0LCBFeGVjUHJvY05vZGVzIG9mIHRoZSBjdXJyZW50IHBsYW4Kbm9kZSBhbmQg aXRzIHN1YnNpZGlhcnkgbm9kZXMgYXJlIHdyYXBwZWQgd2l0aApFeGVjUHJvY05vZGVGaXJzdCwg d2hpY2ggaW1wbGVsZW1lbnRzIGxvZ2dpbmcgcXVlcnkgcGxhbi4KV2hlbiBleGVjdXRvciBleGVj dXRlcyB0aGUgb25lIG9mIHRoZSB3cmFwcGVkIG5vZGVzLCB0aGUKcXVlcnkgcGxhbiBpcyBsb2dn ZWQuCgpPdXIgaW5pdGlhbCBpZGVhIHdhcyB0byBzZW5kIGEgc2lnbmFsIHRvIHRoZSB0YXJnZXQg YmFja2VuZApwcm9jZXNzLCB3aGljaCBpbnZva2VzIEVYUExBSU4gbG9naWMgYXQgdGhlIG5leHQK Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBjYWxsLiBIb3dldmVyLCB3ZSByZWFsaXplZCBkdXJpbmcK cHJvdG90eXBpbmcgdGhhdCBFWFBMQUlOIGlzIGNvbXBsZXggYW5kIG1heSBub3QgYmUgc2FmZWx5 CmV4ZWN1dGVkIGF0IGFyYml0cmFyeSBpbnRlcnJ1cHQgcG9pbnRzLgoKQnkgZGVmYXVsdCwgb25s eSBzdXBlcnVzZXJzIGFyZSBhbGxvd2VkIHRvIHJlcXVlc3QgdG8gbG9nIHRoZQpwbGFucyBiZWNh dXNlIGFsbG93aW5nIGFueSB1c2VycyB0byBpc3N1ZSB0aGlzIHJlcXVlc3QgYXQgYW4KdW5ib3Vu ZGVkIHJhdGUgd291bGQgY2F1c2UgbG90cyBvZiBsb2cgbWVzc2FnZXMgYW5kIHdoaWNoIGNhbgps ZWFkIHRvIGRlbmlhbCBvZiBzZXJ2aWNlLgotLS0KIGNvbnRyaWIvYXV0b19leHBsYWluL2F1dG9f ZXhwbGFpbi5jICAgICAgICAgIHwgIDI0ICstLQogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1hZG1p bi5zZ21sICAgICAgICAgICAgfCAgMjggKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 YWN0LmMgICAgICAgICAgICB8ICAzMCArKysrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9m dW5jdGlvbnMuc3FsICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9keW5hbWljX2V4cGxh aW4uYyAgICAgICB8IDE3MyArKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMgICAgICAgICAgICAgICB8ICAzOCArKystCiBzcmMvYmFja2VuZC9jb21tYW5k cy9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9l eGVjTWFpbi5jICAgICAgICAgICAgICB8ICAxNyArKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1Byb2Nub2RlLmMgICAgICAgICAgfCAxMjMgKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvcHJvY3NpZ25hbC5jICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvdGNvcC9w b3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9nbG9iYWxzLmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hhY3Qu aCAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCAgICAgICAgICAgICAgfCAgIDYgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZHluYW1pY19l eHBsYWluLmggICAgICAgfCAgMjcgKysrCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgg ICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbl9zdGF0 ZS5oICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAg ICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggICAgICAgICAg ICAgfCAgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQg fCAgNDMgKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbCAgICAg IHwgIDMyICsrKysKIDIzIGZpbGVzIGNoYW5nZWQsIDUzOCBpbnNlcnRpb25zKCspLCAzNCBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jb21tYW5kcy9keW5hbWlj X2V4cGxhaW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2NvbW1hbmRzL2R5bmFt aWNfZXhwbGFpbi5oCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19leHBs YWluLmMgYi9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYwppbmRleCAxZjRiYWRi NDkyOC4uNmM0MjE3YzlkMWYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9f ZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCkBAIC0x NSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKICNpbmNsdWRlICJhY2Nlc3MvcGFy YWxsZWwuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaCIKICNpbmNsdWRl ICJjb21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9mb3JtYXQu aCIKICNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCkBAIC00MDQsMjYgKzQwNSw5 IEBAIGV4cGxhaW5fRXhlY3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURlc2MpCiAJCQllcy0+Zm9y bWF0ID0gYXV0b19leHBsYWluX2xvZ19mb3JtYXQ7CiAJCQllcy0+c2V0dGluZ3MgPSBhdXRvX2V4 cGxhaW5fbG9nX3NldHRpbmdzOwogCi0JCQlFeHBsYWluQmVnaW5PdXRwdXQoZXMpOwotCQkJRXhw bGFpblF1ZXJ5VGV4dChlcywgcXVlcnlEZXNjKTsKLQkJCUV4cGxhaW5RdWVyeVBhcmFtZXRlcnMo ZXMsIHF1ZXJ5RGVzYy0+cGFyYW1zLCBhdXRvX2V4cGxhaW5fbG9nX3BhcmFtZXRlcl9tYXhfbGVu Z3RoKTsKLQkJCUV4cGxhaW5QcmludFBsYW4oZXMsIHF1ZXJ5RGVzYyk7Ci0JCQlpZiAoZXMtPmFu YWx5emUgJiYgYXV0b19leHBsYWluX2xvZ190cmlnZ2VycykKLQkJCQlFeHBsYWluUHJpbnRUcmln Z2VycyhlcywgcXVlcnlEZXNjKTsKLQkJCWlmIChlcy0+Y29zdHMpCi0JCQkJRXhwbGFpblByaW50 SklUU3VtbWFyeShlcywgcXVlcnlEZXNjKTsKLQkJCUV4cGxhaW5FbmRPdXRwdXQoZXMpOwotCi0J CQkvKiBSZW1vdmUgbGFzdCBsaW5lIGJyZWFrICovCi0JCQlpZiAoZXMtPnN0ci0+bGVuID4gMCAm JiBlcy0+c3RyLT5kYXRhW2VzLT5zdHItPmxlbiAtIDFdID09ICdcbicpCi0JCQkJZXMtPnN0ci0+ ZGF0YVstLWVzLT5zdHItPmxlbl0gPSAnXDAnOwotCi0JCQkvKiBGaXggSlNPTiB0byBvdXRwdXQg YW4gb2JqZWN0ICovCi0JCQlpZiAoYXV0b19leHBsYWluX2xvZ19mb3JtYXQgPT0gRVhQTEFJTl9G T1JNQVRfSlNPTikKLQkJCXsKLQkJCQllcy0+c3RyLT5kYXRhWzBdID0gJ3snOwotCQkJCWVzLT5z dHItPmRhdGFbZXMtPnN0ci0+bGVuIC0gMV0gPSAnfSc7Ci0JCQl9CisJCQlFeHBsYWluU3RyaW5n QXNzZW1ibGUoZXMsIHF1ZXJ5RGVzYywgYXV0b19leHBsYWluX2xvZ19mb3JtYXQsCisJCQkJCQkJ CSAgYXV0b19leHBsYWluX2xvZ190cmlnZ2VycywKKwkJCQkJCQkJICBhdXRvX2V4cGxhaW5fbG9n X3BhcmFtZXRlcl9tYXhfbGVuZ3RoKTsKIAogCQkJLyoKIAkJCSAqIE5vdGU6IHdlIHJlbHkgb24g dGhlIGV4aXN0aW5nIGxvZ2dpbmcgb2YgY29udGV4dCBvcgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2Z1bmMvZnVuYy1hZG1pbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1hZG1pbi5z Z21sCmluZGV4IDU3ZmYzMzMxNTlmLi4xZGMxOWJiZTNiNCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL2Z1bmMvZnVuYy1hZG1pbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtYWRt aW4uc2dtbApAQCAtMTg0LDYgKzE4NCwzNCBAQAogICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAg ICAgPC9yb3c+CiAKKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVf ZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT4K KyAgICAgICAgIDxwcmltYXJ5PnBnX2xvZ19xdWVyeV9wbGFuPC9wcmltYXJ5PgorICAgICAgICA8 L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2xvZ19xdWVyeV9wbGFuPC9mdW5jdGlv bj4gKCA8cGFyYW1ldGVyPnBpZDwvcGFyYW1ldGVyPiA8dHlwZT5pbnRlZ2VyPC90eXBlPiApCisg ICAgICAgIDxyZXR1cm52YWx1ZT5ib29sZWFuPC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+ CisgICAgICAgPHBhcmE+CisgICAgICAgIFJlcXVlc3RzIHRvIGxvZyB0aGUgcGxhbiBvZiB0aGUg cXVlcnkgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlCisgICAgICAgIGJhY2tlbmQgd2l0aCBzcGVj aWZpZWQgcHJvY2VzcyBJRC4KKyAgICAgICAgSXQgd2lsbCBiZSBsb2dnZWQgYXQgPGxpdGVyYWw+ TE9HPC9saXRlcmFsPiBtZXNzYWdlIGxldmVsIGFuZAorICAgICAgICB3aWxsIGFwcGVhciBpbiB0 aGUgc2VydmVyIGxvZyBiYXNlZCBvbiB0aGUgbG9nCisgICAgICAgIGNvbmZpZ3VyYXRpb24gc2V0 IChTZWUgPHhyZWYgbGlua2VuZD0icnVudGltZS1jb25maWctbG9nZ2luZyIvPgorICAgICAgICBm b3IgbW9yZSBpbmZvcm1hdGlvbiksIGJ1dCB3aWxsIG5vdCBiZSBzZW50IHRvIHRoZSBjbGllbnQK KyAgICAgICAgcmVnYXJkbGVzcyBvZiA8eHJlZiBsaW5rZW5kPSJndWMtY2xpZW50LW1pbi1tZXNz YWdlcyIvPi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIE5vdGUgdGhh dCBkZXBlbmRpbmcgb24gdGhlIGV4ZWN1dGlvbiBzdGF0ZSBvZiB0aGUgcXVlcnksCisgICAgICAg IGl0IG1heSBub3QgYmUgcG9zc2libGUgdG8gbG9nIHRoZSBwbGFuLgorICAgICAgICA8L3BhcmE+ CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVzdHJpY3RlZCB0byBz dXBlcnVzZXJzIGJ5IGRlZmF1bHQsIGJ1dCBvdGhlcgorICAgICAgICB1c2VycyBjYW4gYmUgZ3Jh bnRlZCBFWEVDVVRFIHRvIHJ1biB0aGUgZnVuY3Rpb24uCisgICAgICAgPC9wYXJhPjwvZW50cnk+ CisgICAgICA8L3Jvdz4KKworCiAgICAgICA8cm93PgogICAgICAgIDxlbnRyeSByb2xlPSJmdW5j X3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CiAgICAgICAgIDxpbmRl eHRlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKaW5kZXggYjQ2ZTdlOWMyYTYuLjhjMmU3 ZDUwNjFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCkBAIC0zNiw2ICszNiw3IEBACiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19lbnVtLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9zdG9yYWdlLmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9keW5hbWlj X2V4cGxhaW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIKICNpbmNsdWRlICJj b21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY29tbW9uL3BnX3BybmcuaCIKQEAgLTIxNSw2 ICsyMTYsNyBAQCB0eXBlZGVmIHN0cnVjdCBUcmFuc2FjdGlvblN0YXRlRGF0YQogCWJvb2wJCXBh cmFsbGVsQ2hpbGRYYWN0OwkvKiBpcyBhbnkgcGFyZW50IHRyYW5zYWN0aW9uIHBhcmFsbGVsPyAq LwogCWJvb2wJCWNoYWluOwkJCS8qIHN0YXJ0IGEgbmV3IGJsb2NrIGFmdGVyIHRoaXMgb25lICov CiAJYm9vbAkJdG9wWGlkTG9nZ2VkOwkvKiBmb3IgYSBzdWJ4YWN0OiBpcyB0b3AtbGV2ZWwgWElE IGxvZ2dlZD8gKi8KKwlRdWVyeURlc2MgICpxdWVyeURlc2M7CQkvKiBteSBjdXJyZW50IFF1ZXJ5 RGVzYyAqLwogCXN0cnVjdCBUcmFuc2FjdGlvblN0YXRlRGF0YSAqcGFyZW50OwkvKiBiYWNrIGxp bmsgdG8gcGFyZW50ICovCiB9IFRyYW5zYWN0aW9uU3RhdGVEYXRhOwogCkBAIC0yNDgsNiArMjUw LDcgQEAgc3RhdGljIFRyYW5zYWN0aW9uU3RhdGVEYXRhIFRvcFRyYW5zYWN0aW9uU3RhdGVEYXRh ID0gewogCS5zdGF0ZSA9IFRSQU5TX0RFRkFVTFQsCiAJLmJsb2NrU3RhdGUgPSBUQkxPQ0tfREVG QVVMVCwKIAkudG9wWGlkTG9nZ2VkID0gZmFsc2UsCisJLnF1ZXJ5RGVzYyA9IE5VTEwsCiB9Owog CiAvKgpAQCAtOTMzLDYgKzkzNiwyNyBAQCBHZXRDdXJyZW50VHJhbnNhY3Rpb25OZXN0TGV2ZWwo dm9pZCkKIAlyZXR1cm4gcy0+bmVzdGluZ0xldmVsOwogfQogCisvKgorICogU2V0Q3VycmVudFF1 ZXJ5RGVzYworICovCit2b2lkCitTZXRDdXJyZW50UXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcXVlcnlE ZXNjKQoreworCVRyYW5zYWN0aW9uU3RhdGUgcyA9IEN1cnJlbnRUcmFuc2FjdGlvblN0YXRlOwor CisJcy0+cXVlcnlEZXNjID0gcXVlcnlEZXNjOworfQorCisvKgorICogR2V0Q3VycmVudFF1ZXJ5 RGVzYworICovCitRdWVyeURlc2MgKgorR2V0Q3VycmVudFF1ZXJ5RGVzYyh2b2lkKQoreworCVRy YW5zYWN0aW9uU3RhdGUgcyA9IEN1cnJlbnRUcmFuc2FjdGlvblN0YXRlOworCisJcmV0dXJuIHMt PnF1ZXJ5RGVzYzsKK30KIAogLyoKICAqCVRyYW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFuc2FjdGlv bklkCkBAIC0yOTE2LDYgKzI5NDAsOSBAQCBBYm9ydFRyYW5zYWN0aW9uKHZvaWQpCiAJLyogUmVz ZXQgc25hcHNob3QgZXhwb3J0IHN0YXRlLiAqLwogCVNuYXBCdWlsZFJlc2V0RXhwb3J0ZWRTbmFw c2hvdFN0YXRlKCk7CiAKKwkvKiBSZXNldCBzdGF0ZSBmb3IgbG9nZ2luZyBjdXJyZW50IHF1ZXJ5 IHBsYW4uICovCisJUmVzZXRMb2dRdWVyeVBsYW5TdGF0ZSgpOworCiAJLyoKIAkgKiBJZiB0aGlz IHhhY3QgaGFzIHN0YXJ0ZWQgYW55IHVuZmluaXNoZWQgcGFyYWxsZWwgb3BlcmF0aW9uLCBjbGVh biB1cAogCSAqIGl0cyB3b3JrZXJzIGFuZCBleGl0IHBhcmFsbGVsIG1vZGUuICBEb24ndCB3YXJu IGFib3V0IGxlYWtlZCByZXNvdXJjZXMuCkBAIC01MzA4LDYgKzUzMzUsOSBAQCBBYm9ydFN1YlRy YW5zYWN0aW9uKHZvaWQpCiAJLyogUmVzZXQgbG9naWNhbCBzdHJlYW1pbmcgc3RhdGUuICovCiAJ UmVzZXRMb2dpY2FsU3RyZWFtaW5nU3RhdGUoKTsKIAorCS8qIFJlc2V0IHN0YXRlIGZvciBsb2dn aW5nIGN1cnJlbnQgcXVlcnkgcGxhbi4gKi8KKwlSZXNldExvZ1F1ZXJ5UGxhblN0YXRlKCk7CisK IAkvKgogCSAqIE5vIG5lZWQgZm9yIFNuYXBCdWlsZFJlc2V0RXhwb3J0ZWRTbmFwc2hvdFN0YXRl KCkgaGVyZSwgc25hcHNob3QKIAkgKiBleHBvcnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHN1YnRy YW5zYWN0aW9ucy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0 aW9ucy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCmluZGV4 IDU2NmYzMDhlNDQzLi5lYzJlMWMxZmQ5YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9zeXN0ZW1fZnVuY3Rpb25zLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9m dW5jdGlvbnMuc3FsCkBAIC03NzUsNiArNzc1LDggQEAgUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJ T04gcGdfbHNfbG9naWNhbG1hcGRpcigpIEZST00gUFVCTElDOwogCiBSRVZPS0UgRVhFQ1VURSBP TiBGVU5DVElPTiBwZ19sc19yZXBsc2xvdGRpcih0ZXh0KSBGUk9NIFBVQkxJQzsKIAorUkVWT0tF IEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlcikgRlJPTSBQVUJM SUM7CisKIC0tCiAtLSBXZSBhbHNvIHNldCB1cCBzb21lIHRoaW5ncyBhcyBhY2Nlc3NpYmxlIHRv IHN0YW5kYXJkIHJvbGVzLgogLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01h a2VmaWxlIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKaW5kZXggY2IyZmJkYzdjNjAu LjVlODM5MDdlYjE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQpAQCAtMzIsNiArMzIsNyBAQCBPQkpT ID0gXAogCWRlZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRzLm8gXAorCWR5bmFtaWNf ZXhwbGFpbi5vIFwKIAlldmVudF90cmlnZ2VyLm8gXAogCWV4cGxhaW4ubyBcCiAJZXhwbGFpbl9k ci5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZHluYW1pY19leHBsYWluLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE2MGNjOWJlYTJlCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZHluYW1pY19leHBsYWluLmMKQEAgLTAsMCArMSwxNzMgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGR5bmFtaWNfZXhwbGFpbi5jCisgKgkgIEV4cGxh aW4gcXVlcnkgcGxhbnMgZHVyaW5nIGV4ZWN1dGlvbgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LTUsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRl ICJjb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWlu LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9mb3JtYXQuaCIKKyNpbmNsdWRlICJjb21t YW5kcy9leHBsYWluX3N0YXRlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRl ICJ1dGlscy9iYWNrZW5kX3N0YXR1cy5oIgorCisKKy8qCisgKiBIYW5kbGUgcmVjZWlwdCBvZiBh biBpbnRlcnJ1cHQgaW5kaWNhdGluZyBsb2dnaW5nIHRoZSBwbGFuIG9mIHRoZSBjdXJyZW50bHkK KyAqIHJ1bm5pbmcgcXVlcnkuCisgKgorICogQWxsIHRoZSBhY3R1YWwgd29yayBpcyBkZWZlcnJl ZCB0byBQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0KCksCisgKiBiZWNhdXNlIHdlIGNhbm5v dCBzYWZlbHkgZW1pdCBhIGxvZyBtZXNzYWdlIGluc2lkZSB0aGUgc2lnbmFsIGhhbmRsZXIuCisg Ki8KK3ZvaWQKK0hhbmRsZUxvZ1F1ZXJ5UGxhbkludGVycnVwdCh2b2lkKQoreworCUludGVycnVw dFBlbmRpbmcgPSB0cnVlOworCUxvZ1F1ZXJ5UGxhblBlbmRpbmcgPSB0cnVlOworCS8qIGxhdGNo IHdpbGwgYmUgc2V0IGJ5IHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyICovCit9CisKKy8qCisg KiBDbGVhciBwZ19sb2dfcXVlcnlfcGxhbigpIHJlbGF0ZWQgc3RhdGUgZHVyaW5nIChzdWIpdHJh bnNhY3Rpb24gYWJvcnQuCisgKi8KK3ZvaWQKK1Jlc2V0TG9nUXVlcnlQbGFuU3RhdGUodm9pZCkK K3sKKwkvKgorCSAqIEFmdGVyIGFib3J0LCBzb21lIGVsZW1lbnRzIG9mIGN1cnJlbnQgUXVlcnlE ZXNjIGFyZSBmcmVlZC4gVG8gYXZvaWQKKwkgKiBhY2Nlc3NpbmcgdGhlbSwgcmVzZXQgaXQuCisJ ICovCisJU2V0Q3VycmVudFF1ZXJ5RGVzYyhOVUxMKTsKKwlMb2dRdWVyeVBsYW5QZW5kaW5nID0g ZmFsc2U7Cit9CisKKy8qCisgKiBBY3R1YWwgcGxhbiBsb2dnaW5nIGZ1bmN0aW9uLgorICovCit2 b2lkCitMb2dRdWVyeVBsYW4odm9pZCkKK3sKKwlFeHBsYWluU3RhdGUgKmVzOworCU1lbW9yeUNv bnRleHQgY3h0OworCU1lbW9yeUNvbnRleHQgb2xkX2N4dDsKKwlRdWVyeURlc2MgICpxdWVyeURl c2M7CisKKwljeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQs CisJCQkJCQkJCSJsb2dfcXVlcnlfcGxhbiB0ZW1wb3JhcnkgY29udGV4dCIsCisJCQkJCQkJCUFM TE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJb2xkX2N4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhjeHQpOworCisJZXMgPSBOZXdFeHBsYWluU3RhdGUoKTsKKworCWVzLT5mb3JtYXQgPSBFWFBM QUlOX0ZPUk1BVF9URVhUOworCWVzLT5zZXR0aW5ncyA9IHRydWU7CisJZXMtPnZlcmJvc2UgPSB0 cnVlOworCWVzLT5zaWduYWxlZCA9IHRydWU7CisKKwkvKgorCSAqIEN1cnJlbnQgUXVlcnlEZXNj IGlzIHZhbGlkIG9ubHkgZHVyaW5nIHN0YW5kYXJkX0V4ZWN1dG9yUnVuLiBIb3dldmVyLAorCSAq IEV4ZWNQcm9jTm9kZSBjYW4gYmUgY2FsbGVkIGFmdGVyd2FyZChpLmUuLCBFeGVjUG9zdHByb2Nl c3NQbGFuKS4gVG8KKwkgKiBoYW5kbGUgdGhlIGNhc2UsIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBR dWVyeURlc2Mgbm93LgorCSAqLworCXF1ZXJ5RGVzYyA9IEdldEN1cnJlbnRRdWVyeURlc2MoKTsK KworCWlmIChxdWVyeURlc2MgPT0gTlVMTCkKKwl7CisJCUxvZ1F1ZXJ5UGxhblBlbmRpbmcgPSBm YWxzZTsKKwkJcmV0dXJuOworCX0KKworCUV4cGxhaW5TdHJpbmdBc3NlbWJsZShlcywgcXVlcnlE ZXNjLCBlcy0+Zm9ybWF0LCAwLCAtMSk7CisKKwllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJ CWVycm1zZygicXVlcnkgYW5kIGl0cyBwbGFuIHJ1bm5pbmcgb24gdGhlIGJhY2tlbmQgYXJlOlxu JXMiLAorCQkJCSAgIGVzLT5zdHItPmRhdGEpKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRfY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKGN4dCk7CisKKwlMb2dRdWVyeVBsYW5QZW5k aW5nID0gZmFsc2U7Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSByZXF1ZXN0IGZvciBsb2dnaW5n IHF1ZXJ5IHBsYW4gYXQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4KKyAqCisgKiBTaW5jZSBleGVj dXRpbmcgRVhQTEFJTi1yZWxhdGVkIGNvZGUgYXQgYW4gYXJiaXRyYXJ5IENIRUNLX0ZPUl9JTlRF UlJVUFRTKCkKKyAqIHBvaW50IGlzIHBvdGVudGlhbGx5IHVuc2FmZSwgdGhpcyBmdW5jdGlvbiBq dXN0IHdyYXBzIHRoZSBub2RlcyBvZgorICogRXhlY1Byb2NOb2RlIHdpdGggRXhlY1Byb2NOb2Rl Rmlyc3QsIHdoaWNoIGxvZ3MgcXVlcnkgcGxhbiBpZiByZXF1ZXN0ZWQuCisgKiBUaGlzIHdheSBl bnN1cmVzIHRoYXQgRVhQTEFJTi1yZWxhdGVkIGNvZGUgaXMgZXhlY3V0ZWQgb25seSBkdXJpbmcK KyAqIEV4ZWNQcm9jTm9kZUZpcnN0LCB3aGVyZSBpdCBpcyBjb25zaWRlcmVkIHNhZmUuCisgKi8K K3ZvaWQKK1Byb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHQodm9pZCkKK3sKKwlRdWVyeURlc2Mg ICpxdWVyeWRlc2MgPSBHZXRDdXJyZW50UXVlcnlEZXNjKCk7CisKKwlpZiAocXVlcnlkZXNjID09 IE5VTEwpCisJeworCQlMb2dRdWVyeVBsYW5QZW5kaW5nID0gZmFsc2U7CisJCXJldHVybjsKKwl9 CisKKwkvKiBXcmFwIEV4ZWNQcm9jTm9kZXMgd2l0aCBFeGVjUHJvY05vZGVGaXJzdCAgKi8KKwlF eGVjU2V0RXhlY1Byb2NOb2RlUmVjdXJzZShxdWVyeWRlc2MtPnBsYW5zdGF0ZSk7Cit9CisKKy8q CisgKiBTaWduYWwgYSBiYWNrZW5kIHByb2Nlc3MgdG8gbG9nIHRoZSBxdWVyeSBwbGFuIG9mIHRo ZSBydW5uaW5nIHF1ZXJ5LgorICoKKyAqIEJ5IGRlZmF1bHQsIG9ubHkgc3VwZXJ1c2VycyBhcmUg YWxsb3dlZCB0byBzaWduYWwgdG8gbG9nIHRoZSBwbGFuIGJlY2F1c2UKKyAqIGFsbG93aW5nIGFu eSB1c2VycyB0byBpc3N1ZSB0aGlzIHJlcXVlc3QgYXQgYW4gdW5ib3VuZGVkIHJhdGUgd291bGQK KyAqIGNhdXNlIGxvdHMgb2YgbG9nIG1lc3NhZ2VzIGFuZCB3aGljaCBjYW4gbGVhZCB0byBkZW5p YWwgb2Ygc2VydmljZS4KKyAqIEFkZGl0aW9uYWwgcm9sZXMgY2FuIGJlIHBlcm1pdHRlZCB3aXRo IEdSQU5ULgorICovCitEYXR1bQorcGdfbG9nX3F1ZXJ5X3BsYW4oUEdfRlVOQ1RJT05fQVJHUykK K3sKKwlpbnQJCQlwaWQgPSBQR19HRVRBUkdfSU5UMzIoMCk7CisJUEdQUk9DCSAgICpwcm9jOwor CVBnQmFja2VuZFN0YXR1cyAqYmVfc3RhdHVzOworCisJcHJvYyA9IEJhY2tlbmRQaWRHZXRQcm9j KHBpZCk7CisKKwlpZiAocHJvYyA9PSBOVUxMKQorCXsKKwkJLyoKKwkJICogVGhpcyBpcyBqdXN0 IGEgd2FybmluZyBzbyBhIGxvb3AtdGhyb3VnaC1yZXN1bHRzZXQgd2lsbCBub3QgYWJvcnQKKwkJ ICogaWYgb25lIGJhY2tlbmQgdGVybWluYXRlZCBvbiBpdHMgb3duIGR1cmluZyB0aGUgcnVuLgor CQkgKi8KKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQ b3N0Z3JlU1FMIGJhY2tlbmQgcHJvY2VzcyIsIHBpZCkpKTsKKwkJUEdfUkVUVVJOX0JPT0woZmFs c2UpOworCX0KKworCWJlX3N0YXR1cyA9IHBnc3RhdF9nZXRfYmVlbnRyeV9ieV9wcm9jX251bWJl cihwcm9jLT52eGlkLnByb2NOdW1iZXIpOworCWlmIChiZV9zdGF0dXMtPnN0X2JhY2tlbmRUeXBl ICE9IEJfQkFDS0VORCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJQSUQg JWQgaXMgbm90IGEgUG9zdGdyZVNRTCBjbGllbnQgYmFja2VuZCBwcm9jZXNzIiwgcGlkKSkpOwor CQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQorCisJaWYgKFNlbmRQcm9jU2lnbmFsKHBpZCwg UFJPQ1NJR19MT0dfUVVFUllfUExBTiwgcHJvYy0+dnhpZC5wcm9jTnVtYmVyKSA8IDApCisJewor CQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZygiY291bGQgbm90IHNlbmQgc2lnbmFsIHRv IHByb2Nlc3MgJWQ6ICVtIiwgcGlkKSkpOworCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQor CisJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggODM0 NWJjMDI2NGIuLjU1Njc3OWJhZmFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9l eHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMDg0LDYg KzEwODQsMzcgQEAgRXhwbGFpblF1ZXJ5UGFyYW1ldGVycyhFeHBsYWluU3RhdGUgKmVzLCBQYXJh bUxpc3RJbmZvIHBhcmFtcywgaW50IG1heGxlbikKIAkJRXhwbGFpblByb3BlcnR5VGV4dCgiUXVl cnkgUGFyYW1ldGVycyIsIHN0ciwgZXMpOwogfQogCisvKgorICogRXhwbGFpblN0cmluZ0Fzc2Vt YmxlIC0KKyAqICAgIEFzc2VtYmxlIGVzLT5zdHIgZm9yIGxvZ2dpbmcgYWNjb3JkaW5nIHRvIHNw ZWNpZmllZCBvcHRpb25zIGFuZCBmb3JtYXQKKyAqLworCit2b2lkCitFeHBsYWluU3RyaW5nQXNz ZW1ibGUoRXhwbGFpblN0YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBsb2dGb3Jt YXQsCisJCQkJCSAgYm9vbCBsb2dUcmlnZ2VycywgaW50IGxvZ1BhcmFtZXRlck1heExlbmd0aCkK K3sKKwlFeHBsYWluQmVnaW5PdXRwdXQoZXMpOworCUV4cGxhaW5RdWVyeVRleHQoZXMsIHF1ZXJ5 RGVzYyk7CisJRXhwbGFpblF1ZXJ5UGFyYW1ldGVycyhlcywgcXVlcnlEZXNjLT5wYXJhbXMsIGxv Z1BhcmFtZXRlck1heExlbmd0aCk7CisJRXhwbGFpblByaW50UGxhbihlcywgcXVlcnlEZXNjKTsK KwlpZiAoZXMtPmFuYWx5emUgJiYgbG9nVHJpZ2dlcnMpCisJCUV4cGxhaW5QcmludFRyaWdnZXJz KGVzLCBxdWVyeURlc2MpOworCWlmIChlcy0+Y29zdHMpCisJCUV4cGxhaW5QcmludEpJVFN1bW1h cnkoZXMsIHF1ZXJ5RGVzYyk7CisJRXhwbGFpbkVuZE91dHB1dChlcyk7CisKKwkvKiBSZW1vdmUg bGFzdCBsaW5lIGJyZWFrICovCisJaWYgKGVzLT5zdHItPmxlbiA+IDAgJiYgZXMtPnN0ci0+ZGF0 YVtlcy0+c3RyLT5sZW4gLSAxXSA9PSAnXG4nKQorCQllcy0+c3RyLT5kYXRhWy0tZXMtPnN0ci0+ bGVuXSA9ICdcMCc7CisKKwkvKiBGaXggSlNPTiB0byBvdXRwdXQgYW4gb2JqZWN0ICovCisJaWYg KGxvZ0Zvcm1hdCA9PSBFWFBMQUlOX0ZPUk1BVF9KU09OKQorCXsKKwkJZXMtPnN0ci0+ZGF0YVsw XSA9ICd7JzsKKwkJZXMtPnN0ci0+ZGF0YVtlcy0+c3RyLT5sZW4gLSAxXSA9ICd9JzsKKwl9Cit9 CisKIC8qCiAgKiByZXBvcnRfdHJpZ2dlcnMgLQogICoJCXJlcG9ydCBleGVjdXRpb24gc3RhdHMg Zm9yIGEgc2luZ2xlIHJlbGF0aW9uJ3MgdHJpZ2dlcnMKQEAgLTE4MTUsNyArMTg0NiwxMCBAQCBF eHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCiAJLyoK IAkgKiBXZSBoYXZlIHRvIGZvcmNpYmx5IGNsZWFuIHVwIHRoZSBpbnN0cnVtZW50YXRpb24gc3Rh dGUgYmVjYXVzZSB3ZQotCSAqIGhhdmVuJ3QgZG9uZSBFeGVjdXRvckVuZCB5ZXQuICBUaGlzIGlz IHByZXR0eSBncm90dHkgLi4uCisJICogaGF2ZW4ndCBkb25lIEV4ZWN1dG9yRW5kIHlldC4gIFRo aXMgaXMgcHJldHR5IGdyb3R0eSAuLi4gVGhpcyBjbGVhbnVwCisJICogc2hvdWxkIG5vdCBiZSBk b25lIHdoZW4gdGhlIHF1ZXJ5IGhhcyBhbHJlYWR5IGJlZW4gZXhlY3V0ZWQgYW5kIGV4cGxhaW4K KwkgKiBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkgc2lnbmFsLCBhcyB0aGUgdGFyZ2V0IHF1ZXJ5IG1h eSB1c2UKKwkgKiBpbnN0cnVtZW50YXRpb24gYW5kIGNsZWFuIGl0c2VsZiB1cC4KIAkgKgogCSAq IE5vdGU6IGNvbnRyaWIvYXV0b19leHBsYWluIGNvdWxkIGNhdXNlIGluc3RydW1lbnRhdGlvbiB0 byBiZSBzZXQgdXAKIAkgKiBldmVuIHRob3VnaCB3ZSBkaWRuJ3QgYXNrIGZvciBpdCBoZXJlLiAg QmUgY2FyZWZ1bCBub3QgdG8gcHJpbnQgYW55CkBAIC0xODIzLDcgKzE4NTcsNyBAQCBFeHBsYWlu Tm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCSAqIEluc3RyRW5k TG9vcCBjYWxsIGFueXdheSwgaWYgcG9zc2libGUsIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNh c2VzCiAJICogYXV0b19leHBsYWluIGhhcyB0byBjb250ZW5kIHdpdGguCiAJICovCi0JaWYgKHBs YW5zdGF0ZS0+aW5zdHJ1bWVudCkKKwlpZiAocGxhbnN0YXRlLT5pbnN0cnVtZW50ICYmICFlcy0+ c2lnbmFsZWQpCiAJCUluc3RyRW5kTG9vcChwbGFuc3RhdGUtPmluc3RydW1lbnQpOwogCiAJaWYg KGVzLT5hbmFseXplICYmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5i dWlsZCBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCmluZGV4IGRkNGNkZTQxZDMy Li40YTY0YjhlOWQwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVp bGQKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKQEAgLTIwLDYgKzIwLDcg QEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnZGVmaW5lLmMnLAogICAnZGlzY2FyZC5j JywKICAgJ2Ryb3BjbWRzLmMnLAorICAnZHluYW1pY19leHBsYWluLmMnLAogICAnZXZlbnRfdHJp Z2dlci5jJywKICAgJ2V4cGxhaW4uYycsCiAgICdleHBsYWluX2RyLmMnLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNNYWluLmMKaW5kZXggZmYxMmUyZTEzNjQuLmI2ZjcyZDc4YWU2IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNNYWluLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wYXJ0aXRpb24u aCIKKyNpbmNsdWRlICJjb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaCIKICNpbmNsdWRlICJjb21t YW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUg ImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCkBAIC0zMTIsNiArMzEzLDcgQEAgc3RhbmRhcmRfRXhlY3V0 b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCiAJRGVzdFJlY2VpdmVyICpkZXN0OwogCWJvb2wJ CXNlbmRUdXBsZXM7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVF1ZXJ5RGVzYyAgKm9s ZFF1ZXJ5RGVzYzsKIAogCS8qIHNhbml0eSBjaGVja3MgKi8KIAlBc3NlcnQocXVlcnlEZXNjICE9 IE5VTEwpOwpAQCAtMzI0LDYgKzMyNiwxMyBAQCBzdGFuZGFyZF9FeGVjdXRvclJ1bihRdWVyeURl c2MgKnF1ZXJ5RGVzYywKIAkvKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIHF1ZXJ5J3Mgc25hcHNo b3QgaXMgYWN0aXZlICovCiAJQXNzZXJ0KEdldEFjdGl2ZVNuYXBzaG90KCkgPT0gZXN0YXRlLT5l c19zbmFwc2hvdCk7CiAKKwkvKgorCSAqIFNhdmUgY3VycmVudCBRdWVyeURlc2MgaGVyZSB0byBl bmFibGUgcmV0cmlldmFsIG9mIHRoZSBjdXJyZW50bHkKKwkgKiBydW5uaW5nIHF1ZXJ5RGVzYyBm b3IgbmVzdGVkIHF1ZXJpZXMuCisJICovCisJb2xkUXVlcnlEZXNjID0gR2V0Q3VycmVudFF1ZXJ5 RGVzYygpOworCVNldEN1cnJlbnRRdWVyeURlc2MocXVlcnlEZXNjKTsKKwogCS8qCiAJICogU3dp dGNoIGludG8gcGVyLXF1ZXJ5IG1lbW9yeSBjb250ZXh0CiAJICovCkBAIC0zODYsNiArMzk1LDE0 IEBAIHN0YW5kYXJkX0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLAogCQlJbnN0clN0 b3BOb2RlKHF1ZXJ5RGVzYy0+dG90YWx0aW1lLCBlc3RhdGUtPmVzX3Byb2Nlc3NlZCk7CiAKIAlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJU2V0Q3VycmVudFF1ZXJ5RGVzYyhv bGRRdWVyeURlc2MpOworCisJLyoKKwkgKiBFbnN1cmUgTG9nUXVlcnlQbGFuUGVuZGluZyBpcyBp bml0aWFsaXplZCBpbiBjYXNlIHRoZXJlIHdhcyBubyB0aW1lIGZvcgorCSAqIGxvZ2dpbmcgdGhl IHBsYW4uIE90aGV3aXNlIHBsYW4gd2lsbCBiZSBsb2dnZWQgYXQgdGhlIG5leHQgcXVlcnkKKwkg KiBleGVjdXRpb24gb24gdGhlIHNhbWUgc2Vzc2lvbi4KKwkgKi8KKwlMb2dRdWVyeVBsYW5QZW5k aW5nID0gZmFsc2U7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2Rl LmMKaW5kZXggZjVmOWNmYmVlYWQuLmJmMWUyNmI3YWYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUHJvY25vZGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UHJvY25vZGUuYwpAQCAtNzIsNiArNzIsNyBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIK IAorI2luY2x1ZGUgImNvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFnZy5oIgogI2luY2x1ZGUg ImV4ZWN1dG9yL25vZGVBcHBlbmQuaCIKQEAgLTQzMSw5ICs0MzIsMTAgQEAgRXhlY1NldEV4ZWNQ cm9jTm9kZShQbGFuU3RhdGUgKm5vZGUsIEV4ZWNQcm9jTm9kZU10ZCBmdW5jdGlvbikKIHsKIAkv KgogCSAqIEFkZCBhIHdyYXBwZXIgYXJvdW5kIHRoZSBFeGVjUHJvY05vZGUgY2FsbGJhY2sgdGhh dCBjaGVja3Mgc3RhY2sgZGVwdGgKLQkgKiBkdXJpbmcgdGhlIGZpcnN0IGV4ZWN1dGlvbiBhbmQg bWF5YmUgYWRkcyBhbiBpbnN0cnVtZW50YXRpb24gd3JhcHBlci4KLQkgKiBXaGVuIHRoZSBjYWxs YmFjayBpcyBjaGFuZ2VkIGFmdGVyIGV4ZWN1dGlvbiBoYXMgYWxyZWFkeSBiZWd1biB0aGF0Ci0J ICogbWVhbnMgd2UnbGwgc3VwZXJmbHVvdXNseSBleGVjdXRlIEV4ZWNQcm9jTm9kZUZpcnN0LCBi dXQgdGhhdCBzZWVtcyBvay4KKwkgKiBhbmQgcXVlcnkgbG9nZ2luZyByZXF1ZXN0IGR1cmluZyB0 aGUgZXhlY3V0aW9uIGFuZCBtYXliZSBhZGRzIGFuCisJICogaW5zdHJ1bWVudGF0aW9uIHdyYXBw ZXIuIFdoZW4gdGhlIGNhbGxiYWNrIGlzIGNoYW5nZWQgYWZ0ZXIgZXhlY3V0aW9uCisJICogaGFz IGFscmVhZHkgYmVndW4gdGhhdCBtZWFucyB3ZSdsbCBzdXBlcmZsdW91c2x5IGV4ZWN1dGUKKwkg KiBFeGVjUHJvY05vZGVGaXJzdCwgYnV0IHRoYXQgc2VlbXMgb2suCiAJICovCiAJbm9kZS0+RXhl Y1Byb2NOb2RlUmVhbCA9IGZ1bmN0aW9uOwogCW5vZGUtPkV4ZWNQcm9jTm9kZSA9IEV4ZWNQcm9j Tm9kZUZpcnN0OwpAQCAtNDQxLDI3ICs0NDMsNDMgQEAgRXhlY1NldEV4ZWNQcm9jTm9kZShQbGFu U3RhdGUgKm5vZGUsIEV4ZWNQcm9jTm9kZU10ZCBmdW5jdGlvbikKIAogCiAvKgotICogRXhlY1By b2NOb2RlIHdyYXBwZXIgdGhhdCBwZXJmb3JtcyBzb21lIG9uZS10aW1lIGNoZWNrcywgYmVmb3Jl IGNhbGxpbmcKKyAqIEV4ZWNQcm9jTm9kZSB3cmFwcGVyIHRoYXQgcGVyZm9ybXMgc29tZSBleHRy YSBjaGVja3MsIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGUgcmVsZXZhbnQgbm9kZSBtZXRob2QgKHBv c3NpYmx5IHZpYSBhbiBpbnN0cnVtZW50YXRpb24gd3JhcHBlcikuCisgKgorICogTm9ybWFsbHks IHRoaXMgaXMganVzdCBpbnZva2VkIG9uY2UgZm9yIHRoZSBmaXJzdCBjYWxsIHRvIGFueSBnaXZl biBub2RlLAorICogYW5kIHRoZXJlYWZ0ZXIgd2UgYXJyYW5nZSB0byBjYWxsIEV4ZWNQcm9jTm9k ZUluc3RyIG9yIHRoZSByZWxldmFudCBub2RlCisgKiBtZXRob2QgZGlyZWN0bHkuIEhvd2V2ZXIs IGl0J3MgbGVnYWwgdG8gcmVzZXQgbm9kZS0+RXhlY1Byb2NOb2RlIGJhY2sgdG8KKyAqIHRoaXMg ZnVuY3Rpb24gYXQgYW55IHRpbWUsIGFuZCB3ZSBkbyB0aGF0IHdoZW5ldmVyIHRoZSBxdWVyeSBw bGFuIG1pZ2h0CisgKiBuZWVkIHRvIGJlIHByaW50ZWQsIHNvIHRoYXQgd2Ugb25seSBpbmN1ciB0 aGUgY29zdCBvZiBjaGVja2luZyBmb3IgdGhhdAorICogY2FzZSB3aGVuIHJlcXVpcmVkLgogICov CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKgogRXhlY1Byb2NOb2RlRmlyc3QoUGxhblN0YXRlICpu b2RlKQogewogCS8qCi0JICogUGVyZm9ybSBzdGFjayBkZXB0aCBjaGVjayBkdXJpbmcgdGhlIGZp cnN0IGV4ZWN1dGlvbiBvZiB0aGUgbm9kZS4gIFdlCi0JICogb25seSBkbyBzbyB0aGUgZmlyc3Qg dGltZSByb3VuZCBiZWNhdXNlIGl0IHR1cm5zIG91dCB0byBub3QgYmUgY2hlYXAgb24KLQkgKiBz b21lIGNvbW1vbiBhcmNoaXRlY3R1cmVzIChlZy4geDg2KS4gIFRoaXMgcmVsaWVzIG9uIHRoZSBh c3N1bXB0aW9uCi0JICogdGhhdCBFeGVjUHJvY05vZGUgY2FsbHMgZm9yIGEgZ2l2ZW4gcGxhbiBu b2RlIHdpbGwgYWx3YXlzIGJlIG1hZGUgYXQKLQkgKiByb3VnaGx5IHRoZSBzYW1lIHN0YWNrIGRl cHRoLgorCSAqIFBlcmZvcm0gYSBzdGFjayBkZXB0aCBjaGVjay4gIFdlIGRvbid0IHdhbnQgdG8g ZG8gdGhpcyBhbGwgdGhlIHRpbWUKKwkgKiBiZWNhdXNlIGl0IHR1cm5zIG91dCB0byBub3QgYmUg Y2hlYXAgb24gc29tZSBjb21tb24gYXJjaGl0ZWN0dXJlcyAoZWcuCisJICogeDg2KS4gIFRoaXMg cmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgRXhlY1Byb2NOb2RlIGNhbGxzIGZvciBhCisJ ICogZ2l2ZW4gcGxhbiBub2RlIHdpbGwgYWx3YXlzIGJlIG1hZGUgYXQgcm91Z2hseSB0aGUgc2Ft ZSBzdGFjayBkZXB0aC4KIAkgKi8KIAljaGVja19zdGFja19kZXB0aCgpOwogCisJLyoKKwkgKiBJ ZiB3ZSBoYXZlIGJlZW4gYXNrZWQgdG8gcHJpbnQgdGhlIHF1ZXJ5IHBsYW4sIGRvIHRoYXQgbm93 LiBXZSBkYXJlIG5vdAorCSAqIHRyeSB0byBkbyB0aGlzIGRpcmVjdGx5IGZyb20gQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKSBiZWNhdXNlIHdlIGRvbid0CisJICogcmVhbGx5IGtub3cgd2hhdCB0aGUg ZXhlY3V0b3Igc3RhdGUgaXMgYXQgdGhhdCBwb2ludCwgYnV0IHdlIGFzc3VtZQorCSAqIHRoYXQg d2hlbiBlbnRlcmluZyBhIG5vZGUgdGhlIHN0YXRlIHdpbGwgYmUgc3VmZmljaWVudGx5IGNvbnNp c3RlbnQKKwkgKiB0aGF0IHRyeWluZyB0byBwcmludCB0aGUgcGxhbiBtYWtlcyBzZW5zZS4KKwkg Ki8KKwlpZiAoTG9nUXVlcnlQbGFuUGVuZGluZykKKwkJTG9nUXVlcnlQbGFuKCk7CisKIAkvKgog CSAqIElmIGluc3RydW1lbnRhdGlvbiBpcyByZXF1aXJlZCwgY2hhbmdlIHRoZSB3cmFwcGVyIHRv IG9uZSB0aGF0IGp1c3QKIAkgKiBkb2VzIGluc3RydW1lbnRhdGlvbi4gIE90aGVyd2lzZSB3ZSBj YW4gZGlzcGVuc2Ugd2l0aCBhbGwgd3JhcHBlcnMgYW5kCiAJICogaGF2ZSBFeGVjUHJvY05vZGUo KSBkaXJlY3RseSBjYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbiBmcm9tIG5vdyBvbi4KIAkgKi8K LQlpZiAobm9kZS0+aW5zdHJ1bWVudCkKKwllbHNlIGlmIChub2RlLT5pbnN0cnVtZW50KQogCQlu b2RlLT5FeGVjUHJvY05vZGUgPSBFeGVjUHJvY05vZGVJbnN0cjsKIAllbHNlCiAJCW5vZGUtPkV4 ZWNQcm9jTm9kZSA9IG5vZGUtPkV4ZWNQcm9jTm9kZVJlYWw7CkBAIC01NDYsNiArNTY0LDkxIEBA IE11bHRpRXhlY1Byb2NOb2RlKFBsYW5TdGF0ZSAqbm9kZSkKIAlyZXR1cm4gcmVzdWx0OwogfQog CisvKgorICogV3JhcCBhcnJheSBvZiBQbGFuU3RhdGUgRXhlY1Byb2NOb2RlIHdpdGggRXhlY1By b2NOb2RlRmlyc3QuCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjU2V0RXhlY1Byb2NOb2RlQXJyYXko UGxhblN0YXRlICoqcGxhbnN0YXRlcywgaW50IG5wbGFucykKK3sKKwlpbnQJCQlpOworCisJZm9y IChpID0gMDsgaSA8IG5wbGFuczsgaSsrKQorCQlFeGVjU2V0RXhlY1Byb2NOb2RlUmVjdXJzZShw bGFuc3RhdGVzW2ldKTsKK30KKworLyoKKyAqIFdyYXAgQ3VzdG9tU2NhblN0YXRlIGNoaWxkcmVu J3MgRXhlY1Byb2NOb2RlIHdpdGggRXhlY1Byb2NOb2RlRmlyc3QuCisgKi8KK3N0YXRpYyB2b2lk CitDU1NDaGlsZEV4ZWNTZXRFeGVjUHJvY05vZGVBcnJheShDdXN0b21TY2FuU3RhdGUgKmNzcykK K3sKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZm9yZWFjaChjZWxsLCBjc3MtPmN1c3RvbV9wcykK KwkJRXhlY1NldEV4ZWNQcm9jTm9kZVJlY3Vyc2UoKFBsYW5TdGF0ZSAqKSBsZmlyc3QoY2VsbCkp OworfQorCisvKgorICogUmVjdXJzaXZlbHkgd3JhcCBhbGwgdGhlIHVuZGVybHlpbmcgRXhlY1By b2NOb2RlIHdpdGggRXhlY1Byb2NOb2RlRmlyc3QuCisgKgorICogUmVjdXJzaW9uIGlzIHVzdWFs bHkgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIG5leHQgRXhlY1Byb2NOb2RlKCkgY2FsbCBtYXkgYmUK KyAqIGludm9rZWQgbm90IG9ubHkgdGhyb3VnaCB0aGUgY3VycmVudCBub2RlLCBidXQgYWxzbyB2 aWEgbGVmdHRyZWUsIHJpZ2h0dHJlZSwKKyAqIHN1YlBsYW4sIG9yIG90aGVyIHNwZWNpYWwgY2hp bGQgcGxhbnMuCisgKi8KK3ZvaWQKK0V4ZWNTZXRFeGVjUHJvY05vZGVSZWN1cnNlKFBsYW5TdGF0 ZSAqcHMpCit7CisJRXhlY1NldEV4ZWNQcm9jTm9kZShwcywgcHMtPkV4ZWNQcm9jTm9kZVJlYWwp OworCisJaWYgKHBzLT5sZWZ0dHJlZSAhPSBOVUxMKQorCQlFeGVjU2V0RXhlY1Byb2NOb2RlUmVj dXJzZShwcy0+bGVmdHRyZWUpOworCWlmIChwcy0+cmlnaHR0cmVlICE9IE5VTEwpCisJCUV4ZWNT ZXRFeGVjUHJvY05vZGVSZWN1cnNlKHBzLT5yaWdodHRyZWUpOworCWlmIChwcy0+c3ViUGxhbiAh PSBOVUxMKQorCXsKKwkJTGlzdENlbGwgICAqbDsKKworCQlmb3JlYWNoKGwsIHBzLT5zdWJQbGFu KQorCQl7CisJCQlTdWJQbGFuU3RhdGUgKnNzdGF0ZSA9IChTdWJQbGFuU3RhdGUgKikgbGZpcnN0 KGwpOworCisJCQlFeGVjU2V0RXhlY1Byb2NOb2RlUmVjdXJzZShzc3RhdGUtPnBsYW5zdGF0ZSk7 CisJCX0KKwl9CisKKwkvKiBzcGVjaWFsIGNoaWxkIHBsYW5zICovCisJc3dpdGNoIChub2RlVGFn KHBzLT5wbGFuKSkKKwl7CisJCWNhc2UgVF9BcHBlbmQ6CisJCQlFeGVjU2V0RXhlY1Byb2NOb2Rl QXJyYXkoKChBcHBlbmRTdGF0ZSAqKSBwcyktPmFwcGVuZHBsYW5zLAorCQkJCQkJCQkJICgoQXBw ZW5kU3RhdGUgKikgcHMpLT5hc19ucGxhbnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFw cGVuZDoKKwkJCUV4ZWNTZXRFeGVjUHJvY05vZGVBcnJheSgoKE1lcmdlQXBwZW5kU3RhdGUgKikg cHMpLT5tZXJnZXBsYW5zLAorCQkJCQkJCQkJICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwcyktPm1z X25wbGFucyk7CisJCQlicmVhazsKKwkJY2FzZSBUX0JpdG1hcEFuZDoKKwkJCUV4ZWNTZXRFeGVj UHJvY05vZGVBcnJheSgoKEJpdG1hcEFuZFN0YXRlICopIHBzKS0+Yml0bWFwcGxhbnMsCisJCQkJ CQkJCQkgKChCaXRtYXBBbmRTdGF0ZSAqKSBwcyktPm5wbGFucyk7CisJCQlicmVhazsKKwkJY2Fz ZSBUX0JpdG1hcE9yOgorCQkJRXhlY1NldEV4ZWNQcm9jTm9kZUFycmF5KCgoQml0bWFwT3JTdGF0 ZSAqKSBwcyktPmJpdG1hcHBsYW5zLAorCQkJCQkJCQkJICgoQml0bWFwT3JTdGF0ZSAqKSBwcykt Pm5wbGFucyk7CisJCQlicmVhazsKKwkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJCUV4ZWNTZXRF eGVjUHJvY05vZGVSZWN1cnNlKCgoU3VicXVlcnlTY2FuU3RhdGUgKikgcHMpLT5zdWJwbGFuKTsK KwkJCWJyZWFrOworCQljYXNlIFRfQ3RlU2NhbjoKKwkJCUV4ZWNTZXRFeGVjUHJvY05vZGVSZWN1 cnNlKCgoQ3RlU2NhblN0YXRlICopIHBzKS0+Y3RlcGxhbnN0YXRlKTsKKwkJCWJyZWFrOworCQlj YXNlIFRfQ3VzdG9tU2NhbjoKKwkJCUNTU0NoaWxkRXhlY1NldEV4ZWNQcm9jTm9kZUFycmF5KChD dXN0b21TY2FuU3RhdGUgKikgcHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsK Kwl9Cit9CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNFbmROb2RlCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9wcm9jc2lnbmFsLmMKaW5kZXggMDg3ODIxMzExY2MuLjA3ZmNhYzdmMGJjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlICJh Y2Nlc3MvcGFyYWxsZWwuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgorI2luY2x1ZGUg ImNvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKQEAgLTY5MSw2 ICs2OTIsOSBAQCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcihTSUdOQUxfQVJHUykKIAlpZiAo Q2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfTE9HX01FTU9SWV9DT05URVhUKSkKIAkJSGFuZGxlTG9n TWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogCisJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lH X0xPR19RVUVSWV9QTEFOKSkKKwkJSGFuZGxlTG9nUXVlcnlQbGFuSW50ZXJydXB0KCk7CisKIAlp ZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FHRSkpCiAJCUhh bmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRl eCBkMzU2ODMwZjc1Ni4uYzVhNWNkNDdjOGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3Av cG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTM3LDYgKzM3 LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9h c3luYy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKKyNpbmNsdWRlICJj b21tYW5kcy9keW5hbWljX2V4cGxhaW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgi CiAjaW5jbHVkZSAiY29tbW9uL3BnX3BybmcuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCkBAIC0z NTM4LDYgKzM1MzksOSBAQCBQcm9jZXNzSW50ZXJydXB0cyh2b2lkKQogCWlmIChMb2dNZW1vcnlD b250ZXh0UGVuZGluZykKIAkJUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKIAor CWlmIChMb2dRdWVyeVBsYW5QZW5kaW5nKQorCQlQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0 KCk7CisKIAlpZiAoUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nKQogCQlQcm9jZXNzUGFyYWxs ZWxBcHBseU1lc3NhZ2VzKCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0 L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IGQzMWNi NDVhMDU4Li45MjdjY2RhMDMwNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9n bG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTQwLDYg KzQwLDggQEAgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmcg PSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmcg PSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZyA9 IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5k aW5nID0gZmFsc2U7Cit2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nUXVlcnlQbGFuUGVuZGluZyA9 IGZhbHNlOworCiB2b2xhdGlsZSB1aW50MzIgSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKIHZv bGF0aWxlIHVpbnQzMiBRdWVyeUNhbmNlbEhvbGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50 MzIgQ3JpdFNlY3Rpb25Db3VudCA9IDA7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv eGFjdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hhY3QuaAppbmRleCA0NTI4ZTUxODI5ZS4uM2M2 ZTNiN2YyY2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94YWN0LmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3hhY3QuaApAQCAtNDMyLDYgKzQzMiw3IEBAIHR5cGVkZWYgc3RydWN0 IHhsX3hhY3RfcGFyc2VkX2Fib3J0CiAJVGltZXN0YW1wVHogb3JpZ2luX3RpbWVzdGFtcDsKIH0g eGxfeGFjdF9wYXJzZWRfYWJvcnQ7CiAKK3R5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYyBRdWVyeURl c2M7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlleHRlcm4gZGVmaW5pdGlvbnMKQEAgLTQ1 OCw2ICs0NTksOCBAQCBleHRlcm4gVGltZXN0YW1wVHogR2V0Q3VycmVudFN0YXRlbWVudFN0YXJ0 VGltZXN0YW1wKHZvaWQpOwogZXh0ZXJuIFRpbWVzdGFtcFR6IEdldEN1cnJlbnRUcmFuc2FjdGlv blN0b3BUaW1lc3RhbXAodm9pZCk7CiBleHRlcm4gdm9pZCBTZXRDdXJyZW50U3RhdGVtZW50U3Rh cnRUaW1lc3RhbXAodm9pZCk7CiBleHRlcm4gaW50CUdldEN1cnJlbnRUcmFuc2FjdGlvbk5lc3RM ZXZlbCh2b2lkKTsKK1F1ZXJ5RGVzYyAgKkdldEN1cnJlbnRRdWVyeURlc2Modm9pZCk7Cit2b2lk CQlTZXRDdXJyZW50UXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsKIGV4dGVybiBib29s IFRyYW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFuc2FjdGlvbklkKFRyYW5zYWN0aW9uSWQgeGlkKTsK IGV4dGVybiB2b2lkIENvbW1hbmRDb3VudGVySW5jcmVtZW50KHZvaWQpOwogZXh0ZXJuIHZvaWQg Rm9yY2VTeW5jQ29tbWl0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggMDNlODJk MjhjODcuLjZiNWFiMThiZWJkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTg2MDksNiAr ODYwOSwxMiBAQAogICBwcm9yZXR0eXBlID0+ICdib29sJywgcHJvYXJndHlwZXMgPT4gJ2ludDQn LAogICBwcm9zcmMgPT4gJ3BnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cycgfSwKIAorIyBs b2dnaW5nIHBsYW4gb2YgdGhlIHJ1bm5pbmcgcXVlcnkgb24gdGhlIHNwZWNpZmllZCBiYWNrZW5k Cit7IG9pZCA9PiAnODAwMCcsIGRlc2NyID0+ICdsb2cgcGxhbiBvZiB0aGUgcnVubmluZyBxdWVy eSBvbiB0aGUgc3BlY2lmaWVkIGJhY2tlbmQnLAorICBwcm9uYW1lID0+ICdwZ19sb2dfcXVlcnlf cGxhbicsCisgIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHBy b2FyZ3R5cGVzID0+ICdpbnQ0JywgcHJvc3JjID0+ICdwZ19sb2dfcXVlcnlfcGxhbicgfSwKKwog IyBub24tcGVyc2lzdGVudCBzZXJpZXMgZ2VuZXJhdG9yCiB7IG9pZCA9PiAnMTA2NicsIGRlc2Ny ID0+ICdub24tcGVyc2lzdGVudCBzZXJpZXMgZ2VuZXJhdG9yJywKICAgcHJvbmFtZSA9PiAnZ2Vu ZXJhdGVfc2VyaWVzJywgcHJvcm93cyA9PiAnMTAwMCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2R5bmFt aWNfZXhwbGFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44M2Mx NTg3MzFhMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2R5bmFtaWNf ZXhwbGFpbi5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGR5 bmFtaWNfZXhwbGFpbi5oCisgKgkgIHByb3RvdHlwZXMgZm9yIGR5bmFtaWNfZXhwbGFpbi5jCisg KgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQtNSwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUv Y29tbWFuZHMvZHluYW1pY19leHBsYWluLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2lmbmRlZiBEWU5BTUlDX0VYUExBSU5fSAorI2RlZmluZSBEWU5BTUlDX0VYUExBSU5fSAorCisj aW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWlu X3N0YXRlLmgiCisKK2V4dGVybiB2b2lkIEhhbmRsZUxvZ1F1ZXJ5UGxhbkludGVycnVwdCh2b2lk KTsKK2V4dGVybiB2b2lkIFJlc2V0TG9nUXVlcnlQbGFuU3RhdGUodm9pZCk7CitleHRlcm4gdm9p ZCBSZXNldFByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHRBY3RpdmUodm9pZCk7CitleHRlcm4g dm9pZCBQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIFR1cGxlVGFi bGVTbG90ICpFeGVjUHJvY05vZGVXaXRoRXhwbGFpbihQbGFuU3RhdGUgKnBzKTsKK2V4dGVybiB2 b2lkIExvZ1F1ZXJ5UGxhbih2b2lkKTsKK2V4dGVybiBEYXR1bSBwZ19sb2dfcXVlcnlfcGxhbihQ R19GVU5DVElPTl9BUkdTKTsKKworI2VuZGlmCQkJCQkJCS8qIERZTkFNSUNfRVhQTEFJTl9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9leHBsYWluLmgKaW5kZXggNmU1MWQ1MGVmYzcuLjBkYzE2MGZhN2I0IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvZXhwbGFpbi5oCkBAIC03MCw4ICs3MCwxMCBAQCBleHRlcm4gdm9pZCBFeHBsYWlu T25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sCiAJCQkJ CQkgICBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2UsCiAJCQkJCQkgICBjb25zdCBNZW1vcnlD b250ZXh0Q291bnRlcnMgKm1lbV9jb3VudGVycyk7CiAKLWV4dGVybiB2b2lkIEV4cGxhaW5Qcmlu dFBsYW4oRXhwbGFpblN0YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURlc2MpOwotZXh0ZXJuIHZv aWQgRXhwbGFpblByaW50VHJpZ2dlcnMoRXhwbGFpblN0YXRlICplcywKK2V4dGVybiB2b2lkIEV4 cGxhaW5QcmludFBsYW4oc3RydWN0IEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5RGVzYyAqcXVlcnlE ZXNjKTsKK2V4dGVybiB2b2lkIEV4cGxhaW5QcmludFRyaWdnZXJzKHN0cnVjdCBFeHBsYWluU3Rh dGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYyk7CitleHRlcm4gdm9pZCBFeHBsYWluUHJpbnRQ bGFuKHN0cnVjdCBFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYyk7CitleHRl cm4gdm9pZCBFeHBsYWluUHJpbnRUcmlnZ2VycyhzdHJ1Y3QgRXhwbGFpblN0YXRlICplcywKIAkJ CQkJCQkJIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsKIAogZXh0ZXJuIHZvaWQgRXhwbGFpblByaW50 SklUU3VtbWFyeShFeHBsYWluU3RhdGUgKmVzLApAQCAtODAsNSArODIsOCBAQCBleHRlcm4gdm9p ZCBFeHBsYWluUHJpbnRKSVRTdW1tYXJ5KEV4cGxhaW5TdGF0ZSAqZXMsCiBleHRlcm4gdm9pZCBF eHBsYWluUXVlcnlUZXh0KEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsK IGV4dGVybiB2b2lkIEV4cGxhaW5RdWVyeVBhcmFtZXRlcnMoRXhwbGFpblN0YXRlICplcywKIAkJ CQkJCQkJICAgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIGludCBtYXhsZW4pOworZXh0ZXJuIHZvaWQg RXhwbGFpblN0cmluZ0Fzc2VtYmxlKHN0cnVjdCBFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2Mg KnF1ZXJ5RGVzYywKKwkJCQkJCQkJICBpbnQgbG9nRm9ybWF0LCBib29sIGxvZ1RyaWdnZXJzLAor CQkJCQkJCQkgIGludCBsb2dQYXJhbWV0ZXJNYXhMZW5ndGgpOwogCiAjZW5kaWYJCQkJCQkJLyog RVhQTEFJTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluX3N0 YXRlLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluX3N0YXRlLmgKaW5kZXggYmEwNzNi ODY5MTguLmJmNDBmZGFiZmY1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBs YWluX3N0YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oCkBA IC03MSw2ICs3MSw3IEBAIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0ZQogCQkJCQkJCQkgKiBl bnRyeSAqLwogCS8qIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgcGxhbiBub2RlICovCiAJ RXhwbGFpbldvcmtlcnNTdGF0ZSAqd29ya2Vyc19zdGF0ZTsgLyogbmVlZGVkIGlmIHBhcmFsbGVs IHBsYW4gKi8KKwlib29sCQlzaWduYWxlZDsJCS8qIHdoZXRoZXIgZXhwbGFpbiBpcyBjYWxsZWQg Ynkgc2lnbmFsICovCiAJLyogZXh0ZW5zaW9ucyAqLwogCXZvaWQJICAqKmV4dGVuc2lvbl9zdGF0 ZTsKIAlpbnQJCQlleHRlbnNpb25fc3RhdGVfYWxsb2NhdGVkOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKaW5kZXggMzI0OGU3OGNkMjguLmM2NmRmMTFlNzFhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKQEAgLTI5NSw2ICsyOTUsNyBAQCBleHRlcm4gdm9pZCBFdmFsUGxhblF1YWxFbmQoRVBRU3Rh dGUgKmVwcXN0YXRlKTsKIGV4dGVybiBQbGFuU3RhdGUgKkV4ZWNJbml0Tm9kZShQbGFuICpub2Rl LCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncyk7CiBleHRlcm4gdm9pZCBFeGVjU2V0RXhlY1By b2NOb2RlKFBsYW5TdGF0ZSAqbm9kZSwgRXhlY1Byb2NOb2RlTXRkIGZ1bmN0aW9uKTsKIGV4dGVy biBOb2RlICpNdWx0aUV4ZWNQcm9jTm9kZShQbGFuU3RhdGUgKm5vZGUpOworZXh0ZXJuIHZvaWQg RXhlY1NldEV4ZWNQcm9jTm9kZVJlY3Vyc2UoUGxhblN0YXRlICpwcyk7CiBleHRlcm4gdm9pZCBF eGVjRW5kTm9kZShQbGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1NodXRkb3duTm9k ZShQbGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1NldFR1cGxlQm91bmQoaW50NjQg dHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9ub2RlKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggMWJlZjk4 NDcxYzMuLjIyYjk0NWU5MThjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAor KysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtOTYsNiArOTYsNyBAQCBleHRlcm4gUEdE TExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmc7 CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxCYXJy aWVyUGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9n TWVtb3J5Q29udGV4dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0 b21pY190IElkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nOworZXh0ZXJuIFBHRExMSU1QT1JU IHZvbGF0aWxlIHNpZ19hdG9taWNfdCBMb2dRdWVyeVBsYW5QZW5kaW5nOwogCiBleHRlcm4gUEdE TExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENoZWNrQ2xpZW50Q29ubmVjdGlvblBlbmRp bmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENsaWVudENvbm5l Y3Rpb25Mb3N0OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCBhZmVlYjFjYTAxOS4uZWEy NjI0MmM4NjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisr KyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNSw2ICszNSw4IEBAIHR5 cGVkZWYgZW51bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcsCS8qIGFzayB3YWxzZW5k ZXJzIHRvIHByZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBST0NTSUdfQkFSUklFUiwJCQkvKiBn bG9iYWwgYmFycmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQs IC8qIGFzayBiYWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzICovCisJUFJPQ1NJR19M T0dfUVVFUllfUExBTiwJCS8qIGFzayBiYWNrZW5kIHRvIGxvZyBwbGFuIG9mIHRoZSBjdXJyZW50 CisJCQkJCQkJCSAqIHF1ZXJ5ICovCiAJUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFLCAv KiBNZXNzYWdlIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwogCiAJLyogUmVjb3Zlcnkg Y29uZmxpY3QgcmVhc29ucyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9taXNjX2Z1bmN0aW9ucy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21pc2NfZnVu Y3Rpb25zLm91dAppbmRleCBjM2IyYjlkODYwMy4uYzJjYzI2MDllOTQgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CkBAIC0zNjYsNiArMzY2LDQ5IEBA IFJFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0 cyhpbnRlZ2VyKQogICBGUk9NIHJlZ3Jlc3NfbG9nX21lbW9yeTsKIERST1AgUk9MRSByZWdyZXNz X2xvZ19tZW1vcnk7CiAtLQorLS0gcGdfbG9nX3F1ZXJ5X3BsYW4oKQorLS0KKy0tIFBsYW5zIGFy ZSBsb2dnZWQgYW5kIHRoZXkgYXJlIG5vdCByZXR1cm5lZCB0byB0aGUgZnVuY3Rpb24uCistLSBG dXJ0aGVybW9yZSwgdGhlaXIgY29udGVudHMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBvcHRp bWl6ZXIuIEhvd2V2ZXIsCistLSB3ZSBjYW4gYXQgbGVhc3QgdmVyaWZ5IHRoYXQgdGhlIGNvZGUg ZG9lc24ndCBmYWlsLCBhbmQgdGhhdCB0aGUKKy0tIHBlcm1pc3Npb25zIGFyZSBzZXQgcHJvcGVy bHkuCitXSVRIIHQgQVMgTUFURVJJQUxJWkVEIChTRUxFQ1QgcGdfbG9nX3F1ZXJ5X3BsYW4ocGdf YmFja2VuZF9waWQoKSkpCisgICAgU0VMRUNUICogRlJPTSB0OworIHBnX2xvZ19xdWVyeV9wbGFu IAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworQ1JFQVRFIFJPTEUgcmVncmVz c19sb2dfcGxhbjsKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19w bGFuJywKKyAgJ3BnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpJywgJ0VYRUNVVEUnKTsgLS0gbm8K KyBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZgor KDEgcm93KQorCitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGlu dGVnZXIpCisgIFRPIHJlZ3Jlc3NfbG9nX3BsYW47CitTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZp bGVnZSgncmVncmVzc19sb2dfcGxhbicsCisgICdwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKScs ICdFWEVDVVRFJyk7IC0tIHllcworIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFVCBST0xFIHJlZ3Jlc3NfbG9nX3BsYW47 CitXSVRIIHQgQVMgTUFURVJJQUxJWkVEIChTRUxFQ1QgcGdfbG9nX3F1ZXJ5X3BsYW4ocGdfYmFj a2VuZF9waWQoKSkpCisgICAgU0VMRUNUICogRlJPTSB0OworIHBnX2xvZ19xdWVyeV9wbGFuIAor LS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworUkVTRVQgUk9MRTsKK1JFVk9LRSBF WEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpCisgIEZST00gcmVn cmVzc19sb2dfcGxhbjsKK0RST1AgUk9MRSByZWdyZXNzX2xvZ19wbGFuOworLS0KIC0tIFRlc3Qg c29tZSBidWlsdC1pbiBTUkZzCiAtLQogLS0gVGhlIG91dHB1dHMgb2YgdGhlc2UgYXJlIHZhcmlh YmxlLCBzbyB3ZSBjYW4ndCBqdXN0IHByaW50IHRoZWlyIHJlc3VsdHMKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL21pc2NfZnVuY3Rpb25zLnNxbAppbmRleCAyMzc5MmM0MTMyYS4uODhiZTRiNmVmMmEgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwKQEAgLTE0Myw2ICsxNDMsMzgg QEAgUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzKGludGVnZXIpCiAKIERST1AgUk9MRSByZWdyZXNzX2xvZ19tZW1vcnk7CiAKKy0tCistLSBw Z19sb2dfcXVlcnlfcGxhbigpCistLQorLS0gUGxhbnMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUg bm90IHJldHVybmVkIHRvIHRoZSBmdW5jdGlvbi4KKy0tIEZ1cnRoZXJtb3JlLCB0aGVpciBjb250 ZW50cyBjYW4gdmFyeSBkZXBlbmRpbmcgb24gdGhlIG9wdGltaXplci4gSG93ZXZlciwKKy0tIHdl IGNhbiBhdCBsZWFzdCB2ZXJpZnkgdGhhdCB0aGUgY29kZSBkb2Vzbid0IGZhaWwsIGFuZCB0aGF0 IHRoZQorLS0gcGVybWlzc2lvbnMgYXJlIHNldCBwcm9wZXJseS4KKworV0lUSCB0IEFTIE1BVEVS SUFMSVpFRCAoU0VMRUNUIHBnX2xvZ19xdWVyeV9wbGFuKHBnX2JhY2tlbmRfcGlkKCkpKQorICAg IFNFTEVDVCAqIEZST00gdDsKKworQ1JFQVRFIFJPTEUgcmVncmVzc19sb2dfcGxhbjsKKworU0VM RUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX3BsYW4nLAorICAncGdfbG9n X3F1ZXJ5X3BsYW4oaW50ZWdlciknLCAnRVhFQ1VURScpOyAtLSBubworCitHUkFOVCBFWEVDVVRF IE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpCisgIFRPIHJlZ3Jlc3NfbG9n X3BsYW47CisKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19wbGFu JywKKyAgJ3BnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpJywgJ0VYRUNVVEUnKTsgLS0geWVzCisK K1NFVCBST0xFIHJlZ3Jlc3NfbG9nX3BsYW47CitXSVRIIHQgQVMgTUFURVJJQUxJWkVEIChTRUxF Q1QgcGdfbG9nX3F1ZXJ5X3BsYW4ocGdfYmFja2VuZF9waWQoKSkpCisgICAgU0VMRUNUICogRlJP TSB0OworUkVTRVQgUk9MRTsKKworUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX3F1 ZXJ5X3BsYW4oaW50ZWdlcikKKyAgRlJPTSByZWdyZXNzX2xvZ19wbGFuOworCitEUk9QIFJPTEUg cmVncmVzc19sb2dfcGxhbjsKKwogLS0KIC0tIFRlc3Qgc29tZSBidWlsdC1pbiBTUkZzCiAtLQot LSAKMi40OC4xCgo= --=_5afc857134a53d38480c6c1f46264180--