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.96) (envelope-from ) id 1wRDaz-002BgS-1U for pgsql-hackers@arkaria.postgresql.org; Sun, 24 May 2026 18:30:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wRDav-00HAaa-1G for pgsql-hackers@arkaria.postgresql.org; Sun, 24 May 2026 18:30:38 +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.96) (envelope-from ) id 1wRDau-00HAaS-2I for pgsql-hackers@lists.postgresql.org; Sun, 24 May 2026 18:30:38 +0000 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wRDar-00000000akz-0FYf for pgsql-hackers@lists.postgresql.org; Sun, 24 May 2026 18:30:36 +0000 Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-687ed9aabb3so6845981a12.1 for ; Sun, 24 May 2026 11:30:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779647431; cv=none; d=google.com; s=arc-20240605; b=IJcrAQz5pi3p3KETrHzngSJP0z+1r81sAyR6IfeX+RxyTkH6FkCWaeYTn1NvYkfHRV M2h/9yaFUlxY2f//dn5WZGlFDQ+MXPN2+lbGbcpcGyNwMUONJb2AQ3RqFRAv4Gq5DDci Kqng/wdIpEGKeDlW/3QJZiyGIMVEQsYHzTqhyT6QlVN5P1fKfh3+5sO1obD+fy08dA0J XcxyWdwlcHkDy5PmR3TLw147xIcKsm+bPqHoXZKGjXM31DVFvtEw/FA3bFajrs059P0y z/yUSQeYJgLN9URnkw8bUVytjuNYEcd58piMxGMyr0pdRMNoXNbrwLbN0ja/Eh6x0HRe C8bA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=0gaJ4qEeSPz4cMKRvzHPuVsLYGzOpbaFctezBNwUMqo=; fh=ilSfAccwZgp3yzA7TnSwC3fUQWMTDGByv7GoTx3eBuU=; b=bIIzAxV4aVWKsrKCNG2kcXIkDDHWTfND30iE31/n26nyVcPN9Zwfl4Wi+ErdEJZN4D zKpkl8cCpMxdhRaxQ9U697n3l+DGaXdlY9xu8c2UKjl8a9loIWMyZUktE52RT+65oebV /phLixfDdGD6vjkZtXDN6ghxwSm1j8oPWYAOkMkUkC3AIJS+OfqPdsiVYAE0PBXMeBgP 4cZZmk+zLrYX8gJs4gO6CtWNLlOMc+SVqxWP1TbkE626r7F/ACcdEc3E0UBqTuTpDZPn sDlHlDuUvq8rodWEVbMwExLCASQE87z3AA7/yBwup5J65zcAzZvMvNV2XXD6Afw5ffyI 6HiQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779647431; x=1780252231; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=0gaJ4qEeSPz4cMKRvzHPuVsLYGzOpbaFctezBNwUMqo=; b=gsP7Wxcbfr5sfqJhB5SeM+SrHmi513dKZsbHgOb5Px0NKWAKAzb2nTyfJ9Yq3UUKWT VvYAvXOjNYHdfaG63dM4JerfswH4urcMhZslLDM2EFe7Y3iaFDfIbQpJI5KJFv8WX2lo bPCK8Joxi/9flKqiHKGhWEuQUBPaGQJSum5TWjzGXXdFG/RKW49myP9CjgewD1pBJk+X sjGoWtPITWizXB0J+5M5ANGUBBYsPSjNSp6nVcYGrJNiWiYoIjp8QKoMEFyaoinjIrC+ xdWY+Z8+UUeBsHIm9Ir4c0Yjfm62jonTtMS7aX4xERe8oQLMg3qiYKq7IsjFoEpgWl5F BJiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779647431; x=1780252231; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=0gaJ4qEeSPz4cMKRvzHPuVsLYGzOpbaFctezBNwUMqo=; b=KTEckl++mO3Da9xMtX9GJrNNP0JFh9BzLQPdbrFXRpr4Z9C99lYcb3/ObUPgO2Fwrg pwed3xHWWIgu7JBGgxxY0u0fqNjmASvFpMNVIHFhAwHIXAZAi9t0hb3fhqVbFtQxvkiJ thcARYdoljtIO4prOsjvYegmxNeCIMO78Es2k6wRQYHjPpWs5GPP2vql3IJ9njT0GObN c6od9sQ03wMoPBynRzCRvhQnV68lKWi+QXNqU/v4Dq5/zocYkzv0qqUHvX0yTe81cFpr u7foUy8hXfA15kHV0+8OOTQtI6Ahw02r8AFCc4B/0a2h/Gqa+gI5Jck/TCNtW5wmtF7h w+Zw== X-Gm-Message-State: AOJu0YyNMxoEwu+zfRm4rAOHhfXsZQlZy2xoOt6ZaHN6QSRsUYjzY7+X DPMGkK8smwNJFYWlKcQxULOpIebiSLrftV/W6MKIM7PsXv4YeXbjJGiIKEgsVF+kmabopu+UNDu lo+CK/tmuf4gpFauix+jUu6L6uxRH1FM= X-Gm-Gg: Acq92OEHaUywbRTYRhwkoKj4EGAxBEycsfYdXQurATtpCAoM3clHP6W3Fg/dSIzAR9x yR+b3haTEeSwAXhN8mWENvHagxZ57EjWKqRAJS2ks2K/UKmloXsPbxwSc8Uq5EBV+m/m89zOrvD /VLSsHmksKzrEGBSsAs8NulJ0hIKYW86HMw8OT28VnnP/2SZnhFCSuS0CUlxZelCZ89vhCslu5h KyeCCtFh4eHtn3pJKfDBVjvO6GuHRRZ6He4qXairg4NNMyGCvkQcxKcCKOzliQTz/VT3JUmxXN/ 1K9ifH8= X-Received: by 2002:a17:907:c706:b0:bdc:bb32:2ea9 with SMTP id a640c23a62f3a-bdd263cb23emr662025266b.35.1779647430450; Sun, 24 May 2026 11:30:30 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Mats Kindahl Date: Sun, 24 May 2026 20:30:17 +0200 X-Gm-Features: AVHnY4KqmB06z5THi8BnXLGOnFPmMLGhzqrBaeLKwVEnLry67VYr815j-w5P5vk Message-ID: Subject: Re: pg_rewind does not rewind diverging timelines To: surya poondla Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000eb24fc06529474ce" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000eb24fc06529474ce Content-Type: multipart/alternative; boundary="000000000000eb24fa06529474cc" --000000000000eb24fa06529474cc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, May 22, 2026 at 12:09=E2=80=AFAM surya poondla wrote: > Hi Mats, > > Thanks for picking this up -- the scenario is a real one and I think the > UUID-tagging approach is a clean way to solve it. v2 applies and builds > without trouble, and the core algorithm reads well to me. > I have a handful of observations that I'd love your thoughts. > Hi Surya, Thank you for the review. It is a quite rare scenario, but it is real and the fix is simple. > Regarding Correctness I have the below thoughts > > 1. UUIDv7 timestamp epoch. > In StartupXLOG(): > TimestampTz now =3D GetCurrentTimestamp(); > generate_uuidv7_r(&uuid_buf, (uint64)(now / 1000), > (uint32)(now % 1000) * 1000); > > I think there might be a small mismatch here: GetCurrentTimestamp() > returns microseconds since the Postgres epoch (2000-01-01), > whereas generate_uuidv7_r describes its first argument as milliseconds > since the Unix epoch. > As written that 30-year offset would land in the UUID's timestamp field, > so the resulting UUID wouldn't be a conformant UUIDv7 and wouldn't > time-order against UUIDv7s generated through the SQL functions. > > > Uniqueness is preserved either way, so the rewind logic still works as > intended but it seemed worth flagging. > > I see conversion that's used elsewhere as: > us =3D ts + (POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) > * SECS_PER_DAY * USECS_PER_SEC; > > Or, since promotion isn't on a hot path, gettimeofday() / time(NULL) > directly would also be fine. > Yes, the intention was to use a proper timestamp to allow debugging servers if necessary. Switched to gettimeofday() and used 0 for sub-ms since this is not going to be critical. (We could use ns here as well, but that would only solve a race if you have two servers being promoted in the same ms, which I find unlikely, and there is a random number added for that situation.) > 2. EOR-record path, the intent is unclear. > > The comment above generate_uuidv7_r() at says: > > "The same UUID is written into the history file and later into the > XLOG_END_OF_RECOVERY record so that pg_rewind can distinguish two > servers..." > > But from what I can see only the history-file part actually lands. > xl_end_of_recovery is unchanged, CreateEndOfRecoveryRecord() doesn't add > the UUID, and XLogCtl->ThisTimeLineUUID is written under info_lck without= a > reader (I couldn't grep it). > > The xlog_redo() memset() + Min(rec_len, sizeof(...)) change reads like > preparation for an EOR-struct extension that ended up not being part of t= he > patch. > > Was the EOR-record piece something you intended to keep for a follow-up, > or has it been superseded by the history-file approach? > No, the EOR changes are not needed for the promotion, contrary to what I originally thought. Cleaned up the comment and the code and removed all traces of changes to the EOR (I hope). > > > 3. Malformed UUID handling in readTimeLineHistory(). > > The optional field-4 path is: > > if (nfields =3D=3D 4 && strlen(uuid_str) =3D=3D UUID_STR_LEN) > { > Datum datum =3D DirectFunctionCall1(uuid_in, > CStringGetDatum(uuid_str))= ; > ... > } > > uuid_in() raises ereport(ERROR) on a malformed input, while the > surrounding syntax-error paths in readTimeLineHistory() use FATAL > deliberately. > In practice an ERROR during startup ends up being fatal too, so this isn'= t > strictly a bug but it would be nicer to stay consistent. > Agree. I added code to capture the error and raise a FATAL instead (with the error message from the uuid_in, in case it is modified it makes sense to show this). > Regarding the Tests I have the following thoughts > > The two new cases are nice, a few extensions that I think would strengthe= n > them: > 1. A mixed-version case where one side has a zero UUID. That's the path > we're claiming is graceful, but nothing currently exercises it > Yes, that should work regardless of whether the source or the target has the zero UUID. I realized one thing: if two timelines have identical TLI but one has zero UUID and one has not, it seems they could not come from the same promotion (one promotion happened on an old server and the other one on a new server), that is, they should be treated as different. Does that make sense? I made the necessary changes in the attached patches for testing. Please have a look. > 2. A deeper-divergence case (e.g. TLI1->2->3 vs TLI1->2->3') so that > findCommonAncestorTimeline's loop walks past matching entries > before hitting the mismatch. The 0002 test puts the divergence at > depth 1. > I was unsure if this test was necessary or interesting, hence a separate commit. Since you thought it was useful, it's now rolled into the patch and I extended the tests with the scenarios you suggested. I also did some refactorings of the tests to avoid duplication. More below. > 3. A small assertion against the on-disk 00000002.history contents, to pi= n > down the file format. > 4. On 0002 the dependency on restore_command pointing at node_x's pg_wal > is the kind of thing that tends to break under > environment changes. A CHECKPOINT on node_x before the backup, or > wal_keep_size as in 0001, would let the test stand on its own. > Good point. I refactored the code to avoid some duplication and make the test flow self-explanatory and as part of that I set the wal_keep_size for all nodes. In the process I noticed that many of the functions in RewindTest.pm do the same job as the primitives I wrote, but have hard-coded variable names. I could rewrite them to take parameters, but that would be quite a big patch to add additional changes to each call site, so I did not do that and rather added small wrappers specific for the tests in 005_same_timeline.pl. Attached a new version of the now single patch. > I'm happy to keep reviewing/contributing, thanks again for working on it. > Thank you for reviewing it. --=20 Best wishes, Mats Kindahl, Multigres Developer, Supabase --000000000000eb24fa06529474cc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Fri, May 22, 2026 at = 12:09=E2=80=AFAM surya poondla <suryapoondla4@gmail.com> wrote:
Hi Mats,

Thanks for picking this up -- the= scenario is a real one and I think=C2=A0the UUID-tagging approach is a cle= an way to solve it. v2 applies and=C2=A0builds without trouble, and the cor= e algorithm reads well to me.=C2=A0
I=C2=A0have a han= dful of observations that I'd love your thoughts.

Hi Surya,

Thank you for= the review. It is a quite rare scenario, but it is real and the fix is sim= ple.
=C2=A0
Regarding Correctness I have the below = thoughts

1. UUIDv7 timestamp epoch.
=C2=A0 =C2=A0 =C2=A0In Startu= pXLOG():
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0TimestampTz now =3D GetCurren= tTimestamp();
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0generate_uuidv7_r(&u= uid_buf, (uint64)(now / 1000),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 (uint32)(now % 1000) * 1000);

I think there might = be a small mismatch here: GetCurrentTimestamp() returns microseconds since = the Postgres epoch (2000-01-01),=C2=A0
whereas genera= te_uuidv7_r describes its first argument as milliseconds since the Unix epo= ch.=C2=A0
As written that 30-year offset would land i= n the UUID's timestamp field, so the resulting UUID wouldn't be a c= onformant UUIDv7 and wouldn't
time-order against UUIDv7s generated t= hrough the SQL functions.
=C2=A0

Uniqueness is preserved either way, so the rewind logic still works as= intended but it seemed worth flagging.
=

I see conversion that's used elsewhere as:
us = =3D ts + (POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE)
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* SECS_PER_DAY * USECS_PER_= SEC;

Or, since promotion isn't on a hot path, gettimeofday() / t= ime(NULL) directly would also be fine.
Yes, the intention was to use a proper timestamp to allow debug= ging servers if necessary. Switched to gettimeofday() and used 0 for sub-ms= since this is not going to be critical. (We could use ns here as well, but= that would only solve a race if you have two servers being promoted in the= same ms, which I find unlikely, and there is a random number added for tha= t situation.)
=C2=A0
2. EOR-record path, the intent= is unclear.

The comment above generate_uuidv7_r() at says:

&= quot;The same UUID is written into the history file and later into the XLOG= _END_OF_RECOVERY record so that pg_rewind can distinguish two servers...&qu= ot;

But from what I can see only the history-file part actually land= s.
xl_end_of_recovery is unchanged, CreateEndOfRecoveryRecord() doesn= 9;t add the UUID, and XLogCtl->ThisTimeLineUUID is written under info_lc= k without a
reader (I couldn't grep it).

= The xlog_redo() memset() + Min(rec_len, sizeof(...)) change reads like prep= aration for an EOR-struct extension that ended up not being part of the pat= ch.

Was the EOR-record piece something you intended to keep for a fo= llow-up, or has it been superseded by the history-file approach?
<= /div>

No, the EOR changes are not needed fo= r the promotion,=C2=A0contrary to what I originally=C2=A0thought. Cleaned u= p the comment and the code and removed all traces of changes to the EOR (I = hope).
=C2=A0
=C2=A0 =C2=A0 =C2=A0

3. Malfor= med UUID handling in readTimeLineHistory().

=C2=A0 =C2=A0 =C2=A0The = optional field-4 path is:

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (nfie= lds =3D=3D 4 && strlen(uuid_str) =3D=3D UUID_STR_LEN)
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0{
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0Datum datum =3D DirectFunctionCall1(uuid_in,
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0CStrin= gGetDatum(uuid_str));
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0..= .
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}

uuid_in() raises ereport(ER= ROR) on a malformed input, while the surrounding syntax-error paths in read= TimeLineHistory() use FATAL deliberately.
In practice an ERROR during s= tartup ends up being fatal too, so this isn't strictly a bug but it wou= ld be nicer to stay consistent.

=
Agree. I added code to capture the error and raise a FATAL instead (wi= th the error message from the uuid_in, in case it is modified it makes sens= e to show this).
=C2=A0
Regarding the Tests I have = the following thoughts

The two new cases are nice, a few extensions = that I think would strengthen them:
1. A mixed-version case where one si= de has a zero UUID. That's the path we're claiming is graceful, but= nothing currently exercises it

=
Yes, that should work regardless of whether the source or the target h= as the zero UUID.

I realized one thing: if two tim= elines have identical TLI but one has zero UUID and one has not, it seems t= hey could not come from the same promotion (one promotion happened on an ol= d=C2=A0server and the other one on a new server), that is, they should be t= reated as different. Does that make sense? I made the necessary changes in = the attached patches for testing. Please have a look.
=C2=A0
2. A deeper-divergence case (e.g. TLI1->2->3 vs TLI1->2-= >3') so that findCommonAncestorTimeline's loop walks past matchi= ng entries
=C2=A0 =C2=A0 =C2=A0before hitting the mismatch. The 0002 tes= t puts the divergence at depth 1.

I was unsure if this test was necessary or interesting, hence a sepa= rate commit. Since you thought it was useful, it's now rolled into the = patch and I extended the tests with the scenarios you suggested.
=
I also did some refactorings of the tests to avoid duplicati= on. More below.
=C2=A0
3. A small assertion against= the on-disk 00000002.history contents, to pin down the file format.
4. = On 0002=C2=A0the dependency on restore_command pointing at node_x's pg_= wal is the kind of thing that tends to break under
=C2=A0 =C2=A0 =C2=A0e= nvironment changes. A CHECKPOINT on node_x before the backup, or wal_keep_s= ize as in 0001, would let the test stand on its own.

Good point.

I refactored= the code=C2=A0to avoid some duplication and make the test flow self-explan= atory and as part of that I set the wal_keep_size for all nodes.
=
In the process I noticed that many of the functions in Rewin= dTest.pm do the same job as the primitives I wrote, but have hard-coded var= iable names. I could rewrite them to take parameters, but that would be qui= te a big patch to add additional changes to each call site, so I did not do= that and rather added small wrappers specific for the tests in 005_same_timeline.pl.
=C2=A0
Attached a new version of the now single patch.

=

I'm happy to keep reviewing/contributing, thanks again for= =C2=A0working on it.

Thank = you for reviewing it.
-- =
Best= wishes,
Mats Kindahl, Multigres Developer, Supabase
<= /div>
--000000000000eb24fa06529474cc-- --000000000000eb24fc06529474ce Content-Type: text/x-patch; charset="US-ASCII"; name="v3.0001-pg_rewind-use-UUIDs-to-detect-independent-same-TLI-p.patch" Content-Disposition: attachment; filename="v3.0001-pg_rewind-use-UUIDs-to-detect-independent-same-TLI-p.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpk3xh4i0 RnJvbSA2MDc3YWNjNjhhYzk0NGQwZmVlODNmZTIwYjZhYmQ4NWViYWFiNjg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRzIEtpbmRhaGwgPG1hdHNAa2luZGFobC5uZXQ+CkRhdGU6 IFNhdCwgMjMgTWF5IDIwMjYgMTY6MDk6NDQgKzAyMDAKU3ViamVjdDogcGdfcmV3aW5kOiB1c2Ug VVVJRHMgdG8gZGV0ZWN0IGluZGVwZW5kZW50IHNhbWUtVExJIHByb21vdGlvbnMKClR3byBQb3N0 Z3JlU1FMIHN0YW5kYnlzIGNhbiBpbmRlcGVuZGVudGx5IHByb21vdGUgdG8gdGhlIHNhbWUgdGlt ZWxpbmUKSUQgaWYgdGhlaXIgcHJpbWFyeSBzdG9wcGVkIGJlZm9yZSBlaXRoZXIgaGFkIGEgY2hh bmNlIHRvIHByb21vdGUuICBJbgp0aGF0IHNpdHVhdGlvbiBib3RoIGNsdXN0ZXJzIHNoYXJlIGEg dGltZWxpbmUgaGlzdG9yeSBwcmVmaXggdGhhdCBsb29rcwppZGVudGljYWwgdG8gcGdfcmV3aW5k OiBzYW1lIFRMSSBudW1iZXJzIGFuZCBzYW1lIGJlZ2luL2VuZCBMU05zLiAgVGhlCmV4aXN0aW5n IHNhbWUtVExJIHNob3J0Y3V0IHRoZXJlZm9yZSB0cmVhdGVkIHRoZSBzb3VyY2UgYXMgYSB2YWxp ZApyZXdpbmQgdGFyZ2V0IGFuZCBza2lwcGVkIHRoZSByZXdpbmQgZW50aXJlbHksIGxlYXZpbmcg dGhlIHRhcmdldCdzCmRpdmVyZ2VkIFdBTCBpbnRhY3QuCgpGaXggdGhpcyBieSBlbWJlZGRpbmcg YSBVVUlEdjcgdmFsdWUgaW4gZXZlcnkgdGltZWxpbmUgaGlzdG9yeSBmaWxlCmVudHJ5IGF0IHBy b21vdGlvbiB0aW1lLiAgRWFjaCBwcm9tb3Rpb24gZ2VuZXJhdGVzIGEgZnJlc2ggVVVJRCwgc28g dHdvCmluZGVwZW5kZW50IHByb21vdGlvbnMgdG8gdGhlIHNhbWUgVExJIHdpbGwgY2FycnkgZGlm ZmVyZW50IFVVSURzIGV2ZW4KdGhvdWdoIHRoZSBUTEkgbnVtYmVyIGFuZCBiZWdpbiBMU04gYXJl IGlkZW50aWNhbC4KCldoZW4gbG9hZGluZyB0aGUgdGltZWxpbmUgaGlzdG9yeSwgcGdfcmV3aW5k IHVzZXMgdGhlc2UgVVVJRHMgaW4gdHdvCnBsYWNlczoKCjEuIGZpbmRDb21tb25BbmNlc3RvclRp bWVsaW5lIGNoZWNrcyB0aGF0IHRoZSBUTEkgYW5kIFVVSUQgaW4gZWFjaCBlbnRyeQogICBtYXRj aC4gIEEgbWlzbWF0Y2ggc2lnbmFscyBpbmRlcGVuZGVudCBwcm9tb3Rpb25zIGFuZCB0aGUgc2Vh cmNoCiAgIGNvbnRpbnVlcyB0byBlYXJsaWVyIGVudHJpZXMgdG8gZmluZCB0aGUgdHJ1ZSBjb21t b24gYW5jZXN0b3IuCgoyLiBUaGUgc2FtZS1UTEkgc2hvcnRjdXQgKHNvdXJjZSBhbmQgdGFyZ2V0 IG9uIHRoZSBzYW1lIGN1cnJlbnQgVExJKQogICBjb21wYXJlcyB0aGUgVVVJRCBzdG9yZWQgaW4g dGhlIGxhc3QgY29tcGxldGVkIGhpc3RvcnkgZW50cnkgYW5kIGEKICAgbWlzbWF0Y2ggZm9yY2Vz IGEgZnVsbCByZXdpbmQgaW5zdGVhZCBvZiBhIG5vLW9wLgoKVVVJRHMgYXJlIHplcm8gZm9yIGNs dXN0ZXJzIHRoYXQgcHJlZGF0ZSB0aGlzIGNoYW5nZSwgYW5kIHRoZSBjb21wYXJpc29uCmZ1bmN0 aW9uIHRyZWF0cyBhIHplcm8gVVVJRCBvbiBlaXRoZXIgc2lkZSBhcyBkaWZmZXJlbnQgZnJvbSBh IFVVSUQKc2luY2UgdGhhdCBwcm9tb3Rpb24gaGFzIHRvIGJlIGZyb20gYSBkaWZmZXJlbnQgc2Vy dmVyIChpdCBoYWQgYQpwcmUtY2hhbmdlIHZlcnNpb24gc2VydmVyIHRoYXQgd2FzIHByb21vdGVk LCBzbyBpdCBjYW5ub3QgYmUgdGhlIHNhbWUgYXMKYSBwb3N0LWNoYW5nZSB2ZXJzaW9uIHNlcnZl ciB0aGF0IHdhcyBwcm9tb3RlZCkuCgpUd28gbmV3IHRlc3RzIGluIHQvMDA1X3NhbWVfdGltZWxp bmUucGwgY292ZXIgYm90aCBkZXRlY3Rpb24gcGF0aHMuCgpUaGUgZmlyc3QgY292ZXJzIHRoZSBz YW1lLVRMSSBzaG9ydGN1dDogdHdvIHN0YW5kYnlzIGluZGVwZW5kZW50bHkKcHJvbW90ZSB0byBU TEkyIGFuZCBUTEkyJywgZWFjaCB3aXRoIGEgZGlzdGluY3QgVVVJRC4KClRoZSBzZWNvbmQgY292 ZXJzIHRoZSBhbmNlc3RvciBzZWFyY2g6IHRoZSB0YXJnZXQgZ29lcyB0aHJvdWdoIFRMSTEgLT4K VExJMiAtPiBUTEkzIHdoaWxlIHRoZSBzb3VyY2UgaW5kZXBlbmRlbnRseSBwcm9tb3RlZCBzbyB0 aGF0IGl0IGhhcyBhCnRpbWVsaW5lIHdpdGggVExJMSAtPiBUTEkyJyAtPiBUTEkzJy4gVGhlIHRl c3QgZW5zdXJlcyB0aGF0CmZpbmRDb21tb25BbmNlc3RvclRpbWVsaW5lIGJhY2tzIHVwIHRvIFRM STEgYXMgdGhlIHRydWUgY29tbW9uIGFuY2VzdG9yCnJhdGhlciB0aGFuIGFjY2VwdGluZyB0aGUg bnVtZXJpY2FsbHkgbWF0Y2hpbmcgVExJMiBlbnRyeS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS90aW1lbGluZS5jICAgIHwgIDc5ICsrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9nLmMgICAgICAgIHwgIDE1ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC91dWlkLmMg ICAgICAgICAgICAgfCAgMTUgKy0KIHNyYy9iaW4vcGdfcmV3aW5kL3BnX3Jld2luZC5jICAgICAg ICAgICAgfCAxMTIgKysrKysrKy0KIHNyYy9iaW4vcGdfcmV3aW5kL3QvMDA1X3NhbWVfdGltZWxp bmUucGwgfCAzNTIgKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfcmV3aW5kL3Rp bWVsaW5lLmMgICAgICAgICAgICAgfCAgNDcgKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGltZWxp bmUuaCAgICAgICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5h bC5oICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3V1aWQuaCAgICAgICAgICAgICAg ICAgfCAgMTAgKy0KIDkgZmlsZXMgY2hhbmdlZCwgNjEzIGluc2VydGlvbnMoKyksIDIzIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3RpbWVsaW5l LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90aW1lbGluZS5jCmluZGV4IDY4ZTVmNjky ZDI2Li5kZjE2MWRjYzBkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v dGltZWxpbmUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90aW1lbGluZS5jCkBA IC00Miw2ICs0Miw4IEBACiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9m ZC5oIgogI2luY2x1ZGUgInV0aWxzL3dhaXRfZXZlbnQuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdy cHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvdXVpZC5oIgogCiAvKgogICogQ29waWVzIGFsbCB0 aW1lbGluZSBoaXN0b3J5IGZpbGVzIHdpdGggaWQncyBiZXR3ZWVuICdiZWdpbicgYW5kICdlbmQn CkBAIC0xMTAsOCArMTEyLDEyIEBAIHJlYWRUaW1lTGluZUhpc3RvcnkoVGltZUxpbmVJRCB0YXJn ZXRUTEkpCiAJCQllcmVwb3J0KEZBVEFMLAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3Mo KSwKIAkJCQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgcGF0aCkp KTsKLQkJLyogTm90IHRoZXJlLCBzbyBhc3N1bWUgbm8gcGFyZW50cyAqLwotCQllbnRyeSA9IHBh bGxvY19vYmplY3QoVGltZUxpbmVIaXN0b3J5RW50cnkpOworCisJCS8qCisJCSAqIE5vdCB0aGVy ZSwgc28gYXNzdW1lIG5vIHBhcmVudHMuIFdlIHVzZSBwYWxsb2MwX29iamVjdCB0byBlbnN1cmUK KwkJICogdGhhdCB0bHV1aWQgaXMgYWxsLXplcm8uCisJCSAqLworCQllbnRyeSA9IHBhbGxvYzBf b2JqZWN0KFRpbWVMaW5lSGlzdG9yeUVudHJ5KTsKIAkJZW50cnktPnRsaSA9IHRhcmdldFRMSTsK IAkJZW50cnktPmJlZ2luID0gZW50cnktPmVuZCA9IEludmFsaWRYTG9nUmVjUHRyOwogCQlyZXR1 cm4gbGlzdF9tYWtlMShlbnRyeSk7CkBAIC0xMjUsNiArMTMxLDcgQEAgcmVhZFRpbWVMaW5lSGlz dG9yeShUaW1lTGluZUlEIHRhcmdldFRMSSkKIAlwcmV2ZW5kID0gSW52YWxpZFhMb2dSZWNQdHI7 CiAJZm9yICg7OykKIAl7CisJCWNoYXIJCXV1aWRfc3RyW1VVSURfU1RSX0xFTiArIDFdID0gezB9 OwogCQljaGFyCQlmbGluZVtNQVhQR1BBVEhdOwogCQljaGFyCSAgICpyZXM7CiAJCWNoYXIJICAg KnB0cjsKQEAgLTE1NSw3ICsxNjIsOCBAQCByZWFkVGltZUxpbmVIaXN0b3J5KFRpbWVMaW5lSUQg dGFyZ2V0VExJKQogCQlpZiAoKnB0ciA9PSAnXDAnIHx8ICpwdHIgPT0gJyMnKQogCQkJY29udGlu dWU7CiAKLQkJbmZpZWxkcyA9IHNzY2FuZihmbGluZSwgIiV1XHQlWC8lMDhYIiwgJnRsaSwgJnN3 aXRjaHBvaW50X2hpLCAmc3dpdGNocG9pbnRfbG8pOworCQluZmllbGRzID0KKwkJCXNzY2FuZihm bGluZSwgIiV1XHQlWC8lMDhYXHQlMzZzIiwgJnRsaSwgJnN3aXRjaHBvaW50X2hpLCAmc3dpdGNo cG9pbnRfbG8sIHV1aWRfc3RyKTsKIAogCQlpZiAobmZpZWxkcyA8IDEpCiAJCXsKQEAgLTE2NCw3 ICsxNzIsNyBAQCByZWFkVGltZUxpbmVIaXN0b3J5KFRpbWVMaW5lSUQgdGFyZ2V0VExJKQogCQkJ CQkoZXJybXNnKCJzeW50YXggZXJyb3IgaW4gaGlzdG9yeSBmaWxlOiAlcyIsIGZsaW5lKSwKIAkJ CQkJIGVycmhpbnQoIkV4cGVjdGVkIGEgbnVtZXJpYyB0aW1lbGluZSBJRC4iKSkpOwogCQl9Ci0J CWlmIChuZmllbGRzICE9IDMpCisJCWlmIChuZmllbGRzIDwgMykKIAkJCWVyZXBvcnQoRkFUQUws CiAJCQkJCShlcnJtc2coInN5bnRheCBlcnJvciBpbiBoaXN0b3J5IGZpbGU6ICVzIiwgZmxpbmUp LAogCQkJCQkgZXJyaGludCgiRXhwZWN0ZWQgYSB3cml0ZS1haGVhZCBsb2cgc3dpdGNocG9pbnQg bG9jYXRpb24uIikpKTsKQEAgLTE3NiwxMiArMTg0LDQ1IEBAIHJlYWRUaW1lTGluZUhpc3Rvcnko VGltZUxpbmVJRCB0YXJnZXRUTEkpCiAKIAkJbGFzdHRsaSA9IHRsaTsKIAotCQllbnRyeSA9IHBh bGxvY19vYmplY3QoVGltZUxpbmVIaXN0b3J5RW50cnkpOworCQkvKgorCQkgKiBXZSB1c2UgcGFs bG9jMF9vYmplY3QgdG8gZW5zdXJlIHRoYXQgdGx1dWlkIGlzIGFsbC16ZXJvLCB3aGljaCBpcwor CQkgKiBpbXBvcnRhbnQgZm9yIHBnX3Jld2luZCB0byBkZXRlY3Qgd2hldGhlciB0aGUgaGlzdG9y eSBmaWxlIGlzCisJCSAqIG1pc3Npbmcgb3Igbm90LgorCQkgKi8KKwkJZW50cnkgPSBwYWxsb2Mw X29iamVjdChUaW1lTGluZUhpc3RvcnlFbnRyeSk7CiAJCWVudHJ5LT50bGkgPSB0bGk7CiAJCWVu dHJ5LT5iZWdpbiA9IHByZXZlbmQ7CiAJCWVudHJ5LT5lbmQgPSAoKHVpbnQ2NCkgKHN3aXRjaHBv aW50X2hpKSkgPDwgMzIgfCAodWludDY0KSBzd2l0Y2hwb2ludF9sbzsKIAkJcHJldmVuZCA9IGVu dHJ5LT5lbmQ7CiAKKwkJLyoKKwkJICogUGFyc2UgdGhlIG9wdGlvbmFsIFVVSUQgZmllbGQuIE9s ZCBoaXN0b3J5IGZpbGVzIGhhdmUgdGhlIHJlYXNvbgorCQkgKiBzdHJpbmcgaW4gZmllbGQgNC4g SXQgaXMgaW4gdGhlb3J5IHBvc3NpYmxlIHRoYXQgdGhlIHJlYXNvbiBzdHJpbmcKKwkJICogc3Rh cnRzIHdpdGggYSBVVUlELCBidXQgdGhlIGN1cnJlbnQgdXNhZ2UgZG8gbm90IHN0b3JlIGEgVVVJ RC4gVGhpcworCQkgKiBhbGxvd3MgdXMgdG8gc3VwcG9ydCBib3RoIG9sZCBhbmQgbmV3IGZvcm1h dHMgb2YgaGlzdG9yeSBmaWxlcworCQkgKiB3aXRob3V0IGJyZWFraW5nIGNvbXBhdGliaWxpdHkg YnkgY2hlY2tpbmcgaWYgdGhlIGZpZWxkIGNvbnRhaW5zIGEKKwkJICogdmFsaWQgVVVJRC4KKwkJ ICovCisJCWlmIChuZmllbGRzID09IDQgJiYgc3RybGVuKHV1aWRfc3RyKSA9PSBVVUlEX1NUUl9M RU4pCisJCXsKKwkJCVBHX1RSWSgpOworCQkJeworCQkJCURhdHVtCQlkYXR1bSA9IERpcmVjdEZ1 bmN0aW9uQ2FsbDEodXVpZF9pbiwgQ1N0cmluZ0dldERhdHVtKHV1aWRfc3RyKSk7CisKKwkJCQlt ZW1jcHkoJmVudHJ5LT50bHV1aWQsIERhdHVtR2V0VVVJRFAoZGF0dW0pLCBzaXplb2YocGdfdXVp ZF90KSk7CisJCQl9CisJCQlQR19DQVRDSCgpOworCQkJeworCQkJCUVycm9yRGF0YSAgKmVkYXRh ID0gQ29weUVycm9yRGF0YSgpOworCisJCQkJRmx1c2hFcnJvclN0YXRlKCk7CisJCQkJZXJlcG9y dChGQVRBTCwKKwkJCQkJCWVycm1zZygiaW52YWxpZCBVVUlEIGluIGhpc3RvcnkgZmlsZSBcIiVz XCIiLCBwYXRoKSwKKwkJCQkJCWVycmRldGFpbCgiJXMiLCBlZGF0YS0+bWVzc2FnZSkpOworCQkJ fQorCQkJUEdfRU5EX1RSWSgpOworCQl9CisKIAkJLyogQnVpbGQgbGlzdCB3aXRoIG5ld2VzdCBp dGVtIGZpcnN0ICovCiAJCXJlc3VsdCA9IGxjb25zKGVudHJ5LCByZXN1bHQpOwogCkBAIC0xOTcs OSArMjM4LDExIEBAIHJlYWRUaW1lTGluZUhpc3RvcnkoVGltZUxpbmVJRCB0YXJnZXRUTEkpCiAK IAkvKgogCSAqIENyZWF0ZSBvbmUgbW9yZSBlbnRyeSBmb3IgdGhlICJ0aXAiIG9mIHRoZSB0aW1l bGluZSwgd2hpY2ggaGFzIG5vIGVudHJ5Ci0JICogaW4gdGhlIGhpc3RvcnkgZmlsZS4KKwkgKiBp biB0aGUgaGlzdG9yeSBmaWxlLiBXZSB1c2UgcGFsbG9jMF9vYmplY3QgdG8gZW5zdXJlIHRoYXQg dGx1dWlkIGlzCisJICogYWxsLXplcm8sIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgcGdfcmV3aW5k IHRvIGRldGVjdCB3aGV0aGVyIHRoZQorCSAqIGhpc3RvcnkgZmlsZSBpcyBtaXNzaW5nIG9yIG5v dC4KIAkgKi8KLQllbnRyeSA9IHBhbGxvY19vYmplY3QoVGltZUxpbmVIaXN0b3J5RW50cnkpOwor CWVudHJ5ID0gcGFsbG9jMF9vYmplY3QoVGltZUxpbmVIaXN0b3J5RW50cnkpOwogCWVudHJ5LT50 bGkgPSB0YXJnZXRUTEk7CiAJZW50cnktPmJlZ2luID0gcHJldmVuZDsKIAllbnRyeS0+ZW5kID0g SW52YWxpZFhMb2dSZWNQdHI7CkBAIC0yOTQsMjEgKzMzNywzMyBAQCBmaW5kTmV3ZXN0VGltZUxp bmUoVGltZUxpbmVJRCBzdGFydFRMSSkKICAqCiAgKgluZXdUTEk6IElEIG9mIHRoZSBuZXcgdGlt ZWxpbmUKICAqCXBhcmVudFRMSTogSUQgb2YgaXRzIGltbWVkaWF0ZSBwYXJlbnQKKyAqCW5ld1RM VVVJRDogVVVJRCB1bmlxdWVseSBpZGVudGlmeWluZyB0aGlzIHByb21vdGlvbiBpbnN0YW5jZQog ICoJc3dpdGNocG9pbnQ6IFdBTCBsb2NhdGlvbiB3aGVyZSB0aGUgc3lzdGVtIHN3aXRjaGVkIHRv IHRoZSBuZXcgdGltZWxpbmUKICAqCXJlYXNvbjogaHVtYW4tcmVhZGFibGUgZXhwbGFuYXRpb24g b2Ygd2h5IHRoZSB0aW1lbGluZSB3YXMgc3dpdGNoZWQKICAqCi0gKiBDdXJyZW50bHkgdGhpcyBp cyBvbmx5IHVzZWQgYXQgdGhlIGVuZCByZWNvdmVyeSwgYW5kIHNvIHRoZXJlIGFyZSBubyBsb2Nr aW5nCisgKiBUaGUgb3V0cHV0IGZpbGUgaXMgbmFtZWQgPG5ld1RMST4uaGlzdG9yeSAoZS5nLiAw MDAwMDAwMy5oaXN0b3J5KS4gIElmIHR3bworICogc2VydmVycyBpbmRlcGVuZGVudGx5IHByb21v dGUgdG8gdGhlIHNhbWUgdGltZWxpbmUgSUQsIHRoZWlyIGhpc3RvcnkgZmlsZXMKKyAqIHNoYXJl IHRoZSBzYW1lIG5hbWUuIEluIGEgc2hhcmVkIFdBTCBhcmNoaXZlIHRoZSBzZWNvbmQgZmlsZSB0 byBhcnJpdmUKKyAqIHNpbGVudGx5IG92ZXJ3cml0ZXMgdGhlIGZpcnN0LiAgVGhlIG5ld1RMVVVJ RCB3cml0dGVuIGludG8gdGhlIGZpbGUgY29udGVudAorICogbGV0cyBwZ19yZXdpbmQgZGV0ZWN0 IHRoaXMgY29sbGlzaW9uOiBpdCBmZXRjaGVzIGVhY2ggc2VydmVyJ3MgaGlzdG9yeSBmaWxlCisg KiBkaXJlY3RseSBmcm9tIHRoYXQgc2VydmVyLCBjb21wYXJlcyB0aGUgVVVJRHMgZm9yIGV2ZXJ5 IHNoYXJlZCBUTEksIGFuZAorICogdHJlYXRzIGEgVVVJRCBtaXNtYXRjaCBhcyBldmlkZW5jZSBv ZiBpbmRlcGVuZGVudCBwcm9tb3Rpb24gZXZlbiB3aGVuIHRoZQorICogVExJIG51bWJlcnMgYWdy ZWUuCisgKgorICogQ3VycmVudGx5IHRoaXMgaXMgb25seSB1c2VkIGF0IGVuZCBvZiByZWNvdmVy eSwgYW5kIHNvIHRoZXJlIGFyZSBubyBsb2NraW5nCiAgKiBjb25zaWRlcmF0aW9ucy4gIEJ1dCB3 ZSBzaG91bGQgYmUganVzdCBhcyB0ZW5zZSBhcyBYTG9nRmlsZUluaXQgdG8gYXZvaWQKICAqIGVt cGxhY2luZyBhIGJvZ3VzIGZpbGUuCiAgKi8KIHZvaWQKIHdyaXRlVGltZUxpbmVIaXN0b3J5KFRp bWVMaW5lSUQgbmV3VExJLCBUaW1lTGluZUlEIHBhcmVudFRMSSwKKwkJCQkJIGNvbnN0IHBnX3V1 aWRfdCAqbmV3VExVVUlELAogCQkJCQkgWExvZ1JlY1B0ciBzd2l0Y2hwb2ludCwgY2hhciAqcmVh c29uKQogewogCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAljaGFyCQl0bXBwYXRoW01BWFBHUEFU SF07CiAJY2hhcgkJaGlzdGZuYW1lW01BWEZOQU1FTEVOXTsKIAljaGFyCQlidWZmZXJbQkxDS1Na XTsKKwljaGFyCSAgICp1dWlkX3N0cjsKIAlpbnQJCQlzcmNmZDsKIAlpbnQJCQlmZDsKIAlpbnQJ CQluYnl0ZXM7CkBAIC0zOTgsMTMgKzQ1MywxOSBAQCB3cml0ZVRpbWVMaW5lSGlzdG9yeShUaW1l TGluZUlEIG5ld1RMSSwgVGltZUxpbmVJRCBwYXJlbnRUTEksCiAJICoKIAkgKiBJZiB3ZSBkaWQg aGF2ZSBhIHBhcmVudCBmaWxlLCBpbnNlcnQgYW4gZXh0cmEgbmV3bGluZSBqdXN0IGluIGNhc2Ug dGhlCiAJICogcGFyZW50IGZpbGUgZmFpbGVkIHRvIGVuZCB3aXRoIG9uZS4KKwkgKgorCSAqIEZv cm1hdDogPHBhcmVudFRMST5cdDxzd2l0Y2hwb2ludD5cdDxUaGlzVGltZUxpbmVVVUlEPlx0PHJl YXNvbj5cbgogCSAqLworCXV1aWRfc3RyID0gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9u Q2FsbDEodXVpZF9vdXQsIFVVSURQR2V0RGF0dW0obmV3VExVVUlEKSkpOworCiAJc25wcmludGYo YnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKLQkJCSAiJXMldVx0JVgvJTA4WFx0JXNcbiIsCisJCQkg IiVzJXVcdCVYLyUwOFhcdCVzXHQlc1xuIiwKIAkJCSAoc3JjZmQgPCAwKSA/ICIiIDogIlxuIiwK IAkJCSBwYXJlbnRUTEksCiAJCQkgTFNOX0ZPUk1BVF9BUkdTKHN3aXRjaHBvaW50KSwKKwkJCSB1 dWlkX3N0ciwKIAkJCSByZWFzb24pOworCXBmcmVlKHV1aWRfc3RyKTsKIAogCW5ieXRlcyA9IHN0 cmxlbihidWZmZXIpOwogCWVycm5vID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRl eCBlMzlhZjc5YzAzYi4uZjBjZjlmN2I0MzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMK QEAgLTk5LDYgKzk5LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNs dWRlICJzdG9yYWdlL3N5bmMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKKyNpbmNs dWRlICJ1dGlscy91dWlkLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX3RhYmxlcy5oIgogI2luY2x1 ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9pbnRl cm5hbC5oIgpAQCAtNjM3Nyw2ICs2Mzc4LDkgQEAgU3RhcnR1cFhMT0codm9pZCkKIAluZXdUTEkg PSBlbmRPZlJlY292ZXJ5SW5mby0+bGFzdFJlY1RMSTsKIAlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVx dWVzdGVkKQogCXsKKwkJc3RydWN0IHRpbWV2YWwgdHY7CisJCXBnX3V1aWRfdAl1dWlkX2J1ZjsK KwogCQluZXdUTEkgPSBmaW5kTmV3ZXN0VGltZUxpbmUocmVjb3ZlcnlUYXJnZXRUTEkpICsgMTsK IAkJZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygic2VsZWN0ZWQgbmV3IHRpbWVsaW5lIElEOiAl dSIsIG5ld1RMSSkpKTsKQEAgLTY0MDcsOCArNjQxMSwxOSBAQCBTdGFydHVwWExPRyh2b2lkKQog CQkgKiB0byB0aGUgbmV3IHRpbWVsaW5lLCBhbmQgd2lsbCB0cnkgdG8gY29ubmVjdCB0byB0aGUg bmV3IHRpbWVsaW5lLgogCQkgKiBUbyBtaW5pbWl6ZSB0aGUgd2luZG93IGZvciB0aGF0LCB0cnkg dG8gZG8gYXMgbGl0dGxlIGFzIHBvc3NpYmxlCiAJCSAqIGJldHdlZW4gaGVyZSBhbmQgd3JpdGlu ZyB0aGUgZW5kLW9mLXJlY292ZXJ5IHJlY29yZC4KKwkJICoKKwkJICogR2VuZXJhdGUgYSBVVUlE djcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoaXMgcHJvbW90aW9uLiAgVGhlCisJCSAqIHNh bWUgVVVJRCBpcyB3cml0dGVuIGludG8gdGhlIGhpc3RvcnkgZmlsZSBzbyB0aGF0IHBnX3Jld2lu ZCBjYW4KKwkJICogZGlzdGluZ3Vpc2ggdHdvIHNlcnZlcnMgdGhhdCBpbmRlcGVuZGVudGx5IHBy b21vdGVkIHRvIHRoZSBzYW1lCisJCSAqIHRpbWVsaW5lIElELiAgVXNlIGdldHRpbWVvZmRheSgp IHNpbmNlIHdlIGFyZSBub3Qgb24gYSBob3QgcGF0aDsKKwkJICogZ2VuZXJhdGVfdXVpZHY3IHdh bnRzIG1pbGxpc2Vjb25kcyBhbmQgd2UgcGFzcyAwIGZvciBzdWItbXMgc2luY2UKKwkJICogdGhl IHJhbmRvbSBiaXRzIGFscmVhZHkgZGlzdGluZ3Vpc2ggVVVJRHMgZ2VuZXJhdGVkIHdpdGhpbiB0 aGUgc2FtZQorCQkgKiBtaWxsaXNlY29uZC4KIAkJICovCisJCWdldHRpbWVvZmRheSgmdHYsIE5V TEwpOworCQlnZW5lcmF0ZV91dWlkdjdfcigmdXVpZF9idWYsIHR2LnR2X3NlYyAqIDEwMDAgKyB0 di50dl91c2VjIC8gMTAwMCwgMCk7CiAJCXdyaXRlVGltZUxpbmVIaXN0b3J5KG5ld1RMSSwgcmVj b3ZlcnlUYXJnZXRUTEksCisJCQkJCQkJICZ1dWlkX2J1ZiwKIAkJCQkJCQkgRW5kT2ZMb2csIGVu ZE9mUmVjb3ZlcnlJbmZvLT5yZWNvdmVyeVN0b3BSZWFzb24pOwogCiAJCWVyZXBvcnQoTE9HLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3V1aWQuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC91dWlkLmMKaW5kZXggNmVlMzc1MmFjNzguLmYxZGMwMTk2Y2Q4IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvdXVpZC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC91dWlkLmMKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIGJvb2wgdXVpZF9hYmJyZXZfYWJvcnQo aW50IG1lbXR1cGNvdW50LCBTb3J0U3VwcG9ydCBzc3VwKTsKIHN0YXRpYyBEYXR1bSB1dWlkX2Fi YnJldl9jb252ZXJ0KERhdHVtIG9yaWdpbmFsLCBTb3J0U3VwcG9ydCBzc3VwKTsKIHN0YXRpYyBp bmxpbmUgdm9pZCB1dWlkX3NldF92ZXJzaW9uKHBnX3V1aWRfdCAqdXVpZCwgdW5zaWduZWQgY2hh ciB2ZXJzaW9uKTsKIHN0YXRpYyBpbmxpbmUgaW50NjQgZ2V0X3JlYWxfdGltZV9uc19hc2NlbmRp bmcodm9pZCk7Ci1zdGF0aWMgcGdfdXVpZF90ICpnZW5lcmF0ZV91dWlkdjcodWludDY0IHVuaXhf dHNfbXMsIHVpbnQzMiBzdWJfbXMpOworcGdfdXVpZF90ICAqZ2VuZXJhdGVfdXVpZHY3KHVpbnQ2 NCB1bml4X3RzX21zLCB1aW50MzIgc3ViX21zKTsKIAogRGF0dW0KIHV1aWRfaW4oUEdfRlVOQ1RJ T05fQVJHUykKQEAgLTU4MSw2ICs1ODEsMTQgQEAgZ2V0X3JlYWxfdGltZV9uc19hc2NlbmRpbmco dm9pZCkKIAlyZXR1cm4gbnM7CiB9CiAKK3BnX3V1aWRfdCAqCitnZW5lcmF0ZV91dWlkdjcodWlu dDY0IHVuaXhfdHNfbXMsIHVpbnQzMiBzdWJfbXMpCit7CisJcGdfdXVpZF90ICAqdXVpZCA9IHBh bGxvYyhVVUlEX0xFTik7CisKKwlyZXR1cm4gZ2VuZXJhdGVfdXVpZHY3X3IodXVpZCwgdW5peF90 c19tcywgc3ViX21zKTsKK30KKwogLyoKICAqIEdlbmVyYXRlIFVVSUQgdmVyc2lvbiA3IHBlciBS RkMgOTU2Miwgd2l0aCB0aGUgZ2l2ZW4gdGltZXN0YW1wLgogICoKQEAgLTU5NywxMCArNjA1LDkg QEAgZ2V0X3JlYWxfdGltZV9uc19hc2NlbmRpbmcodm9pZCkKICAqCiAgKiBOQjogYWxsIG51bWJl cnMgaGVyZSBhcmUgdW5zaWduZWQsIHVuaXhfdHNfbXMgY2Fubm90IGJlIG5lZ2F0aXZlIHBlciBS RkMuCiAgKi8KLXN0YXRpYyBwZ191dWlkX3QgKgotZ2VuZXJhdGVfdXVpZHY3KHVpbnQ2NCB1bml4 X3RzX21zLCB1aW50MzIgc3ViX21zKQorcGdfdXVpZF90ICoKK2dlbmVyYXRlX3V1aWR2N19yKHBn X3V1aWRfdCAqdXVpZCwgdWludDY0IHVuaXhfdHNfbXMsIHVpbnQzMiBzdWJfbXMpCiB7Ci0JcGdf dXVpZF90ICAqdXVpZCA9IHBhbGxvYyhVVUlEX0xFTik7CiAJdWludDMyCQlpbmNyZWFzZWRfY2xv Y2tfcHJlY2lzaW9uOwogCiAJLyogRmlsbCBpbiB0aW1lIHBhcnQgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfcmV3aW5kL3BnX3Jld2luZC5jIGIvc3JjL2Jpbi9wZ19yZXdpbmQvcGdfcmV3aW5k LmMKaW5kZXggOWQ3NDVkNGIyNWIuLmRkYjFhNmI1MDAxIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X3Jld2luZC9wZ19yZXdpbmQuYworKysgYi9zcmMvYmluL3BnX3Jld2luZC9wZ19yZXdpbmQuYwpA QCAtMzIsNiArMzIsMTkgQEAKICNpbmNsdWRlICJyZXdpbmRfc291cmNlLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9idWZwYWdlLmgiCiAKKy8qCisgKiBUaW1lbGluZSBoaXN0b3JpZXMgZm9yIGJvdGgg Y2x1c3RlcnMsIHBvcHVsYXRlZCBieSB0aW1lbGluZXNfbWF0Y2goKS4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgVGltZWxpbmVIaXN0b3JpZXNEYXRhCit7CisJVGltZUxpbmVIaXN0b3J5RW50cnkgKnNv dXJjZSwKKwkJCSAgICp0YXJnZXQ7CisJaW50CQkJc291cmNlTmVudHJpZXMsCisJCQkJdGFyZ2V0 TmVudHJpZXM7Cit9CQkJVGltZWxpbmVIaXN0b3JpZXNEYXRhOworCit0eXBlZGVmIFRpbWVsaW5l SGlzdG9yaWVzRGF0YSAqIFRpbWVsaW5lSGlzdG9yaWVzOworCiBzdGF0aWMgdm9pZCB1c2FnZShj b25zdCBjaGFyICpwcm9nbmFtZSk7CiAKIHN0YXRpYyB2b2lkIHBlcmZvcm1fcmV3aW5kKGZpbGVt YXBfdCAqZmlsZW1hcCwgcmV3aW5kX3NvdXJjZSAqc291cmNlLApAQCAtNTMsNiArNjYsOSBAQCBz dGF0aWMgdm9pZCBmaW5kQ29tbW9uQW5jZXN0b3JUaW1lbGluZShUaW1lTGluZUhpc3RvcnlFbnRy eSAqYV9oaXN0b3J5LAogCQkJCQkJCQkJICAgVGltZUxpbmVIaXN0b3J5RW50cnkgKmJfaGlzdG9y eSwKIAkJCQkJCQkJCSAgIGludCBiX25lbnRyaWVzLAogCQkJCQkJCQkJICAgWExvZ1JlY1B0ciAq cmVjcHRyLCBpbnQgKnRsaUluZGV4KTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaGluZ1RpbWVs aW5lVVVJRChUaW1lTGluZUhpc3RvcnlFbnRyeSAqYSwgVGltZUxpbmVIaXN0b3J5RW50cnkgKmIp Oworc3RhdGljIGJvb2wgbWF0Y2hBbmRGZXRjaFRpbWVsaW5lcyhUaW1lTGluZUlEIHNvdXJjZV90 bGksIFRpbWVMaW5lSUQgdGFyZ2V0X3RsaSwKKwkJCQkJCQkJICAgVGltZWxpbmVIaXN0b3JpZXMg dGltZWxpbmVIaXN0b3JpZXMpOwogc3RhdGljIHZvaWQgZW5zdXJlQ2xlYW5TaHV0ZG93bihjb25z dCBjaGFyICphcmd2MCk7CiBzdGF0aWMgdm9pZCBkaXNjb25uZWN0X2F0ZXhpdCh2b2lkKTsKIApA QCAtMTQxLDYgKzE1Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWludAkJCWM7 CiAJWExvZ1JlY1B0cglkaXZlcmdlcmVjOwogCWludAkJCWxhc3Rjb21tb250bGlJbmRleDsKKwlU aW1lbGluZUhpc3Rvcmllc0RhdGEgdGltZWxpbmVIaXN0b3JpZXM7CiAJWExvZ1JlY1B0cgljaGtw dHJlYzsKIAlUaW1lTGluZUlECWNoa3B0dGxpOwogCVhMb2dSZWNQdHIJY2hrcHRyZWRvOwpAQCAt MzcyLDEwICszODksMjAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICoKIAkgKiBJ ZiBib3RoIGNsdXN0ZXJzIGFyZSBhbHJlYWR5IG9uIHRoZSBzYW1lIHRpbWVsaW5lLCB0aGVyZSdz IG5vdGhpbmcgdG8KIAkgKiBkby4KKwkgKgorCSAqIFRoaXMgYWxzbyBoYW5kbGVzIHRoZSBjYXNl IHdoZW4gdHdvIHNlcnZlcnMgaW5kZXBlbmRlbnRseSBwcm9tb3RlZCB0bworCSAqIHRoZSBzYW1l IHRpbWVsaW5lIElEOiBvbmUgY3Jhc2hlZCBhZnRlciB3cml0aW5nIHRoZSBoaXN0b3J5IGZpbGUg YnV0CisJICogYmVmb3JlIGl0cyBFT1IgV0FMIHJlY29yZCB3YXMgZGlzdHJpYnV0ZWQsIHNvIGEg c2Vjb25kIHN0YW5kYnkgcHJvbW90ZWQKKwkgKiBpbmRlcGVuZGVudGx5LiAgVGhlIGhpc3Rvcnkg ZmlsZXMgcHJvZHVjZWQgYnkgdGhvc2UgdHdvIHByb21vdGlvbnMKKwkgKiBjYXJyeSBkaWZmZXJl bnQgVVVJRHMuCisJICoKKwkgKiBXaGVuIHRoZSBjbHVzdGVycyBhcmUgb24gZGlmZmVyZW50IHRp bWVsaW5lcyB3ZSBsb2NhdGUgdGhlIGZvcmsgcG9pbnQKKwkgKiB2aWEgZmluZENvbW1vbkFuY2Vz dG9yVGltZWxpbmUuCiAJICovCi0JaWYgKHRhcmdldF90bGkgPT0gc291cmNlX3RsaSkKKwlpZiAo bWF0Y2hBbmRGZXRjaFRpbWVsaW5lcyhzb3VyY2VfdGxpLCB0YXJnZXRfdGxpLCAmdGltZWxpbmVI aXN0b3JpZXMpKQogCXsKIAkJcGdfbG9nX2luZm8oInNvdXJjZSBhbmQgdGFyZ2V0IGNsdXN0ZXIg YXJlIG9uIHRoZSBzYW1lIHRpbWVsaW5lIik7CisJCXBmcmVlKHRpbWVsaW5lSGlzdG9yaWVzLnNv dXJjZSk7CiAJCXJld2luZF9uZWVkZWQgPSBmYWxzZTsKIAkJdGFyZ2V0X3dhbF9lbmRyZWMgPSBJ bnZhbGlkWExvZ1JlY1B0cjsKIAl9CkBAIC0zODksOCArNDE2LDEwIEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCQkgKiBSZXRyaWV2ZSB0aW1lbGluZXMgZm9yIGJvdGggc291cmNlIGFu ZCB0YXJnZXQsIGFuZCBmaW5kIHRoZSBwb2ludAogCQkgKiB3aGVyZSB0aGV5IGRpdmVyZ2VkLgog CQkgKi8KLQkJc291cmNlSGlzdG9yeSA9IGdldFRpbWVsaW5lSGlzdG9yeShzb3VyY2VfdGxpLCB0 cnVlLCAmc291cmNlTmVudHJpZXMpOwotCQl0YXJnZXRIaXN0b3J5ID0gZ2V0VGltZWxpbmVIaXN0 b3J5KHRhcmdldF90bGksIGZhbHNlLCAmdGFyZ2V0TmVudHJpZXMpOworCQl0YXJnZXRIaXN0b3J5 ID0gdGltZWxpbmVIaXN0b3JpZXMudGFyZ2V0OworCQl0YXJnZXROZW50cmllcyA9IHRpbWVsaW5l SGlzdG9yaWVzLnRhcmdldE5lbnRyaWVzOworCQlzb3VyY2VIaXN0b3J5ID0gdGltZWxpbmVIaXN0 b3JpZXMuc291cmNlOworCQlzb3VyY2VOZW50cmllcyA9IHRpbWVsaW5lSGlzdG9yaWVzLnNvdXJj ZU5lbnRyaWVzOwogCiAJCWZpbmRDb21tb25BbmNlc3RvclRpbWVsaW5lKHNvdXJjZUhpc3Rvcnks IHNvdXJjZU5lbnRyaWVzLAogCQkJCQkJCQkgICB0YXJnZXRIaXN0b3J5LCB0YXJnZXROZW50cmll cywKQEAgLTg3NCw3ICs5MDMsNyBAQCBnZXRUaW1lbGluZUhpc3RvcnkoVGltZUxpbmVJRCB0bGks IGJvb2wgaXNfc291cmNlLCBpbnQgKm5lbnRyaWVzKQogCSAqLwogCWlmICh0bGkgPT0gMSkKIAl7 Ci0JCWhpc3RvcnkgPSBwZ19tYWxsb2Nfb2JqZWN0KFRpbWVMaW5lSGlzdG9yeUVudHJ5KTsKKwkJ aGlzdG9yeSA9IHBnX21hbGxvYzBfb2JqZWN0KFRpbWVMaW5lSGlzdG9yeUVudHJ5KTsKIAkJaGlz dG9yeS0+dGxpID0gdGxpOwogCQloaXN0b3J5LT5iZWdpbiA9IGhpc3RvcnktPmVuZCA9IEludmFs aWRYTG9nUmVjUHRyOwogCQkqbmVudHJpZXMgPSAxOwpAQCAtOTIwLDYgKzk0OSw2NSBAQCBnZXRU aW1lbGluZUhpc3RvcnkoVGltZUxpbmVJRCB0bGksIGJvb2wgaXNfc291cmNlLCBpbnQgKm5lbnRy aWVzKQogCXJldHVybiBoaXN0b3J5OwogfQogCisvKgorICogUmV0dXJuIHRydWUgaWYgdHdvIHBl ci1lbnRyeSBwcm9tb3Rpb24gVVVJRHMgYXJlIGNvbXBhdGlibGUuCisgKgorICogQSB6ZXJvIFVV SUQgbWVhbnMgdGhlIGhpc3RvcnkgZmlsZSBwcmVkYXRlcyB0aGlzIGZpeCAob3IgdGhlIGVudHJ5 IGlzCisgKiBzeW50aGV0aWMpLiAgSWYgYm90aCBzaWRlcyBhcmUgemVybyB3ZSBoYXZlIG5vIFVV SUQgaW5mb3JtYXRpb24gYW5kIGZhbGwKKyAqIGJhY2sgdG8gVExJLW51bWJlci1vbmx5IG1hdGNo aW5nIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkIHNlcnZlcnMpLgorICogSWYgb25l IHNpZGUgY2FycmllcyBhIFVVSUQgYW5kIHRoZSBvdGhlciBkb2VzIG5vdCwgdGhleSBjYW5ub3Qg b3JpZ2luYXRlCisgKiBmcm9tIHRoZSBzYW1lIHByb21vdGlvbiBhbmQgYXJlIHRyZWF0ZWQgYXMg aW5jb21wYXRpYmxlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK21hdGNoaW5nVGltZWxpbmVV VUlEKFRpbWVMaW5lSGlzdG9yeUVudHJ5ICphLCBUaW1lTGluZUhpc3RvcnlFbnRyeSAqYikKK3sK KwlzdGF0aWMgY29uc3QgcGdfdXVpZF90IHplcm8gPSB7ezB9fTsKKworCWlmIChtZW1jbXAoJmEt PnRsdXVpZCwgJnplcm8sIFVVSURfTEVOKSA9PSAwICYmIG1lbWNtcCgmYi0+dGx1dWlkLCAmemVy bywgVVVJRF9MRU4pID09IDApCisJCXJldHVybiB0cnVlOworCXJldHVybiBtZW1jbXAoJmEtPnRs dXVpZCwgJmItPnRsdXVpZCwgVVVJRF9MRU4pID09IDA7Cit9CisKKy8qCisgKiBGZXRjaCB0aGUg dGltZWxpbmUgaGlzdG9yeSBmb3IgYm90aCBjbHVzdGVycywgc3RvcmUgdGhlbSBpbiB0bGgsIGFu ZCByZXR1cm4KKyAqIHRydWUgaWYgdGhlIGNsdXN0ZXJzIGFyZSBvbiB0aGUgc2FtZSB0aW1lbGlu ZSAobm8gcmV3aW5kIG5lZWRlZCkuCisgKgorICogdGxoIGlzIGFsd2F5cyBmdWxseSBwb3B1bGF0 ZWQgb24gcmV0dXJuIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlc3VsdCwgc28gdGhlCisgKiBjYWxsZXIg Y2FuIHBhc3MgdGxoLT5zb3VyY2UgLyB0bGgtPnRhcmdldCBkaXJlY3RseSB0bworICogZmluZENv bW1vbkFuY2VzdG9yVGltZWxpbmUoKSB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgZmFsc2UuCisg KgorICogVExJIDEgYWx3YXlzIHJldHVybnMgdHJ1ZTogaXQgaXMgdGhlIG9yaWdpbmFsIHRpbWVs aW5lIGFuZCBoYXMgbm8gcHJvbW90aW9uCisgKiBVVUlELiAgRm9yIFRMSSA+PSAyLCB0aGUgVVVJ RCBpbiBlbnRyeVtOZW50cmllcyAtIDJdIGlkZW50aWZpZXMgdGhlCisgKiBwcm9tb3Rpb24gdGhh dCBjcmVhdGVkIHRoZSBjdXJyZW50IFRMSS4gIEJvdGgtemVybyBVVUlEcyAob2xkIGhpc3Rvcnkg ZmlsZXMpCisgKiBhcmUgdHJlYXRlZCBhcyBjb21wYXRpYmxlOyB6ZXJvLXZzLW5vbnplcm8gaXMg dHJlYXRlZCBhcyBhIG1pc21hdGNoIGJlY2F1c2UKKyAqIG9uZSBzaWRlIGNhcnJpZXMgYSBwcm9t b3Rpb24gVVVJRCBhbmQgdGhleSBjYW5ub3QgYmUgdGhlIHNhbWUgcHJvbW90aW9uLgorICovCitz dGF0aWMgYm9vbAorbWF0Y2hBbmRGZXRjaFRpbWVsaW5lcyhUaW1lTGluZUlEIHNvdXJjZV90bGks IFRpbWVMaW5lSUQgdGFyZ2V0X3RsaSwgVGltZWxpbmVIaXN0b3JpZXMgdGxoKQoreworCXN0YXRp YyBjb25zdCBwZ191dWlkX3QgemVybyA9IHswfTsKKwlwZ191dWlkX3QgICphLAorCQkJICAgKmI7 CisKKwl0bGgtPnNvdXJjZSA9IGdldFRpbWVsaW5lSGlzdG9yeShzb3VyY2VfdGxpLCB0cnVlLCAm dGxoLT5zb3VyY2VOZW50cmllcyk7CisJdGxoLT50YXJnZXQgPSBnZXRUaW1lbGluZUhpc3Rvcnko dGFyZ2V0X3RsaSwgZmFsc2UsICZ0bGgtPnRhcmdldE5lbnRyaWVzKTsKKworCWlmIChzb3VyY2Vf dGxpICE9IHRhcmdldF90bGkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFRMSSAxIGhhcyBubyBw cm9tb3Rpb24gVVVJRDsgYWx3YXlzIHRyZWF0IGFzIHRoZSBzYW1lIHRpbWVsaW5lLiAqLworCWlm ICh0bGgtPnNvdXJjZU5lbnRyaWVzIDwgMiB8fCB0bGgtPnRhcmdldE5lbnRyaWVzIDwgMikKKwkJ cmV0dXJuIHRydWU7CisKKwlhID0gJnRsaC0+c291cmNlW3RsaC0+c291cmNlTmVudHJpZXMgLSAy XS50bHV1aWQ7CisJYiA9ICZ0bGgtPnRhcmdldFt0bGgtPnRhcmdldE5lbnRyaWVzIC0gMl0udGx1 dWlkOworCisJaWYgKG1lbWNtcChhLCAmemVybywgVVVJRF9MRU4pID09IDAgJiYgbWVtY21wKGIs ICZ6ZXJvLCBVVUlEX0xFTikgPT0gMCkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gbWVtY21w KGEsIGIsIFVVSURfTEVOKSA9PSAwOworfQorCiAvKgogICogRGV0ZXJtaW5lIHRoZSBUTEkgb2Yg dGhlIGxhc3QgY29tbW9uIHRpbWVsaW5lIGluIHRoZSB0aW1lbGluZSBoaXN0b3J5IG9mCiAgKiB0 d28gY2x1c3RlcnMuICp0bGlJbmRleCBpcyBzZXQgdG8gdGhlIGluZGV4IG9mIGxhc3QgY29tbW9u IHRpbWVsaW5lIGluCkBAIC05NDEsMTIgKzEwMjksMjYgQEAgZmluZENvbW1vbkFuY2VzdG9yVGlt ZWxpbmUoVGltZUxpbmVIaXN0b3J5RW50cnkgKmFfaGlzdG9yeSwgaW50IGFfbmVudHJpZXMsCiAJ ICogZGVwZW5kaW5nIG9uIHRoZSBoaXN0b3J5IGZpbGVzIHRoYXQgZWFjaCBub2RlIGhhcyBmZXRj aGVkIGluIHByZXZpb3VzCiAJICogcmVjb3ZlcnkgcHJvY2Vzc2VzLiBIZW5jZSBjaGVjayB0aGUg c3RhcnQgcG9zaXRpb24gb2YgdGhlIG5ldyB0aW1lbGluZQogCSAqIGFzIHdlbGwgYW5kIG1vdmUg ZG93biBieSBvbmUgZXh0cmEgdGltZWxpbmUgZW50cnkgaWYgdGhleSBkbyBub3QgbWF0Y2guCisJ ICoKKwkgKiBXZSBhbHNvIGNvbXBhcmUgdGltZWxpbmUgVVVJRHMgd2hlbiBib3RoIHNpZGVzIGNh cnJ5IG9uZS4gIFR3byBzZXJ2ZXJzCisJICogdGhhdCBpbmRlcGVuZGVudGx5IHByb21vdGVkIHRv IHRoZSBzYW1lIHRpbWVsaW5lIElEIHByb2R1Y2UgaGlzdG9yeQorCSAqIGZpbGVzIHdpdGggdGhl IHNhbWUgbmFtZSAoZS5nLiAwMDAwMDAwMy5oaXN0b3J5KTsgaW4gYSBzaGFyZWQgV0FMCisJICog YXJjaGl2ZSB0aGUgc2Vjb25kIGZpbGUgc2lsZW50bHkgb3ZlcndyaXRlcyB0aGUgZmlyc3QuICBw Z19yZXdpbmQKKwkgKiBmZXRjaGVzIGVhY2ggc2VydmVyJ3MgaGlzdG9yeSBmaWxlIGRpcmVjdGx5 IGZyb20gdGhhdCBzZXJ2ZXIsIHNvIGl0CisJICogc2VlcyBib3RoIFVVSURzLgorCSAqCisJICog VGhlIHRpbWVsaW5lIFVVSUQgc3RvcmVkIGluIGhpc3RvcnkgZW50cnlbaV0gaXMgdGhlIFVVSUQg b2YgdGhlCisJICogcHJvbW90aW9uIHRoYXQgY3JlYXRlZCBlbnRyeVtpKzFdLCBpLmUuIHRoZSBV VUlEIG9mIFRMSSBlbnRyeVtpKzFdLnRsaS4KKwkgKiBTbyB0byBjaGVjayB3aGV0aGVyIGVudHJ5 W2ldIGl0c2VsZiByZXByZXNlbnRzIHRoZSBzYW1lIHRpbWVsaW5lIG9uCisJICogYm90aCBzaWRl cyB3ZSBsb29rIGF0IGVudHJ5W2ktMV0udGx1dWlkIChmb3IgaSA+IDApLiAgVExJIDEgKGkgPT0g MCkgaXMKKwkgKiBhbHdheXMgdGhlIHNhbWU6IGl0IGlzIHRoZSBvcmlnaW5hbCB0aW1lbGluZSBh bmQgaGFzIG5vIHByb21vdGlvbiBVVUlELgogCSAqLwogCW4gPSBNaW4oYV9uZW50cmllcywgYl9u ZW50cmllcyk7CiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykKIAl7CiAJCWlmIChhX2hpc3Rvcnlb aV0udGxpICE9IGJfaGlzdG9yeVtpXS50bGkgfHwKLQkJCWFfaGlzdG9yeVtpXS5iZWdpbiAhPSBi X2hpc3RvcnlbaV0uYmVnaW4pCisJCQlhX2hpc3RvcnlbaV0uYmVnaW4gIT0gYl9oaXN0b3J5W2ld LmJlZ2luIHx8CisJCQkoaSA+IDAgJiYgIW1hdGNoaW5nVGltZWxpbmVVVUlEKCZhX2hpc3Rvcnlb aSAtIDFdLCAmYl9oaXN0b3J5W2kgLSAxXSkpKQogCQkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX3Jld2luZC90LzAwNV9zYW1lX3RpbWVsaW5lLnBsIGIvc3JjL2Jpbi9wZ19y ZXdpbmQvdC8wMDVfc2FtZV90aW1lbGluZS5wbAppbmRleCA5NWE0MGMzYjI3MC4uN2QyZGFkZmQx NzEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmV3aW5kL3QvMDA1X3NhbWVfdGltZWxpbmUucGwK KysrIGIvc3JjL2Jpbi9wZ19yZXdpbmQvdC8wMDVfc2FtZV90aW1lbGluZS5wbApAQCAtNyw2ICs3 LDggQEAKICMKIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2Ug RmlsZTo6Q29weTsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKQEAgLTIxLDQgKzIzLDM1NCBAQCBS ZXdpbmRUZXN0OjpjcmVhdGVfc3RhbmRieSgpOwogUmV3aW5kVGVzdDo6cnVuX3BnX3Jld2luZCgn bG9jYWwnKTsKIFJld2luZFRlc3Q6OmNsZWFuX3Jld2luZF90ZXN0KCk7CiAKKyMgSGVscGVyIGZ1 bmN0aW9uIHRvIHJ1biBwZ19yZXdpbmQgaW4gbG9jYWwgbW9kZSB3aXRoIHRoZSBnaXZlbiBzb3Vy Y2UgYW5kCisjIHRhcmdldCBub2RlcyBhbmQgZXh0cmEgYXJndW1lbnRzLgorIworIyBUaGUgdGFy Z2V0IGFuZCBzb3VyY2Ugbm9kZXMgYXJlIHN0b3BwZWQgYmVmb3JlIHRoZSBjYWxsIGFuZCB0aGUg dGFyZ2V0IGlzCisjIHJlc3RhcnRlZCBhZnRlcndhcmQuICBUaGUgdGFyZ2V0J3MgcG9zdGdyZXNx bC5jb25mIGlzIGNvcGllZCB0byBhIHRlbXBvcmFyeQorIyBsb2NhdGlvbiBhbmQgcGFzc2VkIHRv IHBnX3Jld2luZCB3aXRoIC0tY29uZmlnLWZpbGUsIHNvIHRoYXQgcGdfcmV3aW5kIGNhbgorIyB1 cGRhdGUgdGhlIHRhcmdldCdzIGNvbmZpZyBmaWxlIGluIHBsYWNlIHdpdGhvdXQgd29ycnlpbmcg YWJvdXQgZmlsZQorIyBwZXJtaXNzaW9ucy4gIFRoZSB0ZW1wb3JhcnkgY29uZmlnIGZpbGUgaXMg bW92ZWQgYmFjayB0byB0aGUgdGFyZ2V0J3MgZGF0YQorIyBkaXJlY3RvcnkgYW5kIHBlcm1pc3Np b25zIGZpeGVkIGFmdGVyIHBnX3Jld2luZCBmaW5pc2hlcy4KK3N1YiByZXdpbmRfbm9kZQorewor CW15ICgkdGFyZ2V0LCAkc291cmNlLCAkbGFiZWwsIEBleHRyYV9hcmdzKSA9IEBfOworCSRzb3Vy Y2UtPnN0b3A7CisJJHRhcmdldC0+c3RvcDsKKworCW15ICR0cGdkYXRhID0gJHRhcmdldC0+ZGF0 YV9kaXI7CisJbXkgJHRtcCA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworCWNv cHkoIiR0cGdkYXRhL3Bvc3RncmVzcWwuY29uZiIsICIkdG1wL3RhcmdldC1wb3N0Z3Jlc3FsLmNv bmYudG1wIik7CisKKwljb21tYW5kX29rKAorCQlbCisJCQkncGdfcmV3aW5kJywKKwkJCSctLWRl YnVnJywKKwkJCSctLXNvdXJjZS1wZ2RhdGEnID0+ICRzb3VyY2UtPmRhdGFfZGlyLAorCQkJJy0t dGFyZ2V0LXBnZGF0YScgPT4gJHRhcmdldC0+ZGF0YV9kaXIsCisJCQknLS1uby1zeW5jJywKKwkJ CSctLWNvbmZpZy1maWxlJyA9PiAiJHRtcC90YXJnZXQtcG9zdGdyZXNxbC5jb25mLnRtcCIsCisJ CQlAZXh0cmFfYXJncywKKwkJXSwKKwkJJGxhYmVsKTsKKworCW1vdmUoIiR0bXAvdGFyZ2V0LXBv c3RncmVzcWwuY29uZi50bXAiLCAiJHRwZ2RhdGEvcG9zdGdyZXNxbC5jb25mIik7CisJY2htb2Qo JHRhcmdldC0+Z3JvdXBfYWNjZXNzKCkgPyAwNjQwIDogMDYwMCwgIiR0cGdkYXRhL3Bvc3RncmVz cWwuY29uZiIpCisJICBvciBCQUlMX09VVCgidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9ucyBmb3Ig JHRwZ2RhdGEvcG9zdGdyZXNxbC5jb25mIik7CisKKwkkdGFyZ2V0LT5zdGFydDsKK30KKworIyBS ZXdyaXRlIGEgbm9kZSdzIFRMSSBoaXN0b3J5IGZpbGUgaW4gdGhlIG9sZCAzLWZpZWxkIGZvcm1h dCAobm8gVVVJRCksIHNvCisjIHRoYXQgcGdfcmV3aW5kIHNlZXMgYSB6ZXJvIFVVSUQgZm9yIHRo YXQgc2lkZSwgYXMgaWYgdGhlIG5vZGUgaGFkIGJlZW4KKyMgcHJvbW90ZWQgYnkgYSBzZXJ2ZXIg dGhhdCBwcmVkYXRlcyB0aGUgVVVJRCBmZWF0dXJlLgorc3ViIHN0cmlwX3RsaV91dWlkCit7CisJ bXkgKCRub2RlLCAkdGxpKSA9IEBfOworCW15ICRoaXN0ZmlsZSA9IHNwcmludGYoIiVzL3BnX3dh bC8lMDhYLmhpc3RvcnkiLCAkbm9kZS0+ZGF0YV9kaXIsICR0bGkpOworCW9wZW4obXkgJGZoLCAn PCcsICRoaXN0ZmlsZSkgb3IgZGllICJjYW5ub3Qgb3BlbiAkaGlzdGZpbGU6ICQhIjsKKwlteSBA bGluZXMgPSA8JGZoPjsKKwljbG9zZSAkZmg7CisJb3BlbigkZmgsICc+JywgJGhpc3RmaWxlKSBv ciBkaWUgImNhbm5vdCB3cml0ZSAkaGlzdGZpbGU6ICQhIjsKKwlmb3IgbXkgJGxpbmUgKEBsaW5l cykKKwl7CisJCWNob21wICRsaW5lOworCQlteSBAZiA9IHNwbGl0KC9cdC8sICRsaW5lLCA0KTsK KwkJaWYgKEBmID09IDQpCisJCXsKKwkJCSMgRHJvcCB0aGUgVVVJRCBmaWVsZCAoaW5kZXggMik7 IGtlZXAgcGFyZW50VExJLCBzd2l0Y2hwb2ludCwgcmVhc29uLgorCQkJcHJpbnQgJGZoIGpvaW4o Ilx0IiwgJGZbMF0sICRmWzFdLCAkZlszXSkgLiAiXG4iOworCQl9CisJCWVsc2UKKwkJeworCQkJ cHJpbnQgJGZoICIkbGluZVxuIjsKKwkJfQorCX0KKwljbG9zZSAkZmg7Cit9CisKKyMgSGVscGVy IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBvcmlnaW4gbm9kZSB3aXRoIGEgdGVzdCB0YWJsZSBhbmQg YSByb3cgY29udGFpbmluZworIyB0aGUgZ2l2ZW4gbGFiZWwuICBUaGUgbm9kZSBpcyBzdGFydGVk IGFuZCByZWFkeSBmb3IgdXNlIGFzIGEgc291cmNlIGZvcgorIyBzdGFuZGJ5cy4KK3N1YiBzZXR1 cF9vcmlnaW4KK3sKKwlteSAoJGxhYmVsKSA9IEBfOworCW15ICRub2RlID0gUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3Rlci0+bmV3KCRsYWJlbCk7CisJJG5vZGUtPmluaXQoYWxsb3dzX3N0cmVhbWlu ZyA9PiAxKTsKKwkkbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJ3YWxfa2Vl cF9zaXplID0gMzIwTUJcbiIpOworCSRub2RlLT5zdGFydDsKKwkkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGJsICh2YWwgdGV4dCkiKTsKKwkkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnJGxhYmVsJykiKTsKKwkk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDSEVDS1BPSU5UJyk7CisJcmV0dXJuICRub2Rl OworfQorCisjIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgbXVsdGlwbGUgc3RhbmRieSBub2Rl cyBmcm9tIHRoZSBzYW1lIG9yaWdpbiBub2RlLgorIyBFYWNoIHN0YW5kYnkgZ2V0cyBpdHMgb3du IGJhY2t1cCBhbmQgZGF0YSBkaXJlY3RvcnksIHNvIHRoYXQgdGhleSB3aWxsCisjIGdlbmVyYXRl IGluZGVwZW5kZW50IFVVSURzIG9uIHByb21vdGlvbiBldmVuIHRob3VnaCB0aGV5IHNoYXJlIHRo ZSBzYW1lCisjIHRpbWVsaW5lIGhpc3RvcnkgdXAgdG8gdGhlIHBvaW50IG9mIHByb21vdGlvbi4K K3N1YiBzZXR1cF9zdGFuZGJ5c19mcm9tX29yaWdpbgoreworCW15ICgkb3JpZ2luLCBAbmFtZXMp ID0gQF87CisJbXkgQHN0YW5kYnlzOworCWZvciBteSAkbmFtZSAoQG5hbWVzKQorCXsKKwkJbXkg JHN0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJG5hbWUpOworCQkkb3Jp Z2luLT5iYWNrdXAoJHN0YW5kYnktPm5hbWUpOworCQkkc3RhbmRieS0+aW5pdF9mcm9tX2JhY2t1 cCgkb3JpZ2luLCAkc3RhbmRieS0+bmFtZSwKKwkJCWhhc19zdHJlYW1pbmcgPT4gMSk7CisJCSRz dGFuZGJ5LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgIndhbF9rZWVwX3NpemUgPSAz MjBNQlxuIik7CisJCSRzdGFuZGJ5LT5zZXRfc3RhbmRieV9tb2RlKCk7CisJCSRzdGFuZGJ5LT5z dGFydDsKKwkJcHVzaCBAc3RhbmRieXMsICRzdGFuZGJ5OworCX0KKwlyZXR1cm4gQHN0YW5kYnlz OworfQorCisjIEhlbHBlciBmdW5jdGlvbiB0byB3YWl0IGZvciBtdWx0aXBsZSBzdGFuZGJ5IG5v ZGVzIHRvIGNhdGNoIHVwIHRvIHRoZSBvcmlnaW4uCitzdWIgc3luY19zdGFuZGJ5c193aXRoX29y aWdpbgoreworCW15ICgkb3JpZ2luLCBAc3RhbmRieXMpID0gQF87CisJJG9yaWdpbi0+d2FpdF9m b3JfY2F0Y2h1cCgkXykgZm9yIEBzdGFuZGJ5czsKK30KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8g aW5zZXJ0IGEgcm93IHdpdGggdGhlIGdpdmVuIGxhYmVsIGludG8gYSBub2RlJ3MgdGVzdCB0YWJs ZS4KK3N1YiB3cml0ZV9yZWNvcmQKK3sKKwlteSAoJG5vZGUsICRsYWJlbCkgPSBAXzsKKwkkbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnJGxhYmVs JykiKTsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDSEVDS1BPSU5UJyk7Cit9CisK KyMgVGVzdCB0aGF0IHBnX3Jld2luZCBkZXRlY3RzIGFuZCBoYW5kbGVzIHR3byBzdGFuZGJ5cyB0 aGF0IGluZGVwZW5kZW50bHkKKyMgcHJvbW90ZWQgdG8gdGhlIHNhbWUgdGltZWxpbmUgSUQuICBC ZWZvcmUgdGhlIFVVSUQtYmFzZWQgZGl2ZXJnZW5jZSBjaGVjaywKKyMgcGdfcmV3aW5kJ3Mgc2Ft ZS1UTEkgc2hvcnRjdXQgd291bGQgaW5jb3JyZWN0bHkgc2tpcCB0aGUgcmV3aW5kIGluIHRoaXMK KyMgY2FzZSwgbGVhdmluZyB0aGUgdGFyZ2V0J3MgZGl2ZXJnZWQgV0FMIGludGFjdC4KKyMKKyMg ICBvcmlnaW4gKFRMSSAxKQorIyAgICAgICB8CisjICAgICAgICstLS0gbm9kZV9hIChUTEkgMSkg LS1wcm9tb3RlLS0+IFRMSSAyLCBVVUlELUEgICh0YXJnZXQpCisjICAgICAgIHwKKyMgICAgICAg Ky0tLSBub2RlX2IgKFRMSSAxKSAtLXByb21vdGUtLT4gVExJIDIsIFVVSUQtQiAgKHNvdXJjZSkK KyMKKyMgcGdfcmV3aW5kIG11c3QgZGV0ZWN0IHRoZSBVVUlEIG1pc21hdGNoIGFuZCByZXdpbmQg bm9kZV9hIHRvIG1hdGNoIG5vZGVfYi4KKworbXkgJG5vZGVfb3JpZ2luID0gc2V0dXBfb3JpZ2lu KCdvcmlnaW4nKTsKKworIyBDcmVhdGUgbm9kZV9hIGFuZCBub2RlX2IgZnJvbSBzZXBhcmF0ZSBi YWNrdXBzIG9mIG9yaWdpbiBzbyB0aGF0IGVhY2gKKyMgaGFzIGl0cyBvd24gZGF0YSBkaXJlY3Rv cnkgYW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW5kZXBlbmRlbnQgVVVJRCBvbiBwcm9tb3Rpb24uCitt eSAoJG5vZGVfYSwgJG5vZGVfYikgPQorICBzZXR1cF9zdGFuZGJ5c19mcm9tX29yaWdpbigkbm9k ZV9vcmlnaW4sICdub2RlX2EnLCAnbm9kZV9iJyk7CisKKyMgV2FpdCBmb3IgYm90aCBzdGFuZGJ5 cyB0byBjYXRjaCB1cCB0byBvcmlnaW4sIHRoZW4gc3RvcCBvcmlnaW4uICBBZnRlcgorIyB0aGlz IHBvaW50IHRoZSB0d28gc3RhbmRieXMgYXJlIGlzb2xhdGVkIGFuZCB3aWxsIHByb21vdGUgaW5k ZXBlbmRlbnRseS4KK3N5bmNfc3RhbmRieXNfd2l0aF9vcmlnaW4oJG5vZGVfb3JpZ2luLCAkbm9k ZV9hLCAkbm9kZV9iKTsKKyRub2RlX29yaWdpbi0+c3RvcDsKKworIyBQcm9tb3RlIGJvdGggc3Rh bmRieXMuICBFYWNoIGxhbmRzIG9uIFRMSSAyIGJ1dCBnZW5lcmF0ZXMgYSBkaXN0aW5jdCBVVUlE LAorIyBzbyB0aGUgcmVzdWx0aW5nIGNsdXN0ZXJzIGFyZSBkaXZlcmdlZCBldmVuIHRob3VnaCB0 aGV5IHNoYXJlIGEgdGltZWxpbmUgSUQuCiskbm9kZV9hLT5wcm9tb3RlOworJG5vZGVfYi0+cHJv bW90ZTsKKworIyBJbnNlcnQgYSBkaXZlcmdlbnQgcm93IG9uIGVhY2ggc28gdGhlIHJld2luZCBo YXMgdmlzaWJsZSB3b3JrIHRvIGRvLgord3JpdGVfcmVjb3JkKCRub2RlX2EsICdpbiBBJyk7Cit3 cml0ZV9yZWNvcmQoJG5vZGVfYiwgJ2luIEInKTsKKworcmV3aW5kX25vZGUoJG5vZGVfYSwgJG5v ZGVfYiwKKwkncGdfcmV3aW5kIGRldGVjdHMgaW5kZXBlbmRlbnQgc2FtZS1UTEkgcHJvbW90aW9u cycpOworCitteSAkcmVzdWx0ID0KKyAgJG5vZGVfYS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgdmFsIEZST00gdGJsIE9SREVSIEJZIHZhbCIpOworaXMoJHJlc3VsdCwgImluIEJcbm9y aWdpbiIsCisJJ3Jld291bmQgbm9kZSBoYXMgc291cmNlIGRhdGEsIG5vdCBpdHMgb3duIGRpdmVy Z2VudCBkYXRhJyk7CisKKyRub2RlX2EtPnRlYXJkb3duX25vZGU7Ciskbm9kZV9iLT50ZWFyZG93 bl9ub2RlOworJG5vZGVfb3JpZ2luLT50ZWFyZG93bl9ub2RlOworCisjIFRlc3QgdGhhdCBwZ19y ZXdpbmQgY29ycmVjdGx5IHJld2luZHMgYWNyb3NzIGEgVExJIG1pc21hdGNoIGJ1cmllZCBpbiBh IHNoYXJlZAorIyBwcmVmaXggb2YgdGhlIHRpbWVsaW5lIGhpc3RvcnkuICBUaGUgdGFyZ2V0IGhh cyBnb25lIHRocm91Z2ggdGhyZWUgdGltZWxpbmVzCisjIChUTEkgMSAtPiBUTEkgMiAtPiBUTEkg Mykgd2hpbGUgdGhlIHNvdXJjZSBpbmRlcGVuZGVudGx5IHByb21vdGVkIGZyb20gVExJIDEKKyMg dG8gd2hhdCBpcyBudW1lcmljYWxseSBUTEkgMiBidXQgd2l0aCBhIGRpZmZlcmVudCBVVUlEIChU TEkgMicpLiAgVGhlIGRlZXBlc3QKKyMgY29tbW9uIGFuY2VzdG9yIGlzIHRoZXJlZm9yZSBUTEkg MSwgYW5kIHBnX3Jld2luZCBtdXN0IHJld2luZCB0aGUgdGFyZ2V0IGFsbAorIyB0aGUgd2F5IGJh Y2sgdG8gdGhlIGVuZCBvZiBUTEkgMS4KKyMKKyMgICBvcmlnaW4gKFRMSSAxKSAtLSstLSBub2Rl X3ggLS1wcm9tb3RlLS0+IFRMSSAyIC0tIG5vZGVfYSAtLXByb21vdGUtLT4gVExJIDMKKyMgICAg ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdl dDogVExJIDEtPlRMSSAyLT5UTEkgMykKKyMgICAgICAgICAgICAgICAgICAgICstLSBub2RlX2Ig LS1wcm9tb3RlLS0+IFRMSSAyJworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHNvdXJjZTogVExJIDEtPlRMSSAyJykKKyMKKyMgZmluZENvbW1vbkFuY2VzdG9y VGltZWxpbmUgd2Fsa3MgZm9yd2FyZDogVExJIDEgZW50cmllcyBtYXRjaCAoVVVJRD0wIG9uCisj IGJvdGggc2lkZXMpLCB0aGVuIFRMSSAyIHZzIFRMSSAyJyBtYXRjaCBvbiB0bGkgYW5kIGJlZ2lu IGJ1dCBkaWZmZXIgb24KKyMgVVVJRCwgc2lnbmFsbGluZyBpbmRlcGVuZGVudCBwcm9tb3Rpb25z LiAgVGhlIGFsZ29yaXRobSB0aGVyZWZvcmUgYmFja3MgdXAKKyMgdG8gVExJIDEgYXMgdGhlIGNv bW1vbiBhbmNlc3RvciBhbmQgc2V0cyB0aGUgZGl2ZXJnZW5jZSBwb2ludCB0byB0aGUgZW5kCisj IG9mIFRMSSAxLgorCitteSAkbm9kZV9vcmlnaW4yID0gc2V0dXBfb3JpZ2luKCdvcmlnaW4yJyk7 CisKKyMgbm9kZV94IGFuZCBub2RlX2IgYm90aCBzdGFydCBmcm9tIHRoZSBzYW1lIFRMSSAxIGJh c2VsaW5lLgorbXkgKCRub2RlX3gsICRub2RlX2IyKSA9CisgIHNldHVwX3N0YW5kYnlzX2Zyb21f b3JpZ2luKCRub2RlX29yaWdpbjIsICdub2RlX3gnLCAnbm9kZV9iMicpOworCisjIEJvdGggc3Rh bmRieXMgbXVzdCBiZSBjYXVnaHQgdXAgdG8gdGhlIHNhbWUgTFNOIGJlZm9yZSBvcmlnaW4gc3Rv cHMsIHNvCisjIHRoYXQgVExJIDIgYW5kIFRMSSAyJyBib3RoIGJlZ2luIGF0IHRoZSBzYW1lIFdB TCBwb3NpdGlvbi4KK3N5bmNfc3RhbmRieXNfd2l0aF9vcmlnaW4oJG5vZGVfb3JpZ2luMiwgJG5v ZGVfeCwgJG5vZGVfYjIpOworJG5vZGVfb3JpZ2luMi0+c3RvcDsKKworIyBQcm9tb3RlIG5vZGVf eCB0byBUTEkgMiAoVVVJRC1YKSBhbmQgaW5zZXJ0IGEgcm93LiAgbm9kZV9iMiBpcyBzdGlsbCBv bgorIyBUTEkgMSBhbmQgaGFzIG5vdCB5ZXQgc2VlbiBhbnkgVExJIDIgV0FMLgorJG5vZGVfeC0+ cHJvbW90ZTsKK3dyaXRlX3JlY29yZCgkbm9kZV94LCAneCcpOworCisjIEJ1aWxkIG5vZGVfYTIg YXMgYSBzdGFuZGJ5IG9mIG5vZGVfeCwgdGhlbiBwcm9tb3RlIGl0IHRvIFRMSSAzLgorbXkgKCRu b2RlX2EyKSA9IHNldHVwX3N0YW5kYnlzX2Zyb21fb3JpZ2luKCRub2RlX3gsICdub2RlX2EyJyk7 CisKK3N5bmNfc3RhbmRieXNfd2l0aF9vcmlnaW4oJG5vZGVfeCwgJG5vZGVfYTIpOworJG5vZGVf eC0+c3RvcDsKKworJG5vZGVfYTItPnByb21vdGU7CisKKyMgTm93IHByb21vdGUgbm9kZV9iMiBp bmRlcGVuZGVudGx5IGZyb20gVExJIDEgdG8gVExJIDInIChVVUlELUIsICE9IFVVSUQtWCkuCisk bm9kZV9iMi0+cHJvbW90ZTsKK3dyaXRlX3JlY29yZCgkbm9kZV9iMiwgJ2InKTsKKworIyBSZXdp bmQgbm9kZV9hMiAoVExJIDEtPlRMSSAyLT5UTEkgMykgZnJvbSBub2RlX2IyIChUTEkgMS0+VExJ IDInKSBpbgorIyBsb2NhbCBtb2RlLiAgVGhlIHJld2luZCBtdXN0IHJlYWNoIGJhY2sgdG8gdGhl IGVuZCBvZiBUTEkgMS4KKyMKKyMgbm9kZV9hMiB3YXMgaW5pdGlhbGlzZWQgZnJvbSBhIHN0cmVh bWluZyBiYWNrdXAgb2Ygbm9kZV94IHRha2VuIGFmdGVyCisjIG5vZGVfeCBoYWQgYWxyZWFkeSBj b21wbGV0ZWQgc2VnbWVudCA0IG9mIFRMSSAyOyB0aGF0IHNlZ21lbnQgdGhlcmVmb3JlCisjIGRv ZXMgbm90IGFwcGVhciBpbiBub2RlX2EyJ3MgcGdfd2FsLiAgcGdfcmV3aW5kJ3MgYmFja3dhcmQg c2NhbiBmb3IgdGhlCisjIGxhc3QgY2hlY2twb2ludCBiZWZvcmUgdGhlIGRpdmVyZ2VuY2UgcG9p bnQgbmVlZHMgdGhhdCBzZWdtZW50LCBzbyB3ZQorIyBwb2ludCByZXN0b3JlX2NvbW1hbmQgYXQg bm9kZV94J3MgcGdfd2FsIGFuZCB1c2UgLS1yZXN0b3JlLXRhcmdldC13YWwuCisjCisjIE5vdGU6 IG5vIHJvdyBpcyBpbnNlcnRlZCBvbiBUTEkgMy4gIFRoaXMgaXMgaW50ZW50aW9uYWw6IHRoZSBv bmx5CisjIHBvc3QtZGl2ZXJnZW5jZSB0YWJsZSBtb2RpZmljYXRpb24gaW4gdGhlIHRhcmdldCdz IFdBTCBpcyB0aGUgJ3gnIElOU0VSVAorIyBvbiBUTEkgMi4gIE9uIHVucGF0Y2hlZCBjb2RlIHRo ZSBXQUwgc2NhbiB3b3VsZCBzdGFydCBmcm9tIHRoZSBUTEkgMgorIyBzaHV0ZG93biBjaGVja3Bv aW50IChqdXN0IGJlZm9yZSBUTEkgMyksIG1pc3MgdGhhdCBlYXJsaWVyIGluc2VydCwgYW5kCisj IGxlYXZlICd4JyBpbiBwbGFjZSBpbnN0ZWFkIG9mIHJlcGxhY2luZyBpdCB3aXRoICdiJy4KK215 ICRub2RlX3hfd2FsZGlyID0gJG5vZGVfeC0+ZGF0YV9kaXIgLiAiL3BnX3dhbCI7Ciskbm9kZV9h Mi0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJInJlc3RvcmVfY29tbWFuZCA9ICdj cCBcIiRub2RlX3hfd2FsZGlyLyVmXCIgXCIlcFwiJ1xuIik7CisKK3Jld2luZF9ub2RlKCRub2Rl X2EyLCAkbm9kZV9iMiwKKwkncGdfcmV3aW5kIHJld2luZHMgYWNyb3NzIG1pc21hdGNoZWQgVExJ IDIgLyBUTEkgMi1wcmltZSB0byBUTEkgMScsCisJJy0tcmVzdG9yZS10YXJnZXQtd2FsJyk7Citt eSAkcmVzdWx0MiA9CisgICRub2RlX2EyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCB2 YWwgRlJPTSB0YmwgT1JERVIgQlkgdmFsIik7CitpcygkcmVzdWx0MiwgImJcbm9yaWdpbjIiLAor CSdyZXdvdW5kIG5vZGUgcmVmbGVjdHMgc291cmNlIGhpc3RvcnksIG5vdCB0YXJnZXQgVExJIDIv VExJIDMgZGF0YScpOworCiskbm9kZV9hMi0+dGVhcmRvd25fbm9kZTsKKyRub2RlX2IyLT50ZWFy ZG93bl9ub2RlOworJG5vZGVfeC0+dGVhcmRvd25fbm9kZTsKKyRub2RlX29yaWdpbjItPnRlYXJk b3duX25vZGU7CisKKyMgVGVzdCB0aGF0IHBnX3Jld2luZCBjb3JyZWN0bHkgZGV0ZWN0cyBhIG1p c21hdGNoIHdoZW4gb25lIGNsdXN0ZXIncyBUTEkgMgorIyBoaXN0b3J5IGVudHJ5IGNhcnJpZXMg YSB6ZXJvIFVVSUQgKG9sZC1mb3JtYXQgaGlzdG9yeSBmaWxlKSB3aGlsZSB0aGUgb3RoZXIKKyMg Y2FycmllcyBhIHJlYWwgVVVJRC4gIFRoZSB0d28gY2x1c3RlcnMgbXVzdCBoYXZlIHByb21vdGVk IGluZGVwZW5kZW50bHksIHNvCisjIHBnX3Jld2luZCBtdXN0IHJld2luZCB0byBUTEkgMSByYXRo ZXIgdGhhbiBhY2NlcHRpbmcgdGhlIHNhbWUtVExJIHNob3J0Y3V0LgorIworIyBSdW4gYm90aCBv cmllbnRhdGlvbnM6CisjICAgKGEpIHRhcmdldCBoYXMgemVybyBVVUlELCBzb3VyY2UgaGFzIHJl YWwgVVVJRAorIyAgIChiKSB0YXJnZXQgaGFzIHJlYWwgVVVJRCwgc291cmNlIGhhcyB6ZXJvIFVV SUQKKyMKKyMgSW4gYm90aCBjYXNlcyB0aGUgc2V0dXAgaXM6CisjCisjICAgb3JpZ2luIChUTEkg MSkgLS0rLS0gbm9kZV9wIC0tcHJvbW90ZS0tPiBUTEkgMiwgVVVJRC1QICAodGFyZ2V0KQorIyAg ICAgICAgICAgICAgICAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgKy0tIG5vZGVfcSAtLXBy b21vdGUtLT4gVExJIDIsIFVVSUQtUSAgKHNvdXJjZSkKKyMKKyMgT25lIHNpZGUgdGhlbiBoYXMg aXRzIGhpc3RvcnkgZmlsZSByZXdyaXR0ZW4gdG8gdGhlIG9sZCAzLWZpZWxkIGZvcm1hdCBzbwor IyB0aGF0IGl0cyBVVUlEIHJlYWRzIGFzIHplcm8uICBwZ19yZXdpbmQgbXVzdCB0cmVhdCB6ZXJv LXZzLW5vbnplcm8gYXMKKyMgaW5jb21wYXRpYmxlICh0aGV5IGNhbm5vdCBiZSB0aGUgc2FtZSBw cm9tb3Rpb24pIGFuZCByZXdpbmQgdG8gVExJIDEuCisKK2ZvciBteSAkc3RyaXBfdGFyZ2V0ICgx LCAwKQoreworCW15ICRzaWRlID0gJHN0cmlwX3RhcmdldCA/ICd0YXJnZXQnIDogJ3NvdXJjZSc7 CisJbXkgJHNmeCA9ICRzdHJpcF90YXJnZXQgPyAnenQnIDogJ3pzJzsKKwlteSAkbGFiZWwgPQor CSAgInBnX3Jld2luZCByZXdpbmRzIHdoZW4gdGFyZ2V0IGhhcyB6ZXJvIFVVSUQgYW5kICRzaWRl IGhhcyByZWFsIFVVSUQiOworCisJbXkgJG5vZGVfb3JpZ2luMyA9IHNldHVwX29yaWdpbigib3Jp Z2luM18kc2Z4Iik7CisJbXkgKCRub2RlX3AsICRub2RlX3EpID0KKwkgIHNldHVwX3N0YW5kYnlz X2Zyb21fb3JpZ2luKCRub2RlX29yaWdpbjMsICJub2RlX3BfJHNmeCIsICJub2RlX3FfJHNmeCIp OworCisJc3luY19zdGFuZGJ5c193aXRoX29yaWdpbigkbm9kZV9vcmlnaW4zLCAkbm9kZV9wLCAk bm9kZV9xKTsKKwkkbm9kZV9vcmlnaW4zLT5zdG9wOworCisJJG5vZGVfcC0+cHJvbW90ZTsKKwkk bm9kZV9xLT5wcm9tb3RlOworCisJd3JpdGVfcmVjb3JkKCRub2RlX3AsICdpbiBQJyk7CisJd3Jp dGVfcmVjb3JkKCRub2RlX3EsICdpbiBRJyk7CisKKwkjIFN0cmlwIFVVSUQgZnJvbSB0aGUgY2hv c2VuIHNpZGUgdG8gc2ltdWxhdGUgYSBwcmUtVVVJRCBzZXJ2ZXIuCisJc3RyaXBfdGxpX3V1aWQo JHN0cmlwX3RhcmdldCA/ICRub2RlX3AgOiAkbm9kZV9xLCAyKTsKKworCXJld2luZF9ub2RlKCRu b2RlX3AsICRub2RlX3EsICRsYWJlbCk7CisJbXkgJHJlc3VsdDMgPQorCSAgJG5vZGVfcC0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFsIEZST00gdGJsIE9SREVSIEJZIHZhbCIpOwor CWlzKCAkcmVzdWx0MywKKwkJImluIFFcbm9yaWdpbjNfJHNmeCIsCisJCSdyZXdvdW5kIG5vZGUg aGFzIHNvdXJjZSBkYXRhLCBub3QgaXRzIG93biBkaXZlcmdlbnQgcm93Jyk7CisKKwkkbm9kZV9w LT50ZWFyZG93bl9ub2RlOworCSRub2RlX3EtPnRlYXJkb3duX25vZGU7CisJJG5vZGVfb3JpZ2lu My0+dGVhcmRvd25fbm9kZTsKK30KKworIyBUZXN0IHRoYXQgcGdfcmV3aW5kIGRldGVjdHMgaW5k ZXBlbmRlbnQgcHJvbW90aW9ucyB0byBUTEkgMyB3aGVuIGJvdGgKKyMgY2x1c3RlcnMgc2hhcmUg YSBjb21tb24gVExJIDEgLT4gVExJIDIgaGlzdG9yeSAoc2FtZSBVVUlEKSBidXQgaW5kZXBlbmRl bnRseQorIyBwcm9tb3RlZCBmcm9tIFRMSSAyIHRvIFRMSSAzLCBwcm9kdWNpbmcgZGlmZmVyZW50 IFRMSSAzIFVVSURzLgorIworIyAgIG9yaWdpbiAoVExJIDEpIC0tLSBub2RlX21pZCAtLXByb21v dGUtLT4gVExJIDIsIFVVSUQtTQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKy0tIG5vZGVfYyAtLXByb21vdGUtLT4gVExJIDMsIFVVSUQtQyAgKHRhcmdl dCkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK KyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBu b2RlX2QgLS1wcm9tb3RlLS0+IFRMSSAzJywgVVVJRC1EICAoc291cmNlKQorIworIyBUaGUgc2Ft ZS1UTEkgc2hvcnRjdXQgY29tcGFyZXMgZW50cnlbTmVudHJpZXMtMl0udGx1dWlkIG9uIGVhY2gg c2lkZTsgdGhhdAorIyBpcyB0aGUgVVVJRCBvZiB0aGUgVExJIDMgcHJvbW90aW9uLCB3aGljaCBk aWZmZXJzLiAgVGhlIGZ1bGwgcmV3aW5kIHBhdGgKKyMgdGhlbiB3YWxrcyB0aGUgaGlzdG9yeSBm b3J3YXJkOiBUTEkgMSBtYXRjaGVzIChzYW1lIHRsaS9iZWdpbi9VVUlELU0gYXQKKyMgZW50cnlb MF0pLCBUTEkgMiBhbHNvIG1hdGNoZXMgKHNhbWUgdGxpL2JlZ2luOyBVVUlELU0gaXMgdGhlIHNh bWUgb24gYm90aAorIyBzaWRlcyBhdCBlbnRyeVswXSksIGJ1dCBUTEkgMyB2cyBUTEkgMycgZGlm ZmVyIGF0IGVudHJ5WzFdIChVVUlELUMgIT0gVVVJRC1EKSwKKyMgc28gdGhlIGRpdmVyZ2VuY2Ug cG9pbnQgaXMgc2V0IHRvIHRoZSBlbmQgb2YgVExJIDIuCisKK215ICRub2RlX29yaWdpbjQgPSBz ZXR1cF9vcmlnaW4oJ29yaWdpbjQnKTsKK215ICgkbm9kZV9taWQpID0gc2V0dXBfc3RhbmRieXNf ZnJvbV9vcmlnaW4oJG5vZGVfb3JpZ2luNCwgJ25vZGVfbWlkJyk7CisKKyRub2RlX29yaWdpbjQt PndhaXRfZm9yX2NhdGNodXAoJG5vZGVfbWlkKTsKKyRub2RlX29yaWdpbjQtPnN0b3A7CisKKyMg UHJvbW90ZSBub2RlX21pZCB0byBUTEkgMiBhbmQgaW5zZXJ0IGEgcm93IHRoYXQgYm90aCBUTEkg MyBub2RlcyB3aWxsIHNoYXJlLgorJG5vZGVfbWlkLT5wcm9tb3RlOword3JpdGVfcmVjb3JkKCRu b2RlX21pZCwgJ21pZCcpOworCisjIG5vZGVfYyBhbmQgbm9kZV9kIGJvdGggc3RhcnQgYXMgc3Rh bmRieXMgb2Ygbm9kZV9taWQgc28gdGhleSBzaGFyZSB0aGUgc2FtZQorIyBUTEkgMiBwcm9tb3Rp b24gVVVJRCAoVVVJRC1NKS4KK215ICgkbm9kZV9jLCAkbm9kZV9kKSA9CisgIHNldHVwX3N0YW5k YnlzX2Zyb21fb3JpZ2luKCRub2RlX21pZCwgJ25vZGVfYycsICdub2RlX2QnKTsKK3N5bmNfc3Rh bmRieXNfd2l0aF9vcmlnaW4oJG5vZGVfbWlkLCAkbm9kZV9jLCAkbm9kZV9kKTsKKyRub2RlX21p ZC0+c3RvcDsKKworIyBQcm9tb3RlIGJvdGggaW5kZXBlbmRlbnRseTsgZWFjaCBnZW5lcmF0ZXMg YSBkaXN0aW5jdCBUTEkgMyBVVUlELgorJG5vZGVfYy0+cHJvbW90ZTsKKyRub2RlX2QtPnByb21v dGU7CisKK3dyaXRlX3JlY29yZCgkbm9kZV9jLCAnYycpOword3JpdGVfcmVjb3JkKCRub2RlX2Qs ICdkJyk7CisKK3Jld2luZF9ub2RlKCRub2RlX2MsICRub2RlX2QsCisJJ3BnX3Jld2luZCBkZXRl Y3RzIGluZGVwZW5kZW50IFRMSSAzIC8gVExJIDMtcHJpbWUgcHJvbW90aW9ucyBzaGFyaW5nIFRM SSAyJworKTsKK215ICRyZXN1bHQ0ID0KKyAgJG5vZGVfYy0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgdmFsIEZST00gdGJsIE9SREVSIEJZIHZhbCIpOworaXMoJHJlc3VsdDQsICJkXG5t aWRcbm9yaWdpbjQiLAorCSdyZXdvdW5kIG5vZGUgaGFzIHNvdXJjZSBUTEkgMy1wcmltZSBkYXRh LCBub3QgaXRzIG93biBUTEkgMyBkYXRhJyk7CisKKyRub2RlX2MtPnRlYXJkb3duX25vZGU7Cisk bm9kZV9kLT50ZWFyZG93bl9ub2RlOworJG5vZGVfbWlkLT50ZWFyZG93bl9ub2RlOworJG5vZGVf b3JpZ2luNC0+dGVhcmRvd25fbm9kZTsKKwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX3Jld2luZC90aW1lbGluZS5jIGIvc3JjL2Jpbi9wZ19yZXdpbmQvdGltZWxpbmUu YwppbmRleCBkZGEwNmVhYTBiYy4uYjY1MDA2MDZiMjcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf cmV3aW5kL3RpbWVsaW5lLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXdpbmQvdGltZWxpbmUuYwpAQCAt OSw5ICs5LDQwIEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8 Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwogI2luY2x1ZGUgImFjY2Vzcy90aW1lbGlu ZS5oIgogI2luY2x1ZGUgInBnX3Jld2luZC5oIgogCisvKgorICogUGFyc2UgYSBVVUlEIHN0cmlu ZyBpbiBzdGFuZGFyZCBkYXNoZWQgZm9ybSBpbnRvIGEgcGdfdXVpZF90LgorICogUmV0dXJucyB0 cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlmIHN0ciBpcyBub3QgYSB2YWxpZCBVVUlEIHN0cmluZy4K KyAqLworc3RhdGljIGJvb2wKK3Jld2luZF9wYXJzZV91dWlkKGNvbnN0IGNoYXIgKnN0ciwgcGdf dXVpZF90ICp1dWlkKQoreworCWNvbnN0IGNoYXIgKnNyYyA9IHN0cjsKKworCWZvciAoaW50IGkg PSAwOyBpIDwgVVVJRF9MRU47IGkrKykKKwl7CisJCWNoYXIJCWJ1ZlszXTsKKworCQlpZiAoIWlz eGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSBzcmNbMF0pIHx8CisJCQkhaXN4ZGlnaXQoKHVuc2lnbmVk IGNoYXIpIHNyY1sxXSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWJ1ZlswXSA9IHNyY1swXTsKKwkJ YnVmWzFdID0gc3JjWzFdOworCQlidWZbMl0gPSAnXDAnOworCQl1dWlkLT5kYXRhW2ldID0gKHVu c2lnbmVkIGNoYXIpIHN0cnRvdWwoYnVmLCBOVUxMLCAxNik7CisJCXNyYyArPSAyOworCQkvKiBz a2lwIGRhc2ggYXQgcG9zaXRpb25zIGFmdGVyIGJ5dGVzIDMsIDUsIDcsIDkgKGkgPT0gMyw1LDcs OSkgKi8KKwkJaWYgKHNyY1swXSA9PSAnLScgJiYgKGkgPT0gMyB8fCBpID09IDUgfHwgaSA9PSA3 IHx8IGkgPT0gOSkpCisJCQlzcmMrKzsKKwl9CisJcmV0dXJuICgqc3JjID09ICdcMCcpOworfQor CiAvKgogICogVGhpcyBpcyBjb3B5LXBhc3RlZCBmcm9tIHRoZSBiYWNrZW5kIHJlYWRUaW1lTGlu ZUhpc3RvcnksIG1vZGlmaWVkIHRvCiAgKiByZXR1cm4gYSBtYWxsb2MnZCBhcnJheSBhbmQgdG8g d29yayB3aXRob3V0IGJhY2tlbmQgZnVuY3Rpb25zLgpAQCAtNDgsNiArNzksNyBAQCByZXdpbmRf cGFyc2VUaW1lTGluZUhpc3RvcnkoY2hhciAqYnVmZmVyLCBUaW1lTGluZUlEIHRhcmdldFRMSSwg aW50ICpuZW50cmllcykKIAkJdWludDMyCQlzd2l0Y2hwb2ludF9oaTsKIAkJdWludDMyCQlzd2l0 Y2hwb2ludF9sbzsKIAkJaW50CQkJbmZpZWxkczsKKwkJY2hhcgkJdXVpZF9zdHJbVVVJRF9TVFJf TEVOICsgMV0gPSB7MH07CiAKIAkJZmxpbmUgPSBidWZwdHI7CiAJCXdoaWxlICgqYnVmcHRyICYm ICpidWZwdHIgIT0gJ1xuJykKQEAgLTY2LDcgKzk4LDggQEAgcmV3aW5kX3BhcnNlVGltZUxpbmVI aXN0b3J5KGNoYXIgKmJ1ZmZlciwgVGltZUxpbmVJRCB0YXJnZXRUTEksIGludCAqbmVudHJpZXMp CiAJCWlmICgqcHRyID09ICdcMCcgfHwgKnB0ciA9PSAnIycpCiAJCQljb250aW51ZTsKIAotCQlu ZmllbGRzID0gc3NjYW5mKGZsaW5lLCAiJXVcdCVYLyUwOFgiLCAmdGxpLCAmc3dpdGNocG9pbnRf aGksICZzd2l0Y2hwb2ludF9sbyk7CisJCW5maWVsZHMgPSBzc2NhbmYoZmxpbmUsICIldVx0JVgv JTA4WFx0JTM2cyIsICZ0bGksICZzd2l0Y2hwb2ludF9oaSwKKwkJCQkJCSAmc3dpdGNocG9pbnRf bG8sIHV1aWRfc3RyKTsKIAogCQlpZiAobmZpZWxkcyA8IDEpCiAJCXsKQEAgLTc1LDcgKzEwOCw3 IEBAIHJld2luZF9wYXJzZVRpbWVMaW5lSGlzdG9yeShjaGFyICpidWZmZXIsIFRpbWVMaW5lSUQg dGFyZ2V0VExJLCBpbnQgKm5lbnRyaWVzKQogCQkJcGdfbG9nX2Vycm9yX2RldGFpbCgiRXhwZWN0 ZWQgYSBudW1lcmljIHRpbWVsaW5lIElELiIpOwogCQkJZXhpdCgxKTsKIAkJfQotCQlpZiAobmZp ZWxkcyAhPSAzKQorCQlpZiAobmZpZWxkcyA8IDMpCiAJCXsKIAkJCXBnX2xvZ19lcnJvcigic3lu dGF4IGVycm9yIGluIGhpc3RvcnkgZmlsZTogJXMiLCBmbGluZSk7CiAJCQlwZ19sb2dfZXJyb3Jf ZGV0YWlsKCJFeHBlY3RlZCBhIHdyaXRlLWFoZWFkIGxvZyBzd2l0Y2hwb2ludCBsb2NhdGlvbi4i KTsKQEAgLTk5LDcgKzEzMiwxNCBAQCByZXdpbmRfcGFyc2VUaW1lTGluZUhpc3RvcnkoY2hhciAq YnVmZmVyLCBUaW1lTGluZUlEIHRhcmdldFRMSSwgaW50ICpuZW50cmllcykKIAkJZW50cnktPmVu ZCA9ICgodWludDY0KSAoc3dpdGNocG9pbnRfaGkpKSA8PCAzMiB8ICh1aW50NjQpIHN3aXRjaHBv aW50X2xvOwogCQlwcmV2ZW5kID0gZW50cnktPmVuZDsKIAotCQkvKiB3ZSBpZ25vcmUgdGhlIHJl bWFpbmRlciBvZiBlYWNoIGxpbmUgKi8KKwkJLyoKKwkJICogUGFyc2UgdGhlIG9wdGlvbmFsIFVV SUQgZmllbGQuICBPbGQgaGlzdG9yeSBmaWxlcyBoYXZlIHRoZSByZWFzb24KKwkJICogc3RyaW5n IGluIGZpZWxkIDQ7IGl0cyBmaXJzdCB3b3JkIGlzIG11Y2ggc2hvcnRlciB0aGFuIFVVSURfU1RS X0xFTgorCQkgKiBzbyB0aGUgbGVuZ3RoIGNoZWNrIHNhZmVseSBkaXN0aW5ndWlzaGVzIG9sZCBm cm9tIG5ldyBmb3JtYXQuCisJCSAqLworCQltZW1zZXQoJmVudHJ5LT50bHV1aWQsIDAsIHNpemVv ZihwZ191dWlkX3QpKTsKKwkJaWYgKG5maWVsZHMgPT0gNCAmJiBzdHJsZW4odXVpZF9zdHIpID09 IFVVSURfU1RSX0xFTikKKwkJCXJld2luZF9wYXJzZV91dWlkKHV1aWRfc3RyLCAmZW50cnktPnRs dXVpZCk7CiAJfQogCiAJaWYgKGVudHJpZXMgJiYgdGFyZ2V0VExJIDw9IGxhc3R0bGkpCkBAIC0x MjMsNiArMTYzLDcgQEAgcmV3aW5kX3BhcnNlVGltZUxpbmVIaXN0b3J5KGNoYXIgKmJ1ZmZlciwg VGltZUxpbmVJRCB0YXJnZXRUTEksIGludCAqbmVudHJpZXMpCiAJZW50cnktPnRsaSA9IHRhcmdl dFRMSTsKIAllbnRyeS0+YmVnaW4gPSBwcmV2ZW5kOwogCWVudHJ5LT5lbmQgPSBJbnZhbGlkWExv Z1JlY1B0cjsKKwltZW1zZXQoJmVudHJ5LT50bHV1aWQsIDAsIHNpemVvZihwZ191dWlkX3QpKTsK IAogCSpuZW50cmllcyA9IG5saW5lczsKIAlyZXR1cm4gZW50cmllczsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90aW1lbGluZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RpbWVsaW5l LmgKaW5kZXggOTdmMWQ2MTljMzUuLmNkZDY0MmM5NGYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGltZWxpbmUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGltZWxpbmUuaApA QCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCiAjaW5jbHVk ZSAibm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgInV0aWxzL3V1aWQuaCIKIAogLyoKICAqIEEg bGlzdCBvZiB0aGVzZSBzdHJ1Y3RzIGRlc2NyaWJlcyB0aGUgdGltZWxpbmUgaGlzdG9yeSBvZiB0 aGUgc2VydmVyLiBFYWNoCkBAIC0yMiw5ICsyMywxMCBAQAogICogcG9pbnRlcnMgb2YgYWxsIHRo ZSBlbnRyaWVzIGZvcm0gYSBjb250aWd1b3VzIGxpbmUgZnJvbSBiZWdpbm5pbmcgb2YgdGltZQog ICogdG8gaW5maW5pdHkuCiAgKi8KLXR5cGVkZWYgc3RydWN0Cit0eXBlZGVmIHN0cnVjdCBUaW1l TGluZUhpc3RvcnlFbnRyeQogewogCVRpbWVMaW5lSUQJdGxpOworCXBnX3V1aWRfdAl0bHV1aWQ7 CQkJLyogZnJvbSBoaXN0b3J5IGZpbGU7IHplcm8gaWYgdW5rbm93biAqLwogCVhMb2dSZWNQdHIJ YmVnaW47CQkJLyogaW5jbHVzaXZlICovCiAJWExvZ1JlY1B0cgllbmQ7CQkJLyogZXhjbHVzaXZl LCBJbnZhbGlkWExvZ1JlY1B0ciBtZWFucyBpbmZpbml0eSAqLwogfSBUaW1lTGluZUhpc3RvcnlF bnRyeTsKQEAgLTMzLDYgKzM1LDcgQEAgZXh0ZXJuIExpc3QgKnJlYWRUaW1lTGluZUhpc3Rvcnko VGltZUxpbmVJRCB0YXJnZXRUTEkpOwogZXh0ZXJuIGJvb2wgZXhpc3RzVGltZUxpbmVIaXN0b3J5 KFRpbWVMaW5lSUQgcHJvYmVUTEkpOwogZXh0ZXJuIFRpbWVMaW5lSUQgZmluZE5ld2VzdFRpbWVM aW5lKFRpbWVMaW5lSUQgc3RhcnRUTEkpOwogZXh0ZXJuIHZvaWQgd3JpdGVUaW1lTGluZUhpc3Rv cnkoVGltZUxpbmVJRCBuZXdUTEksIFRpbWVMaW5lSUQgcGFyZW50VExJLAorCQkJCQkJCQkgY29u c3QgcGdfdXVpZF90ICpuZXdUTFVVSUQsCiAJCQkJCQkJCSBYTG9nUmVjUHRyIHN3aXRjaHBvaW50 LCBjaGFyICpyZWFzb24pOwogZXh0ZXJuIHZvaWQgd3JpdGVUaW1lTGluZUhpc3RvcnlGaWxlKFRp bWVMaW5lSUQgdGxpLCBjaGFyICpjb250ZW50LCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZCByZXN0 b3JlVGltZUxpbmVIaXN0b3J5RmlsZXMoVGltZUxpbmVJRCBiZWdpbiwgVGltZUxpbmVJRCBlbmQp OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmgKaW5kZXggMTNhZTNhZDRmYmIuLjhkNWUzNzRk ZmFkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNp bmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5o IgogI2luY2x1ZGUgImRhdGF0eXBlL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgInV0aWxzL3V1aWQu aCIKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgInBndGltZS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3V1 aWQuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3V1aWQuaAppbmRleCA1NzJkOGNmNGMzNi4uNjgzOWRl MmUwYjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3V1aWQuaAorKysgYi9zcmMvaW5j bHVkZS91dGlscy91dWlkLmgKQEAgLTE3LDEyICsxNywxNiBAQAogLyogdXVpZCBzaXplIGluIGJ5 dGVzICovCiAjZGVmaW5lIFVVSURfTEVOIDE2CiAKKy8qIGxlbmd0aCBvZiBhIFVVSUQgc3RyaW5n ICh3aXRob3V0IG51bGwgdGVybWluYXRvcik6IHh4eHh4eHh4LXh4eHgteHh4eC14eHh4LXh4eHh4 eHh4eHh4eCAqLworI2RlZmluZSBVVUlEX1NUUl9MRU4gMzYKKwogdHlwZWRlZiBzdHJ1Y3QgcGdf dXVpZF90CiB7CiAJdW5zaWduZWQgY2hhciBkYXRhW1VVSURfTEVOXTsKIH0gcGdfdXVpZF90Owog Ci0vKiBmbWdyIGludGVyZmFjZSBtYWNyb3MgKi8KKy8qIGZtZ3IgaW50ZXJmYWNlIG1hY3JvcyAo YmFja2VuZCBvbmx5KSAqLworI2lmbmRlZiBGUk9OVEVORAogc3RhdGljIGlubGluZSBEYXR1bQog VVVJRFBHZXREYXR1bShjb25zdCBwZ191dWlkX3QgKlgpCiB7CkBAIC0zOCw1ICs0Miw5IEBAIERh dHVtR2V0VVVJRFAoRGF0dW0gWCkKIH0KIAogI2RlZmluZSBQR19HRVRBUkdfVVVJRF9QKFgpCQlE YXR1bUdldFVVSURQKFBHX0dFVEFSR19EQVRVTShYKSkKKyNlbmRpZgkJCQkJCQkvKiAhRlJPTlRF TkQgKi8KKworZXh0ZXJuIHBnX3V1aWRfdCAqZ2VuZXJhdGVfdXVpZHY3KHVpbnQ2NCB1bml4X3Rz X21zLCB1aW50MzIgc3ViX21zKTsKK2V4dGVybiBwZ191dWlkX3QgKmdlbmVyYXRlX3V1aWR2N19y KHBnX3V1aWRfdCAqdXVpZCwgdWludDY0IHVuaXhfdHNfbXMsIHVpbnQzMiBzdWJfbXMpOwogCiAj ZW5kaWYJCQkJCQkJLyogVVVJRF9IICovCi0tIAoyLjQzLjAKCg== --000000000000eb24fc06529474ce--