Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Dec 2006 20:58:15 -0600
From:      "Scot Hetzel" <swhetzel@gmail.com>
To:        "Divacky Roman" <xdivac02@stud.fit.vutbr.cz>
Cc:        emulation@freebsd.org
Subject:   Re: linuxolator: utimes implementation
Message-ID:  <790a9fff0612141858x3a0a4ce5vc348d32d9b56f343@mail.gmail.com>
In-Reply-To: <20061214153029.GA36558@stud.fit.vutbr.cz>
References:  <790a9fff0612140333ofd0891el59f767329f291371@mail.gmail.com> <20061214153029.GA36558@stud.fit.vutbr.cz>

next in thread | previous in thread | raw e-mail | index | archive | help
------=_Part_79072_22077359.1166151495960
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On 12/14/06, Divacky Roman <xdivac02@stud.fit.vutbr.cz> wrote:
> On Thu, Dec 14, 2006 at 05:33:40AM -0600, Scot Hetzel wrote:
> > While I was running the the tests for ltp-full-20061121, I noticed
> > that the utimes function wasn't implemented in the linuxolator.
> >
> > I looked up the man page and found that it was similar to the utime
> > function, except that it allows a program to set an inode down to the
> > microsecond.
> >
> > Merging together the linux_utime and freebsd32_utimes functions, I was
> > able to create the linux_utimes function.
>
> what about this patch instead (only relevant part):
>
I'm able to compile the linux module with this patch, and I no longer
see "* utimes not implemented" when running the ltp testcases.

The attached patch to ltp-20061121 implements testcases for utimes
(based on the utime testcases).  It currently is failing the utimes04,
and utimes05 testcases:

utimes04    1  FAIL  :  tmp_file access and modification times usec not set
utimes05    1  FAIL  :  tmp_file access and modification times usec not set

This might be because I'm not using the right field from the stat
function to get the access and modification times for the usec in
these testcases.  If I comment out the code that checks the usec, then
these two tests pass.

Scot
--
DISCLAIMER:
No electrons were mamed while sending this message. Only slightly bruised.

------=_Part_79072_22077359.1166151495960
Content-Type: text/x-diff; name=ltp-utimes-patch; charset=ANSI_X3.4-1968
Content-Transfer-Encoding: base64
X-Attachment-Id: f_evpzty9c
Content-Disposition: attachment; filename="ltp-utimes-patch"

ZGlmZiAtcnVOIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcvcnVudGVzdC9sdHBsaXRlIGx0cC1mdWxs
LTIwMDYxMTIxL3J1bnRlc3QvbHRwbGl0ZQotLS0gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy9ydW50
ZXN0L2x0cGxpdGUJVHVlIE5vdiAyMSAxNDozMToyMCAyMDA2CisrKyBsdHAtZnVsbC0yMDA2MTEy
MS9ydW50ZXN0L2x0cGxpdGUJVGh1IERlYyAxNCAxMjo1OTo0MyAyMDA2CkBAIC05NTUsNiArOTU1
LDE0IEBACiB1dGltZTA1IHV0aW1lMDUKIHV0aW1lMDYgdXRpbWUwNgogCit1dGltZXMwMSB1dGlt
ZXMwMQordXRpbWVzMDFBIHN5bWxpbmswMSAtVCB1dGltZXMwMQordXRpbWVzMDIgdXRpbWVzMDIK
K3V0aW1lczAzIHV0aW1lczAzCit1dGltZXMwNCB1dGltZXMwNAordXRpbWVzMDUgdXRpbWVzMDUK
K3V0aW1lczA2IHV0aW1lczA2CisKIHZmb3JrMDEgdmZvcmswMQogdmZvcmswMiB2Zm9yazAyCiAK
ZGlmZiAtcnVOIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcvcnVudGVzdC9zdHJlc3MucGFydDMgbHRw
LWZ1bGwtMjAwNjExMjEvcnVudGVzdC9zdHJlc3MucGFydDMKLS0tIGx0cC1mdWxsLTIwMDYxMTIx
LW9yaWcvcnVudGVzdC9zdHJlc3MucGFydDMJVHVlIE5vdiAyMSAxNDozMToyMCAyMDA2CisrKyBs
dHAtZnVsbC0yMDA2MTEyMS9ydW50ZXN0L3N0cmVzcy5wYXJ0MwlUaHUgRGVjIDE0IDEzOjAwOjU2
IDIwMDYKQEAgLTgzOCw2ICs4MzgsMTQgQEAKIHV0aW1lMDUgdXRpbWUwNQogdXRpbWUwNiB1dGlt
ZTA2CiAKK3V0aW1lczAxIHV0aW1lczAxCit1dGltZXMwMUEgc3ltbGluazAxIC1UIHV0aW1lczAx
Cit1dGltZXMwMiB1dGltZXMwMgordXRpbWVzMDMgdXRpbWVzMDMKK3V0aW1lczA0IHV0aW1lczA0
Cit1dGltZXMwNSB1dGltZXMwNQordXRpbWVzMDYgdXRpbWVzMDYKKwogdmZvcmswMSB2Zm9yazAx
CiB2Zm9yazAyIHZmb3JrMDIKIApkaWZmIC1ydU4gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy9ydW50
ZXN0L3N5c2NhbGxzIGx0cC1mdWxsLTIwMDYxMTIxL3J1bnRlc3Qvc3lzY2FsbHMKLS0tIGx0cC1m
dWxsLTIwMDYxMTIxLW9yaWcvcnVudGVzdC9zeXNjYWxscwlUdWUgTm92IDIxIDE0OjMxOjIwIDIw
MDYKKysrIGx0cC1mdWxsLTIwMDYxMTIxL3J1bnRlc3Qvc3lzY2FsbHMJVGh1IERlYyAxNCAxMzow
MToxMiAyMDA2CkBAIC05NDIsNiArOTQyLDE0IEBACiB1dGltZTA1IHV0aW1lMDUKIHV0aW1lMDYg
dXRpbWUwNgogCit1dGltZXMwMSB1dGltZXMwMQordXRpbWVzMDFBIHN5bWxpbmswMSAtVCB1dGlt
ZXMwMQordXRpbWVzMDIgdXRpbWVzMDIKK3V0aW1lczAzIHV0aW1lczAzCit1dGltZXMwNCB1dGlt
ZXMwNAordXRpbWVzMDUgdXRpbWVzMDUKK3V0aW1lczA2IHV0aW1lczA2CisKIHZmb3JrMDEgdmZv
cmswMQogdmZvcmswMiB2Zm9yazAyCiAKZGlmZiAtcnVOIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcv
dGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zeW1saW5rL3N5bWxpbmswMS5jIGx0cC1mdWxsLTIw
MDYxMTIxL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc3ltbGluay9zeW1saW5rMDEuYwotLS0g
bHRwLWZ1bGwtMjAwNjExMjEtb3JpZy90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3N5bWxpbmsv
c3ltbGluazAxLmMJVHVlIE5vdiAyMSAxNDozMToyOCAyMDA2CisrKyBsdHAtZnVsbC0yMDA2MTEy
MS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3N5bWxpbmsvc3ltbGluazAxLmMJVGh1IERlYyAx
NCAxODoyMTowNCAyMDA2CkBAIC0xNTIsNiArMTUyLDE3IEBACiAqIAogKiAgICBXQUxMIENMT0NL
IFRJTUUJOiAzCiAqCisqICAgIFRFU1QgSURFTlRJRklFUiAgICA6IHV0aW1lczAxICh1dGltZXMp
CisqCisqICAgIFRFU1QgVElUTEUgICAgICAgICA6IFNldCBGaWxlIEFjY2VzcyBBbmQgTW9kaWZ5
IE9iamVjdCBGaWxlIFRpbWVzCisqICAgICAgICAgICAgICAgICAgICAgICAgIEluZGlyZWN0bHkg
RnJvbSBhIFN5bWJvbGljIExpbmsgRmlsZQorKgorKiAgICBQQVJFTlQgRE9DVU1FTlQgICAgOiBz
eW10ZHMwMQorKgorKiAgICBURVNUIENBU0UgVE9UQUwgICAgOiAzCisqCisqICAgIFdBTEwgQ0xP
Q0sgVElNRSAgICA6IDMKKyoKICogICAgVEVTVCBJREVOVElGSUVSCTogcmVuYW1lMDEgKHJlbmFt
ZSkKICogCiAqICAgIFRFU1QgVElUTEUJCTogUmVuYW1lIGEgU3ltYm9saWMgTGluayBGaWxlIEFu
ZCBOb3QgQW55IE9iamVjdApAQCAtMjUzLDYgKzI2NCwxMiBAQAogKiAgICAgICAgIDIuIFJlY2Vp
dmUgRU5PRU5UIGVycm9yIHdoZW4gYWNjZXNzaW5nIG5vbi1leGlzdGVudCBkaXJlY3RvcnkgdGhy
b3VnaCBzeW1ib2xpYyBsaW5rIGZpbGUKICogICAgICAgICAzLiBSZWNlaXZlIEVMT09QIGVycm9y
IHdoZW4gbmVzdGluZyBvZiBzeW1ib2xpYyBsaW5rcyBleGNlZWQgbWF4aW11bQogKiAKKyogICAg
ICAgRm9yIHV0aW1lcworKgorKiAgICAgICAgIDEuIENoYW5nZSBpbm9kZSB0aW1lcyBvZiBvYmpl
Y3QgZmlsZSB0aHJvdWdoIGEgc3ltYm9saWMgbGluayBmaWxlCisqICAgICAgICAgMi4gUmVjZWl2
ZSBFTk9FTlQgZXJyb3Igd2hlbiBhY2Nlc3Npbmcgbm9uLWV4aXN0ZW50IGRpcmVjdG9yeSB0aHJv
dWdoIHN5bWJvbGljIGxpbmsgZmlsZQorKiAgICAgICAgIDMuIFJlY2VpdmUgRUxPT1AgZXJyb3Ig
d2hlbiBuZXN0aW5nIG9mIHN5bWJvbGljIGxpbmtzIGV4Y2VlZCBtYXhpbXVtCisqCiAqICAgICAg
IEZvciByZW5hbWUKICoKICogICAgICAgICAxLiBSZW5hbWUgYSBzeW1ib2xpYyBsaW5rIGZpbGUg
d2hpY2ggcG9pbnRzIGF0IG5vIG9iamVjdCBmaWxlCkBAIC0yNzcsMTIgKzI5NCwxNCBAQAogKiMq
IyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyoq
LwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRl
IDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2lu
Y2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgICAgICAgIC8qIG9wZW4o
Mikgc3lzdGVtIGNhbGwgKi8KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN5cy90eXBl
cy5oPgogI2luY2x1ZGUgPHV0aW1lLmg+ICAgICAgICAgICAgIC8qIHV0aW1lKDIpIHN5c3RlbSBj
YWxsICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4gICAgICAgICAgLyogdXRpbWVzKDIpIHN5c3Rl
bSBjYWxsICovCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4g
ICAgICAgICAgLyogc3RhdCgyKSBhbmQgbHN0YXQoMikgc3lzdGVtIGNhbGxzICovCiAKQEAgLTMw
Nyw2ICszMjYsNyBAQAogdm9pZCBkb191bmxpbmsoKTsKIHZvaWQgZG9fY2htb2QoKTsKIHZvaWQg
ZG9fdXRpbWUoKTsKK3ZvaWQgZG9fdXRpbWVzKCk7CiB2b2lkIGRvX3JlbmFtZSgpOwogdm9pZCBk
b19vcGVuKCk7CiAKQEAgLTMyOSw2ICszNDksNyBAQAogI2RlZmluZSBVTkxJTksgInVubGluazAx
IgogI2RlZmluZSBDSE1PRCAiY2htb2QwMSIKICNkZWZpbmUgVVRJTUUgInV0aW1lMDEiCisjZGVm
aW5lIFVUSU1FUyAgInV0aW1lczAxIgogI2RlZmluZSBSRU5BTUUgInJlbmFtZTAxIgogI2RlZmlu
ZSBPUEVOICJvcGVuMDEiCiAKQEAgLTM3Miw2ICszOTMsOCBAQAogICJOZXN0ZWQgc3ltYm9saWMg
bGluayBhY2Nlc3MgY29uZGl0aW9uIGNhdWdodC4gIEVMT09QIGlzIHJldHVybmVkIiwKICAiUmVh
ZGluZyBhIG5vbnN5bWJvbGljIGxpbmsgZmlsZSBlcnJvciBjb25kaXRpb24gaXMgY2F1Z2h0LiAg
RUlOVkFMIGlzIHJldHVybmVkIiwKICAibHN0YXQoMikgb2Ygb2JqZWN0IGZpbGUgcmV0dXJucyBv
YmplY3QgZmlsZSBpbm9kZSBpbmZvcm1hdGlvbiIsCisgInV0aW1lcygyKSBjaGFuZ2Ugb2Ygb2Jq
ZWN0IGZpbGUgYWNjZXNzIGFuZCBtb2RpZnkgdGltZXMgdGhyb3VnaCBzeW1ib2xpYyBsaW5rIGZp
bGUgaXMgb2siLAorICJ1dGltZXMoMikgZXJyb3Igd2hlbiBhY2Nlc3Npbmcgbm9uLWV4aXN0ZW50
IG9iamVjdCB0aHJvdWdoIHN5bWJvbGljIGxpbmsgaXMgY2F1Z2h0IiwKICAiTlVMTCIKIH07CiAK
QEAgLTQzNSw3ICs0NTgsMTAgQEAKICAgICB7T1BFTiwgMCwgMCwgMjUsIGNyZWF0X2JvdGgsIGNr
X2JvdGgsIHtPX0ZJTEUsIFNfRklMRSwgT19GSUxFfX0sCiAgICAge09QRU4sIDEsIEVFWElTVCwg
MjYsIGNyZWF0X3N5bWxpbmssIGNrX3N5bWxpbmssIHtPX0ZJTEUsIFNfRklMRSwgT19GSUxFfX0s
CiAgICAge09QRU4sIDEsIEVOT0VOVCwgMjcsIGNyZWF0X3N5bWxpbmssIGNrX3N5bWxpbmssIHtP
X0ZJTEUsIFNfRklMRSwgTlVMTH19LAotICAgIHtPUEVOLCAxLCBFTE9PUCwgMjgsIGNyZWF0X3N5
bWxpbmssIGNrX3N5bWxpbmssIHtTX0ZJTEUsIFNfRklMRSwgTlVMTH19CisgICAge09QRU4sIDEs
IEVMT09QLCAyOCwgY3JlYXRfc3ltbGluaywgY2tfc3ltbGluaywge1NfRklMRSwgU19GSUxFLCBO
VUxMfX0sCisgICAge1VUSU1FUywgMCwgMCwgMzEsIGNyZWF0X2JvdGgsIGNrX2JvdGgsIHtPX0ZJ
TEUsIFNfRklMRSwgT19GSUxFfX0sCisgICAge1VUSU1FUywgMSwgRU5PRU5ULCAzMiwgY3JlYXRf
c3ltbGluaywgY2tfc3ltbGluaywge09fRklMRSwgU19GSUxFLCBOVUxMfX0sCisgICAge1VUSU1F
UywgMSwgRUxPT1AsIDI4LCBjcmVhdF9zeW1saW5rLCBja19zeW1saW5rLCB7U19GSUxFLCBTX0ZJ
TEUsIE5VTEx9fQogfTsKIAogLyoKQEAgLTQ3Niw2ICs1MDIsOCBAQAogCQkiUmVuYW1lIGEgU3lt
Ym9saWMgTGluayBGaWxlIEFuZCBOb3QgQW55IE9iamVjdCBmaWxlIiB9LAogICAgeyBPUEVOLCAg
ICAgIm9wZW4iLCAgICAgNSwgJnRlc3Rfb2JqZWN0c1szM10sCiAJCSJDcmVhdGUvT3BlbiBhIEZp
bGUgRm9yIFJlYWRpbmcgT3IgV3JpdGluZyB2aWEgc3ltbGluayIgfSwKKyAgIHsgVVRJTUVTLCAg
ICJ1dGltZXMiLCAgIDMsICZ0ZXN0X29iamVjdHNbMzhdLAorICAgICAgICAgICAgICAgICJTZXQg
RmlsZSBBY2Nlc3MgQW5kIE1vZGlmeSBPYmplY3QgRmlsZSBUaW1lcyB2aWEgc3ltbGluayIgfSwK
IH07CiAKIC8qCkBAIC0xMDI0LDYgKzEwNTIsOCBAQAogICAgICAgICAgICAgICAgIGRvX3JlbmFt
ZSh0Y19wdHIpOwogICAgICAgICAgICAgIGVsc2UgaWYgKGNrdGNzaWQodGNfcHRyLT50Y2lkLCBP
UEVOKSkKICAgICAgICAgICAgICAgICBkb19vcGVuKHRjX3B0cik7CisgICAgICAgICAgICAgZWxz
ZSBpZiAoY2t0Y3NpZCh0Y19wdHItPnRjaWQsIFVUSU1FUykpCisJCWRvX3V0aW1lcyh0Y19wdHIp
OwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB0c3RfcmVzbShUQlJPSywgIlVu
a25vd24gdGVzdCBjYXNlIHByb2Nlc3NpbmcgYWN0aW9ucyBkZWNsYXJlZCIpOwogICAgICAgICAg
IH0KQEAgLTExODUsNiArMTIxNSwxOCBAQAogCQkiIGZpbGUgdGhyb3VnaCBhIHN5bWJvbGljIGxp
bmsgZmlsZSB3YXMgbm90IHJlY2VpdmVkLCIsCiAJCWVycm5vLCBzdHJlcnJvcihlcnJubykpOwog
ICAgICB9CisgICAgIGVsc2UgaWYgKGNrdGNzaWQodGNfcHRyLT50Y2lkLCBVVElNRVMpKSB7CisK
KyAgICAgICAgaWYgKCh1dGltZXModGNfcHRyLT5mbl9hcmdbMV0sIE5VTEwpID09IC0xKSAmJiAo
ZXJybm8gPT0gRU5PRU5UKSkKKyAgICAgICAgICAgaWYgKCBURVNUX1JFU1VMVCAhPSBUUEFTUyB8
fCBTVERfRlVOQ1RJT05BTF9URVNUICApCisgICAgICAgICAgICAgICB0c3RfcmVzbShURVNUX1JF
U1VMVCwgbXNnc1t0Y19wdHItPnBhc3NfbXNnXSk7CisgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBUc3RfY291bnQrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICB0c3RfcmVzbShU
RkFJTCwgIiVzICVzIGVycm5vOiVkICVzIiwKKyAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgRU5P
RU5UIGVycm9yIGNvbmRpdGlvbiB3aGVuIHV0aW1lcygyKSBhIHN5bWJvbGljIiwKKyAgICAgICAg
ICAgICAgICAibGluayB3aGljaCBwb2ludGVkIGF0IG5vIG9iamVjdDoiLCBlcnJubywgc3RyZXJy
b3IoZXJybm8pKTsKKyAgICAgfQogICAgICBlbHNlCiAgICAgICAgIHRzdF9yZXNtKFRCUk9LLCAi
VW5rbm93biB0ZXN0IGNhc2UgcHJvY2Vzc2luZyBhY3Rpb25zIGRlY2xhcmVkIik7CiB9CkBAIC0x
Mjk0LDYgKzEzMzYsMjEgQEAKIAkJIkV4cGVjdGVkIEVMT09QIGVycm9yIGNvbmRpdGlvbiB3aGVu
IG9wZW4oMikgYSBuZXN0ZWQgc3ltYm9saWMgbGluazoiLAogCQllcnJubywgc3RyZXJyb3IoZXJy
bm8pKTsKICAgICAgfQorICAgICBlbHNlIGlmIChja3Rjc2lkKHRjX3B0ci0+dGNpZCwgVVRJTUVT
KSkgeworCisgICAgICAgIFRFU1QoIHV0aW1lcyh0Y19wdHItPmZuX2FyZ1sxXSwgTlVMTCkgKTsK
KyAgICAgICAgZXJybm89VEVTVF9FUlJOTzsKKworICAgICAgICBpZiAoKFRFU1RfUkVUVVJOID09
IC0xKSAmJiAoZXJybm8gPT0gRUxPT1ApKQorICAgICAgICAgICBpZiAoIFRFU1RfUkVTVUxUICE9
IFRQQVNTIHx8IFNURF9GVU5DVElPTkFMX1RFU1QgICkKKyAgICAgICAgICAgICAgIHRzdF9yZXNt
KFRFU1RfUkVTVUxULCBtc2dzW3RjX3B0ci0+cGFzc19tc2ddKTsKKyAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIFRzdF9jb3VudCsrOworICAgICAgICBlbHNlCisgICAgICAgICAgIHRz
dF9yZXNtKFRGQUlMLCAiJXMgZXJybm86JWQgJXMiLAorICAgICAgICAgICAgICAgICJFeHBlY3Rl
ZCBFTE9PUCBlcnJvciBjb25kaXRpb24gd2hlbiB1dGltZXMoMikgYSBuZXN0ZWQgc3ltYm9saWMg
bGluazoiLAorICAgICAgICAgICAgICAgIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICB9
CiAgICAgIGVsc2UKICAgICAgICAgdHN0X3Jlc20oVEJST0ssICJVbmtub3duIHRlc3QgY2FzZSBw
cm9jZXNzaW5nIGFjdGlvbnMgZGVjbGFyZWQiKTsKIH0KQEAgLTE5NjUsNiArMjAyMiw2NCBAQAog
ICAgICAgICAgICAgICB0c3RfcmVzbShURkFJTCwgdGVzdF9tc2cpOwogICAgICAgICB9CiAgICAg
ICAgIGNsb3NlKGZkKTsKKyAgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgcm91
dGluZSBjaGVja3Mgb3V0IHRoZSB1dGltZXMoMikgc3lzdGVtIGNhbGwgZm9yIGEgc3VjY2Vzc2Z1
bAorICogaW52b2NhdGlvbgorICoKKyAqICAgQXJndW1lbnQgaXMgcG9pbnRlciB0byB0ZXN0X29i
amVjdHMgYXJyYXkgb2Ygc3RydWN0dXJlcyBvZiB0eXBlCisgKiAgIGFsbF90ZXN0X2Nhc2VzCisg
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCit2b2lkCitkb191dGltZXModGNfcHRyKQorc3RydWN0IGFsbF90ZXN0
X2Nhc2VzICp0Y19wdHI7Cit7CisgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVzWzJdOworCisgICAg
IGlmIChzdGF0KHRjX3B0ci0+Zm5fYXJnWzJdLCAmYXN5bWxpbmspID09IC0xKQorICAgICAgICB0
c3RfcmVzbShUQlJPSywgInN0YXQoMikgRmFpbHVyZSB3aGVuIGFjY2Vzc2luZyAlcyBvYmplY3Qg
ZmlsZSIsCisgICAgICAgICAgICB0Y19wdHItPmZuX2FyZ1syXSk7CisgICAgIGVsc2UgeworICAg
ICAgICAvKiBOb3cgYWRkIGEgZmV3IHZhbHVlcyB0byBhY2Nlc3MgYW5kIG1vZGlmeSB0aW1lcyAq
LworCisgICAgICAgIHRpbWVzWzBdLnR2X3NlYyA9IGFzeW1saW5rLnN0X2F0aW1lICsgYV90aW1l
X3ZhbHVlOworICAgICAgICB0aW1lc1swXS50dl91c2VjID0gYXN5bWxpbmsuc3RfYXRpbS50dl9u
c2VjIC8gMTAwMDsKKyAgICAgICAgdGltZXNbMV0udHZfc2VjID0gYXN5bWxpbmsuc3RfbXRpbWUg
KyBhX3RpbWVfdmFsdWU7CisgICAgICAgIHRpbWVzWzFdLnR2X3VzZWMgPSBhc3ltbGluay5zdF9t
dGltLnR2X25zZWMgLyAxMDAwOworCisgICAgICAgIC8qIE5vdyBoYW5kIG9mZiB0byB1dGltZXMo
MikgdmlhIHN5bWJvbGljIGxpbmsgZmlsZSovCisKKyAgICAgICAgaWYgKHV0aW1lcyh0Y19wdHIt
PmZuX2FyZ1sxXSwgdGltZXMpID09IC0xKQorICAgICAgICAgICAgdHN0X3Jlc20oVEZBSUwsICIl
cyAlcyIsCisgICAgICAgICAgICAgICAgInV0aW1lcygyKSBmYWlsZWQgdG8gcHJvY2VzcyBvYmpl
Y3QgZmlsZSBhY2Nlc3MgYW5kIG1vZGlmeSIsCisgICAgICAgICAgICAgICAgInRpbWUgdXBkYXRl
cyB0aHJvdWdoIHN5bWJvbGljIGxpbmsiKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgIC8q
IE5vdyB2ZXJpZnkgY2hhbmdlcyB3ZXJlIG1hZGUgKi8KKworICAgICAgICAgICBpZiAoc3RhdCh0
Y19wdHItPmZuX2FyZ1syXSwgJnN0YXR0ZXIpID09IC0xKQorICAgICAgICAgICAgICB0c3RfcmVz
bShUQlJPSywKKyAgICAgICAgICAgICAgICAic3RhdCgyKSBGYWlsdXJlIHdoZW4gYWNjZXNzaW5n
ICVzIG9iamVjdCBmaWxlIiwKKyAgICAgICAgICAgICAgICB0Y19wdHItPmZuX2FyZ1syXSk7Cisg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICB0aW1lX3QgdGVtcCwgZGlmZjsKKworICAg
ICAgICAgICAgICB0ZW1wID0gc3RhdHRlci5zdF9hdGltZSAtIGFzeW1saW5rLnN0X2F0aW1lOwor
ICAgICAgICAgICAgICBkaWZmID0gKHN0YXR0ZXIuc3RfbXRpbWUgLSBhc3ltbGluay5zdF9tdGlt
ZSkgLSB0ZW1wOworCisgICAgICAgICAgICAgIGlmICghIGRpZmYpCisgICAgICAgICAgICAgICAg
IGlmICggVEVTVF9SRVNVTFQgIT0gVFBBU1MgfHwgU1REX0ZVTkNUSU9OQUxfVEVTVCAgKQorICAg
ICAgICAgICAgICAgICAgICAgdHN0X3Jlc20oVEVTVF9SRVNVTFQsIG1zZ3NbdGNfcHRyLT5wYXNz
X21zZ10pOworICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICBUc3Rf
Y291bnQrKzsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICB0c3RfcmVzbShU
RkFJTCwgIiVzICVzICVkIGdyZWF0ZXIgdGhhbiBvcmlnaW5hbCB0aW1lcyIsCisgICAgICAgICAg
ICAgICAgICAgICJ1dGltZXMoMikgZmFpbGVkIHRvIGNoYW5nZSBvYmplY3QgZmlsZSBhY2Nlc3Mg
YW5kIiwKKyAgICAgICAgICAgICAgICAgICAgIm1vZGlmeSB0aW1lcyB0aHJvdWdoIHN5bWJvbGlj
IGxpbmsgdG8gYSB2YWx1ZSIsCisgICAgICAgICAgICAgICAgICAgIGFfdGltZV92YWx1ZSk7Cisg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICB9CiB9CiAKZGlmZiAtcnVOIGx0cC1mdWxsLTIw
MDYxMTIxLW9yaWcvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvTWFrZWZpbGUgbHRw
LWZ1bGwtMjAwNjExMjEvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvTWFrZWZpbGUK
LS0tIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGlt
ZXMvTWFrZWZpbGUJV2VkIERlYyAzMSAxODowMDowMCAxOTY5CisrKyBsdHAtZnVsbC0yMDA2MTEy
MS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy9NYWtlZmlsZQlUdWUgTm92IDIxIDE0
OjMxOjI4IDIwMDYKQEAgLTAsMCArMSwzMSBAQAorIworIyAgQ29weXJpZ2h0IChjKSBJbnRlcm5h
dGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMQorIworIyAgVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisjCisjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisjICB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj
ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyMgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisjCisKK0NGTEFHUyArPSAtSS4uLy4uLy4uLy4u
L2luY2x1ZGUgLVdhbGwKK0xETElCUyArPSAtTC4uLy4uLy4uLy4uL2xpYiAtbGx0cAorCitTUkNT
ICAgID0gJCh3aWxkY2FyZCAqLmMpCitUQVJHRVRTID0gJChwYXRzdWJzdCAlLmMsJSwkKFNSQ1Mp
KQorCithbGw6ICQoVEFSR0VUUykKKworaW5zdGFsbDoKKwlAc2V0IC1lOyBmb3IgaSBpbiAkKFRB
UkdFVFMpOyBkbyBsbiAtZiAkJGkgLi4vLi4vLi4vYmluLyQkaSA7IGRvbmUKKworY2xlYW46CisJ
cm0gLWYgJChUQVJHRVRTKQpkaWZmIC1ydU4gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy90ZXN0Y2Fz
ZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy91dGltZXMwMS5jIGx0cC1mdWxsLTIwMDYxMTIxL3Rl
c3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczAxLmMKLS0tIGx0cC1mdWxsLTIw
MDYxMTIxLW9yaWcvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRpbWVzMDEuYwlX
ZWQgRGVjIDMxIDE4OjAwOjAwIDE5NjkKKysrIGx0cC1mdWxsLTIwMDYxMTIxL3Rlc3RjYXNlcy9r
ZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczAxLmMJVGh1IERlYyAxNCAxMjozNjoyOCAyMDA2
CkBAIC0wLDAgKzEsMjgxIEBACisvKgorICoKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlv
bmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMQorICoKKyAqICAgVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQor
ICogICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8q
CisgKiBUZXN0IE5hbWU6IHV0aW1lczAxCisgKgorICogVGVzdCBEZXNjcmlwdGlvbjoKKyAqICBW
ZXJpZnkgdGhhdCB0aGUgc3lzdGVtIGNhbGwgdXRpbWVzKCkgc3VjY2Vzc2Z1bGx5IHNldHMgdGhl
IG1vZGlmaWNhdGlvbgorICogIGFuZCBhY2Nlc3MgdGltZXMgb2YgYSBmaWxlIHRvIHRoZSBjdXJy
ZW50IHRpbWUsIGlmIHRoZSB0aW1lcyBhcmd1bWVudAorICogIGlzIG51bGwsIGFuZCB0aGUgdXNl
ciBJRCBvZiB0aGUgcHJvY2VzcyBpcyAicm9vdCIuCisgKgorICogRXhwZWN0ZWQgUmVzdWx0Ogor
ICogIHV0aW1lcyBzdWNjZWVkcyByZXR1cm5pbmcgemVybyBhbmQgc2V0cyB0aGUgYWNjZXNzIGFu
ZCBtb2RpZmljYXRpb24KKyAqICB0aW1lcyBvZiB0aGUgZmlsZSB0byB0aGUgY3VycmVudCB0aW1l
LgorICoKKyAqIEFsZ29yaXRobToKKyAqICBTZXR1cDoKKyAqICAgU2V0dXAgc2lnbmFsIGhhbmRs
aW5nLgorICogICBDcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAqICAgUGF1c2UgZm9yIFNJ
R1VTUjEgaWYgb3B0aW9uIHNwZWNpZmllZC4KKyAqCisgKiAgVGVzdDoKKyAqICAgTG9vcCBpZiB0
aGUgcHJvcGVyIG9wdGlvbnMgYXJlIGdpdmVuLgorICogICBFeGVjdXRlIHN5c3RlbSBjYWxsCisg
KiAgIENoZWNrIHJldHVybiBjb2RlLCBpZiBzeXN0ZW0gY2FsbCBmYWlsZWQgKHJldHVybj0tMSkK
KyAqICAgCUxvZyB0aGUgZXJybm8gYW5kIElzc3VlIGEgRkFJTCBtZXNzYWdlLgorICogICBPdGhl
cndpc2UsCisgKiAgIAlWZXJpZnkgdGhlIEZ1bmN0aW9uYWxpdHkgb2Ygc3lzdGVtIGNhbGwJCisg
KiAgICAgIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgIAlJc3N1ZSBGdW5jdGlvbmFsaXR5LVBhc3Mg
bWVzc2FnZS4KKyAqICAgICAgT3RoZXJ3aXNlLAorICoJCUlzc3VlIEZ1bmN0aW9uYWxpdHktRmFp
bCBtZXNzYWdlLgorICogIENsZWFudXA6CisgKiAgIFByaW50IGVycm5vIGxvZyBhbmQvb3IgdGlt
aW5nIHN0YXRzIGlmIG9wdGlvbnMgZ2l2ZW4KKyAqICAgRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZGly
ZWN0b3J5IGNyZWF0ZWQuCisgKgorICogVXNhZ2U6ICA8Zm9yIGNvbW1hbmQtbGluZT4KKyAqICB1
dGltZXMwMSBbLWMgbl0gWy1lXSBbLWZdIFstaSBuXSBbLUkgeF0gWy1wIHhdIFstdF0KKyAqCQl3
aGVyZSwgIC1jIG4gOiBSdW4gbiBjb3BpZXMgY29uY3VycmVudGx5LgorICoJCQktZSAgIDogVHVy
biBvbiBlcnJubyBsb2dnaW5nLgorICoJCQktZiAgIDogVHVybiBvZmYgZnVuY3Rpb25hbGl0eSBU
ZXN0aW5nLgorICoJCQktaSBuIDogRXhlY3V0ZSB0ZXN0IG4gdGltZXMuCisgKgkJCS1JIHggOiBF
eGVjdXRlIHRlc3QgZm9yIHggc2Vjb25kcy4KKyAqCQkJLVAgeCA6IFBhdXNlIGZvciB4IHNlY29u
ZHMgYmV0d2VlbiBpdGVyYXRpb25zLgorICoJCQktdCAgIDogVHVybiBvbiBzeXNjYWxsIHRpbWlu
Zy4KKyAqCisgKiBIaXN0b3J5CisgKgkwNy8yMDAxIEpvaG4gR2VvcmdlCisgKgkJLVBvcnRlZAor
ICoKKyAqIFJlc3RyaWN0aW9uczoKKyAqICBUaGlzIHRlc3Qgc2hvdWxkIGJlIHJ1biBieSAnc3Vw
ZXItdXNlcicgKHJvb3QpIG9ubHkuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu
Y2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5v
Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUg
PHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+Cisj
aW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAidGVzdC5oIgorI2luY2x1ZGUgInVzY3Rlc3Qu
aCIKKworI2RlZmluZSBURU1QX0ZJTEUJInRtcF9maWxlIgorI2RlZmluZSBGSUxFX01PREUJU19J
UlVTUiB8IFNfSVJHUlAgfCBTX0lST1RICisKK2NoYXIgKlRDSUQ9InV0aW1lczAxIjsJCS8qIFRl
c3QgcHJvZ3JhbSBpZGVudGlmaWVyLiAgICAqLworaW50IFRTVF9UT1RBTD0xOwkJLyogVG90YWwg
bnVtYmVyIG9mIHRlc3QgY2FzZXMuICovCitleHRlcm4gaW50IFRzdF9jb3VudDsJCS8qIFRlc3Qg
Q2FzZSBjb3VudGVyIGZvciB0c3RfKiByb3V0aW5lcyAqLwordGltZV90IGN1cnJfdGltZTsJCS8q
IGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzICovCit0aW1lX3QgdGxvYzsJCQkvKiBhcmd1bWVudCB2
YXIuIGZvciB0aW1lKCkgKi8KK2ludCBleHBfZW5vc1tdPXswfTsKKwordm9pZCBzZXR1cCgpOwkJ
CS8qIE1haW4gc2V0dXAgZnVuY3Rpb24gb2YgdGVzdCAqLwordm9pZCBjbGVhbnVwKCk7CQkJLyog
Y2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIHRlc3QgKi8KKworaW50CittYWluKGludCBhYywgY2hh
ciAqKmF2KQoreworCXN0cnVjdCBzdGF0IHN0YXRfYnVmOwkvKiBzdHJ1Y3QgYnVmZmVyIHRvIGhv
bGQgZmlsZSBpbmZvLiAqLworCWludCBsYzsJCQkvKiBsb29wIGNvdW50ZXIgKi8KKwljaGFyICpt
c2c7CQkvKiBtZXNzYWdlIHJldHVybmVkIGZyb20gcGFyc2Vfb3B0cyAqLworCXRpbWVfdCBtb2Rm
X3RpbWUsIGFjY2Vzc190aW1lOworCXRpbWVfdCBwcmVzX3RpbWU7CS8qIGZpbGUgbW9kaWZpY2F0
aW9uL2FjY2Vzcy9wcmVzZW50IHRpbWUgKi8KKyAgICAKKwkvKiBQYXJzZSBzdGFuZGFyZCBvcHRp
b25zIGdpdmVuIHRvIHJ1biB0aGUgdGVzdC4gKi8KKwltc2cgPSBwYXJzZV9vcHRzKGFjLCBhdiwg
KG9wdGlvbl90ICopIE5VTEwsIE5VTEwpOworCWlmIChtc2cgIT0gKGNoYXIgKikgTlVMTCkgewor
CQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIk9QVElPTiBQQVJTSU5HIEVSUk9SIC0gJXMiLCBtc2cp
OworCQl0c3RfZXhpdCgpOworCX0KKworCS8qIFBlcmZvcm0gZ2xvYmFsIHNldHVwIGZvciB0ZXN0
ICovCisJc2V0dXAoKTsKKworCS8qIHNldCB0aGUgZXhwZWN0ZWQgZXJybm9zLi4uICovCisJVEVT
VF9FWFBfRU5PUyhleHBfZW5vcyk7CisKKwkvKiBDaGVjayBsb29waW5nIHN0YXRlIGlmIC1pIG9w
dGlvbiBnaXZlbiAqLworCWZvciAobGMgPSAwOyBURVNUX0xPT1BJTkcobGMpOyBsYysrKSB7CisJ
CS8qIFJlc2V0IFRzdF9jb3VudCBpbiBjYXNlIHdlIGFyZSBsb29waW5nLiAqLworCQlUc3RfY291
bnQ9MDsKKworCQkvKiAKKwkJICogSW52b2tlIHV0aW1lcygyKSB0byBzZXQgVEVNUF9GSUxFIGFj
Y2VzcyBhbmQKKwkJICogbW9kaWZpY2F0aW9uIHRpbWVzIHRvIHRoZSBjdXJyZW50IHRpbWUuCisJ
CSAqLworCQlURVNUKHV0aW1lcyhURU1QX0ZJTEUsIE5VTEwpKTsKKworCQkvKiBjaGVjayByZXR1
cm4gY29kZSBvZiB1dGltZXMoMikgKi8KKwkJaWYgKFRFU1RfUkVUVVJOID09IC0xKSB7CisJCQlU
RVNUX0VSUk9SX0xPRyhURVNUX0VSUk5PKTsKKwkJCXRzdF9yZXNtKFRGQUlMLCAidXRpbWVzKCVz
KSBGYWlsZWQsIGVycm5vPSVkIDogJXMiLAorCQkJCSBURU1QX0ZJTEUsIFRFU1RfRVJSTk8sIHN0
cmVycm9yKFRFU1RfRVJSTk8pKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBQZXJmb3JtIGZ1
bmN0aW9uYWwgdmVyaWZpY2F0aW9uIGlmIHRlc3QKKwkJCSAqIGV4ZWN1dGVkIHdpdGhvdXQgKC1m
KSBvcHRpb24uCisJCQkgKi8KKwkJCWlmIChTVERfRlVOQ1RJT05BTF9URVNUKSB7CisJCQkJLyoK
KwkJCQkgKiBTbGVlcCBmb3IgYSBzZWNvbmQgc28gdGhhdCBtb2QgdGltZSBhbmQKKwkJCQkgKiBh
Y2Nlc3MgdGltZXMgd2lsbCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKKwkJCQkgKiBjdXJyZW50IHRp
bWUKKwkJCQkgKi8KKwkJCQlzbGVlcCgyKTsKKworCQkJCS8qCisJCQkJICogR2V0IHRoZSBjdXJy
ZW50IHRpbWUgbm93LCBhZnRlciBjYWxsaW5nCisJCQkJICogdXRpbWVzKDIpCisJCQkJICovCisJ
CQkJaWYgKChwcmVzX3RpbWUgPSB0aW1lKCZ0bG9jKSkgPCAwKSB7CisJCQkJCXRzdF9icmttKFRG
QUlMLCBjbGVhbnVwLCAidGltZSgpICIKKwkJCQkJCSJmYWlsZWQgdG8gZ2V0IHByZXNlbnQgdGlt
ZSAiCisJCQkJCQkiYWZ0ZXIgdXRpbWVzLCBlcnJvcj0lZCIsIGVycm5vKTsKKwkJCQkJLypOT1RS
RUFDSEVEKi8KKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIEdldCB0aGUgbW9kaWZpY2F0aW9uIGFu
ZCBhY2Nlc3MgdGltZXMgb2YKKwkJCQkgKiB0ZW1wb3JhcnkgZmlsZSB1c2luZyBzdGF0KDIpLgor
CQkJCSAqLworCQkJCWlmIChzdGF0KFRFTVBfRklMRSwgJnN0YXRfYnVmKSA8IDApIHsKKwkJCQkJ
dHN0X2Jya20oVEZBSUwsIGNsZWFudXAsICJzdGF0KDIpIG9mICIKKwkJCQkJCSIlcyBmYWlsZWQs
IGVycm9yOiVkIiwKKwkJCQkJCSBURU1QX0ZJTEUsIFRFU1RfRVJSTk8pOworCQkJCQkvKk5PVFJF
QUNIRUQqLworCQkJCX0KKwkJCQltb2RmX3RpbWUgPSBzdGF0X2J1Zi5zdF9tdGltZTsKKwkJCQlh
Y2Nlc3NfdGltZSA9IHN0YXRfYnVmLnN0X2F0aW1lOworCisJCQkJLyogTm93IGRvIHRoZSBhY3R1
YWwgdmVyaWZpY2F0aW9uICovCisJCQkJaWYgKG1vZGZfdGltZSA8PSBjdXJyX3RpbWUgfHwgXAor
CQkJCQltb2RmX3RpbWUgPj0gcHJlc190aW1lIHx8IFwKKwkJCQkJYWNjZXNzX3RpbWUgPD0gY3Vy
cl90aW1lIHx8IFwKKwkJCQkJYWNjZXNzX3RpbWUgPj0gcHJlc190aW1lKSB7CisJCQkJCXRzdF9y
ZXNtKFRGQUlMLCAiJXMgYWNjZXNzIGFuZCAiCisJCQkJCQkibW9kaWZpY2F0aW9uIHRpbWVzIG5v
dCBzZXQiLAorCQkJCQkJIFRFTVBfRklMRSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJdHN0X3Jlc20o
VFBBU1MsICJGdW5jdGlvbmFsaXR5IG9mICIKKwkJCQkJCSJ1dGltZXMoJXMsIE5VTEwpIHN1Y2Nl
c3NmdWwiLAorCQkJCQkJIFRFTVBfRklMRSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl0c3Rf
cmVzbShUUEFTUywgIiVzIGNhbGwgc3VjY2VlZGVkIiwgVENJRCk7CisJCQl9CisJCX0KKwkJVHN0
X2NvdW50Kys7CisJfQkvKiBFbmQgZm9yIFRFU1RfTE9PUElORyAqLworCisJLyogQ2FsbCBjbGVh
bnVwKCkgdG8gdW5kbyBzZXR1cCBkb25lIGZvciB0aGUgdGVzdC4gKi8KKwljbGVhbnVwKCk7CisJ
LypOT1RSRUFDSEVEKi8KKworCisgIHJldHVybigwKTsKKworfQkvKiBFbmQgbWFpbiAqLworCisv
KgorICogdm9pZAorICogc2V0dXAoKSAtIHBlcmZvcm1zIGFsbCBPTkUgVElNRSBzZXR1cCBmb3Ig
dGhpcyB0ZXN0LgorICogIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGNoYW5nZSBk
aXJlY3RvcnkgdG8gaXQuCisgKiAgQ3JlYXRlIGEgdGVzdCBmaWxlIHVuZGVyIHRlbXBvcmFyeSBk
aXJlY3RvcnkgYW5kIGNsb3NlIGl0CisgKi8KK3ZvaWQgCitzZXR1cCgpCit7CisJaW50IGZpbGRl
czsJCQkvKiBmaWxlIGhhbmRsZSBmb3IgdGVtcCBmaWxlICovCisKKwkvKiBjYXB0dXJlIHNpZ25h
bHMgKi8KKwl0c3Rfc2lnKEZPUkssIERFRl9IQU5ETEVSLCBjbGVhbnVwKTsKKworCS8qIENoZWNr
IHRoYXQgdGhlIHRlc3QgcHJvY2VzcyBpZCBpcyBzdXBlci9yb290ICAqLworCWlmIChnZXRldWlk
KCkgIT0gMCkgeworCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIk11c3QgYmUgc3VwZXIvcm9vdCBm
b3IgdGhpcyB0ZXN0ISIpOworCQl0c3RfZXhpdCgpOworCX0KKworCS8qIFBhdXNlIGlmIHRoYXQg
b3B0aW9uIHdhcyBzcGVjaWZpZWQgKi8KKwlURVNUX1BBVVNFOworCisJLyogbWFrZSBhIHRlbXAg
ZGlyZWN0b3J5IGFuZCBjZCB0byBpdCAqLworCXRzdF90bXBkaXIoKTsKKworCS8qIENyZWF0IGEg
dGVtcG9yYXJ5IGZpbGUgdW5kZXIgYWJvdmUgZGlyZWN0b3J5ICovCisJaWYgKChmaWxkZXMgPSBj
cmVhdChURU1QX0ZJTEUsIEZJTEVfTU9ERSkpID09IC0xKSB7CisJCXRzdF9icmttKFRCUk9LLCBj
bGVhbnVwLAorCQkJICJjcmVhdCglcywgJSNvKSBGYWlsZWQsIGVycm5vPSVkIDolcyIsCisJCQkg
VEVNUF9GSUxFLCBGSUxFX01PREUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworCQkvKk5PVFJF
QUNIRUQqLworCX0KKworCS8qIENsb3NlIHRoZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkICovCisJ
aWYgKGNsb3NlKGZpbGRlcykgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLAorCQkJ
ICJjbG9zZSglcykgRmFpbGVkLCBlcnJubz0lZCA6ICVzOiIsCisJCQkgVEVNUF9GSUxFLCBlcnJu
bywgc3RyZXJyb3IoZXJybm8pKTsKKwkJLypOT1RSRUFDSEVEKi8KKwl9CisKKwkvKiBHZXQgdGhl
IGN1cnJlbnQgdGltZSAqLworCWlmICgoY3Vycl90aW1lID0gdGltZSgmdGxvYykpIDwgMCkgewor
CQl0c3RfYnJrbShUQlJPSywgY2xlYW51cCwKKwkJCSAidGltZSgpIGZhaWxlZCB0byBnZXQgY3Vy
cmVudCB0aW1lLCBlcnJubz0lZCIsCisJCQkgZXJybm8pOworCQkvKk5PVFJFQUNIRUQqLworCX0K
KworCS8qCisJICogU2xlZXAgZm9yIGEgc2Vjb25kIHNvIHRoYXQgbW9kIHRpbWUgYW5kIGFjY2Vz
cyB0aW1lcyB3aWxsIGJlCisJICogZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgdGltZQorCSAq
LworCXNsZWVwKDIpOwkvKiBzbGVlcCgxKSBvbiBJQTY0IHNvbWV0aW1lcyBzbGVlcHMgPCAxIHNl
YyEhICovCisJCQorfQkvKiBFbmQgc2V0dXAoKSAqLworCisvKgorICogdm9pZAorICogY2xlYW51
cCgpIC0gcGVyZm9ybXMgYWxsIE9ORSBUSU1FIGNsZWFudXAgZm9yIHRoaXMgdGVzdCBhdAorICog
ICAgICAgICAgICAgY29tcGxldGlvbiBvciBwcmVtYXR1cmUgZXhpdC4KKyAqICBSZW1vdmUgdGhl
IHRlc3QgZGlyZWN0b3J5IGFuZCB0ZXN0ZmlsZSBjcmVhdGVkIGluIHRoZSBzZXR1cC4KKyAqLwor
dm9pZCAKK2NsZWFudXAoKQoreworCS8qCisJICogcHJpbnQgdGltaW5nIHN0YXRzIGlmIHRoYXQg
b3B0aW9uIHdhcyBzcGVjaWZpZWQuCisJICogcHJpbnQgZXJybm8gbG9nIGlmIHRoYXQgb3B0aW9u
IHdhcyBzcGVjaWZpZWQuCisJICovCisJVEVTVF9DTEVBTlVQOworCisJLyogUmVtb3ZlIHRtcCBk
aXIgYW5kIGFsbCBmaWxlcyBpbiBpdCAqLworCXRzdF9ybWRpcigpOworCisJLyogZXhpdCB3aXRo
IHJldHVybiBjb2RlIGFwcHJvcHJpYXRlIGZvciByZXN1bHRzICovCisJdHN0X2V4aXQoKTsKK30J
LyogRW5kIGNsZWFudXAoKSAqLwpkaWZmIC1ydU4gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy90ZXN0
Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy91dGltZXMwMi5jIGx0cC1mdWxsLTIwMDYxMTIx
L3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczAyLmMKLS0tIGx0cC1mdWxs
LTIwMDYxMTIxLW9yaWcvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRpbWVzMDIu
YwlXZWQgRGVjIDMxIDE4OjAwOjAwIDE5NjkKKysrIGx0cC1mdWxsLTIwMDYxMTIxL3Rlc3RjYXNl
cy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczAyLmMJVGh1IERlYyAxNCAxMjozNjoxNCAy
MDA2CkBAIC0wLDAgKzEsMjk5IEBACisvKgorICoKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5h
dGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMQorICoKKyAqICAgVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZQorICogICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisK
Ky8qCisgKiBUZXN0IE5hbWU6IHV0aW1lczAyCisgKgorICogVGVzdCBEZXNjcmlwdGlvbjoKKyAq
ICBWZXJpZnkgdGhhdCB0aGUgc3lzdGVtIGNhbGwgdXRpbWVzKCkgc3VjY2Vzc2Z1bGx5IHNldHMg
dGhlIG1vZGlmaWNhdGlvbgorICogIGFuZCBhY2Nlc3MgdGltZXMgb2YgYSBmaWxlIHRvIHRoZSBj
dXJyZW50IHRpbWUsIHVuZGVyIHRoZSBmb2xsb3dpbmcKKyAqICBjb25zdHJhaW50cywKKyAqCS0g
VGhlIHRpbWVzIGFyZ3VtZW50IGlzIG51bGwuCisgKgktIFRoZSB1c2VyIElEIG9mIHRoZSBwcm9j
ZXNzIGlzIG5vdCAicm9vdCIuCisgKgktIFRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZSB1c2VyIElE
IG9mIHRoZSBwcm9jZXNzLgorICoKKyAqIEV4cGVjdGVkIFJlc3VsdDoKKyAqICB1dGltZXMgc3Vj
Y2VlZHMgcmV0dXJuaW5nIHplcm8gYW5kIHNldHMgdGhlIGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9u
CisgKiAgdGltZXMgb2YgdGhlIGZpbGUgdG8gdGhlIGN1cnJlbnQgdGltZS4KKyAqCisgKiBBbGdv
cml0aG06CisgKiAgU2V0dXA6CisgKiAgIFNldHVwIHNpZ25hbCBoYW5kbGluZy4KKyAqICAgQ3Jl
YXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCisgKiAgIFBhdXNlIGZvciBTSUdVU1IxIGlmIG9wdGlv
biBzcGVjaWZpZWQuCisgKgorICogIFRlc3Q6CisgKiAgIExvb3AgaWYgdGhlIHByb3BlciBvcHRp
b25zIGFyZSBnaXZlbi4KKyAqICAgRXhlY3V0ZSBzeXN0ZW0gY2FsbAorICogICBDaGVjayByZXR1
cm4gY29kZSwgaWYgc3lzdGVtIGNhbGwgZmFpbGVkIChyZXR1cm49LTEpCisgKiAgIAlMb2cgdGhl
IGVycm5vIGFuZCBJc3N1ZSBhIEZBSUwgbWVzc2FnZS4KKyAqICAgT3RoZXJ3aXNlLAorICogICAJ
VmVyaWZ5IHRoZSBGdW5jdGlvbmFsaXR5IG9mIHN5c3RlbSBjYWxsCQorICogICAgICBpZiBzdWNj
ZXNzZnVsLAorICogICAgICAJSXNzdWUgRnVuY3Rpb25hbGl0eS1QYXNzIG1lc3NhZ2UuCisgKiAg
ICAgIE90aGVyd2lzZSwKKyAqCQlJc3N1ZSBGdW5jdGlvbmFsaXR5LUZhaWwgbWVzc2FnZS4KKyAq
ICBDbGVhbnVwOgorICogICBQcmludCBlcnJubyBsb2cgYW5kL29yIHRpbWluZyBzdGF0cyBpZiBv
cHRpb25zIGdpdmVuCisgKiAgIERlbGV0ZSB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBjcmVhdGVk
LgorICoKKyAqIFVzYWdlOiAgPGZvciBjb21tYW5kLWxpbmU+CisgKgl1dGltZXMwMiBbLWMgbl0g
Wy1lXSBbLWZdIFstaSBuXSBbLUkgeF0gWy1wIHhdIFstdF0KKyAqCXdoZXJlLCAgLWMgbiA6IFJ1
biBuIGNvcGllcyBjb25jdXJyZW50bHkuCisgKgkJLWUgICA6IFR1cm4gb24gZXJybm8gbG9nZ2lu
Zy4KKyAqCQktZiAgIDogVHVybiBvZmYgZnVuY3Rpb25hbGl0eSBUZXN0aW5nLgorICoJCS1pIG4g
OiBFeGVjdXRlIHRlc3QgbiB0aW1lcy4KKyAqCQktSSB4IDogRXhlY3V0ZSB0ZXN0IGZvciB4IHNl
Y29uZHMuCisgKgkJLVAgeCA6IFBhdXNlIGZvciB4IHNlY29uZHMgYmV0d2VlbiBpdGVyYXRpb25z
LgorICoJCS10ICAgOiBUdXJuIG9uIHN5c2NhbGwgdGltaW5nLgorICoKKyAqIEhpc3RvcnkKKyAq
CTA3LzIwMDEgSm9obiBHZW9yZ2UKKyAqCQktUG9ydGVkCisgKgorICogUmVzdHJpY3Rpb25zOgor
ICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNs
dWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+
CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxz
eXMvc3RhdC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1
ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgInRlc3QuaCIKKyNpbmNsdWRlICJ1c2N0ZXN0LmgiCisK
KyNkZWZpbmUgVEVNUF9GSUxFCSJ0bXBfZmlsZSIKKyNkZWZpbmUgRklMRV9NT0RFCVNfSVJVU1Ig
fCBTX0lSR1JQIHwgU19JUk9USAorCitjaGFyICpUQ0lEPSJ1dGltZXMwMiI7CQkvKiBUZXN0IHBy
b2dyYW0gaWRlbnRpZmllci4gICAgKi8KK2ludCBUU1RfVE9UQUw9MTsJCS8qIFRvdGFsIG51bWJl
ciBvZiB0ZXN0IGNhc2VzLiAqLworZXh0ZXJuIGludCBUc3RfY291bnQ7CQkvKiBUZXN0IENhc2Ug
Y291bnRlciBmb3IgdHN0Xyogcm91dGluZXMgKi8KK3RpbWVfdCBjdXJyX3RpbWU7CQkvKiBjdXJy
ZW50IHRpbWUgaW4gc2Vjb25kcyAqLwordGltZV90IHRsb2M7CQkJLyogYXJndW1lbnQgdmFyLiBm
b3IgdGltZSgpICovCitpbnQgZXhwX2Vub3NbXT17MH07CitjaGFyIG5vYm9keV91aWRbXSA9ICJu
b2JvZHkiOworc3RydWN0IHBhc3N3ZCAqbHRwdXNlcjsKKworCit2b2lkIHNldHVwKCk7CQkJLyog
TWFpbiBzZXR1cCBmdW5jdGlvbiBvZiB0ZXN0ICovCit2b2lkIGNsZWFudXAoKTsJCQkvKiBjbGVh
bnVwIGZ1bmN0aW9uIGZvciB0aGUgdGVzdCAqLworCitpbnQKK21haW4oaW50IGFjLCBjaGFyICoq
YXYpCit7CisJc3RydWN0IHN0YXQgc3RhdF9idWY7CS8qIHN0cnVjdCBidWZmZXIgdG8gaG9sZCBm
aWxlIGluZm8uICovCisJaW50IGxjOwkJCS8qIGxvb3AgY291bnRlciAqLworCWNoYXIgKm1zZzsJ
CS8qIG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSBwYXJzZV9vcHRzICovCisJdGltZV90IG1vZGZfdGlt
ZSwgYWNjZXNzX3RpbWU7CisJdGltZV90IHByZXNfdGltZTsJLyogZmlsZSBtb2RpZmljYXRpb24v
YWNjZXNzL3ByZXNlbnQgdGltZSAqLworICAgIAorCS8qIFBhcnNlIHN0YW5kYXJkIG9wdGlvbnMg
Z2l2ZW4gdG8gcnVuIHRoZSB0ZXN0LiAqLworCW1zZyA9IHBhcnNlX29wdHMoYWMsIGF2LCAob3B0
aW9uX3QgKikgTlVMTCwgTlVMTCk7CisJaWYgKG1zZyAhPSAoY2hhciAqKSBOVUxMKSB7CisJCXRz
dF9icmttKFRCUk9LLCBOVUxMLCAiT1BUSU9OIFBBUlNJTkcgRVJST1IgLSAlcyIsIG1zZyk7CisJ
CXRzdF9leGl0KCk7CisJfQorCisJLyogUGVyZm9ybSBnbG9iYWwgc2V0dXAgZm9yIHRlc3QgKi8K
KwlzZXR1cCgpOworCisJLyogc2V0IHRoZSBleHBlY3RlZCBlcnJub3MuLi4gKi8KKwlURVNUX0VY
UF9FTk9TKGV4cF9lbm9zKTsKKworCS8qIENoZWNrIGxvb3Bpbmcgc3RhdGUgaWYgLWkgb3B0aW9u
IGdpdmVuICovCisJZm9yIChsYyA9IDA7IFRFU1RfTE9PUElORyhsYyk7IGxjKyspIHsKKwkJLyog
UmVzZXQgVHN0X2NvdW50IGluIGNhc2Ugd2UgYXJlIGxvb3BpbmcuICovCisJCVRzdF9jb3VudD0w
OworCisJCS8qIAorCQkgKiBJbnZva2UgdXRpbWVzKDIpIHRvIHNldCBURU1QX0ZJTEUgYWNjZXNz
IGFuZAorCQkgKiBtb2RpZmljYXRpb24gdGltZXMgdG8gdGhlIGN1cnJlbnQgdGltZS4KKwkJICov
CisJCVRFU1QodXRpbWVzKFRFTVBfRklMRSwgTlVMTCkpOworCisJCS8qIGNoZWNrIHJldHVybiBj
b2RlIG9mIHV0aW1lcygyKSAqLworCQlpZiAoVEVTVF9SRVRVUk4gPT0gLTEpIHsKKwkJCVRFU1Rf
RVJST1JfTE9HKFRFU1RfRVJSTk8pOworCQkJdHN0X3Jlc20oVEZBSUwsICJ1dGltZXMoJXMpIEZh
aWxlZCwgZXJybm89JWQgOiAlcyIsCisJCQkJIFRFTVBfRklMRSwgVEVTVF9FUlJOTywgc3RyZXJy
b3IoVEVTVF9FUlJOTykpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFBlcmZvcm0gZnVuY3Rp
b25hbCB2ZXJpZmljYXRpb24gaWYgdGVzdAorCQkJICogZXhlY3V0ZWQgd2l0aG91dCAoLWYpIG9w
dGlvbi4KKwkJCSAqLworCQkJaWYgKFNURF9GVU5DVElPTkFMX1RFU1QpIHsKKwkJCQkvKgorCQkJ
CSAqIFNsZWVwIGZvciBhIHNlY29uZCBzbyB0aGF0IG1vZCB0aW1lIGFuZAorCQkJCSAqIGFjY2Vz
cyB0aW1lcyB3aWxsIGJlIGRpZmZlcmVudCBmcm9tIHRoZQorCQkJCSAqIGN1cnJlbnQgdGltZQor
CQkJCSAqLworCQkJCXNsZWVwKDIpOworCisJCQkJLyoKKwkJCQkgKiBHZXQgdGhlIGN1cnJlbnQg
dGltZSBub3csIGFmdGVyIGNhbGxpbmcKKwkJCQkgKiB1dGltZXMoMikKKwkJCQkgKi8KKwkJCQlp
ZiAoKHByZXNfdGltZSA9IHRpbWUoJnRsb2MpKSA8IDApIHsKKwkJCQkJdHN0X2Jya20oVEZBSUws
IGNsZWFudXAsICJ0aW1lKCkgIgorCQkJCQkJImZhaWxlZCB0byBnZXQgcHJlc2VudCB0aW1lICIK
KwkJCQkJCSJhZnRlciB1dGltZXMsIGVycm9yPSVkIiwKKwkJCQkJCWVycm5vKTsKKwkJCQkJLypO
T1RSRUFDSEVEKi8KKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIEdldCB0aGUgbW9kaWZpY2F0aW9u
IGFuZCBhY2Nlc3MgdGltZXMgb2YKKwkJCQkgKiB0ZW1wb3JhcnkgZmlsZSB1c2luZyBzdGF0KDIp
LgorCQkJCSAqLworCQkJCWlmIChzdGF0KFRFTVBfRklMRSwgJnN0YXRfYnVmKSA8IDApIHsKKwkJ
CQkJdHN0X2Jya20oVEZBSUwsIGNsZWFudXAsICJzdGF0KDIpIG9mICIKKwkJCQkJCSIlcyBmYWls
ZWQsIGVycm5vOiVkIiwKKwkJCQkJCVRFTVBfRklMRSwgVEVTVF9FUlJOTyk7CisJCQkJCS8qTk9U
UkVBQ0hFRCovCisJCQkJfQorCQkJCW1vZGZfdGltZSA9IHN0YXRfYnVmLnN0X210aW1lOworCQkJ
CWFjY2Vzc190aW1lID0gc3RhdF9idWYuc3RfYXRpbWU7CisKKwkJCQkvKiBOb3cgZG8gdGhlIGFj
dHVhbCB2ZXJpZmljYXRpb24gKi8KKwkJCQlpZiAobW9kZl90aW1lIDw9IGN1cnJfdGltZSB8fCBc
CisJCQkJCW1vZGZfdGltZSA+PSBwcmVzX3RpbWUgfHwgXAorCQkJCQlhY2Nlc3NfdGltZSA8PSBj
dXJyX3RpbWUgfHwgXAorCQkJCQlhY2Nlc3NfdGltZSA+PSBwcmVzX3RpbWUpIHsKKwkJCQkJdHN0
X3Jlc20oVEZBSUwsICIlcyBhY2Nlc3MgYW5kICIKKwkJCQkJCSJtb2RpZmljYXRpb24gdGltZXMg
bm90IHNldCIsCisJCQkJCQlURU1QX0ZJTEUpOworCQkJCX0gZWxzZSB7CisJCQkJCXRzdF9yZXNt
KFRQQVNTLCAiRnVuY3Rpb25hbGl0eSBvZiAiCisJCQkJCQkidXRpbWVzKCVzLCBOVUxMKSBzdWNj
ZXNzZnVsIiwKKwkJCQkJCVRFTVBfRklMRSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl0c3Rf
cmVzbShUUEFTUywgIiVzIGNhbGwgc3VjY2VlZGVkIiwgVENJRCk7CisJCQl9CisJCX0KKwkJVHN0
X2NvdW50Kys7CisJfQkvKiBFbmQgZm9yIFRFU1RfTE9PUElORyAqLworCisJLyogQ2FsbCBjbGVh
bnVwKCkgdG8gdW5kbyBzZXR1cCBkb25lIGZvciB0aGUgdGVzdC4gKi8KKwljbGVhbnVwKCk7CisJ
LypOT1RSRUFDSEVEKi8KKworCisgIHJldHVybigwKTsKKworfQkvKiBFbmQgbWFpbiAqLworCisv
KgorICogdm9pZAorICogc2V0dXAoKSAtIHBlcmZvcm1zIGFsbCBPTkUgVElNRSBzZXR1cCBmb3Ig
dGhpcyB0ZXN0LgorICogIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGNoYW5nZSBk
aXJlY3RvcnkgdG8gaXQuCisgKiAgQ3JlYXRlIGEgdGVzdCBmaWxlIHVuZGVyIHRlbXBvcmFyeSBk
aXJlY3RvcnkgYW5kIGNsb3NlIGl0CisgKi8KK3ZvaWQgCitzZXR1cCgpCit7CisJaW50IGZpbGRl
czsJCQkvKiBmaWxlIGhhbmRsZSBmb3IgdGVtcCBmaWxlICovCisKKwkvKiBjYXB0dXJlIHNpZ25h
bHMgKi8KKwl0c3Rfc2lnKEZPUkssIERFRl9IQU5ETEVSLCBjbGVhbnVwKTsKKworCS8qIFN3aXRj
aCB0byBub2JvZHkgdXNlciBmb3IgY29ycmVjdCBlcnJvciBjb2RlIGNvbGxlY3Rpb24gKi8KKyAg
ICAgICAgaWYgKGdldGV1aWQoKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgdHN0X2Jya20oVEJS
T0ssIHRzdF9leGl0LCAiVGVzdCBtdXN0IGJlIHJ1biBhcyByb290Iik7CisgICAgICAgIH0KKyAg
ICAgICAgIGx0cHVzZXIgPSBnZXRwd25hbShub2JvZHlfdWlkKTsKKyAgICAgICAgIGlmIChzZXR1
aWQobHRwdXNlci0+cHdfdWlkKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIHRzdF9yZXNtKFRJ
TkZPLCAic2V0dWlkIGZhaWxlZCB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHNl
dCB0aGUgZWZmZWN0aXZlIHVpZCB0byAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRw
dXNlci0+cHdfdWlkKTsKKyAgICAgICAgICAgICAgICBwZXJyb3IoInNldHVpZCIpOworICAgICAg
ICAgfQorCQorCisJLyogUGF1c2UgaWYgdGhhdCBvcHRpb24gd2FzIHNwZWNpZmllZAorCSAqIFRF
U1RfUEFVU0UgY29udGFpbnMgdGhlIGNvZGUgdG8gZm9yayB0aGUgdGVzdCB3aXRoIHRoZSAtaSBv
cHRpb24uCisJICogWW91IHdhbnQgdG8gbWFrZSBzdXJlIHlvdSBkbyB0aGlzIGJlZm9yZSB5b3Ug
Y3JlYXRlIHlvdXIgdGVtcG9yYXJ5CisJICogZGlyZWN0b3J5LgorCSAqLworCVRFU1RfUEFVU0U7
CisKKwkvKiBtYWtlIGEgdGVtcCBkaXJlY3RvcnkgYW5kIGNkIHRvIGl0ICovCisJdHN0X3RtcGRp
cigpOworCisJLyogQ3JlYXQgYSB0ZW1wb3JhcnkgZmlsZSB1bmRlciBhYm92ZSBkaXJlY3Rvcnkg
Ki8KKwlpZiAoKGZpbGRlcyA9IGNyZWF0KFRFTVBfRklMRSwgRklMRV9NT0RFKSkgPT0gLTEpIHsK
KwkJdHN0X2Jya20oVEJST0ssIGNsZWFudXAsCisJCQkgImNyZWF0KCVzLCAlI28pIEZhaWxlZCwg
ZXJybm89JWQgOiVzIiwKKwkJCSBURU1QX0ZJTEUsIEZJTEVfTU9ERSwgZXJybm8sIHN0cmVycm9y
KGVycm5vKSk7CisJCS8qTk9UUkVBQ0hFRCovCisJfQorCisJLyogQ2xvc2UgdGhlIHRlbXBvcmFy
eSBmaWxlIGNyZWF0ZWQgKi8KKwlpZiAoY2xvc2UoZmlsZGVzKSA8IDApIHsKKwkJdHN0X2Jya20o
VEJST0ssIGNsZWFudXAsCisJCQkgImNsb3NlKCVzKSBGYWlsZWQsIGVycm5vPSVkIDogJXM6IiwK
KwkJCSBURU1QX0ZJTEUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworCQkvKk5PVFJFQUNIRUQq
LworCX0KKworCS8qIEdldCB0aGUgY3VycmVudCB0aW1lICovCisJaWYgKChjdXJyX3RpbWUgPSB0
aW1lKCZ0bG9jKSkgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLAorCQkJICJ0aW1l
KCkgZmFpbGVkIHRvIGdldCBjdXJyZW50IHRpbWUsIGVycm5vPSVkIiwKKwkJCSBlcnJubyk7CisJ
CS8qTk9UUkVBQ0hFRCovCisJfQorCisJLyoKKwkgKiBTbGVlcCBmb3IgYSBzZWNvbmQgc28gdGhh
dCBtb2QgdGltZSBhbmQgYWNjZXNzIHRpbWVzIHdpbGwgYmUKKwkgKiBkaWZmZXJlbnQgZnJvbSB0
aGUgY3VycmVudCB0aW1lCisJICovCisJc2xlZXAoMik7CS8qIHNsZWVwKDEpIG9uIElBNjQgc29t
ZXRpbWVzIHNsZWVwcyA8IDEgc2VjISEgKi8KKwkJCit9CS8qIEVuZCBzZXR1cCgpICovCisKKy8q
CisgKiB2b2lkCisgKiBjbGVhbnVwKCkgLSBwZXJmb3JtcyBhbGwgT05FIFRJTUUgY2xlYW51cCBm
b3IgdGhpcyB0ZXN0IGF0CisgKiAgICAgICAgICAgICBjb21wbGV0aW9uIG9yIHByZW1hdHVyZSBl
eGl0LgorICogIFJlbW92ZSB0aGUgdGVzdCBkaXJlY3RvcnkgYW5kIHRlc3RmaWxlIGNyZWF0ZWQg
aW4gdGhlIHNldHVwLgorICovCit2b2lkIAorY2xlYW51cCgpCit7CisJLyoKKwkgKiBwcmludCB0
aW1pbmcgc3RhdHMgaWYgdGhhdCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKwkgKiBwcmludCBlcnJu
byBsb2cgaWYgdGhhdCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKwkgKi8KKwlURVNUX0NMRUFOVVA7
CisKKwkvKiBSZW1vdmUgdG1wIGRpciBhbmQgYWxsIGZpbGVzIGluIGl0ICovCisJdHN0X3JtZGly
KCk7CisKKwkvKiBleGl0IHdpdGggcmV0dXJuIGNvZGUgYXBwcm9wcmlhdGUgZm9yIHJlc3VsdHMg
Ki8KKwl0c3RfZXhpdCgpOworfQkvKiBFbmQgY2xlYW51cCgpICovCmRpZmYgLXJ1TiBsdHAtZnVs
bC0yMDA2MTEyMS1vcmlnL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczAz
LmMgbHRwLWZ1bGwtMjAwNjExMjEvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRp
bWVzMDMuYwotLS0gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy90ZXN0Y2FzZXMva2VybmVsL3N5c2Nh
bGxzL3V0aW1lcy91dGltZXMwMy5jCVdlZCBEZWMgMzEgMTg6MDA6MDAgMTk2OQorKysgbHRwLWZ1
bGwtMjAwNjExMjEvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRpbWVzMDMuYwlU
aHUgRGVjIDE0IDEyOjM1OjU5IDIwMDYKQEAgLTAsMCArMSwzNzYgQEAKKy8qCisgKgorICogICBD
b3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAx
CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK
KyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZv
dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAy
MTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIFRlc3QgTmFtZTogdXRpbWVzMDMKKyAqCisgKiBU
ZXN0IERlc2NyaXB0aW9uOgorICogIFZlcmlmeSB0aGF0IHRoZSBzeXN0ZW0gY2FsbCB1dGltZXMo
KSBzdWNjZXNzZnVsbHkgc2V0cyB0aGUgbW9kaWZpY2F0aW9uCisgKiAgYW5kIGFjY2VzcyB0aW1l
cyBvZiBhIGZpbGUgdG8gdGhlIGN1cnJlbnQgdGltZSwgdW5kZXIgdGhlIGZvbGxvd2luZworICog
IGNvbnN0cmFpbnRzLAorICoJLSBUaGUgdGltZXMgYXJndW1lbnQgaXMgbnVsbC4KKyAqCS0gVGhl
IHVzZXIgSUQgb2YgdGhlIHByb2Nlc3MgaXMgbm90ICJyb290Ii4KKyAqCS0gVGhlIGZpbGUgaXMg
bm90IG93bmVkIGJ5IHRoZSB1c2VyIElEIG9mIHRoZSBwcm9jZXNzLgorICoJLSBUaGUgdXNlciBJ
RCBvZiB0aGUgcHJvY2VzcyBoYXMgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaWxlLgorICoKKyAqIEV4
cGVjdGVkIFJlc3VsdDoKKyAqICB1dGltZXMgc3VjY2VlZHMgcmV0dXJuaW5nIHplcm8gYW5kIHNl
dHMgdGhlIGFjY2VzcyBhbmQgbW9kaWZpY2F0aW8KKyAqICB0aW1lcyBvZiB0aGUgZmlsZSB0byB0
aGUgY3VycmVudCB0aW1lLgorICoKKyAqIEFsZ29yaXRobToKKyAqICBTZXR1cDoKKyAqICAgU2V0
dXAgc2lnbmFsIGhhbmRsaW5nLgorICogICBDcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAq
ICAgUGF1c2UgZm9yIFNJR1VTUjEgaWYgb3B0aW9uIHNwZWNpZmllZC4KKyAqCisgKiAgVGVzdDoK
KyAqICAgTG9vcCBpZiB0aGUgcHJvcGVyIG9wdGlvbnMgYXJlIGdpdmVuLgorICogICBFeGVjdXRl
IHN5c3RlbSBjYWxsCisgKiAgIENoZWNrIHJldHVybiBjb2RlLCBpZiBzeXN0ZW0gY2FsbCBmYWls
ZWQgKHJldHVybj0tMSkKKyAqICAgCUxvZyB0aGUgZXJybm8gYW5kIElzc3VlIGEgRkFJTCBtZXNz
YWdlLgorICogICBPdGhlcndpc2UsCisgKiAgIAlWZXJpZnkgdGhlIEZ1bmN0aW9uYWxpdHkgb2Yg
c3lzdGVtIGNhbGwJCisgKiAgICAgIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgIAlJc3N1ZSBGdW5j
dGlvbmFsaXR5LVBhc3MgbWVzc2FnZS4KKyAqICAgICAgT3RoZXJ3aXNlLAorICoJCUlzc3VlIEZ1
bmN0aW9uYWxpdHktRmFpbCBtZXNzYWdlLgorICogIENsZWFudXA6CisgKiAgIFByaW50IGVycm5v
IGxvZyBhbmQvb3IgdGltaW5nIHN0YXRzIGlmIG9wdGlvbnMgZ2l2ZW4KKyAqICAgRGVsZXRlIHRo
ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGNyZWF0ZWQuCisgKgorICogVXNhZ2U6ICA8Zm9yIGNvbW1h
bmQtbGluZT4KKyAqICB1dGltZXMwMyBbLWMgbl0gWy1lXSBbLWZdIFstaSBuXSBbLUkgeF0gWy1w
IHhdIFstdF0KKyAqCXdoZXJlLCAgLWMgbiA6IFJ1biBuIGNvcGllcyBjb25jdXJyZW50bHkuCisg
KgkJLWUgICA6IFR1cm4gb24gZXJybm8gbG9nZ2luZy4KKyAqCQktZiAgIDogVHVybiBvZmYgZnVu
Y3Rpb25hbGl0eSBUZXN0aW5nLgorICoJCS1pIG4gOiBFeGVjdXRlIHRlc3QgbiB0aW1lcy4KKyAq
CQktSSB4IDogRXhlY3V0ZSB0ZXN0IGZvciB4IHNlY29uZHMuCisgKgkJLVAgeCA6IFBhdXNlIGZv
ciB4IHNlY29uZHMgYmV0d2VlbiBpdGVyYXRpb25zLgorICoJCS10ICAgOiBUdXJuIG9uIHN5c2Nh
bGwgdGltaW5nLgorICoKKyAqIEhpc3RvcnkKKyAqCTA3LzIwMDEgSm9obiBHZW9yZ2UKKyAqCQkt
UG9ydGVkCisgKgorICogUmVzdHJpY3Rpb25zOgorICogIFRoaXMgdGVzdCBzaG91bGQgYmUgcnVu
IGJ5IHJvb3Qgb25seS4KKyAqICBub2JvZHkgYW5kIGJpbiBtdXN0IGJlIHZhbGlkIHVzZXJzLgor
ICogCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNs
dWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8d2FpdC5oPgorI2luY2x1ZGUgPHN5
cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisj
aW5jbHVkZSAidGVzdC5oIgorI2luY2x1ZGUgInVzY3Rlc3QuaCIKKworI2RlZmluZSBURU1QX0ZJ
TEUJInRtcF9maWxlIgorI2RlZmluZSBGSUxFX01PREUJU19JUldYVSB8IFNfSVJHUlAgfCBTX0lX
R1JQfCBTX0lST1RIIHwgU19JV09USAorI2RlZmluZSBMVFBVU0VSMQkibm9ib2R5IgorI2RlZmlu
ZSBMVFBVU0VSMgkiYmluIgorCitjaGFyICpUQ0lEPSJ1dGltZXMwMyI7CQkvKiBUZXN0IHByb2dy
YW0gaWRlbnRpZmllci4gICAgKi8KK2ludCBUU1RfVE9UQUw9MTsJCS8qIFRvdGFsIG51bWJlciBv
ZiB0ZXN0IGNhc2VzLiAqLworZXh0ZXJuIGludCBUc3RfY291bnQ7CQkvKiBUZXN0IENhc2UgY291
bnRlciBmb3IgdHN0Xyogcm91dGluZXMgKi8KK3RpbWVfdCBjdXJyX3RpbWU7CQkvKiBjdXJyZW50
IHRpbWUgaW4gc2Vjb25kcyAqLwordGltZV90IHRsb2M7CQkJLyogYXJndW1lbnQgdmFyLiBmb3Ig
dGltZSgpICovCitpbnQgZXhwX2Vub3NbXT17MH07CisKK3N0cnVjdCBwYXNzd2QgKmx0cHVzZXI7
ICAgICAgICAgLyogcGFzc3dvcmQgc3RydWN0IGZvciBsdHB1c2VycyAqLwordWlkX3QgdXNlcl91
aWQ7ICAgICAgICAgICAgICAgICAvKiB1c2VyIGlkIG9mIGx0cHVzZXIgKi8KK2dpZF90IGdyb3Vw
X2dpZDsgICAgICAgICAgICAgICAgLyogZ3JvdXAgaWQgb2YgbHRwdXNlciAqLworaW50IHN0YXR1
czsKKwordm9pZCBzZXR1cCgpOwkJCS8qIE1haW4gc2V0dXAgZnVuY3Rpb24gb2YgdGVzdCAqLwor
dm9pZCBjbGVhbnVwKCk7CQkJLyogY2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIHRlc3QgKi8KKwor
aW50CittYWluKGludCBhYywgY2hhciAqKmF2KQoreworCXN0cnVjdCBzdGF0IHN0YXRfYnVmOwkv
KiBzdHJ1Y3QgYnVmZmVyIHRvIGhvbGQgZmlsZSBpbmZvLiAqLworCWludCBsYzsJCQkvKiBsb29w
IGNvdW50ZXIgKi8KKwljaGFyICptc2c7CQkvKiBtZXNzYWdlIHJldHVybmVkIGZyb20gcGFyc2Vf
b3B0cyAqLworCXRpbWVfdCBtb2RmX3RpbWUsIGFjY2Vzc190aW1lOworCXRpbWVfdCBwcmVzX3Rp
bWU7CS8qIGZpbGUgbW9kaWZpY2F0aW9uL2FjY2Vzcy9wcmVzZW50IHRpbWUgKi8KKwlwaWRfdCBw
aWQ7CisgICAgCisJLyogUGFyc2Ugc3RhbmRhcmQgb3B0aW9ucyBnaXZlbiB0byBydW4gdGhlIHRl
c3QuICovCisJbXNnID0gcGFyc2Vfb3B0cyhhYywgYXYsIChvcHRpb25fdCAqKSBOVUxMLCBOVUxM
KTsKKwlpZiAobXNnICE9IChjaGFyICopIE5VTEwpIHsKKwkJdHN0X2Jya20oVEJST0ssIE5VTEws
ICJPUFRJT04gUEFSU0lORyBFUlJPUiAtICVzIiwgbXNnKTsKKwkJdHN0X2V4aXQoKTsKKwl9CisK
KwkvKiBQZXJmb3JtIGdsb2JhbCBzZXR1cCBmb3IgdGVzdCAqLworCXNldHVwKCk7CisKKwkvKiBz
ZXQgdGhlIGV4cGVjdGVkIGVycm5vcy4uLiAqLworCVRFU1RfRVhQX0VOT1MoZXhwX2Vub3MpOwor
CisJcGlkID0gRk9SS19PUl9WRk9SSygpOworCisJaWYgKHBpZCA9PSAtMSkgeworCQl0c3RfYnJr
bShUQlJPSywgY2xlYW51cCwgImZvcmsoKSBmYWlsZWQiKTsKKwl9IGVsc2UgaWYgKHBpZCA9PSAw
KSB7CisJCWlmICgobHRwdXNlciA9IGdldHB3bmFtKExUUFVTRVIxKSkgPT0gTlVMTCkgeworCQkJ
dHN0X2Jya20oVEJST0ssY2xlYW51cCwiJXMgbm90IGZvdW5kIGluIC9ldGMvcGFzc3dkIiwKKwkJ
CUxUUFVTRVIxKTsKKwkJfQorCisJCS8qIGdldCB1aWQvZ2lkIG9mIHVzZXIgYWNjb3JkaW5nbHkg
Ki8KKwkJdXNlcl91aWQgPSBsdHB1c2VyLT5wd191aWQ7CisKKwkJc2V0ZXVpZCh1c2VyX3VpZCk7
CisKKwkJLyogQ2hlY2sgbG9vcGluZyBzdGF0ZSBpZiAtaSBvcHRpb24gZ2l2ZW4gKi8KKwkJZm9y
IChsYyA9IDA7IFRFU1RfTE9PUElORyhsYyk7IGxjKyspIHsKKwkJCS8qIFJlc2V0IFRzdF9jb3Vu
dCBpbiBjYXNlIHdlIGFyZSBsb29waW5nLiAqLworCQkJVHN0X2NvdW50PTA7CisKKwkJCS8qIAor
CQkJICogSW52b2tlIHV0aW1lcygyKSB0byBzZXQgVEVNUF9GSUxFIGFjY2VzcyBhbmQKKwkJCSAq
IG1vZGlmaWNhdGlvbiB0aW1lcyB0byB0aGUgY3VycmVudCB0aW1lLgorCQkJICovCisJCQlURVNU
KHV0aW1lcyhURU1QX0ZJTEUsIE5VTEwpKTsKKworCQkJLyogY2hlY2sgcmV0dXJuIGNvZGUgb2Yg
dXRpbWVzKDIpICovCisJCQlpZiAoVEVTVF9SRVRVUk4gPT0gLTEpIHsKKwkJCQlURVNUX0VSUk9S
X0xPRyhURVNUX0VSUk5PKTsKKwkJCQl0c3RfcmVzbShURkFJTCwKKwkJCQkJInV0aW1lcyglcykg
RmFpbGVkLCBlcnJubz0lZCA6ICVzIiwKKwkJCQkJVEVNUF9GSUxFLCBURVNUX0VSUk5PLAorCQkJ
CQlzdHJlcnJvcihURVNUX0VSUk5PKSk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogUGVy
Zm9ybSBmdW5jdGlvbmFsIHZlcmlmaWNhdGlvbiBpZiB0ZXN0CisJCQkJICogZXhlY3V0ZWQgd2l0
aG91dCAoLWYpIG9wdGlvbi4KKwkJCQkgKi8KKwkJCQlpZiAoU1REX0ZVTkNUSU9OQUxfVEVTVCkg
eworCQkJCQkvKgorCQkJCQkgKiBTbGVlcCBmb3IgYSBzZWNvbmQgc28gdGhhdCBtb2QgdGltZQor
CQkJCQkgKiBhbmQgYWNjZXNzIHRpbWVzIHdpbGwgYmUgZGlmZmVyZW50CisJCQkJCSAqIGZyb20g
dGhlIGN1cnJlbnQgdGltZS4KKwkJCQkJICovCisJCQkJCXNsZWVwKDIpOworCisJCQkJCS8qCisJ
CQkJCSAqIEdldCB0aGUgY3VycmVudCB0aW1lIG5vdywgYWZ0ZXIKKwkJCQkJICogY2FsbGluZyB1
dGltZXMoMikKKwkJCQkJICovCisJCQkJCWlmICgocHJlc190aW1lID0gdGltZSgmdGxvYykpIDwg
MCkgeworCQkJCQkJdHN0X2Jya20oVEZBSUwsIGNsZWFudXAsCisJCQkJCQkJInRpbWUoKSBmYWls
ZWQgdG8gZ2V0ICIKKwkJCQkJCQkicHJlc2VudCB0aW1lIGFmdGVyICIKKwkJCQkJCQkidXRpbWVz
LCBlcnJvcj0lZCIsCisJCQkJCQkJZXJybm8pOworCQkJCQkJLypOT1RSRUFDSEVEKi8KKwkJCQkJ
fQorCisJCQkJCS8qCisJCQkJCSAqIEdldCB0aGUgbW9kaWZpY2F0aW9uIGFuZCBhY2Nlc3MKKwkJ
CQkJICogdGltZXMgb2YgdGVtcG9yYXJ5IGZpbGUgdXNpbmcKKwkJCQkJICogc3RhdCgyKS4KKwkJ
CQkJICovCisJCQkJCWlmIChzdGF0KFRFTVBfRklMRSwgJnN0YXRfYnVmKSA8IDApIHsKKwkJCQkJ
CXRzdF9icmttKFRGQUlMLCBjbGVhbnVwLAorCQkJCQkJCSJzdGF0KDIpIG9mICVzIGZhaWxlZCwg
IgorCQkJCQkJCSJlcnJvcjolZCIsIFRFTVBfRklMRSwKKwkJCQkJCQlURVNUX0VSUk5PKTsKKwkJ
CQkJCS8qTk9UUkVBQ0hFRCovCisJCQkJCX0KKwkJCQkJbW9kZl90aW1lID0gc3RhdF9idWYuc3Rf
bXRpbWU7CisJCQkJCWFjY2Vzc190aW1lID0gc3RhdF9idWYuc3RfYXRpbWU7CisJCisJCQkJCS8q
IE5vdyBkbyB0aGUgYWN0dWFsIHZlcmlmaWNhdGlvbiAqLworCQkJCQlpZiAobW9kZl90aW1lIDw9
IGN1cnJfdGltZSB8fCBcCisJCQkJCQltb2RmX3RpbWUgPj0gcHJlc190aW1lIHx8IFwKKwkJCQkJ
CWFjY2Vzc190aW1lIDw9IGN1cnJfdGltZSB8fCBcCisJCQkJCQlhY2Nlc3NfdGltZSA+PSBwcmVz
X3RpbWUpIHsKKwkJCQkJCXRzdF9yZXNtKFRGQUlMLCAiJXMgYWNjZXNzIGFuZCAiCisJCQkJCQkJ
Im1vZGlmaWNhdGlvbiB0aW1lcyAiCisJCQkJCQkJIm5vdCBzZXQiLCBURU1QX0ZJTEUpOworCQkJ
CQl9IGVsc2UgeworCQkJCQkJdHN0X3Jlc20oVFBBU1MsICJGdW5jdGlvbmFsaXR5ICIKKwkJCQkJ
CQkib2YgdXRpbWVzKCVzLCBOVUxMKSAiCisJCQkJCQkJInN1Y2Nlc3NmdWwiLAorCQkJCQkJCVRF
TVBfRklMRSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQl0c3RfcmVzbShUUEFTUywgIiVz
IGNhbGwgc3VjY2VlZGVkIiwKKwkJCQkJCQlUQ0lEKTsKKwkJCQl9CisJCQl9CisJCQlUc3RfY291
bnQrKzsJCS8qIGluY3IuIFRFU1RfTE9PUCBjb3VudGVyICovCisJCX0JLyogRW5kIGZvciBURVNU
X0xPT1BJTkcgKi8KKwl9IGVsc2UgeworCQl3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCk7CisJCV9l
eGl0KDApOwkvKgorCQkJCSAqIEV4aXQgaGVyZSBhbmQgbGV0IHRoZSBjaGlsZCBjbGVhbiB1cC4K
KwkJCQkgKiBUaGlzIGFsbG93cyB0aGUgZXJybm8gaW5mb3JtYXRpb24gc2V0CisJCQkJICogYnkg
dGhlIFRFU1RfRVJST1JfTE9HIG1hY3JvIGFuZCB0aGUKKwkJCQkgKiBQQVNTL0ZBSUwgc3RhdHVz
IHRvIGJlIHByZXNlcnZlZCBmb3IKKwkJCQkgKiB1c2UgZHVyaW5nIGNsZWFudXAuCisJCQkJICov
CisJfQorCS8qIENhbGwgY2xlYW51cCgpIHRvIHVuZG8gc2V0dXAgZG9uZSBmb3IgdGhlIHRlc3Qu
ICovCisJY2xlYW51cCgpOworCS8qTk9UUkVBQ0hFRCovCisKKworICByZXR1cm4oMCk7CisKK30J
LyogRW5kIG1haW4gKi8KKworLyoKKyAqIHZvaWQKKyAqIHNldHVwKCkgLSBwZXJmb3JtcyBhbGwg
T05FIFRJTUUgc2V0dXAgZm9yIHRoaXMgdGVzdC4KKyAqICBDcmVhdGUgYSB0ZW1wb3JhcnkgZGly
ZWN0b3J5IGFuZCBjaGFuZ2UgZGlyZWN0b3J5IHRvIGl0LgorICogIENyZWF0ZSBhIHRlc3QgZmls
ZSB1bmRlciB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBjbG9zZSBpdAorICogIENoYW5nZSB0aGUg
b3duZXJzaGlwIG9mIHRlc3RmaWxlIHRvIHRoYXQgb2YgImJpbiIgdXNlci4KKyAqICBSZWNvcmQg
dGhlIGN1cnJlbnQgdGltZS4KKyAqLwordm9pZCAKK3NldHVwKCkKK3sKKwlpbnQgZmlsZGVzOwkJ
CS8qIGZpbGUgaGFuZGxlIGZvciB0ZW1wIGZpbGUgKi8KKwljaGFyICp0bXBkID0gTlVMTDsKKwor
CS8qIGNhcHR1cmUgc2lnbmFscyAqLworCXRzdF9zaWcoRk9SSywgREVGX0hBTkRMRVIsIGNsZWFu
dXApOworCisJLyogQ2hlY2sgdGhhdCB0aGUgdGVzdCBwcm9jZXNzIGlkIGlzIG5vdCBzdXBlci9y
b290ICAqLworCWlmIChnZXRldWlkKCkgIT0gMCkgeworCQl0c3RfYnJrbShUQlJPSywgTlVMTCwg
Ik11c3QgYmUgcm9vdCBmb3IgdGhpcyB0ZXN0ISIpOworCQl0c3RfZXhpdCgpOworCX0KKworCS8q
IFBhdXNlIGlmIHRoYXQgb3B0aW9uIHdhcyBzcGVjaWZpZWQKKwkgKiBURVNUX1BBVVNFIGNvbnRh
aW5zIHRoZSBjb2RlIHRvIGZvcmsgdGhlIHRlc3Qgd2l0aCB0aGUgLWkgb3B0aW9uLgorCSAqIFlv
dSB3YW50IHRvIG1ha2Ugc3VyZSB5b3UgZG8gdGhpcyBiZWZvcmUgeW91IGNyZWF0ZSB5b3VyIHRl
bXBvcmFyeQorCSAqIGRpcmVjdG9yeS4KKwkgKi8KKwlURVNUX1BBVVNFOworCisJLyogbWFrZSBh
IHRlbXAgZGlyZWN0b3J5IGFuZCBjZCB0byBpdCAqLworCXRzdF90bXBkaXIoKTsKKworICAgICAg
ICAvKiBnZXQgdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgKi8KKyAgICAgICAg
aWYgKCh0bXBkID0gZ2V0Y3dkKHRtcGQsIDApKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAg
dHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiZ2V0Y3dkIGZhaWxlZCIpOworICAgICAgICB9CisK
KwkvKiBDcmVhdCBhIHRlbXBvcmFyeSBmaWxlIHVuZGVyIGFib3ZlIGRpcmVjdG9yeSAqLworCWlm
ICgoZmlsZGVzID0gY3JlYXQoVEVNUF9GSUxFLCBGSUxFX01PREUpKSA9PSAtMSkgeworCQl0c3Rf
YnJrbShUQlJPSywgY2xlYW51cCwKKwkJCSAiY3JlYXQoJXMsICUjbykgRmFpbGVkLCBlcnJubz0l
ZCA6JXMiLAorCQkJIFRFTVBfRklMRSwgRklMRV9NT0RFLCBlcnJubywgc3RyZXJyb3IoZXJybm8p
KTsKKwkJLypOT1RSRUFDSEVEKi8KKwl9CisKKwkvKiBDbG9zZSB0aGUgdGVtcG9yYXJ5IGZpbGUg
Y3JlYXRlZCAqLworCWlmIChjbG9zZShmaWxkZXMpIDwgMCkgeworCQl0c3RfYnJrbShUQlJPSywg
Y2xlYW51cCwKKwkJCSAiY2xvc2UoJXMpIEZhaWxlZCwgZXJybm89JWQgOiAlczoiLAorCQkJIFRF
TVBfRklMRSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisJCS8qTk9UUkVBQ0hFRCovCisJfQor
CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCBzcGVjaWZpZWQgTW9kZSBwZXJtaXNzaW9ucyBzZXQg
YXMKKwkgKiB1bWFzayB2YWx1ZSBtYXkgYmUgZGlmZmVyZW50LgorCSAqLworCWlmIChjaG1vZChU
RU1QX0ZJTEUsIEZJTEVfTU9ERSkgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLAor
CQkJICJjaG1vZCglcykgRmFpbGVkLCBlcnJubz0lZCA6ICVzOiIsCisJCQkgVEVNUF9GSUxFLCBl
cnJubywgc3RyZXJyb3IoZXJybm8pKTsKKwkJLypOT1RSRUFDSEVEKi8KKwl9CisKKyAgICAgICAg
aWYgKGNobW9kKHRtcGQsIDA3MTEpICE9IDApIHsKKyAgICAgICAgICAgICAgICB0c3RfYnJrbShU
QlJPSywgY2xlYW51cCwgImNobW9kKCkgZmFpbGVkIik7CisgICAgICAgIH0KKworCWlmICgobHRw
dXNlciA9IGdldHB3bmFtKExUUFVTRVIyKSkgPT0gTlVMTCkgeworCQl0c3RfYnJrbShUQlJPSywg
Y2xlYW51cCwgIiVzIG5vdCBmb3VuZCBpbiAvZXRjL3Bhc3N3ZCIsCisJCQlMVFBVU0VSMik7CisJ
CS8qTk9UUkVBQ0hFRCovCisJfQorCisJLyogZ2V0IHVpZC9naWQgb2YgdXNlciBhY2NvcmRpbmds
eSAqLworCXVzZXJfdWlkID0gbHRwdXNlci0+cHdfdWlkOworCWdyb3VwX2dpZCA9IGx0cHVzZXIt
PnB3X2dpZDsKKworCSAvKgorICAgICAgICAgKiBDaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiB0ZXN0
IGRpcmVjdG9yeS9maWxlIHNwZWNpZmllZCBieQorICAgICAgICAgKiBwYXRobmFtZSB0byB0aGF0
IG9mIHVzZXJfdWlkIGFuZCBncm91cF9naWQuCisgICAgICAgICAqLworICAgICAgICBpZiAoY2hv
d24oVEVNUF9GSUxFLCB1c2VyX3VpZCwgZ3JvdXBfZ2lkKSA8IDApIHsKKwkJdHN0X2Jya20oVEJS
T0ssIGNsZWFudXAsICJjaG93bigpIG9mICVzIGZhaWxlZCwgZXJyb3IgJWQiLAorCQkJVEVNUF9G
SUxFLCBlcnJubyk7CisJCS8qTk9UUkVBQ0hFRCovCisJfQorCQkJCisJLyogR2V0IHRoZSBjdXJy
ZW50IHRpbWUgKi8KKwlpZiAoKGN1cnJfdGltZSA9IHRpbWUoJnRsb2MpKSA8IDApIHsKKwkJdHN0
X2Jya20oVEJST0ssIGNsZWFudXAsCisJCQkgInRpbWUoKSBmYWlsZWQgdG8gZ2V0IGN1cnJlbnQg
dGltZSwgZXJybm89JWQiLCBlcnJubyk7CisJCS8qTk9UUkVBQ0hFRCovCisJfQorCisJLyoKKwkg
KiBTbGVlcCBmb3IgYSBzZWNvbmQgc28gdGhhdCBtb2QgdGltZSBhbmQgYWNjZXNzIHRpbWVzIHdp
bGwgYmUKKwkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCB0aW1lCisJICovCisJc2xlZXAo
Mik7CS8qIHNsZWVwKDEpIG9uIElBNjQgc29tZXRpbWVzIHNsZWVwcyA8IDEgc2VjISEgKi8KKwkJ
Cit9CS8qIEVuZCBzZXR1cCgpICovCisKKy8qCisgKiB2b2lkCisgKiBjbGVhbnVwKCkgLSBwZXJm
b3JtcyBhbGwgT05FIFRJTUUgY2xlYW51cCBmb3IgdGhpcyB0ZXN0IGF0CisgKiAgICAgICAgICAg
ICBjb21wbGV0aW9uIG9yIHByZW1hdHVyZSBleGl0LgorICogIFJlbW92ZSB0aGUgdGVzdCBkaXJl
Y3RvcnkgYW5kIHRlc3RmaWxlIGNyZWF0ZWQgaW4gdGhlIHNldHVwLgorICovCit2b2lkIAorY2xl
YW51cCgpCit7CisJc2V0ZXVpZCgwKTsKKwkvKgorCSAqIHByaW50IHRpbWluZyBzdGF0cyBpZiB0
aGF0IG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorCSAqIHByaW50IGVycm5vIGxvZyBpZiB0aGF0IG9w
dGlvbiB3YXMgc3BlY2lmaWVkLgorCSAqLworCVRFU1RfQ0xFQU5VUDsKKworCS8qIFJlbW92ZSB0
bXAgZGlyIGFuZCBhbGwgZmlsZXMgaW4gaXQgKi8KKwl0c3Rfcm1kaXIoKTsKKworCS8qIGV4aXQg
d2l0aCByZXR1cm4gY29kZSBhcHByb3ByaWF0ZSBmb3IgcmVzdWx0cyAqLworCXRzdF9leGl0KCk7
Cit9CS8qIEVuZCBjbGVhbnVwKCkgKi8KZGlmZiAtcnVOIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcv
dGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRpbWVzMDQuYyBsdHAtZnVsbC0yMDA2
MTEyMS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy91dGltZXMwNC5jCi0tLSBsdHAt
ZnVsbC0yMDA2MTEyMS1vcmlnL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1l
czA0LmMJV2VkIERlYyAzMSAxODowMDowMCAxOTY5CisrKyBsdHAtZnVsbC0yMDA2MTEyMS90ZXN0
Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy91dGltZXMwNC5jCVRodSBEZWMgMTQgMjA6MTY6
NDAgMjAwNgpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqCisgKiAgIENvcHlyaWdodCAoYykgSW50
ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDEKKyAqCisgKiAgIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUKKyAqICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwg
NTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAq
LworCisvKgorICogVGVzdCBOYW1lOiB1dGltZXMwNAorICoKKyAqIFRlc3QgRGVzY3JpcHRpb246
CisgKiAgVmVyaWZ5IHRoYXQgdGhlIHN5c3RlbSBjYWxsIHV0aW1lcygpIHN1Y2Nlc3NmdWxseSBz
ZXRzIHRoZSBtb2RpZmljYXRpb24KKyAqICBhbmQgYWNjZXNzIHRpbWVzIG9mIGEgZmlsZSB0byB0
aGUgdGltZSBzcGVjaWZpZWQgYnkgdGltZXMgYXJndW1lbnQsIGlmCisgKiAgdGhlIHRpbWVzIGFy
Z3VtZW50IGlzIG5vdCBudWxsLCBhbmQgdGhlIHVzZXIgSUQgb2YgdGhlIHByb2Nlc3MgaXMgInJv
b3QiLgorICoKKyAqIEV4cGVjdGVkIFJlc3VsdDoKKyAqICAgdXRpbWVzIHN1Y2NlZWRzIHJldHVy
bmluZyB6ZXJvIGFuZCBzZXRzIHRoZSBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiAKKyAqICAgdGlt
ZXMgb2YgdGhlIGZpbGUgdG8gdGhhdCBzcGVjaWZpZWQgYnkgdGhlIHRpbWVzIGFyZ3VtZW50Lgor
ICoKKyAqIEFsZ29yaXRobToKKyAqICBTZXR1cDoKKyAqICAgU2V0dXAgc2lnbmFsIGhhbmRsaW5n
LgorICogICBDcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAqICAgUGF1c2UgZm9yIFNJR1VT
UjEgaWYgb3B0aW9uIHNwZWNpZmllZC4KKyAqCisgKiAgVGVzdDoKKyAqICAgTG9vcCBpZiB0aGUg
cHJvcGVyIG9wdGlvbnMgYXJlIGdpdmVuLgorICogICBFeGVjdXRlIHN5c3RlbSBjYWxsCisgKiAg
IENoZWNrIHJldHVybiBjb2RlLCBpZiBzeXN0ZW0gY2FsbCBmYWlsZWQgKHJldHVybj0tMSkKKyAq
ICAgCUxvZyB0aGUgZXJybm8gYW5kIElzc3VlIGEgRkFJTCBtZXNzYWdlLgorICogICBPdGhlcndp
c2UsCisgKiAgIAlWZXJpZnkgdGhlIEZ1bmN0aW9uYWxpdHkgb2Ygc3lzdGVtIGNhbGwJCisgKiAg
ICAgIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgIAlJc3N1ZSBGdW5jdGlvbmFsaXR5LVBhc3MgbWVz
c2FnZS4KKyAqICAgICAgT3RoZXJ3aXNlLAorICoJCUlzc3VlIEZ1bmN0aW9uYWxpdHktRmFpbCBt
ZXNzYWdlLgorICogIENsZWFudXA6CisgKiAgIFByaW50IGVycm5vIGxvZyBhbmQvb3IgdGltaW5n
IHN0YXRzIGlmIG9wdGlvbnMgZ2l2ZW4KKyAqICAgRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZGlyZWN0
b3J5IGNyZWF0ZWQuCisgKgorICogVXNhZ2U6ICA8Zm9yIGNvbW1hbmQtbGluZT4KKyAqICB1dGlt
ZXMwNCBbLWMgbl0gWy1lXSBbLWZdIFstaSBuXSBbLUkgeF0gWy1wIHhdIFstdF0KKyAqCXdoZXJl
LCAgLWMgbiA6IFJ1biBuIGNvcGllcyBjb25jdXJyZW50bHkuCisgKgkJLWUgICA6IFR1cm4gb24g
ZXJybm8gbG9nZ2luZy4KKyAqIAkJLWYgICA6IFR1cm4gb2ZmIGZ1bmN0aW9uYWxpdHkgVGVzdGlu
Zy4KKyAqCQktaSBuIDogRXhlY3V0ZSB0ZXN0IG4gdGltZXMuCisgKgkJLUkgeCA6IEV4ZWN1dGUg
dGVzdCBmb3IgeCBzZWNvbmRzLgorICoJCS1QIHggOiBQYXVzZSBmb3IgeCBzZWNvbmRzIGJldHdl
ZW4gaXRlcmF0aW9ucy4KKyAqCQktdCAgIDogVHVybiBvbiBzeXNjYWxsIHRpbWluZy4KKyAqCisg
KiBIaXN0b3J5CisgKgkwNy8yMDAxIEpvaG4gR2VvcmdlCisgKgkJLVBvcnRlZAorICoKKyAqIFJl
c3RyaWN0aW9uczoKKyAqICBUaGlzIHRlc3Qgc2hvdWxkIGJlIHJ1biBieSAnc3VwZXItdXNlcicg
KHJvb3QpIG9ubHkuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j
bHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpbmNsdWRl
ICJ0ZXN0LmgiCisjaW5jbHVkZSAidXNjdGVzdC5oIgorCisjZGVmaW5lIFRFTVBfRklMRQkidG1w
X2ZpbGUiCisjZGVmaW5lIEZJTEVfTU9ERQlTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgKKyNk
ZWZpbmUgTkVXX1RJTUUJMTAwMDAKKyNkZWZpbmUgTkVXX1RJTUVfVVNFQwkxMDAKKworY2hhciAq
VENJRD0idXRpbWVzMDQiOwkJLyogVGVzdCBwcm9ncmFtIGlkZW50aWZpZXIuICAgICovCitpbnQg
VFNUX1RPVEFMPTE7CQkvKiBUb3RhbCBudW1iZXIgb2YgdGVzdCBjYXNlcy4gKi8KK2V4dGVybiBp
bnQgVHN0X2NvdW50OwkJLyogVGVzdCBDYXNlIGNvdW50ZXIgZm9yIHRzdF8qIHJvdXRpbmVzICov
CitpbnQgZXhwX2Vub3NbXT17MH07CitzdHJ1Y3QgdGltZXZhbCB0aW1lc1syXTsJLyogc3RydWN0
LiBidWZmZXIgZm9yIHV0aW1lcygpICovCisKK3ZvaWQgc2V0dXAoKTsJCQkvKiBNYWluIHNldHVw
IGZ1bmN0aW9uIG9mIHRlc3QgKi8KK3ZvaWQgY2xlYW51cCgpOwkJCS8qIGNsZWFudXAgZnVuY3Rp
b24gZm9yIHRoZSB0ZXN0ICovCisKK2ludAorbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwlz
dHJ1Y3Qgc3RhdCBzdGF0X2J1ZjsJLyogc3RydWN0IGJ1ZmZlciB0byBob2xkIGZpbGUgaW5mby4g
Ki8KKwlpbnQgbGM7CQkJLyogbG9vcCBjb3VudGVyICovCisJY2hhciAqbXNnOwkJLyogbWVzc2Fn
ZSByZXR1cm5lZCBmcm9tIHBhcnNlX29wdHMgKi8KKwl0aW1lX3QgbW9kZl90aW1lLCBhY2Nlc3Nf
dGltZTsKKwlsb25nIG1vZGZfdGltZV91c2VjLCBhY2Nlc3NfdGltZV91c2VjOworCQkJCS8qIGZp
bGUgbW9kaWZpY2F0aW9uL2FjY2VzcyB0aW1lICovCisgICAgCisJLyogUGFyc2Ugc3RhbmRhcmQg
b3B0aW9ucyBnaXZlbiB0byBydW4gdGhlIHRlc3QuICovCisJbXNnID0gcGFyc2Vfb3B0cyhhYywg
YXYsIChvcHRpb25fdCAqKSBOVUxMLCBOVUxMKTsKKwlpZiAobXNnICE9IChjaGFyICopIE5VTEwp
IHsKKwkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJPUFRJT04gUEFSU0lORyBFUlJPUiAtICVzIiwg
bXNnKTsKKwkJdHN0X2V4aXQoKTsKKwl9CisKKwkvKiBQZXJmb3JtIGdsb2JhbCBzZXR1cCBmb3Ig
dGVzdCAqLworCXNldHVwKCk7CisKKwkvKiBzZXQgdGhlIGV4cGVjdGVkIGVycm5vcy4uLiAqLwor
CVRFU1RfRVhQX0VOT1MoZXhwX2Vub3MpOworCisJLyogQ2hlY2sgbG9vcGluZyBzdGF0ZSBpZiAt
aSBvcHRpb24gZ2l2ZW4gKi8KKwlmb3IgKGxjID0gMDsgVEVTVF9MT09QSU5HKGxjKTsgbGMrKykg
eworCQkvKiBSZXNldCBUc3RfY291bnQgaW4gY2FzZSB3ZSBhcmUgbG9vcGluZy4gKi8KKwkJVHN0
X2NvdW50PTA7CisKKwkJLyogCisJCSAqIEludm9rZSB1dGltZXMoMikgdG8gc2V0IFRFTVBfRklM
RSBhY2Nlc3MgYW5kCisJCSAqIG1vZGlmaWNhdGlvbiB0aW1lcyB0byB0aGF0IHNwZWNpZmllZCBi
eQorCQkgKiB0aW1lcyBhcmd1bWVudC4KKwkJICovCisJCVRFU1QodXRpbWVzKFRFTVBfRklMRSwg
dGltZXMpKTsKKworCQkvKiBjaGVjayByZXR1cm4gY29kZSBvZiB1dGltZXMoMikgKi8KKwkJaWYg
KFRFU1RfUkVUVVJOID09IC0xKSB7CisJCQlURVNUX0VSUk9SX0xPRyhURVNUX0VSUk5PKTsKKwkJ
CXRzdF9yZXNtKFRGQUlMLCAidXRpbWVzKCVzKSBGYWlsZWQsIGVycm5vPSVkIDogJXMiLAorCQkJ
CSBURU1QX0ZJTEUsIFRFU1RfRVJSTk8sIHN0cmVycm9yKFRFU1RfRVJSTk8pKTsKKwkJfSBlbHNl
IHsKKwkJCS8qCisJCQkgKiBQZXJmb3JtIGZ1bmN0aW9uYWwgdmVyaWZpY2F0aW9uIGlmIHRlc3QK
KwkJCSAqIGV4ZWN1dGVkIHdpdGhvdXQgKC1mKSBvcHRpb24uCisJCQkgKi8KKwkJCWlmIChTVERf
RlVOQ1RJT05BTF9URVNUKSB7CisJCQkJLyoKKwkJCQkgKiBHZXQgdGhlIG1vZGlmaWNhdGlvbiBh
bmQgYWNjZXNzIHRpbWVzIG9mCisJCQkJICogdGVtcG9yYXJ5IGZpbGUgdXNpbmcgc3RhdCgyKS4K
KwkJCQkgKi8KKwkJCQlpZiAoc3RhdChURU1QX0ZJTEUsICZzdGF0X2J1ZikgPCAwKSB7CisJCQkJ
CXRzdF9icmttKFRGQUlMLCBjbGVhbnVwLAorCQkJCQkJInN0YXQoMikgb2YgJXMgZmFpbGVkLCAi
CisJCQkJCQkiZXJyb3I6JWQiLCBURU1QX0ZJTEUsCisJCQkJCQlURVNUX0VSUk5PKTsKKwkJCQkJ
LypOT1RSRUFDSEVEKi8KKwkJCQl9CisJCQkJbW9kZl90aW1lID0gc3RhdF9idWYuc3RfbXRpbWU7
CisJCQkJbW9kZl90aW1lX3VzZWMgPSBzdGF0X2J1Zi5zdF9tdGltLnR2X25zZWMgLyAxMDAwOwor
CQkJCWFjY2Vzc190aW1lID0gc3RhdF9idWYuc3RfYXRpbWU7CisJCQkJYWNjZXNzX3RpbWVfdXNl
YyA9IHN0YXRfYnVmLnN0X2F0aW0udHZfbnNlYyAvIDEwMDA7CisKKwkJCQkvKiBOb3cgZG8gdGhl
IGFjdHVhbCB2ZXJpZmljYXRpb24gKi8KKwkJCQlpZiAoKG1vZGZfdGltZSAhPSBORVdfVElNRSkg
fHwgXAorCQkJCSAgICAoYWNjZXNzX3RpbWUgIT0gTkVXX1RJTUUpKSB7CisJCQkJCXRzdF9yZXNt
KFRGQUlMLCAiJXMgYWNjZXNzIGFuZCAiCisJCQkJCQkibW9kaWZpY2F0aW9uIHRpbWVzIG5vdCBz
ZXQiLAorCQkJCQkJVEVNUF9GSUxFKTsKKwkJCQl9IGVsc2UgaWYgKChtb2RmX3RpbWVfdXNlYyAh
PSBORVdfVElNRV9VU0VDKSB8fCBcCisJCQkJICAgIChhY2Nlc3NfdGltZV91c2VjICE9IE5FV19U
SU1FX1VTRUMpKSB7CisJCQkJCXRzdF9yZXNtKFRGQUlMLCAiJXMgYWNjZXNzIGFuZCAiCisJCQkJ
CQkibW9kaWZpY2F0aW9uIHRpbWVzIHVzZWMgbm90IHNldCIsCisJCQkJCQlURU1QX0ZJTEUpOwor
CQkJCX0gZWxzZSB7CisJCQkJCXRzdF9yZXNtKFRQQVNTLCAiRnVuY3Rpb25hbGl0eSBvZiAiCisJ
CQkJCQkidXRpbWVzKCVzLCB0aW1lcykgc3VjY2Vzc2Z1bCIsCisJCQkJCQlURU1QX0ZJTEUpOwor
CQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdHN0X3Jlc20oVFBBU1MsICIlcyBjYWxsIHN1Y2NlZWRl
ZCIsIFRDSUQpOworCQkJfQorCQl9CisJCVRzdF9jb3VudCsrOwkJLyogaW5jciBURVNUX0xPT1Ag
Y291bnRlciAqLworCX0JLyogRW5kIGZvciBURVNUX0xPT1BJTkcgKi8KKworCS8qIENhbGwgY2xl
YW51cCgpIHRvIHVuZG8gc2V0dXAgZG9uZSBmb3IgdGhlIHRlc3QuICovCisJY2xlYW51cCgpOwor
CS8qTk9UUkVBQ0hFRCovCisKKworICByZXR1cm4oMCk7CisKK30JLyogRW5kIG1haW4gKi8KKwor
LyoKKyAqIHZvaWQKKyAqIHNldHVwKCkgLSBwZXJmb3JtcyBhbGwgT05FIFRJTUUgc2V0dXAgZm9y
IHRoaXMgdGVzdC4KKyAqICBDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBjaGFuZ2Ug
ZGlyZWN0b3J5IHRvIGl0LgorICogIENyZWF0ZSBhIHRlc3QgZmlsZSB1bmRlciB0ZW1wb3Jhcnkg
ZGlyZWN0b3J5IGFuZCBjbG9zZSBpdAorICovCit2b2lkIAorc2V0dXAoKQoreworCWludCBmaWxk
ZXM7CQkJLyogZmlsZSBoYW5kbGUgZm9yIHRlbXAgZmlsZSAqLworCisJLyogY2FwdHVyZSBzaWdu
YWxzICovCisJdHN0X3NpZyhOT0ZPUkssIERFRl9IQU5ETEVSLCBjbGVhbnVwKTsKKworCS8qIENo
ZWNrIHRoYXQgdGhlIHRlc3QgcHJvY2VzcyBpZCBpcyBzdXBlci9yb290ICAqLworCWlmIChnZXRl
dWlkKCkgIT0gMCkgeworCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIk11c3QgYmUgc3VwZXIvcm9v
dCBmb3IgdGhpcyB0ZXN0ISIpOworCQl0c3RfZXhpdCgpOworCX0KKworCS8qIFBhdXNlIGlmIHRo
YXQgb3B0aW9uIHdhcyBzcGVjaWZpZWQgKi8KKwlURVNUX1BBVVNFOworCisJLyogbWFrZSBhIHRl
bXAgZGlyZWN0b3J5IGFuZCBjZCB0byBpdCAqLworCXRzdF90bXBkaXIoKTsKKworCS8qIENyZWF0
IGEgdGVtcG9yYXJ5IGZpbGUgdW5kZXIgYWJvdmUgZGlyZWN0b3J5ICovCisJaWYgKChmaWxkZXMg
PSBjcmVhdChURU1QX0ZJTEUsIEZJTEVfTU9ERSkpID09IC0xKSB7CisJCXRzdF9icmttKFRCUk9L
LCBjbGVhbnVwLAorCQkJICJjcmVhdCglcywgJSNvKSBGYWlsZWQsIGVycm5vPSVkIDolcyIsCisJ
CQkgVEVNUF9GSUxFLCBGSUxFX01PREUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworCX0KKwor
CS8qIENsb3NlIHRoZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkICovCisJaWYgKGNsb3NlKGZpbGRl
cykgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLAorCQkJICJjbG9zZSglcykgRmFp
bGVkLCBlcnJubz0lZCA6ICVzOiIsCisJCQkgVEVNUF9GSUxFLCBlcnJubywgc3RyZXJyb3IoZXJy
bm8pKTsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBtb2RpZmljYXRpb24gYW5kIGFjY2VzcyB0
aW1lIGluIHRoZSB0aW1lcyBhcmcgKi8KKwl0aW1lc1swXS50dl9zZWMgPSBORVdfVElNRTsKKwl0
aW1lc1swXS50dl91c2VjID0gTkVXX1RJTUVfVVNFQzsKKwl0aW1lc1sxXS50dl9zZWMgPSBORVdf
VElNRTsKKwl0aW1lc1sxXS50dl91c2VjID0gTkVXX1RJTUVfVVNFQzsKKworfQkvKiBFbmQgc2V0
dXAoKSAqLworCisvKgorICogdm9pZAorICogY2xlYW51cCgpIC0gcGVyZm9ybXMgYWxsIE9ORSBU
SU1FIGNsZWFudXAgZm9yIHRoaXMgdGVzdCBhdAorICogICAgICAgICAgICAgY29tcGxldGlvbiBv
ciBwcmVtYXR1cmUgZXhpdC4KKyAqICBSZW1vdmUgdGhlIHRlc3QgZGlyZWN0b3J5IGFuZCB0ZXN0
ZmlsZSBjcmVhdGVkIGluIHRoZSBzZXR1cC4KKyAqLwordm9pZCAKK2NsZWFudXAoKQoreworCS8q
CisJICogcHJpbnQgdGltaW5nIHN0YXRzIGlmIHRoYXQgb3B0aW9uIHdhcyBzcGVjaWZpZWQuCisJ
ICogcHJpbnQgZXJybm8gbG9nIGlmIHRoYXQgb3B0aW9uIHdhcyBzcGVjaWZpZWQuCisJICovCisJ
VEVTVF9DTEVBTlVQOworCisJLyogUmVtb3ZlIHRtcCBkaXIgYW5kIGFsbCBmaWxlcyBpbiBpdCAq
LworCXRzdF9ybWRpcigpOworCisJLyogZXhpdCB3aXRoIHJldHVybiBjb2RlIGFwcHJvcHJpYXRl
IGZvciByZXN1bHRzICovCisJdHN0X2V4aXQoKTsKK30JLyogRW5kIGNsZWFudXAoKSAqLwpkaWZm
IC1ydU4gbHRwLWZ1bGwtMjAwNjExMjEtb3JpZy90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0
aW1lcy91dGltZXMwNS5jIGx0cC1mdWxsLTIwMDYxMTIxL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2Fs
bHMvdXRpbWVzL3V0aW1lczA1LmMKLS0tIGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcvdGVzdGNhc2Vz
L2tlcm5lbC9zeXNjYWxscy91dGltZXMvdXRpbWVzMDUuYwlXZWQgRGVjIDMxIDE4OjAwOjAwIDE5
NjkKKysrIGx0cC1mdWxsLTIwMDYxMTIxL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvdXRpbWVz
L3V0aW1lczA1LmMJVGh1IERlYyAxNCAyMDoxODowMiAyMDA2CkBAIC0wLDAgKzEsMjc0IEBACisv
KgorICoKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVz
ICBDb3JwLiwgMjAwMQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg
KiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogICB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwg
Qm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBUZXN0IE5hbWU6IHV0aW1l
czA1CisgKgorICogVGVzdCBEZXNjcmlwdGlvbjoKKyAqICBWZXJpZnkgdGhhdCB0aGUgc3lzdGVt
IGNhbGwgdXRpbWVzKCkgc3VjY2Vzc2Z1bGx5IHNldHMgdGhlIG1vZGlmaWNhdGlvbgorICogIGFu
ZCBhY2Nlc3MgdGltZXMgb2YgYSBmaWxlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIHRp
bWVzIGFyZ3VtZW50CisgKiAgdW5kZXIgdGhlIGZvbGxvd2luZyBjb25zdHJhaW50cywKKyAqCQkt
IFRoZSB0aW1lcyBhcmd1bWVudCBpcyBub3QgbnVsbCwKKyAqCQktIFRoZSB1c2VyIElEIG9mIHRo
ZSBwcm9jZXNzIGlzIG5vdCAicm9vdCIuCisgKgkJLSBUaGUgZmlsZSBpcyBvd25lZCBieSB0aGUg
dXNlciBJRCBvZiB0aGUgcHJvY2Vzcy4KKyAqCisgKiBFeHBlY3RlZCBSZXN1bHQ6CisgKiAgdXRp
bWVzIHN1Y2NlZWRzIHJldHVybmluZyB6ZXJvIGFuZCBzZXRzIHRoZSBhY2Nlc3MgYW5kIG1vZGlm
aWNhdGlvbiAKKyAqICB0aW1lcyBvZiB0aGUgZmlsZSB0byB0aGF0IHNwZWNpZmllZCBieSB0aGUg
dGltZXMgYXJndW1lbnQuCisgKgorICogQWxnb3JpdGhtOgorICogIFNldHVwOgorICogICBTZXR1
cCBzaWduYWwgaGFuZGxpbmcuCisgKiAgIENyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgorICog
ICBQYXVzZSBmb3IgU0lHVVNSMSBpZiBvcHRpb24gc3BlY2lmaWVkLgorICoKKyAqICBUZXN0Ogor
ICogICBMb29wIGlmIHRoZSBwcm9wZXIgb3B0aW9ucyBhcmUgZ2l2ZW4uCisgKiAgIEV4ZWN1dGUg
c3lzdGVtIGNhbGwKKyAqICAgQ2hlY2sgcmV0dXJuIGNvZGUsIGlmIHN5c3RlbSBjYWxsIGZhaWxl
ZCAocmV0dXJuPS0xKQorICogICAJTG9nIHRoZSBlcnJubyBhbmQgSXNzdWUgYSBGQUlMIG1lc3Nh
Z2UuCisgKiAgIE90aGVyd2lzZSwKKyAqICAgCVZlcmlmeSB0aGUgRnVuY3Rpb25hbGl0eSBvZiBz
eXN0ZW0gY2FsbAkKKyAqICAgICAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgCUlzc3VlIEZ1bmN0
aW9uYWxpdHktUGFzcyBtZXNzYWdlLgorICogICAgICBPdGhlcndpc2UsCisgKgkJSXNzdWUgRnVu
Y3Rpb25hbGl0eS1GYWlsIG1lc3NhZ2UuCisgKiAgQ2xlYW51cDoKKyAqICAgUHJpbnQgZXJybm8g
bG9nIGFuZC9vciB0aW1pbmcgc3RhdHMgaWYgb3B0aW9ucyBnaXZlbgorICogICBEZWxldGUgdGhl
IHRlbXBvcmFyeSBkaXJlY3RvcnkgY3JlYXRlZC4KKyAqCisgKiBVc2FnZTogIDxmb3IgY29tbWFu
ZC1saW5lPgorICogIHV0aW1lczA1IFstYyBuXSBbLWVdIFstZl0gWy1pIG5dIFstSSB4XSBbLXAg
eF0gWy10XQorICoJCXdoZXJlLAktYyBuIDogUnVuIG4gY29waWVzIGNvbmN1cnJlbnRseS4KKyAq
CQkJLWUgICA6IFR1cm4gb24gZXJybm8gbG9nZ2luZy4KKyAqCQkJLWYgICA6IFR1cm4gb2ZmIGZ1
bmN0aW9uYWxpdHkgVGVzdGluZy4KKyAqCQkJLWkgbiA6IEV4ZWN1dGUgdGVzdCBuIHRpbWVzLgor
ICoJCQktSSB4IDogRXhlY3V0ZSB0ZXN0IGZvciB4IHNlY29uZHMuCisgKgkJCS1QIHggOiBQYXVz
ZSBmb3IgeCBzZWNvbmRzIGJldHdlZW4gaXRlcmF0aW9ucy4KKyAqCQkJLXQgICA6IFR1cm4gb24g
c3lzY2FsbCB0aW1pbmcuCisgKgorICogSGlzdG9yeQorICoJMDcvMjAwMSBKb2huIEdlb3JnZQor
ICoJCS1Qb3J0ZWQKKyAqCisgKiBSZXN0cmljdGlvbnM6CisgKgorICovCisKKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5o
PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8
c2lnbmFsLmg+CisjaW5jbHVkZSA8cHdkLmg+CisKKyNpbmNsdWRlICJ0ZXN0LmgiCisjaW5jbHVk
ZSAidXNjdGVzdC5oIgorCisjZGVmaW5lIFRFTVBfRklMRQkidG1wX2ZpbGUiCisjZGVmaW5lIEZJ
TEVfTU9ERQlTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgKKyNkZWZpbmUgTkVXX1RJTUUJMTAw
MDAKKyNkZWZpbmUgTkVXX1RJTUVfVVNFQwkxMDAKKworY2hhciAqVENJRD0idXRpbWVzMDUiOwkJ
LyogVGVzdCBwcm9ncmFtIGlkZW50aWZpZXIuICAgICovCitpbnQgVFNUX1RPVEFMPTE7CQkvKiBU
b3RhbCBudW1iZXIgb2YgdGVzdCBjYXNlcy4gKi8KK2V4dGVybiBpbnQgVHN0X2NvdW50OwkJLyog
VGVzdCBDYXNlIGNvdW50ZXIgZm9yIHRzdF8qIHJvdXRpbmVzICovCitpbnQgZXhwX2Vub3NbXT17
MH07CitjaGFyIG5vYm9keV91aWRbXSA9ICJub2JvZHkiOworc3RydWN0IHBhc3N3ZCAqbHRwdXNl
cjsKKworCitzdHJ1Y3QgdGltZXZhbCB0aW1lc1syXTsJLyogc3RydWN0LiBidWZmZXIgZm9yIHV0
aW1lcygpICovCisKK3ZvaWQgc2V0dXAoKTsJCQkvKiBNYWluIHNldHVwIGZ1bmN0aW9uIG9mIHRl
c3QgKi8KK3ZvaWQgY2xlYW51cCgpOwkJCS8qIGNsZWFudXAgZnVuY3Rpb24gZm9yIHRoZSB0ZXN0
ICovCisKK2ludAorbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdGF0
X2J1ZjsJLyogc3RydWN0IGJ1ZmZlciB0byBob2xkIGZpbGUgaW5mby4gKi8KKwlpbnQgbGM7CQkJ
LyogbG9vcCBjb3VudGVyICovCisJY2hhciAqbXNnOwkJLyogbWVzc2FnZSByZXR1cm5lZCBmcm9t
IHBhcnNlX29wdHMgKi8KKwl0aW1lX3QgbW9kZl90aW1lLCBhY2Nlc3NfdGltZTsKKwlsb25nIG1v
ZGZfdGltZV91c2VjLCBhY2Nlc3NfdGltZV91c2VjOworCQkJCS8qIGZpbGUgbW9kaWZpY2F0aW9u
L2FjY2VzcyB0aW1lICovCisgICAgCisJLyogUGFyc2Ugc3RhbmRhcmQgb3B0aW9ucyBnaXZlbiB0
byBydW4gdGhlIHRlc3QuICovCisJbXNnID0gcGFyc2Vfb3B0cyhhYywgYXYsIChvcHRpb25fdCAq
KSBOVUxMLCBOVUxMKTsKKwlpZiAobXNnICE9IChjaGFyICopIE5VTEwpIHsKKwkJdHN0X2Jya20o
VEJST0ssIE5VTEwsICJPUFRJT04gUEFSU0lORyBFUlJPUiAtICVzIiwgbXNnKTsKKwkJdHN0X2V4
aXQoKTsKKwl9CisKKwkvKiBQZXJmb3JtIGdsb2JhbCBzZXR1cCBmb3IgdGVzdCAqLworCXNldHVw
KCk7CisKKwkvKiBzZXQgdGhlIGV4cGVjdGVkIGVycm5vcy4uLiAqLworCVRFU1RfRVhQX0VOT1Mo
ZXhwX2Vub3MpOworCisJLyogQ2hlY2sgbG9vcGluZyBzdGF0ZSBpZiAtaSBvcHRpb24gZ2l2ZW4g
Ki8KKwlmb3IgKGxjID0gMDsgVEVTVF9MT09QSU5HKGxjKTsgbGMrKykgeworCQkvKiBSZXNldCBU
c3RfY291bnQgaW4gY2FzZSB3ZSBhcmUgbG9vcGluZy4gKi8KKwkJVHN0X2NvdW50PTA7CisKKwkJ
LyogCisJCSAqIEludm9rZSB1dGltZXMoMikgdG8gc2V0IFRFTVBfRklMRSBhY2Nlc3MgYW5kCisJ
CSAqIG1vZGlmaWNhdGlvbiB0aW1lcyB0byB0aGF0IHNwZWNpZmllZCBieQorCQkgKiB0aW1lcyBh
cmd1bWVudC4KKwkJICovCisJCVRFU1QodXRpbWVzKFRFTVBfRklMRSwgdGltZXMpKTsKKworCQkv
KiBjaGVjayByZXR1cm4gY29kZSBvZiB1dGltZXMoMikgKi8KKwkJaWYgKFRFU1RfUkVUVVJOID09
IC0xKSB7CisJCQlURVNUX0VSUk9SX0xPRyhURVNUX0VSUk5PKTsKKwkJCXRzdF9yZXNtKFRGQUlM
LCAidXRpbWVzKCVzKSBGYWlsZWQsIGVycm5vPSVkIDogJXMiLAorCQkJCSBURU1QX0ZJTEUsIFRF
U1RfRVJSTk8sIHN0cmVycm9yKFRFU1RfRVJSTk8pKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkg
KiBQZXJmb3JtIGZ1bmN0aW9uYWwgdmVyaWZpY2F0aW9uIGlmIHRlc3QKKwkJCSAqIGV4ZWN1dGVk
IHdpdGhvdXQgKC1mKSBvcHRpb24uCisJCQkgKi8KKwkJCWlmIChTVERfRlVOQ1RJT05BTF9URVNU
KSB7CisJCQkJLyoKKwkJCQkgKiBHZXQgdGhlIG1vZGlmaWNhdGlvbiBhbmQgYWNjZXNzIHRpbWVz
IG9mCisJCQkJICogdGVtcG9yYXJ5IGZpbGUgdXNpbmcgc3RhdCgyKS4KKwkJCQkgKi8KKwkJCQlp
ZiAoc3RhdChURU1QX0ZJTEUsICZzdGF0X2J1ZikgPCAwKSB7CisJCQkJCXRzdF9icmttKFRGQUlM
LCBjbGVhbnVwLCAic3RhdCgyKSBvZiAiCisJCQkJCQkiJXMgZmFpbGVkLCBlcnJvcjolZCIsCisJ
CQkJCQlURU1QX0ZJTEUsIFRFU1RfRVJSTk8pOworCQkJCQkvKk5PVFJFQUNIRUQqLworCQkJCX0K
KwkJCQltb2RmX3RpbWUgPSBzdGF0X2J1Zi5zdF9tdGltZTsKKwkJCQltb2RmX3RpbWVfdXNlYyA9
IHN0YXRfYnVmLnN0X210aW0udHZfbnNlYyAvIDEwMDA7CisJCQkJYWNjZXNzX3RpbWUgPSBzdGF0
X2J1Zi5zdF9hdGltZTsKKwkJCQlhY2Nlc3NfdGltZV91c2VjID0gc3RhdF9idWYuc3RfYXRpbS50
dl9uc2VjIC8gMTAwMDsKKworCQkJCS8qIE5vdyBkbyB0aGUgYWN0dWFsIHZlcmlmaWNhdGlvbiAq
LworCQkJCWlmICgobW9kZl90aW1lICE9IE5FV19USU1FKSB8fCBcCisJCQkJICAgIChhY2Nlc3Nf
dGltZSAhPSBORVdfVElNRSkpIHsKKwkJCQkJdHN0X3Jlc20oVEZBSUwsICIlcyBhY2Nlc3MgYW5k
ICIKKwkJCQkJCSJtb2RpZmljYXRpb24gdGltZXMgbm90IHNldCIsCisJCQkJCQlURU1QX0ZJTEUp
OworCQkJCX0gZWxzZSBpZiAoKG1vZGZfdGltZV91c2VjICE9IE5FV19USU1FX1VTRUMpIHx8IFwK
KwkJCQkgICAgKGFjY2Vzc190aW1lX3VzZWMgIT0gTkVXX1RJTUVfVVNFQykpIHsKKwkJCQkJdHN0
X3Jlc20oVEZBSUwsICIlcyBhY2Nlc3MgYW5kICIKKwkJCQkJCSJtb2RpZmljYXRpb24gdGltZXMg
dXNlYyBub3Qgc2V0IiwKKwkJCQkJCVRFTVBfRklMRSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJdHN0
X3Jlc20oVFBBU1MsICJGdW5jdGlvbmFsaXR5IG9mICIKKwkJCQkJCSJ1dGltZXMoJXMsIHRpbWVz
KSBzdWNjZXNzZnVsIiwKKwkJCQkJCVRFTVBfRklMRSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJ
CQl0c3RfcmVzbShUUEFTUywgIiVzIGNhbGwgc3VjY2VlZGVkIiwgVENJRCk7CisJCQl9CisJCX0K
KwkJVHN0X2NvdW50Kys7CQkvKiBpbmNyIFRFU1RfTE9PUCBjb3VudGVyICovCisJfQkvKiBFbmQg
Zm9yIFRFU1RfTE9PUElORyAqLworCisJLyogQ2FsbCBjbGVhbnVwKCkgdG8gdW5kbyBzZXR1cCBk
b25lIGZvciB0aGUgdGVzdC4gKi8KKwljbGVhbnVwKCk7CisJLypOT1RSRUFDSEVEKi8KKworCisg
IHJldHVybigwKTsKKworfQkvKiBFbmQgbWFpbiAqLworCisvKgorICogdm9pZAorICogc2V0dXAo
KSAtIHBlcmZvcm1zIGFsbCBPTkUgVElNRSBzZXR1cCBmb3IgdGhpcyB0ZXN0LgorICogIENyZWF0
ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGNoYW5nZSBkaXJlY3RvcnkgdG8gaXQuCisgKiAg
Q3JlYXRlIGEgdGVzdCBmaWxlIHVuZGVyIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGNsb3NlIGl0
CisgKi8KK3ZvaWQgCitzZXR1cCgpCit7CisJaW50IGZpbGRlczsJCQkvKiBmaWxlIGhhbmRsZSBm
b3IgdGVtcCBmaWxlICovCisKKwkvKiBjYXB0dXJlIHNpZ25hbHMgKi8KKwl0c3Rfc2lnKEZPUkss
IERFRl9IQU5ETEVSLCBjbGVhbnVwKTsKKworCS8qIFN3aXRjaCB0byBub2JvZHkgdXNlciBmb3Ig
Y29ycmVjdCBlcnJvciBjb2RlIGNvbGxlY3Rpb24gKi8KKyAgICAgICAgaWYgKGdldGV1aWQoKSAh
PSAwKSB7CisgICAgICAgICAgICAgICAgdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiVGVzdCBt
dXN0IGJlIHJ1biBhcyByb290Iik7CisgICAgICAgIH0KKyAgICAgICAgIGx0cHVzZXIgPSBnZXRw
d25hbShub2JvZHlfdWlkKTsKKyAgICAgICAgIGlmIChzZXR1aWQobHRwdXNlci0+cHdfdWlkKSA9
PSAtMSkgeworICAgICAgICAgICAgICAgIHRzdF9yZXNtKFRJTkZPLCAic2V0dWlkIGZhaWxlZCB0
byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHNldCB0aGUgZWZmZWN0aXZlIHVpZCB0
byAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRwdXNlci0+cHdfdWlkKTsKKyAgICAg
ICAgICAgICAgICBwZXJyb3IoInNldHVpZCIpOworICAgICAgICAgfQorCQkKKworCS8qIFBhdXNl
IGlmIHRoYXQgb3B0aW9uIHdhcyBzcGVjaWZpZWQgKi8KKwlURVNUX1BBVVNFOworCisJLyogbWFr
ZSBhIHRlbXAgZGlyZWN0b3J5IGFuZCBjZCB0byBpdCAqLworCXRzdF90bXBkaXIoKTsKKworCS8q
IENyZWF0IGEgdGVtcG9yYXJ5IGZpbGUgdW5kZXIgYWJvdmUgZGlyZWN0b3J5ICovCisJaWYgKChm
aWxkZXMgPSBjcmVhdChURU1QX0ZJTEUsIEZJTEVfTU9ERSkpID09IC0xKSB7CisJCXRzdF9icmtt
KFRCUk9LLCBjbGVhbnVwLAorCQkJICJjcmVhdCglcywgJSNvKSBGYWlsZWQsIGVycm5vPSVkIDol
cyIsCisJCQkgVEVNUF9GSUxFLCBGSUxFX01PREUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOwor
CX0KKworCS8qIENsb3NlIHRoZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkICovCisJaWYgKGNsb3Nl
KGZpbGRlcykgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLAorCQkJICJjbG9zZSgl
cykgRmFpbGVkLCBlcnJubz0lZCA6ICVzOiIsCisJCQkgVEVNUF9GSUxFLCBlcnJubywgc3RyZXJy
b3IoZXJybm8pKTsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBtb2RpZmljYXRpb24gYW5kIGFj
Y2VzcyB0aW1lIGluIHRoZSB0aW1lcyBhcmcgKi8KKwl0aW1lc1swXS50dl9zZWMgPSBORVdfVElN
RTsKKwl0aW1lc1swXS50dl91c2VjID0gTkVXX1RJTUVfVVNFQzsKKwl0aW1lc1sxXS50dl9zZWMg
PSBORVdfVElNRTsKKwl0aW1lc1sxXS50dl91c2VjID0gTkVXX1RJTUVfVVNFQzsKKworfQkvKiBF
bmQgc2V0dXAoKSAqLworCisvKgorICogdm9pZAorICogY2xlYW51cCgpIC0JcGVyZm9ybXMgYWxs
IE9ORSBUSU1FIGNsZWFudXAgZm9yIHRoaXMgdGVzdCBhdAorICoJCWNvbXBsZXRpb24gb3IgcHJl
bWF0dXJlIGV4aXQuCisgKgkJUmVtb3ZlIHRoZSB0ZXN0IGRpcmVjdG9yeSBhbmQgdGVzdGZpbGUg
Y3JlYXRlZCBpbiB0aGUgc2V0dXAuCisgKi8KK3ZvaWQgCitjbGVhbnVwKCkKK3sKKwkvKgorCSAq
IHByaW50IHRpbWluZyBzdGF0cyBpZiB0aGF0IG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorCSAqIHBy
aW50IGVycm5vIGxvZyBpZiB0aGF0IG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorCSAqLworCVRFU1Rf
Q0xFQU5VUDsKKworCS8qIFJlbW92ZSB0bXAgZGlyIGFuZCBhbGwgZmlsZXMgaW4gaXQgKi8KKwl0
c3Rfcm1kaXIoKTsKKworCS8qIGV4aXQgd2l0aCByZXR1cm4gY29kZSBhcHByb3ByaWF0ZSBmb3Ig
cmVzdWx0cyAqLworCXRzdF9leGl0KCk7Cit9CS8qIEVuZCBjbGVhbnVwKCkgKi8KZGlmZiAtcnVO
IGx0cC1mdWxsLTIwMDYxMTIxLW9yaWcvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy91dGltZXMv
dXRpbWVzMDYuYyBsdHAtZnVsbC0yMDA2MTEyMS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0
aW1lcy91dGltZXMwNi5jCi0tLSBsdHAtZnVsbC0yMDA2MTEyMS1vcmlnL3Rlc3RjYXNlcy9rZXJu
ZWwvc3lzY2FsbHMvdXRpbWVzL3V0aW1lczA2LmMJV2VkIERlYyAzMSAxODowMDowMCAxOTY5Cisr
KyBsdHAtZnVsbC0yMDA2MTEyMS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3V0aW1lcy91dGlt
ZXMwNi5jCVRodSBEZWMgMTQgMTI6NDA6NDUgMjAwNgpAQCAtMCwwICsxLDMzNyBAQAorLyoKKyAq
CisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29y
cC4sIDIwMDEKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogVGVzdCBOYW1lOiB1dGltZXMwNgor
ICoKKyAqIFRlc3QgRGVzY3JpcHRpb246CisgKiAxLiBWZXJpZnkgdGhhdCB0aGUgc3lzdGVtIGNh
bGwgdXRpbWVzKCkgZmFpbHMgdG8gc2V0IHRoZSBtb2RpZmljYXRpb24KKyAqICAgIGFuZCBhY2Nl
c3MgdGltZXMgb2YgYSBmaWxlIHRvIHRoZSBjdXJyZW50IHRpbWUsIHVuZGVyIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGNvbnN0cmFpbnRzLAorICoJIC0gVGhlIHRpbWVzIGFyZ3VtZW50IGlzIG51bGwu
CisgKgkgLSBUaGUgdXNlciBJRCBvZiB0aGUgcHJvY2VzcyBpcyBub3QgInJvb3QiLgorICoJIC0g
VGhlIGZpbGUgaXMgbm90IG93bmVkIGJ5IHRoZSB1c2VyIElEIG9mIHRoZSBwcm9jZXNzLgorICoJ
IC0gVGhlIHVzZXIgSUQgb2YgdGhlIHByb2Nlc3MgZG9lcyBub3QgaGF2ZSB3cml0ZSBhY2Nlc3Mg
dG8gdGhlCisgKgkgICBmaWxlLgorICogMi4gVmVyaWZ5IHRoYXQgdGhlIHN5c3RlbSBjYWxsIHV0
aW1lcygpIGZhaWxzIHRvIHNldCB0aGUgbW9kaWZpY2F0aW9uCisgKiAgICBhbmQgYWNjZXNzIHRp
bWVzIG9mIGEgZmlsZSBpZiB0aGUgc3BlY2lmaWVkIGZpbGUgZG9lc24ndCBleGlzdC4KKyAqCisg
KiBFeHBlY3RlZCBSZXN1bHQ6CisgKiAxLiB1dGltZXMgc2hvdWxkIGZhaWwgd2l0aCAtMSByZXR1
cm4gdmFsdWUgYW5kIHNldHMgZXJybm8gRUFDQ0VTLgorICogMi4gdXRpbWVzIHNob3VsZCBmYWls
IHdpdGggLTEgcmV0dXJuIHZhbHVlIGFuZCBzZXRzIGVycm5vIEVOT0VOVC4KKyAqCisgKiBBbGdv
cml0aG06CisgKiAgU2V0dXA6CisgKiAgIFNldHVwIHNpZ25hbCBoYW5kbGluZy4KKyAqICAgQ3Jl
YXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCisgKiAgIFBhdXNlIGZvciBTSUdVU1IxIGlmIG9wdGlv
biBzcGVjaWZpZWQuCisgKgorICogIFRlc3Q6CisgKiAgIExvb3AgaWYgdGhlIHByb3BlciBvcHRp
b25zIGFyZSBnaXZlbi4KKyAqICAgRXhlY3V0ZSBzeXN0ZW0gY2FsbAorICogICBDaGVjayByZXR1
cm4gY29kZSwgaWYgc3lzdGVtIGNhbGwgZmFpbGVkIChyZXR1cm49LTEpCisgKiAgIAlpZiBlcnJu
byBzZXQgPT0gZXhwZWN0ZWQgZXJybm8KKyAqICAgCQlJc3N1ZSBzeXMgY2FsbCBmYWlscyB3aXRo
IGV4cGVjdGVkIHJldHVybiB2YWx1ZSBhbmQgZXJybm8uCisgKiAgIAlPdGhlcndpc2UsCisgKgkJ
SXNzdWUgc3lzIGNhbGwgZmFpbHMgd2l0aCB1bmV4cGVjdGVkIGVycm5vLgorICogICBPdGhlcndp
c2UsCisgKglJc3N1ZSBzeXMgY2FsbCByZXR1cm5zIHVuZXhwZWN0ZWQgdmFsdWUuCisgKgorICog
IENsZWFudXA6CisgKiAgIFByaW50IGVycm5vIGxvZyBhbmQvb3IgdGltaW5nIHN0YXRzIGlmIG9w
dGlvbnMgZ2l2ZW4KKyAqICAgRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5KHMpL2ZpbGUo
cykgY3JlYXRlZC4KKyAqCisgKiBVc2FnZTogIDxmb3IgY29tbWFuZC1saW5lPgorICogIHV0aW1l
czA2IFstYyBuXSBbLWVdIFstaSBuXSBbLUkgeF0gWy1wIHhdIFstdF0KKyAqCXdoZXJlLCAgLWMg
biA6IFJ1biBuIGNvcGllcyBjb25jdXJyZW50bHkuCisgKgkJLWUgICA6IFR1cm4gb24gZXJybm8g
bG9nZ2luZy4KKyAqCQktaSBuIDogRXhlY3V0ZSB0ZXN0IG4gdGltZXMuCisgKgkJLUkgeCA6IEV4
ZWN1dGUgdGVzdCBmb3IgeCBzZWNvbmRzLgorICoJCS1QIHggOiBQYXVzZSBmb3IgeCBzZWNvbmRz
IGJldHdlZW4gaXRlcmF0aW9ucy4KKyAqCQktdCAgIDogVHVybiBvbiBzeXNjYWxsIHRpbWluZy4K
KyAqCisgKiBIaXN0b3J5CisgKgkwNy8yMDAxIEpvaG4gR2VvcmdlCisgKgkJLVBvcnRlZAorICoK
KyAqIFJlc3RyaWN0aW9uczoKKyAqICBUaGlzIHRlc3QgbXVzdCBiZSBleGVjdXRlZCBieSByb290
LgorICogICBub2JvZHkgYW5kIGJpbiBtdXN0IGJlIHZhbGlkIHVzZXJzLgorICovCisKKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMv
dGltZS5oPgorI2luY2x1ZGUgPHdhaXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSAidGVzdC5oIgorI2luY2x1ZGUgInVzY3Rlc3Qu
aCIKKworI2RlZmluZSBMVFBVU0VSMSAgICAgICAgIm5vYm9keSIKKyNkZWZpbmUgTFRQVVNFUjIg
ICAgICAgICJiaW4iCisjZGVmaW5lIFRFTVBfRklMRQkidG1wX2ZpbGUiCisjZGVmaW5lIEZJTEVf
TU9ERQlTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgKKworY2hhciAqVENJRD0idXRpbWVzMDYi
OwkJLyogVGVzdCBwcm9ncmFtIGlkZW50aWZpZXIuICAgICovCitpbnQgVFNUX1RPVEFMPTI7CQkv
KiBUb3RhbCBudW1iZXIgb2YgdGVzdCBjYXNlcy4gKi8KK2V4dGVybiBpbnQgVHN0X2NvdW50OwkJ
LyogVGVzdCBDYXNlIGNvdW50ZXIgZm9yIHRzdF8qIHJvdXRpbmVzICovCit0aW1lX3QgY3Vycl90
aW1lOwkJLyogY3VycmVudCB0aW1lIGluIHNlY29uZHMgKi8KK3RpbWVfdCB0bG9jOwkJCS8qIGFy
Z3VtZW50IHZhci4gZm9yIHRpbWUoKSAqLworaW50IGV4cF9lbm9zW109e0VBQ0NFUywgRU5PRU5U
LCAwfTsKKworc3RydWN0IHBhc3N3ZCAqbHRwdXNlcjsgICAgICAgICAvKiBwYXNzd29yZCBzdHJ1
Y3QgZm9yIGx0cHVzZXJzICovCit1aWRfdCB1c2VyX3VpZDsgICAgICAgICAgICAgICAgIC8qIHVz
ZXIgaWQgb2YgbHRwdXNlciAqLworZ2lkX3QgZ3JvdXBfZ2lkOyAgICAgICAgICAgICAgICAvKiBn
cm91cCBpZCBvZiBsdHB1c2VyICovCitpbnQgc3RhdHVzOworCitpbnQgc2V0dXAxKCk7CQkJLyog
c2V0dXAgZnVuY3Rpb24gdG8gdGVzdCBlcnJvciBFQUNDRVMgKi8KK2ludCBub19zZXR1cCgpOwor
CitzdHJ1Y3QgdGVzdF9jYXNlX3QgewkJLyogdGVzdCBjYXNlIHN0cnVjdC4gdG8gaG9sZCByZWYu
IHRlc3QgY29uZCdzKi8KKwljaGFyICpwYXRobmFtZTsKKwljaGFyICpkZXNjOworCWludCBleHBf
ZXJybm87CisJaW50ICgqc2V0dXBmdW5jKSgpOworfSBUZXN0X2Nhc2VzW10gPSB7CisJeyBURU1Q
X0ZJTEUsICJQZXJtaXNzaW9uIGRlbmllZCB0byBtb2RpZnkgZmlsZSB0aW1lIiwgRUFDQ0VTLCBz
ZXR1cDEgfSwKKwl7ICIiLCAiU3BlY2lmaWVkIGZpbGUgZG9lc24ndCBleGlzdCIsIEVOT0VOVCwg
bm9fc2V0dXAgfSwKKwl7IE5VTEwsIE5VTEwsIDAsIE5VTEx9Cit9OworCit2b2lkIHNldHVwKCk7
CQkJLyogTWFpbiBzZXR1cCBmdW5jdGlvbiBvZiB0ZXN0ICovCit2b2lkIGNsZWFudXAoKTsJCQkv
KiBjbGVhbnVwIGZ1bmN0aW9uIGZvciB0aGUgdGVzdCAqLworCitpbnQKK21haW4oaW50IGFjLCBj
aGFyICoqYXYpCit7CisJaW50IGxjOwkJCS8qIGxvb3AgY291bnRlciAqLworCWNoYXIgKm1zZzsJ
CS8qIG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSBwYXJzZV9vcHRzICovCisJY2hhciAqZmlsZV9uYW1l
OwkvKiB0ZXN0ZmlsZSBuYW1lICovCisJY2hhciAqdGVzdF9kZXNjOwkvKiB0ZXN0IHNwZWNpZmlj
IGVycm9yIG1lc3NhZ2UgKi8KKwlpbnQgaW5kOwkJLyogY291bnRlciB0byB0ZXN0IGRpZmZlcmVu
dCB0ZXN0IGNvbmRpdGlvbnMgKi8KKwlpbnQgcGlkOworICAgIAorCS8qIFBhcnNlIHN0YW5kYXJk
IG9wdGlvbnMgZ2l2ZW4gdG8gcnVuIHRoZSB0ZXN0LiAqLworCW1zZyA9IHBhcnNlX29wdHMoYWMs
IGF2LCAob3B0aW9uX3QgKikgTlVMTCwgTlVMTCk7CisJaWYgKG1zZyAhPSAoY2hhciAqKSBOVUxM
KSB7CisJCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiT1BUSU9OIFBBUlNJTkcgRVJST1IgLSAlcyIs
IG1zZyk7CisJCXRzdF9leGl0KCk7CisJfQorCisJLyogUGVyZm9ybSBnbG9iYWwgc2V0dXAgZm9y
IHRlc3QgKi8KKwlzZXR1cCgpOworCisJLyogc2V0IHRoZSBleHBlY3RlZCBlcnJub3MuLi4gKi8K
KwlURVNUX0VYUF9FTk9TKGV4cF9lbm9zKTsKKworCXBpZCA9IEZPUktfT1JfVkZPUksoKTsKKwor
CWlmIChwaWQgPT0gLTEpIHsKKwkJdHN0X2Jya20oVEJST0ssIGNsZWFudXAsICJmb3JrKCkgZmFp
bGVkIik7CisJCS8qTk9UUkVBQ0hFRCovCisJfSBlbHNlIGlmIChwaWQgPT0gMCkgeworCQlpZiAo
KGx0cHVzZXIgPSBnZXRwd25hbShMVFBVU0VSMSkpID09IE5VTEwpIHsKKwkJCXRzdF9icmttKFRC
Uk9LLGNsZWFudXAsIiVzIG5vdCBmb3VuZCBpbiAvZXRjL3Bhc3N3ZCIsCisJCQkJTFRQVVNFUjEp
OworCQkJLypOT1RSRUFDSEVEKi8KKwkJfQorCisJCS8qIGdldCB1aWQgb2YgdXNlciAqLworCQl1
c2VyX3VpZCA9IGx0cHVzZXItPnB3X3VpZDsKKworCQlzZXRldWlkKHVzZXJfdWlkKTsKKworCQkv
KiBDaGVjayBsb29waW5nIHN0YXRlIGlmIC1pIG9wdGlvbiBnaXZlbiAqLworCQlmb3IgKGxjID0g
MDsgVEVTVF9MT09QSU5HKGxjKTsgbGMrKykgeworCQkJLyogUmVzZXQgVHN0X2NvdW50IGluIGNh
c2Ugd2UgYXJlIGxvb3BpbmcuICovCisJCQlUc3RfY291bnQ9MDsKKworCQkJZm9yIChpbmQgPSAw
OyBUZXN0X2Nhc2VzW2luZF0uZGVzYyAhPSBOVUxMOyBpbmQrKykgeworCQkJCWZpbGVfbmFtZSA9
IFRlc3RfY2FzZXNbaW5kXS5wYXRobmFtZTsKKwkJCQl0ZXN0X2Rlc2MgPSBUZXN0X2Nhc2VzW2lu
ZF0uZGVzYzsKKworCQkJCS8qCisJCQkJICogQ2FsbCB1dGltZXMoMikgdG8gdGVzdCBkaWZmZXJl
bnQgdGVzdAorCQkJCSAqIGNvbmRpdGlvbnMuIFZlcmlmeSB0aGF0IGl0IGZhaWxzIHdpdGggLTEK
KwkJCQkgKiByZXR1cm4gdmFsdWUgYW5kIHNldHMgYXBwcm9wcmlhdGUgZXJybm8uCisJCQkJICov
CisJCQkJVEVTVCh1dGltZXMoZmlsZV9uYW1lLCBOVUxMKSk7CisKKwkJCQkvKiBDaGVjayByZXR1
cm4gY29kZSBmcm9tIHV0aW1lcygyKSAqLworCQkJCWlmIChURVNUX1JFVFVSTiA9PSAtMSkgewor
CQkJCQlURVNUX0VSUk9SX0xPRyhURVNUX0VSUk5PKTsKKwkJCQkJaWYgKFRFU1RfRVJSTk8gPT0K
KwkJCQkJCVRlc3RfY2FzZXNbaW5kXS5leHBfZXJybm8pIHsKKwkJCQkJCXRzdF9yZXNtKFRQQVNT
LCAidXRpbWVzKCkgIgorCQkJCQkJCSJmYWlscywgJXMsIGVycm5vOiVkIiwKKwkJCQkJCQl0ZXN0
X2Rlc2MsIFRFU1RfRVJSTk8pOworCQkJCQl9IGVsc2UgeworCQkJCQkJdHN0X3Jlc20oVEZBSUws
ICJ1dGltZXMoMikgIgorCQkJCQkJCSJmYWlscywgJXMsIGVycm5vOiVkLCAiCisJCQkJCQkJImV4
cGVjdGVkIGVycm5vOiVkIiwKKwkJCQkJCQl0ZXN0X2Rlc2MsIFRFU1RfRVJSTk8sCisJCQkJCQkJ
VGVzdF9jYXNlc1tpbmRdLmV4cF9lcnJubyk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQl0
c3RfcmVzbShURkFJTCwgInV0aW1lcygyKSByZXR1cm5lZCAlZCwgIgorCQkJCQkJImV4cGVjdGVk
IC0xLCBlcnJubzolZCIsCisJCQkJCQlURVNUX1JFVFVSTiwKKwkJCQkJCVRlc3RfY2FzZXNbaW5k
XS5leHBfZXJybm8pOworCQkJCX0KKwkJCX0JLyogRW5kIG9mIFRFU1QgQ0FTRSBMT09QSU5HLiAq
LworCisJCQlUc3RfY291bnQrKzsJCS8qIGluY3IgVEVTVF9MT09QIGNvdW50ZXIgKi8KKworCQl9
CS8qIEVuZCBmb3IgVEVTVF9MT09QSU5HICovCisJfSBlbHNlIHsKKwkJd2FpdHBpZChwaWQsICZz
dGF0dXMsIDApOworCQlfZXhpdCgwKTsgICAgICAgLyoKKwkJCQkgKiBFeGl0IGhlcmUgYW5kIGxl
dCB0aGUgY2hpbGQgY2xlYW4gdXAuCisJCQkJICogVGhpcyBhbGxvd3MgdGhlIGVycm5vIGluZm9y
bWF0aW9uIHNldAorCQkJCSAqIGJ5IHRoZSBURVNUX0VSUk9SX0xPRyBtYWNybyBhbmQgdGhlCisJ
CQkJICogUEFTUy9GQUlMIHN0YXR1cyB0byBiZSBwcmVzZXJ2ZWQgZm9yCisJCQkJICogdXNlIGR1
cmluZyBjbGVhbnVwLgorCQkJCSAqLworCX0KKwkvKiBDYWxsIGNsZWFudXAoKSB0byB1bmRvIHNl
dHVwIGRvbmUgZm9yIHRoZSB0ZXN0LiAqLworCWNsZWFudXAoKTsKKwkvKk5PVFJFQUNIRUQqLwor
CisKKyAgcmV0dXJuKDApOworCit9CS8qIEVuZCBtYWluICovCisKKy8qCisgKiB2b2lkCisgKiBz
ZXR1cCgpIC0gcGVyZm9ybXMgYWxsIE9ORSBUSU1FIHNldHVwIGZvciB0aGlzIHRlc3QuCisgKiAg
Q3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgY2hhbmdlIGRpcmVjdG9yeSB0byBpdC4K
KyAqICBJbnZva2UgaW5kaXZpZHVhbCB0ZXN0IHNldHVwIGZ1bmN0aW9ucyBhY2NvcmRpbmcgdG8g
dGhlIG9yZGVyCisgKiAgc2V0IGluIHRlc3Qgc3RydWN0LiBkZWZpbml0aW9uLgorICovCit2b2lk
IAorc2V0dXAoKQoreworCWludCBpbmQ7CQkJLyogY291bnRlciBmb3Igc2V0dXAgZnVuY3Rpb25z
ICovCisKKwkvKiBjYXB0dXJlIHNpZ25hbHMgKi8KKwl0c3Rfc2lnKEZPUkssIERFRl9IQU5ETEVS
LCBjbGVhbnVwKTsKKworCS8qIENoZWNrIHRoYXQgdGhlIHRlc3QgcHJvY2VzcyBpZCBpcyBub24t
c3VwZXIvcm9vdCAgKi8KKwlpZiAoZ2V0ZXVpZCgpICE9IDApIHsKKwkJdHN0X2Jya20oVEJST0ss
IE5VTEwsICJNdXN0IGJlIHJvb3QgZm9yIHRoaXMgdGVzdCEiKTsKKwkJdHN0X2V4aXQoKTsKKwl9
CisKKwkvKiBQYXVzZSBpZiB0aGF0IG9wdGlvbiB3YXMgc3BlY2lmaWVkICovCisJVEVTVF9QQVVT
RTsKKworCS8qIG1ha2UgYSB0ZW1wIGRpcmVjdG9yeSBhbmQgY2QgdG8gaXQgKi8KKwl0c3RfdG1w
ZGlyKCk7CisKKwkvKiBjYWxsIGluZGl2aWR1YWwgc2V0dXAgZnVuY3Rpb25zICovCisJZm9yIChp
bmQgPSAwOyBUZXN0X2Nhc2VzW2luZF0uZGVzYyAhPSBOVUxMOyBpbmQrKykgeworCQlUZXN0X2Nh
c2VzW2luZF0uc2V0dXBmdW5jKCk7CisJfQorfQkvKiBFbmQgc2V0dXAoKSAqLworCisvKgorICog
aW50CisgKiBub19zZXR1cCgpIC0gU29tZSB0ZXN0IGNvbmRpdGlvbnMgZm9yIHV0aW1lcygyKSBk
byBub3QgYW55IHNldHVwLgorICogICAgICAgICAgICAgIEhlbmNlLCB0aGlzIGZ1bmN0aW9uIGp1
c3QgcmV0dXJucyAwLgorICovCitpbnQKK25vX3NldHVwKCkKK3sKKwlyZXR1cm4gMDsKK30KKwor
LyoKKyAqIGludAorICogc2V0dXAxKCkgLSBzZXR1cCBmdW5jdGlvbiBmb3IgYSB0ZXN0IGNvbmRp
dGlvbiBmb3Igd2hpY2ggdXRpbWVzKDIpCisgKgkJcmV0dXJucyAtMSBhbmQgc2V0cyBlcnJubyB0
byBFQUNDRVMuCisgKiAgQ3JlYXRlIGEgdGVzdGZpbGUgdW5kZXIgdGVtcG9yYXJ5IGRpcmVjdG9y
eSBhbmQgY2hhbmdlIHRoZSBvd25lcnNoaXAgb2YKKyAqICB0ZXN0ZmlsZSB0byAiYmluIi4KKyAq
LworaW50CitzZXR1cDEoKQoreworCWludCBmaWxkZXM7CQkJLyogZmlsZSBoYW5kbGUgZm9yIHRl
bXAgZmlsZSAqLworCisJLyogQ3JlYXQgYSB0ZW1wb3JhcnkgZmlsZSB1bmRlciBhYm92ZSBkaXJl
Y3RvcnkgKi8KKwlpZiAoKGZpbGRlcyA9IGNyZWF0KFRFTVBfRklMRSwgRklMRV9NT0RFKSkgPT0g
LTEpIHsKKwkJdHN0X2Jya20oVEJST0ssIGNsZWFudXAsICJjcmVhdCglcywgJSNvKSBGYWlsZWQs
IGVycm5vPSVkIDolcyIsCisJCQkgVEVNUF9GSUxFLCBGSUxFX01PREUsIGVycm5vLCBzdHJlcnJv
cihlcnJubykpOworCX0KKworCS8qIENsb3NlIHRoZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkICov
CisJaWYgKGNsb3NlKGZpbGRlcykgPCAwKSB7CisJCXRzdF9icmttKFRCUk9LLCBjbGVhbnVwLCAi
Y2xvc2UoJXMpIEZhaWxlZCwgZXJybm89JWQgOiAlczoiLAorCQkJCSBURU1QX0ZJTEUsIGVycm5v
LCBzdHJlcnJvcihlcnJubykpOworCX0KKworCWlmICgobHRwdXNlciA9IGdldHB3bmFtKExUUFVT
RVIyKSkgPT0gTlVMTCkgeworCQl0c3RfYnJrbShUQlJPSywgY2xlYW51cCwgIiVzIG5vdCBmb3Vu
ZCBpbiAvZXRjL3Bhc3N3ZCIsCisJCQkJTFRQVVNFUjIpOworCQkvKk5PVFJFQUNIRUQqLworCX0K
KworCS8qIGdldCB1aWQvZ2lkIG9mIHVzZXIgYWNjb3JkaW5nbHkgKi8KKwl1c2VyX3VpZCA9IGx0
cHVzZXItPnB3X3VpZDsKKwlncm91cF9naWQgPSBsdHB1c2VyLT5wd19naWQ7CisKKwlpZiAoY2hv
d24oVEVNUF9GSUxFLCB1c2VyX3VpZCwgZ3JvdXBfZ2lkKSA8IDApIHsKKwkJdHN0X2Jya20oVEJS
T0ssIGNsZWFudXAsICJjaG93bigpIG9mICVzIGZhaWxlZCwgZXJyb3IgJWQiLAorCQkJVEVNUF9G
SUxFLCBlcnJubyk7CisJCS8qTk9UUkVBQ0hFRCovCisJfQorCisJcmV0dXJuIDA7Cit9CS8qIEVu
ZCBvZiBzZXR1cDEgKi8KKworLyoKKyAqIHZvaWQKKyAqIGNsZWFudXAoKSAtIHBlcmZvcm1zIGFs
bCBPTkUgVElNRSBjbGVhbnVwIGZvciB0aGlzIHRlc3QgYXQKKyAqICAgICAgICAgICAgIGNvbXBs
ZXRpb24gb3IgcHJlbWF0dXJlIGV4aXQuCisgKiAgUmVtb3ZlIHRoZSB0ZXN0IGRpcmVjdG9yeSBh
bmQgdGVzdGZpbGUgY3JlYXRlZCBpbiB0aGUgc2V0dXAuCisgKi8KK3ZvaWQgCitjbGVhbnVwKCkK
K3sKKwlzZXRldWlkKDApOworCS8qCisJICogcHJpbnQgdGltaW5nIHN0YXRzIGlmIHRoYXQgb3B0
aW9uIHdhcyBzcGVjaWZpZWQuCisJICogcHJpbnQgZXJybm8gbG9nIGlmIHRoYXQgb3B0aW9uIHdh
cyBzcGVjaWZpZWQuCisJICovCisJVEVTVF9DTEVBTlVQOworCisJLyogUmVtb3ZlIHRtcCBkaXIg
YW5kIGFsbCBmaWxlcyBpbiBpdCAqLworCXRzdF9ybWRpcigpOworCisJLyogZXhpdCB3aXRoIHJl
dHVybiBjb2RlIGFwcHJvcHJpYXRlIGZvciByZXN1bHRzICovCisJdHN0X2V4aXQoKTsKK30JLyog
RW5kIGNsZWFudXAoKSAqLwo=
------=_Part_79072_22077359.1166151495960--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?790a9fff0612141858x3a0a4ce5vc348d32d9b56f343>