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 1uzaRa-005E6Q-Hd for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Sep 2025 12:42:30 +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 1uzaRY-006oQE-3P for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Sep 2025 12:42:28 +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 1uzaRX-006oNj-DE for pgsql-hackers@lists.postgresql.org; Fri, 19 Sep 2025 12:42:27 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1uzaRQ-001Gj2-2r for pgsql-hackers@lists.postgresql.org; Fri, 19 Sep 2025 12:42:25 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id 001D8613DB; Fri, 19 Sep 2025 21:42:16 +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="=_b0a6acef959b16ccae3d8589b3c02c75" Date: Fri, 19 Sep 2025 21:42:16 +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> <6143f00af4bfdba95a85cf866f4acb41@oss.nttdata.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <9886a201a5da64eab1472db6c70473a8@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 --=_b0a6acef959b16ccae3d8589b3c02c75 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable On Wed, Sep 17, 2025 at 12:06=E2=80=AFAM Robert Haas =20 wrote: Thanks for the comments! > On Tue, Sep 16, 2025 at 9:30=E2=80=AFAM torikoshia =20 > wrote: > > I'm not sure if this is the best approach, but I changed them to log > > nothing in these cases. > > In addition to the reason you mentioned, I found that when > > pg_log_query_plan() is executed repeatedly at very short intervals > > (e.g., every 0.01 seconds), ereport() could lead to > > ProcessLogQueryPlanInterrupt() being invoked again inside errfinish v= ia > > CFI(), which resulted in a stack overflow. > > While this could be processed with check_stack_depth(), it doesn=E2=80= =99t seem > > worthwhile to use it just to emit a message of limited usefulness. >=20 > Yes, it seems as though we should set a flag to prevent reentrancy > here -- if we are already in the code path where we log the query > plan, we shouldn't accept an interrupt telling us to log the query > plan. I haven't looked at the updated patch so maybe that's not > necessary for some reason, but in general reentrancy is a concern with > features of this type. Agreed. In the attached patch added a flag. > > Additionally, there are other cases where the plan cannot be logged > > (e.g., when the query is in a state which ExecProcNode will not be > > invoked any further). > > So instead, I added the following note to the documentation: > > > > =C2=A0 =C2=A0Note that depending on the execution state of the query, > > =C2=A0 =C2=A0it may not be possible to log the plan. >=20 > This seems to me to be too vague to be useful. I expect readers to > read this to mean "sometimes this feature may not work." But that > seems too pessimistic if the only case in which it doesn't work is > when we are the very tail end of the query and it was just about to > stop running, we probably don't need to document anything, as it will > happen rarely and will look about the same as if the query finished > very slightly earlier and we just missed it. If there are more cases > than that in which this feature won't work, we should talk about > those, and maybe fix them. As you described, I think it's a rare case to have no chance to log=20 plan, removed the note. > > > 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 desir= e. > > > > That makes sense, but > > I had used the following message from pg_log_backend_memory_contexts(= ) > > as a reference > > and put the PID in the message: > > > > =C2=A0 =C2=A0errmsg("logging memory contexts of PID %d", MyProcPid)))= ; > > > > Since both pg_log_query_plan() and pg_log_backend_memory_contexts() > > output information about another other backend, it feels slightly odd > > that their log messages would be inconsistent. > > Perhaps should we consider changing pg_log_backend_memory_contexts() = for > > consistency as well? >=20 > Yeah, maybe. I don't know what the reason behind the unusual framing > of that message is, so perhaps there is an argument for being > consistent with it, rather than changing it. However, it looks unusual > to me. Looking back at the discussion on the development of=20 pg_log_backend_memory_contexts(), it seems that I had already proposed=20 outputting the PID in the log message from the very beginning [1]. Originally, I had suggested making the memory context available directly=20 as a function result rather than logging it, but we gave up on that idea=20 and switched to logging, so I think the PID output may be a leftover=20 from that change. [1]=20 https://www.postgresql.org/message-id/70ae4b79eb8b0dcf42161c80a00e3f22%40= oss.nttdata.com It=E2=80=99s possible that users who don=E2=80=99t include %p in log_line= _prefix could=20 have trouble identifying which PID=E2=80=99s memory context is being logg= ed when=20 pg_log_backend_memory_contexts() is called concurrently for multiple=20 processes. However, I suspect that few users run without %p in log_line_prefix. So I think it would be fine to remove the PID from=20 pg_log_backend_memory_contexts()=E2=80=99s log message when this patch is= =20 merged. > > With this change, while running the query below, pg_log_query_plan() = is > > now able to output the plan for SELECT gen_subtxn(g) FROM > > generate_series(1,1000000) g as below: >=20 > Excellent! >=20 > > This happens when the plan-logging function is called after an ERROR = is > > raised but before the transaction state stack is popped. > > So in the attached patch, as in the previous version, I reset QueryDe= sc > > to NULL during that interval. >=20 > I think a better fix would be to dump nothing when the current > (sub)transaction is (sub)aborted. If you don't do that, then you're > hoping that you can manage to set QueryDesc to null quickly enough > after the transaction is no longer in a valid state, which does not > seem like a great way to make things robust. To detect =E2=80=9Cwhen the current (sub)transaction is (sub)aborted,=E2=80= =9D attached=20 patch uses IsTransactionState(). With that, the logging code is not executed when the transaction state=20 is anything other than TRANS_INPROGRESS, and in some cases this works as=20 expected. On the other hand, when calling pg_log_query_plan() repeatedly during=20 make installcheck, I still encountered cases where segfaults occurred. Specifically, this seems to happen when, after a (sub)abort, the next=20 query starts in the same session and a CFI() occurs after=20 StartTransaction() has been executed but before Executor() runs. In=20 that case, the transaction state has already been changed to=20 TRANS_INPROGRESS by StartTransaction(), but the QueryDesc from the=20 aborted transaction is still present, which causes the problem. To address this, attached patch initializes QueryDesc within=20 CleanupTransaction(). Since this function already resets various members of=20 CurrentTransactionState, I feel it=E2=80=99s not so unreasonable to initi= alize=20 QueryDesc there as well. Does this approach make sense, or is it problematic? > > > +-- Note that we're using a slightly more complex query here becaus= e > > > +-- a simple 'SELECT pg_log_query_plan(pg_backend_pid())' would fin= ish > > > +-- before it reaches the code path that actually outputs the plan. > > > +SELECT result FROM (SELECT pg_log_query_plan(pg_backend_pid())) > > > result; > > > + result > > > +-------- > > > + (t) > > > +(1 row) > > > > > > 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: > > > > =C2=A0 =C2=A0WITH t AS MATERIALIZED (SELECT pg_log_query_plan(pg_back= end_pid())) > > =C2=A0 =C2=A0 =C2=A0SELECT * FROM t; >=20 > I don't see why that wouldn't have a race condition? The idea is that (1) pg_log_query_plan() in the WITH clause wraps=20 ExecProcNode, and then (2) SELECT * FROM t invokes ExecProcNode, which=20 causes the plan to be logged. I think that=E2=80=99s what currently happ= ens on=20 HEAD. When you mention a "race condition", do you mean that if the timing of=20 the wrapping in step (1) -- that is, when CFI() is called -- changes in=20 the future, then the logging might not work? >> few chance to log the plan, attached patch added T_CteScan handling. >=20 > Shouldn't all node types be handled equally? IIUC the node types that would need to be handled in the same way are=20 those PlanState subclasses that satisfy both of the following: - Structs in execnodes.h whose first field is a PlanState, and - Subclasses that also contain another PlanState as a member in addition=20 to the first field. If that=E2=80=99s the case, it seems to me that we already have the full = list. BTW I haven=E2=80=99t looked into this in detail yet, but I=E2=80=99m a l= ittle curious=20 whether the absence of T_CteScan in functions like=20 planstate_tree_walker_impl() is intentional. --=20 Regards, -- Atsushi Torikoshi Seconded from NTT DATA Japan Corporation to SRA OSS K.K. --=_b0a6acef959b16ccae3d8589b3c02c75 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v48-0001-Add-function-to-log-the-plan-of-the-currently-ru.patch Content-Disposition: attachment; filename=v48-0001-Add-function-to-log-the-plan-of-the-currently-ru.patch; size=34970 RnJvbSAzN2Q5ZTkzYjBkYmZkNWM2NjI4MjcxNjBiZmU4NWU0ZThlM2ZkNzZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IEZyaSwgMTkgU2VwIDIwMjUgMjE6Mjk6NTEgKzA5MDAKU3ViamVjdDog W1BBVENIIHY0OF0gQWRkIGZ1bmN0aW9uIHRvIGxvZyB0aGUgcGxhbiBvZiB0aGUgY3VycmVudGx5 IHJ1bm5pbmcKIHF1ZXJ5CgpDdXJyZW50bHksIHdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIHF1ZXJ5 IGV4ZWN1dGlvbiB0byBmaW5pc2gKdG8ga25vdyBpdHMgcGxhbiBlaXRoZXIgdXNpbmcgRVhQTEFJ TiBBTkFMWVpFIG9yIGF1dG9fZXhwbGFpbi4KVGhpcyBpcyBub3Qgc28gY29udmVuaWVudCwgZm9y IGV4YW1wbGUgd2hlbiBpbnZlc3RpZ2F0aW5nCmxvbmctcnVubmluZyBxdWVyaWVzIG9uIHByb2R1 Y3Rpb24gZW52aXJvbm1lbnRzLgpUbyBpbXByb3ZlIHRoaXMgc2l0dWF0aW9uLCB0aGlzIHBhdGNo IGFkZHMgcGdfbG9nX3F1ZXJ5X3BsYW4oKQpmdW5jdGlvbiB0aGF0IHJlcXVlc3RzIHRvIGxvZyB0 aGUgcGxhbiBvZiB0aGUgY3VycmVudGx5CmV4ZWN1dGluZyBxdWVyeS4KCk9uIHJlY2VpcHQgb2Yg dGhlIHJlcXVlc3QsIEV4ZWNQcm9jTm9kZXMgb2YgdGhlIGN1cnJlbnQgcGxhbgpub2RlIGFuZCBp dHMgc3Vic2lkaWFyeSBub2RlcyBhcmUgd3JhcHBlZCB3aXRoCkV4ZWNQcm9jTm9kZUZpcnN0LCB3 aGljaCBpbXBsZWxlbWVudHMgbG9nZ2luZyBxdWVyeSBwbGFuLgpXaGVuIGV4ZWN1dG9yIGV4ZWN1 dGVzIHRoZSBvbmUgb2YgdGhlIHdyYXBwZWQgbm9kZXMsIHRoZQpxdWVyeSBwbGFuIGlzIGxvZ2dl ZC4KCk91ciBpbml0aWFsIGlkZWEgd2FzIHRvIHNlbmQgYSBzaWduYWwgdG8gdGhlIHRhcmdldCBi YWNrZW5kCnByb2Nlc3MsIHdoaWNoIGludm9rZXMgRVhQTEFJTiBsb2dpYyBhdCB0aGUgbmV4dApD SEVDS19GT1JfSU5URVJSVVBUUygpIGNhbGwuIEhvd2V2ZXIsIHdlIHJlYWxpemVkIGR1cmluZwpw cm90b3R5cGluZyB0aGF0IEVYUExBSU4gaXMgY29tcGxleCBhbmQgbWF5IG5vdCBiZSBzYWZlbHkK ZXhlY3V0ZWQgYXQgYXJiaXRyYXJ5IGludGVycnVwdCBwb2ludHMuCgpCeSBkZWZhdWx0LCBvbmx5 IHN1cGVydXNlcnMgYXJlIGFsbG93ZWQgdG8gcmVxdWVzdCB0byBsb2cgdGhlCnBsYW5zIGJlY2F1 c2UgYWxsb3dpbmcgYW55IHVzZXJzIHRvIGlzc3VlIHRoaXMgcmVxdWVzdCBhdCBhbgp1bmJvdW5k ZWQgcmF0ZSB3b3VsZCBjYXVzZSBsb3RzIG9mIGxvZyBtZXNzYWdlcyBhbmQgd2hpY2ggY2FuCmxl YWQgdG8gZGVuaWFsIG9mIHNlcnZpY2UuCgpUb2RvOiBSZW1vdmUgdGhlIFBJRCBmcm9tIHRoZSBs b2cgb3V0cHV0IG9mCnBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpIHRvIG1hdGNoIHRo aXMgcGF0Y2guCi0tLQogY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19leHBsYWluLmMgICAgICAg ICAgfCAgMjQgKy0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWFkbWluLnNnbWwgICAgICAgICAg ICB8ICAyNCArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyAgICAgICAgICAg IHwgIDI5ICsrLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCAgICAg fCAgIDIgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAg IDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZHluYW1pY19leHBsYWluLmMgICAgICAgfCAxODEg KysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAg ICAgICAgICAgfCAgMzggKysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQgICAg ICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAg ICAgICAgfCAgMTcgKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICAg ICAgIHwgMTIzICsrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWdu YWwuYyAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAg ICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgICAg ICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94YWN0LmggICAgICAgICAgICAgICAg ICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAg IHwgICA2ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5oICAgICAgIHwg IDI1ICsrKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oICAgICAgICAgICAgICAgfCAg IDkgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCAgICAgICAgIHwgICAx ICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAgICAgICAgICAgIHwgICAxICsK IHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNy Yy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oICAgICAgICAgICAgIHwgICAyICsKIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0IHwgIDQzICsrKysrCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwgICAgICB8ICAzMiArKysrCiAyMyBm aWxlcyBjaGFuZ2VkLCA1MzcgaW5zZXJ0aW9ucygrKSwgMzYgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29tbWFuZHMvZHluYW1pY19leHBsYWluLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9jb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaAoKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jIGIvY29udHJpYi9h dXRvX2V4cGxhaW4vYXV0b19leHBsYWluLmMKaW5kZXggMWY0YmFkYjQ5MjguLjZjNDIxN2M5ZDFm IDEwMDY0NAotLS0gYS9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYworKysgYi9j b250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYwpAQCAtMTUsNiArMTUsNyBAQAogI2lu Y2x1ZGUgPGxpbWl0cy5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvZHluYW1pY19leHBsYWluLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFp bi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fZm9ybWF0LmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvZXhwbGFpbl9zdGF0ZS5oIgpAQCAtNDA0LDI2ICs0MDUsOSBAQCBleHBsYWluX0V4ZWN1 dG9yRW5kKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKQogCQkJZXMtPmZvcm1hdCA9IGF1dG9fZXhwbGFp bl9sb2dfZm9ybWF0OwogCQkJZXMtPnNldHRpbmdzID0gYXV0b19leHBsYWluX2xvZ19zZXR0aW5n czsKIAotCQkJRXhwbGFpbkJlZ2luT3V0cHV0KGVzKTsKLQkJCUV4cGxhaW5RdWVyeVRleHQoZXMs IHF1ZXJ5RGVzYyk7Ci0JCQlFeHBsYWluUXVlcnlQYXJhbWV0ZXJzKGVzLCBxdWVyeURlc2MtPnBh cmFtcywgYXV0b19leHBsYWluX2xvZ19wYXJhbWV0ZXJfbWF4X2xlbmd0aCk7Ci0JCQlFeHBsYWlu UHJpbnRQbGFuKGVzLCBxdWVyeURlc2MpOwotCQkJaWYgKGVzLT5hbmFseXplICYmIGF1dG9fZXhw bGFpbl9sb2dfdHJpZ2dlcnMpCi0JCQkJRXhwbGFpblByaW50VHJpZ2dlcnMoZXMsIHF1ZXJ5RGVz Yyk7Ci0JCQlpZiAoZXMtPmNvc3RzKQotCQkJCUV4cGxhaW5QcmludEpJVFN1bW1hcnkoZXMsIHF1 ZXJ5RGVzYyk7Ci0JCQlFeHBsYWluRW5kT3V0cHV0KGVzKTsKLQotCQkJLyogUmVtb3ZlIGxhc3Qg bGluZSBicmVhayAqLwotCQkJaWYgKGVzLT5zdHItPmxlbiA+IDAgJiYgZXMtPnN0ci0+ZGF0YVtl cy0+c3RyLT5sZW4gLSAxXSA9PSAnXG4nKQotCQkJCWVzLT5zdHItPmRhdGFbLS1lcy0+c3RyLT5s ZW5dID0gJ1wwJzsKLQotCQkJLyogRml4IEpTT04gdG8gb3V0cHV0IGFuIG9iamVjdCAqLwotCQkJ aWYgKGF1dG9fZXhwbGFpbl9sb2dfZm9ybWF0ID09IEVYUExBSU5fRk9STUFUX0pTT04pCi0JCQl7 Ci0JCQkJZXMtPnN0ci0+ZGF0YVswXSA9ICd7JzsKLQkJCQllcy0+c3RyLT5kYXRhW2VzLT5zdHIt PmxlbiAtIDFdID0gJ30nOwotCQkJfQorCQkJRXhwbGFpblN0cmluZ0Fzc2VtYmxlKGVzLCBxdWVy eURlc2MsIGF1dG9fZXhwbGFpbl9sb2dfZm9ybWF0LAorCQkJCQkJCQkgIGF1dG9fZXhwbGFpbl9s b2dfdHJpZ2dlcnMsCisJCQkJCQkJCSAgYXV0b19leHBsYWluX2xvZ19wYXJhbWV0ZXJfbWF4X2xl bmd0aCk7CiAKIAkJCS8qCiAJCQkgKiBOb3RlOiB3ZSByZWx5IG9uIHRoZSBleGlzdGluZyBsb2dn aW5nIG9mIGNvbnRleHQgb3IKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtYWRt aW4uc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtYWRtaW4uc2dtbAppbmRleCAxYjQ2NWJj OGJhNy4uNjZiZmI1YWI0ZGYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtYWRt aW4uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWFkbWluLnNnbWwKQEAgLTE4NCw2 ICsxODQsMzAgQEAKICAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgIDwvcm93PgogCisgICAg ICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xl PSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFy eT5wZ19sb2dfcXVlcnlfcGxhbjwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAg ICAgIDxmdW5jdGlvbj5wZ19sb2dfcXVlcnlfcGxhbjwvZnVuY3Rpb24+ICggPHBhcmFtZXRlcj5w aWQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwvdHlwZT4gKQorICAgICAgICA8cmV0dXJudmFs dWU+Ym9vbGVhbjwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgor ICAgICAgICBSZXF1ZXN0cyB0byBsb2cgdGhlIHBsYW4gb2YgdGhlIHF1ZXJ5IGN1cnJlbnRseSBy dW5uaW5nIG9uIHRoZQorICAgICAgICBiYWNrZW5kIHdpdGggc3BlY2lmaWVkIHByb2Nlc3MgSUQu CisgICAgICAgIEl0IHdpbGwgYmUgbG9nZ2VkIGF0IDxsaXRlcmFsPkxPRzwvbGl0ZXJhbD4gbWVz c2FnZSBsZXZlbCBhbmQKKyAgICAgICAgd2lsbCBhcHBlYXIgaW4gdGhlIHNlcnZlciBsb2cgYmFz ZWQgb24gdGhlIGxvZworICAgICAgICBjb25maWd1cmF0aW9uIHNldCAoU2VlIDx4cmVmIGxpbmtl bmQ9InJ1bnRpbWUtY29uZmlnLWxvZ2dpbmciLz4KKyAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRp b24pLCBidXQgd2lsbCBub3QgYmUgc2VudCB0byB0aGUgY2xpZW50CisgICAgICAgIHJlZ2FyZGxl c3Mgb2YgPHhyZWYgbGlua2VuZD0iZ3VjLWNsaWVudC1taW4tbWVzc2FnZXMiLz4uCisgICAgICAg PC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHJlc3RyaWN0 ZWQgdG8gc3VwZXJ1c2VycyBieSBkZWZhdWx0LCBidXQgb3RoZXIKKyAgICAgICAgdXNlcnMgY2Fu IGJlIGdyYW50ZWQgRVhFQ1VURSB0byBydW4gdGhlIGZ1bmN0aW9uLgorICAgICAgIDwvcGFyYT48 L2VudHJ5PgorICAgICAgPC9yb3c+CisKKwogICAgICAgPHJvdz4KICAgICAgICA8ZW50cnkgcm9s ZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgogICAgICAg ICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFj dC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4IGI0NmU3ZTljMmE2 Li5iOWIzNzRiOTkxMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFj dC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwpAQCAtMzYsNiArMzYs NyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfZW51bS5oIgogI2luY2x1ZGUgImNhdGFsb2cvc3Rv cmFnZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv ZHluYW1pY19leHBsYWluLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVjbWRzLmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImNvbW1vbi9wZ19wcm5nLmgiCkBA IC0yMTUsNiArMjE2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVHJhbnNhY3Rpb25TdGF0ZURhdGEKIAli b29sCQlwYXJhbGxlbENoaWxkWGFjdDsJLyogaXMgYW55IHBhcmVudCB0cmFuc2FjdGlvbiBwYXJh bGxlbD8gKi8KIAlib29sCQljaGFpbjsJCQkvKiBzdGFydCBhIG5ldyBibG9jayBhZnRlciB0aGlz IG9uZSAqLwogCWJvb2wJCXRvcFhpZExvZ2dlZDsJLyogZm9yIGEgc3VieGFjdDogaXMgdG9wLWxl dmVsIFhJRCBsb2dnZWQ/ICovCisJUXVlcnlEZXNjICAqcXVlcnlEZXNjOwkJLyogbXkgY3VycmVu dCBRdWVyeURlc2MgKi8KIAlzdHJ1Y3QgVHJhbnNhY3Rpb25TdGF0ZURhdGEgKnBhcmVudDsJLyog YmFjayBsaW5rIHRvIHBhcmVudCAqLwogfSBUcmFuc2FjdGlvblN0YXRlRGF0YTsKIApAQCAtMjQ4 LDYgKzI1MCw3IEBAIHN0YXRpYyBUcmFuc2FjdGlvblN0YXRlRGF0YSBUb3BUcmFuc2FjdGlvblN0 YXRlRGF0YSA9IHsKIAkuc3RhdGUgPSBUUkFOU19ERUZBVUxULAogCS5ibG9ja1N0YXRlID0gVEJM T0NLX0RFRkFVTFQsCiAJLnRvcFhpZExvZ2dlZCA9IGZhbHNlLAorCS5xdWVyeURlc2MgPSBOVUxM LAogfTsKIAogLyoKQEAgLTkzMyw2ICs5MzYsMjcgQEAgR2V0Q3VycmVudFRyYW5zYWN0aW9uTmVz dExldmVsKHZvaWQpCiAJcmV0dXJuIHMtPm5lc3RpbmdMZXZlbDsKIH0KIAorLyoKKyAqIFNldEN1 cnJlbnRRdWVyeURlc2MKKyAqLwordm9pZAorU2V0Q3VycmVudFF1ZXJ5RGVzYyhRdWVyeURlc2Mg KnF1ZXJ5RGVzYykKK3sKKwlUcmFuc2FjdGlvblN0YXRlIHMgPSBDdXJyZW50VHJhbnNhY3Rpb25T dGF0ZTsKKworCXMtPnF1ZXJ5RGVzYyA9IHF1ZXJ5RGVzYzsKK30KKworLyoKKyAqIEdldEN1cnJl bnRRdWVyeURlc2MKKyAqLworUXVlcnlEZXNjICoKK0dldEN1cnJlbnRRdWVyeURlc2Modm9pZCkK K3sKKwlUcmFuc2FjdGlvblN0YXRlIHMgPSBDdXJyZW50VHJhbnNhY3Rpb25TdGF0ZTsKKworCXJl dHVybiBzLT5xdWVyeURlc2M7Cit9CiAKIC8qCiAgKglUcmFuc2FjdGlvbklkSXNDdXJyZW50VHJh bnNhY3Rpb25JZApAQCAtMzA1OCwxMCArMzA4MiwxMSBAQCBDbGVhbnVwVHJhbnNhY3Rpb24odm9p ZCkKIAluUGFyYWxsZWxDdXJyZW50WGlkcyA9IDA7CiAKIAkvKgotCSAqIGRvbmUgd2l0aCBhYm9y dCBwcm9jZXNzaW5nLCBzZXQgY3VycmVudCB0cmFuc2FjdGlvbiBzdGF0ZSBiYWNrIHRvCi0JICog ZGVmYXVsdAorCSAqIGRvbmUgd2l0aCBhYm9ydCBwcm9jZXNzaW5nLCBzZXQgY3VycmVudCB0cmFu c2FjdGlvbiBzdGF0ZSBhbmQgUXVlcnlEZXNjCisJICogYmFjayB0byBkZWZhdWx0CiAJICovCiAJ cy0+c3RhdGUgPSBUUkFOU19ERUZBVUxUOworCXMtPnF1ZXJ5RGVzYyA9IE5VTEw7CiB9CiAKIC8q CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbAppbmRleCAyZDk0NmQ2ZDll OS4uNjdiZWFmY2M4MmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1 bmN0aW9ucy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNx bApAQCAtNzgyLDYgKzc4Miw4IEBAIFJFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xzX2xv Z2ljYWxtYXBkaXIoKSBGUk9NIFBVQkxJQzsKIAogUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04g cGdfbHNfcmVwbHNsb3RkaXIodGV4dCkgRlJPTSBQVUJMSUM7CiAKK1JFVk9LRSBFWEVDVVRFIE9O IEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpIEZST00gUFVCTElDOworCiAtLQog LS0gV2UgYWxzbyBzZXQgdXAgc29tZSB0aGluZ3MgYXMgYWNjZXNzaWJsZSB0byBzdGFuZGFyZCBy b2xlcy4KIC0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IGNiMmZiZGM3YzYwLi41ZTgzOTA3ZWIx NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKQEAgLTMyLDYgKzMyLDcgQEAgT0JKUyA9IFwKIAlkZWZp bmUubyBcCiAJZGlzY2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKKwlkeW5hbWljX2V4cGxhaW4ubyBc CiAJZXZlbnRfdHJpZ2dlci5vIFwKIAlleHBsYWluLm8gXAogCWV4cGxhaW5fZHIubyBcCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9keW5hbWljX2V4cGxhaW4uYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5kNjgyMDNmZThhYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5jCkBAIC0wLDAgKzEsMTgxIEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBkeW5hbWljX2V4cGxhaW4uYworICoJICBFeHBsYWluIHF1ZXJ5IHBs YW5zIGR1cmluZyBleGVjdXRpb24KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NC01LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9keW5h bWljX2V4cGxhaW4uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiY29tbWFuZHMv ZHluYW1pY19leHBsYWluLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5oIgorI2luY2x1 ZGUgImNvbW1hbmRzL2V4cGxhaW5fZm9ybWF0LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFp bl9zdGF0ZS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJv Yy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAidXRpbHMvYmFj a2VuZF9zdGF0dXMuaCIKKworc3RhdGljIGJvb2wgaXNQcm9jZXNzaW5nTG9nUXVlcnlQbGFuID0g ZmFsc2U7CisKKy8qCisgKiBIYW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgaW5kaWNhdGlu ZyBsb2dnaW5nIHRoZSBwbGFuIG9mIHRoZSBjdXJyZW50bHkKKyAqIHJ1bm5pbmcgcXVlcnkuCisg KgorICogQWxsIHRoZSBhY3R1YWwgd29yayBpcyBkZWZlcnJlZCB0byBQcm9jZXNzTG9nUXVlcnlQ bGFuSW50ZXJydXB0KCksCisgKiBiZWNhdXNlIHdlIGNhbm5vdCBzYWZlbHkgZW1pdCBhIGxvZyBt ZXNzYWdlIGluc2lkZSB0aGUgc2lnbmFsIGhhbmRsZXIuCisgKi8KK3ZvaWQKK0hhbmRsZUxvZ1F1 ZXJ5UGxhbkludGVycnVwdCh2b2lkKQoreworCUludGVycnVwdFBlbmRpbmcgPSB0cnVlOworCUxv Z1F1ZXJ5UGxhblBlbmRpbmcgPSB0cnVlOworCS8qIGxhdGNoIHdpbGwgYmUgc2V0IGJ5IHByb2Nz aWduYWxfc2lndXNyMV9oYW5kbGVyICovCit9CisKKy8qCisgKiBBY3R1YWwgcGxhbiBsb2dnaW5n IGZ1bmN0aW9uLgorICovCit2b2lkCitMb2dRdWVyeVBsYW4odm9pZCkKK3sKKwlFeHBsYWluU3Rh dGUgKmVzOworCU1lbW9yeUNvbnRleHQgY3h0OworCU1lbW9yeUNvbnRleHQgb2xkX2N4dDsKKwlR dWVyeURlc2MgICpxdWVyeURlc2M7CisKKwljeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3Vy cmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSJsb2dfcXVlcnlfcGxhbiB0ZW1wb3JhcnkgY29u dGV4dCIsCisJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJb2xkX2N4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhjeHQpOworCisJZXMgPSBOZXdFeHBsYWluU3RhdGUoKTsKKwor CWVzLT5mb3JtYXQgPSBFWFBMQUlOX0ZPUk1BVF9URVhUOworCWVzLT5zZXR0aW5ncyA9IHRydWU7 CisJZXMtPnZlcmJvc2UgPSB0cnVlOworCWVzLT5zaWduYWxlZCA9IHRydWU7CisKKwkvKgorCSAq IEN1cnJlbnQgUXVlcnlEZXNjIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHN0YW5kYXJkX0V4ZWN1dG9y UnVuLiBIb3dldmVyLAorCSAqIEV4ZWNQcm9jTm9kZSBjYW4gYmUgY2FsbGVkIGFmdGVyd2FyZChp LmUuLCBFeGVjUG9zdHByb2Nlc3NQbGFuKS4gVG8KKwkgKiBoYW5kbGUgdGhlIGNhc2UsIGNoZWNr IHdoZXRoZXIgd2UgaGF2ZSBRdWVyeURlc2Mgbm93LgorCSAqLworCXF1ZXJ5RGVzYyA9IEdldEN1 cnJlbnRRdWVyeURlc2MoKTsKKworCWlmIChxdWVyeURlc2MgPT0gTlVMTCkKKwl7CisJCUxvZ1F1 ZXJ5UGxhblBlbmRpbmcgPSBmYWxzZTsKKwkJcmV0dXJuOworCX0KKworCUV4cGxhaW5TdHJpbmdB c3NlbWJsZShlcywgcXVlcnlEZXNjLCBlcy0+Zm9ybWF0LCAwLCAtMSk7CisKKwllcmVwb3J0KExP R19TRVJWRVJfT05MWSwKKwkJCWVycm1zZygicXVlcnkgYW5kIGl0cyBwbGFuIHJ1bm5pbmcgb24g dGhlIGJhY2tlbmQgYXJlOlxuJXMiLAorCQkJCSAgIGVzLT5zdHItPmRhdGEpKTsKKworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRfY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKGN4dCk7CisK KwlMb2dRdWVyeVBsYW5QZW5kaW5nID0gZmFsc2U7Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSBy ZXF1ZXN0IGZvciBsb2dnaW5nIHF1ZXJ5IHBsYW4gYXQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4K KyAqCisgKiBTaW5jZSBleGVjdXRpbmcgRVhQTEFJTi1yZWxhdGVkIGNvZGUgYXQgYW4gYXJiaXRy YXJ5IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkKKyAqIHBvaW50IGlzIHBvdGVudGlhbGx5IHVuc2Fm ZSwgdGhpcyBmdW5jdGlvbiBqdXN0IHdyYXBzIHRoZSBub2RlcyBvZgorICogRXhlY1Byb2NOb2Rl IHdpdGggRXhlY1Byb2NOb2RlRmlyc3QsIHdoaWNoIGxvZ3MgcXVlcnkgcGxhbiBpZiByZXF1ZXN0 ZWQuCisgKiBUaGlzIHdheSBlbnN1cmVzIHRoYXQgRVhQTEFJTi1yZWxhdGVkIGNvZGUgaXMgZXhl Y3V0ZWQgb25seSBkdXJpbmcKKyAqIEV4ZWNQcm9jTm9kZUZpcnN0LCB3aGVyZSBpdCBpcyBjb25z aWRlcmVkIHNhZmUuCisgKi8KK3ZvaWQKK1Byb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHQodm9p ZCkKK3sKKwlRdWVyeURlc2MgICpxdWVyeWRlc2M7CisKKwkvKiBQcmV2ZW50IHJlLWVudHJhbnQg Ki8KKwlpZiAoaXNQcm9jZXNzaW5nTG9nUXVlcnlQbGFuKQorCQlyZXR1cm47CisKKwlpc1Byb2Nl c3NpbmdMb2dRdWVyeVBsYW4gPSB0cnVlOworCisJLyogQ2Fubm90IGxvZyBxdWVyeSBwbGFuIG91 dHNpZGUgYSB0cmFuc2FjdGlvbiAqLworCWlmICghSXNUcmFuc2FjdGlvblN0YXRlKCkpCisJewor CQlpc1Byb2Nlc3NpbmdMb2dRdWVyeVBsYW4gPSBmYWxzZTsKKwkJTG9nUXVlcnlQbGFuUGVuZGlu ZyA9IGZhbHNlOworCQlyZXR1cm47CisJfQorCisJcXVlcnlkZXNjID0gR2V0Q3VycmVudFF1ZXJ5 RGVzYygpOworCisJLyogSWYgY3VycmVudCBxdWVyeSBoYXMgYWxyZWFkeSBmaW5pc2hlZCwgd2Ug Y2FuIGRvIG5vdGhpbmcgYnV0IGV4aXQgKi8KKwlpZiAocXVlcnlkZXNjID09IE5VTEwpCisJewor CQlMb2dRdWVyeVBsYW5QZW5kaW5nID0gZmFsc2U7CisJCWlzUHJvY2Vzc2luZ0xvZ1F1ZXJ5UGxh biA9IGZhbHNlOworCisJCXJldHVybjsKKwl9CisKKwkvKiBXcmFwIEV4ZWNQcm9jTm9kZXMgd2l0 aCBFeGVjUHJvY05vZGVGaXJzdCAqLworCUV4ZWNTZXRFeGVjUHJvY05vZGVSZWN1cnNlKHF1ZXJ5 ZGVzYy0+cGxhbnN0YXRlKTsKKworCWlzUHJvY2Vzc2luZ0xvZ1F1ZXJ5UGxhbiA9IGZhbHNlOwor fQorCisvKgorICogU2lnbmFsIGEgYmFja2VuZCBwcm9jZXNzIHRvIGxvZyB0aGUgcXVlcnkgcGxh biBvZiB0aGUgcnVubmluZyBxdWVyeS4KKyAqCisgKiBCeSBkZWZhdWx0LCBvbmx5IHN1cGVydXNl cnMgYXJlIGFsbG93ZWQgdG8gc2lnbmFsIHRvIGxvZyB0aGUgcGxhbiBiZWNhdXNlCisgKiBhbGxv d2luZyBhbnkgdXNlcnMgdG8gaXNzdWUgdGhpcyByZXF1ZXN0IGF0IGFuIHVuYm91bmRlZCByYXRl IHdvdWxkCisgKiBjYXVzZSBsb3RzIG9mIGxvZyBtZXNzYWdlcyBhbmQgd2hpY2ggY2FuIGxlYWQg dG8gZGVuaWFsIG9mIHNlcnZpY2UuCisgKiBBZGRpdGlvbmFsIHJvbGVzIGNhbiBiZSBwZXJtaXR0 ZWQgd2l0aCBHUkFOVC4KKyAqLworRGF0dW0KK3BnX2xvZ19xdWVyeV9wbGFuKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJaW50CQkJcGlkID0gUEdfR0VUQVJHX0lOVDMyKDApOworCVBHUFJPQwkgICAq cHJvYzsKKwlQZ0JhY2tlbmRTdGF0dXMgKmJlX3N0YXR1czsKKworCXByb2MgPSBCYWNrZW5kUGlk R2V0UHJvYyhwaWQpOworCisJaWYgKHByb2MgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFRoaXMg aXMganVzdCBhIHdhcm5pbmcgc28gYSBsb29wLXRocm91Z2gtcmVzdWx0c2V0IHdpbGwgbm90IGFi b3J0CisJCSAqIGlmIG9uZSBiYWNrZW5kIHRlcm1pbmF0ZWQgb24gaXRzIG93biBkdXJpbmcgdGhl IHJ1bi4KKwkJICovCisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJQSUQgJWQgaXMg bm90IGEgUG9zdGdyZVNRTCBiYWNrZW5kIHByb2Nlc3MiLCBwaWQpKSk7CisJCVBHX1JFVFVSTl9C T09MKGZhbHNlKTsKKwl9CisKKwliZV9zdGF0dXMgPSBwZ3N0YXRfZ2V0X2JlZW50cnlfYnlfcHJv Y19udW1iZXIocHJvYy0+dnhpZC5wcm9jTnVtYmVyKTsKKwlpZiAoYmVfc3RhdHVzLT5zdF9iYWNr ZW5kVHlwZSAhPSBCX0JBQ0tFTkQpCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1z ZygiUElEICVkIGlzIG5vdCBhIFBvc3RncmVTUUwgY2xpZW50IGJhY2tlbmQgcHJvY2VzcyIsIHBp ZCkpKTsKKwkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOworCX0KKworCWlmIChTZW5kUHJvY1NpZ25h bChwaWQsIFBST0NTSUdfTE9HX1FVRVJZX1BMQU4sIHByb2MtPnZ4aWQucHJvY051bWJlcikgPCAw KQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBzZW5kIHNp Z25hbCB0byBwcm9jZXNzICVkOiAlbSIsIHBpZCkpKTsKKwkJUEdfUkVUVVJOX0JPT0woZmFsc2Up OworCX0KKworCVBHX1JFVFVSTl9CT09MKHRydWUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmlu ZGV4IDgzNDViYzAyNjRiLi41NTY3NzliYWZhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAt MTA4NCw2ICsxMDg0LDM3IEBAIEV4cGxhaW5RdWVyeVBhcmFtZXRlcnMoRXhwbGFpblN0YXRlICpl cywgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIGludCBtYXhsZW4pCiAJCUV4cGxhaW5Qcm9wZXJ0eVRl eHQoIlF1ZXJ5IFBhcmFtZXRlcnMiLCBzdHIsIGVzKTsKIH0KIAorLyoKKyAqIEV4cGxhaW5TdHJp bmdBc3NlbWJsZSAtCisgKiAgICBBc3NlbWJsZSBlcy0+c3RyIGZvciBsb2dnaW5nIGFjY29yZGlu ZyB0byBzcGVjaWZpZWQgb3B0aW9ucyBhbmQgZm9ybWF0CisgKi8KKwordm9pZAorRXhwbGFpblN0 cmluZ0Fzc2VtYmxlKEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQg bG9nRm9ybWF0LAorCQkJCQkgIGJvb2wgbG9nVHJpZ2dlcnMsIGludCBsb2dQYXJhbWV0ZXJNYXhM ZW5ndGgpCit7CisJRXhwbGFpbkJlZ2luT3V0cHV0KGVzKTsKKwlFeHBsYWluUXVlcnlUZXh0KGVz LCBxdWVyeURlc2MpOworCUV4cGxhaW5RdWVyeVBhcmFtZXRlcnMoZXMsIHF1ZXJ5RGVzYy0+cGFy YW1zLCBsb2dQYXJhbWV0ZXJNYXhMZW5ndGgpOworCUV4cGxhaW5QcmludFBsYW4oZXMsIHF1ZXJ5 RGVzYyk7CisJaWYgKGVzLT5hbmFseXplICYmIGxvZ1RyaWdnZXJzKQorCQlFeHBsYWluUHJpbnRU cmlnZ2VycyhlcywgcXVlcnlEZXNjKTsKKwlpZiAoZXMtPmNvc3RzKQorCQlFeHBsYWluUHJpbnRK SVRTdW1tYXJ5KGVzLCBxdWVyeURlc2MpOworCUV4cGxhaW5FbmRPdXRwdXQoZXMpOworCisJLyog UmVtb3ZlIGxhc3QgbGluZSBicmVhayAqLworCWlmIChlcy0+c3RyLT5sZW4gPiAwICYmIGVzLT5z dHItPmRhdGFbZXMtPnN0ci0+bGVuIC0gMV0gPT0gJ1xuJykKKwkJZXMtPnN0ci0+ZGF0YVstLWVz LT5zdHItPmxlbl0gPSAnXDAnOworCisJLyogRml4IEpTT04gdG8gb3V0cHV0IGFuIG9iamVjdCAq LworCWlmIChsb2dGb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfSlNPTikKKwl7CisJCWVzLT5zdHIt PmRhdGFbMF0gPSAneyc7CisJCWVzLT5zdHItPmRhdGFbZXMtPnN0ci0+bGVuIC0gMV0gPSAnfSc7 CisJfQorfQorCiAvKgogICogcmVwb3J0X3RyaWdnZXJzIC0KICAqCQlyZXBvcnQgZXhlY3V0aW9u IHN0YXRzIGZvciBhIHNpbmdsZSByZWxhdGlvbidzIHRyaWdnZXJzCkBAIC0xODE1LDcgKzE4NDYs MTAgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywK IAogCS8qCiAJICogV2UgaGF2ZSB0byBmb3JjaWJseSBjbGVhbiB1cCB0aGUgaW5zdHJ1bWVudGF0 aW9uIHN0YXRlIGJlY2F1c2Ugd2UKLQkgKiBoYXZlbid0IGRvbmUgRXhlY3V0b3JFbmQgeWV0LiAg VGhpcyBpcyBwcmV0dHkgZ3JvdHR5IC4uLgorCSAqIGhhdmVuJ3QgZG9uZSBFeGVjdXRvckVuZCB5 ZXQuICBUaGlzIGlzIHByZXR0eSBncm90dHkgLi4uIFRoaXMgY2xlYW51cAorCSAqIHNob3VsZCBu b3QgYmUgZG9uZSB3aGVuIHRoZSBxdWVyeSBoYXMgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkIGFuZCBl eHBsYWluCisJICogaGFzIGJlZW4gcmVxdWVzdGVkIGJ5IHNpZ25hbCwgYXMgdGhlIHRhcmdldCBx dWVyeSBtYXkgdXNlCisJICogaW5zdHJ1bWVudGF0aW9uIGFuZCBjbGVhbiBpdHNlbGYgdXAuCiAJ ICoKIAkgKiBOb3RlOiBjb250cmliL2F1dG9fZXhwbGFpbiBjb3VsZCBjYXVzZSBpbnN0cnVtZW50 YXRpb24gdG8gYmUgc2V0IHVwCiAJICogZXZlbiB0aG91Z2ggd2UgZGlkbid0IGFzayBmb3IgaXQg aGVyZS4gIEJlIGNhcmVmdWwgbm90IHRvIHByaW50IGFueQpAQCAtMTgyMyw3ICsxODU3LDcgQEAg RXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkgKiBJ bnN0ckVuZExvb3AgY2FsbCBhbnl3YXksIGlmIHBvc3NpYmxlLCB0byByZWR1Y2UgdGhlIG51bWJl ciBvZiBjYXNlcwogCSAqIGF1dG9fZXhwbGFpbiBoYXMgdG8gY29udGVuZCB3aXRoLgogCSAqLwot CWlmIChwbGFuc3RhdGUtPmluc3RydW1lbnQpCisJaWYgKHBsYW5zdGF0ZS0+aW5zdHJ1bWVudCAm JiAhZXMtPnNpZ25hbGVkKQogCQlJbnN0ckVuZExvb3AocGxhbnN0YXRlLT5pbnN0cnVtZW50KTsK IAogCWlmIChlcy0+YW5hbHl6ZSAmJgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv bWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZAppbmRleCBkZDRj ZGU0MWQzMi4uNGE2NGI4ZTlkMDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21l c29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCkBAIC0yMCw2 ICsyMCw3IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2RlZmluZS5jJywKICAgJ2Rp c2NhcmQuYycsCiAgICdkcm9wY21kcy5jJywKKyAgJ2R5bmFtaWNfZXhwbGFpbi5jJywKICAgJ2V2 ZW50X3RyaWdnZXIuYycsCiAgICdleHBsYWluLmMnLAogICAnZXhwbGFpbl9kci5jJywKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjTWFpbi5jCmluZGV4IDgzMWM1NWNlNzg3Li5kZjViNTVhZTY0ZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjTWFpbi5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hhY3Qu aCIKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGFy dGl0aW9uLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZHluYW1pY19leHBsYWluLmgiCiAjaW5jbHVk ZSAiY29tbWFuZHMvbWF0dmlldy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKICNp bmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgpAQCAtMzEyLDYgKzMxMyw3IEBAIHN0YW5kYXJk X0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLAogCURlc3RSZWNlaXZlciAqZGVzdDsK IAlib29sCQlzZW5kVHVwbGVzOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlRdWVyeURl c2MgICpvbGRRdWVyeURlc2M7CiAKIAkvKiBzYW5pdHkgY2hlY2tzICovCiAJQXNzZXJ0KHF1ZXJ5 RGVzYyAhPSBOVUxMKTsKQEAgLTMyNCw2ICszMjYsMTMgQEAgc3RhbmRhcmRfRXhlY3V0b3JSdW4o UXVlcnlEZXNjICpxdWVyeURlc2MsCiAJLyogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBxdWVyeSdz IHNuYXBzaG90IGlzIGFjdGl2ZSAqLwogCUFzc2VydChHZXRBY3RpdmVTbmFwc2hvdCgpID09IGVz dGF0ZS0+ZXNfc25hcHNob3QpOwogCisJLyoKKwkgKiBTYXZlIGN1cnJlbnQgUXVlcnlEZXNjIGhl cmUgdG8gZW5hYmxlIHJldHJpZXZhbCBvZiB0aGUgY3VycmVudGx5CisJICogcnVubmluZyBxdWVy eURlc2MgZm9yIG5lc3RlZCBxdWVyaWVzLgorCSAqLworCW9sZFF1ZXJ5RGVzYyA9IEdldEN1cnJl bnRRdWVyeURlc2MoKTsKKwlTZXRDdXJyZW50UXVlcnlEZXNjKHF1ZXJ5RGVzYyk7CisKIAkvKgog CSAqIFN3aXRjaCBpbnRvIHBlci1xdWVyeSBtZW1vcnkgY29udGV4dAogCSAqLwpAQCAtMzg2LDYg KzM5NSwxNCBAQCBzdGFuZGFyZF9FeGVjdXRvclJ1bihRdWVyeURlc2MgKnF1ZXJ5RGVzYywKIAkJ SW5zdHJTdG9wTm9kZShxdWVyeURlc2MtPnRvdGFsdGltZSwgZXN0YXRlLT5lc19wcm9jZXNzZWQp OwogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCVNldEN1cnJlbnRRdWVy eURlc2Mob2xkUXVlcnlEZXNjKTsKKworCS8qCisJICogRW5zdXJlIExvZ1F1ZXJ5UGxhblBlbmRp bmcgaXMgaW5pdGlhbGl6ZWQgaW4gY2FzZSB0aGVyZSB3YXMgbm8gdGltZSBmb3IKKwkgKiBsb2dn aW5nIHRoZSBwbGFuLiBPdGhld2lzZSBwbGFuIHdpbGwgYmUgbG9nZ2VkIGF0IHRoZSBuZXh0IHF1 ZXJ5CisJICogZXhlY3V0aW9uIG9uIHRoZSBzYW1lIHNlc3Npb24uCisJICovCisJTG9nUXVlcnlQ bGFuUGVuZGluZyA9IGZhbHNlOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQ cm9jbm9kZS5jCmluZGV4IGY1ZjljZmJlZWFkLi5iZjFlMjZiN2FmMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1Byb2Nub2RlLmMKQEAgLTcyLDYgKzcyLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3Rn cmVzLmgiCiAKKyNpbmNsdWRlICJjb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaCIKICNpbmNsdWRl ICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBZ2cuaCIKICNp bmNsdWRlICJleGVjdXRvci9ub2RlQXBwZW5kLmgiCkBAIC00MzEsOSArNDMyLDEwIEBAIEV4ZWNT ZXRFeGVjUHJvY05vZGUoUGxhblN0YXRlICpub2RlLCBFeGVjUHJvY05vZGVNdGQgZnVuY3Rpb24p CiB7CiAJLyoKIAkgKiBBZGQgYSB3cmFwcGVyIGFyb3VuZCB0aGUgRXhlY1Byb2NOb2RlIGNhbGxi YWNrIHRoYXQgY2hlY2tzIHN0YWNrIGRlcHRoCi0JICogZHVyaW5nIHRoZSBmaXJzdCBleGVjdXRp b24gYW5kIG1heWJlIGFkZHMgYW4gaW5zdHJ1bWVudGF0aW9uIHdyYXBwZXIuCi0JICogV2hlbiB0 aGUgY2FsbGJhY2sgaXMgY2hhbmdlZCBhZnRlciBleGVjdXRpb24gaGFzIGFscmVhZHkgYmVndW4g dGhhdAotCSAqIG1lYW5zIHdlJ2xsIHN1cGVyZmx1b3VzbHkgZXhlY3V0ZSBFeGVjUHJvY05vZGVG aXJzdCwgYnV0IHRoYXQgc2VlbXMgb2suCisJICogYW5kIHF1ZXJ5IGxvZ2dpbmcgcmVxdWVzdCBk dXJpbmcgdGhlIGV4ZWN1dGlvbiBhbmQgbWF5YmUgYWRkcyBhbgorCSAqIGluc3RydW1lbnRhdGlv biB3cmFwcGVyLiBXaGVuIHRoZSBjYWxsYmFjayBpcyBjaGFuZ2VkIGFmdGVyIGV4ZWN1dGlvbgor CSAqIGhhcyBhbHJlYWR5IGJlZ3VuIHRoYXQgbWVhbnMgd2UnbGwgc3VwZXJmbHVvdXNseSBleGVj dXRlCisJICogRXhlY1Byb2NOb2RlRmlyc3QsIGJ1dCB0aGF0IHNlZW1zIG9rLgogCSAqLwogCW5v ZGUtPkV4ZWNQcm9jTm9kZVJlYWwgPSBmdW5jdGlvbjsKIAlub2RlLT5FeGVjUHJvY05vZGUgPSBF eGVjUHJvY05vZGVGaXJzdDsKQEAgLTQ0MSwyNyArNDQzLDQzIEBAIEV4ZWNTZXRFeGVjUHJvY05v ZGUoUGxhblN0YXRlICpub2RlLCBFeGVjUHJvY05vZGVNdGQgZnVuY3Rpb24pCiAKIAogLyoKLSAq IEV4ZWNQcm9jTm9kZSB3cmFwcGVyIHRoYXQgcGVyZm9ybXMgc29tZSBvbmUtdGltZSBjaGVja3Ms IGJlZm9yZSBjYWxsaW5nCisgKiBFeGVjUHJvY05vZGUgd3JhcHBlciB0aGF0IHBlcmZvcm1zIHNv bWUgZXh0cmEgY2hlY2tzLCBiZWZvcmUgY2FsbGluZwogICogdGhlIHJlbGV2YW50IG5vZGUgbWV0 aG9kIChwb3NzaWJseSB2aWEgYW4gaW5zdHJ1bWVudGF0aW9uIHdyYXBwZXIpLgorICoKKyAqIE5v cm1hbGx5LCB0aGlzIGlzIGp1c3QgaW52b2tlZCBvbmNlIGZvciB0aGUgZmlyc3QgY2FsbCB0byBh bnkgZ2l2ZW4gbm9kZSwKKyAqIGFuZCB0aGVyZWFmdGVyIHdlIGFycmFuZ2UgdG8gY2FsbCBFeGVj UHJvY05vZGVJbnN0ciBvciB0aGUgcmVsZXZhbnQgbm9kZQorICogbWV0aG9kIGRpcmVjdGx5LiBI b3dldmVyLCBpdCdzIGxlZ2FsIHRvIHJlc2V0IG5vZGUtPkV4ZWNQcm9jTm9kZSBiYWNrIHRvCisg KiB0aGlzIGZ1bmN0aW9uIGF0IGFueSB0aW1lLCBhbmQgd2UgZG8gdGhhdCB3aGVuZXZlciB0aGUg cXVlcnkgcGxhbiBtaWdodAorICogbmVlZCB0byBiZSBwcmludGVkLCBzbyB0aGF0IHdlIG9ubHkg aW5jdXIgdGhlIGNvc3Qgb2YgY2hlY2tpbmcgZm9yIHRoYXQKKyAqIGNhc2Ugd2hlbiByZXF1aXJl ZC4KICAqLwogc3RhdGljIFR1cGxlVGFibGVTbG90ICoKIEV4ZWNQcm9jTm9kZUZpcnN0KFBsYW5T dGF0ZSAqbm9kZSkKIHsKIAkvKgotCSAqIFBlcmZvcm0gc3RhY2sgZGVwdGggY2hlY2sgZHVyaW5n IHRoZSBmaXJzdCBleGVjdXRpb24gb2YgdGhlIG5vZGUuICBXZQotCSAqIG9ubHkgZG8gc28gdGhl IGZpcnN0IHRpbWUgcm91bmQgYmVjYXVzZSBpdCB0dXJucyBvdXQgdG8gbm90IGJlIGNoZWFwIG9u Ci0JICogc29tZSBjb21tb24gYXJjaGl0ZWN0dXJlcyAoZWcuIHg4NikuICBUaGlzIHJlbGllcyBv biB0aGUgYXNzdW1wdGlvbgotCSAqIHRoYXQgRXhlY1Byb2NOb2RlIGNhbGxzIGZvciBhIGdpdmVu IHBsYW4gbm9kZSB3aWxsIGFsd2F5cyBiZSBtYWRlIGF0Ci0JICogcm91Z2hseSB0aGUgc2FtZSBz dGFjayBkZXB0aC4KKwkgKiBQZXJmb3JtIGEgc3RhY2sgZGVwdGggY2hlY2suICBXZSBkb24ndCB3 YW50IHRvIGRvIHRoaXMgYWxsIHRoZSB0aW1lCisJICogYmVjYXVzZSBpdCB0dXJucyBvdXQgdG8g bm90IGJlIGNoZWFwIG9uIHNvbWUgY29tbW9uIGFyY2hpdGVjdHVyZXMgKGVnLgorCSAqIHg4Niku ICBUaGlzIHJlbGllcyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IEV4ZWNQcm9jTm9kZSBjYWxscyBm b3IgYQorCSAqIGdpdmVuIHBsYW4gbm9kZSB3aWxsIGFsd2F5cyBiZSBtYWRlIGF0IHJvdWdobHkg dGhlIHNhbWUgc3RhY2sgZGVwdGguCiAJICovCiAJY2hlY2tfc3RhY2tfZGVwdGgoKTsKIAorCS8q CisJICogSWYgd2UgaGF2ZSBiZWVuIGFza2VkIHRvIHByaW50IHRoZSBxdWVyeSBwbGFuLCBkbyB0 aGF0IG5vdy4gV2UgZGFyZSBub3QKKwkgKiB0cnkgdG8gZG8gdGhpcyBkaXJlY3RseSBmcm9tIENI RUNLX0ZPUl9JTlRFUlJVUFRTKCkgYmVjYXVzZSB3ZSBkb24ndAorCSAqIHJlYWxseSBrbm93IHdo YXQgdGhlIGV4ZWN1dG9yIHN0YXRlIGlzIGF0IHRoYXQgcG9pbnQsIGJ1dCB3ZSBhc3N1bWUKKwkg KiB0aGF0IHdoZW4gZW50ZXJpbmcgYSBub2RlIHRoZSBzdGF0ZSB3aWxsIGJlIHN1ZmZpY2llbnRs eSBjb25zaXN0ZW50CisJICogdGhhdCB0cnlpbmcgdG8gcHJpbnQgdGhlIHBsYW4gbWFrZXMgc2Vu c2UuCisJICovCisJaWYgKExvZ1F1ZXJ5UGxhblBlbmRpbmcpCisJCUxvZ1F1ZXJ5UGxhbigpOwor CiAJLyoKIAkgKiBJZiBpbnN0cnVtZW50YXRpb24gaXMgcmVxdWlyZWQsIGNoYW5nZSB0aGUgd3Jh cHBlciB0byBvbmUgdGhhdCBqdXN0CiAJICogZG9lcyBpbnN0cnVtZW50YXRpb24uICBPdGhlcndp c2Ugd2UgY2FuIGRpc3BlbnNlIHdpdGggYWxsIHdyYXBwZXJzIGFuZAogCSAqIGhhdmUgRXhlY1By b2NOb2RlKCkgZGlyZWN0bHkgY2FsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gZnJvbSBub3cgb24u CiAJICovCi0JaWYgKG5vZGUtPmluc3RydW1lbnQpCisJZWxzZSBpZiAobm9kZS0+aW5zdHJ1bWVu dCkKIAkJbm9kZS0+RXhlY1Byb2NOb2RlID0gRXhlY1Byb2NOb2RlSW5zdHI7CiAJZWxzZQogCQlu b2RlLT5FeGVjUHJvY05vZGUgPSBub2RlLT5FeGVjUHJvY05vZGVSZWFsOwpAQCAtNTQ2LDYgKzU2 NCw5MSBAQCBNdWx0aUV4ZWNQcm9jTm9kZShQbGFuU3RhdGUgKm5vZGUpCiAJcmV0dXJuIHJlc3Vs dDsKIH0KIAorLyoKKyAqIFdyYXAgYXJyYXkgb2YgUGxhblN0YXRlIEV4ZWNQcm9jTm9kZSB3aXRo IEV4ZWNQcm9jTm9kZUZpcnN0LgorICovCitzdGF0aWMgdm9pZAorRXhlY1NldEV4ZWNQcm9jTm9k ZUFycmF5KFBsYW5TdGF0ZSAqKnBsYW5zdGF0ZXMsIGludCBucGxhbnMpCit7CisJaW50CQkJaTsK KworCWZvciAoaSA9IDA7IGkgPCBucGxhbnM7IGkrKykKKwkJRXhlY1NldEV4ZWNQcm9jTm9kZVJl Y3Vyc2UocGxhbnN0YXRlc1tpXSk7Cit9CisKKy8qCisgKiBXcmFwIEN1c3RvbVNjYW5TdGF0ZSBj aGlsZHJlbidzIEV4ZWNQcm9jTm9kZSB3aXRoIEV4ZWNQcm9jTm9kZUZpcnN0LgorICovCitzdGF0 aWMgdm9pZAorQ1NTQ2hpbGRFeGVjU2V0RXhlY1Byb2NOb2RlQXJyYXkoQ3VzdG9tU2NhblN0YXRl ICpjc3MpCit7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWZvcmVhY2goY2VsbCwgY3NzLT5jdXN0 b21fcHMpCisJCUV4ZWNTZXRFeGVjUHJvY05vZGVSZWN1cnNlKChQbGFuU3RhdGUgKikgbGZpcnN0 KGNlbGwpKTsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IHdyYXAgYWxsIHRoZSB1bmRlcmx5aW5n IEV4ZWNQcm9jTm9kZSB3aXRoIEV4ZWNQcm9jTm9kZUZpcnN0LgorICoKKyAqIFJlY3Vyc2lvbiBp cyB1c3VhbGx5IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBuZXh0IEV4ZWNQcm9jTm9kZSgpIGNhbGwg bWF5IGJlCisgKiBpbnZva2VkIG5vdCBvbmx5IHRocm91Z2ggdGhlIGN1cnJlbnQgbm9kZSwgYnV0 IGFsc28gdmlhIGxlZnR0cmVlLCByaWdodHRyZWUsCisgKiBzdWJQbGFuLCBvciBvdGhlciBzcGVj aWFsIGNoaWxkIHBsYW5zLgorICovCit2b2lkCitFeGVjU2V0RXhlY1Byb2NOb2RlUmVjdXJzZShQ bGFuU3RhdGUgKnBzKQoreworCUV4ZWNTZXRFeGVjUHJvY05vZGUocHMsIHBzLT5FeGVjUHJvY05v ZGVSZWFsKTsKKworCWlmIChwcy0+bGVmdHRyZWUgIT0gTlVMTCkKKwkJRXhlY1NldEV4ZWNQcm9j Tm9kZVJlY3Vyc2UocHMtPmxlZnR0cmVlKTsKKwlpZiAocHMtPnJpZ2h0dHJlZSAhPSBOVUxMKQor CQlFeGVjU2V0RXhlY1Byb2NOb2RlUmVjdXJzZShwcy0+cmlnaHR0cmVlKTsKKwlpZiAocHMtPnN1 YlBsYW4gIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmw7CisKKwkJZm9yZWFjaChsLCBwcy0+ c3ViUGxhbikKKwkJeworCQkJU3ViUGxhblN0YXRlICpzc3RhdGUgPSAoU3ViUGxhblN0YXRlICop IGxmaXJzdChsKTsKKworCQkJRXhlY1NldEV4ZWNQcm9jTm9kZVJlY3Vyc2Uoc3N0YXRlLT5wbGFu c3RhdGUpOworCQl9CisJfQorCisJLyogc3BlY2lhbCBjaGlsZCBwbGFucyAqLworCXN3aXRjaCAo bm9kZVRhZyhwcy0+cGxhbikpCisJeworCQljYXNlIFRfQXBwZW5kOgorCQkJRXhlY1NldEV4ZWNQ cm9jTm9kZUFycmF5KCgoQXBwZW5kU3RhdGUgKikgcHMpLT5hcHBlbmRwbGFucywKKwkJCQkJCQkJ CSAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXNfbnBsYW5zKTsKKwkJCWJyZWFrOworCQljYXNlIFRf TWVyZ2VBcHBlbmQ6CisJCQlFeGVjU2V0RXhlY1Byb2NOb2RlQXJyYXkoKChNZXJnZUFwcGVuZFN0 YXRlICopIHBzKS0+bWVyZ2VwbGFucywKKwkJCQkJCQkJCSAoKE1lcmdlQXBwZW5kU3RhdGUgKikg cHMpLT5tc19ucGxhbnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBBbmQ6CisJCQlFeGVj U2V0RXhlY1Byb2NOb2RlQXJyYXkoKChCaXRtYXBBbmRTdGF0ZSAqKSBwcyktPmJpdG1hcHBsYW5z LAorCQkJCQkJCQkJICgoQml0bWFwQW5kU3RhdGUgKikgcHMpLT5ucGxhbnMpOworCQkJYnJlYWs7 CisJCWNhc2UgVF9CaXRtYXBPcjoKKwkJCUV4ZWNTZXRFeGVjUHJvY05vZGVBcnJheSgoKEJpdG1h cE9yU3RhdGUgKikgcHMpLT5iaXRtYXBwbGFucywKKwkJCQkJCQkJCSAoKEJpdG1hcE9yU3RhdGUg KikgcHMpLT5ucGxhbnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQlF eGVjU2V0RXhlY1Byb2NOb2RlUmVjdXJzZSgoKFN1YnF1ZXJ5U2NhblN0YXRlICopIHBzKS0+c3Vi cGxhbik7CisJCQlicmVhazsKKwkJY2FzZSBUX0N0ZVNjYW46CisJCQlFeGVjU2V0RXhlY1Byb2NO b2RlUmVjdXJzZSgoKEN0ZVNjYW5TdGF0ZSAqKSBwcyktPmN0ZXBsYW5zdGF0ZSk7CisJCQlicmVh azsKKwkJY2FzZSBUX0N1c3RvbVNjYW46CisJCQlDU1NDaGlsZEV4ZWNTZXRFeGVjUHJvY05vZGVB cnJheSgoQ3VzdG9tU2NhblN0YXRlICopIHBzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ YnJlYWs7CisJfQorfQorCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjRW5kTm9kZQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvcHJvY3NpZ25hbC5jCmluZGV4IDA4NzgyMTMxMWNjLi4wN2ZjYWM3ZjBiYyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5j bHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNp bmNsdWRlICJjb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCkBA IC02OTEsNiArNjkyLDkgQEAgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIoU0lHTkFMX0FSR1Mp CiAJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX0xPR19NRU1PUllfQ09OVEVYVCkpCiAJCUhh bmRsZUxvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKIAorCWlmIChDaGVja1Byb2NTaWduYWwo UFJPQ1NJR19MT0dfUVVFUllfUExBTikpCisJCUhhbmRsZUxvZ1F1ZXJ5UGxhbkludGVycnVwdCgp OworCiAJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0Up KQogCQlIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZUludGVycnVwdCgpOwogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVz LmMKaW5kZXggZDM1NjgzMGY3NTYuLmM1YTVjZDQ3YzhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0z Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCisjaW5j bHVkZSAiY29tbWFuZHMvZHluYW1pY19leHBsYWluLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJl cGFyZS5oIgogI2luY2x1ZGUgImNvbW1vbi9wZ19wcm5nLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5o IgpAQCAtMzUzOCw2ICszNTM5LDkgQEAgUHJvY2Vzc0ludGVycnVwdHModm9pZCkKIAlpZiAoTG9n TWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0 KCk7CiAKKwlpZiAoTG9nUXVlcnlQbGFuUGVuZGluZykKKwkJUHJvY2Vzc0xvZ1F1ZXJ5UGxhbklu dGVycnVwdCgpOworCiAJaWYgKFBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZykKIAkJUHJvY2Vz c1BhcmFsbGVsQXBwbHlNZXNzYWdlcygpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRl eCBkMzFjYjQ1YTA1OC4uOTI3Y2NkYTAzMDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBA IC00MCw2ICs0MCw4IEBAIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlU2Vzc2lvblRpbWVvdXRQ ZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJvY1NpZ25hbEJhcnJpZXJQ ZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nTWVtb3J5Q29udGV4dFBl bmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlU3RhdHNVcGRhdGVUaW1l b3V0UGVuZGluZyA9IGZhbHNlOwordm9sYXRpbGUgc2lnX2F0b21pY190IExvZ1F1ZXJ5UGxhblBl bmRpbmcgPSBmYWxzZTsKKwogdm9sYXRpbGUgdWludDMyIEludGVycnVwdEhvbGRvZmZDb3VudCA9 IDA7CiB2b2xhdGlsZSB1aW50MzIgUXVlcnlDYW5jZWxIb2xkb2ZmQ291bnQgPSAwOwogdm9sYXRp bGUgdWludDMyIENyaXRTZWN0aW9uQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL3hhY3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94YWN0LmgKaW5kZXggNDUyOGU1MTgy OWUuLjNjNmUzYjdmMmNlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGFjdC5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94YWN0LmgKQEAgLTQzMiw2ICs0MzIsNyBAQCB0eXBlZGVm IHN0cnVjdCB4bF94YWN0X3BhcnNlZF9hYm9ydAogCVRpbWVzdGFtcFR6IG9yaWdpbl90aW1lc3Rh bXA7CiB9IHhsX3hhY3RfcGFyc2VkX2Fib3J0OwogCit0eXBlZGVmIHN0cnVjdCBRdWVyeURlc2Mg UXVlcnlEZXNjOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJZXh0ZXJuIGRlZmluaXRpb25z CkBAIC00NTgsNiArNDU5LDggQEAgZXh0ZXJuIFRpbWVzdGFtcFR6IEdldEN1cnJlbnRTdGF0ZW1l bnRTdGFydFRpbWVzdGFtcCh2b2lkKTsKIGV4dGVybiBUaW1lc3RhbXBUeiBHZXRDdXJyZW50VHJh bnNhY3Rpb25TdG9wVGltZXN0YW1wKHZvaWQpOwogZXh0ZXJuIHZvaWQgU2V0Q3VycmVudFN0YXRl bWVudFN0YXJ0VGltZXN0YW1wKHZvaWQpOwogZXh0ZXJuIGludAlHZXRDdXJyZW50VHJhbnNhY3Rp b25OZXN0TGV2ZWwodm9pZCk7CitRdWVyeURlc2MgICpHZXRDdXJyZW50UXVlcnlEZXNjKHZvaWQp Owordm9pZAkJU2V0Q3VycmVudFF1ZXJ5RGVzYyhRdWVyeURlc2MgKnF1ZXJ5RGVzYyk7CiBleHRl cm4gYm9vbCBUcmFuc2FjdGlvbklkSXNDdXJyZW50VHJhbnNhY3Rpb25JZChUcmFuc2FjdGlvbklk IHhpZCk7CiBleHRlcm4gdm9pZCBDb21tYW5kQ291bnRlckluY3JlbWVudCh2b2lkKTsKIGV4dGVy biB2b2lkIEZvcmNlU3luY0NvbW1pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4 IDAxZWJhM2I1YTE5Li42Y2JmYTBhZjkxZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04 NjA5LDYgKzg2MDksMTIgQEAKICAgcHJvcmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ ICdpbnQ0JywKICAgcHJvc3JjID0+ICdwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMnIH0s CiAKKyMgbG9nZ2luZyBwbGFuIG9mIHRoZSBydW5uaW5nIHF1ZXJ5IG9uIHRoZSBzcGVjaWZpZWQg YmFja2VuZAoreyBvaWQgPT4gJzgwMDAnLCBkZXNjciA9PiAnbG9nIHBsYW4gb2YgdGhlIHJ1bm5p bmcgcXVlcnkgb24gdGhlIHNwZWNpZmllZCBiYWNrZW5kJywKKyAgcHJvbmFtZSA9PiAncGdfbG9n X3F1ZXJ5X3BsYW4nLAorICBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ2Jvb2wn LAorICBwcm9hcmd0eXBlcyA9PiAnaW50NCcsIHByb3NyYyA9PiAncGdfbG9nX3F1ZXJ5X3BsYW4n IH0sCisKICMgbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcgogeyBvaWQgPT4gJzEwNjYn LCBkZXNjciA9PiAnbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcicsCiAgIHByb25hbWUg PT4gJ2dlbmVyYXRlX3NlcmllcycsIHByb3Jvd3MgPT4gJzEwMDAnLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY29tbWFuZHMvZHluYW1pY19leHBsYWluLmggYi9zcmMvaW5jbHVkZS9jb21tYW5k cy9keW5hbWljX2V4cGxhaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uODNhOWUyN2RlZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9k eW5hbWljX2V4cGxhaW4uaApAQCAtMCwwICsxLDI1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBkeW5hbWljX2V4cGxhaW4uaAorICoJICBwcm90b3R5cGVzIGZvciBkeW5hbWljX2V4cGxh aW4uYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LTUsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9p bmNsdWRlL2NvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5oCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpZm5kZWYgRFlOQU1JQ19FWFBMQUlOX0gKKyNkZWZpbmUgRFlOQU1JQ19FWFBMQUlO X0gKKworI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv ZXhwbGFpbl9zdGF0ZS5oIgorCitleHRlcm4gdm9pZCBIYW5kbGVMb2dRdWVyeVBsYW5JbnRlcnJ1 cHQodm9pZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0KHZvaWQp OworZXh0ZXJuIFR1cGxlVGFibGVTbG90ICpFeGVjUHJvY05vZGVXaXRoRXhwbGFpbihQbGFuU3Rh dGUgKnBzKTsKK2V4dGVybiB2b2lkIExvZ1F1ZXJ5UGxhbih2b2lkKTsKK2V4dGVybiBEYXR1bSBw Z19sb2dfcXVlcnlfcGxhbihQR19GVU5DVElPTl9BUkdTKTsKKworI2VuZGlmCQkJCQkJCS8qIERZ TkFNSUNfRVhQTEFJTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBs YWluLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKaW5kZXggNmU1MWQ1MGVmYzcu LjBkYzE2MGZhN2I0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgK KysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC03MCw4ICs3MCwxMCBAQCBl eHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9D bGF1c2UgKmludG8sCiAJCQkJCQkgICBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2UsCiAJCQkJ CQkgICBjb25zdCBNZW1vcnlDb250ZXh0Q291bnRlcnMgKm1lbV9jb3VudGVycyk7CiAKLWV4dGVy biB2b2lkIEV4cGxhaW5QcmludFBsYW4oRXhwbGFpblN0YXRlICplcywgUXVlcnlEZXNjICpxdWVy eURlc2MpOwotZXh0ZXJuIHZvaWQgRXhwbGFpblByaW50VHJpZ2dlcnMoRXhwbGFpblN0YXRlICpl cywKK2V4dGVybiB2b2lkIEV4cGxhaW5QcmludFBsYW4oc3RydWN0IEV4cGxhaW5TdGF0ZSAqZXMs IFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsKK2V4dGVybiB2b2lkIEV4cGxhaW5QcmludFRyaWdnZXJz KHN0cnVjdCBFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYyk7CitleHRlcm4g dm9pZCBFeHBsYWluUHJpbnRQbGFuKHN0cnVjdCBFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2Mg KnF1ZXJ5RGVzYyk7CitleHRlcm4gdm9pZCBFeHBsYWluUHJpbnRUcmlnZ2VycyhzdHJ1Y3QgRXhw bGFpblN0YXRlICplcywKIAkJCQkJCQkJIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsKIAogZXh0ZXJu IHZvaWQgRXhwbGFpblByaW50SklUU3VtbWFyeShFeHBsYWluU3RhdGUgKmVzLApAQCAtODAsNSAr ODIsOCBAQCBleHRlcm4gdm9pZCBFeHBsYWluUHJpbnRKSVRTdW1tYXJ5KEV4cGxhaW5TdGF0ZSAq ZXMsCiBleHRlcm4gdm9pZCBFeHBsYWluUXVlcnlUZXh0KEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5 RGVzYyAqcXVlcnlEZXNjKTsKIGV4dGVybiB2b2lkIEV4cGxhaW5RdWVyeVBhcmFtZXRlcnMoRXhw bGFpblN0YXRlICplcywKIAkJCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIGludCBtYXhs ZW4pOworZXh0ZXJuIHZvaWQgRXhwbGFpblN0cmluZ0Fzc2VtYmxlKHN0cnVjdCBFeHBsYWluU3Rh dGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYywKKwkJCQkJCQkJICBpbnQgbG9nRm9ybWF0LCBi b29sIGxvZ1RyaWdnZXJzLAorCQkJCQkJCQkgIGludCBsb2dQYXJhbWV0ZXJNYXhMZW5ndGgpOwog CiAjZW5kaWYJCQkJCQkJLyogRVhQTEFJTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9leHBsYWluX3N0YXRlLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluX3N0 YXRlLmgKaW5kZXggYmEwNzNiODY5MTguLmJmNDBmZGFiZmY1IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9jb21tYW5kcy9leHBsYWluX3N0YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXhwbGFpbl9zdGF0ZS5oCkBAIC03MSw2ICs3MSw3IEBAIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5T dGF0ZQogCQkJCQkJCQkgKiBlbnRyeSAqLwogCS8qIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGN1cnJl bnQgcGxhbiBub2RlICovCiAJRXhwbGFpbldvcmtlcnNTdGF0ZSAqd29ya2Vyc19zdGF0ZTsgLyog bmVlZGVkIGlmIHBhcmFsbGVsIHBsYW4gKi8KKwlib29sCQlzaWduYWxlZDsJCS8qIHdoZXRoZXIg ZXhwbGFpbiBpcyBjYWxsZWQgYnkgc2lnbmFsICovCiAJLyogZXh0ZW5zaW9ucyAqLwogCXZvaWQJ ICAqKmV4dGVuc2lvbl9zdGF0ZTsKIAlpbnQJCQlleHRlbnNpb25fc3RhdGVfYWxsb2NhdGVkOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXggMzI0OGU3OGNkMjguLmM2NmRmMTFlNzFhIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTI5NSw2ICsyOTUsNyBAQCBleHRlcm4gdm9pZCBFdmFs UGxhblF1YWxFbmQoRVBRU3RhdGUgKmVwcXN0YXRlKTsKIGV4dGVybiBQbGFuU3RhdGUgKkV4ZWNJ bml0Tm9kZShQbGFuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncyk7CiBleHRlcm4g dm9pZCBFeGVjU2V0RXhlY1Byb2NOb2RlKFBsYW5TdGF0ZSAqbm9kZSwgRXhlY1Byb2NOb2RlTXRk IGZ1bmN0aW9uKTsKIGV4dGVybiBOb2RlICpNdWx0aUV4ZWNQcm9jTm9kZShQbGFuU3RhdGUgKm5v ZGUpOworZXh0ZXJuIHZvaWQgRXhlY1NldEV4ZWNQcm9jTm9kZVJlY3Vyc2UoUGxhblN0YXRlICpw cyk7CiBleHRlcm4gdm9pZCBFeGVjRW5kTm9kZShQbGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZv aWQgRXhlY1NodXRkb3duTm9kZShQbGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1Nl dFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9ub2RlKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2Fk bWluLmgKaW5kZXggMWJlZjk4NDcxYzMuLjIyYjk0NWU5MThjIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtOTYsNiAr OTYsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTZXNz aW9uVGltZW91dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21p Y190IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGls ZSBzaWdfYXRvbWljX3QgTG9nTWVtb3J5Q29udGV4dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBP UlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nOwor ZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBMb2dRdWVyeVBsYW5QZW5k aW5nOwogCiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENoZWNrQ2xp ZW50Q29ubmVjdGlvblBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0 b21pY190IENsaWVudENvbm5lY3Rpb25Mb3N0OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRl eCBhZmVlYjFjYTAxOS4uZWEyNjI0MmM4NjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBA IC0zNSw2ICszNSw4IEBAIHR5cGVkZWYgZW51bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJ TkcsCS8qIGFzayB3YWxzZW5kZXJzIHRvIHByZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBST0NT SUdfQkFSUklFUiwJCQkvKiBnbG9iYWwgYmFycmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19M T0dfTUVNT1JZX0NPTlRFWFQsIC8qIGFzayBiYWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRl eHRzICovCisJUFJPQ1NJR19MT0dfUVVFUllfUExBTiwJCS8qIGFzayBiYWNrZW5kIHRvIGxvZyBw bGFuIG9mIHRoZSBjdXJyZW50CisJCQkJCQkJCSAqIHF1ZXJ5ICovCiAJUFJPQ1NJR19QQVJBTExF TF9BUFBMWV9NRVNTQUdFLCAvKiBNZXNzYWdlIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAq LwogCiAJLyogUmVjb3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL21pc2NfZnVuY3Rpb25zLm91dAppbmRleCAzNjE2NGE5OWM4My4uNjdhZGM2MDFh OWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMu b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CkBA IC0zNjYsNiArMzY2LDQ5IEBAIFJFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19iYWNr ZW5kX21lbW9yeV9jb250ZXh0cyhpbnRlZ2VyKQogICBGUk9NIHJlZ3Jlc3NfbG9nX21lbW9yeTsK IERST1AgUk9MRSByZWdyZXNzX2xvZ19tZW1vcnk7CiAtLQorLS0gcGdfbG9nX3F1ZXJ5X3BsYW4o KQorLS0KKy0tIFBsYW5zIGFyZSBsb2dnZWQgYW5kIHRoZXkgYXJlIG5vdCByZXR1cm5lZCB0byB0 aGUgZnVuY3Rpb24uCistLSBGdXJ0aGVybW9yZSwgdGhlaXIgY29udGVudHMgY2FuIHZhcnkgZGVw ZW5kaW5nIG9uIHRoZSBvcHRpbWl6ZXIuIEhvd2V2ZXIsCistLSB3ZSBjYW4gYXQgbGVhc3QgdmVy aWZ5IHRoYXQgdGhlIGNvZGUgZG9lc24ndCBmYWlsLCBhbmQgdGhhdCB0aGUKKy0tIHBlcm1pc3Np b25zIGFyZSBzZXQgcHJvcGVybHkuCitXSVRIIHQgQVMgTUFURVJJQUxJWkVEIChTRUxFQ1QgcGdf bG9nX3F1ZXJ5X3BsYW4ocGdfYmFja2VuZF9waWQoKSkpCisgICAgU0VMRUNUICogRlJPTSB0Owor IHBnX2xvZ19xdWVyeV9wbGFuIAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKwor Q1JFQVRFIFJPTEUgcmVncmVzc19sb2dfcGxhbjsKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmls ZWdlKCdyZWdyZXNzX2xvZ19wbGFuJywKKyAgJ3BnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpJywg J0VYRUNVVEUnKTsgLS0gbm8KKyBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBn X2xvZ19xdWVyeV9wbGFuKGludGVnZXIpCisgIFRPIHJlZ3Jlc3NfbG9nX3BsYW47CitTRUxFQ1Qg aGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfcGxhbicsCisgICdwZ19sb2dfcXVl cnlfcGxhbihpbnRlZ2VyKScsICdFWEVDVVRFJyk7IC0tIHllcworIGhhc19mdW5jdGlvbl9wcml2 aWxlZ2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFVCBST0xF IHJlZ3Jlc3NfbG9nX3BsYW47CitXSVRIIHQgQVMgTUFURVJJQUxJWkVEIChTRUxFQ1QgcGdfbG9n X3F1ZXJ5X3BsYW4ocGdfYmFja2VuZF9waWQoKSkpCisgICAgU0VMRUNUICogRlJPTSB0OworIHBn X2xvZ19xdWVyeV9wbGFuIAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworUkVT RVQgUk9MRTsKK1JFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGlu dGVnZXIpCisgIEZST00gcmVncmVzc19sb2dfcGxhbjsKK0RST1AgUk9MRSByZWdyZXNzX2xvZ19w bGFuOworLS0KIC0tIFRlc3Qgc29tZSBidWlsdC1pbiBTUkZzCiAtLQogLS0gVGhlIG91dHB1dHMg b2YgdGhlc2UgYXJlIHZhcmlhYmxlLCBzbyB3ZSBjYW4ndCBqdXN0IHByaW50IHRoZWlyIHJlc3Vs dHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbAppbmRleCAyMzc5MmM0MTMy YS4uODhiZTRiNmVmMmEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVu Y3Rpb25zLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwK QEAgLTE0Myw2ICsxNDMsMzggQEAgUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX2Jh Y2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpCiAKIERST1AgUk9MRSByZWdyZXNzX2xvZ19t ZW1vcnk7CiAKKy0tCistLSBwZ19sb2dfcXVlcnlfcGxhbigpCistLQorLS0gUGxhbnMgYXJlIGxv Z2dlZCBhbmQgdGhleSBhcmUgbm90IHJldHVybmVkIHRvIHRoZSBmdW5jdGlvbi4KKy0tIEZ1cnRo ZXJtb3JlLCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBkZXBlbmRpbmcgb24gdGhlIG9wdGltaXpl ci4gSG93ZXZlciwKKy0tIHdlIGNhbiBhdCBsZWFzdCB2ZXJpZnkgdGhhdCB0aGUgY29kZSBkb2Vz bid0IGZhaWwsIGFuZCB0aGF0IHRoZQorLS0gcGVybWlzc2lvbnMgYXJlIHNldCBwcm9wZXJseS4K KworV0lUSCB0IEFTIE1BVEVSSUFMSVpFRCAoU0VMRUNUIHBnX2xvZ19xdWVyeV9wbGFuKHBnX2Jh Y2tlbmRfcGlkKCkpKQorICAgIFNFTEVDVCAqIEZST00gdDsKKworQ1JFQVRFIFJPTEUgcmVncmVz c19sb2dfcGxhbjsKKworU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9n X3BsYW4nLAorICAncGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlciknLCAnRVhFQ1VURScpOyAtLSBu bworCitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIp CisgIFRPIHJlZ3Jlc3NfbG9nX3BsYW47CisKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdl KCdyZWdyZXNzX2xvZ19wbGFuJywKKyAgJ3BnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpJywgJ0VY RUNVVEUnKTsgLS0geWVzCisKK1NFVCBST0xFIHJlZ3Jlc3NfbG9nX3BsYW47CitXSVRIIHQgQVMg TUFURVJJQUxJWkVEIChTRUxFQ1QgcGdfbG9nX3F1ZXJ5X3BsYW4ocGdfYmFja2VuZF9waWQoKSkp CisgICAgU0VMRUNUICogRlJPTSB0OworUkVTRVQgUk9MRTsKKworUkVWT0tFIEVYRUNVVEUgT04g RlVOQ1RJT04gcGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlcikKKyAgRlJPTSByZWdyZXNzX2xvZ19w bGFuOworCitEUk9QIFJPTEUgcmVncmVzc19sb2dfcGxhbjsKKwogLS0KIC0tIFRlc3Qgc29tZSBi dWlsdC1pbiBTUkZzCiAtLQotLSAKMi40OC4xCgo= --=_b0a6acef959b16ccae3d8589b3c02c75--