From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: MIME-Version: 1.0 References: <1533311096-14315-1-git-send-email-jon@ringle.org> <20180808095028.5icy6qduj53e6av3@pengutronix.de> In-Reply-To: <20180808095028.5icy6qduj53e6av3@pengutronix.de> From: Jon Ringle Date: Wed, 8 Aug 2018 06:58:55 -0400 Message-ID: Subject: Re: [ptxdist] [PATCH v4 1/2] Add libfaketime as a core component of ptxdist for patchin support List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de Content-Type: multipart/mixed; boundary="===============0473786001==" Errors-To: ptxdist-bounces@pengutronix.de Sender: "ptxdist" To: ptxdist@pengutronix.de Cc: ptxdist@pengutronix.com, Jon Ringle --===============0473786001== Content-Type: multipart/alternative; boundary="0000000000003c27ef0572ea66f7" --0000000000003c27ef0572ea66f7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Aug 8, 2018 at 5:50 AM Roland Hieber wrote: > On Fri, Aug 03, 2018 at 11:44:55AM -0400, jon@ringle.org wrote: > > From: Jon Ringle > > > > libfaketime will be used during patchin so that committer timestamps > always > > have a fixed value and therefore making the ${PKG}_SERIES_SHA256 value > > repeatable > > > > The minimal set of source files was picked out of libfaketime-0.9.7 > > > > Signed-off-by: Jon Ringle > > --- > > Makefile.in | 14 +- > > scripts/libfaketime/Makefile | 118 ++ > > scripts/libfaketime/faketime.c | 385 ++++++ > > scripts/libfaketime/faketime_common.h | 61 + > > scripts/libfaketime/libfaketime.c | 2410 > +++++++++++++++++++++++++++++++++ > > scripts/libfaketime/libfaketime.map | 10 + > > scripts/libfaketime/time_ops.h | 104 ++ > > Uh. Does it really make more sense to vendor libfaketime instead of > using the package from the host system, like we do it with python, bash, > etc.? > The reason that this is needed as a core component of ptxdist rather than just being built as a host package is that patchin step uses libfaketime and therefore is potentially needed before even a single package is ever built. What would happen if we just used a host-libfaketime package and someone adds a patch series for libfaketime? (In fact, I actually do have such a patch series locally that I will be sending to the ptxdist ml later). This is a chicken vs egg problem that is resolved by making libfaketime an integral part of ptxdist. The ptxdist usage of libfaketime in the patchin step does not need a patched version of libfaketime (it just needs to set an absolute date time and the libfaketime code I have here does that). It doesn=E2=80=99t need new configuration features or bug fixes= for fixing the time manipulation via some specific system call. -Jon --0000000000003c27ef0572ea66f7 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Wed,= Aug 8, 2018 at 5:50 AM Roland Hieber <r.hieber@pengutronix.de> wrote:
On Fri, Aug 03, 2018 at 11:44:55AM -0400, jon@ringle.org wrote:
> From: Jon Ringle <jringle@gridpoint.com>
>
> libfaketime will be used during patchin so that committer timestamps a= lways
> have a fixed value and therefore making the ${PKG}_SERIES_SHA256 value=
> repeatable
>
> The minimal set of source files was picked out of libfaketime-0.9.7 >
> Signed-off-by: Jon Ringle <jringle@gridpoint.com>
> ---
>=C2=A0 Makefile.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=A014 +-
>=C2=A0 scripts/libfaketime/Makefile=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |= =C2=A0 118 ++
>=C2=A0 scripts/libfaketime/faketime.c=C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2= =A0 385 ++++++
>=C2=A0 scripts/libfaketime/faketime_common.h |=C2=A0 =C2=A061 +
>=C2=A0 scripts/libfaketime/libfaketime.c=C2=A0 =C2=A0 =C2=A0| 2410 ++++= +++++++++++++++++++++++++++++
>=C2=A0 scripts/libfaketime/libfaketime.map=C2=A0 =C2=A0|=C2=A0 =C2=A010= +
>=C2=A0 scripts/libfaketime/time_ops.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2= =A0 104 ++

Uh. Does it really make more sense to vendor libfaketime instead of
using the package from the host system, like we do it with python, bash, etc.?

The reason that = this is needed as a core component of ptxdist rather than just being built = as a host package is that patchin step uses libfaketime and therefore is po= tentially needed before even a single package is ever built. What would hap= pen if we just used a host-libfaketime package and someone adds a patch ser= ies for libfaketime? (In fact, I actually do have such a patch series local= ly that I will be sending to the ptxdist ml later). This is a chicken vs eg= g problem that is resolved by making libfaketime an integral part of ptxdis= t. The ptxdist usage of libfaketime in the patchin step does not need a pat= ched version of libfaketime (it just needs to set an absolute date time and= the libfaketime code I have here does that). It doesn=E2=80=99t need new c= onfiguration features or bug fixes for fixing the time manipulation via som= e specific system call.

= -Jon
--0000000000003c27ef0572ea66f7-- --===============0473786001== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcHR4ZGlzdCBt YWlsaW5nIGxpc3QKcHR4ZGlzdEBwZW5ndXRyb25peC5kZQ== --===============0473786001==-- From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Date: Wed, 8 Aug 2018 11:50:28 +0200 From: Roland Hieber Message-ID: <20180808095028.5icy6qduj53e6av3@pengutronix.de> References: <1533311096-14315-1-git-send-email-jon@ringle.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1533311096-14315-1-git-send-email-jon@ringle.org> Subject: Re: [ptxdist] [PATCH v4 1/2] Add libfaketime as a core component of ptxdist for patchin support List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ptxdist-bounces@pengutronix.de Sender: "ptxdist" To: ptxdist@pengutronix.de Cc: ptxdist@pengutronix.com, Jon Ringle T24gRnJpLCBBdWcgMDMsIDIwMTggYXQgMTE6NDQ6NTVBTSAtMDQwMCwgam9uQHJpbmdsZS5vcmcg d3JvdGU6Cj4gRnJvbTogSm9uIFJpbmdsZSA8anJpbmdsZUBncmlkcG9pbnQuY29tPgo+IAo+IGxp YmZha2V0aW1lIHdpbGwgYmUgdXNlZCBkdXJpbmcgcGF0Y2hpbiBzbyB0aGF0IGNvbW1pdHRlciB0 aW1lc3RhbXBzIGFsd2F5cwo+IGhhdmUgYSBmaXhlZCB2YWx1ZSBhbmQgdGhlcmVmb3JlIG1ha2lu ZyB0aGUgJHtQS0d9X1NFUklFU19TSEEyNTYgdmFsdWUKPiByZXBlYXRhYmxlCj4gCj4gVGhlIG1p bmltYWwgc2V0IG9mIHNvdXJjZSBmaWxlcyB3YXMgcGlja2VkIG91dCBvZiBsaWJmYWtldGltZS0w LjkuNwo+IAo+IFNpZ25lZC1vZmYtYnk6IEpvbiBSaW5nbGUgPGpyaW5nbGVAZ3JpZHBvaW50LmNv bT4KPiAtLS0KPiAgTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQg Ky0KPiAgc2NyaXB0cy9saWJmYWtldGltZS9NYWtlZmlsZSAgICAgICAgICB8ICAxMTggKysKPiAg c2NyaXB0cy9saWJmYWtldGltZS9mYWtldGltZS5jICAgICAgICB8ICAzODUgKysrKysrCj4gIHNj cmlwdHMvbGliZmFrZXRpbWUvZmFrZXRpbWVfY29tbW9uLmggfCAgIDYxICsKPiAgc2NyaXB0cy9s aWJmYWtldGltZS9saWJmYWtldGltZS5jICAgICB8IDI0MTAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4gIHNjcmlwdHMvbGliZmFrZXRpbWUvbGliZmFrZXRpbWUubWFwICAgfCAg IDEwICsKPiAgc2NyaXB0cy9saWJmYWtldGltZS90aW1lX29wcy5oICAgICAgICB8ICAxMDQgKysK ClVoLiBEb2VzIGl0IHJlYWxseSBtYWtlIG1vcmUgc2Vuc2UgdG8gdmVuZG9yIGxpYmZha2V0aW1l IGluc3RlYWQgb2YKdXNpbmcgdGhlIHBhY2thZ2UgZnJvbSB0aGUgaG9zdCBzeXN0ZW0sIGxpa2Ug d2UgZG8gaXQgd2l0aCBweXRob24sIGJhc2gsCmV0Yy4/CgogLSBSb2xhbmQKCj4gIDcgZmlsZXMg Y2hhbmdlZCwgMzEwMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzY3JpcHRzL2xpYmZha2V0aW1lL01ha2VmaWxlCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzY3JpcHRzL2xpYmZha2V0aW1lL2Zha2V0aW1lLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNj cmlwdHMvbGliZmFrZXRpbWUvZmFrZXRpbWVfY29tbW9uLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IHNjcmlwdHMvbGliZmFrZXRpbWUvbGliZmFrZXRpbWUuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg c2NyaXB0cy9saWJmYWtldGltZS9saWJmYWtldGltZS5tYXAKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IHNjcmlwdHMvbGliZmFrZXRpbWUvdGltZV9vcHMuaAo+IAo+IGRpZmYgLS1naXQgYS9NYWtlZmls ZS5pbiBiL01ha2VmaWxlLmluCj4gaW5kZXggNDBjNjc2Yy4uNmUwODM3NyAxMDA2NDQKPiAtLS0g YS9NYWtlZmlsZS5pbgo+ICsrKyBiL01ha2VmaWxlLmluCj4gQEAgLTIyLDcgKzIyLDcgQEAgZXhw b3J0IFNIRUxMCj4gIAo+ICBAQlVJTERfTkNPTkZfVFJVRUBOQ09ORiA9IG5jb25mCj4gIAo+IC1h bGw6IGtjb25maWcgZW52aXJvbm1lbnQKPiArYWxsOiBrY29uZmlnIGxpYmZha2V0aW1lIGVudmly b25tZW50Cj4gIAlAdG91Y2ggLmRvbmUKPiAgCj4gIGtjb25maWc6Cj4gQEAgLTQxLDYgKzQxLDE3 IEBAIGtjb25maWc6Cj4gIAkJY29uZiBtY29uZiAkKE5DT05GKQo+ICAJQGVjaG8gImRvbmUuIgo+ ICAKPiArbGliZmFrZXRpbWU6Cj4gKwlAZWNobyAiYnVpbGRpbmcgbGliZmFrZXRpbWUgLi4uIgo+ ICsJQENDPSIkKENDKSIgXAo+ICsJQ1hYPSIkKENYWCkiIFwKPiArCUNGTEFHUz0iJChDRkxBR1Mp IiBcCj4gKwlDWFhGTEFHUz0iJChDWFhGTEFHUykiIFwKPiArCUNQUEZMQUdTPSIkKENQUEZMQUdT KSIgXAo+ICsJTERGTEFHUz0iJChMREZMQUdTKSIgXAo+ICsJJChNQUtFKSAtQyAiJChhYnNfc3Jj ZGlyKS9zY3JpcHRzL2xpYmZha2V0aW1lIiBhbGwKPiArCUBlY2hvICJkb25lLiIKPiArCj4gIGVu dmlyb25tZW50Ogo+ICAJQGVjaG8gLW4gInByZXBhcmluZyBQVFhkaXN0IGVudmlyb25tZW50IC4u LiIKPiAgCUBsbiAtc2YgQEFXS0AgIiQoYWJzX3NyY2RpcikvYmluL2F3ayIKPiBAQCAtODksNiAr MTAwLDcgQEAgY2xlYW46Cj4gIAlAcm0gLWYgLmRvbmUKPiAgCUBmaW5kICIkKGFic19zcmNkaXIp L2JpbiIgLXR5cGUgbCAtcHJpbnQwIHwgeGFyZ3MgLTAgcm0gLWYKPiAgCUAkKE1BS0UpIC1DICIk KGFic19zcmNkaXIpL3NjcmlwdHMva2NvbmZpZyIgY2xlYW4KPiArCUAkKE1BS0UpIC1DICIkKGFi c19zcmNkaXIpL3NjcmlwdHMvbGliZmFrZXRpbWUiIGNsZWFuCj4gIAo+ICBkaXJ0eS1jaGVjazoK PiAgCUBjYXNlICIkKHZlcnNpb24pIiBpbiBcCj4gZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliZmFr ZXRpbWUvTWFrZWZpbGUgYi9zY3JpcHRzL2xpYmZha2V0aW1lL01ha2VmaWxlCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hNTU3YzM4Cj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL3NjcmlwdHMvbGliZmFrZXRpbWUvTWFrZWZpbGUKPiBAQCAtMCwwICsxLDExOCBAQAo+ICsj Cj4gKyMgTm90ZXM6Cj4gKyMKPiArIyAgICogQ29tcGlsYXRpb24gRGVmaW5lczoKPiArIwo+ICsj ICAgICBGQUtFX1NUQVQKPiArIyAgICAgICAgIC0gRW5hYmxlcyB0aW1lIGZha2luZyBhbHNvIGZv ciBmaWxlcycgdGltZXN0YW1wcy4KPiArIwo+ICsjICAgICBOT19BVEZJTEUKPiArIyAgICAgICAg IC0gRGlzYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGZzdGF0YXQoKSBncm91cCBvZiBmdW5jdGlvbnMK PiArIwo+ICsjICAgICBQVEhSRUFECj4gKyMgICAgICAgICAtIERlZmluZSB0aGlzIHRvIGVuYWJs ZSBtdWx0aXRocmVhZGluZyBzdXBwb3J0Lgo+ICsjCj4gKyMgICAgIFBUSFJFQURfU0lOR0xFVEhS RUFERURfVElNRQo+ICsjICAgICAgICAgLSBEZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCB0byBzaW5n bGUtdGhyZWFkIHRpbWUoKSAuLi4gdGhlcmUgQVJFCj4gKyMgICAgICAgICAgIHBvc3NpYmlsZSBj YWNoaW5nIHNpZGUtZWZmZWN0cyBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQKPiArIyAg ICAgICAgICAgd2l0aG91dCB0aGlzLCBidXQgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBtYXkgcmVx dWlyZSB5b3UgdG8KPiArIyAgICAgICAgICAgdHJ5IGl0IHVuc3luY2hyb25pemVkLgo+ICsjCj4g KyMgICAgIEZBS0VfSU5URVJOQUxfQ0FMTFMKPiArIyAgICAgICAgIC0gQWxzbyBpbnRlcmNlcHQg bGliYyBpbnRlcm5hbCBfX2Z1bmN0aW9ucywgZS5nLiBub3QganVzdCB0aW1lKCksCj4gKyMgICAg ICAgICAgIGJ1dCBhbHNvIF9fdGltZSgpLiBFbmhhbmNlcyBjb21wYXRpYmlsaXR5IHdpdGggYXBw bGljYXRpb25zCj4gKyMgICAgICAgICAgIHRoYXQgbWFrZSB1c2Ugb2YgbG93LWxldmVsIHN5c3Rl bSBjYWxscywgc3VjaCBhcyBKYXZhIFZpcnR1YWwKPiArIyAgICAgICAgICAgTWFjaGluZXMuCj4g KyMKPiArIyAJICBGQUtFX1NMRUVQCj4gKyMgCSAgICAgIC0gQWxzbyBpbnRlcmNlcHQgc2xlZXAo KSwgbmFub3NsZWVwKCksIHVzbGVlcCgpLCBhbGFybSgpLCBbcF1wb2xsKCkKPiArIwo+ICsjCSAg RkFLRV9USU1FUlMKPiArIwkgICAgICAtIEFsc28gaW50ZXJjZXB0IHRpbWVyX3NldHRpbWUoKSBh bmQgdGltZXJfZ2V0dGltZSgpCj4gKyMKPiArIwkgIE1VTFRJX0FSQ0gKPiArIwkgIAkgIC0gSWYg TVVMVElfQVJDSCBpcyBzZXQsIHRoZSBmYWtldGltZSB3cmFwcGVyIHByb2dyYW0gd2lsbCBwdXQg YSBsaXRlcmFsCj4gKyMJICAJICAgICRMSUIgaW50byB0aGUgTERfUFJFTE9BRCBlbnZpcm9ubWVu dCB2YXJpYWJsZSBpdCBjcmVhdGVzLCB3aGljaCBtYWtlcwo+ICsjCSAgCSAgICBsZCBhdXRvbWF0 aWNhbGx5IGNob29zZSB0aGUgY29ycmVjdCBsaWJyYXJ5IHZlcnNpb24gdG8gdXNlIGZvciB0aGUK PiArIwkgIAkgICAgdGFyZ2V0IGJpbmFyeS4gVXNlIGZvciBMaW51eCBwbGF0Zm9ybXMgd2l0aCBN dWx0aS1BcmNoIHN1cHBvcnQgb25seSEKPiArIwo+ICsjICAgKiBDb21waWxhdGlvbiBhZGRpdGlv bjogc2Vjb25kIGxpYk1UIHRhcmdldCBhZGRlZCBmb3IgYnVpbGRpbmcgdGhlIHB0aHJlYWQtCj4g KyMgICAgIGVuYWJsZWQgbGlicmFyeSBhcyBhIHNlcGFyYXRlIGxpYnJhcnkKPiArIwo+ICsjICAg KiBDb21waWxhdGlvbiBzd2l0Y2ggY2hhbmdlOiBwcmV2aW91cyB2ZXJzaW9ucyBjb21waWxlZCB1 c2luZyAnLW5vc3RhcnRmaWxlcycKPiArIyAgICAgVGhpcyBpcyBubyBsb25nZXIgdGhlIGNhc2Ug c2luY2UgdGhlcmUgaXMgYSAnc3RhcnR1cCcgY29uc3RydWN0b3IgZm9yIHRoZSBsaWJyYXJ5Cj4g KyMgICAgIHdoaWNoIGlzIHVzZWQgdG8gYWN0aXZhdGUgdGhlIHN0YXJ0LWF0IHRpbWVzIHdoZW4g c3BlY2lmaWVkLiBUaGlzIGFsc28gaW5pdGlhbGl6ZXMKPiArIyAgICAgdGhlIGR5bmFtaWMgZGlz YWJsaW5nIG9mIHRoZSBGQUtFX1NUQVQgY2FsbHMuCj4gKyMKPiArIyBCeSBkZWZhdWx0LCBsaWJm YWtldGltZSB3aWxsIGJlIGNvbXBpbGVkIGZvciB5b3VyIHN5c3RlbSdzIGRlZmF1bHQgYXJjaGl0 ZWN0dXJlLgo+ICsjIFRvIGJ1aWxkIDMyLWJpdCBsaWJyYXJpZXMgYW5kIGJpbmFyaWVzLCBhZGQg LW0zMiB0byBDRkxBR1MgYW5kIExERkxBR1MuCj4gKyMKPiArIyBDaGFuZ2UgUFJFRklYIHRvIHdo ZXJlIHlvdSB3YW50IGxpYmZha2V0aW1lIChsaWJyYXJpZXMgYW5kIHdyYXBwZXIgYmluYXJ5KSBp bnN0YWxsZWQuCj4gKyMgTElCRElSTkFNRSBpcyByZWxhdGl2ZSB0byBQUkVGSVguIFRoZSBkZWZh dWx0IGlzIHRvIGluc3RhbGwgaW50byAkUFJFRklYL2xpYi9mYWtldGltZSwKPiArIyBidXQgeW91 IGNhbiBzZXQgTElCRElSTkFNRSB0bywgZS5nLiwgL2xpYjY0IGlmIHlvdSB3YW50IHRvIGluc3Rh bGwgaXQgZWxzZXdoZXJlLgo+ICsjIExJQkRJUk5BTUUgaGFzIGJlZW4gaW50cm9kdWNlZCB0byBz dXBwb3J0IE11bHRpTGliIHN5c3RlbXMuIFBsZWFzZSBkbyBub3QgY2hhbmdlIHRoZSAKPiArIyBk ZWZhdWx0IHZhbHVlIG9uIE11bHRpQXJjaCBzeXN0ZW1zLiAKPiArIwo+ICsjIEZvciB0ZXN0aW5n IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aXRob3V0IGluc3RhbGxhdGlvbiwgdHJ5IG1ha2Ug UFJFRklYPSBMSUJESVJOQU1FPScuJwo+ICsKPiArQ0MgPz0gZ2NjCj4gK0lOU1RBTEwgPz0gaW5z dGFsbAo+ICsKPiArUFJFRklYID89IC91c3IvbG9jYWwKPiArTElCRElSTkFNRSA/PSAvbGliL2Zh a2V0aW1lCj4gK1BMQVRGT1JNID89JChzaGVsbCB1bmFtZSkKPiArCj4gK0NGTEFHUyArPSAtc3Rk PWdudTk5IC1XYWxsIC1XZXh0cmEgLVdlcnJvciAtV25vLW5vbm51bGwtY29tcGFyZSAtREZBS0Vf U1RBVCAtREZBS0VfU0xFRVAgLURGQUtFX1RJTUVSUyAtREZBS0VfSU5URVJOQUxfQ0FMTFMgLWZQ SUMgLURQUkVGSVg9JyInJChQUkVGSVgpJyInIC1ETElCRElSTkFNRT0nIickKExJQkRJUk5BTUUp JyInCj4gK2lmZXEgKCQoUExBVEZPUk0pLFN1bk9TKQo+ICtDRkxBR1MgKz0gLURfX0VYVEVOU0lP TlNfXyAtRF9YT1BFTl9TT1VSQ0U9NjAwCj4gK2VuZGlmCj4gKwo+ICtMSUJfTERGTEFHUyArPSAt c2hhcmVkCj4gKwo+ICtMREZMQUdTICs9IC1scHRocmVhZAo+ICtpZm5lcSAoJChQTEFURk9STSks U3VuT1MpCj4gK0xERkxBR1MgKz0gLVdsLC0tdmVyc2lvbi1zY3JpcHQ9bGliZmFrZXRpbWUubWFw Cj4gK2VuZGlmCj4gKwo+ICtMREFERCArPSAtbGRsIC1sbSAtbHJ0Cj4gK0JJTl9MREZMQUdTICs9 IC1scnQKPiArCj4gK1NSQyA9IGxpYmZha2V0aW1lLmMKPiArTElCU19PQkogPSBsaWJmYWtldGlt ZS5vIGxpYmZha2V0aW1lTVQubwo+ICtCSU5TID0gZmFrZXRpbWUKPiArCj4gK1NPTkFNRSA9IDEK PiArTElCUyA9IGxpYmZha2V0aW1lLnNvLiR7U09OQU1FfSBsaWJmYWtldGltZU1ULnNvLiR7U09O QU1FfQo+ICsKPiArYWxsOiAke0xJQlN9ICR7QklOU30KPiArCj4gK2xpYmZha2V0aW1lTVQubzog RVhUUkFfRkxBR1MgOj0gLURQVEhSRUFEIC1EUFRIUkVBRF9TSU5HTEVUSFJFQURFRF9USU1FCj4g Kwo+ICske0xJQlNfT0JKfTogbGliZmFrZXRpbWUuYwo+ICsJJHtDQ30gLW8gJEAgLWMgJHtDRkxB R1N9ICR7RVhUUkFfRkxBR1N9ICQ8Cj4gKwo+ICslLnNvLiR7U09OQU1FfTogJS5vIGxpYmZha2V0 aW1lLm1hcAo+ICsJJHtDQ30gLW8gJEAgLVdsLC1zb25hbWUsJEAgJHtMREZMQUdTfSAke0xJQl9M REZMQUdTfSAkPCAke0xEQUREfQo+ICsKPiArJHtCSU5TfTogZmFrZXRpbWUuYwo+ICsJJHtDQ30g LW8gJEAgJHtDRkxBR1N9ICR7RVhUUkFfRkxBR1N9ICQ8ICR7TERGTEFHU30gJHtCSU5fTERGTEFH U30KPiArCj4gK2NsZWFuOgo+ICsJQHJtIC1mICR7TElCU19PQkp9ICR7TElCU30gJHtCSU5TfQo+ ICsKPiArZGlzdGNsZWFuOiBjbGVhbgo+ICsJQGVjaG8KPiArCj4gK2luc3RhbGw6ICR7TElCU30g JHtCSU5TfQo+ICsJQGVjaG8KPiArCUBlY2hvICJDb3B5aW5nIHRoZSBmYWtldGltZSBsaWJyYXJp ZXMgdG8gJHtERVNURElSfSR7UFJFRklYfSR7TElCRElSTkFNRX0gYW5kIHRoZSBmYWtldGltZSB3 cmFwcGVyIHNjcmlwdCB0byAke0RFU1RESVJ9JHtQUkVGSVh9L2JpbiAuLi4iCj4gKwkkKElOU1RB TEwpIC1kbTA3NTUgIiR7REVTVERJUn0ke1BSRUZJWH0ke0xJQkRJUk5BTUV9LyIKPiArCSQoSU5T VEFMTCkgLW0wNjQ0ICR7TElCU30gIiR7REVTVERJUn0ke1BSRUZJWH0ke0xJQkRJUk5BTUV9LyIK PiArCSQoSU5TVEFMTCkgLURtMDc1NSBmYWtldGltZSAiJHtERVNURElSfSR7UFJFRklYfS9iaW4v ZmFrZXRpbWUiCj4gKwo+ICt1bmluc3RhbGw6Cj4gKwlmb3IgZiBpbiAke0xJQlN9OyBkbyBybSAt ZiAiJHtERVNURElSfSR7UFJFRklYfSR7TElCRElSTkFNRX0vJCRmIjsgZG9uZQo+ICsJcm1kaXIg IiR7REVTVERJUn0ke1BSRUZJWH0ke0xJQkRJUk5BTUV9Igo+ICsJcm0gLWYgIiR7REVTVERJUn0k e1BSRUZJWH0vYmluL2Zha2V0aW1lIgo+ICsKPiArLlBIT05ZOiBhbGwgY2xlYW4gZGlzdGNsZWFu IGluc3RhbGwgdW5pbnN0YWxsCj4gZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliZmFrZXRpbWUvZmFr ZXRpbWUuYyBiL3NjcmlwdHMvbGliZmFrZXRpbWUvZmFrZXRpbWUuYwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMTM4ZWJiZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9z Y3JpcHRzL2xpYmZha2V0aW1lL2Zha2V0aW1lLmMKPiBAQCAtMCwwICsxLDM4NSBAQAo+ICsvKgo+ ICsgKiAgbGliZmFrZXRpbWUgd3JhcHBlciBjb21tYW5kCj4gKyAqCj4gKyAqICBUaGlzIGZpbGUg aXMgcGFydCBvZiBsaWJmYWtldGltZSwgdmVyc2lvbiAwLjkuNwo+ICsgKgo+ICsgKiAgbGliZmFr ZXRpbWUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeSBpdAo+ICsgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2MiBhcyBwdWJsaXNoZWQgYnkgdGhlCj4gKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCj4gKyAqCj4gKyAqICBsaWJmYWtldGltZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAo+ICsgKiAgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9y Cj4gKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCj4gKyAqICBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2MiBhbG9uZwo+ICsgKiAgd2l0aCB0aGUgbGliZmFrZXRpbWU7IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKPiArICogIEluYy4sIDU5IFRl bXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKPiArICoK PiArICogQ29udmVydGVkIGZyb20gc2hlbGwgc2NyaXB0IGJ5IEJhbGludCBSZWN6ZXkgd2l0aCB0 aGUgZm9sbG93aW5nIGNyZWRpdHMKPiArICogYW5kIGNvbW1lbnRzOgo+ICsgKgo+ICsgKiBUaGFu a3MgdG8gRGFuaWVsIEthaG4gR2lsbG1vciBmb3IgaW1wcm92ZW1lbnQgc3VnZ2VzdGlvbnMuCj4g Kwo+ICsgKiBUaGlzIHdyYXBwZXIgZXhwb3NlcyBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIHRoZSBs aWJmYWtldGltZSBmdW5jdGlvbmFsaXR5Lgo+ICsgKiBQbGVhc2Ugc2VlIGxpYmZha2V0aW1lJ3Mg UkVBRE1FIGZpbGUgYW5kIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCj4gKwo+ICsgKiBBY2tu b3dsZWRnbWVudDogUGFydHMgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyB3cmFwcGVyIGhh dmUgYmVlbgo+ICsgKiBpbnNwaXJlZCBieSBNYXR0aGlhcyBVcmxpY2hzJyBkYXRlZnVkZ2UgMS4x NC4KPiArCj4gKyAqIENvbXBpbGUgdGltZSBjb25maWd1cmF0aW9uOiBQYXRoIHdoZXJlIHRoZSBs aWJmYWtldGltZSBsaWJyYXJpZXMgY2FuIGJlIGZvdW5kCj4gKyAqIG9uIExpbnV4L1VOSVgKPiAr ICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiArI2luY2x1ZGUgPHVuaXN0ZC5o Pgo+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gKyNpbmNs dWRlIDxzdGRpbnQuaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8dGltZS5o Pgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gKyNpbmNs dWRlIDxzeXMvdHlwZXMuaD4KPiArI2luY2x1ZGUgPHN5cy93YWl0Lmg+Cj4gKyNpbmNsdWRlIDxz eXMvbW1hbi5oPgo+ICsjaW5jbHVkZSA8c2VtYXBob3JlLmg+Cj4gKwo+ICsjaW5jbHVkZSAiZmFr ZXRpbWVfY29tbW9uLmgiCj4gKwo+ICtjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIwLjkuNyI7Cj4g Kwo+ICsjaWZkZWYgX19BUFBMRV9fCj4gK3N0YXRpYyBjb25zdCBjaGFyICpkYXRlX2NtZCA9ICJn ZGF0ZSI7Cj4gKyNlbHNlCj4gK3N0YXRpYyBjb25zdCBjaGFyICpkYXRlX2NtZCA9ICJkYXRlIjsK PiArI2VuZGlmCj4gKwo+ICsjZGVmaW5lIFBBVEhfQlVGU0laRSA0MDk2Cj4gKwo+ICsvKiBzZW1h cGhvcmUgYW5kIHNoYXJlZCBtZW1vcnkgbmFtZXMgKi8KPiArY2hhciBzZW1fbmFtZVtQQVRIX0JV RlNJWkVdID0gezB9LCBzaG1fbmFtZVtQQVRIX0JVRlNJWkVdID0gezB9Owo+ICsKPiArdm9pZCB1 c2FnZShjb25zdCBjaGFyICpuYW1lKQo+ICt7Cj4gKyAgcHJpbnRmKCJcbiIKPiArICAiVXNhZ2U6 ICVzIFtzd2l0Y2hlc10gPHRpbWVzdGFtcD4gPHByb2dyYW0gd2l0aCBhcmd1bWVudHM+XG4iCj4g KyAgIlxuIgo+ICsgICJUaGlzIHdpbGwgcnVuIHRoZSBzcGVjaWZpZWQgJ3Byb2dyYW0nIHdpdGgg dGhlIGdpdmVuICdhcmd1bWVudHMnLlxuIgo+ICsgICJUaGUgcHJvZ3JhbSB3aWxsIGJlIHRyaWNr ZWQgaW50byBzZWVpbmcgdGhlIGdpdmVuICd0aW1lc3RhbXAnIGFzIGl0cyBzdGFydGluZyBkYXRl IGFuZCB0aW1lLlxuIgo+ICsgICJUaGUgY2xvY2sgd2lsbCBjb250aW51ZSB0byBydW4gZnJvbSB0 aGlzIHRpbWVzdGFtcC4gUGxlYXNlIHNlZSB0aGUgbWFucGFnZSAobWFuIGZha2V0aW1lKVxuIgo+ ICsgICJmb3IgYWR2YW5jZWQgb3B0aW9ucywgc3VjaCBhcyBzdG9wcGluZyB0aGUgd2FsbCBjbG9j ayBhbmQgbWFrZSBpdCBydW4gZmFzdGVyIG9yIHNsb3dlci5cbiIKPiArICAiXG4iCj4gKyAgIlRo ZSBvcHRpb25hbCBzd2l0Y2hlcyBhcmU6XG4iCj4gKyAgIiAgLW0gICAgICAgICAgICAgICAgICA6 IFVzZSB0aGUgbXVsdGktdGhyZWFkZWQgdmVyc2lvbiBvZiBsaWJmYWtldGltZVxuIgo+ICsgICIg IC1mICAgICAgICAgICAgICAgICAgOiBVc2UgdGhlIGFkdmFuY2VkIHRpbWVzdGFtcCBzcGVjaWZp Y2F0aW9uIGZvcm1hdCAoc2VlIG1hbnBhZ2UpXG4iCj4gKyAgIiAgLS1leGNsdWRlLW1vbm90b25p YyA6IFByZXZlbnQgbW9ub3RvbmljIGNsb2NrIGZyb20gZHJpZnRpbmcgKG5vdCB0aGUgcmF3IG1v bm90b25pYyBvbmUpXG4iCj4gKyAgIlxuIgo+ICsgICJFeGFtcGxlczpcbiIKPiArICAiJXMgJ2xh c3QgZnJpZGF5IDUgcG0nIC9iaW4vZGF0ZVxuIgo+ICsgICIlcyAnMjAwOC0xMi0yNCAwODoxNTo0 MicgL2Jpbi9kYXRlXG4iCj4gKyAgIiVzIC1mICcrMiw1eSB4MTAsMCcgL2Jpbi9iYXNoIC1jICdk YXRlOyB3aGlsZSB0cnVlOyBkbyBlY2hvICRTRUNPTkRTIDsgc2xlZXAgMSA7IGRvbmUnXG4iCj4g KyAgIiVzIC1mICcrMiw1eSB4MCw1MCcgL2Jpbi9iYXNoIC1jICdkYXRlOyB3aGlsZSB0cnVlOyBk byBlY2hvICRTRUNPTkRTIDsgc2xlZXAgMSA7IGRvbmUnXG4iCj4gKyAgIiVzIC1mICcrMiw1eSBp MiwwJyAvYmluL2Jhc2ggLWMgJ2RhdGU7IHdoaWxlIHRydWU7IGRvIGRhdGU7IHNsZWVwIDEgOyBk b25lJ1xuIgo+ICsgICJJbiB0aGlzIHNpbmdsZSBjYXNlIGFsbCBzcGF3bmVkIHByb2Nlc3NlcyB3 aWxsIHVzZSB0aGUgc2FtZSBnbG9iYWwgY2xvY2tcbiIKPiArICAid2l0aG91dCByZXN0YXJ0aW5n IGl0IGF0IHRoZSBzdGFydCBvZiBlYWNoIHByb2Nlc3MuXG5cbiIKPiArICAiKFBsZWFzZSBub3Rl IHRoYXQgaXQgZGVwZW5kcyBvbiB5b3VyIGxvY2FsZSBzZXR0aW5ncyB3aGV0aGVyIC4gb3IgLCBo YXMgdG8gYmUgdXNlZCBmb3IgZnJhY3Rpb25zKVxuIgo+ICsgICJcbiIsIG5hbWUsIG5hbWUsIG5h bWUsIG5hbWUsIG5hbWUsIG5hbWUpOwo+ICt9Cj4gKwo+ICsvKiogQ2xlYW4gdXAgc2hhcmVkIG9i amVjdHMgKi8KPiArc3RhdGljIHZvaWQgY2xlYW51cF9zaG9ianMoKQo+ICt7Cj4gKyAgaWYgKC0x ID09IHNlbV91bmxpbmsoc2VtX25hbWUpKQo+ICsgIHsKPiArICAgIHBlcnJvcigic2VtX3VubGlu ayIpOwo+ICsgIH0KPiArICBpZiAoLTEgPT0gc2htX3VubGluayhzaG1fbmFtZSkpCj4gKyAgewo+ ICsgICAgcGVycm9yKCJzaG1fdW5saW5rIik7Cj4gKyAgfQo+ICt9Cj4gKwo+ICtpbnQgbWFpbiAo aW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICt7Cj4gKyAgcGlkX3QgY2hpbGRfcGlkOwo+ICsgIGlu dCBjdXJyX29wdCA9IDE7Cj4gKyAgYm9vbCB1c2VfbXQgPSBmYWxzZSwgdXNlX2RpcmVjdCA9IGZh bHNlOwo+ICsgIGxvbmcgb2Zmc2V0Owo+ICsKPiArICB3aGlsZShjdXJyX29wdCA8IGFyZ2MpCj4g KyAgewo+ICsgICAgaWYgKDAgPT0gc3RyY21wKGFyZ3ZbY3Vycl9vcHRdLCAiLW0iKSkKPiArICAg IHsKPiArICAgICAgdXNlX210ID0gdHJ1ZTsKPiArICAgICAgY3Vycl9vcHQrKzsKPiArICAgICAg Y29udGludWU7Cj4gKyAgICB9Cj4gKyAgICBlbHNlIGlmICgwID09IHN0cmNtcChhcmd2W2N1cnJf b3B0XSwgIi1mIikpCj4gKyAgICB7Cj4gKyAgICAgIHVzZV9kaXJlY3QgPSB0cnVlOwo+ICsgICAg ICBjdXJyX29wdCsrOwo+ICsgICAgICBjb250aW51ZTsKPiArICAgIH0KPiArICAgIGVsc2UgaWYg KDAgPT0gc3RyY21wKGFyZ3ZbY3Vycl9vcHRdLCAiLS1leGNsdWRlLW1vbm90b25pYyIpKQo+ICsg ICAgewo+ICsgICAgICBzZXRlbnYoIkRPTlRfRkFLRV9NT05PVE9OSUMiLCAiMSIsIHRydWUpOwo+ ICsgICAgICBjdXJyX29wdCsrOwo+ICsgICAgICBjb250aW51ZTsKPiArICAgIH0KPiArICAgIGVs c2UgaWYgKCgwID09IHN0cmNtcChhcmd2W2N1cnJfb3B0XSwgIi12IikpIHx8Cj4gKyAgICAgICAg ICAgICAoMCA9PSBzdHJjbXAoYXJndltjdXJyX29wdF0sICItLXZlcnNpb24iKSkpCj4gKyAgICB7 Cj4gKyAgICAgIHByaW50ZigiXG4lczogVmVyc2lvbiAlc1xuIgo+ICsgICAgICAgICAiRm9yIHVz YWdlIGluZm9ybWF0aW9uIHBsZWFzZSB1c2UgJyVzIC0taGVscCcuXG4iLAo+ICsgICAgICAgICBh cmd2WzBdLCB2ZXJzaW9uLCBhcmd2WzBdKTsKPiArICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOwo+ ICsgICAgfQo+ICsgICAgZWxzZSBpZiAoKDAgPT0gc3RyY21wKGFyZ3ZbY3Vycl9vcHRdLCAiLWgi KSkgfHwKPiArICAgICAgICAgICAgICgwID09IHN0cmNtcChhcmd2W2N1cnJfb3B0XSwgIi0/Iikp IHx8Cj4gKyAgICAgICAgICAgICAoMCA9PSBzdHJjbXAoYXJndltjdXJyX29wdF0sICItLWhlbHAi KSkpCj4gKyAgICB7Cj4gKyAgICAgIHVzYWdlKGFyZ3ZbMF0pOwo+ICsgICAgICBleGl0KEVYSVRf U1VDQ0VTUyk7Cj4gKyAgICB9Cj4gKyAgICBlbHNlCj4gKyAgICB7Cj4gKyAgICAgIC8qIHdlIHBh cnNlZCBhbGwgb3B0aW9ucyAqLwo+ICsgICAgICBicmVhazsKPiArICAgIH0KPiArICB9Cj4gKwo+ ICsgIC8qIHdlIG5lZWQgYXQgbGVhc3QgYSB0aW1lc3RhbXAgc3RyaW5nIGFuZCBhIGNvbW1hbmQg dG8gcnVuICovCj4gKyAgaWYgKGFyZ2MgLSBjdXJyX29wdCA8IDIpCj4gKyAgewo+ICsgICAgdXNh Z2UoYXJndlswXSk7Cj4gKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAgfQo+ICsKPiArICBp ZiAoIXVzZV9kaXJlY3QpCj4gKyAgewo+ICsgICAgLy8gVE9ETyBnZXQgc2Vjb25kcwo+ICsgICAg aW50IHBmZHNbMl07Cj4gKyAgICAodm9pZCkgKHBpcGUocGZkcykgKyAxKTsKPiArICAgIGludCBy ZXQgPSBFWElUX1NVQ0NFU1M7Cj4gKwo+ICsgICAgaWYgKDAgPT0gKGNoaWxkX3BpZCA9IGZvcmso KSkpCj4gKyAgICB7Cj4gKyAgICAgIGNsb3NlKDEpOyAgICAgICAvKiBjbG9zZSBub3JtYWwgc3Rk b3V0ICovCj4gKyAgICAgICh2b2lkKSAoZHVwKHBmZHNbMV0pICsgMSk7ICAgLyogbWFrZSBzdGRv dXQgc2FtZSBhcyBwZmRzWzFdICovCj4gKyAgICAgIGNsb3NlKHBmZHNbMF0pOyAvKiB3ZSBkb24n dCBuZWVkIHRoaXMgKi8KPiArICAgICAgaWYgKEVYSVRfU1VDQ0VTUyAhPSBleGVjbHAoZGF0ZV9j bWQsIGRhdGVfY21kLCAiLWQiLCBhcmd2W2N1cnJfb3B0XSwgIislcyIsKGNoYXIgKikgTlVMTCkp Cj4gKyAgICAgIHsKPiArICAgICAgICBwZXJyb3IoIlJ1bm5pbmcgKGcpZGF0ZSBmYWlsZWQiKTsK PiArICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAgICAgIH0KPiArICAgIH0KPiArICAg IGVsc2UKPiArICAgIHsKPiArICAgICAgY2hhciBidWZbMjU2XSA9IHswfTsgLyogZSB3aWxsIGhh dmUgd2F5IGxlc3MgdGhhbiAyNTYgZGlnaXRzICovCj4gKyAgICAgIGNsb3NlKHBmZHNbMV0pOyAg IC8qIHdlIHdvbid0IHdyaXRlIHRvIHRoaXMgKi8KPiArICAgICAgKHZvaWQpIChyZWFkKHBmZHNb MF0sIGJ1ZiwgMjU2KSArIDEpOwo+ICsgICAgICB3YWl0cGlkKGNoaWxkX3BpZCwgJnJldCwgMCk7 Cj4gKyAgICAgIGlmIChyZXQgIT0gRVhJVF9TVUNDRVNTKQo+ICsgICAgICB7Cj4gKyAgICAgICAg cHJpbnRmKCJFcnJvcjogVGltZXN0YW1wIHRvIGZha2Ugbm90IHJlY29nbml6ZWQsIHBsZWFzZSBy ZS10cnkgd2l0aCBhICIKPiArICAgICAgICAgICAgICAgImRpZmZlcmVudCB0aW1lc3RhbXAuXG4i KTsKPiArICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAgICAgIH0KPiArICAgICAgb2Zm c2V0ID0gYXRvbChidWYpIC0gdGltZShOVUxMKTsKPiArICAgICAgcmV0ID0gc25wcmludGYoYnVm LCBzaXplb2YoYnVmKSwgIiVzJWxkIiwgKG9mZnNldCA+PSAwKT8iKyI6IiIsIG9mZnNldCk7Cj4g KyAgICAgIHNldGVudigiRkFLRVRJTUUiLCBidWYsIHRydWUpOwo+ICsgICAgICBjbG9zZShwZmRz WzBdKTsgLyogZmluaXNoZWQgcmVhZGluZyAqLwo+ICsgICAgfQo+ICsgIH0KPiArICBlbHNlCj4g KyAgewo+ICsgICAgLyogc2ltcGx5IHBhc3MgZm9ybWF0IHN0cmluZyBhbG9uZyAqLwo+ICsgICAg c2V0ZW52KCJGQUtFVElNRSIsIGFyZ3ZbY3Vycl9vcHRdLCB0cnVlKTsKPiArICB9Cj4gKyAgaW50 IGtlZXBhbGl2ZV9mZHNbMl07Cj4gKyAgKHZvaWQpIChwaXBlKGtlZXBhbGl2ZV9mZHMpICsgMSk7 Cj4gKwo+ICsgIC8qIHdlIGp1c3QgY29uc3VtZWQgdGhlIHRpbWVzdGFtcCBvcHRpb24gKi8KPiAr ICBjdXJyX29wdCsrOwo+ICsKPiArICB7Cj4gKyAgICAvKiBjcmVhdGUgc2VtYXBob3JlcyBhbmQg c2hhcmVkIG1lbW9yeSAqLwo+ICsgICAgaW50IHNobV9mZDsKPiArICAgIHNlbV90ICpzZW07Cj4g KyAgICBzdHJ1Y3QgZnRfc2hhcmVkX3MgKmZ0X3NoYXJlZDsKPiArICAgIGNoYXIgc2hhcmVkX29i anNbUEFUSF9CVUZTSVpFXTsKPiArCj4gKyAgICAvKgo+ICsgICAgICogQ2FzdGluZyBvZiBnZXRw aWQoKSByZXR1cm4gdmFsdWUgdG8gbG9uZyBuZWVkZWQgdG8gbWFrZSBHQ0Mgb24gU21hcnRPUwo+ ICsgICAgICogaGFwcHksIHNpbmNlIGdldHBpZCdzIHJldHVybiB2YWx1ZSdzIHR5cGUgb24gU21h cnRPUyBpcyBsb25nLiBTaW5jZQo+ICsgICAgICogZ2V0cGlkJ3MgcmV0dXJuIHZhbHVlJ3MgdHlw ZSBpcyBpbnQgb24gbW9zdCBvdGhlciBzeXN0ZW1zLCBhbmQgdGhhdAo+ICsgICAgICogc2l6ZW9m KGxvbmcpIGFsd2F5cyA+PSBzaXplb2YoaW50KSwgdGhpcyB3b3JrcyBvbiBhbGwgcGxhdGZvcm1z IHdpdGhvdXQKPiArICAgICAqIHRoZSBuZWVkIGZvciBjcmF6eSAjaWZkZWZzLgo+ICsgICAgICov Cj4gKyAgICBzbnByaW50ZihzZW1fbmFtZSwgUEFUSF9CVUZTSVpFIC0xICwiL2Zha2V0aW1lX3Nl bV8lbGQiLCAobG9uZylnZXRwaWQoKSk7Cj4gKyAgICBzbnByaW50ZihzaG1fbmFtZSwgUEFUSF9C VUZTSVpFIC0xICwiL2Zha2V0aW1lX3NobV8lbGQiLCAobG9uZylnZXRwaWQoKSk7Cj4gKwo+ICsg ICAgaWYgKFNFTV9GQUlMRUQgPT0gKHNlbSA9IHNlbV9vcGVuKHNlbV9uYW1lLCBPX0NSRUFUfE9f RVhDTCwgU19JV1VTUnxTX0lSVVNSLCAxKSkpCj4gKyAgICB7Cj4gKyAgICAgIHBlcnJvcigic2Vt X29wZW4iKTsKPiArICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsgICAgfQo+ICsKPiArICAg IC8qIGNyZWF0ZSBzaG0gKi8KPiArICAgIGlmICgtMSA9PSAoc2htX2ZkID0gc2htX29wZW4oc2ht X25hbWUsIE9fQ1JFQVR8T19FWENMfE9fUkRXUiwgU19JV1VTUnxTX0lSVVNSKSkpCj4gKyAgICB7 Cj4gKyAgICAgIHBlcnJvcigic2htX29wZW4iKTsKPiArICAgICAgaWYgKC0xID09IHNlbV91bmxp bmsoYXJndlsyXSkpCj4gKyAgICAgIHsKPiArICAgICAgICBwZXJyb3IoInNlbV91bmxpbmsiKTsK PiArICAgICAgfQo+ICsgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgLyogc2V0IHNobSBzaXplICovCj4gKyAgICBpZiAoLTEgPT0gZnRydW5jYXRlKHNobV9mZCwg c2l6ZW9mKHVpbnQ2NF90KSkpCj4gKyAgICB7Cj4gKyAgICAgIHBlcnJvcigiZnRydW5jYXRlIik7 Cj4gKyAgICAgIGNsZWFudXBfc2hvYmpzKCk7Cj4gKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsK PiArICAgIH0KPiArCj4gKyAgICAvKiBtYXAgc2htICovCj4gKyAgICBpZiAoTUFQX0ZBSUxFRCA9 PSAoZnRfc2hhcmVkID0gbW1hcChOVUxMLCBzaXplb2Yoc3RydWN0IGZ0X3NoYXJlZF9zKSwgUFJP VF9SRUFEfFBST1RfV1JJVEUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9TSEFSRUQs IHNobV9mZCwgMCkpKQo+ICsgICAgewo+ICsgICAgICBwZXJyb3IoIm1tYXAiKTsKPiArICAgICAg Y2xlYW51cF9zaG9ianMoKTsKPiArICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsgICAgfQo+ ICsKPiArICAgIGlmIChzZW1fd2FpdChzZW0pID09IC0xKQo+ICsgICAgewo+ICsgICAgICBwZXJy b3IoInNlbV93YWl0Iik7Cj4gKyAgICAgIGNsZWFudXBfc2hvYmpzKCk7Cj4gKyAgICAgIGV4aXQo RVhJVF9GQUlMVVJFKTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBpbml0IGVsYXBzZWQgdGltZSB0 aWNrcyB0byB6ZXJvICovCj4gKyAgICBmdF9zaGFyZWQtPnRpY2tzID0gMDsKPiArICAgIGZ0X3No YXJlZC0+ZmlsZV9pZHggPSAwOwo+ICsgICAgZnRfc2hhcmVkLT5zdGFydF90aW1lLnJlYWwudHZf c2VjID0gMDsKPiArICAgIGZ0X3NoYXJlZC0+c3RhcnRfdGltZS5yZWFsLnR2X25zZWMgPSAtMTsK PiArICAgIGZ0X3NoYXJlZC0+c3RhcnRfdGltZS5tb24udHZfc2VjID0gMDsKPiArICAgIGZ0X3No YXJlZC0+c3RhcnRfdGltZS5tb24udHZfbnNlYyA9IC0xOwo+ICsgICAgZnRfc2hhcmVkLT5zdGFy dF90aW1lLm1vbl9yYXcudHZfc2VjID0gMDsKPiArICAgIGZ0X3NoYXJlZC0+c3RhcnRfdGltZS5t b25fcmF3LnR2X25zZWMgPSAtMTsKPiArCj4gKyAgICBpZiAoLTEgPT0gbXVubWFwKGZ0X3NoYXJl ZCwgKHNpemVvZihzdHJ1Y3QgZnRfc2hhcmVkX3MpKSkpCj4gKyAgICB7Cj4gKyAgICAgIHBlcnJv cigibXVubWFwIik7Cj4gKyAgICAgIGNsZWFudXBfc2hvYmpzKCk7Cj4gKyAgICAgIGV4aXQoRVhJ VF9GQUlMVVJFKTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoc2VtX3Bvc3Qoc2VtKSA9PSAtMSkK PiArICAgIHsKPiArICAgICAgcGVycm9yKCJzZW1vcCIpOwo+ICsgICAgICBjbGVhbnVwX3Nob2Jq cygpOwo+ICsgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc25w cmludGYoc2hhcmVkX29ianMsIFBBVEhfQlVGU0laRSwgIiVzICVzIiwgc2VtX25hbWUsIHNobV9u YW1lKTsKPiArICAgIHNldGVudigiRkFLRVRJTUVfU0hBUkVEIiwgc2hhcmVkX29ianMsIHRydWUp Owo+ICsgICAgc2VtX2Nsb3NlKHNlbSk7Cj4gKyAgfQo+ICsKPiArICB7Cj4gKyAgICBjaGFyICpm dHBsX3BhdGg7Cj4gKyNpZmRlZiBfX0FQUExFX18KPiArICAgIGZ0cGxfcGF0aCA9IFBSRUZJWCAi L2xpYmZha2V0aW1lLjEuZHlsaWIiOwo+ICsgICAgRklMRSAqY2hlY2s7Cj4gKyAgICBjaGVjayA9 IGZvcGVuKGZ0cGxfcGF0aCwgInJvIik7Cj4gKyAgICBpZiAoY2hlY2sgPT0gTlVMTCkKPiArICAg IHsKPiArICAgICAgZnRwbF9wYXRoID0gUFJFRklYICIvbGliL2Zha2V0aW1lL2xpYmZha2V0aW1l LjEuZHlsaWIiOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsgICAgICBmY2xvc2Uo Y2hlY2spOwo+ICsgICAgfQo+ICsgICAgc2V0ZW52KCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBm dHBsX3BhdGgsIHRydWUpOwo+ICsgICAgc2V0ZW52KCJEWUxEX0ZPUkNFX0ZMQVRfTkFNRVNQQUNF IiwgIjEiLCB0cnVlKTsKPiArI2Vsc2UKPiArICAgIHsKPiArICAgICAgY2hhciAqbGRfcHJlbG9h ZF9uZXcsICpsZF9wcmVsb2FkID0gZ2V0ZW52KCJMRF9QUkVMT0FEIik7Cj4gKyAgICAgIHNpemVf dCBsZW47Cj4gKyAgICAgIGlmICh1c2VfbXQpCj4gKyAgICAgIHsKPiArICAgICAgICAvKgo+ICsg ICAgICAgICAqIG9uIE11bHRpQXJjaCBwbGF0Zm9ybXMsIHN1Y2ggYXMgRGViaWFuLCB3ZSBwdXQg YSBsaXRlcmFsICRMSUIgaW50byBMRF9QUkVMT0FELgo+ICsgICAgICAgICAqLwo+ICsjaWZuZGVm IE1VTFRJX0FSQ0gKPiArICAgICAgICBmdHBsX3BhdGggPSBQUkVGSVggTElCRElSTkFNRSAiL2xp YmZha2V0aW1lTVQuc28uMSI7Cj4gKyNlbHNlCj4gKyAgICAgICAgZnRwbF9wYXRoID0gUFJFRklY ICIvJExJQi9mYWtldGltZS9saWJmYWtldGltZU1ULnNvLjEiOwo+ICsjZW5kaWYKPiArICAgICAg fQo+ICsgICAgICBlbHNlCj4gKyAgICAgIHsKPiArI2lmbmRlZiBNVUxUSV9BUkNICj4gKyAgICAg ICAgZnRwbF9wYXRoID0gUFJFRklYIExJQkRJUk5BTUUgIi9saWJmYWtldGltZS5zby4xIjsKPiAr I2Vsc2UKPiArICAgICAgICBmdHBsX3BhdGggPSBQUkVGSVggIi8kTElCL2Zha2V0aW1lL2xpYmZh a2V0aW1lLnNvLjEiOwo+ICsjZW5kaWYKPiArICAgICAgfQo+ICsgICAgICBsZW4gPSAoKGxkX3By ZWxvYWQpP3N0cmxlbihsZF9wcmVsb2FkKSArIDE6IDApICsgMSArIHN0cmxlbihmdHBsX3BhdGgp Owo+ICsgICAgICBsZF9wcmVsb2FkX25ldyA9IG1hbGxvYyhsZW4pOwo+ICsgICAgICBzbnByaW50 ZihsZF9wcmVsb2FkX25ldywgbGVuICwiJXMlcyVzIiwgKGxkX3ByZWxvYWQpP2xkX3ByZWxvYWQ6 IiIsCj4gKyAgICAgICAgICAgICAgKGxkX3ByZWxvYWQpPyI6IjoiIiwgZnRwbF9wYXRoKTsKPiAr ICAgICAgc2V0ZW52KCJMRF9QUkVMT0FEIiwgbGRfcHJlbG9hZF9uZXcsIHRydWUpOwo+ICsgICAg ICBmcmVlKGxkX3ByZWxvYWRfbmV3KTsKPiArICAgIH0KPiArI2VuZGlmCj4gKyAgfQo+ICsKPiAr ICAvKiBydW4gY29tbWFuZCBhbmQgY2xlYW4gdXAgc2hhcmVkIG9iamVjdHMgKi8KPiArICBpZiAo MCA9PSAoY2hpbGRfcGlkID0gZm9yaygpKSkKPiArICB7Cj4gKyAgICBjbG9zZShrZWVwYWxpdmVf ZmRzWzBdKTsgLyogb25seSBwYXJlbnQgbmVlZHMgdG8gcmVhZCB0aGlzICovCj4gKyAgICBpZiAo RVhJVF9TVUNDRVNTICE9IGV4ZWN2cChhcmd2W2N1cnJfb3B0XSwgJmFyZ3ZbY3Vycl9vcHRdKSkK PiArICAgIHsKPiArICAgICAgcGVycm9yKCJSdW5uaW5nIHNwZWNpZmllZCBjb21tYW5kIGZhaWxl ZCIpOwo+ICsgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAgICB9Cj4gKyAgfQo+ICsgIGVs c2UKPiArICB7Cj4gKyAgICBpbnQgcmV0Owo+ICsgICAgY2hhciBidWY7Cj4gKyAgICBjbG9zZShr ZWVwYWxpdmVfZmRzWzFdKTsgLyogb25seSBjaGlsZHJlbiBuZWVkIGtlZXAgdGhpcyBvcGVuICov Cj4gKyAgICB3YWl0cGlkKGNoaWxkX3BpZCwgJnJldCwgMCk7Cj4gKyAgICAodm9pZCkgKHJlYWQo a2VlcGFsaXZlX2Zkc1swXSwgJmJ1ZiwgMSkgKyAxKTsgLyogcmVhZHMgMEIgd2hlbiBhbGwgY2hp bGRyZW4gZXhpdCAqLwo+ICsgICAgY2xlYW51cF9zaG9ianMoKTsKPiArICAgIGlmIChXSUZTSUdO QUxFRChyZXQpKQo+ICsgICAgewo+ICsgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhdWdodCAlc1xu Iiwgc3Ryc2lnbmFsKFdURVJNU0lHKHJldCkpKTsKPiArICAgICAgZXhpdChFWElUX0ZBSUxVUkUp Owo+ICsgICAgfQo+ICsgICAgZXhpdChXRVhJVFNUQVRVUyhyZXQpKTsKPiArICB9Cj4gKwo+ICsg IHJldHVybiBFWElUX1NVQ0NFU1M7Cj4gK30KPiArCj4gKy8qCj4gKyAqIEVkaXRvciBtb2RlbGlu ZXMKPiArICoKPiArICogTG9jYWwgdmFyaWFibGVzOgo+ICsgKiBjLWJhc2ljLW9mZnNldDogMgo+ ICsgKiB0YWItd2lkdGg6IDIKPiArICogaW5kZW50LXRhYnMtbW9kZTogbmlsCj4gKyAqIEVuZDoK PiArICoKPiArICogdmk6IHNldCBzaGlmdHdpZHRoPTIgdGFic3RvcD0yIGV4cGFuZHRhYjoKPiAr ICogOmluZGVudFNpemU9Mjp0YWJTaXplPTI6bm9UYWJzPXRydWU6Cj4gKyAqLwo+ICsKPiArLyog ZW9mICovCj4gZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliZmFrZXRpbWUvZmFrZXRpbWVfY29tbW9u LmggYi9zY3JpcHRzL2xpYmZha2V0aW1lL2Zha2V0aW1lX2NvbW1vbi5oCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi45ZmRhNmE3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L3NjcmlwdHMvbGliZmFrZXRpbWUvZmFrZXRpbWVfY29tbW9uLmgKPiBAQCAtMCwwICsxLDYxIEBA Cj4gKy8qCj4gKyAqIEZha2V0aW1lJ3MgY29tbW9uIGRlZmluaXRpb25zCj4gKyAqCj4gKyAqIENv cHlyaWdodCAyMDEzIEJhbGludCBSZWN6ZXkgPGJhbGludEBiYWxpbnRyZWN6ZXkuaHU+Cj4gKyAq Cj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsaWJmYWtldGltZS4KPiArICoKPiArICog bGliZmFrZXRpbWUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdCB1bmRlcgo+ICsgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQo+ICsgKiBTb2Z0d2FyZSBG b3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBsaWJmYWtldGltZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAo+ICsgKiBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkg b3IKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgo+ICsgKiBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHYyIGFsb25nCj4gKyAqIHdpdGggbGliZmFrZXRpbWU7IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKPiArICogNTkgVGVtcGxlIFBs YWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQo+ICsgKi8KPiArCj4g KyNpZm5kZWYgRkFLRVRJTUVfQ09NTU9OX0gKPiArI2RlZmluZSBGQUtFVElNRV9DT01NT05fSAo+ ICsKPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsKPiArc3RydWN0IHN5c3RlbV90aW1lX3MKPiAr ewo+ICsgIC8qIFN5c3RlbSB0aW1lIGFjY29yZGluZyB0byBDTE9DS19SRUFMVElNRSAqLwo+ICsg IHN0cnVjdCB0aW1lc3BlYyByZWFsOwo+ICsgIC8qIFN5c3RlbSB0aW1lIGFjY29yZGluZyB0byBD TE9DS19NT05PVE9OSUMgKi8KPiArICBzdHJ1Y3QgdGltZXNwZWMgbW9uOwo+ICsgIC8qIFN5c3Rl bSB0aW1lIGFjY29yZGluZyB0byBDTE9DS19NT05PVE9OSUNfUkFXICovCj4gKyAgc3RydWN0IHRp bWVzcGVjIG1vbl9yYXc7Cj4gKyNpZmRlZiBDTE9DS19CT09UVElNRQo+ICsgIC8qIFN5c3RlbSB0 aW1lIGFjY29yZGluZyB0byBDTE9DS19CT09UVElNRSAqLwo+ICsgIHN0cnVjdCB0aW1lc3BlYyBi b290Owo+ICsjZW5kaWYKPiArfTsKPiArCj4gKy8qIERhdGEgc2hhcmVkIGFtb25nIGZha2V0aW1l LXNwYXduZWQgcHJvY2Vzc2VzICovCj4gK3N0cnVjdCBmdF9zaGFyZWRfcwo+ICt7Cj4gKyAgLyoK PiArICAgKiBXaGVuIGFkdmFuY2luZyB0aW1lIGxpbmVhcmx5IHdpdGggZWFjaCB0aW1lKCksIGV0 Yy4gY2FsbCwgdGhlIGNhbGxzIGFyZQo+ICsgICAqIGNvdW50ZWQgaGVyZSAqLwo+ICsgIHVpbnQ2 NF90IHRpY2tzOwo+ICsgIC8qIEluZGV4IG9mIHRpbXN0YW1wIHRvIGJlIGxvYWRlZCBmcm9tIGZp bGUgKi8KPiArICB1aW50NjRfdCBmaWxlX2lkeDsKPiArICAvKiBTeXN0ZW0gdGltZSBGYWtldGlt ZSBzdGFydGVkIGF0ICovCj4gKyAgc3RydWN0IHN5c3RlbV90aW1lX3Mgc3RhcnRfdGltZTsKPiAr fTsKPiArCj4gKy8qIFRoZXNlIGFyZSBhbGwgbmVlZGVkIGluIG9yZGVyIHRvIHByb3Blcmx5IGJ1 aWxkIG9uIE9TWCAqLwo+ICsjaWZkZWYgX19BUFBMRV9fCj4gKyNpbmNsdWRlIDxtYWNoL2Nsb2Nr Lmg+Cj4gKyNpbmNsdWRlIDxtYWNoL21hY2hfaG9zdC5oPgo+ICsjaW5jbHVkZSA8bWFjaC9tYWNo X3BvcnQuaD4KPiArI2VuZGlmCj4gKwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvc2NyaXB0cy9s aWJmYWtldGltZS9saWJmYWtldGltZS5jIGIvc2NyaXB0cy9saWJmYWtldGltZS9saWJmYWtldGlt ZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5lYjJkMDFiCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL3NjcmlwdHMvbGliZmFrZXRpbWUvbGliZmFrZXRpbWUuYwo+IEBA IC0wLDAgKzEsMjQxMCBAQAo+ICsvKgo+ICsgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZmFr ZXRpbWUsIHZlcnNpb24gMC45LjcKPiArICoKPiArICogIGxpYmZha2V0aW1lIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKPiArICogIHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgYXMgcHVi bGlzaGVkIGJ5IHRoZQo+ICsgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsg KiAgbGliZmFrZXRpbWUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwgYnV0IFdJVEhPVVQKPiArICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgo+ICsgKiAgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvcgo+ICsgKiAgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgYWxv bmcKPiArICogIHdpdGggdGhlIGxpYmZha2V0aW1lOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sCj4gKyAqICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRl IDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCj4gKyAqLwo+ICsKPiArLyoKPiArICog ICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQo+ICsgKiAgICAgIEdsb2JhbCBzZXR0aW5ncywgaW5jbHVkZXMs IGFuZCBtYWNyb3MgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBIRUFECj4gKyAqICAgICAg PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KPiArICovCj4gKwo+ICsjZGVmaW5lIF9HTlVfU09VUkNFICAgICAgICAg ICAgIC8qIHJlcXVpcmVkIHRvIGdldCBSVExEX05FWFQgZGVmaW5lZCAqLwo+ICsKPiArI2luY2x1 ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHN0ZGludC5o Pgo+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gKyNpbmNs dWRlIDxmY250bC5oPgo+ICsjaW5jbHVkZSA8cG9sbC5oPgo+ICsjaW5jbHVkZSA8dGltZS5oPgo+ ICsjaW5jbHVkZSA8bWF0aC5oPgo+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPHN0 cmluZy5oPgo+ICsjaW5jbHVkZSA8c2VtYXBob3JlLmg+Cj4gKyNpbmNsdWRlIDxzeXMvbW1hbi5o Pgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ICsj aW5jbHVkZSA8bmV0aW5ldC9pbi5oPgo+ICsjaW5jbHVkZSA8bGltaXRzLmg+Cj4gKwo+ICsjaW5j bHVkZSAidGltZV9vcHMuaCIKPiArI2luY2x1ZGUgImZha2V0aW1lX2NvbW1vbi5oIgo+ICsKPiAr LyogcHRocmVhZC1oYW5kbGluZyBjb250cmlidXRlZCBieSBEYXZpZCBOb3J0aCwgVERJIGluIHZl cnNpb24gMC43ICovCj4gKyNpZmRlZiBQVEhSRUFECj4gKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cj4g KyNlbmRpZgo+ICsKPiArI2luY2x1ZGUgPHN5cy90aW1lYi5oPgo+ICsjaW5jbHVkZSA8ZGxmY24u aD4KPiArCj4gKyNkZWZpbmUgQlVGRkVSTEVOICAgMjU2Cj4gKwo+ICsjaWZuZGVmIF9fQVBQTEVf Xwo+ICtleHRlcm4gY2hhciAqX19wcm9nbmFtZTsKPiArI2lmZGVmIF9fc3VuCj4gKyNpbmNsdWRl ICJzdW5vc19lbmRpYW4uaCIKPiArI2Vsc2UKPiArI2luY2x1ZGUgPGVuZGlhbi5oPgo+ICsjZW5k aWYKPiArI2Vsc2UKPiArLyogZW5kaWFubmVzcyByZWxhdGVkIG1hY3JvcyAqLwo+ICsjaWZuZGVm IE9TU3dhcEhvc3RUb0JpZ0ludDY0Cj4gKyNkZWZpbmUgT1NTd2FwSG9zdFRvQmlnSW50NjQoeCkg KCh1aW50NjRfdCkoeCkpCj4gKyNlbmRpZgo+ICsjZGVmaW5lIGh0b2JlNjQoeCkgT1NTd2FwSG9z dFRvQmlnSW50NjQoeCkKPiArI2lmbmRlZiBPU1N3YXBIb3N0VG9MaXR0bGVJbnQ2NAo+ICsjZGVm aW5lIE9TU3dhcEhvc3RUb0xpdHRsZUludDY0KHgpIE9TU3dhcEludDY0KHgpCj4gKyNlbmRpZgo+ ICsjZGVmaW5lIGh0b2xlNjQoeCkgT1NTd2FwSG9zdFRvTGl0dGxlSW50NjQoeCkKPiArI2lmbmRl ZiBPU1N3YXBCaWdUb0hvc3RJbnQ2NAo+ICsjZGVmaW5lIE9TU3dhcEJpZ1RvSG9zdEludDY0KHgp ICgodWludDY0X3QpKHgpKQo+ICsjZW5kaWYKPiArI2RlZmluZSBiZTY0dG9oKHgpIE9TU3dhcEJp Z1RvSG9zdEludDY0KHgpCj4gKyNpZm5kZWYgT1NTd2FwTGl0dGxlVG9Ib3N0SW50NjQKPiArI2Rl ZmluZSBPU1N3YXBMaXR0bGVUb0hvc3RJbnQ2NCh4KSBPU1N3YXBJbnQ2NCh4KQo+ICsjZW5kaWYK PiArI2RlZmluZSBsZTY0dG9oKHgpIE9TU3dhcExpdHRsZVRvSG9zdEludDY0KHgpCj4gKwo+ICsv KiBjbG9ja19nZXR0aW1lKCkgYW5kIHJlbGF0ZWQgY2xvY2sgZGVmaW5pdGlvbnMgYXJlIG1pc3Np bmcgb24gX19BUFBMRV9fICovCj4gKyNpZm5kZWYgQ0xPQ0tfUkVBTFRJTUUKPiArLyogZnJvbSBH TlUgQyBMaWJyYXJ5IHRpbWUuaCAqLwo+ICsvKiBJZGVudGlmaWVyIGZvciBzeXN0ZW0td2lkZSBy ZWFsdGltZSBjbG9jay4gKCA9PSAxKSAqLwo+ICsjZGVmaW5lIENMT0NLX1JFQUxUSU1FICAgICAg ICAgICAgICAgQ0FMRU5EQVJfQ0xPQ0sKPiArLyogTW9ub3RvbmljIHN5c3RlbS13aWRlIGNsb2Nr LiAoPT0gMCkgKi8KPiArI2RlZmluZSBDTE9DS19NT05PVE9OSUMgICAgICAgICAgICAgIFNZU1RF TV9DTE9DSwo+ICsvKiBIaWdoLXJlc29sdXRpb24gdGltZXIgZnJvbSB0aGUgQ1BVLiAgKi8KPiAr I2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgICAgIDIKPiArLyogVGhyZWFkLXNwZWNp ZmljIENQVS10aW1lIGNsb2NrLiAgKi8KPiArI2RlZmluZSBDTE9DS19USFJFQURfQ1BVVElNRV9J RCAgICAgIDMKPiArLyogTW9ub3RvbmljIHN5c3RlbS13aWRlIGNsb2NrLCBub3QgYWRqdXN0ZWQg Zm9yIGZyZXF1ZW5jeSBzY2FsaW5nLiAgKi8KPiArI2RlZmluZSBDTE9DS19NT05PVE9OSUNfUkFX ICAgICAgICAgIDQKPiArdHlwZWRlZiBpbnQgY2xvY2tpZF90Owo+ICsjaW5jbHVkZSA8bWFjaC9j bG9jay5oPgo+ICsjaW5jbHVkZSA8bWFjaC9tYWNoLmg+Cj4gKyNlbmRpZgo+ICsjZW5kaWYKPiAr Cj4gKy8qIHNvbWUgc3lzdGVtcyBsYWNrIHJhdyBjbG9jayAqLwo+ICsjaWZuZGVmIENMT0NLX01P Tk9UT05JQ19SQVcKPiArI2RlZmluZSBDTE9DS19NT05PVE9OSUNfUkFXIChDTE9DS19NT05PVE9O SUMgKyAxKQo+ICsjZW5kaWYKPiArCj4gKy8qCj4gKyAqIFBlciB0aHJlYWQgdmFyaWFibGUsIHdo aWNoIHdlIHR1cm4gb24gaW5zaWRlIHJlYWxfKiBjYWxscyB0byBhdm9pZCBtb2RpZnlpbmcKPiAr ICogdGltZSBtdWx0aXBsZSB0aW1lcyBvZiBmb3IgdGhlIHdob2xlIHByb2Nlc3MgdG8gcHJldmVu dCBmYWtpbmcgdGltZQo+ICsgKi8KPiArc3RhdGljIF9fdGhyZWFkIGJvb2wgZG9udF9mYWtlID0g ZmFsc2U7Cj4gKwo+ICsvKiBXcmFwcGVyIGZvciBmdW5jdGlvbiBjYWxscywgd2hpY2ggd2Ugd2Fu dCB0byByZXR1cm4gc3lzdGVtIHRpbWUgKi8KPiArI2RlZmluZSBET05UX0ZBS0VfVElNRShjYWxs KSAgICAgICAgICBcCj4gKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ ICsgICAgYm9vbCBkb250X2Zha2Vfb3JpZyA9IGRvbnRfZmFrZTsgIFwKPiArICAgIGlmICghZG9u dF9mYWtlKSAgICAgICAgICAgICAgICAgICBcCj4gKyAgICB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+ICsgICAgICBkb250X2Zha2UgPSB0cnVlOyAgICAgICAgICAgICAgIFwK PiArICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICBjYWxsOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgZG9udF9mYWtlID0gZG9udF9mYWtl X29yaWc7ICAgICAgIFwKPiArICB9IHdoaWxlICgwKQo+ICsKPiArLyogcG9pbnRlcnMgdG8gcmVh bCAobm90IGZha2VkKSBmdW5jdGlvbnMgKi8KPiArc3RhdGljIGludCAgICAgICAgICAoKnJlYWxf c3RhdCkgICAgICAgICAgICAoaW50LCBjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopOwo+ICtz dGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9mc3RhdCkgICAgICAgICAgIChpbnQsIGludCwgc3Ry dWN0IHN0YXQgKik7Cj4gK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX2ZzdGF0YXQpICAgICAg ICAgKGludCwgaW50LCBjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICosIGludCk7Cj4gK3N0YXRp YyBpbnQgICAgICAgICAgKCpyZWFsX2xzdGF0KSAgICAgICAgICAgKGludCwgY29uc3QgY2hhciAq LCBzdHJ1Y3Qgc3RhdCAqKTsKPiArc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfc3RhdDY0KSAg ICAgICAgICAoaW50LCBjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0NjQgKik7Cj4gK3N0YXRpYyBp bnQgICAgICAgICAgKCpyZWFsX2ZzdGF0NjQpICAgICAgICAgKGludCwgaW50ICwgc3RydWN0IHN0 YXQ2NCAqKTsKPiArc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfZnN0YXRhdDY0KSAgICAgICAo aW50LCBpbnQgLCBjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0NjQgKiwgaW50KTsKPiArc3RhdGlj IGludCAgICAgICAgICAoKnJlYWxfbHN0YXQ2NCkgICAgICAgICAoaW50LCBjb25zdCBjaGFyICos IHN0cnVjdCBzdGF0NjQgKik7Cj4gK3N0YXRpYyB0aW1lX3QgICAgICAgKCpyZWFsX3RpbWUpICAg ICAgICAgICAgKHRpbWVfdCAqKTsKPiArc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfZnRpbWUp ICAgICAgICAgICAoc3RydWN0IHRpbWViICopOwo+ICtzdGF0aWMgaW50ICAgICAgICAgICgqcmVh bF9nZXR0aW1lb2ZkYXkpICAgIChzdHJ1Y3QgdGltZXZhbCAqLCB2b2lkICopOwo+ICtzdGF0aWMg aW50ICAgICAgICAgICgqcmVhbF9jbG9ja19nZXR0aW1lKSAgIChjbG9ja2lkX3QgY2xrX2lkLCBz dHJ1Y3QgdGltZXNwZWMgKnRwKTsKPiArI2lmZGVmIEZBS0VfSU5URVJOQUxfQ0FMTFMKPiArc3Rh dGljIGludCAgICAgICAgICAoKnJlYWxfX19mdGltZSkgICAgICAgICAgIChzdHJ1Y3QgdGltZWIg Kik7Cj4gK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX19fZ2V0dGltZW9mZGF5KSAgICAoc3Ry dWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKPiArc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfX19j bG9ja19nZXR0aW1lKSAgIChjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsK PiArI2VuZGlmCj4gKyNpZm5kZWYgX19BUFBMRU9TWF9fCj4gKyNpZmRlZiBGQUtFX1RJTUVSUwo+ ICtzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF90aW1lcl9zZXR0aW1lXzIyKSAgIChpbnQgdGlt ZXJpZCwgaW50IGZsYWdzLCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqbmV3X3ZhbHVlLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRp bWVyc3BlYyAqIG9sZF92YWx1ZSk7Cj4gK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX3RpbWVy X3NldHRpbWVfMjMzKSAgKHRpbWVyX3QgdGltZXJpZCwgaW50IGZsYWdzLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaXRpbWVy c3BlYyAqbmV3X3ZhbHVlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqIG9sZF92YWx1ZSk7Cj4gK3N0YXRpYyBpbnQg ICAgICAgICAgKCpyZWFsX3RpbWVyX2dldHRpbWVfMjIpICAgKGludCB0aW1lcmlkLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVy c3BlYyAqY3Vycl92YWx1ZSk7Cj4gK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX3RpbWVyX2dl dHRpbWVfMjMzKSAgKHRpbWVyX3QgdGltZXJpZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKmN1cnJfdmFsdWUpOwo+ ICsjZW5kaWYKPiArI2VuZGlmCj4gKyNpZmRlZiBGQUtFX1NMRUVQCj4gK3N0YXRpYyBpbnQgICAg ICAgICAgKCpyZWFsX25hbm9zbGVlcCkgICAgICAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVx LCBzdHJ1Y3QgdGltZXNwZWMgKnJlbSk7Cj4gK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX3Vz bGVlcCkgICAgICAgICAgKHVzZWNvbmRzX3QgdXNlYyk7Cj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQg KCpyZWFsX3NsZWVwKSAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWNvbmRzKTsKPiArc3RhdGlj IHVuc2lnbmVkIGludCAoKnJlYWxfYWxhcm0pICAgICAgICAgICAodW5zaWduZWQgaW50IHNlY29u ZHMpOwo+ICtzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9wb2xsKSAgICAgICAgICAgIChzdHJ1 Y3QgcG9sbGZkICosIG5mZHNfdCwgaW50KTsKPiArc3RhdGljIGludCAgICAgICAgICAoKnJlYWxf cHBvbGwpICAgICAgICAgICAoc3RydWN0IHBvbGxmZCAqLCBuZmRzX3QsIGNvbnN0IHN0cnVjdCB0 aW1lc3BlYyAqLCBjb25zdCBzaWdzZXRfdCAqKTsKPiArc3RhdGljIGludCAgICAgICAgICAoKnJl YWxfc2VsZWN0KSAgICAgICAgICAoaW50IG5mZHMsIGZkX3NldCAqcmVzdHJpY3QgcmVhZGZkcywK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpy ZXN0cmljdCB3cml0ZWZkcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmRfc2V0ICpyZXN0cmljdCBlcnJvcmZkcywKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0IHRpbWVv dXQpOwo+ICtzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9zZW1fdGltZWR3YWl0KSAgIChzZW1f dCosIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyopOwo+ICsjZW5kaWYKPiArI2lmZGVmIF9fQVBQTEVP U1hfXwo+ICtzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9jbG9ja19nZXRfdGltZSkgIChjbG9j a19zZXJ2X3QgY2xvY2tfc2VydiwgbWFjaF90aW1lc3BlY190ICpjdXJfdGltZWNsb2NraWRfdCk7 Cj4gK3N0YXRpYyBpbnQgICAgICAgICAgYXBwbGVfY2xvY2tfZ2V0dGltZSAgICAgKGNsb2NraWRf dCBjbGtfaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHApOwo+ICtzdGF0aWMgY2xvY2tfc2Vydl90IGNs b2NrX3NlcnZfcmVhbDsKPiArI2VuZGlmCj4gKwo+ICtzdGF0aWMgaW50IGluaXRpYWxpemVkID0g MDsKPiArCj4gKy8qIHByb3RvdHlwZXMgKi8KPiArc3RhdGljIGludCAgICBmYWtlX2dldHRpbWVv ZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpOwo+ICtzdGF0aWMgaW50ICAgIGZha2VfY2xvY2tfZ2V0 dGltZShjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsKPiArCj4gKy8qKiBT ZW1hcGhvcmUgcHJvdGVjdGluZyBzaGFyZWQgZGF0YSAqLwo+ICtzdGF0aWMgc2VtX3QgKnNoYXJl ZF9zZW0gPSBOVUxMOwo+ICsKPiArLyoqIERhdGEgc2hhcmVkIGFtb25nIGZha2V0aW1lLXNwYXdu ZWQgcHJvY2Vzc2VzICovCj4gK3N0YXRpYyBzdHJ1Y3QgZnRfc2hhcmVkX3MgKmZ0X3NoYXJlZCA9 IE5VTEw7Cj4gKwo+ICsvKiogU3RvcmFnZSBmb3JtYXQgZm9yIHRpbWVzdGFtcHMgd3JpdHRlbiB0 byBmaWxlLiBCaWcgZW5kaWFuLiovCj4gK3N0cnVjdCBzYXZlZF90aW1lc3RhbXAKPiArewo+ICsg IGludDY0X3Qgc2VjOwo+ICsgIHVpbnQ2NF90IG5zZWM7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIHZvaWQgdGltZXNwZWNfZnJvbV9zYXZlZCAoc3RydWN0IHRpbWVzcGVjICp0cCwKPiArICBz dHJ1Y3Qgc2F2ZWRfdGltZXN0YW1wICpzYXZlZCkKPiArewo+ICsgIC8qIHJlYWQgYXMgYmlnIGVu ZGlhbiAqLwo+ICsgIHRwLT50dl9zZWMgPSBiZTY0dG9oKHNhdmVkLT5zZWMpOwo+ICsgIHRwLT50 dl9uc2VjID0gYmU2NHRvaChzYXZlZC0+bnNlYyk7Cj4gK30KPiArCj4gKy8qKiBTYXZlZCB0aW1l c3RhbXBzICovCj4gK3N0YXRpYyBzdHJ1Y3Qgc2F2ZWRfdGltZXN0YW1wICpzdHNzID0gTlVMTDsK PiArc3RhdGljIHNpemVfdCBpbmZpbGVfc2l6ZTsKPiArc3RhdGljIGJvb2wgaW5maWxlX3NldCA9 IGZhbHNlOwo+ICsKPiArLyoqIEZpbGUgZmQgdG8gc2F2ZSB0aW1lc3RhbXBzIHRvICovCj4gK3N0 YXRpYyBpbnQgb3V0ZmlsZSA9IC0xOwo+ICsKPiArc3RhdGljIGJvb2wgbGltaXRlZF9mYWtpbmcg PSBmYWxzZTsKPiArc3RhdGljIGxvbmcgY2FsbGNvdW50ZXIgPSAwOwo+ICtzdGF0aWMgbG9uZyBm dF9zdGFydF9hZnRlcl9zZWNzID0gLTE7Cj4gK3N0YXRpYyBsb25nIGZ0X3N0b3BfYWZ0ZXJfc2Vj cyA9IC0xOwo+ICtzdGF0aWMgbG9uZyBmdF9zdGFydF9hZnRlcl9uY2FsbHMgPSAtMTsKPiArc3Rh dGljIGxvbmcgZnRfc3RvcF9hZnRlcl9uY2FsbHMgPSAtMTsKPiArCj4gK3N0YXRpYyBib29sIHNw YXduc3VwcG9ydCA9IGZhbHNlOwo+ICtzdGF0aWMgaW50IHNwYXduZWQgPSAwOwo+ICtzdGF0aWMg Y2hhciBmdF9zcGF3bl90YXJnZXRbMTAyNF07Cj4gK3N0YXRpYyBsb25nIGZ0X3NwYXduX3NlY3Mg PSAtMTsKPiArc3RhdGljIGxvbmcgZnRfc3Bhd25fbmNhbGxzID0gLTE7Cj4gKwo+ICtzdGF0aWMg aW50IGZha2VfbW9ub3RvbmljX2Nsb2NrID0gMTsKPiArc3RhdGljIGludCBjYWNoZV9lbmFibGVk ID0gMTsKPiArc3RhdGljIGludCBjYWNoZV9kdXJhdGlvbiA9IDEwOyAgICAgLyogY2FjaGUgZmFr ZSB0aW1lIGlucHV0IGZvciAxMCBzZWNvbmRzICovCj4gKwo+ICsvKgo+ICsgKiBTdGF0aWMgdGlt ZXNwZWMgdG8gc3RvcmUgb3VyIHN0YXJ0dXAgdGltZSwgZm9sbG93ZWQgYnkgYSBsb2FkLXRpbWUg bGlicmFyeQo+ICsgKiBpbml0aWFsaXphdGlvbiBkZWNsYXJhdGlvbi4KPiArICovCj4gKyNpZm5k ZWYgQ0xPQ0tfQk9PVFRJTUUKPiArc3RhdGljIHN0cnVjdCBzeXN0ZW1fdGltZV9zIGZ0cGxfc3Rh cnR0aW1lID0ge3swLCAtMX0sIHswLCAtMX0sIHswLCAtMX19Owo+ICsjZWxzZQo+ICtzdGF0aWMg c3RydWN0IHN5c3RlbV90aW1lX3MgZnRwbF9zdGFydHRpbWUgPSB7ezAsIC0xfSwgezAsIC0xfSwg ezAsIC0xfSwgezAsIC0xfX07Cj4gKyNlbmRpZgo+ICsKPiArc3RhdGljIGNoYXIgdXNlcl9mYWtl ZF90aW1lX2ZtdFtCVUZTSVpdID0gezB9Owo+ICsKPiArLyogVXNlciBzdXBwbGllZCBiYXNlIHRp bWUgdG8gZmFrZSAqLwo+ICtzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHVzZXJfZmFrZWRfdGltZV90 aW1lc3BlYyA9IHswLCAtMX07Cj4gKy8qIFVzZXIgc3VwcGxpZWQgYmFzZSB0aW1lIGlzIHNldCAq Lwo+ICtzdGF0aWMgYm9vbCB1c2VyX2Zha2VkX3RpbWVfc2V0ID0gZmFsc2U7Cj4gK3N0YXRpYyBj aGFyIHVzZXJfZmFrZWRfdGltZV9zYXZlZFtCVUZGRVJMRU5dID0gezB9Owo+ICsKPiArLyogRnJh Y3Rpb25hbCB1c2VyIG9mZnNldCBwcm92aWRlZCB0aHJvdWdoIEZBS0VUSU1FIGVudi4gdmFyLiov Cj4gK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgdXNlcl9vZmZzZXQgPSB7MCwgLTF9Owo+ICsvKiBT cGVlZCB1cCBvciBzbG93IGRvd24gY2xvY2sgKi8KPiArc3RhdGljIGRvdWJsZSB1c2VyX3JhdGUg PSAxLjA7Cj4gK3N0YXRpYyBib29sIHVzZXJfcmF0ZV9zZXQgPSBmYWxzZTsKPiArc3RhdGljIHN0 cnVjdCB0aW1lc3BlYyB1c2VyX3Blcl90aWNrX2luYyA9IHswLCAtMX07Cj4gK3N0YXRpYyBib29s IHVzZXJfcGVyX3RpY2tfaW5jX3NldCA9IGZhbHNlOwo+ICsKPiArZW51bSBmdF9tb2RlX3Qge0ZU X0ZSRUVaRSwgRlRfU1RBUlRfQVQsIEZUX05PT1B9IGZ0X21vZGUgPSBGVF9GUkVFWkU7Cj4gKwo+ ICsvKiBUaW1lIHRvIGZha2UgaXMgbm90IHByb3ZpZGVkIHRocm91Z2ggRkFLRVRJTUUgZW52LiB2 YXIuICovCj4gK3N0YXRpYyBib29sIHBhcnNlX2NvbmZpZ19maWxlID0gdHJ1ZTsKPiArCj4gK3Zv aWQgZnRfY2xlYW51cCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKGRlc3RydWN0b3IpKTsKPiArdm9p ZCBmdHBsX2luaXQgKHZvaWQpIF9fYXR0cmlidXRlX18gKChjb25zdHJ1Y3RvcikpOwo+ICsKPiAr Cj4gKy8qCj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICogICAgICBTaGFyZWQgbWVtb3J5 IHJlbGF0ZWQgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09IFNI TQo+ICsgKiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gKyAqLwo+ICsKPiArc3RhdGljIHZvaWQgZnRf c2htX2luaXQgKHZvaWQpCj4gK3sKPiArICBpbnQgdGlja3Nfc2htX2ZkOwo+ICsgIGNoYXIgc2Vt X25hbWVbMjU2XSwgc2htX25hbWVbMjU2XSwgKmZ0X3NoYXJlZF9lbnYgPSBnZXRlbnYoIkZBS0VU SU1FX1NIQVJFRCIpOwo+ICsKPiArICBpZiAoZnRfc2hhcmVkX2VudiAhPSBOVUxMKQo+ICsgIHsK PiArICAgIGlmIChzc2NhbmYoZnRfc2hhcmVkX2VudiwgIiUyNTVzICUyNTVzIiwgc2VtX25hbWUs IHNobV9uYW1lKSA8IDIpCj4gKyAgICB7Cj4gKyAgICAgIHByaW50ZigiRXJyb3IgcGFyc2luZyBz ZW1hcGhvcmUgbmFtZSBhbmQgc2hhcmVkIG1lbW9yeSBpZCBmcm9tIHN0cmluZzogJXMiLCBmdF9z aGFyZWRfZW52KTsKPiArICAgICAgZXhpdCgxKTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoU0VN X0ZBSUxFRCA9PSAoc2hhcmVkX3NlbSA9IHNlbV9vcGVuKHNlbV9uYW1lLCAwKSkpCj4gKyAgICB7 Cj4gKyAgICAgIHBlcnJvcigic2VtX29wZW4iKTsKPiArICAgICAgZXhpdCgxKTsKPiArICAgIH0K PiArCj4gKyAgICBpZiAoLTEgPT0gKHRpY2tzX3NobV9mZCA9IHNobV9vcGVuKHNobV9uYW1lLCBP X0NSRUFUfE9fUkRXUiwgU19JV1VTUnxTX0lSVVNSKSkpCj4gKyAgICB7Cj4gKyAgICAgIHBlcnJv cigic2htX29wZW4iKTsKPiArICAgICAgZXhpdCgxKTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAo TUFQX0ZBSUxFRCA9PSAoZnRfc2hhcmVkID0gbW1hcChOVUxMLCBzaXplb2Yoc3RydWN0IGZ0X3No YXJlZF9zKSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCj4gKyAgICAgICAgICAgIE1BUF9TSEFSRUQs IHRpY2tzX3NobV9mZCwgMCkpKQo+ICsgICAgewo+ICsgICAgICBwZXJyb3IoIm1tYXAiKTsKPiAr ICAgICAgZXhpdCgxKTsKPiArICAgIH0KPiArICB9Cj4gK30KPiArCj4gK3ZvaWQgZnRfY2xlYW51 cCAodm9pZCkKPiArewo+ICsgIC8qIGRldGFjaCBmcm9tIHNoYXJlZCBtZW1vcnkgKi8KPiArICBp ZiAoZnRfc2hhcmVkICE9IE5VTEwpCj4gKyAgewo+ICsgICAgbXVubWFwKGZ0X3NoYXJlZCwgc2l6 ZW9mKHVpbnQ2NF90KSk7Cj4gKyAgfQo+ICsgIGlmIChzdHNzICE9IE5VTEwpCj4gKyAgewo+ICsg ICAgbXVubWFwKHN0c3MsIGluZmlsZV9zaXplKTsKPiArICB9Cj4gKyAgaWYgKHNoYXJlZF9zZW0g IT0gTlVMTCkKPiArICB7Cj4gKyAgICBzZW1fY2xvc2Uoc2hhcmVkX3NlbSk7Cj4gKyAgfQo+ICt9 Cj4gKwo+ICsKPiArLyoKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKiAgICAgIEludGVy bmFsIHRpbWUgcmV0cmlldmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09 PSBJTlRUSU1FCj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICovCj4gKwo+ICsvKiBHZXQg c3lzdGVtIHRpbWUgZnJvbSBzeXN0ZW0gZm9yIGFsbCBjbG9ja3MgKi8KPiArc3RhdGljIHZvaWQg c3lzdGVtX3RpbWVfZnJvbV9zeXN0ZW0gKHN0cnVjdCBzeXN0ZW1fdGltZV9zICogc3lzdGltZSkK PiArewo+ICsjaWZkZWYgX19BUFBMRU9TWF9fCj4gKyAgLyogZnJvbSBodHRwOi8vc3RhY2tvdmVy Zmxvdy5jb20vcXVlc3Rpb25zLzUxNjcyNjkvY2xvY2stZ2V0dGltZS1hbHRlcm5hdGl2ZS1pbi1t YWMtb3MteCAqLwo+ICsgIGNsb2NrX3NlcnZfdCBjY2xvY2s7Cj4gKyAgbWFjaF90aW1lc3BlY190 IG10czsKPiArICBob3N0X2dldF9jbG9ja19zZXJ2aWNlKG1hY2hfaG9zdF9zZWxmKCksIENBTEVO REFSX0NMT0NLLCAmY2xvY2tfc2Vydl9yZWFsKTsKPiArICAoKnJlYWxfY2xvY2tfZ2V0X3RpbWUp KGNsb2NrX3NlcnZfcmVhbCwgJm10cyk7Cj4gKyAgc3lzdGltZS0+cmVhbC50dl9zZWMgPSBtdHMu dHZfc2VjOwo+ICsgIHN5c3RpbWUtPnJlYWwudHZfbnNlYyA9IG10cy50dl9uc2VjOwo+ICsgIGhv c3RfZ2V0X2Nsb2NrX3NlcnZpY2UobWFjaF9ob3N0X3NlbGYoKSwgU1lTVEVNX0NMT0NLLCAmY2Ns b2NrKTsKPiArICAoKnJlYWxfY2xvY2tfZ2V0X3RpbWUpKGNjbG9jaywgJm10cyk7Cj4gKyAgbWFj aF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgY2Nsb2NrKTsKPiArICBzeXN0aW1l LT5tb24udHZfc2VjID0gbXRzLnR2X3NlYzsKPiArICBzeXN0aW1lLT5tb24udHZfbnNlYyA9IG10 cy50dl9uc2VjOwo+ICsgIHN5c3RpbWUtPm1vbl9yYXcudHZfc2VjID0gbXRzLnR2X3NlYzsKPiAr ICBzeXN0aW1lLT5tb25fcmF3LnR2X25zZWMgPSBtdHMudHZfbnNlYzsKPiArI2Vsc2UKPiArICBE T05UX0ZBS0VfVElNRSgoKnJlYWxfY2xvY2tfZ2V0dGltZSkoQ0xPQ0tfUkVBTFRJTUUsICZzeXN0 aW1lLT5yZWFsKSkKPiArICAgOwo+ICsgIERPTlRfRkFLRV9USU1FKCgqcmVhbF9jbG9ja19nZXR0 aW1lKShDTE9DS19NT05PVE9OSUMsICZzeXN0aW1lLT5tb24pKQo+ICsgICA7Cj4gKyAgRE9OVF9G QUtFX1RJTUUoKCpyZWFsX2Nsb2NrX2dldHRpbWUpKENMT0NLX01PTk9UT05JQ19SQVcsICZzeXN0 aW1lLT5tb25fcmF3KSkKPiArICAgOwo+ICsjaWZkZWYgQ0xPQ0tfQk9PVFRJTUUKPiArICBET05U X0ZBS0VfVElNRSgoKnJlYWxfY2xvY2tfZ2V0dGltZSkoQ0xPQ0tfQk9PVFRJTUUsICZzeXN0aW1l LT5ib290KSkKPiArICAgOwo+ICsjZW5kaWYKPiArI2VuZGlmCj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIG5leHRfdGltZShzdHJ1Y3QgdGltZXNwZWMgKnRwLCBzdHJ1Y3QgdGltZXNwZWMgKnRpY2ts ZW4pCj4gK3sKPiArICBpZiAoc2hhcmVkX3NlbSAhPSBOVUxMKQo+ICsgIHsKPiArICAgIHN0cnVj dCB0aW1lc3BlYyBpbmM7Cj4gKyAgICAvKiBsb2NrICovCj4gKyAgICBpZiAoc2VtX3dhaXQoc2hh cmVkX3NlbSkgPT0gLTEpCj4gKyAgICB7Cj4gKyAgICAgIHBlcnJvcigic2VtX3dhaXQiKTsKPiAr ICAgICAgZXhpdCgxKTsKPiArICAgIH0KPiArICAgIC8qIGNhbGN1bGF0ZSBhbmQgdXBkYXRlIGVs YXBzZWQgdGltZSAqLwo+ICsgICAgdGltZXNwZWNtdWwodGlja2xlbiwgZnRfc2hhcmVkLT50aWNr cywgJmluYyk7Cj4gKyAgICB0aW1lc3BlY2FkZCgmdXNlcl9mYWtlZF90aW1lX3RpbWVzcGVjLCAm aW5jLCB0cCk7Cj4gKyAgICAoZnRfc2hhcmVkLT50aWNrcykrKzsKPiArICAgIC8qIHVubG9jayAq Lwo+ICsgICAgaWYgKHNlbV9wb3N0KHNoYXJlZF9zZW0pID09IC0xKQo+ICsgICAgewo+ICsgICAg ICBwZXJyb3IoInNlbV9wb3N0Iik7Cj4gKyAgICAgIGV4aXQoMSk7Cj4gKyAgICB9Cj4gKyAgfQo+ ICt9Cj4gKwo+ICsKPiArLyoKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKiAgICAgIFNh dmluZyAmIGxvYWRpbmcgdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgID09PSBTQVZFCj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICovCj4gKwo+ICtzdGF0 aWMgdm9pZCBzYXZlX3RpbWUoc3RydWN0IHRpbWVzcGVjICp0cCkKPiArewo+ICsgIGlmICgoc2hh cmVkX3NlbSAhPSBOVUxMKSAmJiAob3V0ZmlsZSAhPSAtMSkpCj4gKyAgewo+ICsgICAgc3RydWN0 IHNhdmVkX3RpbWVzdGFtcCB0aW1lX3dyaXRlOwo+ICsgICAgc3NpemVfdCB3cml0dGVuOwo+ICsg ICAgc2l6ZV90IG4gPSAwOwo+ICsKPiArICAgIHRpbWVfd3JpdGUuc2VjID0gaHRvYmU2NCh0cC0+ dHZfc2VjKTsKPiArICAgIHRpbWVfd3JpdGUubnNlYyA9IGh0b2JlNjQodHAtPnR2X25zZWMpOwo+ ICsKPiArICAgIC8qIGxvY2sgKi8KPiArICAgIGlmIChzZW1fd2FpdChzaGFyZWRfc2VtKSA9PSAt MSkKPiArICAgIHsKPiArICAgICAgcGVycm9yKCJzZW1fd2FpdCIpOwo+ICsgICAgICBleGl0KDEp Owo+ICsgICAgfQo+ICsKPiArICAgIGxzZWVrKG91dGZpbGUsIDAsIFNFRUtfRU5EKTsKPiArICAg IGRvCj4gKyAgICB7Cj4gKyAgICAgIHdyaXR0ZW4gPSB3cml0ZShvdXRmaWxlLCAmKCgoY2hhciop JnRpbWVfd3JpdGUpW25dKSwgc2l6ZW9mKHRpbWVfd3JpdGUpIC0gbik7Cj4gKyAgICB9Cj4gKyAg ICB3aGlsZSAoKCh3cml0dGVuID09IC0xKSAmJiAoZXJybm8gPT0gRUlOVFIpKSB8fAo+ICsgICAg ICAgICAgICAoc2l6ZW9mKHRpbWVfd3JpdGUpIDwgKG4gKz0gd3JpdHRlbikpKTsKPiArCj4gKyAg ICBpZiAoKHdyaXR0ZW4gPT0gLTEpIHx8IChuIDwgc2l6ZW9mKHRpbWVfd3JpdGUpKSkKPiArICAg IHsKPiArICAgICAgcGVycm9yKCJTYXZpbmcgdGltZXN0YW1wIHRvIGZpbGUgZmFpbGVkIik7Cj4g KyAgICB9Cj4gKwo+ICsgICAgLyogdW5sb2NrICovCj4gKyAgICBpZiAoc2VtX3Bvc3Qoc2hhcmVk X3NlbSkgPT0gLTEpCj4gKyAgICB7Cj4gKyAgICAgIHBlcnJvcigic2VtX3Bvc3QiKTsKPiArICAg ICAgZXhpdCgxKTsKPiArICAgIH0KPiArICB9Cj4gK30KPiArCj4gKy8qCj4gKyAqIFByb3ZpZGUg ZmFrZWQgdGltZSBmcm9tIGZpbGUuCj4gKyAqIEByZXR1cm4gdGltZSBpcyBzZXQgZnJvbSBmaWxl bgo+ICsgKi8KPiArc3RhdGljIGJvb2wgbG9hZF90aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHApCj4g K3sKPiArICBib29sIHJldCA9IGZhbHNlOwo+ICsgIGlmICgoc2hhcmVkX3NlbSAhPSBOVUxMKSAm JiAoaW5maWxlX3NldCkpCj4gKyAgewo+ICsgICAgLyogbG9jayAqLwo+ICsgICAgaWYgKHNlbV93 YWl0KHNoYXJlZF9zZW0pID09IC0xKQo+ICsgICAgewo+ICsgICAgICBwZXJyb3IoInNlbV93YWl0 Iik7Cj4gKyAgICAgIGV4aXQoMSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKChzaXplb2Yoc3Rz c1swXSkgKiAoZnRfc2hhcmVkLT5maWxlX2lkeCArIDEpKSA+IGluZmlsZV9zaXplKQo+ICsgICAg ewo+ICsgICAgICAvKiB3ZSBhcmUgb3V0IG9mIHRpbXN0YW1wcyB0byByZXBsYXksIHJldHVybiB0 byBmYWtpbmcgdGltZSBieSBydWxlcwo+ICsgICAgICAgKiB1c2luZyBsYXN0IHRpbWVzdGFtcCBm cm9tIGZpbGUgYXMgdGhlIHVzZXIgcHJvdmlkZWQgdGltZXN0YW1wICovCj4gKyAgICAgIHRpbWVz cGVjX2Zyb21fc2F2ZWQoJnVzZXJfZmFrZWRfdGltZV90aW1lc3BlYywgJnN0c3NbKGluZmlsZV9z aXplIC8gc2l6ZW9mKHN0c3NbMF0pKSAtIDEgXSk7Cj4gKwo+ICsgICAgICBpZiAoZnRfc2hhcmVk LT50aWNrcyA9PSAwKQo+ICsgICAgICB7Cj4gKyAgICAgICAgLyogd2Ugc2V0IHNoYXJlZCBtZW1v cnkgdG8gc3RvcCB1c2luZyBpbmZpbGUgKi8KPiArICAgICAgICBmdF9zaGFyZWQtPnRpY2tzID0g MTsKPiArICAgICAgICBzeXN0ZW1fdGltZV9mcm9tX3N5c3RlbSgmZnRwbF9zdGFydHRpbWUpOwo+ ICsgICAgICAgIGZ0X3NoYXJlZC0+c3RhcnRfdGltZSA9IGZ0cGxfc3RhcnR0aW1lOwo+ICsgICAg ICB9Cj4gKyAgICAgIGVsc2UKPiArICAgICAgewo+ICsgICAgICAgIGZ0cGxfc3RhcnR0aW1lID0g ZnRfc2hhcmVkLT5zdGFydF90aW1lOwo+ICsgICAgICB9Cj4gKwo+ICsgICAgICBtdW5tYXAoc3Rz cywgaW5maWxlX3NpemUpOwo+ICsgICAgICBpbmZpbGVfc2V0ID0gZmFsc2U7Cj4gKyAgICB9Cj4g KyAgICBlbHNlCj4gKyAgICB7Cj4gKyAgICAgIHRpbWVzcGVjX2Zyb21fc2F2ZWQodHAsICZzdHNz W2Z0X3NoYXJlZC0+ZmlsZV9pZHhdKTsKPiArICAgICAgZnRfc2hhcmVkLT5maWxlX2lkeCsrOwo+ ICsgICAgICByZXQgPSB0cnVlOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIHVubG9jayAqLwo+ICsg ICAgaWYgKHNlbV9wb3N0KHNoYXJlZF9zZW0pID09IC0xKQo+ICsgICAgewo+ICsgICAgICBwZXJy b3IoInNlbV9wb3N0Iik7Cj4gKyAgICAgIGV4aXQoMSk7Cj4gKyAgICB9Cj4gKyAgfQo+ICsgIHJl dHVybiByZXQ7Cj4gK30KPiArCj4gKwo+ICsvKgo+ICsgKiAgICAgID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4g KyAqICAgICAgRmFrZWQgc3lzdGVtIGZ1bmN0aW9uczogZmlsZSByZWxhdGVkICAgICAgICAgICAg ICAgICAgICAgPT09IEZBS0UoRklMRSkKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKi8K PiArCj4gKyNpZmRlZiBGQUtFX1NUQVQKPiArCj4gKyNpZm5kZWYgTk9fQVRGSUxFCj4gKyNpZm5k ZWYgX0FURklMRV9TT1VSQ0UKPiArI2RlZmluZSBfQVRGSUxFX1NPVVJDRQo+ICsjZW5kaWYKPiAr I2luY2x1ZGUgPGZjbnRsLmg+IC8qIERlZmluaXRpb24gb2YgQVRfKiBjb25zdGFudHMgKi8KPiAr I2VuZGlmCj4gKwo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArCj4gK3N0YXRpYyBpbnQgZmFr ZV9zdGF0X2Rpc2FibGVkID0gMDsKPiArCj4gKyNkZWZpbmUgRkFLRV9TVFJVQ1RfU1RBVF9USU1F KHdoaWNoKSB7ICAgICAgICAgICAgICAgIFwKPiArICAgIHN0cnVjdCB0aW1lc3BlYyB0ID0ge2J1 Zi0+c3RfIyN3aGljaCMjdGltZSwgICAgICAgXAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg YnVmLT5zdF8jI3doaWNoIyN0aW1lbnNlY307ICBcCj4gKyAgICBmYWtlX2Nsb2NrX2dldHRpbWUo Q0xPQ0tfUkVBTFRJTUUsICZ0KTsgICAgICAgICAgIFwKPiArICAgIGJ1Zi0+c3RfIyN3aGljaCMj dGltZSA9IHQudHZfc2VjOyAgICAgICAgICAgICAgICAgXAo+ICsgICAgYnVmLT5zdF8jI3doaWNo IyN0aW1lbnNlYyA9IHQudHZfbnNlYzsgICAgICAgICAgICBcCj4gKyAgfSB3aGlsZSAoMCkKPiAr Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBmYWtlX3N0YXRidWYgKHN0cnVjdCBzdGF0ICpidWYpIHsK PiArI2lmbmRlZiBzdF9hdGltZQo+ICsgIEZBS0VfU1RSVUNUX1NUQVRfVElNRShjKTsKPiArICBG QUtFX1NUUlVDVF9TVEFUX1RJTUUoYSk7Cj4gKyAgRkFLRV9TVFJVQ1RfU1RBVF9USU1FKG0pOwo+ ICsjZWxzZQo+ICsgIGZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmJ1Zi0+c3Rf Y3RpbSk7Cj4gKyAgZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmYnVmLT5zdF9h dGltKTsKPiArICBmYWtlX2Nsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZidWYtPnN0X210 aW0pOwo+ICsjZW5kaWYKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGZha2Vfc3RhdDY0 YnVmIChzdHJ1Y3Qgc3RhdDY0ICpidWYpIHsKPiArI2lmbmRlZiBzdF9hdGltZQo+ICsgIEZBS0Vf U1RSVUNUX1NUQVRfVElNRShjKTsKPiArICBGQUtFX1NUUlVDVF9TVEFUX1RJTUUoYSk7Cj4gKyAg RkFLRV9TVFJVQ1RfU1RBVF9USU1FKG0pOwo+ICsjZWxzZQo+ICsgIGZha2VfY2xvY2tfZ2V0dGlt ZShDTE9DS19SRUFMVElNRSwgJmJ1Zi0+c3RfY3RpbSk7Cj4gKyAgZmFrZV9jbG9ja19nZXR0aW1l KENMT0NLX1JFQUxUSU1FLCAmYnVmLT5zdF9hdGltKTsKPiArICBmYWtlX2Nsb2NrX2dldHRpbWUo Q0xPQ0tfUkVBTFRJTUUsICZidWYtPnN0X210aW0pOwo+ICsjZW5kaWYKPiArfQo+ICsKPiArLyog Q29udHJpYnV0ZWQgYnkgUGhpbGlwcCBIYWNodG1hbm4gaW4gdmVyc2lvbiAwLjYgKi8KPiAraW50 IF9feHN0YXQgKGludCB2ZXIsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpidWYpCj4g K3sKPiArICBpZiAoIWluaXRpYWxpemVkKQo+ICsgIHsKPiArICAgIGZ0cGxfaW5pdCgpOwo+ICsg IH0KPiArICBpZiAoTlVMTCA9PSByZWFsX3N0YXQpCj4gKyAgeyAvKiBkbHN5bSgpIGZhaWxlZCAq Lwo+ICsjaWZkZWYgREVCVUcKPiArICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImZha2V0aW1l IHByb2JsZW06IG9yaWdpbmFsIHN0YXQoKSBub3QgZm91bmQuXG4iKTsKPiArI2VuZGlmCj4gKyAg ICByZXR1cm4gLTE7IC8qIHByb3BhZ2F0ZSBlcnJvciB0byBjYWxsZXIgKi8KPiArICB9Cj4gKwo+ ICsgIGludCByZXN1bHQ7Cj4gKyAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gcmVhbF9zdGF0KHZl ciwgcGF0aCwgYnVmKSk7Cj4gKyAgaWYgKHJlc3VsdCA9PSAtMSkKPiArICB7Cj4gKyAgICByZXR1 cm4gLTE7Cj4gKyAgfQo+ICsKPiArICAgaWYgKGJ1ZiAhPSBOVUxMKQo+ICsgICB7Cj4gKyAgICAg aWYgKCFmYWtlX3N0YXRfZGlzYWJsZWQpCj4gKyAgICAgewo+ICsgICAgICAgZmFrZV9zdGF0YnVm KGJ1Zik7Cj4gKyAgICAgfQo+ICsgICB9Cj4gKwo+ICsgIHJldHVybiByZXN1bHQ7Cj4gK30KPiAr Cj4gKy8qIENvbnRyaWJ1dGVkIGJ5IFBoaWxpcHAgSGFjaHRtYW5uIGluIHZlcnNpb24gMC42ICov Cj4gK2ludCBfX2Z4c3RhdCAoaW50IHZlciwgaW50IGZpbGRlcywgc3RydWN0IHN0YXQgKmJ1ZikK PiArewo+ICsgIGlmICghaW5pdGlhbGl6ZWQpCj4gKyAgewo+ICsgICAgZnRwbF9pbml0KCk7Cj4g KyAgfQo+ICsgIGlmIChOVUxMID09IHJlYWxfZnN0YXQpCj4gKyAgeyAgLyogZGxzeW0oKSBmYWls ZWQgKi8KPiArI2lmZGVmIERFQlVHCj4gKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtl dGltZSBwcm9ibGVtOiBvcmlnaW5hbCBmc3RhdCgpIG5vdCBmb3VuZC5cbiIpOwo+ICsjZW5kaWYK PiArICAgIHJldHVybiAtMTsgLyogcHJvcGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLwo+ICsgIH0K PiArCj4gKyAgaW50IHJlc3VsdDsKPiArICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSByZWFsX2Zz dGF0KHZlciwgZmlsZGVzLCBidWYpKTsKPiArICBpZiAocmVzdWx0ID09IC0xKQo+ICsgIHsKPiAr ICAgIHJldHVybiAtMTsKPiArICB9Cj4gKwo+ICsgIGlmIChidWYgIT0gTlVMTCkKPiArICB7Cj4g KyAgICBpZiAoIWZha2Vfc3RhdF9kaXNhYmxlZCkKPiArICAgIHsKPiArICAgICAgZmFrZV9zdGF0 YnVmKGJ1Zik7Cj4gKyAgICB9Cj4gKyAgfQo+ICsgIHJldHVybiByZXN1bHQ7Cj4gK30KPiArCj4g Ky8qIEFkZGVkIGluIHYwLjggYXMgc3VnZ2VzdGVkIGJ5IERhbmllbCBLYWhuIEdpbGxtb3IgKi8K PiArI2lmbmRlZiBOT19BVEZJTEUKPiAraW50IF9fZnhzdGF0YXQoaW50IHZlciwgaW50IGZpbGRl cywgY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBzdGF0ICpidWYsIGludCBmbGFnKQo+ICt7 Cj4gKyAgaWYgKCFpbml0aWFsaXplZCkKPiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9 Cj4gKyAgaWYgKE5VTEwgPT0gcmVhbF9mc3RhdGF0KQo+ICsgIHsgLyogZGxzeW0oKSBmYWlsZWQg Ki8KPiArI2lmZGVmIERFQlVHCj4gKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGlt ZSBwcm9ibGVtOiBvcmlnaW5hbCBmc3RhdGF0KCkgbm90IGZvdW5kLlxuIik7Cj4gKyNlbmRpZgo+ ICsgICAgcmV0dXJuIC0xOyAvKiBwcm9wYWdhdGUgZXJyb3IgdG8gY2FsbGVyICovCj4gKyAgfQo+ ICsKPiArICBpbnQgcmVzdWx0Owo+ICsgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9IHJlYWxfZnN0 YXRhdCh2ZXIsIGZpbGRlcywgZmlsZW5hbWUsIGJ1ZiwgZmxhZykpOwo+ICsgIGlmIChyZXN1bHQg PT0gLTEpCj4gKyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArCj4gKyAgaWYgKGJ1ZiAh PSBOVUxMKQo+ICsgIHsKPiArICAgIGlmICghZmFrZV9zdGF0X2Rpc2FibGVkKQo+ICsgICAgewo+ ICsgICAgICBmYWtlX3N0YXRidWYoYnVmKTsKPiArICAgIH0KPiArICB9Cj4gKyAgcmV0dXJuIHJl c3VsdDsKPiArfQo+ICsjZW5kaWYKPiArCj4gKy8qIENvbnRyaWJ1dGVkIGJ5IFBoaWxpcHAgSGFj aHRtYW5uIGluIHZlcnNpb24gMC42ICovCj4gK2ludCBfX2x4c3RhdCAoaW50IHZlciwgY29uc3Qg Y2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKmJ1ZikKPiArewo+ICsgIGlmICghaW5pdGlhbGl6ZWQp Cj4gKyAgewo+ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChOVUxMID09IHJlYWxf bHN0YXQpCj4gKyAgeyAgLyogZGxzeW0oKSBmYWlsZWQgKi8KPiArI2lmZGVmIERFQlVHCj4gKyAg ICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBwcm9ibGVtOiBvcmlnaW5hbCBsc3Rh dCgpIG5vdCBmb3VuZC5cbiIpOwo+ICsjZW5kaWYKPiArICAgIHJldHVybiAtMTsgLyogcHJvcGFn YXRlIGVycm9yIHRvIGNhbGxlciAqLwo+ICsgIH0KPiArCj4gKyAgaW50IHJlc3VsdDsKPiArICBE T05UX0ZBS0VfVElNRShyZXN1bHQgPSByZWFsX2xzdGF0KHZlciwgcGF0aCwgYnVmKSk7Cj4gKyAg aWYgKHJlc3VsdCA9PSAtMSkKPiArICB7Cj4gKyAgICByZXR1cm4gLTE7Cj4gKyAgfQo+ICsKPiAr ICBpZiAoYnVmICE9IE5VTEwpCj4gKyAgewo+ICsgICAgaWYgKCFmYWtlX3N0YXRfZGlzYWJsZWQp Cj4gKyAgICB7Cj4gKyAgICAgIGZha2Vfc3RhdGJ1ZihidWYpOwo+ICsgICAgfQo+ICsgIH0KPiAr ICByZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICsvKiBDb250cmlidXRlZCBieSBQaGlsaXBwIEhh Y2h0bWFubiBpbiB2ZXJzaW9uIDAuNiAqLwo+ICtpbnQgX194c3RhdDY0IChpbnQgdmVyLCBjb25z dCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdDY0ICpidWYpCj4gK3sKPiArICBpZiAoIWluaXRpYWxp emVkKQo+ICsgIHsKPiArICAgIGZ0cGxfaW5pdCgpOwo+ICsgIH0KPiArICBpZiAoTlVMTCA9PSBy ZWFsX3N0YXQ2NCkKPiArICB7IC8qIGRsc3ltKCkgZmFpbGVkICovCj4gKyNpZmRlZiBERUJVRwo+ ICsgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxlbTogb3JpZ2luYWwg c3RhdCgpIG5vdCBmb3VuZC5cbiIpOwo+ICsjZW5kaWYKPiArICAgIHJldHVybiAtMTsgLyogcHJv cGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLwo+ICsgIH0KPiArCj4gKyAgaW50IHJlc3VsdDsKPiAr ICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSByZWFsX3N0YXQ2NCh2ZXIsIHBhdGgsIGJ1ZikpOwo+ ICsgIGlmIChyZXN1bHQgPT0gLTEpCj4gKyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiAr Cj4gKyAgaWYgKGJ1ZiAhPSBOVUxMKQo+ICsgIHsKPiArICAgIGlmICghZmFrZV9zdGF0X2Rpc2Fi bGVkKQo+ICsgICAgewo+ICsgICAgICBmYWtlX3N0YXQ2NGJ1ZihidWYpOwo+ICsgICAgfQo+ICsg IH0KPiArICByZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICsvKiBDb250cmlidXRlZCBieSBQaGls aXBwIEhhY2h0bWFubiBpbiB2ZXJzaW9uIDAuNiAqLwo+ICtpbnQgX19meHN0YXQ2NCAoaW50IHZl ciwgaW50IGZpbGRlcywgc3RydWN0IHN0YXQ2NCAqYnVmKQo+ICt7Cj4gKyAgaWYgKCFpbml0aWFs aXplZCkKPiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4gKyAgaWYgKE5VTEwgPT0g cmVhbF9mc3RhdDY0KQo+ICsgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCj4gKyNpZmRlZiBERUJV Rwo+ICsgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxlbTogb3JpZ2lu YWwgZnN0YXQoKSBub3QgZm91bmQuXG4iKTsKPiArI2VuZGlmCj4gKyAgICByZXR1cm4gLTE7IC8q IHByb3BhZ2F0ZSBlcnJvciB0byBjYWxsZXIgKi8KPiArICB9Cj4gKwo+ICsgIGludCByZXN1bHQ7 Cj4gKyAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gcmVhbF9mc3RhdDY0KHZlciwgZmlsZGVzLCBi dWYpKTsKPiArICBpZiAocmVzdWx0ID09IC0xKQo+ICsgIHsKPiArICAgIHJldHVybiAtMTsKPiAr ICB9Cj4gKwo+ICsgIGlmIChidWYgIT0gTlVMTCkKPiArICB7Cj4gKyAgICBpZiAoIWZha2Vfc3Rh dF9kaXNhYmxlZCkKPiArICAgIHsKPiArICAgICAgZmFrZV9zdGF0NjRidWYoYnVmKTsKPiArICAg IH0KPiArICB9Cj4gKyAgcmV0dXJuIHJlc3VsdDsKPiArfQo+ICsKPiArLyogQWRkZWQgaW4gdjAu OCBhcyBzdWdnZXN0ZWQgYnkgRGFuaWVsIEthaG4gR2lsbG1vciAqLwo+ICsjaWZuZGVmIE5PX0FU RklMRQo+ICtpbnQgX19meHN0YXRhdDY0IChpbnQgdmVyLCBpbnQgZmlsZGVzLCBjb25zdCBjaGFy ICpmaWxlbmFtZSwgc3RydWN0IHN0YXQ2NCAqYnVmLCBpbnQgZmxhZykKPiArewo+ICsgIGlmICgh aW5pdGlhbGl6ZWQpCj4gKyAgewo+ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChO VUxMID09IHJlYWxfZnN0YXRhdDY0KQo+ICsgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCj4gKyNp ZmRlZiBERUJVRwo+ICsgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxl bTogb3JpZ2luYWwgZnN0YXRhdDY0KCkgbm90IGZvdW5kLlxuIik7Cj4gKyNlbmRpZgo+ICsgICAg cmV0dXJuIC0xOyAvKiBwcm9wYWdhdGUgZXJyb3IgdG8gY2FsbGVyICovCj4gKyAgfQo+ICsKPiAr ICBpbnQgcmVzdWx0Owo+ICsgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9IHJlYWxfZnN0YXRhdDY0 KHZlciwgZmlsZGVzLCBmaWxlbmFtZSwgYnVmLCBmbGFnKSk7Cj4gKyAgaWYgKHJlc3VsdCA9PSAt MSkKPiArICB7Cj4gKyAgICByZXR1cm4gLTE7Cj4gKyAgfQo+ICsKPiArICBpZiAoYnVmICE9IE5V TEwpCj4gKyAgewo+ICsgICAgaWYgKCFmYWtlX3N0YXRfZGlzYWJsZWQpCj4gKyAgICB7Cj4gKyAg ICAgIGZha2Vfc3RhdDY0YnVmKGJ1Zik7Cj4gKyAgICB9Cj4gKyAgfQo+ICsgIHJldHVybiByZXN1 bHQ7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICsvKiBDb250cmlidXRlZCBieSBQaGlsaXBwIEhhY2h0 bWFubiBpbiB2ZXJzaW9uIDAuNiAqLwo+ICtpbnQgX19seHN0YXQ2NCAoaW50IHZlciwgY29uc3Qg Y2hhciAqcGF0aCwgc3RydWN0IHN0YXQ2NCAqYnVmKQo+ICt7Cj4gKyAgaWYgKCFpbml0aWFsaXpl ZCkKPiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4gKyAgaWYgKE5VTEwgPT0gcmVh bF9sc3RhdDY0KQo+ICsgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCj4gKyNpZmRlZiBERUJVRwo+ ICsgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxlbTogb3JpZ2luYWwg bHN0YXQoKSBub3QgZm91bmQuXG4iKTsKPiArI2VuZGlmCj4gKyAgICByZXR1cm4gLTE7IC8qIHBy b3BhZ2F0ZSBlcnJvciB0byBjYWxsZXIgKi8KPiArICB9Cj4gKwo+ICsgIGludCByZXN1bHQ7Cj4g KyAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gcmVhbF9sc3RhdDY0KHZlciwgcGF0aCwgYnVmKSk7 Cj4gKyAgaWYgKHJlc3VsdCA9PSAtMSkKPiArICB7Cj4gKyAgICByZXR1cm4gLTE7Cj4gKyAgfQo+ ICsKPiArICBpZiAoYnVmICE9IE5VTEwpCj4gKyAgewo+ICsgICAgaWYgKCFmYWtlX3N0YXRfZGlz YWJsZWQpCj4gKyAgICB7Cj4gKyAgICAgIGZha2Vfc3RhdDY0YnVmKGJ1Zik7Cj4gKyAgICB9Cj4g KyAgfQo+ICsgIHJldHVybiByZXN1bHQ7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICsvKgo+ICsgKiAg ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Cj4gKyAqICAgICAgRmFrZWQgc3lzdGVtIGZ1bmN0aW9uczogc2xl ZXAvYWxhcm0vcG9sbC90aW1lciByZWxhdGVkICA9PT0gRkFLRShTTEVFUCkKPiArICogICAgICA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQo+ICsgKiAgICAgIENvbnRyaWJ1dGVkIGJ5IEJhbGludCBSZWN6ZXkgaW4g djAuOS41Cj4gKyAqLwo+ICsKPiArI2lmZGVmIEZBS0VfU0xFRVAKPiArLyoKPiArICogRmFrZWQg bmFub3NsZWVwKCkKPiArICovCj4gK2ludCBuYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVj ICpyZXEsIHN0cnVjdCB0aW1lc3BlYyAqcmVtKQo+ICt7Cj4gKyAgaW50IHJlc3VsdDsKPiArICBz dHJ1Y3QgdGltZXNwZWMgcmVhbF9yZXE7Cj4gKwo+ICsgIGlmICghaW5pdGlhbGl6ZWQpCj4gKyAg ewo+ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChyZWFsX25hbm9zbGVlcCA9PSBO VUxMKQo+ICsgIHsKPiArICAgIHJldHVybiAtMTsKPiArICB9Cj4gKyAgaWYgKHJlcSAhPSBOVUxM KQo+ICsgIHsKPiArICAgIGlmICh1c2VyX3JhdGVfc2V0ICYmICFkb250X2Zha2UpCj4gKyAgICB7 Cj4gKyAgICAgIHRpbWVzcGVjbXVsKHJlcSwgMS4wIC8gdXNlcl9yYXRlLCAmcmVhbF9yZXEpOwo+ ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsgICAgICByZWFsX3JlcSA9ICpyZXE7Cj4g KyAgICB9Cj4gKyAgfQo+ICsgIGVsc2UKPiArICB7Cj4gKyAgICByZXR1cm4gLTE7Cj4gKyAgfQo+ ICsKPiArICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfbmFub3NsZWVwKSgmcmVhbF9y ZXEsIHJlbSkpOwo+ICsgIGlmIChyZXN1bHQgPT0gLTEpCj4gKyAgewo+ICsgICAgcmV0dXJuIHJl c3VsdDsKPiArICB9Cj4gKwo+ICsgIC8qIGZha2UgcmV0dXJuZWQgcGFydHMgKi8KPiArICBpZiAo KHJlbSAhPSBOVUxMKSAmJiAoKHJlbS0+dHZfc2VjICE9IDApIHx8IChyZW0tPnR2X25zZWMgIT0g MCkpKQo+ICsgIHsKPiArICAgIGlmICh1c2VyX3JhdGVfc2V0ICYmICFkb250X2Zha2UpCj4gKyAg ICB7Cj4gKyAgICAgIHRpbWVzcGVjbXVsKHJlbSwgdXNlcl9yYXRlLCByZW0pOwo+ICsgICAgfQo+ ICsgIH0KPiArICAvKiByZXR1cm4gdGhlIHJlc3VsdCB0byB0aGUgY2FsbGVyICovCj4gKyAgcmV0 dXJuIHJlc3VsdDsKPiArfQo+ICsKPiArLyoKPiArICogRmFrZWQgdXNsZWVwKCkKPiArICovCj4g K2ludCB1c2xlZXAodXNlY29uZHNfdCB1c2VjKQo+ICt7Cj4gKyAgaW50IHJlc3VsdDsKPiArCj4g KyAgaWYgKCFpbml0aWFsaXplZCkKPiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4g KyAgaWYgKHVzZXJfcmF0ZV9zZXQgJiYgIWRvbnRfZmFrZSkKPiArICB7Cj4gKyAgICBzdHJ1Y3Qg dGltZXNwZWMgcmVhbF9yZXE7Cj4gKwo+ICsgICAgaWYgKHJlYWxfbmFub3NsZWVwID09IE5VTEwp Cj4gKyAgICB7Cj4gKyAgICAgIC8qIGZhbGwgYmFjayB0byB1c2xlZXAoKSAqLwo+ICsgICAgICBp ZiAocmVhbF91c2xlZXAgPT0gTlVMTCkKPiArICAgICAgewo+ICsgICAgICAgIHJldHVybiAtMTsK PiArICAgICAgfQo+ICsgICAgICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfdXNsZWVw KSgoMS4wIC8gdXNlcl9yYXRlKSAqIHVzZWMpKTsKPiArICAgICAgcmV0dXJuIHJlc3VsdDsKPiAr ICAgIH0KPiArCj4gKyAgICByZWFsX3JlcS50dl9zZWMgPSB1c2VjIC8gMTAwMDAwMDsKPiArICAg IHJlYWxfcmVxLnR2X25zZWMgPSAodXNlYyAlIDEwMDAwMDApICogMTAwMDsKPiArICAgIHRpbWVz cGVjbXVsKCZyZWFsX3JlcSwgMS4wIC8gdXNlcl9yYXRlLCAmcmVhbF9yZXEpOwo+ICsgICAgRE9O VF9GQUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX25hbm9zbGVlcCkoJnJlYWxfcmVxLCBOVUxMKSk7 Cj4gKyAgfQo+ICsgIGVsc2UKPiArICB7Cj4gKyAgICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAo KnJlYWxfdXNsZWVwKSh1c2VjKSk7Cj4gKyAgfQo+ICsgIHJldHVybiByZXN1bHQ7Cj4gK30KPiAr Cj4gKy8qCj4gKyAqIEZha2VkIHNsZWVwKCkKPiArICovCj4gK3Vuc2lnbmVkIGludCBzbGVlcCh1 bnNpZ25lZCBpbnQgc2Vjb25kcykKPiArewo+ICsgIGlmICghaW5pdGlhbGl6ZWQpCj4gKyAgewo+ ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmICh1c2VyX3JhdGVfc2V0ICYmICFkb250 X2Zha2UpCj4gKyAgewo+ICsgICAgaWYgKHJlYWxfbmFub3NsZWVwID09IE5VTEwpCj4gKyAgICB7 Cj4gKyAgICAgIC8qIGZhbGwgYmFjayB0byBzbGVlcCAqLwo+ICsgICAgICB1bnNpZ25lZCBpbnQg cmV0Owo+ICsgICAgICBpZiAocmVhbF9zbGVlcCA9PSBOVUxMKQo+ICsgICAgICB7Cj4gKyAgICAg ICAgcmV0dXJuIDA7Cj4gKyAgICAgIH0KPiArICAgICAgRE9OVF9GQUtFX1RJTUUocmV0ID0gKCpy ZWFsX3NsZWVwKSgoMS4wIC8gdXNlcl9yYXRlKSAqIHNlY29uZHMpKTsKPiArICAgICAgcmV0dXJu ICh1c2VyX3JhdGVfc2V0ICYmICFkb250X2Zha2UpPyh1c2VyX3JhdGUgKiByZXQpOnJldDsKPiAr ICAgIH0KPiArICAgIGVsc2UKPiArICAgIHsKPiArICAgICAgaW50IHJlc3VsdDsKPiArICAgICAg c3RydWN0IHRpbWVzcGVjIHJlYWxfcmVxID0ge3NlY29uZHMsIDB9LCByZW07Cj4gKyAgICAgIHRp bWVzcGVjbXVsKCZyZWFsX3JlcSwgMS4wIC8gdXNlcl9yYXRlLCAmcmVhbF9yZXEpOwo+ICsgICAg ICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfbmFub3NsZWVwKSgmcmVhbF9yZXEsICZy ZW0pKTsKPiArICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKPiArICAgICAgewo+ICsgICAgICAgIHJl dHVybiAwOwo+ICsgICAgICB9Cj4gKwo+ICsgICAgICAvKiBmYWtlIHJldHVybmVkIHBhcnRzICov Cj4gKyAgICAgIGlmICgocmVtLnR2X3NlYyAhPSAwKSB8fCAocmVtLnR2X25zZWMgIT0gMCkpCj4g KyAgICAgIHsKPiArICAgICAgICB0aW1lc3BlY211bCgmcmVtLCB1c2VyX3JhdGUsICZyZW0pOwo+ ICsgICAgICB9Cj4gKyAgICAgIC8qIHJldHVybiB0aGUgcmVzdWx0IHRvIHRoZSBjYWxsZXIgKi8K PiArICAgICAgcmV0dXJuIHJlbS50dl9zZWM7Cj4gKyAgICB9Cj4gKyAgfQo+ICsgIGVsc2UKPiAr ICB7Cj4gKyAgICAvKiBubyBuZWVkIHRvIGZha2UgYW55dGhpbmcgKi8KPiArICAgIHVuc2lnbmVk IGludCByZXQ7Cj4gKyAgICBET05UX0ZBS0VfVElNRShyZXQgPSAoKnJlYWxfc2xlZXApKHNlY29u ZHMpKTsKPiArICAgIHJldHVybiByZXQ7Cj4gKyAgfQo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBGYWtl ZCBhbGFybSgpCj4gKyAqIEBub3RlIGR1ZSB0byByb3VuZGluZyBhbGFybSgyKSB3aXRoIGZha2V0 aW1lIC1mICcrMCB4Nycgd29uJ3Qgd2FpdCAyLzcKPiArICogd2FsbCBjbG9jayBzZWNvbmRzIGJ1 dCAwIHNlY29uZHMKPiArICovCj4gK3Vuc2lnbmVkIGludCBhbGFybSh1bnNpZ25lZCBpbnQgc2Vj b25kcykKPiArewo+ICsgIHVuc2lnbmVkIGludCByZXQ7Cj4gKyAgdW5zaWduZWQgaW50IHNlY29u ZHNfcmVhbCA9ICh1c2VyX3JhdGVfc2V0ICYmICFkb250X2Zha2UpPygoMS4wIC8gdXNlcl9yYXRl KSAqIHNlY29uZHMpOnNlY29uZHM7Cj4gKwo+ICsgIGlmICghaW5pdGlhbGl6ZWQpCj4gKyAgewo+ ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChyZWFsX2FsYXJtID09IE5VTEwpCj4g KyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArCj4gKyAgRE9OVF9GQUtFX1RJTUUocmV0 ID0gKCpyZWFsX2FsYXJtKShzZWNvbmRzX3JlYWwpKTsKPiArICByZXR1cm4gKHVzZXJfcmF0ZV9z ZXQgJiYgIWRvbnRfZmFrZSk/KHVzZXJfcmF0ZSAqIHJldCk6cmV0Owo+ICt9Cj4gKwo+ICsvKgo+ ICsgKiBGYWtlZCBwcG9sbCgpCj4gKyAqLwo+ICtpbnQgcHBvbGwoc3RydWN0IHBvbGxmZCAqZmRz LCBuZmRzX3QgbmZkcywKPiArICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dF90cywg Y29uc3Qgc2lnc2V0X3QgKnNpZ21hc2spCj4gK3sKPiArICBzdHJ1Y3QgdGltZXNwZWMgcmVhbF90 aW1lb3V0LCAqcmVhbF90aW1lb3V0X3B0Owo+ICsgIGludCByZXQ7Cj4gKwo+ICsgIGlmICghaW5p dGlhbGl6ZWQpCj4gKyAgewo+ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChyZWFs X3Bwb2xsID09IE5VTEwpCj4gKyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArICBpZiAo dGltZW91dF90cyAhPSBOVUxMKQo+ICsgIHsKPiArICAgIGlmICh1c2VyX3JhdGVfc2V0ICYmICFk b250X2Zha2UgJiYgKHRpbWVvdXRfdHMtPnR2X3NlYyA+IDApKQo+ICsgICAgewo+ICsgICAgICB0 aW1lc3BlY211bCh0aW1lb3V0X3RzLCAxLjAgLyB1c2VyX3JhdGUsICZyZWFsX3RpbWVvdXQpOwo+ ICsgICAgICByZWFsX3RpbWVvdXRfcHQgPSAmcmVhbF90aW1lb3V0Owo+ICsgICAgfQo+ICsgICAg ZWxzZQo+ICsgICAgewo+ICsgICAgICAvKiBjYXN0IGF3YXkgY29uc3RuZXNzICovCj4gKyAgICAg IHJlYWxfdGltZW91dF9wdCA9IChzdHJ1Y3QgdGltZXNwZWMgKil0aW1lb3V0X3RzOwo+ICsgICAg fQo+ICsgIH0KPiArICBlbHNlCj4gKyAgewo+ICsgICAgcmVhbF90aW1lb3V0X3B0ID0gTlVMTDsK PiArICB9Cj4gKwo+ICsgIERPTlRfRkFLRV9USU1FKHJldCA9ICgqcmVhbF9wcG9sbCkoZmRzLCBu ZmRzLCByZWFsX3RpbWVvdXRfcHQsIHNpZ21hc2spKTsKPiArICByZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICsvKgo+ICsgKiBGYWtlZCBwb2xsKCkKPiArICovCj4gK2ludCBwb2xsKHN0cnVjdCBwb2xs ZmQgKmZkcywgbmZkc190IG5mZHMsIGludCB0aW1lb3V0KQo+ICt7Cj4gKyAgaW50IHJldCwgdGlt ZW91dF9yZWFsID0gKHVzZXJfcmF0ZV9zZXQgJiYgIWRvbnRfZmFrZSAmJiAodGltZW91dCA+IDAp KT8odGltZW91dCAvIHVzZXJfcmF0ZSk6dGltZW91dDsKPiArCj4gKyAgaWYgKCFpbml0aWFsaXpl ZCkKPiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4gKyAgaWYgKHJlYWxfcG9sbCA9 PSBOVUxMKQo+ICsgIHsKPiArICAgIHJldHVybiAtMTsKPiArICB9Cj4gKwo+ICsgIERPTlRfRkFL RV9USU1FKHJldCA9ICgqcmVhbF9wb2xsKShmZHMsIG5mZHMsIHRpbWVvdXRfcmVhbCkpOwo+ICsg IHJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qCj4gKyAqIEZha2VkIHNlbGVjdCgpCj4gKyAqLwo+ ICtpbnQgc2VsZWN0KGludCBuZmRzLCBmZF9zZXQgKnJlYWRmZHMsCj4gKyAgICAgICAgICAgZmRf c2V0ICp3cml0ZWZkcywKPiArICAgICAgICAgICBmZF9zZXQgKmVycm9yZmRzLAo+ICsgICAgICAg ICAgIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0KQo+ICt7Cj4gKyAgaW50IHJldDsKPiArICBzdHJ1 Y3QgdGltZXZhbCB0aW1lb3V0X3JlYWw7Cj4gKwo+ICsgIGlmICghaW5pdGlhbGl6ZWQpCj4gKyAg ewo+ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsKPiArICBpZiAocmVhbF9zZWxlY3QgPT0g TlVMTCkKPiArICB7Cj4gKyAgICByZXR1cm4gLTE7Cj4gKyAgfQo+ICsKPiArICBpZiAodGltZW91 dCAhPSBOVUxMKQo+ICsgIHsKPiArICAgIGlmICh1c2VyX3JhdGVfc2V0ICYmICFkb250X2Zha2Ug JiYgKHRpbWVvdXQtPnR2X3NlYyA+IDAgfHwgdGltZW91dC0+dHZfdXNlYyA+IDApKQo+ICsgICAg ewo+ICsgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7Cj4gKwo+ICsgICAgICB0cy50dl9zZWMgPSB0 aW1lb3V0LT50dl9zZWM7Cj4gKyAgICAgIHRzLnR2X25zZWMgPSB0aW1lb3V0LT50dl91c2VjICog MTAwMDsKPiArCj4gKyAgICAgIHRpbWVzcGVjbXVsKCZ0cywgMS4wIC8gdXNlcl9yYXRlLCAmdHMp Owo+ICsKPiArICAgICAgdGltZW91dF9yZWFsLnR2X3NlYyA9IHRzLnR2X3NlYzsKPiArICAgICAg dGltZW91dF9yZWFsLnR2X3VzZWMgPSB0cy50dl9uc2VjIC8gMTAwMDsKPiArICAgIH0KPiArICAg IGVsc2UKPiArICAgIHsKPiArICAgICAgdGltZW91dF9yZWFsLnR2X3NlYyA9IHRpbWVvdXQtPnR2 X3NlYzsKPiArICAgICAgdGltZW91dF9yZWFsLnR2X3VzZWMgPSB0aW1lb3V0LT50dl91c2VjOwo+ ICsgICAgfQo+ICsgIH0KPiArCj4gKyAgRE9OVF9GQUtFX1RJTUUocmV0ID0gKCpyZWFsX3NlbGVj dCkobmZkcywgcmVhZGZkcywgd3JpdGVmZHMsIGVycm9yZmRzLCB0aW1lb3V0ID09IE5VTEwgPyB0 aW1lb3V0IDogJnRpbWVvdXRfcmVhbCkpOwo+ICsgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK2lu dCBzZW1fdGltZWR3YWl0KHNlbV90ICpzZW0sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzX3Rp bWVvdXQpCj4gK3sKPiArICBpbnQgcmVzdWx0Owo+ICsgIHN0cnVjdCB0aW1lc3BlYyByZWFsX2Fi c190aW1lb3V0LCAqcmVhbF9hYnNfdGltZW91dF9wdDsKPiArCj4gKyAgLyogc2FuaXR5IGNoZWNr ICovCj4gKyAgaWYgKGFic190aW1lb3V0ID09IE5VTEwpCj4gKyAgewo+ICsgICAgcmV0dXJuIC0x Owo+ICsgIH0KPiArCj4gKyAgaWYgKE5VTEwgPT0gcmVhbF9zZW1fdGltZWR3YWl0KQo+ICsgIHsg IC8qIGRsc3ltKCkgZmFpbGVkICovCj4gKyNpZmRlZiBERUJVRwo+ICsgICAgKHZvaWQpIGZwcmlu dGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxlbTogb3JpZ2luYWwgc2VtX3RpbWVkd2FpdCgpIG5v dCBmb3VuZC5cbiIpOwo+ICsjZW5kaWYKPiArICAgIHJldHVybiAtMTsgLyogcHJvcGFnYXRlIGVy cm9yIHRvIGNhbGxlciAqLwo+ICsgIH0KPiArCj4gKyAgaWYgKCFkb250X2Zha2UpCj4gKyAgewo+ ICsgICAgc3RydWN0IHRpbWVzcGVjIHRkaWZmLCB0aW1lYWRqOwo+ICsKPiArICAgIHRpbWVzcGVj c3ViKGFic190aW1lb3V0LCAmZnRwbF9zdGFydHRpbWUucmVhbCwgJnRkaWZmKTsKPiArCj4gKyAg ICBpZiAodXNlcl9yYXRlX3NldCkKPiArICAgIHsKPiArICAgICAgdGltZXNwZWNtdWwoJnRkaWZm LCB1c2VyX3JhdGUsICZ0aW1lYWRqKTsKPiArICAgIH0KPiArICAgIGVsc2UKPiArICAgIHsKPiAr ICAgICAgICB0aW1lYWRqID0gdGRpZmY7Cj4gKyAgICB9Cj4gKyAgICB0aW1lc3BlY2FkZCgmdXNl cl9mYWtlZF90aW1lX3RpbWVzcGVjLCAmdGltZWFkaiwgJnJlYWxfYWJzX3RpbWVvdXQpOwo+ICsg ICAgcmVhbF9hYnNfdGltZW91dF9wdCA9ICZyZWFsX2Fic190aW1lb3V0Owo+ICsgIH0KPiArICBl bHNlCj4gKyAgewo+ICsgICAgLyogY2FzdCBhd2F5IGNvbnN0bmVzcyAqLwo+ICsgICAgcmVhbF9h YnNfdGltZW91dF9wdCA9IChzdHJ1Y3QgdGltZXNwZWMgKilhYnNfdGltZW91dDsKPiArICB9Cj4g Kwo+ICsgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9zZW1fdGltZWR3YWl0KShzZW0s IHJlYWxfYWJzX3RpbWVvdXRfcHQpKTsKPiArICByZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKyNlbmRp Zgo+ICsKPiArI2lmbmRlZiBfX0FQUExFX18KPiArI2lmZGVmIEZBS0VfVElNRVJTCj4gKwo+ICsv KiB0aW1lciByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyAqLwo+ICt0eXBlZGVmIHVu aW9uIHsKPiArICBpbnQgaW50X21lbWJlcjsKPiArICB0aW1lcl90IHRpbWVyX3RfbWVtYmVyOwo+ ICt9IHRpbWVyX3Rfb3JfaW50Owo+ICsKPiArLyoKPiArICogRmFrZXRpbWUncyBmdW5jdGlvbiBp bXBsZW1lbnRhdGlvbidzIGNvbXBhdGliaWxpdHkgbW9kZQo+ICsgKi8KPiArdHlwZWRlZiBlbnVt IHtGVF9DT01QQVRfR0xJQkNfMl8yLCBGVF9DT01QQVRfR0xJQkNfMl8zXzN9IGZ0X2xpYl9jb21w YXQ7Cj4gKwo+ICsKPiArLyoKPiArICogRmFrZWQgdGltZXJfc2V0dGltZSgpCj4gKyAqIERvZXMg bm90IGFmZmVjdCB0aW1lciBzcGVlZCB3aGVuIHN0ZXBwaW5nIGNsb2NrIHdpdGggZWFjaCB0aW1l KCkgY2FsbC4KPiArICovCj4gK3N0YXRpYyBpbnQKPiArdGltZXJfc2V0dGltZV9jb21tb24odGlt ZXJfdF9vcl9pbnQgdGltZXJpZCwgaW50IGZsYWdzLAo+ICsgICAgICAgICBjb25zdCBzdHJ1Y3Qg aXRpbWVyc3BlYyAqbmV3X3ZhbHVlLAo+ICsgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqb2xk X3ZhbHVlLCBmdF9saWJfY29tcGF0IGNvbXBhdCkKPiArewo+ICsgIGludCByZXN1bHQ7Cj4gKyAg c3RydWN0IGl0aW1lcnNwZWMgbmV3X3JlYWw7Cj4gKyAgc3RydWN0IGl0aW1lcnNwZWMgKm5ld19y ZWFsX3B0ID0gJm5ld19yZWFsOwo+ICsKPiArICBpZiAoIWluaXRpYWxpemVkKQo+ICsgIHsKPiAr ICAgIGZ0cGxfaW5pdCgpOwo+ICsgIH0KPiArICBpZiAobmV3X3ZhbHVlID09IE5VTEwpCj4gKyAg ewo+ICsgICAgbmV3X3JlYWxfcHQgPSBOVUxMOwo+ICsgIH0KPiArICBlbHNlIGlmIChkb250X2Zh a2UpCj4gKyAgewo+ICsgICAgLyogY2FzdCBhd2F5IGNvbnN0bmVzcyovCj4gKyAgICBuZXdfcmVh bF9wdCA9IChzdHJ1Y3QgaXRpbWVyc3BlYyAqKW5ld192YWx1ZTsKPiArICB9Cj4gKyAgZWxzZQo+ ICsgIHsKPiArICAgIC8qIHNldCBpdF92YWx1ZSAqLwo+ICsgICAgaWYgKChuZXdfdmFsdWUtPml0 X3ZhbHVlLnR2X3NlYyAhPSAwKSB8fAo+ICsgICAgICAgIChuZXdfdmFsdWUtPml0X3ZhbHVlLnR2 X25zZWMgIT0gMCkpCj4gKyAgICB7Cj4gKyAgICAgIGlmIChmbGFncyAmIFRJTUVSX0FCU1RJTUUp Cj4gKyAgICAgIHsKPiArICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdGRpZmYsIHRpbWVhZGo7Cj4g KyAgICAgICAgdGltZXNwZWNzdWIoJm5ld192YWx1ZS0+aXRfdmFsdWUsICZ1c2VyX2Zha2VkX3Rp bWVfdGltZXNwZWMsICZ0aW1lYWRqKTsKPiArICAgICAgICBpZiAodXNlcl9yYXRlX3NldCkKPiAr ICAgICAgICB7Cj4gKyAgICAgICAgICB0aW1lc3BlY211bCgmdGltZWFkaiwgMS4wL3VzZXJfcmF0 ZSwgJnRkaWZmKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgIHRkaWZmID0gdGltZWFkajsKPiArICAgICAgICB9Cj4gKyAgICAgICAgLyogb25s eSBDTE9DS19SRUFMVElNRSBpcyBoYW5kbGVkICovCj4gKyAgICAgICAgdGltZXNwZWNhZGQoJmZ0 cGxfc3RhcnR0aW1lLnJlYWwsICZ0ZGlmZiwgJm5ld19yZWFsLml0X3ZhbHVlKTsKPiArICAgICAg fQo+ICsgICAgICBlbHNlCj4gKyAgICAgIHsKPiArICAgICAgICBpZiAodXNlcl9yYXRlX3NldCkK PiArICAgICAgICB7Cj4gKyAgICAgICAgICB0aW1lc3BlY211bCgmbmV3X3ZhbHVlLT5pdF92YWx1 ZSwgMS4wL3VzZXJfcmF0ZSwgJm5ld19yZWFsLml0X3ZhbHVlKTsKPiArICAgICAgICB9Cj4gKyAg ICAgICAgZWxzZQo+ICsgICAgICAgIHsKPiArICAgICAgICAgIG5ld19yZWFsLml0X3ZhbHVlID0g bmV3X3ZhbHVlLT5pdF92YWx1ZTsKPiArICAgICAgICB9Cj4gKyAgICAgIH0KPiArICAgIH0KPiAr ICAgIGVsc2UKPiArICAgIHsKPiArICAgICAgbmV3X3JlYWwuaXRfdmFsdWUgPSBuZXdfdmFsdWUt Pml0X3ZhbHVlOwo+ICsgICAgfQo+ICsgICAgLyogc2V0IGl0X2ludGVydmFsICovCj4gKyAgICBp ZiAodXNlcl9yYXRlX3NldCAmJiAoKG5ld192YWx1ZS0+aXRfaW50ZXJ2YWwudHZfc2VjICE9IDAp IHx8Cj4gKyAgICAgICAobmV3X3ZhbHVlLT5pdF9pbnRlcnZhbC50dl9uc2VjICE9IDApKSkKPiAr ICAgIHsKPiArICAgICAgdGltZXNwZWNtdWwoJm5ld192YWx1ZS0+aXRfaW50ZXJ2YWwsIDEuMC91 c2VyX3JhdGUsICZuZXdfcmVhbC5pdF9pbnRlcnZhbCk7Cj4gKyAgICB9Cj4gKyAgICBlbHNlCj4g KyAgICB7Cj4gKyAgICAgIG5ld19yZWFsLml0X2ludGVydmFsID0gbmV3X3ZhbHVlLT5pdF9pbnRl cnZhbDsKPiArICAgIH0KPiArICB9Cj4gKwo+ICsgIHN3aXRjaCAoY29tcGF0KQo+ICsgIHsKPiAr ICAgIGNhc2UgRlRfQ09NUEFUX0dMSUJDXzJfMjoKPiArICAgICAgRE9OVF9GQUtFX1RJTUUocmVz dWx0ID0gKCpyZWFsX3RpbWVyX3NldHRpbWVfMjIpKHRpbWVyaWQuaW50X21lbWJlciwgZmxhZ3Ms Cj4gKyAgICAgICAgICAgICAgICAgICAgbmV3X3JlYWxfcHQsIG9sZF92YWx1ZSkpOwo+ICsgICAg ICBicmVhazsKPiArICAgIGNhc2UgRlRfQ09NUEFUX0dMSUJDXzJfM18zOgo+ICsgICAgICAgRE9O VF9GQUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX3RpbWVyX3NldHRpbWVfMjMzKSh0aW1lcmlkLnRp bWVyX3RfbWVtYmVyLAo+ICsgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBuZXdfcmVhbF9wdCwg b2xkX3ZhbHVlKSk7Cj4gKyAgICAgICBicmVhazsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgIHJl c3VsdCA9IC0xOwo+ICsgICAgICBicmVhazsKPiArICB9Cj4gKwo+ICsgIGlmIChyZXN1bHQgPT0g LTEpCj4gKyAgewo+ICsgICAgcmV0dXJuIHJlc3VsdDsKPiArICB9Cj4gKwo+ICsgIC8qIGZha2Ug cmV0dXJuZWQgcGFydHMgKi8KPiArICBpZiAoKG9sZF92YWx1ZSAhPSBOVUxMKSAmJiAhZG9udF9m YWtlKQo+ICsgIHsKPiArICAgIGlmICgob2xkX3ZhbHVlLT5pdF92YWx1ZS50dl9zZWMgIT0gMCkg fHwKPiArICAgICAgICAob2xkX3ZhbHVlLT5pdF92YWx1ZS50dl9uc2VjICE9IDApKQo+ICsgICAg ewo+ICsgICAgICByZXN1bHQgPSBmYWtlX2Nsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZv bGRfdmFsdWUtPml0X3ZhbHVlKTsKPiArICAgIH0KPiArICAgIGlmICh1c2VyX3JhdGVfc2V0ICYm ICgob2xkX3ZhbHVlLT5pdF9pbnRlcnZhbC50dl9zZWMgIT0gMCkgfHwKPiArICAgICAgIChvbGRf dmFsdWUtPml0X2ludGVydmFsLnR2X25zZWMgIT0gMCkpKQo+ICsgICAgewo+ICsgICAgICB0aW1l c3BlY211bCgmb2xkX3ZhbHVlLT5pdF9pbnRlcnZhbCwgdXNlcl9yYXRlLCAmb2xkX3ZhbHVlLT5p dF9pbnRlcnZhbCk7Cj4gKyAgICB9Cj4gKyAgfQo+ICsKPiArICAvKiByZXR1cm4gdGhlIHJlc3Vs dCB0byB0aGUgY2FsbGVyICovCj4gKyAgcmV0dXJuIHJlc3VsdDsKPiArfQo+ICsKPiArLyoKPiAr ICogRmFrZWQgdGltZXJfc2V0dGltZSgpIGNvbXBhdGlibGUgd2l0aCBpbXBsZW1lbnRhdGlvbiBp biBHTElCQyAyLjIKPiArICovCj4gK2ludCB0aW1lcl9zZXR0aW1lXzIyKGludCB0aW1lcmlkLCBp bnQgZmxhZ3MsCj4gKyAgICAgICAgIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpuZXdfdmFsdWUs Cj4gKyAgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjICpvbGRfdmFsdWUpCj4gK3sKPiArICBpZiAo IWluaXRpYWxpemVkKQo+ICsgIHsKPiArICAgIGZ0cGxfaW5pdCgpOwo+ICsgIH0KPiArICBpZiAo cmVhbF90aW1lcl9zZXR0aW1lXzIyID09IE5VTEwpCj4gKyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ ICsgIH0KPiArICBlbHNlCj4gKyAgewo+ICsgICAgcmV0dXJuICh0aW1lcl9zZXR0aW1lX2NvbW1v bigodGltZXJfdF9vcl9pbnQpdGltZXJpZCwgZmxhZ3MsIG5ld192YWx1ZSwgb2xkX3ZhbHVlLAo+ ICsgICAgICAgICAgICBGVF9DT01QQVRfR0xJQkNfMl8yKSk7Cj4gKyAgfQo+ICt9Cj4gKwo+ICsv Kgo+ICsgKiBGYWtlZCB0aW1lcl9zZXR0aW1lKCkgY29tcGF0aWJsZSB3aXRoIGltcGxlbWVudGF0 aW9uIGluIEdMSUJDIDIuMy4zCj4gKyAqLwo+ICtpbnQgdGltZXJfc2V0dGltZV8yMzModGltZXJf dCB0aW1lcmlkLCBpbnQgZmxhZ3MsCj4gKyAgICAgIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpu ZXdfdmFsdWUsCj4gKyAgICAgIHN0cnVjdCBpdGltZXJzcGVjICpvbGRfdmFsdWUpCj4gK3sKPiAr ICBpZiAoIWluaXRpYWxpemVkKQo+ICsgIHsKPiArICAgIGZ0cGxfaW5pdCgpOwo+ICsgIH0KPiAr ICBpZiAocmVhbF90aW1lcl9zZXR0aW1lXzIzMyA9PSBOVUxMKQo+ICsgIHsKPiArICAgIHJldHVy biAtMTsKPiArICB9Cj4gKyAgZWxzZQo+ICsgIHsKPiArICAgIHJldHVybiAodGltZXJfc2V0dGlt ZV9jb21tb24oKHRpbWVyX3Rfb3JfaW50KXRpbWVyaWQsIGZsYWdzLCBuZXdfdmFsdWUsIG9sZF92 YWx1ZSwKPiArICAgICAgICAgICAgRlRfQ09NUEFUX0dMSUJDXzJfM18zKSk7Cj4gKyAgfQo+ICt9 Cj4gKwo+ICsvKgo+ICsgKiBGYWtlZCB0aW1lcl9nZXR0aW1lKCkKPiArICogRG9lcyBub3QgYWZm ZWN0IHRpbWVyIHNwZWVkIHdoZW4gc3RlcHBpbmcgY2xvY2sgd2l0aCBlYWNoIHRpbWUoKSBjYWxs Lgo+ICsgKi8KPiAraW50IHRpbWVyX2dldHRpbWVfY29tbW9uKHRpbWVyX3Rfb3JfaW50IHRpbWVy aWQsIHN0cnVjdCBpdGltZXJzcGVjICpjdXJyX3ZhbHVlLCBmdF9saWJfY29tcGF0IGNvbXBhdCkK PiArewo+ICsgIGludCByZXN1bHQ7Cj4gKwo+ICsgIGlmICghaW5pdGlhbGl6ZWQpCj4gKyAgewo+ ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChyZWFsX3RpbWVyX2dldHRpbWVfMjMz ID09IE5VTEwpCj4gKyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArCj4gKyAgc3dpdGNo IChjb21wYXQpCj4gKyAgewo+ICsgICAgY2FzZSBGVF9DT01QQVRfR0xJQkNfMl8yOgo+ICsgICAg ICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfdGltZXJfZ2V0dGltZV8yMikodGltZXJp ZC5pbnRfbWVtYmVyLCBjdXJyX3ZhbHVlKSk7Cj4gKyAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBG VF9DT01QQVRfR0xJQkNfMl8zXzM6Cj4gKyAgICAgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9ICgq cmVhbF90aW1lcl9nZXR0aW1lXzIzMykodGltZXJpZC50aW1lcl90X21lbWJlciwgY3Vycl92YWx1 ZSkpOwo+ICsgICAgICBicmVhazsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgIHJlc3VsdCA9IC0x Owo+ICsgICAgICBicmVhazsKPiArICB9Cj4gKwo+ICsgIGlmIChyZXN1bHQgPT0gLTEpCj4gKyAg ewo+ICsgICAgcmV0dXJuIHJlc3VsdDsKPiArICB9Cj4gKwo+ICsgIC8qIGZha2UgcmV0dXJuZWQg cGFydHMgKi8KPiArICBpZiAoY3Vycl92YWx1ZSAhPSBOVUxMKQo+ICsgIHsKPiArICAgIGlmICh1 c2VyX3JhdGVfc2V0ICYmICFkb250X2Zha2UpCj4gKyAgICB7Cj4gKyAgICAgIHRpbWVzcGVjbXVs KCZjdXJyX3ZhbHVlLT5pdF9pbnRlcnZhbCwgdXNlcl9yYXRlLCAmY3Vycl92YWx1ZS0+aXRfaW50 ZXJ2YWwpOwo+ICsgICAgICB0aW1lc3BlY211bCgmY3Vycl92YWx1ZS0+aXRfdmFsdWUsIHVzZXJf cmF0ZSwgJmN1cnJfdmFsdWUtPml0X3ZhbHVlKTsKPiArICAgIH0KPiArICB9Cj4gKyAgLyogcmV0 dXJuIHRoZSByZXN1bHQgdG8gdGhlIGNhbGxlciAqLwo+ICsgIHJldHVybiByZXN1bHQ7Cj4gK30K PiArCj4gKy8qCj4gKyAqIEZha2VkIHRpbWVyX2dldHRpbWUoKSBjb21wYXRpYmxlIHdpdGggaW1w bGVtZW50YXRpb24gaW4gR0xJQkMgMi4yCj4gKyAqLwo+ICtpbnQgdGltZXJfZ2V0dGltZV8yMih0 aW1lcl90IHRpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpjdXJyX3ZhbHVlKQo+ICt7Cj4gKyAg aWYgKCFpbml0aWFsaXplZCkKPiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4gKyAg aWYgKHJlYWxfdGltZXJfZ2V0dGltZV8yMiA9PSBOVUxMKQo+ICsgIHsKPiArICAgIHJldHVybiAt MTsKPiArICB9Cj4gKyAgZWxzZQo+ICsgIHsKPiArICAgIHJldHVybiAodGltZXJfZ2V0dGltZV9j b21tb24oKHRpbWVyX3Rfb3JfaW50KXRpbWVyaWQsIGN1cnJfdmFsdWUsCj4gKyAgICAgICAgIEZU X0NPTVBBVF9HTElCQ18yXzIpKTsKPiArICB9Cj4gK30KPiArCj4gKy8qCj4gKyAqIEZha2VkIHRp bWVyX2dldHRpbWUoKSBjb21wYXRpYmxlIHdpdGggaW1wbGVtZW50YXRpb24gaW4gR0xJQkMgMi4z LjMKPiArICovCj4gK2ludCB0aW1lcl9nZXR0aW1lXzIzMyh0aW1lcl90IHRpbWVyaWQsIHN0cnVj dCBpdGltZXJzcGVjICpjdXJyX3ZhbHVlKQo+ICt7Cj4gKyAgaWYgKCFpbml0aWFsaXplZCkKPiAr ICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4gKyAgaWYgKHJlYWxfdGltZXJfZ2V0dGlt ZV8yMzMgPT0gTlVMTCkKPiArICB7Cj4gKyAgICByZXR1cm4gLTE7Cj4gKyAgfQo+ICsgIGVsc2UK PiArICB7Cj4gKyAgICByZXR1cm4gKHRpbWVyX2dldHRpbWVfY29tbW9uKCh0aW1lcl90X29yX2lu dCl0aW1lcmlkLCBjdXJyX3ZhbHVlLAo+ICsgICAgICAgICAgICBGVF9DT01QQVRfR0xJQkNfMl8z XzMpKTsKPiArICB9Cj4gK30KPiArCj4gK19fYXNtX18oIi5zeW12ZXIgdGltZXJfZ2V0dGltZV8y MiwgdGltZXJfZ2V0dGltZUBHTElCQ18yLjIiKTsKPiArX19hc21fXygiLnN5bXZlciB0aW1lcl9n ZXR0aW1lXzIzMywgdGltZXJfZ2V0dGltZUBAR0xJQkNfMi4zLjMiKTsKPiArX19hc21fXygiLnN5 bXZlciB0aW1lcl9zZXR0aW1lXzIyLCB0aW1lcl9zZXR0aW1lQEdMSUJDXzIuMiIpOwo+ICtfX2Fz bV9fKCIuc3ltdmVyIHRpbWVyX3NldHRpbWVfMjMzLCB0aW1lcl9zZXR0aW1lQEBHTElCQ18yLjMu MyIpOwo+ICsKPiArI2VuZGlmCj4gKyNlbmRpZgo+ICsKPiArCj4gKy8qCj4gKyAqICAgICAgPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KPiArICogICAgICBGYWtlZCBzeXN0ZW0gZnVuY3Rpb25zOiBiYXNpYyB0aW1l IGZ1bmN0aW9ucyAgICAgICAgICAgICA9PT0gRkFLRShUSU1FKQo+ICsgKiAgICAgID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Cj4gKyAqLwo+ICsKPiArLyoKPiArICogdGltZSgpIGltcGxlbWVudGF0aW9uIHVzaW5n IGNsb2NrX2dldHRpbWUoKQo+ICsgKiBAbm90ZSBEb2VzIG5vdCBjaGVjayBmb3IgRUZBVUxULCBz ZWUgbWFuIDIgdGltZQo+ICsgKi8KPiArdGltZV90IHRpbWUodGltZV90ICp0aW1lX3RwdHIpCj4g K3sKPiArICBzdHJ1Y3QgdGltZXNwZWMgdHA7Cj4gKyAgdGltZV90IHJlc3VsdDsKPiArCj4gKyAg aWYgKCFpbml0aWFsaXplZCkKPiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4gKyAg RE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX2Nsb2NrX2dldHRpbWUpKENMT0NLX1JFQUxU SU1FLCAmdHApKTsKPiArICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gLTE7Cj4gKwo+ICsgIC8q IHBhc3MgdGhlIHJlYWwgY3VycmVudCB0aW1lIHRvIG91ciBmYWtpbmcgdmVyc2lvbiwgb3Zlcndy aXRpbmcgaXQgKi8KPiArICAodm9pZClmYWtlX2Nsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUs ICZ0cCk7Cj4gKwo+ICsgIGlmICh0aW1lX3RwdHIgIT0gTlVMTCkKPiArICB7Cj4gKyAgICAqdGlt ZV90cHRyID0gdHAudHZfc2VjOwo+ICsgIH0KPiArICByZXR1cm4gdHAudHZfc2VjOwo+ICt9Cj4g Kwo+ICtpbnQgZnRpbWUoc3RydWN0IHRpbWViICp0YikKPiArewo+ICsgIHN0cnVjdCB0aW1lc3Bl YyB0cDsKPiArICBpbnQgcmVzdWx0Owo+ICsKPiArICBpZiAoIWluaXRpYWxpemVkKQo+ICsgIHsK PiArICAgIGZ0cGxfaW5pdCgpOwo+ICsgIH0KPiArICAvKiBzYW5pdHkgY2hlY2sgKi8KPiArICBp ZiAodGIgPT0gTlVMTCkKPiArICAgIHJldHVybiAwOyAgICAgICAgICAgICAgIC8qIGZ0aW1lKCkg YWx3YXlzIHJldHVybnMgMCwgc2VlIG1hbnBhZ2UgKi8KPiArCj4gKyAgLyogQ2hlY2sgd2hldGhl ciB3ZSd2ZSBnb3QgYSBwb2ludGVyIHRvIHRoZSByZWFsIGZ0aW1lKCkgZnVuY3Rpb24geWV0ICov Cj4gKyAgaWYgKE5VTEwgPT0gcmVhbF9mdGltZSkKPiArICB7ICAvKiBkbHN5bSgpIGZhaWxlZCAq Lwo+ICsjaWZkZWYgREVCVUcKPiArICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImZha2V0aW1l IHByb2JsZW06IG9yaWdpbmFsIGZ0aW1lKCkgbm90IGZvdW5kLlxuIik7Cj4gKyNlbmRpZgo+ICsg ICAgcmV0dXJuIDA7IC8qIHByb3BhZ2F0ZSBlcnJvciB0byBjYWxsZXIgKi8KPiArICB9Cj4gKwo+ ICsgIC8qIGluaXRpYWxpemUgb3VyIFRaIHJlc3VsdCB3aXRoIHRoZSByZWFsIGN1cnJlbnQgdGlt ZSAqLwo+ICsgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9mdGltZSkodGIpKTsKPiAr ICBpZiAocmVzdWx0ID09IC0xKQo+ICsgIHsKPiArICAgIHJldHVybiByZXN1bHQ7Cj4gKyAgfQo+ ICsKPiArICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfY2xvY2tfZ2V0dGltZSkoQ0xP Q0tfUkVBTFRJTUUsICZ0cCkpOwo+ICsgIGlmIChyZXN1bHQgPT0gLTEpIHJldHVybiAtMTsKPiAr Cj4gKyAgLyogcGFzcyB0aGUgcmVhbCBjdXJyZW50IHRpbWUgdG8gb3VyIGZha2luZyB2ZXJzaW9u LCBvdmVyd3JpdGluZyBpdCAqLwo+ICsgICh2b2lkKWZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19S RUFMVElNRSwgJnRwKTsKPiArCj4gKyAgdGItPnRpbWUgPSB0cC50dl9zZWM7Cj4gKyAgdGItPm1p bGxpdG0gPSB0cC50dl9uc2VjIC8gMTAwMDAwMDsKPiArCj4gKyAgLyogcmV0dXJuIHRoZSByZXN1 bHQgdG8gdGhlIGNhbGxlciAqLwo+ICsgIHJldHVybiByZXN1bHQ7IC8qIHdpbGwgYWx3YXlzIGJl IDAgKHNlZSBtYW5wYWdlKSAqLwo+ICt9Cj4gKwo+ICtpbnQgZ2V0dGltZW9mZGF5KHN0cnVjdCB0 aW1ldmFsICp0diwgdm9pZCAqdHopCj4gK3sKPiArICBpbnQgcmVzdWx0Owo+ICsKPiArICBpZiAo IWluaXRpYWxpemVkKQo+ICsgIHsKPiArICAgIGZ0cGxfaW5pdCgpOwo+ICsgIH0KPiArICAvKiBz YW5pdHkgY2hlY2sgKi8KPiArICBpZiAodHYgPT0gTlVMTCkKPiArICB7Cj4gKyAgICByZXR1cm4g LTE7Cj4gKyAgfQo+ICsKPiArICAvKiBDaGVjayB3aGV0aGVyIHdlJ3ZlIGdvdCBhIHBvaW50ZXIg dG8gdGhlIHJlYWwgZnRpbWUoKSBmdW5jdGlvbiB5ZXQgKi8KPiArICBpZiAoTlVMTCA9PSByZWFs X2dldHRpbWVvZmRheSkKPiArICB7ICAvKiBkbHN5bSgpIGZhaWxlZCAqLwo+ICsjaWZkZWYgREVC VUcKPiArICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImZha2V0aW1lIHByb2JsZW06IG9yaWdp bmFsIGdldHRpbWVvZmRheSgpIG5vdCBmb3VuZC5cbiIpOwo+ICsjZW5kaWYKPiArICAgIHJldHVy biAtMTsgLyogcHJvcGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLwo+ICsgIH0KPiArCj4gKyAgLyog aW5pdGlhbGl6ZSBvdXIgcmVzdWx0IHdpdGggdGhlIHJlYWwgY3VycmVudCB0aW1lICovCj4gKyAg RE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX2dldHRpbWVvZmRheSkodHYsIHR6KSk7Cj4g KyAgaWYgKHJlc3VsdCA9PSAtMSkgcmV0dXJuIHJlc3VsdDsgLyogb3JpZ2luYWwgZnVuY3Rpb24g ZmFpbGVkICovCj4gKwo+ICsgIC8qIHBhc3MgdGhlIHJlYWwgY3VycmVudCB0aW1lIHRvIG91ciBm YWtpbmcgdmVyc2lvbiwgb3ZlcndyaXRpbmcgaXQgKi8KPiArICByZXN1bHQgPSBmYWtlX2dldHRp bWVvZmRheSh0dik7Cj4gKwo+ICsgIC8qIHJldHVybiB0aGUgcmVzdWx0IHRvIHRoZSBjYWxsZXIg Ki8KPiArICByZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICtpbnQgY2xvY2tfZ2V0dGltZShjbG9j a2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQo+ICt7Cj4gKyAgaW50IHJlc3VsdDsK PiArCj4gKyAgaWYgKCFpbml0aWFsaXplZCkKPiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiAr ICB9Cj4gKyAgLyogc2FuaXR5IGNoZWNrICovCj4gKyAgaWYgKHRwID09IE5VTEwpCj4gKyAgewo+ ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArCj4gKyAgaWYgKE5VTEwgPT0gcmVhbF9jbG9ja19n ZXR0aW1lKQo+ICsgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCj4gKyNpZmRlZiBERUJVRwo+ICsg ICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxlbTogb3JpZ2luYWwgY2xv Y2tfZ2V0dGltZSgpIG5vdCBmb3VuZC5cbiIpOwo+ICsjZW5kaWYKPiArICAgIHJldHVybiAtMTsg LyogcHJvcGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLwo+ICsgIH0KPiArCj4gKyAgLyogaW5pdGlh bGl6ZSBvdXIgcmVzdWx0IHdpdGggdGhlIHJlYWwgY3VycmVudCB0aW1lICovCj4gKyAgRE9OVF9G QUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX2Nsb2NrX2dldHRpbWUpKGNsa19pZCwgdHApKTsKPiAr ICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gcmVzdWx0OyAvKiBvcmlnaW5hbCBmdW5jdGlvbiBm YWlsZWQgKi8KPiArCj4gKyAgLyogcGFzcyB0aGUgcmVhbCBjdXJyZW50IHRpbWUgdG8gb3VyIGZh a2luZyB2ZXJzaW9uLCBvdmVyd3JpdGluZyBpdCAqLwo+ICsgIGlmIChmYWtlX21vbm90b25pY19j bG9jayB8fCBjbGtfaWQgIT0gQ0xPQ0tfTU9OT1RPTklDKQo+ICsgIHsKPiArICAgIHJlc3VsdCA9 IGZha2VfY2xvY2tfZ2V0dGltZShjbGtfaWQsIHRwKTsKPiArICB9Cj4gKwo+ICsgIC8qIHJldHVy biB0aGUgcmVzdWx0IHRvIHRoZSBjYWxsZXIgKi8KPiArICByZXR1cm4gcmVzdWx0Owo+ICt9Cj4g Kwo+ICsKPiArLyoKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKiAgICAgIFBhcnNpbmcg dGhlIHVzZXIncyBmYWtldGltZSByZXF1ZXN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgPT09 IFBBUlNFCj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICovCj4gKwo+ICtzdGF0aWMgdm9p ZCBwYXJzZV9mdF9zdHJpbmcoY29uc3QgY2hhciAqdXNlcl9mYWtlZF90aW1lKQo+ICt7Cj4gKyAg c3RydWN0IHRtIHVzZXJfZmFrZWRfdGltZV90bTsKPiArICBjaGFyICogdG1wX3RpbWVfZm10Owo+ ICsKPiArICBpZiAoIXN0cm5jbXAodXNlcl9mYWtlZF90aW1lLCB1c2VyX2Zha2VkX3RpbWVfc2F2 ZWQsIEJVRkZFUkxFTikpCj4gKyAgewo+ICsgICAgICAvKiBObyBjaGFuZ2UgKi8KPiArICAgICAg cmV0dXJuOwo+ICsgIH0KPiArCj4gKyAgLyogY2hlY2sgd2hldGhlciB0aGUgdXNlciBnYXZlIHVz IGFuIGFic29sdXRlIHRpbWUgdG8gZmFrZSAqLwo+ICsgIHN3aXRjaCAodXNlcl9mYWtlZF90aW1l WzBdKQo+ICsgIHsKPiArCj4gKyAgICBkZWZhdWx0OiAgLyogVHJ5IGFuZCBpbnRlcnByZXQgdGhp cyBhcyBhIHNwZWNpZmllZCB0aW1lICovCj4gKyAgICAgIGlmIChmdF9tb2RlICE9IEZUX05PT1Ap IGZ0X21vZGUgPSBGVF9GUkVFWkU7Cj4gKyAgICAgIHVzZXJfZmFrZWRfdGltZV90bS50bV9pc2Rz dCA9IC0xOwo+ICsgICAgICBpZiAoTlVMTCAhPSBzdHJwdGltZSh1c2VyX2Zha2VkX3RpbWUsIHVz ZXJfZmFrZWRfdGltZV9mbXQsICZ1c2VyX2Zha2VkX3RpbWVfdG0pKQo+ICsgICAgICB7Cj4gKyAg ICAgICAgdXNlcl9mYWtlZF90aW1lX3RpbWVzcGVjLnR2X3NlYyA9IG1rdGltZSgmdXNlcl9mYWtl ZF90aW1lX3RtKTsKPiArICAgICAgICB1c2VyX2Zha2VkX3RpbWVfdGltZXNwZWMudHZfbnNlYyA9 IDA7Cj4gKyAgICAgICAgdXNlcl9mYWtlZF90aW1lX3NldCA9IHRydWU7Cj4gKyAgICAgIH0KPiAr ICAgICAgZWxzZQo+ICsgICAgICB7Cj4gKyAgICAgICAgcGVycm9yKCJGYWlsZWQgdG8gcGFyc2Ug RkFLRVRJTUUgdGltZXN0YW1wIik7Cj4gKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsg ICAgICB9Cj4gKyAgICAgIGJyZWFrOwo+ICsKPiArICAgIGNhc2UgJysnOgo+ICsgICAgY2FzZSAn LSc6IC8qIFVzZXItc3BlY2lmaWVkIG9mZnNldCAqLwo+ICsgICAgICBpZiAoZnRfbW9kZSAhPSBG VF9OT09QKSBmdF9tb2RlID0gRlRfU1RBUlRfQVQ7Cj4gKyAgICAgIC8qIGZyYWN0aW9uYWwgdGlt ZSBvZmZzZXRzIGNvbnRyaWJ1dGVkIGJ5IEthcmwgQ2hlbiBpbiB2MC44ICovCj4gKyAgICAgIGRv dWJsZSBmcmFjX29mZnNldCA9IGF0b2YodXNlcl9mYWtlZF90aW1lKTsKPiArCj4gKyAgICAgIC8q IG9mZnNldCBpcyBpbiBzZWNvbmRzIGJ5IGRlZmF1bHQsIGJ1dCB0aGUgc3RyaW5nIG1heSBjb250 YWluCj4gKyAgICAgICAqIG11bHRpcGxpZXJzLi4uCj4gKyAgICAgICAqLwo+ICsgICAgICBpZiAo c3RyY2hyKHVzZXJfZmFrZWRfdGltZSwgJ20nKSAhPSBOVUxMKSBmcmFjX29mZnNldCAqPSA2MDsK PiArICAgICAgZWxzZSBpZiAoc3RyY2hyKHVzZXJfZmFrZWRfdGltZSwgJ2gnKSAhPSBOVUxMKSBm cmFjX29mZnNldCAqPSA2MCAqIDYwOwo+ICsgICAgICBlbHNlIGlmIChzdHJjaHIodXNlcl9mYWtl ZF90aW1lLCAnZCcpICE9IE5VTEwpIGZyYWNfb2Zmc2V0ICo9IDYwICogNjAgKiAyNDsKPiArICAg ICAgZWxzZSBpZiAoc3RyY2hyKHVzZXJfZmFrZWRfdGltZSwgJ3knKSAhPSBOVUxMKSBmcmFjX29m ZnNldCAqPSA2MCAqIDYwICogMjQgKiAzNjU7Cj4gKwo+ICsgICAgICB1c2VyX29mZnNldC50dl9z ZWMgPSBmbG9vcihmcmFjX29mZnNldCk7Cj4gKyAgICAgIHVzZXJfb2Zmc2V0LnR2X25zZWMgPSAo ZnJhY19vZmZzZXQgLSB1c2VyX29mZnNldC50dl9zZWMpICogU0VDX1RPX25TRUM7Cj4gKyAgICAg IHRpbWVzcGVjYWRkKCZmdHBsX3N0YXJ0dGltZS5yZWFsLCAmdXNlcl9vZmZzZXQsICZ1c2VyX2Zh a2VkX3RpbWVfdGltZXNwZWMpOwo+ICsgICAgICBnb3RvIHBhcnNlX21vZGlmaWVyczsKPiArICAg ICAgYnJlYWs7Cj4gKwo+ICsgICAgICAvKiBDb250cmlidXRlZCBieSBEYXZpZCBOb3J0aCwgVERJ IGluIHZlcnNpb24gMC43ICovCj4gKyAgICBjYXNlICdAJzogLyogU3BlY2lmaWMgdGltZSwgYnV0 IGNsb2NrIGFsb25nIHJlbGF0aXZlIHRvIHRoYXQgc3RhcnR0aW1lICovCj4gKyAgICAgIGZ0X21v ZGUgPSBGVF9TVEFSVF9BVDsKPiArICAgICAgdXNlcl9mYWtlZF90aW1lX3RtLnRtX2lzZHN0ID0g LTE7Cj4gKyAgICAgICh2b2lkKSBzdHJwdGltZSgmdXNlcl9mYWtlZF90aW1lWzFdLCB1c2VyX2Zh a2VkX3RpbWVfZm10LCAmdXNlcl9mYWtlZF90aW1lX3RtKTsKPiArCj4gKyAgICAgIHVzZXJfZmFr ZWRfdGltZV90aW1lc3BlYy50dl9zZWMgPSBta3RpbWUoJnVzZXJfZmFrZWRfdGltZV90bSk7Cj4g KyAgICAgIHVzZXJfZmFrZWRfdGltZV90aW1lc3BlYy50dl9uc2VjID0gMDsKPiArCj4gKyAgICAg IC8qIFJlc2V0IHN0YXJ0dGltZSAqLwo+ICsgICAgICBzeXN0ZW1fdGltZV9mcm9tX3N5c3RlbSgm ZnRwbF9zdGFydHRpbWUpOwo+ICsgICAgICBnb3RvIHBhcnNlX21vZGlmaWVyczsKPiArICAgICAg YnJlYWs7Cj4gKwo+ICsgICAgY2FzZSAnaSc6Cj4gKyAgICBjYXNlICd4JzogLyogT25seSBtb2Rp ZmllcnMgYXJlIHBhc3NlZCwgZG9uJ3QgZmFsbCBiYWNrIHRvIHN0cnB0aW1lICovCj4gK3BhcnNl X21vZGlmaWVyczoKPiArICAgICAgLyogU3BlZWQtdXAgLyBzbG93LWRvd24gY29udHJpYnV0ZWQg YnkgS2FybCBDaGVuIGluIHYwLjggKi8KPiArICAgICAgaWYgKHN0cmNocih1c2VyX2Zha2VkX3Rp bWUsICd4JykgIT0gTlVMTCkKPiArICAgICAgewo+ICsgICAgICAgIHVzZXJfcmF0ZSA9IGF0b2Yo c3RyY2hyKHVzZXJfZmFrZWRfdGltZSwgJ3gnKSsxKTsKPiArICAgICAgICB1c2VyX3JhdGVfc2V0 ID0gdHJ1ZTsKPiArICAgICAgfQo+ICsgICAgICBlbHNlIGlmIChOVUxMICE9ICh0bXBfdGltZV9m bXQgPSBzdHJjaHIodXNlcl9mYWtlZF90aW1lLCAnaScpKSkKPiArICAgICAgewo+ICsgICAgICAg IGRvdWJsZSB0aWNrX2luYyA9IGF0b2YodG1wX3RpbWVfZm10ICsgMSk7Cj4gKyAgICAgICAgLyog aW5jcmVtZW50IHRpbWUgd2l0aCBldmVyeSB0aW1lKCkgY2FsbCovCj4gKyAgICAgICAgdXNlcl9w ZXJfdGlja19pbmMudHZfc2VjID0gZmxvb3IodGlja19pbmMpOwo+ICsgICAgICAgIHVzZXJfcGVy X3RpY2tfaW5jLnR2X25zZWMgPSAodGlja19pbmMgLSB1c2VyX3Blcl90aWNrX2luYy50dl9zZWMp ICogU0VDX1RPX25TRUMgOwo+ICsgICAgICAgIHVzZXJfcGVyX3RpY2tfaW5jX3NldCA9IHRydWU7 Cj4gKyAgICAgIH0KPiArICAgICAgYnJlYWs7Cj4gKyAgfSAvLyBlbmQgb2Ygc3dpdGNoCj4gKwo+ ICsgIHN0cm5jcHkodXNlcl9mYWtlZF90aW1lX3NhdmVkLCB1c2VyX2Zha2VkX3RpbWUsIEJVRkZF UkxFTi0xKTsKPiArICB1c2VyX2Zha2VkX3RpbWVfc2F2ZWRbQlVGRkVSTEVOLTFdID0gMDsKPiAr I2lmZGVmIERFQlVHCj4gKyAgZnByaW50ZihzdGRlcnIsICJuZXcgRkFLRVRJTUU6ICVzXG4iLCB1 c2VyX2Zha2VkX3RpbWVfc2F2ZWQpOwo+ICsjZW5kaWYKPiArfQo+ICsKPiArCj4gKy8qCj4gKyAq ICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KPiArICogICAgICBJbml0aWFsaXphdGlvbiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gSU5JVAo+ICsgKiAgICAg ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Cj4gKyAqLwo+ICsKPiArdm9pZCBmdHBsX2luaXQodm9pZCkKPiArewo+ ICsgIGNoYXIgKnRtcF9lbnY7Cj4gKyAgYm9vbCBkb250X2Zha2VfZmluYWw7Cj4gKwo+ICsjaWZk ZWYgX19BUFBMRV9fCj4gKyAgY29uc3QgY2hhciAqcHJvZ25hbWUgPSBnZXRwcm9nbmFtZSgpOwo+ ICsjZWxzZQo+ICsgIGNvbnN0IGNoYXIgKnByb2duYW1lID0gX19wcm9nbmFtZTsKPiArI2VuZGlm Cj4gKwo+ICsgIC8qIExvb2sgdXAgYWxsIHJlYWxfKiBmdW5jdGlvbnMuIE5VTEwgd2lsbCBtYXJr IG1pc3Npbmcgb25lcy4gKi8KPiArICByZWFsX3N0YXQgPSAgICAgICAgICAgICAgIGRsc3ltKFJU TERfTkVYVCwgIl9feHN0YXQiKTsKPiArICByZWFsX2ZzdGF0ID0gICAgICAgICAgICAgIGRsc3lt KFJUTERfTkVYVCwgIl9fZnhzdGF0Iik7Cj4gKyAgcmVhbF9mc3RhdGF0ID0gICAgICAgICAgICBk bHN5bShSVExEX05FWFQsICJfX2Z4c3RhdGF0Iik7Cj4gKyAgcmVhbF9sc3RhdCA9ICAgICAgICAg ICAgICBkbHN5bShSVExEX05FWFQsICJfX2x4c3RhdCIpOwo+ICsgIHJlYWxfc3RhdDY0ID0gICAg ICAgICAgICAgZGxzeW0oUlRMRF9ORVhULCJfX3hzdGF0NjQiKTsKPiArICByZWFsX2ZzdGF0NjQg PSAgICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwgIl9fZnhzdGF0NjQiKTsKPiArICByZWFsX2Zz dGF0YXQ2NCA9ICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwgIl9fZnhzdGF0YXQ2NCIpOwo+ICsg IHJlYWxfbHN0YXQ2NCA9ICAgICAgICAgICAgZGxzeW0oUlRMRF9ORVhULCAiX19seHN0YXQ2NCIp Owo+ICsgIHJlYWxfdGltZSA9ICAgICAgICAgICAgICAgZGxzeW0oUlRMRF9ORVhULCAidGltZSIp Owo+ICsgIHJlYWxfZnRpbWUgPSAgICAgICAgICAgICAgZGxzeW0oUlRMRF9ORVhULCAiZnRpbWUi KTsKPiArICByZWFsX2dldHRpbWVvZmRheSA9ICAgICAgIGRsc3ltKFJUTERfTkVYVCwgImdldHRp bWVvZmRheSIpOwo+ICsjaWZkZWYgRkFLRV9TTEVFUAo+ICsgIHJlYWxfbmFub3NsZWVwID0gICAg ICAgICAgZGxzeW0oUlRMRF9ORVhULCAibmFub3NsZWVwIik7Cj4gKyAgcmVhbF91c2xlZXAgPSAg ICAgICAgICAgICBkbHN5bShSVExEX05FWFQsICJ1c2xlZXAiKTsKPiArICByZWFsX3NsZWVwID0g ICAgICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwgInNsZWVwIik7Cj4gKyAgcmVhbF9hbGFybSA9 ICAgICAgICAgICAgICBkbHN5bShSVExEX05FWFQsICJhbGFybSIpOwo+ICsgIHJlYWxfcG9sbCA9 ICAgICAgICAgICAgICAgZGxzeW0oUlRMRF9ORVhULCAicG9sbCIpOwo+ICsgIHJlYWxfcHBvbGwg PSAgICAgICAgICAgICAgZGxzeW0oUlRMRF9ORVhULCAicHBvbGwiKTsKPiArICByZWFsX3NlbGVj dCA9ICAgICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwgInNlbGVjdCIpOwo+ICsgIHJlYWxfc2Vt X3RpbWVkd2FpdCA9ICAgICAgZGxzeW0oUlRMRF9ORVhULCAic2VtX3RpbWVkd2FpdCIpOwo+ICsj ZW5kaWYKPiArI2lmZGVmIEZBS0VfSU5URVJOQUxfQ0FMTFMKPiArICByZWFsX19fZnRpbWUgPSAg ICAgICAgICAgICAgZGxzeW0oUlRMRF9ORVhULCAiX19mdGltZSIpOwo+ICsgIHJlYWxfX19nZXR0 aW1lb2ZkYXkgPSAgICAgICBkbHN5bShSVExEX05FWFQsICJfX2dldHRpbWVvZmRheSIpOwo+ICsg IHJlYWxfX19jbG9ja19nZXR0aW1lICA9ICAgICBkbHN5bShSVExEX05FWFQsICJfX2Nsb2NrX2dl dHRpbWUiKTsKPiArI2VuZGlmCj4gKyNpZmRlZiBfX0FQUExFT1NYX18KPiArICByZWFsX2Nsb2Nr X2dldF90aW1lID0gICAgIGRsc3ltKFJUTERfTkVYVCwgImNsb2NrX2dldF90aW1lIik7Cj4gKyAg cmVhbF9jbG9ja19nZXR0aW1lICA9ICAgICBhcHBsZV9jbG9ja19nZXR0aW1lOwo+ICsjZWxzZQo+ ICsgIHJlYWxfY2xvY2tfZ2V0dGltZSAgPSAgICAgZGxzeW0oUlRMRF9ORVhULCAiX19jbG9ja19n ZXR0aW1lIik7Cj4gKyAgaWYgKE5VTEwgPT0gcmVhbF9jbG9ja19nZXR0aW1lKQo+ICsgIHsKPiAr ICAgIHJlYWxfY2xvY2tfZ2V0dGltZSAgPSAgIGRsc3ltKFJUTERfTkVYVCwgImNsb2NrX2dldHRp bWUiKTsKPiArICB9Cj4gKyNpZmRlZiBGQUtFX1RJTUVSUwo+ICsjaWYgZGVmaW5lZChfX3N1bikK PiArICAgIHJlYWxfdGltZXJfZ2V0dGltZV8yMzMgPSAgZGxzeW0oUlRMRF9ORVhULCAidGltZXJf Z2V0dGltZSIpOwo+ICsgICAgcmVhbF90aW1lcl9zZXR0aW1lXzIzMyA9ICBkbHN5bShSVExEX05F WFQsICJ0aW1lcl9zZXR0aW1lIik7Cj4gKyNlbHNlCj4gKyAgcmVhbF90aW1lcl9zZXR0aW1lXzIy ID0gICBkbHZzeW0oUlRMRF9ORVhULCAidGltZXJfc2V0dGltZSIsIkdMSUJDXzIuMiIpOwo+ICsg IHJlYWxfdGltZXJfc2V0dGltZV8yMzMgPSAgZGx2c3ltKFJUTERfTkVYVCwgInRpbWVyX3NldHRp bWUiLCJHTElCQ18yLjMuMyIpOwo+ICsgIGlmIChOVUxMID09IHJlYWxfdGltZXJfc2V0dGltZV8y MzMpCj4gKyAgewo+ICsgICAgcmVhbF90aW1lcl9zZXR0aW1lXzIzMyA9ICBkbHN5bShSVExEX05F WFQsICJ0aW1lcl9zZXR0aW1lIik7Cj4gKyAgfQo+ICsgIHJlYWxfdGltZXJfZ2V0dGltZV8yMiA9 ICAgZGx2c3ltKFJUTERfTkVYVCwgInRpbWVyX2dldHRpbWUiLCJHTElCQ18yLjIiKTsKPiArICBy ZWFsX3RpbWVyX2dldHRpbWVfMjMzID0gIGRsdnN5bShSVExEX05FWFQsICJ0aW1lcl9nZXR0aW1l IiwiR0xJQkNfMi4zLjMiKTsKPiArICBpZiAoTlVMTCA9PSByZWFsX3RpbWVyX2dldHRpbWVfMjMz KQo+ICsgIHsKPiArICAgIHJlYWxfdGltZXJfZ2V0dGltZV8yMzMgPSAgZGxzeW0oUlRMRF9ORVhU LCAidGltZXJfZ2V0dGltZSIpOwo+ICsgIH0KPiArI2VuZGlmCj4gKyNlbmRpZgo+ICsjZW5kaWYK PiArCj4gKyAgZG9udF9mYWtlID0gdHJ1ZTsgLy8gRG8gbm90IGZha2UgdGltZXMgZHVyaW5nIGlu aXRpYWxpemF0aW9uCj4gKyAgZG9udF9mYWtlX2ZpbmFsID0gZmFsc2U7Cj4gKyAgaW5pdGlhbGl6 ZWQgPSAxOwo+ICsKPiArICBmdF9zaG1faW5pdCgpOwo+ICsjaWZkZWYgRkFLRV9TVEFUCj4gKyAg aWYgKGdldGVudigiTk9fRkFLRV9TVEFUIikhPU5VTEwpCj4gKyAgewo+ICsgICAgZmFrZV9zdGF0 X2Rpc2FibGVkID0gMTsgIC8vTm90ZSB0aGF0IHRoaXMgaXMgTk9UIHJlLWNoZWNrZWQKPiArICB9 Cj4gKyNlbmRpZgo+ICsKPiArICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYoIkZBS0VUSU1FX0NBQ0hF X0RVUkFUSU9OIikpICE9IE5VTEwpCj4gKyAgewo+ICsgICAgY2FjaGVfZHVyYXRpb24gPSBhdG9p KHRtcF9lbnYpOwo+ICsgIH0KPiArICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYoIkZBS0VUSU1FX05P X0NBQ0hFIikpICE9IE5VTEwpCj4gKyAgewo+ICsgICAgaWYgKDAgPT0gc3RyY21wKHRtcF9lbnYs ICIxIikpCj4gKyAgICB7Cj4gKyAgICAgIGNhY2hlX2VuYWJsZWQgPSAwOwo+ICsgICAgfQo+ICsg IH0KPiArICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYoIkRPTlRfRkFLRV9NT05PVE9OSUMiKSkgIT0g TlVMTCkKPiArICB7Cj4gKyAgICBpZiAoMCA9PSBzdHJjbXAodG1wX2VudiwgIjEiKSkKPiArICAg IHsKPiArICAgICAgZmFrZV9tb25vdG9uaWNfY2xvY2sgPSAwOwo+ICsgICAgfQo+ICsgIH0KPiAr ICAvKiBDaGVjayB3aGV0aGVyIHdlIGFjdHVhbGx5IHNob3VsZCBiZSBmYWtpbmcgdGhlIHJldHVy bmVkIHRpbWVzdGFtcC4gKi8KPiArCj4gKyAgLyogV2UgY2FuIHByZXZlbnQgZmFraW5nIHRpbWUg Zm9yIHNwZWNpZmllZCBjb21tYW5kcyAqLwo+ICsgIGlmICgodG1wX2VudiA9IGdldGVudigiRkFL RVRJTUVfU0tJUF9DTURTIikpICE9IE5VTEwpCj4gKyAgewo+ICsgICAgY2hhciAqc2tpcF9jbWQs ICpzYXZlcHRyLCAqdG1wdmFyOwo+ICsgICAgLyogRG9uJ3QgbWVzcyB3aXRoIHRoZSBlbnYgdmFy aWFibGUgZGlyZWN0bHkuICovCj4gKyAgICB0bXB2YXIgPSBzdHJkdXAodG1wX2Vudik7Cj4gKyAg ICBpZiAodG1wdmFyICE9IE5VTEwpCj4gKyAgICB7Cj4gKyAgICAgIHNraXBfY21kID0gc3RydG9r X3IodG1wdmFyLCAiLCIsICZzYXZlcHRyKTsKPiArICAgICAgd2hpbGUgKHNraXBfY21kICE9IE5V TEwpCj4gKyAgICAgIHsKPiArICAgICAgICBpZiAoMCA9PSBzdHJjbXAocHJvZ25hbWUsIHNraXBf Y21kKSkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICBmdF9tb2RlID0gRlRfTk9PUDsKPiArICAg ICAgICAgIGRvbnRfZmFrZV9maW5hbCA9IHRydWU7Cj4gKyAgICAgICAgICBicmVhazsKPiArICAg ICAgICB9Cj4gKyAgICAgICAgc2tpcF9jbWQgPSBzdHJ0b2tfcihOVUxMLCAiLCIsICZzYXZlcHRy KTsKPiArICAgICAgfQo+ICsgICAgICBmcmVlKHRtcHZhcik7Cj4gKyAgICAgIHRtcHZhciA9IE5V TEw7Cj4gKyAgICB9Cj4gKyAgICBlbHNlCj4gKyAgICB7Cj4gKyAgICAgIGZwcmludGYoc3RkZXJy LCAiRXJyb3I6IENvdWxkIG5vdCBjb3B5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZS5c biIpOwo+ICsgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAgICB9Cj4gKyAgfQo+ICsKPiAr ICAvKiBXZSBjYW4gbGltaXQgZmFraW5nIHRpbWUgdG8gc3BlY2lmaWVkIGNvbW1hbmRzICovCj4g KyAgaWYgKCh0bXBfZW52ID0gZ2V0ZW52KCJGQUtFVElNRV9PTkxZX0NNRFMiKSkgIT0gTlVMTCkK PiArICB7Cj4gKyAgICBjaGFyICpvbmx5X2NtZCwgKnNhdmVwdHIsICp0bXB2YXI7Cj4gKyAgICBi b29sIGNtZF9tYXRjaGVkID0gZmFsc2U7Cj4gKwo+ICsgICAgaWYgKGdldGVudigiRkFLRVRJTUVf U0tJUF9DTURTIikgIT0gTlVMTCkKPiArICAgIHsKPiArICAgICAgZnByaW50ZihzdGRlcnIsICJF cnJvcjogQm90aCBGQUtFVElNRV9TS0lQX0NNRFMgYW5kIEZBS0VUSU1FX09OTFlfQ01EUyBjYW4n dCBiZSBzZXQuXG4iKTsKPiArICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsgICAgfQo+ICsK PiArICAgIC8qIERvbid0IG1lc3Mgd2l0aCB0aGUgZW52IHZhcmlhYmxlIGRpcmVjdGx5LiAqLwo+ ICsgICAgdG1wdmFyID0gc3RyZHVwKHRtcF9lbnYpOwo+ICsgICAgaWYgKHRtcHZhciAhPSBOVUxM KSB7Cj4gKyAgICAgIG9ubHlfY21kID0gc3RydG9rX3IodG1wdmFyLCAiLCIsICZzYXZlcHRyKTsK PiArICAgICAgd2hpbGUgKG9ubHlfY21kICE9IE5VTEwpCj4gKyAgICAgIHsKPiArICAgICAgICBp ZiAoMCA9PSBzdHJjbXAocHJvZ25hbWUsIG9ubHlfY21kKSkKPiArICAgICAgICB7Cj4gKyAgICAg ICAgICBjbWRfbWF0Y2hlZCA9IHRydWU7Cj4gKyAgICAgICAgICBicmVhazsKPiArICAgICAgICB9 Cj4gKyAgICAgICAgb25seV9jbWQgPSBzdHJ0b2tfcihOVUxMLCAiLCIsICZzYXZlcHRyKTsKPiAr ICAgICAgfQo+ICsKPiArICAgICAgaWYgKCFjbWRfbWF0Y2hlZCkKPiArICAgICAgewo+ICsgICAg ICAgIGZ0X21vZGUgPSBGVF9OT09QOwo+ICsgICAgICAgIGRvbnRfZmFrZV9maW5hbCA9IHRydWU7 Cj4gKyAgICAgIH0KPiArICAgICAgZnJlZSh0bXB2YXIpOwo+ICsgICAgfSBlbHNlIHsKPiArICAg ICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogQ291bGQgbm90IGNvcHkgdGhlIGVudmlyb25tZW50 IHZhcmlhYmxlIHZhbHVlLlxuIik7Cj4gKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKPiArICAg IH0KPiArICB9Cj4gKwo+ICsgIGlmICgodG1wX2VudiA9IGdldGVudigiRkFLRVRJTUVfU1RBUlRf QUZURVJfU0VDT05EUyIpKSAhPSBOVUxMKQo+ICsgIHsKPiArICAgIGZ0X3N0YXJ0X2FmdGVyX3Nl Y3MgPSBhdG9sKHRtcF9lbnYpOwo+ICsgICAgbGltaXRlZF9mYWtpbmcgPSB0cnVlOwo+ICsgIH0K PiArICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYoIkZBS0VUSU1FX1NUT1BfQUZURVJfU0VDT05EUyIp KSAhPSBOVUxMKQo+ICsgIHsKPiArICAgIGZ0X3N0b3BfYWZ0ZXJfc2VjcyA9IGF0b2wodG1wX2Vu dik7Cj4gKyAgICBsaW1pdGVkX2Zha2luZyA9IHRydWU7Cj4gKyAgfQo+ICsgIGlmICgodG1wX2Vu diA9IGdldGVudigiRkFLRVRJTUVfU1RBUlRfQUZURVJfTlVNQ0FMTFMiKSkgIT0gTlVMTCkKPiAr ICB7Cj4gKyAgICBmdF9zdGFydF9hZnRlcl9uY2FsbHMgPSBhdG9sKHRtcF9lbnYpOwo+ICsgICAg bGltaXRlZF9mYWtpbmcgPSB0cnVlOwo+ICsgIH0KPiArICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYo IkZBS0VUSU1FX1NUT1BfQUZURVJfTlVNQ0FMTFMiKSkgIT0gTlVMTCkKPiArICB7Cj4gKyAgICBm dF9zdG9wX2FmdGVyX25jYWxscyA9IGF0b2wodG1wX2Vudik7Cj4gKyAgICBsaW1pdGVkX2Zha2lu ZyA9IHRydWU7Cj4gKyAgfQo+ICsKPiArICAvKiBjaGVjayB3aGV0aGVyIHdlIHNob3VsZCBzcGF3 biBhbiBleHRlcm5hbCBjb21tYW5kICovCj4gKyAgaWYgKCh0bXBfZW52ID0gZ2V0ZW52KCJGQUtF VElNRV9TUEFXTl9UQVJHRVQiKSkgIT0gTlVMTCkKPiArICB7Cj4gKyAgICBzcGF3bnN1cHBvcnQg PSB0cnVlOwo+ICsgICAgKHZvaWQpIHN0cm5jcHkoZnRfc3Bhd25fdGFyZ2V0LCBnZXRlbnYoIkZB S0VUSU1FX1NQQVdOX1RBUkdFVCIpLCAxMDI0KTsKPiArICAgIGlmICgodG1wX2VudiA9IGdldGVu digiRkFLRVRJTUVfU1BBV05fU0VDT05EUyIpKSAhPSBOVUxMKQo+ICsgICAgewo+ICsgICAgICBm dF9zcGF3bl9zZWNzID0gYXRvbCh0bXBfZW52KTsKPiArICAgIH0KPiArICAgIGlmICgodG1wX2Vu diA9IGdldGVudigiRkFLRVRJTUVfU1BBV05fTlVNQ0FMTFMiKSkgIT0gTlVMTCkKPiArICAgIHsK PiArICAgICAgZnRfc3Bhd25fbmNhbGxzID0gYXRvbCh0bXBfZW52KTsKPiArICAgIH0KPiArICB9 Cj4gKwo+ICsgIGlmICgodG1wX2VudiA9IGdldGVudigiRkFLRVRJTUVfU0FWRV9GSUxFIikpICE9 IE5VTEwpCj4gKyAgewo+ICsgICAgaWYgKC0xID09IChvdXRmaWxlID0gb3Blbih0bXBfZW52LCBP X1JEV1IgfCBPX0FQUEVORCB8IE9fQ0xPRVhFQyB8IE9fQ1JFQVQsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNfSVdVU1IgfCBTX0lSVVNSKSkpCj4gKyAgICB7Cj4gKyAgICAgIHBl cnJvcigiT3BlbmluZyBmaWxlIGZvciBzYXZpbmcgdGltZXN0YW1wcyBmYWlsZWQiKTsKPiArICAg ICAgZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsgICAgfQo+ICsgIH0KPiArCj4gKyAgLyogbG9hZCBm aWxlIG9ubHkgaWYgcmVhZGluZyB0aW1zdGFtcHMgZnJvbSBpdCBpcyBub3QgZmluaXNoZWQgeWV0 ICovCj4gKyAgaWYgKCh0bXBfZW52ID0gZ2V0ZW52KCJGQUtFVElNRV9MT0FEX0ZJTEUiKSkgIT0g TlVMTCkKPiArICB7Cj4gKyAgICBpbnQgaW5maWxlID0gLTE7Cj4gKyAgICBzdHJ1Y3Qgc3RhdCBz YjsKPiArICAgIGlmICgtMSA9PSAoaW5maWxlID0gb3Blbih0bXBfZW52LCBPX1JET05MWXxPX0NM T0VYRUMpKSkKPiArICAgIHsKPiArICAgICAgcGVycm9yKCJPcGVuaW5nIGZpbGUgZm9yIGxvYWRp bmcgdGltZXN0YW1wcyBmYWlsZWQiKTsKPiArICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsg ICAgfQo+ICsKPiArICAgIGZzdGF0KGluZmlsZSwgJnNiKTsKPiArICAgIGlmIChzaXplb2Yoc3Rz c1swXSkgPiAoaW5maWxlX3NpemUgPSBzYi5zdF9zaXplKSkKPiArICAgIHsKPiArICAgICAgcHJp bnRmKCJUaGVyZSBhcmUgbm8gdGltZXN0YW1wcyBpbiB0aGUgcHJvdmlkZWQgZmlsZSB0byBsb2Fk IHRpbWVzdGFtcHMgZnJvbSIpOwo+ICsgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgaWYgKChpbmZpbGVfc2l6ZSAlIHNpemVvZihzdHNzWzBdKSkgIT0gMCkKPiAr ICAgIHsKPiArICAgICAgcHJpbnRmKCJGaWxlIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIHRpbWVz dGFtcCBzaXplLiBJdCBpcyBwcm9iYWJseSBkYW1hZ2VkLiIpOwo+ICsgICAgICBleGl0KEVYSVRf RkFJTFVSRSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3RzcyA9IG1tYXAoTlVMTCwgaW5maWxlX3Np emUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgaW5maWxlLCAwKTsKPiArICAgIGlmIChzdHNzID09 IE1BUF9GQUlMRUQpCj4gKyAgICB7Cj4gKyAgICAgIHBlcnJvcigiTWFwcGluZyBmaWxlIGZvciBs b2FkaW5nIHRpbWVzdGFtcHMgZmFpbGVkIik7Cj4gKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsK PiArICAgIH0KPiArICAgIGluZmlsZV9zZXQgPSB0cnVlOwo+ICsgIH0KPiArCj4gKyAgdG1wX2Vu diA9IGdldGVudigiRkFLRVRJTUVfRk1UIik7Cj4gKyAgaWYgKHRtcF9lbnYgPT0gTlVMTCkKPiAr ICB7Cj4gKyAgICBzdHJjcHkodXNlcl9mYWtlZF90aW1lX2ZtdCwgIiVZLSVtLSVkICVUIik7Cj4g KyAgfQo+ICsgIGVsc2UKPiArICB7Cj4gKyAgICBzdHJuY3B5KHVzZXJfZmFrZWRfdGltZV9mbXQs IHRtcF9lbnYsIEJVRlNJWik7Cj4gKyAgfQo+ICsKPiArICBpZiAoc2hhcmVkX3NlbSAhPSAwKQo+ ICsgIHsKPiArICAgIGlmIChzZW1fd2FpdChzaGFyZWRfc2VtKSA9PSAtMSkKPiArICAgIHsKPiAr ICAgICAgcGVycm9yKCJzZW1fd2FpdCIpOwo+ICsgICAgICBleGl0KDEpOwo+ICsgICAgfQo+ICsg ICAgaWYgKGZ0X3NoYXJlZC0+c3RhcnRfdGltZS5yZWFsLnR2X25zZWMgPT0gLTEpCj4gKyAgICB7 Cj4gKyAgICAgIC8qIHNldCB1cCBnbG9iYWwgc3RhcnQgdGltZSAqLwo+ICsgICAgICBzeXN0ZW1f dGltZV9mcm9tX3N5c3RlbSgmZnRwbF9zdGFydHRpbWUpOwo+ICsgICAgICBmdF9zaGFyZWQtPnN0 YXJ0X3RpbWUgPSBmdHBsX3N0YXJ0dGltZTsKPiArICAgIH0KPiArICAgIGVsc2UKPiArICAgIHsK PiArICAgICAgLyoqIGdldCBwcmVzZXQgc3RhcnQgdGltZSAqLwo+ICsgICAgICBmdHBsX3N0YXJ0 dGltZSA9IGZ0X3NoYXJlZC0+c3RhcnRfdGltZTsKPiArICAgIH0KPiArICAgIGlmIChzZW1fcG9z dChzaGFyZWRfc2VtKSA9PSAtMSkKPiArICAgIHsKPiArICAgICAgcGVycm9yKCJzZW1fcG9zdCIp Owo+ICsgICAgICBleGl0KDEpOwo+ICsgICAgfQo+ICsgIH0KPiArICBlbHNlCj4gKyAgewo+ICsg ICAgc3lzdGVtX3RpbWVfZnJvbV9zeXN0ZW0oJmZ0cGxfc3RhcnR0aW1lKTsKPiArICB9Cj4gKyAg LyogZmFrZSB0aW1lIHN1cHBsaWVkIGFzIGVudmlyb25tZW50IHZhcmlhYmxlPyAqLwo+ICsgIGlm IChOVUxMICE9ICh0bXBfZW52ID0gZ2V0ZW52KCJGQUtFVElNRSIpKSkKPiArICB7Cj4gKyAgICBw YXJzZV9jb25maWdfZmlsZSA9IGZhbHNlOwo+ICsgICAgcGFyc2VfZnRfc3RyaW5nKHRtcF9lbnYp Owo+ICsgIH0KPiArCj4gKyAgZG9udF9mYWtlID0gZG9udF9mYWtlX2ZpbmFsOwo+ICt9Cj4gKwo+ ICsKPiArLyoKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKiAgICAgIEhlbHBlciBmdW5j dGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gSEVM UEVSCj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICovCj4gKwo+ICtzdGF0aWMgdm9pZCBy ZW1vdmVfdHJhaWxpbmdfZW9scyhjaGFyICpsaW5lKQo+ICt7Cj4gKyAgY2hhciAqZW5kcCA9IGxp bmUgKyBzdHJsZW4obGluZSk7Cj4gKyAgLyoKPiArICAgKiBlcmFzZSB0aGUgbGFzdCBjaGFyIGlm IGl0J3MgYSBuZXdsaW5lCj4gKyAgICogb3IgY2FycmlhZ2UgcmV0dXJuLCBhbmQgYmFjayB1cC4K PiArICAgKiBrZWVwIGRvaW5nIHRoaXMsIGJ1dCBkb24ndCBiYWNrIHVwCj4gKyAgICogcGFzdCB0 aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuCj4gKyAgICovCj4gKyMgZGVmaW5lIGlzX2VvbGNo YXIoYykgKChjKSA9PSAnXG4nIHx8IChjKSA9PSAnXHInKQo+ICsgIHdoaWxlIChlbmRwID4gbGlu ZSAmJiBpc19lb2xjaGFyKGVuZHBbLTFdKSkKPiArICB7Cj4gKyAgICAqLS1lbmRwID0gJ1wwJzsK PiArICB9Cj4gK30KPiArCj4gKwo+ICsvKgo+ICsgKiAgICAgID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gKyAq ICAgICAgSW1wbGVtZW50YXRpb24gb2YgZmFrZWQgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAg ICAgICAgPT09IEZBS0UoRkFLRSkKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKi8KPiAr Cj4gK2ludCBmYWtlX2Nsb2NrX2dldHRpbWUoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVz cGVjICp0cCkKPiArewo+ICsgIC8qIHZhcmlhYmxlcyB1c2VkIGZvciBjYWNoaW5nLCBpbnRyb2R1 Y2VkIGluIHZlcnNpb24gMC42ICovCj4gKyAgc3RhdGljIHRpbWVfdCBsYXN0X2RhdGFfZmV0Y2gg PSAwOyAgLyogbm90IGZldGNoZWQgcHJldmlvdXNseSBhdCBmaXJzdCBjYWxsICovCj4gKyAgc3Rh dGljIGludCBjYWNoZV9leHBpcmVkID0gMTsgICAgICAgLyogY29uc2lkZXJlZCBleHBpcmVkIGF0 IGZpcnN0IGNhbGwgKi8KPiArCj4gKyAgaWYgKGRvbnRfZmFrZSkgcmV0dXJuIDA7Cj4gKyAgLyog UGVyIHByb2Nlc3MgdGltZXJzIGFyZSBvbmx5IHNwZWQgdXAgb3Igc2xvd2VkIGRvd24gKi8KPiAr ICBpZiAoKGNsa19pZCA9PSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgKSB8fCAoY2xrX2lkID09 IENMT0NLX1RIUkVBRF9DUFVUSU1FX0lEKSkKPiArICB7Cj4gKyAgICBpZiAodXNlcl9yYXRlX3Nl dCkKPiArICAgIHsKPiArICAgICAgdGltZXNwZWNtdWwodHAsIHVzZXJfcmF0ZSwgdHApOwo+ICsg ICAgfQo+ICsgICAgcmV0dXJuIDA7Cj4gKyAgfQo+ICsKPiArICAvKiBTYW5pdHkgY2hlY2sgYnkg S2FybCBDaGFuIHNpbmNlIHYwLjggKi8KPiArICBpZiAodHAgPT0gTlVMTCkgcmV0dXJuIC0xOwo+ ICsKPiArI2lmZGVmIFBUSFJFQURfU0lOR0xFVEhSRUFERURfVElNRQo+ICsgIHN0YXRpYyBwdGhy ZWFkX211dGV4X3QgdGltZV9tdXRleD1QVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwo+ICsgIHB0 aHJlYWRfbXV0ZXhfbG9jaygmdGltZV9tdXRleCk7Cj4gKyAgcHRocmVhZF9jbGVhbnVwX3B1c2go KHZvaWQgKCopKHZvaWQgKikpcHRocmVhZF9tdXRleF91bmxvY2ssICh2b2lkICopJnRpbWVfbXV0 ZXgpOwo+ICsjZW5kaWYKPiArCj4gKyAgaWYgKChsaW1pdGVkX2Zha2luZyAmJgo+ICsgICAgICgo ZnRfc3RhcnRfYWZ0ZXJfbmNhbGxzICE9IC0xKSB8fCAoZnRfc3RvcF9hZnRlcl9uY2FsbHMgIT0g LTEpKSkgfHwKPiArICAgICAoc3Bhd25zdXBwb3J0ICYmIGZ0X3NwYXduX25jYWxscykpCj4gKyAg ewo+ICsgICAgaWYgKGNhbGxjb3VudGVyIDwgTE9OR19NQVgpIGNhbGxjb3VudGVyKys7Cj4gKyAg fQo+ICsKPiArICBpZiAobGltaXRlZF9mYWtpbmcgfHwgc3Bhd25zdXBwb3J0KQo+ICsgIHsKPiAr ICAgIHN0cnVjdCB0aW1lc3BlYyB0bXBfdHM7Cj4gKyAgICAvKiBGb3IgZGVidWdnaW5nLCBvdXRw dXQgI3NlY29uZHMgYW5kICNjYWxscyAqLwo+ICsgICAgc3dpdGNoIChjbGtfaWQpCj4gKyAgICB7 Cj4gKyAgICAgIGNhc2UgQ0xPQ0tfUkVBTFRJTUU6Cj4gKyNpZmRlZiBDTE9DS19SRUFMVElNRV9D T0FSU0UKPiArICAgICAgY2FzZSBDTE9DS19SRUFMVElNRV9DT0FSU0U6Cj4gKyNlbmRpZgo+ICsg ICAgICAgIHRpbWVzcGVjc3ViKHRwLCAmZnRwbF9zdGFydHRpbWUucmVhbCwgJnRtcF90cyk7Cj4g KyAgICAgICAgYnJlYWs7Cj4gKyAgICAgIGNhc2UgQ0xPQ0tfTU9OT1RPTklDOgo+ICsjaWZkZWYg Q0xPQ0tfTU9OT1RPTklDX0NPQVJTRQo+ICsgICAgICBjYXNlIENMT0NLX01PTk9UT05JQ19DT0FS U0U6Cj4gKyNlbmRpZgo+ICsgICAgICAgIHRpbWVzcGVjc3ViKHRwLCAmZnRwbF9zdGFydHRpbWUu bW9uLCAmdG1wX3RzKTsKPiArICAgICAgICBicmVhazsKPiArICAgICAgY2FzZSBDTE9DS19NT05P VE9OSUNfUkFXOgo+ICsgICAgICAgIHRpbWVzcGVjc3ViKHRwLCAmZnRwbF9zdGFydHRpbWUubW9u X3JhdywgJnRtcF90cyk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyNpZmRlZiBDTE9DS19CT09UVElN RQo+ICsgICAgICBjYXNlIENMT0NLX0JPT1RUSU1FOgo+ICsgICAgICAgIHRpbWVzcGVjc3ViKHRw LCAmZnRwbF9zdGFydHRpbWUuYm9vdCwgJnRtcF90cyk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyNl bmRpZgo+ICsgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgIHByaW50ZigiSW52YWxpZCBjbG9ja19p ZCBmb3IgY2xvY2tfZ2V0dGltZTogJWQiLCBjbGtfaWQpOwo+ICsgICAgICAgIGV4aXQoRVhJVF9G QUlMVVJFKTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAobGltaXRlZF9mYWtpbmcpCj4gKyAgICB7 Cj4gKyAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgYWN0dWFsbHkgc2hvdWxkIGJlIGZha2luZyB0 aGUgcmV0dXJuZWQgdGltZXN0YW1wLiAqLwo+ICsgICAgICAvKiBmcHJpbnRmKHN0ZGVyciwgIihs aWJmYWtldGltZSBsaW1pdHMgLT4gcnVudGltZTogJWx1LCBjYWxsY291bnRlcjogJWx1XG4iLCAo KnRpbWVfdHB0ciAtIGZ0cGxfc3RhcnR0aW1lKSwgY2FsbGNvdW50ZXIpOyAqLwo+ICsgICAgICBp ZiAoKGZ0X3N0YXJ0X2FmdGVyX3NlY3MgIT0gLTEpICAgJiYgKHRtcF90cy50dl9zZWMgPCBmdF9z dGFydF9hZnRlcl9zZWNzKSkgcmV0dXJuIDA7Cj4gKyAgICAgIGlmICgoZnRfc3RvcF9hZnRlcl9z ZWNzICE9IC0xKSAgICAmJiAodG1wX3RzLnR2X3NlYyA+PSBmdF9zdG9wX2FmdGVyX3NlY3MpKSBy ZXR1cm4gMDsKPiArICAgICAgaWYgKChmdF9zdGFydF9hZnRlcl9uY2FsbHMgIT0gLTEpICYmIChj YWxsY291bnRlciA8IGZ0X3N0YXJ0X2FmdGVyX25jYWxscykpIHJldHVybiAwOwo+ICsgICAgICBp ZiAoKGZ0X3N0b3BfYWZ0ZXJfbmNhbGxzICE9IC0xKSAgJiYgKGNhbGxjb3VudGVyID49IGZ0X3N0 b3BfYWZ0ZXJfbmNhbGxzKSkgcmV0dXJuIDA7Cj4gKyAgICAgIC8qIGZwcmludGYoc3RkZXJyLCAi KGxpYmZha2V0aW1lIGxpbWl0cyAtPiBydW50aW1lOiAlbHUsIGNhbGxjb3VudGVyOiAlbHUgY29u dGludWVzXG4iLCAoKnRpbWVfdHB0ciAtIGZ0cGxfc3RhcnR0aW1lKSwgY2FsbGNvdW50ZXIpOyAq Lwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChzcGF3bnN1cHBvcnQpCj4gKyAgICB7Cj4gKyAgICAg IC8qIGNoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIHNwYXduIGFuIGV4dGVybmFsIGNvbW1hbmQgKi8K PiArICAgICAgaWYgKHNwYXduZWQgPT0gMCkKPiArICAgICAgeyAvKiBleGVjIGV4dGVybmFsIGNv bW1hbmQgb25jZSBvbmx5ICovCj4gKyAgICAgICAgaWYgKCgodG1wX3RzLnR2X3NlYyA9PSBmdF9z cGF3bl9zZWNzKSB8fCAoY2FsbGNvdW50ZXIgPT0gZnRfc3Bhd25fbmNhbGxzKSkgJiYgKHNwYXdu ZWQgPT0gMCkpCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgc3Bhd25lZCA9IDE7Cj4gKyAgICAg ICAgICAodm9pZCkgKHN5c3RlbShmdF9zcGF3bl90YXJnZXQpICsgMSk7Cj4gKyAgICAgICAgfQo+ ICsgICAgICB9Cj4gKyAgICB9Cj4gKyAgfQo+ICsKPiArICBpZiAobGFzdF9kYXRhX2ZldGNoID4g MCkKPiArICB7Cj4gKyAgICBpZiAoKHRwLT50dl9zZWMgLSBsYXN0X2RhdGFfZmV0Y2gpID4gY2Fj aGVfZHVyYXRpb24pCj4gKyAgICB7Cj4gKyAgICAgIGNhY2hlX2V4cGlyZWQgPSAxOwo+ICsgICAg fQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsgICAgICBjYWNoZV9leHBpcmVkID0gMDsKPiArICAg IH0KPiArICB9Cj4gKwo+ICsgIGlmIChjYWNoZV9lbmFibGVkID09IDApCj4gKyAgewo+ICsgICAg Y2FjaGVfZXhwaXJlZCA9IDE7Cj4gKyAgfQo+ICsKPiArICBpZiAoY2FjaGVfZXhwaXJlZCA9PSAx KQo+ICsgIHsKPiArICAgIHN0YXRpYyBjaGFyIHVzZXJfZmFrZWRfdGltZVtCVUZGRVJMRU5dOyAv KiBjaGFuZ2VkIHRvIHN0YXRpYyBmb3IgY2FjaGluZyBpbiB2MC42ICovCj4gKyAgICAvKiBpbml0 aWFsaXplIHdpdGggZGVmYXVsdCBvciBlbnYuIHZhcmlhYmxlICovCj4gKyAgICBjaGFyICp0bXBf ZW52Owo+ICsKPiArICAgIC8qIENhbiBiZSBlbmFibGVkIGZvciB0ZXN0aW5nIC4uLgo+ICsgICAg ICBmcHJpbnRmKHN0ZGVyciwgIioqKioqKioqKioqKioqKisrIENhY2hlIGV4cGlyZWQgKysqKioq KioqKioqKioqKlxuIik7Cj4gKyAgICAqLwo+ICsKPiArICAgIGlmIChOVUxMICE9ICh0bXBfZW52 ID0gZ2V0ZW52KCJGQUtFVElNRSIpKSkKPiArICAgIHsKPiArICAgICAgc3RybmNweSh1c2VyX2Zh a2VkX3RpbWUsIHRtcF9lbnYsIEJVRkZFUkxFTik7Cj4gKyAgICB9Cj4gKyAgICBlbHNlCj4gKyAg ICB7Cj4gKyAgICAgIHNucHJpbnRmKHVzZXJfZmFrZWRfdGltZSwgQlVGRkVSTEVOLCAiKzAiKTsK PiArICAgIH0KPiArCj4gKyAgICBsYXN0X2RhdGFfZmV0Y2ggPSB0cC0+dHZfc2VjOwo+ICsgICAg LyogZmFrZSB0aW1lIHN1cHBsaWVkIGFzIGVudmlyb25tZW50IHZhcmlhYmxlPyAqLwo+ICsgICAg aWYgKHBhcnNlX2NvbmZpZ19maWxlKQo+ICsgICAgewo+ICsgICAgICBjaGFyIGN1c3RvbV9maWxl bmFtZVtCVUZTSVpdOwo+ICsgICAgICBjaGFyIGZpbGVuYW1lW0JVRlNJWl07Cj4gKyAgICAgIEZJ TEUgKmZha2V0aW1lcmM7Cj4gKyAgICAgIC8qIGNoZWNrIHdoZXRoZXIgdGhlcmUncyBhIC5mYWtl dGltZXJjIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIG9yCj4gKyAgICAgICAqIGEgc3lz dGVtLXdpZGUgL2V0Yy9mYWtldGltZXJjIHByZXNlbnQuCj4gKyAgICAgICAqIFRoZSAvZXRjL2Zh a2V0aW1lcmMgaGFuZGxpbmcgaGFzIGJlZW4gY29udHJpYnV0ZWQgYnkgRGF2aWQgQnVybGV5LAo+ ICsgICAgICAgKiBKYWNvYiBNb29ybWFuLCBhbmQgV2F5bmUgRGF2aXNvbiBvZiBTb3VyY2VGb3Jn ZSwgSW5jLiBpbiB2ZXJzaW9uIDAuNiAqLwo+ICsgICAgICAodm9pZCkgc25wcmludGYoY3VzdG9t X2ZpbGVuYW1lLCBCVUZTSVosICIlcyIsIGdldGVudigiRkFLRVRJTUVfVElNRVNUQU1QX0ZJTEUi KSk7Cj4gKyAgICAgICh2b2lkKSBzbnByaW50ZihmaWxlbmFtZSwgQlVGU0laLCAiJXMvLmZha2V0 aW1lcmMiLCBnZXRlbnYoIkhPTUUiKSk7Cj4gKyAgICAgIGlmICgoZmFrZXRpbWVyYyA9IGZvcGVu KGN1c3RvbV9maWxlbmFtZSwgInJ0IikpICE9IE5VTEwgfHwKPiArICAgICAgICAgIChmYWtldGlt ZXJjID0gZm9wZW4oZmlsZW5hbWUsICJydCIpKSAhPSBOVUxMIHx8Cj4gKyAgICAgICAgICAoZmFr ZXRpbWVyYyA9IGZvcGVuKCIvZXRjL2Zha2V0aW1lcmMiLCAicnQiKSkgIT0gTlVMTCkKPiArICAg ICAgewo+ICsgICAgICAgIGNoYXIgbGluZVtCVUZGRVJMRU5dOwo+ICsgICAgICAgIHdoaWxlKGZn ZXRzKGxpbmUsIEJVRkZFUkxFTiwgZmFrZXRpbWVyYykgIT0gTlVMTCkKPiArICAgICAgICB7Cj4g KyAgICAgICAgICBpZiAoKHN0cmxlbihsaW5lKSA+IDEpICYmIChsaW5lWzBdICE9ICcgJykgJiYK PiArICAgICAgICAgICAgICAobGluZVswXSAhPSAnIycpICYmIChsaW5lWzBdICE9ICc7JykpCj4g KyAgICAgICAgICB7Cj4gKyAgICAgICAgICAgIHJlbW92ZV90cmFpbGluZ19lb2xzKGxpbmUpOwo+ ICsgICAgICAgICAgICBzdHJuY3B5KHVzZXJfZmFrZWRfdGltZSwgbGluZSwgQlVGRkVSTEVOLTEp Owo+ICsgICAgICAgICAgICB1c2VyX2Zha2VkX3RpbWVbQlVGRkVSTEVOLTFdID0gMDsKPiArICAg ICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGZj bG9zZShmYWtldGltZXJjKTsKPiArICAgICAgfQo+ICsgICAgfSAvKiByZWFkIGZha2UgdGltZSBm cm9tIGZpbGUgKi8KPiArICAgIHBhcnNlX2Z0X3N0cmluZyh1c2VyX2Zha2VkX3RpbWUpOwo+ICsg IH0gLyogY2FjaGUgaGFkIGV4cGlyZWQgKi8KPiArCj4gKyAgaWYgKGluZmlsZV9zZXQpCj4gKyAg ewo+ICsgICAgaWYgKGxvYWRfdGltZSh0cCkpCj4gKyAgICB7Cj4gKyAgICAgIHJldHVybiAwOwo+ ICsgICAgfQo+ICsgIH0KPiArCj4gKyAgLyogY2hlY2sgd2hldGhlciB0aGUgdXNlciBnYXZlIHVz IGFuIGFic29sdXRlIHRpbWUgdG8gZmFrZSAqLwo+ICsgIHN3aXRjaCAoZnRfbW9kZSkKPiArICB7 Cj4gKyAgICBjYXNlIEZUX0ZSRUVaRTogIC8qIGEgc3BlY2lmaWVkIHRpbWUgKi8KPiArICAgICAg aWYgKHVzZXJfZmFrZWRfdGltZV9zZXQpCj4gKyAgICAgIHsKPiArICAgICAgICAqdHAgPSB1c2Vy X2Zha2VkX3RpbWVfdGltZXNwZWM7Cj4gKyAgICAgIH0KPiArICAgICAgYnJlYWs7Cj4gKwo+ICsg ICAgY2FzZSBGVF9TVEFSVF9BVDogLyogVXNlci1zcGVjaWZpZWQgb2Zmc2V0ICovCj4gKyAgICAg IGlmICh1c2VyX3Blcl90aWNrX2luY19zZXQpCj4gKyAgICAgIHsKPiArICAgICAgICAvKiBpbmNy ZW1lbnQgdGltZSB3aXRoIGV2ZXJ5IHRpbWUoKSBjYWxsKi8KPiArICAgICAgICBuZXh0X3RpbWUo dHAsICZ1c2VyX3Blcl90aWNrX2luYyk7Cj4gKyAgICAgIH0KPiArICAgICAgZWxzZQo+ICsgICAg ICB7Cj4gKyAgICAgICAgLyogU3BlZWQtdXAgLyBzbG93LWRvd24gY29udHJpYnV0ZWQgYnkgS2Fy bCBDaGVuIGluIHYwLjggKi8KPiArICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdGRpZmYsIHRpbWVh ZGo7Cj4gKyAgICAgICAgc3dpdGNoIChjbGtfaWQpCj4gKyAgICAgICAgewo+ICsgICAgICAgICAg Y2FzZSBDTE9DS19SRUFMVElNRToKPiArI2lmZGVmIENMT0NLX1JFQUxUSU1FX0NPQVJTRQo+ICsg ICAgICAgICAgY2FzZSBDTE9DS19SRUFMVElNRV9DT0FSU0U6Cj4gKyNlbmRpZgo+ICsgICAgICAg ICAgICB0aW1lc3BlY3N1Yih0cCwgJmZ0cGxfc3RhcnR0aW1lLnJlYWwsICZ0ZGlmZik7Cj4gKyAg ICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgY2FzZSBDTE9DS19NT05PVE9OSUM6Cj4gKyNp ZmRlZiBDTE9DS19NT05PVE9OSUNfQ09BUlNFCj4gKyAgICAgICAgICBjYXNlIENMT0NLX01PTk9U T05JQ19DT0FSU0U6Cj4gKyNlbmRpZgo+ICsgICAgICAgICAgICB0aW1lc3BlY3N1Yih0cCwgJmZ0 cGxfc3RhcnR0aW1lLm1vbiwgJnRkaWZmKTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAg ICAgICBjYXNlIENMT0NLX01PTk9UT05JQ19SQVc6Cj4gKyAgICAgICAgICAgIHRpbWVzcGVjc3Vi KHRwLCAmZnRwbF9zdGFydHRpbWUubW9uX3JhdywgJnRkaWZmKTsKPiArICAgICAgICAgICAgYnJl YWs7Cj4gKyNpZmRlZiBDTE9DS19CT09UVElNRQo+ICsgICAgICAgICAgY2FzZSBDTE9DS19CT09U VElNRToKPiArICAgICAgICAgICAgdGltZXNwZWNzdWIodHAsICZmdHBsX3N0YXJ0dGltZS5ib290 LCAmdGRpZmYpOwo+ICsgICAgICAgICAgICBicmVhazsKPiArI2VuZGlmCj4gKyAgICAgICAgICBk ZWZhdWx0Ogo+ICsgICAgICAgICAgICBwcmludGYoIkludmFsaWQgY2xvY2tfaWQgZm9yIGNsb2Nr X2dldHRpbWU6ICVkIiwgY2xrX2lkKTsKPiArICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUp Owo+ICsgICAgICAgIH0gLy8gZW5kIG9mIHN3aXRjaCAoY2xrX2lkKQo+ICsgICAgICAgIGlmICh1 c2VyX3JhdGVfc2V0KQo+ICsgICAgICAgIHsKPiArICAgICAgICAgIHRpbWVzcGVjbXVsKCZ0ZGlm ZiwgdXNlcl9yYXRlLCAmdGltZWFkaik7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGVsc2UKPiAr ICAgICAgICB7Cj4gKyAgICAgICAgICB0aW1lYWRqID0gdGRpZmY7Cj4gKyAgICAgICAgfQo+ICsg ICAgICAgIHRpbWVzcGVjYWRkKCZ1c2VyX2Zha2VkX3RpbWVfdGltZXNwZWMsICZ0aW1lYWRqLCB0 cCk7Cj4gKyAgICAgIH0KPiArICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgZGVmYXVsdDoKPiArICAg ICAgcmV0dXJuIC0xOwo+ICsgIH0gLy8gZW5kIG9mIHN3aXRjaChmdF9tb2RlKQo+ICsKPiArI2lm ZGVmIFBUSFJFQURfU0lOR0xFVEhSRUFERURfVElNRQo+ICsgIHB0aHJlYWRfY2xlYW51cF9wb3Ao MSk7Cj4gKyNlbmRpZgo+ICsgIHNhdmVfdGltZSh0cCk7Cj4gKyAgcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK2ludCBmYWtlX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCj4gK3sKPiArICBz dHJ1Y3QgdGltZXNwZWMgdHM7Cj4gKyAgaW50IHJldDsKPiArICB0cy50dl9zZWMgPSB0di0+dHZf c2VjOwo+ICsgIHRzLnR2X25zZWMgPSB0di0+dHZfdXNlYyAqIDEwMDAgICsgZnRwbF9zdGFydHRp bWUucmVhbC50dl9uc2VjICUgMTAwMDsKPiArCj4gKyAgcmV0ID0gZmFrZV9jbG9ja19nZXR0aW1l KENMT0NLX1JFQUxUSU1FLCAmdHMpOwo+ICsgIHR2LT50dl9zZWMgPSB0cy50dl9zZWM7Cj4gKyAg dHYtPnR2X3VzZWMgPXRzLnR2X25zZWMgLyAxMDAwOwo+ICsKPiArICByZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICsKPiArLyoKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKiAgICAgIEZha2Vk IHN5c3RlbSBmdW5jdGlvbnM6IEFwcGxlIE1hYyBPUyBYIHNwZWNpZmljICAgICAgICAgICA9PT0g RkFLRShPU1gpCj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICovCj4gKwo+ICsjaWZkZWYg X19BUFBMRU9TWF9fCj4gKy8qCj4gKyAqIGNsb2NrX2dldHRpbWUgaW1wbGVtZW50YXRpb24gZm9y IF9fQVBQTEVfXwo+ICsgKiBAbm90ZSBJdCBhbHdheXMgYmVoYXZlIGxpa2UgYmVpbmcgY2FsbGVk IHdpdGggQ0xPQ0tfUkVBTFRJTUUuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGFwcGxlX2Nsb2NrX2dl dHRpbWUoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCkKPiArewo+ICsgIGlu dCByZXN1bHQ7Cj4gKyAgbWFjaF90aW1lc3BlY190IGN1cl90aW1lY2xvY2tpZF90Owo+ICsgICh2 b2lkKSBjbGtfaWQ7IC8qIHVudXNlZCAqLwo+ICsKPiArICBpZiAoTlVMTCA9PSByZWFsX2Nsb2Nr X2dldF90aW1lKQo+ICsgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCj4gKyNpZmRlZiBERUJVRwo+ ICsgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxlbTogb3JpZ2luYWwg Y2xvY2tfZ2V0X3RpbWUoKSBub3QgZm91bmQuXG4iKTsKPiArI2VuZGlmCj4gKyAgICByZXR1cm4g LTE7IC8qIHByb3BhZ2F0ZSBlcnJvciB0byBjYWxsZXIgKi8KPiArICB9Cj4gKwo+ICsgIERPTlRf RkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9jbG9ja19nZXRfdGltZSkoY2xvY2tfc2Vydl9yZWFs LCAmY3VyX3RpbWVjbG9ja2lkX3QpKTsKPiArICB0cC0+dHZfc2VjID0gIGN1cl90aW1lY2xvY2tp ZF90LnR2X3NlYzsKPiArICB0cC0+dHZfbnNlYyA9IGN1cl90aW1lY2xvY2tpZF90LnR2X25zZWM7 Cj4gKyAgcmV0dXJuIHJlc3VsdDsKPiArfQo+ICsKPiAraW50IGNsb2NrX2dldF90aW1lKGNsb2Nr X3NlcnZfdCBjbG9ja19zZXJ2LCBtYWNoX3RpbWVzcGVjX3QgKmN1cl90aW1lY2xvY2tpZF90KQo+ ICt7Cj4gKyAgaW50IHJlc3VsdDsKPiArICBzdHJ1Y3QgdGltZXNwZWMgdHM7Cj4gKwo+ICsgIC8q Cj4gKyAgICogSW5pdGlhbGl6ZSBvdXIgcmVzdWx0IHdpdGggdGhlIHJlYWwgY3VycmVudCB0aW1l IGZyb20gQ0FMRU5EQVJfQ0xPQ0suCj4gKyAgICogVGhpcyBpcyBhIGJpdCBvZiBjaGVhdGluZywg YnV0IHdlIGRvbid0IGtlZXAgdHJhY2sgb2Ygb2J0YWluZWQgY2xvY2sKPiArICAgKiBzZXJ2aWNl cy4KPiArICAgKi8KPiArICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfY2xvY2tfZ2V0 dGltZSkoQ0xPQ0tfUkVBTFRJTUUsICZ0cykpOwo+ICsgIGlmIChyZXN1bHQgPT0gLTEpIHJldHVy biByZXN1bHQ7IC8qIG9yaWdpbmFsIGZ1bmN0aW9uIGZhaWxlZCAqLwo+ICsKPiArICAvKiBwYXNz IHRoZSByZWFsIGN1cnJlbnQgdGltZSB0byBvdXIgZmFraW5nIHZlcnNpb24sIG92ZXJ3cml0aW5n IGl0ICovCj4gKyAgcmVzdWx0ID0gZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAm dHMpOwo+ICsgIGN1cl90aW1lY2xvY2tpZF90LT50dl9zZWMgPSB0cy50dl9zZWM7Cj4gKyAgY3Vy X3RpbWVjbG9ja2lkX3QtPnR2X25zZWMgPSB0cy50dl9uc2VjOwo+ICsKPiArICAvKiByZXR1cm4g dGhlIHJlc3VsdCB0byB0aGUgY2FsbGVyICovCj4gKyAgcmV0dXJuIHJlc3VsdDsKPiArfQo+ICsj ZW5kaWYKPiArCj4gKwo+ICsvKgo+ICsgKiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gKyAqICAgICAg RmFrZWQgc3lzdGVtLWludGVybmFsIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAg ID09PSBGQUtFKElOVCkKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKi8KPiArCj4gKyNp ZmRlZiBGQUtFX0lOVEVSTkFMX0NBTExTCj4gK2ludCBfX2dldHRpbWVvZmRheShzdHJ1Y3QgdGlt ZXZhbCAqdHYsIHZvaWQgKnR6KQo+ICt7Cj4gKyAgaW50IHJlc3VsdDsKPiArCj4gKyAgLyogc2Fu aXR5IGNoZWNrICovCj4gKyAgaWYgKHR2ID09IE5VTEwpCj4gKyAgewo+ICsgICAgcmV0dXJuIC0x Owo+ICsgIH0KPiArCj4gKyAgLyogQ2hlY2sgd2hldGhlciB3ZSd2ZSBnb3QgYSBwb2ludGVyIHRv IHRoZSByZWFsIGZ0aW1lKCkgZnVuY3Rpb24geWV0ICovCj4gKyAgaWYgKE5VTEwgPT0gcmVhbF9f X2dldHRpbWVvZmRheSkKPiArICB7ICAvKiBkbHN5bSgpIGZhaWxlZCAqLwo+ICsjaWZkZWYgREVC VUcKPiArICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImZha2V0aW1lIHByb2JsZW06IG9yaWdp bmFsIF9fZ2V0dGltZW9mZGF5KCkgbm90IGZvdW5kLlxuIik7Cj4gKyNlbmRpZgo+ICsgICAgcmV0 dXJuIC0xOyAvKiBwcm9wYWdhdGUgZXJyb3IgdG8gY2FsbGVyICovCj4gKyAgfQo+ICsKPiArICAv KiBpbml0aWFsaXplIG91ciByZXN1bHQgd2l0aCB0aGUgcmVhbCBjdXJyZW50IHRpbWUgKi8KPiAr ICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfX19nZXR0aW1lb2ZkYXkpKHR2LCB0eikp Owo+ICsgIGlmIChyZXN1bHQgPT0gLTEpIHJldHVybiByZXN1bHQ7IC8qIG9yaWdpbmFsIGZ1bmN0 aW9uIGZhaWxlZCAqLwo+ICsKPiArICAvKiBwYXNzIHRoZSByZWFsIGN1cnJlbnQgdGltZSB0byBv dXIgZmFraW5nIHZlcnNpb24sIG92ZXJ3cml0aW5nIGl0ICovCj4gKyAgcmVzdWx0ID0gZmFrZV9n ZXR0aW1lb2ZkYXkodHYpOwo+ICsKPiArICAvKiByZXR1cm4gdGhlIHJlc3VsdCB0byB0aGUgY2Fs bGVyICovCj4gKyAgcmV0dXJuIHJlc3VsdDsKPiArfQo+ICsKPiAraW50IF9fY2xvY2tfZ2V0dGlt ZShjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQo+ICt7Cj4gKyAgaW50IHJl c3VsdDsKPiArCj4gKyAgLyogc2FuaXR5IGNoZWNrICovCj4gKyAgaWYgKHRwID09IE5VTEwpCj4g KyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArCj4gKyAgaWYgKE5VTEwgPT0gcmVhbF9f X2Nsb2NrX2dldHRpbWUpCj4gKyAgeyAgLyogZGxzeW0oKSBmYWlsZWQgKi8KPiArI2lmZGVmIERF QlVHCj4gKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBwcm9ibGVtOiBvcmln aW5hbCBfX2Nsb2NrX2dldHRpbWUoKSBub3QgZm91bmQuXG4iKTsKPiArI2VuZGlmCj4gKyAgICBy ZXR1cm4gLTE7IC8qIHByb3BhZ2F0ZSBlcnJvciB0byBjYWxsZXIgKi8KPiArICB9Cj4gKwo+ICsg IC8qIGluaXRpYWxpemUgb3VyIHJlc3VsdCB3aXRoIHRoZSByZWFsIGN1cnJlbnQgdGltZSAqLwo+ ICsgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9fX2Nsb2NrX2dldHRpbWUpKGNsa19p ZCwgdHApKTsKPiArICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gcmVzdWx0OyAvKiBvcmlnaW5h bCBmdW5jdGlvbiBmYWlsZWQgKi8KPiArCj4gKyAgLyogcGFzcyB0aGUgcmVhbCBjdXJyZW50IHRp bWUgdG8gb3VyIGZha2luZyB2ZXJzaW9uLCBvdmVyd3JpdGluZyBpdCAqLwo+ICsgIGlmIChmYWtl X21vbm90b25pY19jbG9jayB8fCBjbGtfaWQgIT0gQ0xPQ0tfTU9OT1RPTklDKQo+ICsgIHsKPiAr ICAgIHJlc3VsdCA9IGZha2VfY2xvY2tfZ2V0dGltZShjbGtfaWQsIHRwKTsKPiArICB9Cj4gKwo+ ICsgIC8qIHJldHVybiB0aGUgcmVzdWx0IHRvIHRoZSBjYWxsZXIgKi8KPiArICByZXR1cm4gcmVz dWx0Owo+ICt9Cj4gKwo+ICt0aW1lX3QgX190aW1lKHRpbWVfdCAqdGltZV90cHRyKQo+ICt7Cj4g KyAgc3RydWN0IHRpbWVzcGVjIHRwOwo+ICsgIHRpbWVfdCByZXN1bHQ7Cj4gKwo+ICsgIERPTlRf RkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9jbG9ja19nZXR0aW1lKShDTE9DS19SRUFMVElNRSwg JnRwKSk7Cj4gKyAgaWYgKHJlc3VsdCA9PSAtMSkgcmV0dXJuIC0xOwo+ICsKPiArICAvKiBwYXNz IHRoZSByZWFsIGN1cnJlbnQgdGltZSB0byBvdXIgZmFraW5nIHZlcnNpb24sIG92ZXJ3cml0aW5n IGl0ICovCj4gKyAgKHZvaWQpZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHAp Owo+ICsKPiArICBpZiAodGltZV90cHRyICE9IE5VTEwpCj4gKyAgewo+ICsgICAgKnRpbWVfdHB0 ciA9IHRwLnR2X3NlYzsKPiArICB9Cj4gKyAgcmV0dXJuIHRwLnR2X3NlYzsKPiArfQo+ICsKPiAr aW50IF9fZnRpbWUoc3RydWN0IHRpbWViICp0YikKPiArewo+ICsgIHN0cnVjdCB0aW1lc3BlYyB0 cDsKPiArICBpbnQgcmVzdWx0Owo+ICsKPiArICAvKiBzYW5pdHkgY2hlY2sgKi8KPiArICBpZiAo dGIgPT0gTlVMTCkKPiArICAgIHJldHVybiAwOyAgICAgICAgICAgICAgIC8qIGZ0aW1lKCkgYWx3 YXlzIHJldHVybnMgMCwgc2VlIG1hbnBhZ2UgKi8KPiArCj4gKyAgLyogQ2hlY2sgd2hldGhlciB3 ZSd2ZSBnb3QgYSBwb2ludGVyIHRvIHRoZSByZWFsIGZ0aW1lKCkgZnVuY3Rpb24geWV0ICovCj4g KyAgaWYgKE5VTEwgPT0gcmVhbF9fX2Z0aW1lKQo+ICsgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICov Cj4gKyNpZmRlZiBERUJVRwo+ICsgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUg cHJvYmxlbTogb3JpZ2luYWwgZnRpbWUoKSBub3QgZm91bmQuXG4iKTsKPiArI2VuZGlmCj4gKyAg ICByZXR1cm4gMDsgLyogcHJvcGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLwo+ICsgIH0KPiArCj4g KyAgLyogaW5pdGlhbGl6ZSBvdXIgVFogcmVzdWx0IHdpdGggdGhlIHJlYWwgY3VycmVudCB0aW1l ICovCj4gKyAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX19fZnRpbWUpKHRiKSk7Cj4g KyAgaWYgKHJlc3VsdCA9PSAtMSkKPiArICB7Cj4gKyAgICByZXR1cm4gcmVzdWx0Owo+ICsgIH0K PiArCj4gKyAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX2Nsb2NrX2dldHRpbWUpKENM T0NLX1JFQUxUSU1FLCAmdHApKTsKPiArICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gLTE7Cj4g Kwo+ICsgIC8qIHBhc3MgdGhlIHJlYWwgY3VycmVudCB0aW1lIHRvIG91ciBmYWtpbmcgdmVyc2lv biwgb3ZlcndyaXRpbmcgaXQgKi8KPiArICAodm9pZClmYWtlX2Nsb2NrX2dldHRpbWUoQ0xPQ0tf UkVBTFRJTUUsICZ0cCk7Cj4gKwo+ICsgIHRiLT50aW1lID0gdHAudHZfc2VjOwo+ICsgIHRiLT5t aWxsaXRtID0gdHAudHZfbnNlYyAvIDEwMDAwMDA7Cj4gKwo+ICsgIC8qIHJldHVybiB0aGUgcmVz dWx0IHRvIHRoZSBjYWxsZXIgKi8KPiArICByZXR1cm4gcmVzdWx0OyAvKiB3aWxsIGFsd2F5cyBi ZSAwIChzZWUgbWFucGFnZSkgKi8KPiArfQo+ICsKPiArI2VuZGlmCj4gKwo+ICsvKgo+ICsgKiBF ZGl0b3IgbW9kZWxpbmVzCj4gKyAqCj4gKyAqIExvY2FsIHZhcmlhYmxlczoKPiArICogYy1iYXNp Yy1vZmZzZXQ6IDIKPiArICogdGFiLXdpZHRoOiAyCj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5p bAo+ICsgKiBFbmQ6Cj4gKyAqCj4gKyAqIHZpOiBzZXQgc2hpZnR3aWR0aD0yIHRhYnN0b3A9MiBl eHBhbmR0YWI6Cj4gKyAqIDppbmRlbnRTaXplPTI6dGFiU2l6ZT0yOm5vVGFicz10cnVlOgo+ICsg Ki8KPiArCj4gKy8qIGVvZiAqLwo+IGRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYmZha2V0aW1lL2xp YmZha2V0aW1lLm1hcCBiL3NjcmlwdHMvbGliZmFrZXRpbWUvbGliZmFrZXRpbWUubWFwCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi42ZTAwOGNmCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL3NjcmlwdHMvbGliZmFrZXRpbWUvbGliZmFrZXRpbWUubWFwCj4gQEAgLTAsMCAr MSwxMCBAQAo+ICtHTElCQ18yLjIgewo+ICsgIGdsb2JhbDoKPiArCj4gKyAgdGltZXJfZ2V0dGlt ZTsgdGltZXJfc2V0dGltZTsKPiArICBsb2NhbDogdGltZXJfc2V0dGltZV8qOyB0aW1lcl9nZXR0 aW1lXyo7Cj4gK307Cj4gK0dMSUJDXzIuMy4zIHsKPiArICAjIENoYW5nZWQgdGltZXJfdC4KPiAr ICB0aW1lcl9nZXR0aW1lOyB0aW1lcl9zZXR0aW1lOwo+ICt9IEdMSUJDXzIuMjsKPiBkaWZmIC0t Z2l0IGEvc2NyaXB0cy9saWJmYWtldGltZS90aW1lX29wcy5oIGIvc2NyaXB0cy9saWJmYWtldGlt ZS90aW1lX29wcy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi41OWFi MWVlCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3NjcmlwdHMvbGliZmFrZXRpbWUvdGltZV9vcHMu aAo+IEBAIC0wLDAgKzEsMTA0IEBACj4gKy8qCj4gKyAqIFRpbWUgb3BlcmF0aW9uIG1hY3JvcyBi YXNlZCBvbiBzeXMvdGltZS5oCj4gKyAqIENvcHlyaWdodCAyMDEzIEJhbGludCBSZWN6ZXkgPGJh bGludEBiYWxpbnRyZWN6ZXkuaHU+Cj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxp YmZha2V0aW1lLgo+ICsgKgo+ICsgKiBsaWJmYWtldGltZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCj4gKyAqIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlCj4gKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIGxpYmZha2V0aW1l IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBX SVRIT1VUCj4gKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCj4gKyAqIG1v cmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgYWxvbmcKPiArICogd2l0aCBsaWJm YWtldGltZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuLAo+ICsgKiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEt MTMwNyAgVVNBCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBUSU1FX09QU19ICj4gKyNkZWZpbmUgVElN RV9PUFNfSAo+ICsjaW5jbHVkZSA8dGltZS5oPgo+ICsKPiArI2RlZmluZSBTRUNfVE9fdVNFQyAx MDAwMDAwCj4gKyNkZWZpbmUgU0VDX1RPX25TRUMgMTAwMDAwMDAwMAo+ICsKPiArLyogQ29udmVu aWVuY2UgbWFjcm9zIGZvciBvcGVyYXRpb25zIG9uIHRpbWV2YWxzLgo+ICsgICBOT1RFOiBgdGlt ZXJjbXAnIGRvZXMgbm90IHdvcmsgZm9yID49IG9yIDw9LiAgKi8KPiArI2RlZmluZSB0aW1lcmlz c2V0Mih0dnAsIHByZWZpeCkgKCh0dnApLT50dl9zZWMgfHwgKHR2cCktPnR2XyMjcHJlZml4IyNz ZWMpCj4gKyNkZWZpbmUgdGltZXJjbGVhcjIodHZwLCBwcmVmaXgpICgodHZwKS0+dHZfc2VjID0g KHR2cCktPnR2XyMjcHJlZml4IyNzZWMgPSAwKQo+ICsjZGVmaW5lIHRpbWVyY21wMihhLCBiLCBD TVAsIHByZWZpeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAoKChhKS0+ dHZfc2VjID09IChiKS0+dHZfc2VjKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gKyAgICgoYSktPnR2XyMjcHJlZml4IyNzZWMgQ01QIChiKS0+dHZfIyNwcmVmaXgjI3Nl YykgOiAgICAgICAgICAgICAgXAo+ICsgICAoKGEpLT50dl9zZWMgQ01QIChiKS0+dHZfc2VjKSkK PiArI2RlZmluZSB0aW1lcmFkZDIoYSwgYiwgcmVzdWx0LCBwcmVmaXgpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIChy ZXN1bHQpLT50dl9zZWMgPSAoYSktPnR2X3NlYyArIChiKS0+dHZfc2VjOyAgICAgICAgICAgICAg ICAgICBcCj4gKyAgICAocmVzdWx0KS0+dHZfIyNwcmVmaXgjI3NlYyA9IChhKS0+dHZfIyNwcmVm aXgjI3NlYyArICAgICAgICAgICAgXAo+ICsgICAgICAoYiktPnR2XyMjcHJlZml4IyNzZWM7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIGlmICgocmVzdWx0 KS0+dHZfIyNwcmVmaXgjI3NlYyA+PSBTRUNfVE9fIyNwcmVmaXgjI1NFQykgICAgICAgICBcCj4g KyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+ICsgICAgICAgICsrKHJlc3VsdCktPnR2X3NlYzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAocmVzdWx0KS0+dHZfIyNw cmVmaXgjI3NlYyAtPSBTRUNfVE9fIyNwcmVmaXgjI1NFQzsgICAgICAgICBcCj4gKyAgICAgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ICsgIH0gd2hpbGUgKDApCj4gKyNkZWZpbmUgdGltZXJzdWIyKGEsIGIsIHJlc3VsdCwg cHJlZml4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgIGRvICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAr ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4gKyAgICAocmVzdWx0KS0+dHZfc2VjID0gKGEpLT50dl9zZWMgLSAoYikt PnR2X3NlYzsgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgKHJlc3VsdCktPnR2XyMjcHJlZml4 IyNzZWMgPSAoYSktPnR2XyMjcHJlZml4IyNzZWMgLSAgICAgICAgICAgIFwKPiArICAgICAgKGIp LT50dl8jI3ByZWZpeCMjc2VjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gKyAgICBpZiAoKHJlc3VsdCktPnR2XyMjcHJlZml4IyNzZWMgPCAwKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+ICsgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgLS0ocmVzdWx0KS0+ dHZfc2VjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAg ICAgIChyZXN1bHQpLT50dl8jI3ByZWZpeCMjc2VjICs9IFNFQ19UT18jI3ByZWZpeCMjU0VDOyAg ICAgICAgICAgXAo+ICsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICB9IHdoaWxlICgwKQo+ICsjZGVmaW5lIHRp bWVybXVsMih0dnAsIGMsIHJlc3VsdCwgcHJlZml4KSAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKPiArICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgbG9uZyBsb25nIHRtcF90 aW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAg IHRtcF90aW1lID0gKGMpICogKCh0dnApLT50dl9zZWMgKiBTRUNfVE9fIyNwcmVmaXgjI1NFQyAr ICAgICAgICBcCj4gKyAgICAgICAgICAgICAgICh0dnApLT50dl8jI3ByZWZpeCMjc2VjKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgKHJlc3VsdCktPnR2XyMjcHJlZml4IyNz ZWMgPSB0bXBfdGltZSAlIFNFQ19UT18jI3ByZWZpeCMjU0VDOyAgIFwKPiArICAgIChyZXN1bHQp LT50dl9zZWMgPSAodG1wX3RpbWUgLSAocmVzdWx0KS0+dHZfIyNwcmVmaXgjI3NlYykgLyAgICBc Cj4gKyAgICAgIFNFQ19UT18jI3ByZWZpeCMjU0VDOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+ICsgICAgaWYgKChyZXN1bHQpLT50dl8jI3ByZWZpeCMjc2VjIDwg MCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAg IChyZXN1bHQpLT50dl8jI3ByZWZpeCMjc2VjICs9ICBTRUNfVE9fIyNwcmVmaXgjI1NFQzsgICAg ICAgICAgXAo+ICsgICAgICAocmVzdWx0KS0+dHZfc2VjIC09IDE7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgfSB3aGlsZSAoMCkK PiArCj4gKy8qIG9wcyBmb3IgbWljcm9zZWNzICovCj4gKyNpZm5kZWYgdGltZXJpc3NldAo+ICsj ZGVmaW5lIHRpbWVyaXNzZXQodHZwKSB0aW1lcmlzc2V0Mih0dnAsdSkKPiArI2VuZGlmCj4gKyNp Zm5kZWYgdGltZXJjbGVhcgo+ICsjZGVmaW5lIHRpbWVyY2xlYXIodHZwKSB0aW1lcmNsZWFyMih0 dnAsIHUpCj4gKyNlbmRpZgo+ICsjaWZuZGVmIHRpbWVyY21wCj4gKyNkZWZpbmUgdGltZXJjbXAo YSwgYiwgQ01QKSB0aW1lcmNtcDIoYSwgYiwgQ01QLCB1KQo+ICsjZW5kaWYKPiArI2lmbmRlZiB0 aW1lcmFkZAo+ICsjZGVmaW5lIHRpbWVyYWRkKGEsIGIsIHJlc3VsdCkgdGltZXJhZGQyKGEsIGIs IHJlc3VsdCwgdSkKPiArI2VuZGlmCj4gKyNpZm5kZWYgdGltZXJzdWIKPiArI2RlZmluZSB0aW1l cnN1YihhLCBiLCByZXN1bHQpIHRpbWVyc3ViMihhLCBiLCByZXN1bHQsIHUpCj4gKyNlbmRpZgo+ ICsjaWZuZGVmIHRpbWVyc3ViCj4gKyNkZWZpbmUgdGltZXJtdWwoYSwgYywgcmVzdWx0KSB0aW1l cm11bDIoYSwgYywgcmVzdWx0LCB1KQo+ICsjZW5kaWYKPiArCj4gKy8qIG9wcyBmb3IgbmFub3Nl Y3MgKi8KPiArI2RlZmluZSB0aW1lc3BlY2lzc2V0KHR2cCkgdGltZXJpc3NldDIodHZwLG4pCj4g KyNkZWZpbmUgdGltZXNwZWNjbGVhcih0dnApIHRpbWVyY2xlYXIyKHR2cCwgbikKPiArI2RlZmlu ZSB0aW1lc3BlY2NtcChhLCBiLCBDTVApIHRpbWVyY21wMihhLCBiLCBDTVAsIG4pCj4gKyNkZWZp bmUgdGltZXNwZWNhZGQoYSwgYiwgcmVzdWx0KSB0aW1lcmFkZDIoYSwgYiwgcmVzdWx0LCBuKQo+ ICsjZGVmaW5lIHRpbWVzcGVjc3ViKGEsIGIsIHJlc3VsdCkgdGltZXJzdWIyKGEsIGIsIHJlc3Vs dCwgbikKPiArI2RlZmluZSB0aW1lc3BlY211bChhLCBjLCByZXN1bHQpIHRpbWVybXVsMihhLCBj LCByZXN1bHQsIG4pCj4gKwo+ICsjZW5kaWYKPiAtLSAKPiAxLjkuMQo+IAo+IAo+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gcHR4ZGlzdCBtYWlsaW5n IGxpc3QKPiBwdHhkaXN0QHBlbmd1dHJvbml4LmRlCgotLSAKUm9sYW5kIEhpZWJlciAgICAgICAg ICAgICAgICAgICAgIHwgci5oaWViZXJAcGVuZ3V0cm9uaXguZGUgICAgIHwKUGVuZ3V0cm9uaXgg ZS5LLiAgICAgICAgICAgICAgICAgIHwgaHR0cHM6Ly93d3cucGVuZ3V0cm9uaXguZGUvIHwKUGVp bmVyIFN0ci4gNi04LCAzMTEzNyBIaWxkZXNoZWltIHwgUGhvbmU6ICs0OS01MTIxLTIwNjkxNy01 MDg2IHwKQW10c2dlcmljaHQgSGlsZGVzaGVpbSwgSFJBIDI2ODYgIHwgRmF4OiAgICs0OS01MTIx LTIwNjkxNy01NTU1IHwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCnB0eGRpc3QgbWFpbGluZyBsaXN0CnB0eGRpc3RAcGVuZ3V0cm9uaXguZGU= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: From: jon@ringle.org Date: Fri, 3 Aug 2018 11:44:56 -0400 Message-Id: <1533311096-14315-2-git-send-email-jon@ringle.org> In-Reply-To: <1533311096-14315-1-git-send-email-jon@ringle.org> References: <1533311096-14315-1-git-send-email-jon@ringle.org> Subject: [ptxdist] [PATCH v4 2/2] Detect changes in package patch series List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ptxdist-bounces@pengutronix.de Sender: "ptxdist" To: ptxdist@pengutronix.com Cc: Jon Ringle RnJvbTogSm9uIFJpbmdsZSA8anJpbmdsZUBncmlkcG9pbnQuY29tPgoKRm9yIGEgbG9uZyB0aW1l IGl0IGhhcyBib3RoZXJlZCBtZSB0aGF0IGlmIGEgcGFja2FnZSdzIHBhdGNoZXMgd2VyZSBjaGFu Z2VkCnB0eGRpc3Qgd291bGQgbm90IGRldGVjdCB0aGlzIGNoYW5nZSBhbmQgSSB3b3VsZCBvZnRl biBoYXZlIG9sZCB2ZXJzaW9ucyBvZgoqLWRldi50YXIuZ3ogcGFja2FnZXMgdGhhdCBnb3QgdXNl ZCBiZWNhdXNlIHRoZSBwYWNrYWdlcyBwYXRjaGVzIHdlcmUKdXBkYXRlZC4KClRoaXMgY29tbWl0 IHNvbHZlcyB0aGlzIHByb2JsZW0uCgpIZXJlJ3MgaG93IGl0IHdvcmtzOgoxKSBJbiB0aGUgcGFj a2FnZSBydWxlIG1ha2VmaWxlIGFkZCBgJHtQS0d9X1NFUklFU19TSEEyNTYgOj1gCjIpIGV4dHJh Y3QgdGhlIHBhY2thZ2UuIGxpYmZha2V0aW1lIGlzIHVzZWQgdG8ga2VlcCB0aGUgY29tbWl0dGVy IHRpbWVzdGFtcAogICB0byBhIGZpeGVkIHRpbWVzdGFtcCBpbiBvcmRlciB0byBrZWVwIHRoZSBn aXQgU0hBMSB0cmVlIHJlcGVhdGFibGUuCjMpIGZyb20gdGhlIHBhY2thZ2VzIHNyYyBkaXIgZG8g YGdpdCBwdHgtcGF0Y2hlc2AKICAgVGhpcyB3aWxsIHBvcHVsYXRlIHRoZSBydWxlIG1ha2VmaWxl IF9TRVJJRVNfU0hBMjU2IHZhbHVlCjQpIEFueXRpbWUgeW91IG1ha2UgYSBwYXRjaCBjaGFuZ2Ug dG8gYSBwYWNrYWdlIGFuZCBkbyBgZ2l0IHB0eC1wYXRjaGVzYAogICB0aGUgc2VyaWVzIGZpbGUg Z2V0cyB1cGRhdGVkIHdpdGggdGhlIGBnaXQgcmV2LXBhcnNlIEhFQURgIHZhbHVlIHdoaWNoCiAg IGNhdXNlcyB0aGUgc2VyaWVzIGZpbGUgdG8gaGF2ZSBhIG5ldyBzaGEyNTYgdmFsdWUgYW5kIHRo ZXJlZm9yZSBhIG5ldwogICB2YWx1ZSBnZXRzIHBvcHVsYXRlZCBpbiB0aGUgcnVsZSBtYWtlZmls ZSwgd2hpY2ggdGhlbiBjYXVzZXMgdGhlIHBhY2thZ2UKICAgdG8gYmUgcmVidWlsdCBhbmQgdGhl ICotZGV2LnRhci5neiBwYWNrYWdlIHdpbGwgaGF2ZSBhIGRpZmZlcmVudCBjZmdoYXNoCiAgIGlu IHRoZSBmaWxlbmFtZQoKU2lnbmVkLW9mZi1ieTogSm9uIFJpbmdsZSA8anJpbmdsZUBncmlkcG9p bnQuY29tPgotLS0KIHNjcmlwdHMvZ2l0LXB0eC1wYXRjaGVzICAgICAgICAgICAgICAgIHwgMzgg KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQogc2NyaXB0cy9saWIvcHR4ZF9tYWtl X3dvcmxkX3BhdGNoaW4uc2ggfCAyOCArKysrKysrKysrKysrKysrKysrKysrKystCiAyIGZpbGVz IGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c2NyaXB0cy9naXQtcHR4LXBhdGNoZXMgYi9zY3JpcHRzL2dpdC1wdHgtcGF0Y2hlcwppbmRleCBm MjU2OGY5Li5kMzdjOTM2IDEwMDc1NQotLS0gYS9zY3JpcHRzL2dpdC1wdHgtcGF0Y2hlcworKysg Yi9zY3JpcHRzL2dpdC1wdHgtcGF0Y2hlcwpAQCAtMiw5ICsyLDMxIEBACiAKIFBUWF9QQVRDSEVT X0hFQURFUj0iIyBnZW5lcmF0ZWQgYnkgZ2l0LXB0eC1wYXRjaGVzIgogCi1mdW5jdGlvbiBfbWQ1 c3VtKCkgewotCWxvY2FsIHN1bT0kKG1kNXN1bSkKLQllY2hvICIjICRzdW0gZ2l0LXB0eC1wYXRj aGVzIG1hZ2ljIgorZnVuY3Rpb24gX2dpdHNoYTFzdW0oKSB7CisJbG9jYWwgc2hhMT0kKGdpdCBy ZXYtcGFyc2UgSEVBRCkKKwllY2hvICIjICRzaGExIGdpdC1wdHgtcGF0Y2hlcyBtYWdpYyIKK30K KwordXBkYXRlX3Nlcmllc19zaGEyNTYoKSB7CisJbG9jYWwgbWFrZWZpbGU9IiQocmVhZGxpbmsg LWYgLnB0eGRpc3QvcnVsZS5tYWtlKSIKKwlzb3VyY2UgLnB0eGRpc3QvcnVsZS5lbnYKKwlzZXQg LS0gJChzaGEyNTZzdW0gLnB0eGRpc3Qvc2VyaWVzKQorCWxvY2FsIHNoYTI1Nj0iJHsxfSIKKwor CWxvY2FsIGNvdW50PSQoZ3JlcCAiXiR7UEtHfV9TRVJJRVNfU0hBMjU2WwkgXSo6PSIgIiR7bWFr ZWZpbGV9IiAyPiAvZGV2L251bGwgfCB3YyAtbCkKKwlpZiBbICIke2NvdW50fSIgLWd0IDEgXTsg dGhlbgorCQllY2hvICJFcnJvcjogQ291bGQgbm90IHVwZGF0ZSBwYXRjaCBzZXJpZXMgc2hhMjU2 c3VtIGZvciAnJHtwa2dfbGFiZWx9JzogJHtQS0d9X1NFUklFU19TSEEyNTYgZm91bmQgJHtjb3Vu dH0gdGltZXMgaW4gJyR7bWFrZWZpbGV9Jy4iCisJCWV4aXQgMQorCWZpCisJbG9jYWwgY3VycmVu dF9zaGEyNTY9JChncmVwICJeJHtQS0d9X1NFUklFU19TSEEyNTZbCSBdKjo9ICIgIiR7bWFrZWZp bGV9IiB8Y3V0IC1mMiAtZD18eGFyZ3MpCisJaWYgWyAiJHtjdXJyZW50X3NoYTI1Nn0iICE9ICIk e3NoYTI1Nn0iIF07IHRoZW4KKwkJc2VkIC1pICJzL15cKFw8JHtQS0d9X1NFUklFU19TSEEyNTZb CV0qOj1cKSAqW2EtZjAtOV0qXCQvXDEgJHtzaGEyNTZ9LyIgIiR7bWFrZWZpbGV9IgorCQlpZiAh IGdyZXAgLXEgIiR7c2hhMjU2fVwkIiAiJHttYWtlZmlsZX0iOyB0aGVuCisJCQllY2hvICJXYXJu aW5nOiAke1BLR31fU0VSSUVTX1NIQTI1NiBpcyBtaXNzaW5nIGZyb20gJyR7bWFrZWZpbGV9Jy4i CisJCWVsc2UKKwkJCWVjaG8gIk5ldyBwYXRjaCBzZXJpZXMgY2hlY2tzdW0gZm9yICcke3BrZ19s YWJlbH0nOiAke3NoYTI1Nn0gaW4gJyR7bWFrZWZpbGV9Jy4iCisJCWZpCisJZmkKIH0KIAogaWYg WyAhIC1MIC5wdHhkaXN0L3BhdGNoZXMgXTsgdGhlbgpAQCAtMjIsMTAgKzQ0LDggQEAgdGFnPWJh c2UKIAogaWYgZ3JlcCAtcSAiJFBUWF9QQVRDSEVTX0hFQURFUiIgLnB0eGRpc3Qvc2VyaWVzOyB0 aGVuCiAJZWNobyAiRm91bmQgc2VyaWVzIGZpbGUgZ2VuZXJhdGVkIGJ5IGdpdC1wdHgtcGF0Y2hl cy4iCi0JbGluZXM9JCh3YyAtbCA8IC5wdHhkaXN0L3NlcmllcykKLQlsaW5lcz0kW2xpbmVzLTFd Ci0JbWFnaWM9JChoZWFkIC1uJGxpbmVzIC5wdHhkaXN0L3NlcmllcyB8IF9tZDVzdW0pCi0JaWYg Z3JlcCAtcSAiXiRtYWdpYyIgLnB0eGRpc3Qvc2VyaWVzOyB0aGVuCisJbWFnaWM9JChnaXQgcmV2 LXBhcnNlIEhFQUQpCisJaWYgZ3JlcCAtcSAiXiMgJG1hZ2ljIiAucHR4ZGlzdC9zZXJpZXM7IHRo ZW4KIAkJcmVtb3ZlX29sZD15ZXMKIAllbHNlCiAJCWVjaG8gIldhcm5pbmc6IC5wdHhkaXN0L3Nl cmllcyB3YXMgbW9kaWZpZWQuIgpAQCAtMTMyLDcgKzE1Miw5IEBAIGNhdCAucHR4ZGlzdC9zZXJp ZXMuMCA+IC5wdHhkaXN0L3NlcmllcwogZ2l0IGZvcm1hdC1wYXRjaCAtTSAtTiAkR0lUX0VYVFJB X0FSR1MgJHt0YWdvcHR9IC1vIC5wdHhkaXN0L3BhdGNoZXMvICR7cmFuZ2V9IHwgc2VkIC1lICdz LF4ucHR4ZGlzdC9wYXRjaGVzLywsJyA+IC5wdHhkaXN0L3Nlcmllcy5hdXRvCiBjYXQgLnB0eGRp c3Qvc2VyaWVzLmF1dG8gPj4gLnB0eGRpc3Qvc2VyaWVzCiBjYXQgLnB0eGRpc3Qvc2VyaWVzLjEg Pj4gLnB0eGRpc3Qvc2VyaWVzCi1jYXQgLnB0eGRpc3Qvc2VyaWVzIHwgX21kNXN1bSA+PiAucHR4 ZGlzdC9zZXJpZXMKK2NhdCAucHR4ZGlzdC9zZXJpZXMgfCBfZ2l0c2hhMXN1bSA+PiAucHR4ZGlz dC9zZXJpZXMKKwordXBkYXRlX3Nlcmllc19zaGEyNTYKIAogIyBUaGUgZmlyc3QgbGluZSBvZiB0 aGUgcGF0Y2ggaXMgJ0Zyb20gPHNvbWUtZ2l0LWhhc2g+IC4uLicKICMgcmVtb3ZlIGl0IHRvIGF2 b2lkIHVubmVjZXNzYXJ5IGNoYW5nZXMgaW4gdGhlIHBhdGNoIGZpbGVzLgpkaWZmIC0tZ2l0IGEv c2NyaXB0cy9saWIvcHR4ZF9tYWtlX3dvcmxkX3BhdGNoaW4uc2ggYi9zY3JpcHRzL2xpYi9wdHhk X21ha2Vfd29ybGRfcGF0Y2hpbi5zaAppbmRleCBlNTdkYTY0Li5jYjMxMjQ0IDEwMDY0NAotLS0g YS9zY3JpcHRzL2xpYi9wdHhkX21ha2Vfd29ybGRfcGF0Y2hpbi5zaAorKysgYi9zY3JpcHRzL2xp Yi9wdHhkX21ha2Vfd29ybGRfcGF0Y2hpbi5zaApAQCAtMjIxLDYgKzIyMSw4IEBAIHB0eGRfbWFr ZV93b3JsZF9wYXRjaGluX2FwcGx5KCkKIAlwa2dfcGF0Y2hfc2VyaWVzIFwKIAlwa2dfcGF0Y2hf dG9vbAogCisgICAgbG9jYWwgUEtHPSIkKHB0eGRfbmFtZV90b19OQU1FICIke3BrZ19sYWJlbH0i KSIKKwogICAgIGlmIFtbICIke3BrZ191cmx9IiA9fiBeZmlsZTovLyBdXTsgdGhlbgogCWxvY2Fs IHVybD0iJChwdHhkX2ZpbGVfdXJsX3BhdGggIiR7cGtnX3VybH0iKSIKIAkjIGxvY2FsIGRpcmVj dG9yaWVzIGFyZSBub3QgaW50ZW5kZWQgdG8gYmUgcGF0Y2hlZApAQCAtMjU1LDYgKzI1NywxNiBA QCBwdHhkX21ha2Vfd29ybGRfcGF0Y2hpbl9hcHBseSgpCiAgICAgbWtkaXIgIiR7cGtnX3BhdGNo aW5fZGlyfS8ucHR4ZGlzdCIgJiYKIAogICAgICMKKyAgICAjIGNyZWF0ZSBhICIucHR4ZGlzdC9y dWxlLm1ha2UiIGxpbmsgcG9pbnRpbmcgdG8gdGhlIHBhY2thZ2VzIHJ1bGUgbWFrZWZpbGUKKyAg ICAjCisgICAgbG4gLXMgIiR7cGtnX21ha2VmaWxlfSIgIiR7cGtnX3BhdGNoaW5fZGlyfS8ucHR4 ZGlzdC9ydWxlLm1ha2UiICYmCisgICAgKAorCWNhdCA8PC1FT0YKKwlQS0c9JHtQS0d9CisJcGtn X2xhYmVsPSR7cGtnX2xhYmVsfQorCUVPRgorICAgICkgPiAiJHtwa2dfcGF0Y2hpbl9kaXJ9Ly5w dHhkaXN0L3J1bGUuZW52IiAmJgorICAgICMKICAgICAjIGNyZWF0ZSBhICIucHR4ZGlzdC9wYXRj aGVzIiBsaW5rIHBvaW50aW5nIHRvIHRoZSBkaXJlY3RvcnkKICAgICAjIGNvbnRhaW5pbmcgdGhl IHBhdGNoZXMKICAgICAjCkBAIC0zNDEsNiArMzUzLDcgQEAgcHR4ZF9tYWtlX3dvcmxkX3BhdGNo aW5fYXBwbHkoKQogICAgIGVjaG8KICAgICBlY2hvICJwa2dfcGF0Y2hfZGlyOiAgICAgJyQocHR4 ZF9wcmludF9wYXRoICIke3BrZ19wYXRjaF9kaXI6LTxub25lPn0iKSciCiAgICAgZWNobyAicGtn X3BhdGNoX3NlcmllczogICckKHB0eGRfcHJpbnRfcGF0aCAiJHtwa2dfcGF0Y2hfc2VyaWVzOi08 bm9uZT59IiknIgorICAgIGVjaG8gInBrZ19tYWtlZmlsZTogICAgJyQocHR4ZF9wcmludF9wYXRo ICIke3BrZ19tYWtlZmlsZTotPG5vbmU+fSIpJyIKICAgICBlY2hvCiAKICAgICAjIGFwcGx5IHBh dGNoZXMgaWYgc2VyaWVzIGZpbGUgaXMgYXZhaWxhYmxlCkBAIC00MzcsNiArNDUwLDcgQEAgZXhw b3J0IC1mIHB0eGRfbWFrZV93b3JsZF9hdXRvZ2VuCiAjIHBrZ19wYXRjaGluX2Rpcgl3aGVyZSB0 byBhcHBseSB0aGUgcGF0Y2hlcwogIyBwa2dfcGF0Y2hfZGlyCQlwYXRoIHRvIGRpciB0aGF0IGNv bnRhaW5zIHRoZSBwYXRjaGVzCiAjCQkJZW1wdHkgaWYgbm8gcGF0Y2hlcyBzaG91bGQgYmUgYXBw bGllZAorIyBwa2dfbWFrZWZpbGUJCXRoZSBwYWNrYWdlJ3MgcnVsZSBtYWtlZmlsZQogIwogcHR4 ZF9tYWtlX3dvcmxkX3BhdGNoaW5faW5pdCgpCiB7CkBAIC00NjMsNiArNDc3LDE0IEBAIHB0eGRf bWFrZV93b3JsZF9wYXRjaGluX2luaXQoKQogCXJldHVybgogICAgIGZpCiAgICAgcGtnX3BhdGNo X2Rpcj0iJHtwdHhkX3JlcGx5fSIKKworICAgICMKKyAgICAjIGZpbmQgcnVsZXMgbWFrZQorICAg ICMKKyAgICBpZiAhIHB0eGRfZmluZF9wa2dfbWFrZWZpbGUgIiR7cGtnX2xhYmVsfSIgOyB0aGVu CisJcmV0dXJuCisgICAgZmkKKyAgICBwa2dfbWFrZWZpbGU9IiQocmVhZGxpbmsgLWYgIiR7cHR4 ZF9yZXBseX0iKSIKIH0KIGV4cG9ydCAtZiBwdHhkX21ha2Vfd29ybGRfcGF0Y2hpbl9pbml0CiAK QEAgLTQ3MSw4ICs0OTMsMTIgQEAgcHR4ZF9tYWtlX3dvcmxkX3BhdGNoaW4oKQogICAgIHB0eGRf bWFrZV93b3JsZF9wYXRjaGluX2luaXQgfHwgcmV0dXJuCiAKICAgICBpZiBbIC1uICIke3BrZ19w YXRjaF9kaXJ9IiBdOyB0aGVuICgKKwlsb2NhbCBsaWJmYWtldGltZT0iJHtQVFhESVNUX1RPUERJ Un0vc2NyaXB0cy9saWJmYWtldGltZS9saWJmYWtldGltZS5zby4xIgogCWNkICIke3BrZ19wYXRj aGluX2Rpcn0iICYmCi0JcHR4ZF9tYWtlX3dvcmxkX3BhdGNoaW5fYXBwbHkKKwkoIExEX1BSRUxP QUQ9IiR7bGliZmFrZXRpbWV9IiBcCisJICBGQUtFVElNRT0iMjAwMi0wMS0xNSAxMzozMDowMCIg XAorCSAgcHR4ZF9tYWtlX3dvcmxkX3BhdGNoaW5fYXBwbHkKKwkpCiAgICAgICkgZWxzZQogCWVj aG8gLWUgInBhdGNoaW46IG5vIHBhdGNoZXMgZm91bmQiCiAgICAgZmkKLS0gCjEuOS4xCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcHR4ZGlzdCBtYWls aW5nIGxpc3QKcHR4ZGlzdEBwZW5ndXRyb25peC5kZQ== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-lj1-f196.google.com ([209.85.208.196]) by metis.ext.pengutronix.de with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1fnU7j-0005By-0g for ptxdist@pengutronix.de; Wed, 08 Aug 2018 21:27:59 +0200 Received: by mail-lj1-f196.google.com with SMTP id s12-v6so2633305ljj.0 for ; Wed, 08 Aug 2018 12:27:58 -0700 (PDT) MIME-Version: 1.0 References: <1533311096-14315-1-git-send-email-jon@ringle.org> <20180808095028.5icy6qduj53e6av3@pengutronix.de> In-Reply-To: From: Jon Ringle Date: Wed, 8 Aug 2018 15:27:50 -0400 Message-ID: Subject: Re: [ptxdist] [PATCH v4 1/2] Add libfaketime as a core component of ptxdist for patchin support List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ptxdist-bounces@pengutronix.de Sender: "ptxdist" To: ptxdist@pengutronix.de Cc: ptxdist@pengutronix.com, Jon Ringle T24gV2VkLCBBdWcgOCwgMjAxOCBhdCA2OjU4IEFNIEpvbiBSaW5nbGUgPGpvbkByaW5nbGUub3Jn PiB3cm90ZToKPiBPbiBXZWQsIEF1ZyA4LCAyMDE4IGF0IDU6NTAgQU0gUm9sYW5kIEhpZWJlciA8 ci5oaWViZXJAcGVuZ3V0cm9uaXguZGU+IHdyb3RlOgo+PiBPbiBGcmksIEF1ZyAwMywgMjAxOCBh dCAxMTo0NDo1NUFNIC0wNDAwLCBqb25AcmluZ2xlLm9yZyB3cm90ZToKPj4gPiBGcm9tOiBKb24g UmluZ2xlIDxqcmluZ2xlQGdyaWRwb2ludC5jb20+Cj4+ID4KPj4gPiBsaWJmYWtldGltZSB3aWxs IGJlIHVzZWQgZHVyaW5nIHBhdGNoaW4gc28gdGhhdCBjb21taXR0ZXIgdGltZXN0YW1wcyBhbHdh eXMKPj4gPiBoYXZlIGEgZml4ZWQgdmFsdWUgYW5kIHRoZXJlZm9yZSBtYWtpbmcgdGhlICR7UEtH fV9TRVJJRVNfU0hBMjU2IHZhbHVlCj4+ID4gcmVwZWF0YWJsZQo+PiA+Cj4+ID4gVGhlIG1pbmlt YWwgc2V0IG9mIHNvdXJjZSBmaWxlcyB3YXMgcGlja2VkIG91dCBvZiBsaWJmYWtldGltZS0wLjku Nwo+PiA+Cj4+ID4gU2lnbmVkLW9mZi1ieTogSm9uIFJpbmdsZSA8anJpbmdsZUBncmlkcG9pbnQu Y29tPgo+PiA+IC0tLQo+PiA+ICBNYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxNCArLQo+PiA+ICBzY3JpcHRzL2xpYmZha2V0aW1lL01ha2VmaWxlICAgICAgICAgIHwg IDExOCArKwo+PiA+ICBzY3JpcHRzL2xpYmZha2V0aW1lL2Zha2V0aW1lLmMgICAgICAgIHwgIDM4 NSArKysrKysKPj4gPiAgc2NyaXB0cy9saWJmYWtldGltZS9mYWtldGltZV9jb21tb24uaCB8ICAg NjEgKwo+PiA+ICBzY3JpcHRzL2xpYmZha2V0aW1lL2xpYmZha2V0aW1lLmMgICAgIHwgMjQxMCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gPiAgc2NyaXB0cy9saWJmYWtldGlt ZS9saWJmYWtldGltZS5tYXAgICB8ICAgMTAgKwo+PiA+ICBzY3JpcHRzL2xpYmZha2V0aW1lL3Rp bWVfb3BzLmggICAgICAgIHwgIDEwNCArKwo+Pgo+PiBVaC4gRG9lcyBpdCByZWFsbHkgbWFrZSBt b3JlIHNlbnNlIHRvIHZlbmRvciBsaWJmYWtldGltZSBpbnN0ZWFkIG9mCj4+IHVzaW5nIHRoZSBw YWNrYWdlIGZyb20gdGhlIGhvc3Qgc3lzdGVtLCBsaWtlIHdlIGRvIGl0IHdpdGggcHl0aG9uLCBi YXNoLAo+PiBldGMuPwo+Cj4KPiBUaGUgcmVhc29uIHRoYXQgdGhpcyBpcyBuZWVkZWQgYXMgYSBj b3JlIGNvbXBvbmVudCBvZiBwdHhkaXN0IHJhdGhlciB0aGFuIGp1c3QgYmVpbmcgYnVpbHQgYXMg YSBob3N0IHBhY2thZ2UgaXMgdGhhdCBwYXRjaGluIHN0ZXAgdXNlcyBsaWJmYWtldGltZSBhbmQg dGhlcmVmb3JlIGlzIHBvdGVudGlhbGx5IG5lZWRlZCBiZWZvcmUgZXZlbiBhIHNpbmdsZSBwYWNr YWdlIGlzIGV2ZXIgYnVpbHQuIFdoYXQgd291bGQgaGFwcGVuIGlmIHdlIGp1c3QgdXNlZCBhIGhv c3QtbGliZmFrZXRpbWUgcGFja2FnZSBhbmQgc29tZW9uZSBhZGRzIGEgcGF0Y2ggc2VyaWVzIGZv ciBsaWJmYWtldGltZT8gKEluIGZhY3QsIEkgYWN0dWFsbHkgZG8gaGF2ZSBzdWNoIGEgcGF0Y2gg c2VyaWVzIGxvY2FsbHkgdGhhdCBJIHdpbGwgYmUgc2VuZGluZyB0byB0aGUgcHR4ZGlzdCBtbCBs YXRlcikuIFRoaXMgaXMgYSBjaGlja2VuIHZzIGVnZyBwcm9ibGVtIHRoYXQgaXMgcmVzb2x2ZWQg YnkgbWFraW5nIGxpYmZha2V0aW1lIGFuIGludGVncmFsIHBhcnQgb2YgcHR4ZGlzdC4gVGhlIHB0 eGRpc3QgdXNhZ2Ugb2YgbGliZmFrZXRpbWUgaW4gdGhlIHBhdGNoaW4gc3RlcCBkb2VzIG5vdCBu ZWVkIGEgcGF0Y2hlZCB2ZXJzaW9uIG9mIGxpYmZha2V0aW1lIChpdCBqdXN0IG5lZWRzIHRvIHNl dCBhbiBhYnNvbHV0ZSBkYXRlIHRpbWUgYW5kIHRoZSBsaWJmYWtldGltZSBjb2RlIEkgaGF2ZSBo ZXJlIGRvZXMgdGhhdCkuIEl0IGRvZXNu4oCZdCBuZWVkIG5ldyBjb25maWd1cmF0aW9uIGZlYXR1 cmVzIG9yIGJ1ZyBmaXhlcyBmb3IgZml4aW5nIHRoZSB0aW1lIG1hbmlwdWxhdGlvbiB2aWEgc29t ZSBzcGVjaWZpYyBzeXN0ZW0gY2FsbC4KClJvbGFuZCwgSSB0aGluayBJIHNlZSBub3cgd2hhdCB5 b3UgYXJlIGdldHRpbmcgYXQuIEhvd2V2ZXIsIGRvIHlvdQp0aGluayBpdCBpcyBvayB0byBhc2sg ZXZlcnlvbmUgdG8gaW5zdGFsbCBsaWJmYWtldGltZSBvbiB0aGVpciBzeXN0ZW0KKGBzdWRvIGFw dC1nZXQgaW5zdGFsbCBsaWJmYWtldGltZWApIGJlZm9yZSB0aGV5IGFyZSBhYmxlIHRvIGNvbmZp Z3VyZQp0aGUgbmV4dCB2ZXJzaW9uIG9mIHB0eGRpc3Q/IE9uIHVidW50dSAxNC4wNCB0aGlzIHBh Y2thZ2UgaW5zdGFsbHMgdGhlCmZvbGxvd2luZyBmaWxlcyBmb3IgbWU6CgovdXNyL2xpYi94ODZf NjQtbGludXgtZ251L2Zha2V0aW1lL2xpYmZha2V0aW1lLnNvLjEKL3Vzci9saWIveDg2XzY0LWxp bnV4LWdudS9mYWtldGltZS9saWJmYWtldGltZU1ULnNvLjEKL3Vzci9zaGFyZS9kb2MvbGliZmFr ZXRpbWUvUkVBRE1FLmd6Ci91c3Ivc2hhcmUvZG9jL2xpYmZha2V0aW1lL2NoYW5nZWxvZy5EZWJp YW4uZ3oKL3Vzci9zaGFyZS9kb2MvbGliZmFrZXRpbWUvY29weXJpZ2h0CgpUaGVyZSBpcyBub3Ro aW5nIGhlcmUgdGhhdCBJIHNlZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHByb3Blcmx5IHNldCB0aGUK Y29ycmVjdCBsb2NhdGlvbiBvZiB0aGUgbGliZmFrZXRpbWUuc28uMSB3aGVuIHNldHRpbmcgTERf UFJFTE9BRAplbnZpcm9ubWVudC4gSXQgY291bGQgYmUgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24g b24gc29tZSBvdGhlcgpkaXN0cmlidXRpb24uClRoZSBsaWJmYWtldGltZSBjb2RlIGlzIGZhaXJs eSBzbWFsbCBhbmQgbWFraW5nIGl0IGEgcGFydCBvZiBwdHhkaXN0Cmxpa2Uga2NvbmZpZyBpcyBq dXN0IG1ha2VzIHNlbnNlIHRvIG1lIGdpdmVuIHRoZSB1c2UgY2FzZSB3aGVyZSBpdCBpcwpuZWVk ZWQKCi1Kb24KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CnB0eGRpc3QgbWFpbGluZyBsaXN0CnB0eGRpc3RAcGVuZ3V0cm9uaXguZGU= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1fuKMF-0001Dc-HI for ptxdist@pengutronix.de; Mon, 27 Aug 2018 18:27:15 +0200 Received: from mol by ptx.hi.pengutronix.de with local (Exim 4.89) (envelope-from ) id 1fuKMF-0001D0-8c for ptxdist@pengutronix.de; Mon, 27 Aug 2018 18:27:15 +0200 Date: Mon, 27 Aug 2018 18:27:15 +0200 From: Michael Olbrich Message-ID: <20180827162715.yujjrkq5gews4q4e@pengutronix.de> References: <1533311096-14315-1-git-send-email-jon@ringle.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1533311096-14315-1-git-send-email-jon@ringle.org> Subject: Re: [ptxdist] [PATCH v4 1/2] Add libfaketime as a core component of ptxdist for patchin support List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ptxdist-bounces@pengutronix.de Sender: "ptxdist" To: ptxdist@pengutronix.de T24gRnJpLCBBdWcgMDMsIDIwMTggYXQgMTE6NDQ6NTVBTSAtMDQwMCwgam9uQHJpbmdsZS5vcmcg d3JvdGU6Cj4gRnJvbTogSm9uIFJpbmdsZSA8anJpbmdsZUBncmlkcG9pbnQuY29tPgo+IAo+IGxp YmZha2V0aW1lIHdpbGwgYmUgdXNlZCBkdXJpbmcgcGF0Y2hpbiBzbyB0aGF0IGNvbW1pdHRlciB0 aW1lc3RhbXBzIGFsd2F5cwo+IGhhdmUgYSBmaXhlZCB2YWx1ZSBhbmQgdGhlcmVmb3JlIG1ha2lu ZyB0aGUgJHtQS0d9X1NFUklFU19TSEEyNTYgdmFsdWUKPiByZXBlYXRhYmxlCj4gCj4gVGhlIG1p bmltYWwgc2V0IG9mIHNvdXJjZSBmaWxlcyB3YXMgcGlja2VkIG91dCBvZiBsaWJmYWtldGltZS0w LjkuNwoKSSB0aGluayBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcHJvdmlkZSB0aGUgY29ycmVj dCB0aW1lc3RhbXBzIHdpdGgKR0lUX0FVVEhPUl9EQVRFIGFuZC9vciBHSVRfQ09NTUlUVEVSX0RB VEUgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4KCk1pY2hhZWwKCj4gCj4gU2lnbmVkLW9mZi1ieTog Sm9uIFJpbmdsZSA8anJpbmdsZUBncmlkcG9pbnQuY29tPgo+IC0tLQo+ICBNYWtlZmlsZS5pbiAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArLQo+ICBzY3JpcHRzL2xpYmZha2V0aW1l L01ha2VmaWxlICAgICAgICAgIHwgIDExOCArKwo+ICBzY3JpcHRzL2xpYmZha2V0aW1lL2Zha2V0 aW1lLmMgICAgICAgIHwgIDM4NSArKysrKysKPiAgc2NyaXB0cy9saWJmYWtldGltZS9mYWtldGlt ZV9jb21tb24uaCB8ICAgNjEgKwo+ICBzY3JpcHRzL2xpYmZha2V0aW1lL2xpYmZha2V0aW1lLmMg ICAgIHwgMjQxMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgc2NyaXB0cy9s aWJmYWtldGltZS9saWJmYWtldGltZS5tYXAgICB8ICAgMTAgKwo+ICBzY3JpcHRzL2xpYmZha2V0 aW1lL3RpbWVfb3BzLmggICAgICAgIHwgIDEwNCArKwo+ICA3IGZpbGVzIGNoYW5nZWQsIDMxMDEg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgc2NyaXB0 cy9saWJmYWtldGltZS9NYWtlZmlsZQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgc2NyaXB0cy9saWJm YWtldGltZS9mYWtldGltZS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzY3JpcHRzL2xpYmZha2V0 aW1lL2Zha2V0aW1lX2NvbW1vbi5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzY3JpcHRzL2xpYmZh a2V0aW1lL2xpYmZha2V0aW1lLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNjcmlwdHMvbGliZmFr ZXRpbWUvbGliZmFrZXRpbWUubWFwCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzY3JpcHRzL2xpYmZh a2V0aW1lL3RpbWVfb3BzLmgKPiAKPiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmls ZS5pbgo+IGluZGV4IDQwYzY3NmMuLjZlMDgzNzcgMTAwNjQ0Cj4gLS0tIGEvTWFrZWZpbGUuaW4K PiArKysgYi9NYWtlZmlsZS5pbgo+IEBAIC0yMiw3ICsyMiw3IEBAIGV4cG9ydCBTSEVMTAo+ICAK PiAgQEJVSUxEX05DT05GX1RSVUVATkNPTkYgPSBuY29uZgo+ICAKPiAtYWxsOiBrY29uZmlnIGVu dmlyb25tZW50Cj4gK2FsbDoga2NvbmZpZyBsaWJmYWtldGltZSBlbnZpcm9ubWVudAo+ICAJQHRv dWNoIC5kb25lCj4gIAo+ICBrY29uZmlnOgo+IEBAIC00MSw2ICs0MSwxNyBAQCBrY29uZmlnOgo+ ICAJCWNvbmYgbWNvbmYgJChOQ09ORikKPiAgCUBlY2hvICJkb25lLiIKPiAgCj4gK2xpYmZha2V0 aW1lOgo+ICsJQGVjaG8gImJ1aWxkaW5nIGxpYmZha2V0aW1lIC4uLiIKPiArCUBDQz0iJChDQyki IFwKPiArCUNYWD0iJChDWFgpIiBcCj4gKwlDRkxBR1M9IiQoQ0ZMQUdTKSIgXAo+ICsJQ1hYRkxB R1M9IiQoQ1hYRkxBR1MpIiBcCj4gKwlDUFBGTEFHUz0iJChDUFBGTEFHUykiIFwKPiArCUxERkxB R1M9IiQoTERGTEFHUykiIFwKPiArCSQoTUFLRSkgLUMgIiQoYWJzX3NyY2Rpcikvc2NyaXB0cy9s aWJmYWtldGltZSIgYWxsCj4gKwlAZWNobyAiZG9uZS4iCj4gKwo+ICBlbnZpcm9ubWVudDoKPiAg CUBlY2hvIC1uICJwcmVwYXJpbmcgUFRYZGlzdCBlbnZpcm9ubWVudCAuLi4iCj4gIAlAbG4gLXNm IEBBV0tAICIkKGFic19zcmNkaXIpL2Jpbi9hd2siCj4gQEAgLTg5LDYgKzEwMCw3IEBAIGNsZWFu Ogo+ICAJQHJtIC1mIC5kb25lCj4gIAlAZmluZCAiJChhYnNfc3JjZGlyKS9iaW4iIC10eXBlIGwg LXByaW50MCB8IHhhcmdzIC0wIHJtIC1mCj4gIAlAJChNQUtFKSAtQyAiJChhYnNfc3JjZGlyKS9z Y3JpcHRzL2tjb25maWciIGNsZWFuCj4gKwlAJChNQUtFKSAtQyAiJChhYnNfc3JjZGlyKS9zY3Jp cHRzL2xpYmZha2V0aW1lIiBjbGVhbgo+ICAKPiAgZGlydHktY2hlY2s6Cj4gIAlAY2FzZSAiJCh2 ZXJzaW9uKSIgaW4gXAo+IGRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYmZha2V0aW1lL01ha2VmaWxl IGIvc2NyaXB0cy9saWJmYWtldGltZS9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uYTU1N2MzOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9zY3JpcHRzL2xp YmZha2V0aW1lL01ha2VmaWxlCj4gQEAgLTAsMCArMSwxMTggQEAKPiArIwo+ICsjIE5vdGVzOgo+ ICsjCj4gKyMgICAqIENvbXBpbGF0aW9uIERlZmluZXM6Cj4gKyMKPiArIyAgICAgRkFLRV9TVEFU Cj4gKyMgICAgICAgICAtIEVuYWJsZXMgdGltZSBmYWtpbmcgYWxzbyBmb3IgZmlsZXMnIHRpbWVz dGFtcHMuCj4gKyMKPiArIyAgICAgTk9fQVRGSUxFCj4gKyMgICAgICAgICAtIERpc2FibGVzIHN1 cHBvcnQgZm9yIHRoZSBmc3RhdGF0KCkgZ3JvdXAgb2YgZnVuY3Rpb25zCj4gKyMKPiArIyAgICAg UFRIUkVBRAo+ICsjICAgICAgICAgLSBEZWZpbmUgdGhpcyB0byBlbmFibGUgbXVsdGl0aHJlYWRp bmcgc3VwcG9ydC4KPiArIwo+ICsjICAgICBQVEhSRUFEX1NJTkdMRVRIUkVBREVEX1RJTUUKPiAr IyAgICAgICAgIC0gRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdG8gc2luZ2xlLXRocmVhZCB0aW1l KCkgLi4uIHRoZXJlIEFSRQo+ICsjICAgICAgICAgICBwb3NzaWJpbGUgY2FjaGluZyBzaWRlLWVm ZmVjdHMgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50Cj4gKyMgICAgICAgICAgIHdpdGhv dXQgdGhpcywgYnV0IHRoZSBwZXJmb3JtYW5jZSBpbXBhY3QgbWF5IHJlcXVpcmUgeW91IHRvCj4g KyMgICAgICAgICAgIHRyeSBpdCB1bnN5bmNocm9uaXplZC4KPiArIwo+ICsjICAgICBGQUtFX0lO VEVSTkFMX0NBTExTCj4gKyMgICAgICAgICAtIEFsc28gaW50ZXJjZXB0IGxpYmMgaW50ZXJuYWwg X19mdW5jdGlvbnMsIGUuZy4gbm90IGp1c3QgdGltZSgpLAo+ICsjICAgICAgICAgICBidXQgYWxz byBfX3RpbWUoKS4gRW5oYW5jZXMgY29tcGF0aWJpbGl0eSB3aXRoIGFwcGxpY2F0aW9ucwo+ICsj ICAgICAgICAgICB0aGF0IG1ha2UgdXNlIG9mIGxvdy1sZXZlbCBzeXN0ZW0gY2FsbHMsIHN1Y2gg YXMgSmF2YSBWaXJ0dWFsCj4gKyMgICAgICAgICAgIE1hY2hpbmVzLgo+ICsjCj4gKyMgCSAgRkFL RV9TTEVFUAo+ICsjIAkgICAgICAtIEFsc28gaW50ZXJjZXB0IHNsZWVwKCksIG5hbm9zbGVlcCgp LCB1c2xlZXAoKSwgYWxhcm0oKSwgW3BdcG9sbCgpCj4gKyMKPiArIwkgIEZBS0VfVElNRVJTCj4g KyMJICAgICAgLSBBbHNvIGludGVyY2VwdCB0aW1lcl9zZXR0aW1lKCkgYW5kIHRpbWVyX2dldHRp bWUoKQo+ICsjCj4gKyMJICBNVUxUSV9BUkNICj4gKyMJICAJICAtIElmIE1VTFRJX0FSQ0ggaXMg c2V0LCB0aGUgZmFrZXRpbWUgd3JhcHBlciBwcm9ncmFtIHdpbGwgcHV0IGEgbGl0ZXJhbAo+ICsj CSAgCSAgICAkTElCIGludG8gdGhlIExEX1BSRUxPQUQgZW52aXJvbm1lbnQgdmFyaWFibGUgaXQg Y3JlYXRlcywgd2hpY2ggbWFrZXMKPiArIwkgIAkgICAgbGQgYXV0b21hdGljYWxseSBjaG9vc2Ug dGhlIGNvcnJlY3QgbGlicmFyeSB2ZXJzaW9uIHRvIHVzZSBmb3IgdGhlCj4gKyMJICAJICAgIHRh cmdldCBiaW5hcnkuIFVzZSBmb3IgTGludXggcGxhdGZvcm1zIHdpdGggTXVsdGktQXJjaCBzdXBw b3J0IG9ubHkhCj4gKyMKPiArIyAgICogQ29tcGlsYXRpb24gYWRkaXRpb246IHNlY29uZCBsaWJN VCB0YXJnZXQgYWRkZWQgZm9yIGJ1aWxkaW5nIHRoZSBwdGhyZWFkLQo+ICsjICAgICBlbmFibGVk IGxpYnJhcnkgYXMgYSBzZXBhcmF0ZSBsaWJyYXJ5Cj4gKyMKPiArIyAgICogQ29tcGlsYXRpb24g c3dpdGNoIGNoYW5nZTogcHJldmlvdXMgdmVyc2lvbnMgY29tcGlsZWQgdXNpbmcgJy1ub3N0YXJ0 ZmlsZXMnCj4gKyMgICAgIFRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlIHNpbmNlIHRoZXJlIGlz IGEgJ3N0YXJ0dXAnIGNvbnN0cnVjdG9yIGZvciB0aGUgbGlicmFyeQo+ICsjICAgICB3aGljaCBp cyB1c2VkIHRvIGFjdGl2YXRlIHRoZSBzdGFydC1hdCB0aW1lcyB3aGVuIHNwZWNpZmllZC4gVGhp cyBhbHNvIGluaXRpYWxpemVzCj4gKyMgICAgIHRoZSBkeW5hbWljIGRpc2FibGluZyBvZiB0aGUg RkFLRV9TVEFUIGNhbGxzLgo+ICsjCj4gKyMgQnkgZGVmYXVsdCwgbGliZmFrZXRpbWUgd2lsbCBi ZSBjb21waWxlZCBmb3IgeW91ciBzeXN0ZW0ncyBkZWZhdWx0IGFyY2hpdGVjdHVyZS4KPiArIyBU byBidWlsZCAzMi1iaXQgbGlicmFyaWVzIGFuZCBiaW5hcmllcywgYWRkIC1tMzIgdG8gQ0ZMQUdT IGFuZCBMREZMQUdTLgo+ICsjCj4gKyMgQ2hhbmdlIFBSRUZJWCB0byB3aGVyZSB5b3Ugd2FudCBs aWJmYWtldGltZSAobGlicmFyaWVzIGFuZCB3cmFwcGVyIGJpbmFyeSkgaW5zdGFsbGVkLgo+ICsj IExJQkRJUk5BTUUgaXMgcmVsYXRpdmUgdG8gUFJFRklYLiBUaGUgZGVmYXVsdCBpcyB0byBpbnN0 YWxsIGludG8gJFBSRUZJWC9saWIvZmFrZXRpbWUsCj4gKyMgYnV0IHlvdSBjYW4gc2V0IExJQkRJ Uk5BTUUgdG8sIGUuZy4sIC9saWI2NCBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIGl0IGVsc2V3aGVy ZS4KPiArIyBMSUJESVJOQU1FIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gc3VwcG9ydCBNdWx0aUxp YiBzeXN0ZW1zLiBQbGVhc2UgZG8gbm90IGNoYW5nZSB0aGUgCj4gKyMgZGVmYXVsdCB2YWx1ZSBv biBNdWx0aUFyY2ggc3lzdGVtcy4gCj4gKyMKPiArIyBGb3IgdGVzdGluZyBpbiB0aGUgY3VycmVu dCBkaXJlY3Rvcnkgd2l0aG91dCBpbnN0YWxsYXRpb24sIHRyeSBtYWtlIFBSRUZJWD0gTElCRElS TkFNRT0nLicKPiArCj4gK0NDID89IGdjYwo+ICtJTlNUQUxMID89IGluc3RhbGwKPiArCj4gK1BS RUZJWCA/PSAvdXNyL2xvY2FsCj4gK0xJQkRJUk5BTUUgPz0gL2xpYi9mYWtldGltZQo+ICtQTEFU Rk9STSA/PSQoc2hlbGwgdW5hbWUpCj4gKwo+ICtDRkxBR1MgKz0gLXN0ZD1nbnU5OSAtV2FsbCAt V2V4dHJhIC1XZXJyb3IgLVduby1ub25udWxsLWNvbXBhcmUgLURGQUtFX1NUQVQgLURGQUtFX1NM RUVQIC1ERkFLRV9USU1FUlMgLURGQUtFX0lOVEVSTkFMX0NBTExTIC1mUElDIC1EUFJFRklYPSci JyQoUFJFRklYKSciJyAtRExJQkRJUk5BTUU9JyInJChMSUJESVJOQU1FKSciJwo+ICtpZmVxICgk KFBMQVRGT1JNKSxTdW5PUykKPiArQ0ZMQUdTICs9IC1EX19FWFRFTlNJT05TX18gLURfWE9QRU5f U09VUkNFPTYwMAo+ICtlbmRpZgo+ICsKPiArTElCX0xERkxBR1MgKz0gLXNoYXJlZAo+ICsKPiAr TERGTEFHUyArPSAtbHB0aHJlYWQKPiAraWZuZXEgKCQoUExBVEZPUk0pLFN1bk9TKQo+ICtMREZM QUdTICs9IC1XbCwtLXZlcnNpb24tc2NyaXB0PWxpYmZha2V0aW1lLm1hcAo+ICtlbmRpZgo+ICsK PiArTERBREQgKz0gLWxkbCAtbG0gLWxydAo+ICtCSU5fTERGTEFHUyArPSAtbHJ0Cj4gKwo+ICtT UkMgPSBsaWJmYWtldGltZS5jCj4gK0xJQlNfT0JKID0gbGliZmFrZXRpbWUubyBsaWJmYWtldGlt ZU1ULm8KPiArQklOUyA9IGZha2V0aW1lCj4gKwo+ICtTT05BTUUgPSAxCj4gK0xJQlMgPSBsaWJm YWtldGltZS5zby4ke1NPTkFNRX0gbGliZmFrZXRpbWVNVC5zby4ke1NPTkFNRX0KPiArCj4gK2Fs bDogJHtMSUJTfSAke0JJTlN9Cj4gKwo+ICtsaWJmYWtldGltZU1ULm86IEVYVFJBX0ZMQUdTIDo9 IC1EUFRIUkVBRCAtRFBUSFJFQURfU0lOR0xFVEhSRUFERURfVElNRQo+ICsKPiArJHtMSUJTX09C Sn06IGxpYmZha2V0aW1lLmMKPiArCSR7Q0N9IC1vICRAIC1jICR7Q0ZMQUdTfSAke0VYVFJBX0ZM QUdTfSAkPAo+ICsKPiArJS5zby4ke1NPTkFNRX06ICUubyBsaWJmYWtldGltZS5tYXAKPiArCSR7 Q0N9IC1vICRAIC1XbCwtc29uYW1lLCRAICR7TERGTEFHU30gJHtMSUJfTERGTEFHU30gJDwgJHtM REFERH0KPiArCj4gKyR7QklOU306IGZha2V0aW1lLmMKPiArCSR7Q0N9IC1vICRAICR7Q0ZMQUdT fSAke0VYVFJBX0ZMQUdTfSAkPCAke0xERkxBR1N9ICR7QklOX0xERkxBR1N9Cj4gKwo+ICtjbGVh bjoKPiArCUBybSAtZiAke0xJQlNfT0JKfSAke0xJQlN9ICR7QklOU30KPiArCj4gK2Rpc3RjbGVh bjogY2xlYW4KPiArCUBlY2hvCj4gKwo+ICtpbnN0YWxsOiAke0xJQlN9ICR7QklOU30KPiArCUBl Y2hvCj4gKwlAZWNobyAiQ29weWluZyB0aGUgZmFrZXRpbWUgbGlicmFyaWVzIHRvICR7REVTVERJ Un0ke1BSRUZJWH0ke0xJQkRJUk5BTUV9IGFuZCB0aGUgZmFrZXRpbWUgd3JhcHBlciBzY3JpcHQg dG8gJHtERVNURElSfSR7UFJFRklYfS9iaW4gLi4uIgo+ICsJJChJTlNUQUxMKSAtZG0wNzU1ICIk e0RFU1RESVJ9JHtQUkVGSVh9JHtMSUJESVJOQU1FfS8iCj4gKwkkKElOU1RBTEwpIC1tMDY0NCAk e0xJQlN9ICIke0RFU1RESVJ9JHtQUkVGSVh9JHtMSUJESVJOQU1FfS8iCj4gKwkkKElOU1RBTEwp IC1EbTA3NTUgZmFrZXRpbWUgIiR7REVTVERJUn0ke1BSRUZJWH0vYmluL2Zha2V0aW1lIgo+ICsK PiArdW5pbnN0YWxsOgo+ICsJZm9yIGYgaW4gJHtMSUJTfTsgZG8gcm0gLWYgIiR7REVTVERJUn0k e1BSRUZJWH0ke0xJQkRJUk5BTUV9LyQkZiI7IGRvbmUKPiArCXJtZGlyICIke0RFU1RESVJ9JHtQ UkVGSVh9JHtMSUJESVJOQU1FfSIKPiArCXJtIC1mICIke0RFU1RESVJ9JHtQUkVGSVh9L2Jpbi9m YWtldGltZSIKPiArCj4gKy5QSE9OWTogYWxsIGNsZWFuIGRpc3RjbGVhbiBpbnN0YWxsIHVuaW5z dGFsbAo+IGRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYmZha2V0aW1lL2Zha2V0aW1lLmMgYi9zY3Jp cHRzL2xpYmZha2V0aW1lL2Zha2V0aW1lLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLjEzOGViYmQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvc2NyaXB0cy9saWJmYWtl dGltZS9mYWtldGltZS5jCj4gQEAgLTAsMCArMSwzODUgQEAKPiArLyoKPiArICogIGxpYmZha2V0 aW1lIHdyYXBwZXIgY29tbWFuZAo+ICsgKgo+ICsgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGli ZmFrZXRpbWUsIHZlcnNpb24gMC45LjcKPiArICoKPiArICogIGxpYmZha2V0aW1lIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKPiArICog IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgYXMg cHVibGlzaGVkIGJ5IHRoZQo+ICsgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ ICsgKiAgbGliZmFrZXRpbWUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKPiArICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgo+ICsgKiAgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvcgo+ICsgKiAgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIg YWxvbmcKPiArICogIHdpdGggdGhlIGxpYmZha2V0aW1lOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCj4gKyAqICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1 aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCj4gKyAqCj4gKyAqIENvbnZlcnRl ZCBmcm9tIHNoZWxsIHNjcmlwdCBieSBCYWxpbnQgUmVjemV5IHdpdGggdGhlIGZvbGxvd2luZyBj cmVkaXRzCj4gKyAqIGFuZCBjb21tZW50czoKPiArICoKPiArICogVGhhbmtzIHRvIERhbmllbCBL YWhuIEdpbGxtb3IgZm9yIGltcHJvdmVtZW50IHN1Z2dlc3Rpb25zLgo+ICsKPiArICogVGhpcyB3 cmFwcGVyIGV4cG9zZXMgb25seSBhIHNtYWxsIHN1YnNldCBvZiB0aGUgbGliZmFrZXRpbWUgZnVu Y3Rpb25hbGl0eS4KPiArICogUGxlYXNlIHNlZSBsaWJmYWtldGltZSdzIFJFQURNRSBmaWxlIGFu ZCBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsKPiArICogQWNrbm93bGVkZ21lbnQ6IFBh cnRzIG9mIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgd3JhcHBlciBoYXZlIGJlZW4KPiArICog aW5zcGlyZWQgYnkgTWF0dGhpYXMgVXJsaWNocycgZGF0ZWZ1ZGdlIDEuMTQuCj4gKwo+ICsgKiBD b21waWxlIHRpbWUgY29uZmlndXJhdGlvbjogUGF0aCB3aGVyZSB0aGUgbGliZmFrZXRpbWUgbGli cmFyaWVzIGNhbiBiZSBmb3VuZAo+ICsgKiBvbiBMaW51eC9VTklYCj4gKyAqCj4gKyAqLwo+ICsK PiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArI2luY2x1ZGUg PHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+ Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgPHRpbWUuaD4KPiArI2luY2x1ZGUg PGZjbnRsLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ICsjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgo+ICsjaW5jbHVkZSA8c3lzL21tYW4uaD4KPiAr I2luY2x1ZGUgPHNlbWFwaG9yZS5oPgo+ICsKPiArI2luY2x1ZGUgImZha2V0aW1lX2NvbW1vbi5o Igo+ICsKPiArY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiMC45LjciOwo+ICsKPiArI2lmZGVmIF9f QVBQTEVfXwo+ICtzdGF0aWMgY29uc3QgY2hhciAqZGF0ZV9jbWQgPSAiZ2RhdGUiOwo+ICsjZWxz ZQo+ICtzdGF0aWMgY29uc3QgY2hhciAqZGF0ZV9jbWQgPSAiZGF0ZSI7Cj4gKyNlbmRpZgo+ICsK PiArI2RlZmluZSBQQVRIX0JVRlNJWkUgNDA5Ngo+ICsKPiArLyogc2VtYXBob3JlIGFuZCBzaGFy ZWQgbWVtb3J5IG5hbWVzICovCj4gK2NoYXIgc2VtX25hbWVbUEFUSF9CVUZTSVpFXSA9IHswfSwg c2htX25hbWVbUEFUSF9CVUZTSVpFXSA9IHswfTsKPiArCj4gK3ZvaWQgdXNhZ2UoY29uc3QgY2hh ciAqbmFtZSkKPiArewo+ICsgIHByaW50ZigiXG4iCj4gKyAgIlVzYWdlOiAlcyBbc3dpdGNoZXNd IDx0aW1lc3RhbXA+IDxwcm9ncmFtIHdpdGggYXJndW1lbnRzPlxuIgo+ICsgICJcbiIKPiArICAi VGhpcyB3aWxsIHJ1biB0aGUgc3BlY2lmaWVkICdwcm9ncmFtJyB3aXRoIHRoZSBnaXZlbiAnYXJn dW1lbnRzJy5cbiIKPiArICAiVGhlIHByb2dyYW0gd2lsbCBiZSB0cmlja2VkIGludG8gc2VlaW5n IHRoZSBnaXZlbiAndGltZXN0YW1wJyBhcyBpdHMgc3RhcnRpbmcgZGF0ZSBhbmQgdGltZS5cbiIK PiArICAiVGhlIGNsb2NrIHdpbGwgY29udGludWUgdG8gcnVuIGZyb20gdGhpcyB0aW1lc3RhbXAu IFBsZWFzZSBzZWUgdGhlIG1hbnBhZ2UgKG1hbiBmYWtldGltZSlcbiIKPiArICAiZm9yIGFkdmFu Y2VkIG9wdGlvbnMsIHN1Y2ggYXMgc3RvcHBpbmcgdGhlIHdhbGwgY2xvY2sgYW5kIG1ha2UgaXQg cnVuIGZhc3RlciBvciBzbG93ZXIuXG4iCj4gKyAgIlxuIgo+ICsgICJUaGUgb3B0aW9uYWwgc3dp dGNoZXMgYXJlOlxuIgo+ICsgICIgIC1tICAgICAgICAgICAgICAgICAgOiBVc2UgdGhlIG11bHRp LXRocmVhZGVkIHZlcnNpb24gb2YgbGliZmFrZXRpbWVcbiIKPiArICAiICAtZiAgICAgICAgICAg ICAgICAgIDogVXNlIHRoZSBhZHZhbmNlZCB0aW1lc3RhbXAgc3BlY2lmaWNhdGlvbiBmb3JtYXQg KHNlZSBtYW5wYWdlKVxuIgo+ICsgICIgIC0tZXhjbHVkZS1tb25vdG9uaWMgOiBQcmV2ZW50IG1v bm90b25pYyBjbG9jayBmcm9tIGRyaWZ0aW5nIChub3QgdGhlIHJhdyBtb25vdG9uaWMgb25lKVxu Igo+ICsgICJcbiIKPiArICAiRXhhbXBsZXM6XG4iCj4gKyAgIiVzICdsYXN0IGZyaWRheSA1IHBt JyAvYmluL2RhdGVcbiIKPiArICAiJXMgJzIwMDgtMTItMjQgMDg6MTU6NDInIC9iaW4vZGF0ZVxu Igo+ICsgICIlcyAtZiAnKzIsNXkgeDEwLDAnIC9iaW4vYmFzaCAtYyAnZGF0ZTsgd2hpbGUgdHJ1 ZTsgZG8gZWNobyAkU0VDT05EUyA7IHNsZWVwIDEgOyBkb25lJ1xuIgo+ICsgICIlcyAtZiAnKzIs NXkgeDAsNTAnIC9iaW4vYmFzaCAtYyAnZGF0ZTsgd2hpbGUgdHJ1ZTsgZG8gZWNobyAkU0VDT05E UyA7IHNsZWVwIDEgOyBkb25lJ1xuIgo+ICsgICIlcyAtZiAnKzIsNXkgaTIsMCcgL2Jpbi9iYXNo IC1jICdkYXRlOyB3aGlsZSB0cnVlOyBkbyBkYXRlOyBzbGVlcCAxIDsgZG9uZSdcbiIKPiArICAi SW4gdGhpcyBzaW5nbGUgY2FzZSBhbGwgc3Bhd25lZCBwcm9jZXNzZXMgd2lsbCB1c2UgdGhlIHNh bWUgZ2xvYmFsIGNsb2NrXG4iCj4gKyAgIndpdGhvdXQgcmVzdGFydGluZyBpdCBhdCB0aGUgc3Rh cnQgb2YgZWFjaCBwcm9jZXNzLlxuXG4iCj4gKyAgIihQbGVhc2Ugbm90ZSB0aGF0IGl0IGRlcGVu ZHMgb24geW91ciBsb2NhbGUgc2V0dGluZ3Mgd2hldGhlciAuIG9yICwgaGFzIHRvIGJlIHVzZWQg Zm9yIGZyYWN0aW9ucylcbiIKPiArICAiXG4iLCBuYW1lLCBuYW1lLCBuYW1lLCBuYW1lLCBuYW1l LCBuYW1lKTsKPiArfQo+ICsKPiArLyoqIENsZWFuIHVwIHNoYXJlZCBvYmplY3RzICovCj4gK3N0 YXRpYyB2b2lkIGNsZWFudXBfc2hvYmpzKCkKPiArewo+ICsgIGlmICgtMSA9PSBzZW1fdW5saW5r KHNlbV9uYW1lKSkKPiArICB7Cj4gKyAgICBwZXJyb3IoInNlbV91bmxpbmsiKTsKPiArICB9Cj4g KyAgaWYgKC0xID09IHNobV91bmxpbmsoc2htX25hbWUpKQo+ICsgIHsKPiArICAgIHBlcnJvcigi c2htX3VubGluayIpOwo+ICsgIH0KPiArfQo+ICsKPiAraW50IG1haW4gKGludCBhcmdjLCBjaGFy ICoqYXJndikKPiArewo+ICsgIHBpZF90IGNoaWxkX3BpZDsKPiArICBpbnQgY3Vycl9vcHQgPSAx Owo+ICsgIGJvb2wgdXNlX210ID0gZmFsc2UsIHVzZV9kaXJlY3QgPSBmYWxzZTsKPiArICBsb25n IG9mZnNldDsKPiArCj4gKyAgd2hpbGUoY3Vycl9vcHQgPCBhcmdjKQo+ICsgIHsKPiArICAgIGlm ICgwID09IHN0cmNtcChhcmd2W2N1cnJfb3B0XSwgIi1tIikpCj4gKyAgICB7Cj4gKyAgICAgIHVz ZV9tdCA9IHRydWU7Cj4gKyAgICAgIGN1cnJfb3B0Kys7Cj4gKyAgICAgIGNvbnRpbnVlOwo+ICsg ICAgfQo+ICsgICAgZWxzZSBpZiAoMCA9PSBzdHJjbXAoYXJndltjdXJyX29wdF0sICItZiIpKQo+ ICsgICAgewo+ICsgICAgICB1c2VfZGlyZWN0ID0gdHJ1ZTsKPiArICAgICAgY3Vycl9vcHQrKzsK PiArICAgICAgY29udGludWU7Cj4gKyAgICB9Cj4gKyAgICBlbHNlIGlmICgwID09IHN0cmNtcChh cmd2W2N1cnJfb3B0XSwgIi0tZXhjbHVkZS1tb25vdG9uaWMiKSkKPiArICAgIHsKPiArICAgICAg c2V0ZW52KCJET05UX0ZBS0VfTU9OT1RPTklDIiwgIjEiLCB0cnVlKTsKPiArICAgICAgY3Vycl9v cHQrKzsKPiArICAgICAgY29udGludWU7Cj4gKyAgICB9Cj4gKyAgICBlbHNlIGlmICgoMCA9PSBz dHJjbXAoYXJndltjdXJyX29wdF0sICItdiIpKSB8fAo+ICsgICAgICAgICAgICAgKDAgPT0gc3Ry Y21wKGFyZ3ZbY3Vycl9vcHRdLCAiLS12ZXJzaW9uIikpKQo+ICsgICAgewo+ICsgICAgICBwcmlu dGYoIlxuJXM6IFZlcnNpb24gJXNcbiIKPiArICAgICAgICAgIkZvciB1c2FnZSBpbmZvcm1hdGlv biBwbGVhc2UgdXNlICclcyAtLWhlbHAnLlxuIiwKPiArICAgICAgICAgYXJndlswXSwgdmVyc2lv biwgYXJndlswXSk7Cj4gKyAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKPiArICAgIH0KPiArICAg IGVsc2UgaWYgKCgwID09IHN0cmNtcChhcmd2W2N1cnJfb3B0XSwgIi1oIikpIHx8Cj4gKyAgICAg ICAgICAgICAoMCA9PSBzdHJjbXAoYXJndltjdXJyX29wdF0sICItPyIpKSB8fAo+ICsgICAgICAg ICAgICAgKDAgPT0gc3RyY21wKGFyZ3ZbY3Vycl9vcHRdLCAiLS1oZWxwIikpKQo+ICsgICAgewo+ ICsgICAgICB1c2FnZShhcmd2WzBdKTsKPiArICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOwo+ICsg ICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsgICAgICAvKiB3ZSBwYXJzZWQgYWxsIG9wdGlv bnMgKi8KPiArICAgICAgYnJlYWs7Cj4gKyAgICB9Cj4gKyAgfQo+ICsKPiArICAvKiB3ZSBuZWVk IGF0IGxlYXN0IGEgdGltZXN0YW1wIHN0cmluZyBhbmQgYSBjb21tYW5kIHRvIHJ1biAqLwo+ICsg IGlmIChhcmdjIC0gY3Vycl9vcHQgPCAyKQo+ICsgIHsKPiArICAgIHVzYWdlKGFyZ3ZbMF0pOwo+ ICsgICAgZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsgIH0KPiArCj4gKyAgaWYgKCF1c2VfZGlyZWN0 KQo+ICsgIHsKPiArICAgIC8vIFRPRE8gZ2V0IHNlY29uZHMKPiArICAgIGludCBwZmRzWzJdOwo+ ICsgICAgKHZvaWQpIChwaXBlKHBmZHMpICsgMSk7Cj4gKyAgICBpbnQgcmV0ID0gRVhJVF9TVUND RVNTOwo+ICsKPiArICAgIGlmICgwID09IChjaGlsZF9waWQgPSBmb3JrKCkpKQo+ICsgICAgewo+ ICsgICAgICBjbG9zZSgxKTsgICAgICAgLyogY2xvc2Ugbm9ybWFsIHN0ZG91dCAqLwo+ICsgICAg ICAodm9pZCkgKGR1cChwZmRzWzFdKSArIDEpOyAgIC8qIG1ha2Ugc3Rkb3V0IHNhbWUgYXMgcGZk c1sxXSAqLwo+ICsgICAgICBjbG9zZShwZmRzWzBdKTsgLyogd2UgZG9uJ3QgbmVlZCB0aGlzICov Cj4gKyAgICAgIGlmIChFWElUX1NVQ0NFU1MgIT0gZXhlY2xwKGRhdGVfY21kLCBkYXRlX2NtZCwg Ii1kIiwgYXJndltjdXJyX29wdF0sICIrJXMiLChjaGFyICopIE5VTEwpKQo+ICsgICAgICB7Cj4g KyAgICAgICAgcGVycm9yKCJSdW5uaW5nIChnKWRhdGUgZmFpbGVkIik7Cj4gKyAgICAgICAgZXhp dChFWElUX0ZBSUxVUkUpOwo+ICsgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBlbHNlCj4gKyAgICB7 Cj4gKyAgICAgIGNoYXIgYnVmWzI1Nl0gPSB7MH07IC8qIGUgd2lsbCBoYXZlIHdheSBsZXNzIHRo YW4gMjU2IGRpZ2l0cyAqLwo+ICsgICAgICBjbG9zZShwZmRzWzFdKTsgICAvKiB3ZSB3b24ndCB3 cml0ZSB0byB0aGlzICovCj4gKyAgICAgICh2b2lkKSAocmVhZChwZmRzWzBdLCBidWYsIDI1Nikg KyAxKTsKPiArICAgICAgd2FpdHBpZChjaGlsZF9waWQsICZyZXQsIDApOwo+ICsgICAgICBpZiAo cmV0ICE9IEVYSVRfU1VDQ0VTUykKPiArICAgICAgewo+ICsgICAgICAgIHByaW50ZigiRXJyb3I6 IFRpbWVzdGFtcCB0byBmYWtlIG5vdCByZWNvZ25pemVkLCBwbGVhc2UgcmUtdHJ5IHdpdGggYSAi Cj4gKyAgICAgICAgICAgICAgICJkaWZmZXJlbnQgdGltZXN0YW1wLlxuIik7Cj4gKyAgICAgICAg ZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsgICAgICB9Cj4gKyAgICAgIG9mZnNldCA9IGF0b2woYnVm KSAtIHRpbWUoTlVMTCk7Cj4gKyAgICAgIHJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1Ziks ICIlcyVsZCIsIChvZmZzZXQgPj0gMCk/IisiOiIiLCBvZmZzZXQpOwo+ICsgICAgICBzZXRlbnYo IkZBS0VUSU1FIiwgYnVmLCB0cnVlKTsKPiArICAgICAgY2xvc2UocGZkc1swXSk7IC8qIGZpbmlz aGVkIHJlYWRpbmcgKi8KPiArICAgIH0KPiArICB9Cj4gKyAgZWxzZQo+ICsgIHsKPiArICAgIC8q IHNpbXBseSBwYXNzIGZvcm1hdCBzdHJpbmcgYWxvbmcgKi8KPiArICAgIHNldGVudigiRkFLRVRJ TUUiLCBhcmd2W2N1cnJfb3B0XSwgdHJ1ZSk7Cj4gKyAgfQo+ICsgIGludCBrZWVwYWxpdmVfZmRz WzJdOwo+ICsgICh2b2lkKSAocGlwZShrZWVwYWxpdmVfZmRzKSArIDEpOwo+ICsKPiArICAvKiB3 ZSBqdXN0IGNvbnN1bWVkIHRoZSB0aW1lc3RhbXAgb3B0aW9uICovCj4gKyAgY3Vycl9vcHQrKzsK PiArCj4gKyAgewo+ICsgICAgLyogY3JlYXRlIHNlbWFwaG9yZXMgYW5kIHNoYXJlZCBtZW1vcnkg Ki8KPiArICAgIGludCBzaG1fZmQ7Cj4gKyAgICBzZW1fdCAqc2VtOwo+ICsgICAgc3RydWN0IGZ0 X3NoYXJlZF9zICpmdF9zaGFyZWQ7Cj4gKyAgICBjaGFyIHNoYXJlZF9vYmpzW1BBVEhfQlVGU0la RV07Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIENhc3Rpbmcgb2YgZ2V0cGlkKCkgcmV0dXJuIHZh bHVlIHRvIGxvbmcgbmVlZGVkIHRvIG1ha2UgR0NDIG9uIFNtYXJ0T1MKPiArICAgICAqIGhhcHB5 LCBzaW5jZSBnZXRwaWQncyByZXR1cm4gdmFsdWUncyB0eXBlIG9uIFNtYXJ0T1MgaXMgbG9uZy4g U2luY2UKPiArICAgICAqIGdldHBpZCdzIHJldHVybiB2YWx1ZSdzIHR5cGUgaXMgaW50IG9uIG1v c3Qgb3RoZXIgc3lzdGVtcywgYW5kIHRoYXQKPiArICAgICAqIHNpemVvZihsb25nKSBhbHdheXMg Pj0gc2l6ZW9mKGludCksIHRoaXMgd29ya3Mgb24gYWxsIHBsYXRmb3JtcyB3aXRob3V0Cj4gKyAg ICAgKiB0aGUgbmVlZCBmb3IgY3JhenkgI2lmZGVmcy4KPiArICAgICAqLwo+ICsgICAgc25wcmlu dGYoc2VtX25hbWUsIFBBVEhfQlVGU0laRSAtMSAsIi9mYWtldGltZV9zZW1fJWxkIiwgKGxvbmcp Z2V0cGlkKCkpOwo+ICsgICAgc25wcmludGYoc2htX25hbWUsIFBBVEhfQlVGU0laRSAtMSAsIi9m YWtldGltZV9zaG1fJWxkIiwgKGxvbmcpZ2V0cGlkKCkpOwo+ICsKPiArICAgIGlmIChTRU1fRkFJ TEVEID09IChzZW0gPSBzZW1fb3BlbihzZW1fbmFtZSwgT19DUkVBVHxPX0VYQ0wsIFNfSVdVU1J8 U19JUlVTUiwgMSkpKQo+ICsgICAgewo+ICsgICAgICBwZXJyb3IoInNlbV9vcGVuIik7Cj4gKyAg ICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBjcmVhdGUgc2ht ICovCj4gKyAgICBpZiAoLTEgPT0gKHNobV9mZCA9IHNobV9vcGVuKHNobV9uYW1lLCBPX0NSRUFU fE9fRVhDTHxPX1JEV1IsIFNfSVdVU1J8U19JUlVTUikpKQo+ICsgICAgewo+ICsgICAgICBwZXJy b3IoInNobV9vcGVuIik7Cj4gKyAgICAgIGlmICgtMSA9PSBzZW1fdW5saW5rKGFyZ3ZbMl0pKQo+ ICsgICAgICB7Cj4gKyAgICAgICAgcGVycm9yKCJzZW1fdW5saW5rIik7Cj4gKyAgICAgIH0KPiAr ICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIHNldCBzaG0g c2l6ZSAqLwo+ICsgICAgaWYgKC0xID09IGZ0cnVuY2F0ZShzaG1fZmQsIHNpemVvZih1aW50NjRf dCkpKQo+ICsgICAgewo+ICsgICAgICBwZXJyb3IoImZ0cnVuY2F0ZSIpOwo+ICsgICAgICBjbGVh bnVwX3Nob2JqcygpOwo+ICsgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgLyogbWFwIHNobSAqLwo+ICsgICAgaWYgKE1BUF9GQUlMRUQgPT0gKGZ0X3NoYXJlZCA9 IG1tYXAoTlVMTCwgc2l6ZW9mKHN0cnVjdCBmdF9zaGFyZWRfcyksIFBST1RfUkVBRHxQUk9UX1dS SVRFLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBNQVBfU0hBUkVELCBzaG1fZmQsIDApKSkK PiArICAgIHsKPiArICAgICAgcGVycm9yKCJtbWFwIik7Cj4gKyAgICAgIGNsZWFudXBfc2hvYmpz KCk7Cj4gKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAo c2VtX3dhaXQoc2VtKSA9PSAtMSkKPiArICAgIHsKPiArICAgICAgcGVycm9yKCJzZW1fd2FpdCIp Owo+ICsgICAgICBjbGVhbnVwX3Nob2JqcygpOwo+ICsgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogaW5pdCBlbGFwc2VkIHRpbWUgdGlja3MgdG8gemVybyAq Lwo+ICsgICAgZnRfc2hhcmVkLT50aWNrcyA9IDA7Cj4gKyAgICBmdF9zaGFyZWQtPmZpbGVfaWR4 ID0gMDsKPiArICAgIGZ0X3NoYXJlZC0+c3RhcnRfdGltZS5yZWFsLnR2X3NlYyA9IDA7Cj4gKyAg ICBmdF9zaGFyZWQtPnN0YXJ0X3RpbWUucmVhbC50dl9uc2VjID0gLTE7Cj4gKyAgICBmdF9zaGFy ZWQtPnN0YXJ0X3RpbWUubW9uLnR2X3NlYyA9IDA7Cj4gKyAgICBmdF9zaGFyZWQtPnN0YXJ0X3Rp bWUubW9uLnR2X25zZWMgPSAtMTsKPiArICAgIGZ0X3NoYXJlZC0+c3RhcnRfdGltZS5tb25fcmF3 LnR2X3NlYyA9IDA7Cj4gKyAgICBmdF9zaGFyZWQtPnN0YXJ0X3RpbWUubW9uX3Jhdy50dl9uc2Vj ID0gLTE7Cj4gKwo+ICsgICAgaWYgKC0xID09IG11bm1hcChmdF9zaGFyZWQsIChzaXplb2Yoc3Ry dWN0IGZ0X3NoYXJlZF9zKSkpKQo+ICsgICAgewo+ICsgICAgICBwZXJyb3IoIm11bm1hcCIpOwo+ ICsgICAgICBjbGVhbnVwX3Nob2JqcygpOwo+ICsgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4g KyAgICB9Cj4gKwo+ICsgICAgaWYgKHNlbV9wb3N0KHNlbSkgPT0gLTEpCj4gKyAgICB7Cj4gKyAg ICAgIHBlcnJvcigic2Vtb3AiKTsKPiArICAgICAgY2xlYW51cF9zaG9ianMoKTsKPiArICAgICAg ZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsgICAgfQo+ICsKPiArICAgIHNucHJpbnRmKHNoYXJlZF9v YmpzLCBQQVRIX0JVRlNJWkUsICIlcyAlcyIsIHNlbV9uYW1lLCBzaG1fbmFtZSk7Cj4gKyAgICBz ZXRlbnYoIkZBS0VUSU1FX1NIQVJFRCIsIHNoYXJlZF9vYmpzLCB0cnVlKTsKPiArICAgIHNlbV9j bG9zZShzZW0pOwo+ICsgIH0KPiArCj4gKyAgewo+ICsgICAgY2hhciAqZnRwbF9wYXRoOwo+ICsj aWZkZWYgX19BUFBMRV9fCj4gKyAgICBmdHBsX3BhdGggPSBQUkVGSVggIi9saWJmYWtldGltZS4x LmR5bGliIjsKPiArICAgIEZJTEUgKmNoZWNrOwo+ICsgICAgY2hlY2sgPSBmb3BlbihmdHBsX3Bh dGgsICJybyIpOwo+ICsgICAgaWYgKGNoZWNrID09IE5VTEwpCj4gKyAgICB7Cj4gKyAgICAgIGZ0 cGxfcGF0aCA9IFBSRUZJWCAiL2xpYi9mYWtldGltZS9saWJmYWtldGltZS4xLmR5bGliIjsKPiAr ICAgIH0KPiArICAgIGVsc2UKPiArICAgIHsKPiArICAgICAgZmNsb3NlKGNoZWNrKTsKPiArICAg IH0KPiArICAgIHNldGVudigiRFlMRF9JTlNFUlRfTElCUkFSSUVTIiwgZnRwbF9wYXRoLCB0cnVl KTsKPiArICAgIHNldGVudigiRFlMRF9GT1JDRV9GTEFUX05BTUVTUEFDRSIsICIxIiwgdHJ1ZSk7 Cj4gKyNlbHNlCj4gKyAgICB7Cj4gKyAgICAgIGNoYXIgKmxkX3ByZWxvYWRfbmV3LCAqbGRfcHJl bG9hZCA9IGdldGVudigiTERfUFJFTE9BRCIpOwo+ICsgICAgICBzaXplX3QgbGVuOwo+ICsgICAg ICBpZiAodXNlX210KQo+ICsgICAgICB7Cj4gKyAgICAgICAgLyoKPiArICAgICAgICAgKiBvbiBN dWx0aUFyY2ggcGxhdGZvcm1zLCBzdWNoIGFzIERlYmlhbiwgd2UgcHV0IGEgbGl0ZXJhbCAkTElC IGludG8gTERfUFJFTE9BRC4KPiArICAgICAgICAgKi8KPiArI2lmbmRlZiBNVUxUSV9BUkNICj4g KyAgICAgICAgZnRwbF9wYXRoID0gUFJFRklYIExJQkRJUk5BTUUgIi9saWJmYWtldGltZU1ULnNv LjEiOwo+ICsjZWxzZQo+ICsgICAgICAgIGZ0cGxfcGF0aCA9IFBSRUZJWCAiLyRMSUIvZmFrZXRp bWUvbGliZmFrZXRpbWVNVC5zby4xIjsKPiArI2VuZGlmCj4gKyAgICAgIH0KPiArICAgICAgZWxz ZQo+ICsgICAgICB7Cj4gKyNpZm5kZWYgTVVMVElfQVJDSAo+ICsgICAgICAgIGZ0cGxfcGF0aCA9 IFBSRUZJWCBMSUJESVJOQU1FICIvbGliZmFrZXRpbWUuc28uMSI7Cj4gKyNlbHNlCj4gKyAgICAg ICAgZnRwbF9wYXRoID0gUFJFRklYICIvJExJQi9mYWtldGltZS9saWJmYWtldGltZS5zby4xIjsK PiArI2VuZGlmCj4gKyAgICAgIH0KPiArICAgICAgbGVuID0gKChsZF9wcmVsb2FkKT9zdHJsZW4o bGRfcHJlbG9hZCkgKyAxOiAwKSArIDEgKyBzdHJsZW4oZnRwbF9wYXRoKTsKPiArICAgICAgbGRf cHJlbG9hZF9uZXcgPSBtYWxsb2MobGVuKTsKPiArICAgICAgc25wcmludGYobGRfcHJlbG9hZF9u ZXcsIGxlbiAsIiVzJXMlcyIsIChsZF9wcmVsb2FkKT9sZF9wcmVsb2FkOiIiLAo+ICsgICAgICAg ICAgICAgIChsZF9wcmVsb2FkKT8iOiI6IiIsIGZ0cGxfcGF0aCk7Cj4gKyAgICAgIHNldGVudigi TERfUFJFTE9BRCIsIGxkX3ByZWxvYWRfbmV3LCB0cnVlKTsKPiArICAgICAgZnJlZShsZF9wcmVs b2FkX25ldyk7Cj4gKyAgICB9Cj4gKyNlbmRpZgo+ICsgIH0KPiArCj4gKyAgLyogcnVuIGNvbW1h bmQgYW5kIGNsZWFuIHVwIHNoYXJlZCBvYmplY3RzICovCj4gKyAgaWYgKDAgPT0gKGNoaWxkX3Bp ZCA9IGZvcmsoKSkpCj4gKyAgewo+ICsgICAgY2xvc2Uoa2VlcGFsaXZlX2Zkc1swXSk7IC8qIG9u bHkgcGFyZW50IG5lZWRzIHRvIHJlYWQgdGhpcyAqLwo+ICsgICAgaWYgKEVYSVRfU1VDQ0VTUyAh PSBleGVjdnAoYXJndltjdXJyX29wdF0sICZhcmd2W2N1cnJfb3B0XSkpCj4gKyAgICB7Cj4gKyAg ICAgIHBlcnJvcigiUnVubmluZyBzcGVjaWZpZWQgY29tbWFuZCBmYWlsZWQiKTsKPiArICAgICAg ZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsgICAgfQo+ICsgIH0KPiArICBlbHNlCj4gKyAgewo+ICsg ICAgaW50IHJldDsKPiArICAgIGNoYXIgYnVmOwo+ICsgICAgY2xvc2Uoa2VlcGFsaXZlX2Zkc1sx XSk7IC8qIG9ubHkgY2hpbGRyZW4gbmVlZCBrZWVwIHRoaXMgb3BlbiAqLwo+ICsgICAgd2FpdHBp ZChjaGlsZF9waWQsICZyZXQsIDApOwo+ICsgICAgKHZvaWQpIChyZWFkKGtlZXBhbGl2ZV9mZHNb MF0sICZidWYsIDEpICsgMSk7IC8qIHJlYWRzIDBCIHdoZW4gYWxsIGNoaWxkcmVuIGV4aXQgKi8K PiArICAgIGNsZWFudXBfc2hvYmpzKCk7Cj4gKyAgICBpZiAoV0lGU0lHTkFMRUQocmV0KSkKPiAr ICAgIHsKPiArICAgICAgZnByaW50ZihzdGRlcnIsICJDYXVnaHQgJXNcbiIsIHN0cnNpZ25hbChX VEVSTVNJRyhyZXQpKSk7Cj4gKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKPiArICAgIH0KPiAr ICAgIGV4aXQoV0VYSVRTVEFUVVMocmV0KSk7Cj4gKyAgfQo+ICsKPiArICByZXR1cm4gRVhJVF9T VUNDRVNTOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBFZGl0b3IgbW9kZWxpbmVzCj4gKyAqCj4gKyAq IExvY2FsIHZhcmlhYmxlczoKPiArICogYy1iYXNpYy1vZmZzZXQ6IDIKPiArICogdGFiLXdpZHRo OiAyCj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAo+ICsgKiBFbmQ6Cj4gKyAqCj4gKyAqIHZp OiBzZXQgc2hpZnR3aWR0aD0yIHRhYnN0b3A9MiBleHBhbmR0YWI6Cj4gKyAqIDppbmRlbnRTaXpl PTI6dGFiU2l6ZT0yOm5vVGFicz10cnVlOgo+ICsgKi8KPiArCj4gKy8qIGVvZiAqLwo+IGRpZmYg LS1naXQgYS9zY3JpcHRzL2xpYmZha2V0aW1lL2Zha2V0aW1lX2NvbW1vbi5oIGIvc2NyaXB0cy9s aWJmYWtldGltZS9mYWtldGltZV9jb21tb24uaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uOWZkYTZhNwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9zY3JpcHRzL2xpYmZh a2V0aW1lL2Zha2V0aW1lX2NvbW1vbi5oCj4gQEAgLTAsMCArMSw2MSBAQAo+ICsvKgo+ICsgKiBG YWtldGltZSdzIGNvbW1vbiBkZWZpbml0aW9ucwo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgMjAxMyBC YWxpbnQgUmVjemV5IDxiYWxpbnRAYmFsaW50cmVjemV5Lmh1Pgo+ICsgKgo+ICsgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiB0aGUgbGliZmFrZXRpbWUuCj4gKyAqCj4gKyAqIGxpYmZha2V0aW1lIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQg dW5kZXIKPiArICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 MiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKPiArICogU29mdHdhcmUgRm91bmRhdGlvbi4KPiAr ICoKPiArICogbGliZmFrZXRpbWUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKPiArICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCj4gKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IKPiArICogbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MiBh bG9uZwo+ICsgKiB3aXRoIGxpYmZha2V0aW1lOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCj4gKyAqIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMw LCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKPiArICovCj4gKwo+ICsjaWZuZGVmIEZBS0VU SU1FX0NPTU1PTl9ICj4gKyNkZWZpbmUgRkFLRVRJTUVfQ09NTU9OX0gKPiArCj4gKyNpbmNsdWRl IDxzdGRpbnQuaD4KPiArCj4gK3N0cnVjdCBzeXN0ZW1fdGltZV9zCj4gK3sKPiArICAvKiBTeXN0 ZW0gdGltZSBhY2NvcmRpbmcgdG8gQ0xPQ0tfUkVBTFRJTUUgKi8KPiArICBzdHJ1Y3QgdGltZXNw ZWMgcmVhbDsKPiArICAvKiBTeXN0ZW0gdGltZSBhY2NvcmRpbmcgdG8gQ0xPQ0tfTU9OT1RPTklD ICovCj4gKyAgc3RydWN0IHRpbWVzcGVjIG1vbjsKPiArICAvKiBTeXN0ZW0gdGltZSBhY2NvcmRp bmcgdG8gQ0xPQ0tfTU9OT1RPTklDX1JBVyAqLwo+ICsgIHN0cnVjdCB0aW1lc3BlYyBtb25fcmF3 Owo+ICsjaWZkZWYgQ0xPQ0tfQk9PVFRJTUUKPiArICAvKiBTeXN0ZW0gdGltZSBhY2NvcmRpbmcg dG8gQ0xPQ0tfQk9PVFRJTUUgKi8KPiArICBzdHJ1Y3QgdGltZXNwZWMgYm9vdDsKPiArI2VuZGlm Cj4gK307Cj4gKwo+ICsvKiBEYXRhIHNoYXJlZCBhbW9uZyBmYWtldGltZS1zcGF3bmVkIHByb2Nl c3NlcyAqLwo+ICtzdHJ1Y3QgZnRfc2hhcmVkX3MKPiArewo+ICsgIC8qCj4gKyAgICogV2hlbiBh ZHZhbmNpbmcgdGltZSBsaW5lYXJseSB3aXRoIGVhY2ggdGltZSgpLCBldGMuIGNhbGwsIHRoZSBj YWxscyBhcmUKPiArICAgKiBjb3VudGVkIGhlcmUgKi8KPiArICB1aW50NjRfdCB0aWNrczsKPiAr ICAvKiBJbmRleCBvZiB0aW1zdGFtcCB0byBiZSBsb2FkZWQgZnJvbSBmaWxlICovCj4gKyAgdWlu dDY0X3QgZmlsZV9pZHg7Cj4gKyAgLyogU3lzdGVtIHRpbWUgRmFrZXRpbWUgc3RhcnRlZCBhdCAq Lwo+ICsgIHN0cnVjdCBzeXN0ZW1fdGltZV9zIHN0YXJ0X3RpbWU7Cj4gK307Cj4gKwo+ICsvKiBU aGVzZSBhcmUgYWxsIG5lZWRlZCBpbiBvcmRlciB0byBwcm9wZXJseSBidWlsZCBvbiBPU1ggKi8K PiArI2lmZGVmIF9fQVBQTEVfXwo+ICsjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgo+ICsjaW5jbHVk ZSA8bWFjaC9tYWNoX2hvc3QuaD4KPiArI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+Cj4gKyNl bmRpZgo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliZmFrZXRpbWUvbGli ZmFrZXRpbWUuYyBiL3NjcmlwdHMvbGliZmFrZXRpbWUvbGliZmFrZXRpbWUuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZWIyZDAxYgo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9zY3JpcHRzL2xpYmZha2V0aW1lL2xpYmZha2V0aW1lLmMKPiBAQCAtMCwwICsxLDI0MTAg QEAKPiArLyoKPiArICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmZha2V0aW1lLCB2ZXJzaW9u IDAuOS43Cj4gKyAqCj4gKyAqICBsaWJmYWtldGltZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4gKyAqICB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUK PiArICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogIGxpYmZha2V0aW1l IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBX SVRIT1VUCj4gKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKPiArICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKPiArICog IG1vcmUgZGV0YWlscy4KPiArICoKPiArICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIGFsb25nCj4gKyAqICB3aXRo IHRoZSBsaWJmYWtldGltZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLAo+ICsgKiAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rvbiwg TUEgIDAyMTExLTEzMDcgIFVTQQo+ICsgKi8KPiArCj4gKy8qCj4gKyAqICAgICAgPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KPiArICogICAgICBHbG9iYWwgc2V0dGluZ3MsIGluY2x1ZGVzLCBhbmQgbWFjcm9zICAg ICAgICAgICAgICAgICAgICAgICAgICA9PT0gSEVBRAo+ICsgKiAgICAgID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Cj4gKyAqLwo+ICsKPiArI2RlZmluZSBfR05VX1NPVVJDRSAgICAgICAgICAgICAvKiByZXF1aXJl ZCB0byBnZXQgUlRMRF9ORVhUIGRlZmluZWQgKi8KPiArCj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiArI2luY2x1ZGUg PHN0ZGJvb2wuaD4KPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4K PiArI2luY2x1ZGUgPHBvbGwuaD4KPiArI2luY2x1ZGUgPHRpbWUuaD4KPiArI2luY2x1ZGUgPG1h dGguaD4KPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2lu Y2x1ZGUgPHNlbWFwaG9yZS5oPgo+ICsjaW5jbHVkZSA8c3lzL21tYW4uaD4KPiArI2luY2x1ZGUg PHN5cy9zdGF0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KPiArI2luY2x1ZGUgPG5ldGlu ZXQvaW4uaD4KPiArI2luY2x1ZGUgPGxpbWl0cy5oPgo+ICsKPiArI2luY2x1ZGUgInRpbWVfb3Bz LmgiCj4gKyNpbmNsdWRlICJmYWtldGltZV9jb21tb24uaCIKPiArCj4gKy8qIHB0aHJlYWQtaGFu ZGxpbmcgY29udHJpYnV0ZWQgYnkgRGF2aWQgTm9ydGgsIFRESSBpbiB2ZXJzaW9uIDAuNyAqLwo+ ICsjaWZkZWYgUFRIUkVBRAo+ICsjaW5jbHVkZSA8cHRocmVhZC5oPgo+ICsjZW5kaWYKPiArCj4g KyNpbmNsdWRlIDxzeXMvdGltZWIuaD4KPiArI2luY2x1ZGUgPGRsZmNuLmg+Cj4gKwo+ICsjZGVm aW5lIEJVRkZFUkxFTiAgIDI1Ngo+ICsKPiArI2lmbmRlZiBfX0FQUExFX18KPiArZXh0ZXJuIGNo YXIgKl9fcHJvZ25hbWU7Cj4gKyNpZmRlZiBfX3N1bgo+ICsjaW5jbHVkZSAic3Vub3NfZW5kaWFu LmgiCj4gKyNlbHNlCj4gKyNpbmNsdWRlIDxlbmRpYW4uaD4KPiArI2VuZGlmCj4gKyNlbHNlCj4g Ky8qIGVuZGlhbm5lc3MgcmVsYXRlZCBtYWNyb3MgKi8KPiArI2lmbmRlZiBPU1N3YXBIb3N0VG9C aWdJbnQ2NAo+ICsjZGVmaW5lIE9TU3dhcEhvc3RUb0JpZ0ludDY0KHgpICgodWludDY0X3QpKHgp KQo+ICsjZW5kaWYKPiArI2RlZmluZSBodG9iZTY0KHgpIE9TU3dhcEhvc3RUb0JpZ0ludDY0KHgp Cj4gKyNpZm5kZWYgT1NTd2FwSG9zdFRvTGl0dGxlSW50NjQKPiArI2RlZmluZSBPU1N3YXBIb3N0 VG9MaXR0bGVJbnQ2NCh4KSBPU1N3YXBJbnQ2NCh4KQo+ICsjZW5kaWYKPiArI2RlZmluZSBodG9s ZTY0KHgpIE9TU3dhcEhvc3RUb0xpdHRsZUludDY0KHgpCj4gKyNpZm5kZWYgT1NTd2FwQmlnVG9I b3N0SW50NjQKPiArI2RlZmluZSBPU1N3YXBCaWdUb0hvc3RJbnQ2NCh4KSAoKHVpbnQ2NF90KSh4 KSkKPiArI2VuZGlmCj4gKyNkZWZpbmUgYmU2NHRvaCh4KSBPU1N3YXBCaWdUb0hvc3RJbnQ2NCh4 KQo+ICsjaWZuZGVmIE9TU3dhcExpdHRsZVRvSG9zdEludDY0Cj4gKyNkZWZpbmUgT1NTd2FwTGl0 dGxlVG9Ib3N0SW50NjQoeCkgT1NTd2FwSW50NjQoeCkKPiArI2VuZGlmCj4gKyNkZWZpbmUgbGU2 NHRvaCh4KSBPU1N3YXBMaXR0bGVUb0hvc3RJbnQ2NCh4KQo+ICsKPiArLyogY2xvY2tfZ2V0dGlt ZSgpIGFuZCByZWxhdGVkIGNsb2NrIGRlZmluaXRpb25zIGFyZSBtaXNzaW5nIG9uIF9fQVBQTEVf XyAqLwo+ICsjaWZuZGVmIENMT0NLX1JFQUxUSU1FCj4gKy8qIGZyb20gR05VIEMgTGlicmFyeSB0 aW1lLmggKi8KPiArLyogSWRlbnRpZmllciBmb3Igc3lzdGVtLXdpZGUgcmVhbHRpbWUgY2xvY2su ICggPT0gMSkgKi8KPiArI2RlZmluZSBDTE9DS19SRUFMVElNRSAgICAgICAgICAgICAgIENBTEVO REFSX0NMT0NLCj4gKy8qIE1vbm90b25pYyBzeXN0ZW0td2lkZSBjbG9jay4gKD09IDApICovCj4g KyNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDICAgICAgICAgICAgICBTWVNURU1fQ0xPQ0sKPiArLyog SGlnaC1yZXNvbHV0aW9uIHRpbWVyIGZyb20gdGhlIENQVS4gICovCj4gKyNkZWZpbmUgQ0xPQ0tf UFJPQ0VTU19DUFVUSU1FX0lEICAgICAyCj4gKy8qIFRocmVhZC1zcGVjaWZpYyBDUFUtdGltZSBj bG9jay4gICovCj4gKyNkZWZpbmUgQ0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUQgICAgICAzCj4gKy8q IE1vbm90b25pYyBzeXN0ZW0td2lkZSBjbG9jaywgbm90IGFkanVzdGVkIGZvciBmcmVxdWVuY3kg c2NhbGluZy4gICovCj4gKyNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDX1JBVyAgICAgICAgICA0Cj4g K3R5cGVkZWYgaW50IGNsb2NraWRfdDsKPiArI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KPiArI2lu Y2x1ZGUgPG1hY2gvbWFjaC5oPgo+ICsjZW5kaWYKPiArI2VuZGlmCj4gKwo+ICsvKiBzb21lIHN5 c3RlbXMgbGFjayByYXcgY2xvY2sgKi8KPiArI2lmbmRlZiBDTE9DS19NT05PVE9OSUNfUkFXCj4g KyNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDX1JBVyAoQ0xPQ0tfTU9OT1RPTklDICsgMSkKPiArI2Vu ZGlmCj4gKwo+ICsvKgo+ICsgKiBQZXIgdGhyZWFkIHZhcmlhYmxlLCB3aGljaCB3ZSB0dXJuIG9u IGluc2lkZSByZWFsXyogY2FsbHMgdG8gYXZvaWQgbW9kaWZ5aW5nCj4gKyAqIHRpbWUgbXVsdGlw bGUgdGltZXMgb2YgZm9yIHRoZSB3aG9sZSBwcm9jZXNzIHRvIHByZXZlbnQgZmFraW5nIHRpbWUK PiArICovCj4gK3N0YXRpYyBfX3RocmVhZCBib29sIGRvbnRfZmFrZSA9IGZhbHNlOwo+ICsKPiAr LyogV3JhcHBlciBmb3IgZnVuY3Rpb24gY2FsbHMsIHdoaWNoIHdlIHdhbnQgdG8gcmV0dXJuIHN5 c3RlbSB0aW1lICovCj4gKyNkZWZpbmUgRE9OVF9GQUtFX1RJTUUoY2FsbCkgICAgICAgICAgXAo+ ICsgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIGJvb2wgZG9u dF9mYWtlX29yaWcgPSBkb250X2Zha2U7ICBcCj4gKyAgICBpZiAoIWRvbnRfZmFrZSkgICAgICAg ICAgICAgICAgICAgXAo+ICsgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiArICAgICAgZG9udF9mYWtlID0gdHJ1ZTsgICAgICAgICAgICAgICBcCj4gKyAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgY2FsbDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiArICAgIGRvbnRfZmFrZSA9IGRvbnRfZmFrZV9vcmlnOyAgICAgICBc Cj4gKyAgfSB3aGlsZSAoMCkKPiArCj4gKy8qIHBvaW50ZXJzIHRvIHJlYWwgKG5vdCBmYWtlZCkg ZnVuY3Rpb25zICovCj4gK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX3N0YXQpICAgICAgICAg ICAgKGludCwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKPiArc3RhdGljIGludCAgICAg ICAgICAoKnJlYWxfZnN0YXQpICAgICAgICAgICAoaW50LCBpbnQsIHN0cnVjdCBzdGF0ICopOwo+ ICtzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9mc3RhdGF0KSAgICAgICAgIChpbnQsIGludCwg Y29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOwo+ICtzdGF0aWMgaW50ICAgICAgICAg ICgqcmVhbF9sc3RhdCkgICAgICAgICAgIChpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQg Kik7Cj4gK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX3N0YXQ2NCkgICAgICAgICAgKGludCwg Y29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdDY0ICopOwo+ICtzdGF0aWMgaW50ICAgICAgICAgICgq cmVhbF9mc3RhdDY0KSAgICAgICAgIChpbnQsIGludCAsIHN0cnVjdCBzdGF0NjQgKik7Cj4gK3N0 YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX2ZzdGF0YXQ2NCkgICAgICAgKGludCwgaW50ICwgY29u c3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdDY0ICosIGludCk7Cj4gK3N0YXRpYyBpbnQgICAgICAgICAg KCpyZWFsX2xzdGF0NjQpICAgICAgICAgKGludCwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdDY0 ICopOwo+ICtzdGF0aWMgdGltZV90ICAgICAgICgqcmVhbF90aW1lKSAgICAgICAgICAgICh0aW1l X3QgKik7Cj4gK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX2Z0aW1lKSAgICAgICAgICAgKHN0 cnVjdCB0aW1lYiAqKTsKPiArc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfZ2V0dGltZW9mZGF5 KSAgICAoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKPiArc3RhdGljIGludCAgICAgICAgICAo KnJlYWxfY2xvY2tfZ2V0dGltZSkgICAoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVj ICp0cCk7Cj4gKyNpZmRlZiBGQUtFX0lOVEVSTkFMX0NBTExTCj4gK3N0YXRpYyBpbnQgICAgICAg ICAgKCpyZWFsX19fZnRpbWUpICAgICAgICAgICAoc3RydWN0IHRpbWViICopOwo+ICtzdGF0aWMg aW50ICAgICAgICAgICgqcmVhbF9fX2dldHRpbWVvZmRheSkgICAgKHN0cnVjdCB0aW1ldmFsICos IHZvaWQgKik7Cj4gK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX19fY2xvY2tfZ2V0dGltZSkg ICAoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCk7Cj4gKyNlbmRpZgo+ICsj aWZuZGVmIF9fQVBQTEVPU1hfXwo+ICsjaWZkZWYgRkFLRV9USU1FUlMKPiArc3RhdGljIGludCAg ICAgICAgICAoKnJlYWxfdGltZXJfc2V0dGltZV8yMikgICAoaW50IHRpbWVyaWQsIGludCBmbGFn cywgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKm5ld192YWx1ZSwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKiBvbGRf dmFsdWUpOwo+ICtzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF90aW1lcl9zZXR0aW1lXzIzMykg ICh0aW1lcl90IHRpbWVyaWQsIGludCBmbGFncywKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKm5ld192YWx1 ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGl0aW1lcnNwZWMgKiBvbGRfdmFsdWUpOwo+ICtzdGF0aWMgaW50ICAgICAgICAgICgqcmVh bF90aW1lcl9nZXR0aW1lXzIyKSAgIChpbnQgdGltZXJpZCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKmN1cnJfdmFs dWUpOwo+ICtzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF90aW1lcl9nZXR0aW1lXzIzMykgICh0 aW1lcl90IHRpbWVyaWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjICpjdXJyX3ZhbHVlKTsKPiArI2VuZGlmCj4gKyNl bmRpZgo+ICsjaWZkZWYgRkFLRV9TTEVFUAo+ICtzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9u YW5vc2xlZXApICAgICAgIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJlcSwgc3RydWN0IHRpbWVz cGVjICpyZW0pOwo+ICtzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF91c2xlZXApICAgICAgICAg ICh1c2Vjb25kc190IHVzZWMpOwo+ICtzdGF0aWMgdW5zaWduZWQgaW50ICgqcmVhbF9zbGVlcCkg ICAgICAgICAgICh1bnNpZ25lZCBpbnQgc2Vjb25kcyk7Cj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQg KCpyZWFsX2FsYXJtKSAgICAgICAgICAgKHVuc2lnbmVkIGludCBzZWNvbmRzKTsKPiArc3RhdGlj IGludCAgICAgICAgICAoKnJlYWxfcG9sbCkgICAgICAgICAgICAoc3RydWN0IHBvbGxmZCAqLCBu ZmRzX3QsIGludCk7Cj4gK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX3Bwb2xsKSAgICAgICAg ICAgKHN0cnVjdCBwb2xsZmQgKiwgbmZkc190LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgY29u c3Qgc2lnc2V0X3QgKik7Cj4gK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX3NlbGVjdCkgICAg ICAgICAgKGludCBuZmRzLCBmZF9zZXQgKnJlc3RyaWN0IHJlYWRmZHMsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCAqcmVzdHJpY3Qgd3JpdGVm ZHMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkX3Nl dCAqcmVzdHJpY3QgZXJyb3JmZHMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpyZXN0cmljdCB0aW1lb3V0KTsKPiArc3RhdGlj IGludCAgICAgICAgICAoKnJlYWxfc2VtX3RpbWVkd2FpdCkgICAoc2VtX3QqLCBjb25zdCBzdHJ1 Y3QgdGltZXNwZWMqKTsKPiArI2VuZGlmCj4gKyNpZmRlZiBfX0FQUExFT1NYX18KPiArc3RhdGlj IGludCAgICAgICAgICAoKnJlYWxfY2xvY2tfZ2V0X3RpbWUpICAoY2xvY2tfc2Vydl90IGNsb2Nr X3NlcnYsIG1hY2hfdGltZXNwZWNfdCAqY3VyX3RpbWVjbG9ja2lkX3QpOwo+ICtzdGF0aWMgaW50 ICAgICAgICAgIGFwcGxlX2Nsb2NrX2dldHRpbWUgICAgIChjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1 Y3QgdGltZXNwZWMgKnRwKTsKPiArc3RhdGljIGNsb2NrX3NlcnZfdCBjbG9ja19zZXJ2X3JlYWw7 Cj4gKyNlbmRpZgo+ICsKPiArc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7Cj4gKwo+ICsvKiBw cm90b3R5cGVzICovCj4gK3N0YXRpYyBpbnQgICAgZmFrZV9nZXR0aW1lb2ZkYXkoc3RydWN0IHRp bWV2YWwgKnR2KTsKPiArc3RhdGljIGludCAgICBmYWtlX2Nsb2NrX2dldHRpbWUoY2xvY2tpZF90 IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCk7Cj4gKwo+ICsvKiogU2VtYXBob3JlIHByb3Rl Y3Rpbmcgc2hhcmVkIGRhdGEgKi8KPiArc3RhdGljIHNlbV90ICpzaGFyZWRfc2VtID0gTlVMTDsK PiArCj4gKy8qKiBEYXRhIHNoYXJlZCBhbW9uZyBmYWtldGltZS1zcGF3bmVkIHByb2Nlc3NlcyAq Lwo+ICtzdGF0aWMgc3RydWN0IGZ0X3NoYXJlZF9zICpmdF9zaGFyZWQgPSBOVUxMOwo+ICsKPiAr LyoqIFN0b3JhZ2UgZm9ybWF0IGZvciB0aW1lc3RhbXBzIHdyaXR0ZW4gdG8gZmlsZS4gQmlnIGVu ZGlhbi4qLwo+ICtzdHJ1Y3Qgc2F2ZWRfdGltZXN0YW1wCj4gK3sKPiArICBpbnQ2NF90IHNlYzsK PiArICB1aW50NjRfdCBuc2VjOwo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHRpbWVz cGVjX2Zyb21fc2F2ZWQgKHN0cnVjdCB0aW1lc3BlYyAqdHAsCj4gKyAgc3RydWN0IHNhdmVkX3Rp bWVzdGFtcCAqc2F2ZWQpCj4gK3sKPiArICAvKiByZWFkIGFzIGJpZyBlbmRpYW4gKi8KPiArICB0 cC0+dHZfc2VjID0gYmU2NHRvaChzYXZlZC0+c2VjKTsKPiArICB0cC0+dHZfbnNlYyA9IGJlNjR0 b2goc2F2ZWQtPm5zZWMpOwo+ICt9Cj4gKwo+ICsvKiogU2F2ZWQgdGltZXN0YW1wcyAqLwo+ICtz dGF0aWMgc3RydWN0IHNhdmVkX3RpbWVzdGFtcCAqc3RzcyA9IE5VTEw7Cj4gK3N0YXRpYyBzaXpl X3QgaW5maWxlX3NpemU7Cj4gK3N0YXRpYyBib29sIGluZmlsZV9zZXQgPSBmYWxzZTsKPiArCj4g Ky8qKiBGaWxlIGZkIHRvIHNhdmUgdGltZXN0YW1wcyB0byAqLwo+ICtzdGF0aWMgaW50IG91dGZp bGUgPSAtMTsKPiArCj4gK3N0YXRpYyBib29sIGxpbWl0ZWRfZmFraW5nID0gZmFsc2U7Cj4gK3N0 YXRpYyBsb25nIGNhbGxjb3VudGVyID0gMDsKPiArc3RhdGljIGxvbmcgZnRfc3RhcnRfYWZ0ZXJf c2VjcyA9IC0xOwo+ICtzdGF0aWMgbG9uZyBmdF9zdG9wX2FmdGVyX3NlY3MgPSAtMTsKPiArc3Rh dGljIGxvbmcgZnRfc3RhcnRfYWZ0ZXJfbmNhbGxzID0gLTE7Cj4gK3N0YXRpYyBsb25nIGZ0X3N0 b3BfYWZ0ZXJfbmNhbGxzID0gLTE7Cj4gKwo+ICtzdGF0aWMgYm9vbCBzcGF3bnN1cHBvcnQgPSBm YWxzZTsKPiArc3RhdGljIGludCBzcGF3bmVkID0gMDsKPiArc3RhdGljIGNoYXIgZnRfc3Bhd25f dGFyZ2V0WzEwMjRdOwo+ICtzdGF0aWMgbG9uZyBmdF9zcGF3bl9zZWNzID0gLTE7Cj4gK3N0YXRp YyBsb25nIGZ0X3NwYXduX25jYWxscyA9IC0xOwo+ICsKPiArc3RhdGljIGludCBmYWtlX21vbm90 b25pY19jbG9jayA9IDE7Cj4gK3N0YXRpYyBpbnQgY2FjaGVfZW5hYmxlZCA9IDE7Cj4gK3N0YXRp YyBpbnQgY2FjaGVfZHVyYXRpb24gPSAxMDsgICAgIC8qIGNhY2hlIGZha2UgdGltZSBpbnB1dCBm b3IgMTAgc2Vjb25kcyAqLwo+ICsKPiArLyoKPiArICogU3RhdGljIHRpbWVzcGVjIHRvIHN0b3Jl IG91ciBzdGFydHVwIHRpbWUsIGZvbGxvd2VkIGJ5IGEgbG9hZC10aW1lIGxpYnJhcnkKPiArICog aW5pdGlhbGl6YXRpb24gZGVjbGFyYXRpb24uCj4gKyAqLwo+ICsjaWZuZGVmIENMT0NLX0JPT1RU SU1FCj4gK3N0YXRpYyBzdHJ1Y3Qgc3lzdGVtX3RpbWVfcyBmdHBsX3N0YXJ0dGltZSA9IHt7MCwg LTF9LCB7MCwgLTF9LCB7MCwgLTF9fTsKPiArI2Vsc2UKPiArc3RhdGljIHN0cnVjdCBzeXN0ZW1f dGltZV9zIGZ0cGxfc3RhcnR0aW1lID0ge3swLCAtMX0sIHswLCAtMX0sIHswLCAtMX0sIHswLCAt MX19Owo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyBjaGFyIHVzZXJfZmFrZWRfdGltZV9mbXRbQlVG U0laXSA9IHswfTsKPiArCj4gKy8qIFVzZXIgc3VwcGxpZWQgYmFzZSB0aW1lIHRvIGZha2UgKi8K PiArc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB1c2VyX2Zha2VkX3RpbWVfdGltZXNwZWMgPSB7MCwg LTF9Owo+ICsvKiBVc2VyIHN1cHBsaWVkIGJhc2UgdGltZSBpcyBzZXQgKi8KPiArc3RhdGljIGJv b2wgdXNlcl9mYWtlZF90aW1lX3NldCA9IGZhbHNlOwo+ICtzdGF0aWMgY2hhciB1c2VyX2Zha2Vk X3RpbWVfc2F2ZWRbQlVGRkVSTEVOXSA9IHswfTsKPiArCj4gKy8qIEZyYWN0aW9uYWwgdXNlciBv ZmZzZXQgcHJvdmlkZWQgdGhyb3VnaCBGQUtFVElNRSBlbnYuIHZhci4qLwo+ICtzdGF0aWMgc3Ry dWN0IHRpbWVzcGVjIHVzZXJfb2Zmc2V0ID0gezAsIC0xfTsKPiArLyogU3BlZWQgdXAgb3Igc2xv dyBkb3duIGNsb2NrICovCj4gK3N0YXRpYyBkb3VibGUgdXNlcl9yYXRlID0gMS4wOwo+ICtzdGF0 aWMgYm9vbCB1c2VyX3JhdGVfc2V0ID0gZmFsc2U7Cj4gK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMg dXNlcl9wZXJfdGlja19pbmMgPSB7MCwgLTF9Owo+ICtzdGF0aWMgYm9vbCB1c2VyX3Blcl90aWNr X2luY19zZXQgPSBmYWxzZTsKPiArCj4gK2VudW0gZnRfbW9kZV90IHtGVF9GUkVFWkUsIEZUX1NU QVJUX0FULCBGVF9OT09QfSBmdF9tb2RlID0gRlRfRlJFRVpFOwo+ICsKPiArLyogVGltZSB0byBm YWtlIGlzIG5vdCBwcm92aWRlZCB0aHJvdWdoIEZBS0VUSU1FIGVudi4gdmFyLiAqLwo+ICtzdGF0 aWMgYm9vbCBwYXJzZV9jb25maWdfZmlsZSA9IHRydWU7Cj4gKwo+ICt2b2lkIGZ0X2NsZWFudXAg KHZvaWQpIF9fYXR0cmlidXRlX18gKChkZXN0cnVjdG9yKSk7Cj4gK3ZvaWQgZnRwbF9pbml0ICh2 b2lkKSBfX2F0dHJpYnV0ZV9fICgoY29uc3RydWN0b3IpKTsKPiArCj4gKwo+ICsvKgo+ICsgKiAg ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Cj4gKyAqICAgICAgU2hhcmVkIG1lbW9yeSByZWxhdGVkIGZ1bmN0 aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBTSE0KPiArICogICAgICA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQo+ICsgKi8KPiArCj4gK3N0YXRpYyB2b2lkIGZ0X3NobV9pbml0ICh2b2lk KQo+ICt7Cj4gKyAgaW50IHRpY2tzX3NobV9mZDsKPiArICBjaGFyIHNlbV9uYW1lWzI1Nl0sIHNo bV9uYW1lWzI1Nl0sICpmdF9zaGFyZWRfZW52ID0gZ2V0ZW52KCJGQUtFVElNRV9TSEFSRUQiKTsK PiArCj4gKyAgaWYgKGZ0X3NoYXJlZF9lbnYgIT0gTlVMTCkKPiArICB7Cj4gKyAgICBpZiAoc3Nj YW5mKGZ0X3NoYXJlZF9lbnYsICIlMjU1cyAlMjU1cyIsIHNlbV9uYW1lLCBzaG1fbmFtZSkgPCAy KQo+ICsgICAgewo+ICsgICAgICBwcmludGYoIkVycm9yIHBhcnNpbmcgc2VtYXBob3JlIG5hbWUg YW5kIHNoYXJlZCBtZW1vcnkgaWQgZnJvbSBzdHJpbmc6ICVzIiwgZnRfc2hhcmVkX2Vudik7Cj4g KyAgICAgIGV4aXQoMSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKFNFTV9GQUlMRUQgPT0gKHNo YXJlZF9zZW0gPSBzZW1fb3BlbihzZW1fbmFtZSwgMCkpKQo+ICsgICAgewo+ICsgICAgICBwZXJy b3IoInNlbV9vcGVuIik7Cj4gKyAgICAgIGV4aXQoMSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYg KC0xID09ICh0aWNrc19zaG1fZmQgPSBzaG1fb3BlbihzaG1fbmFtZSwgT19DUkVBVHxPX1JEV1Is IFNfSVdVU1J8U19JUlVTUikpKQo+ICsgICAgewo+ICsgICAgICBwZXJyb3IoInNobV9vcGVuIik7 Cj4gKyAgICAgIGV4aXQoMSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKE1BUF9GQUlMRUQgPT0g KGZ0X3NoYXJlZCA9IG1tYXAoTlVMTCwgc2l6ZW9mKHN0cnVjdCBmdF9zaGFyZWRfcyksIFBST1Rf UkVBRHxQUk9UX1dSSVRFLAo+ICsgICAgICAgICAgICBNQVBfU0hBUkVELCB0aWNrc19zaG1fZmQs IDApKSkKPiArICAgIHsKPiArICAgICAgcGVycm9yKCJtbWFwIik7Cj4gKyAgICAgIGV4aXQoMSk7 Cj4gKyAgICB9Cj4gKyAgfQo+ICt9Cj4gKwo+ICt2b2lkIGZ0X2NsZWFudXAgKHZvaWQpCj4gK3sK PiArICAvKiBkZXRhY2ggZnJvbSBzaGFyZWQgbWVtb3J5ICovCj4gKyAgaWYgKGZ0X3NoYXJlZCAh PSBOVUxMKQo+ICsgIHsKPiArICAgIG11bm1hcChmdF9zaGFyZWQsIHNpemVvZih1aW50NjRfdCkp Owo+ICsgIH0KPiArICBpZiAoc3RzcyAhPSBOVUxMKQo+ICsgIHsKPiArICAgIG11bm1hcChzdHNz LCBpbmZpbGVfc2l6ZSk7Cj4gKyAgfQo+ICsgIGlmIChzaGFyZWRfc2VtICE9IE5VTEwpCj4gKyAg ewo+ICsgICAgc2VtX2Nsb3NlKHNoYXJlZF9zZW0pOwo+ICsgIH0KPiArfQo+ICsKPiArCj4gKy8q Cj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICogICAgICBJbnRlcm5hbCB0aW1lIHJldHJp ZXZhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gSU5UVElNRQo+ICsg KiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Cj4gKyAqLwo+ICsKPiArLyogR2V0IHN5c3RlbSB0aW1lIGZy b20gc3lzdGVtIGZvciBhbGwgY2xvY2tzICovCj4gK3N0YXRpYyB2b2lkIHN5c3RlbV90aW1lX2Zy b21fc3lzdGVtIChzdHJ1Y3Qgc3lzdGVtX3RpbWVfcyAqIHN5c3RpbWUpCj4gK3sKPiArI2lmZGVm IF9fQVBQTEVPU1hfXwo+ICsgIC8qIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0 aW9ucy81MTY3MjY5L2Nsb2NrLWdldHRpbWUtYWx0ZXJuYXRpdmUtaW4tbWFjLW9zLXggKi8KPiAr ICBjbG9ja19zZXJ2X3QgY2Nsb2NrOwo+ICsgIG1hY2hfdGltZXNwZWNfdCBtdHM7Cj4gKyAgaG9z dF9nZXRfY2xvY2tfc2VydmljZShtYWNoX2hvc3Rfc2VsZigpLCBDQUxFTkRBUl9DTE9DSywgJmNs b2NrX3NlcnZfcmVhbCk7Cj4gKyAgKCpyZWFsX2Nsb2NrX2dldF90aW1lKShjbG9ja19zZXJ2X3Jl YWwsICZtdHMpOwo+ICsgIHN5c3RpbWUtPnJlYWwudHZfc2VjID0gbXRzLnR2X3NlYzsKPiArICBz eXN0aW1lLT5yZWFsLnR2X25zZWMgPSBtdHMudHZfbnNlYzsKPiArICBob3N0X2dldF9jbG9ja19z ZXJ2aWNlKG1hY2hfaG9zdF9zZWxmKCksIFNZU1RFTV9DTE9DSywgJmNjbG9jayk7Cj4gKyAgKCpy ZWFsX2Nsb2NrX2dldF90aW1lKShjY2xvY2ssICZtdHMpOwo+ICsgIG1hY2hfcG9ydF9kZWFsbG9j YXRlKG1hY2hfdGFza19zZWxmKCksIGNjbG9jayk7Cj4gKyAgc3lzdGltZS0+bW9uLnR2X3NlYyA9 IG10cy50dl9zZWM7Cj4gKyAgc3lzdGltZS0+bW9uLnR2X25zZWMgPSBtdHMudHZfbnNlYzsKPiAr ICBzeXN0aW1lLT5tb25fcmF3LnR2X3NlYyA9IG10cy50dl9zZWM7Cj4gKyAgc3lzdGltZS0+bW9u X3Jhdy50dl9uc2VjID0gbXRzLnR2X25zZWM7Cj4gKyNlbHNlCj4gKyAgRE9OVF9GQUtFX1RJTUUo KCpyZWFsX2Nsb2NrX2dldHRpbWUpKENMT0NLX1JFQUxUSU1FLCAmc3lzdGltZS0+cmVhbCkpCj4g KyAgIDsKPiArICBET05UX0ZBS0VfVElNRSgoKnJlYWxfY2xvY2tfZ2V0dGltZSkoQ0xPQ0tfTU9O T1RPTklDLCAmc3lzdGltZS0+bW9uKSkKPiArICAgOwo+ICsgIERPTlRfRkFLRV9USU1FKCgqcmVh bF9jbG9ja19nZXR0aW1lKShDTE9DS19NT05PVE9OSUNfUkFXLCAmc3lzdGltZS0+bW9uX3Jhdykp Cj4gKyAgIDsKPiArI2lmZGVmIENMT0NLX0JPT1RUSU1FCj4gKyAgRE9OVF9GQUtFX1RJTUUoKCpy ZWFsX2Nsb2NrX2dldHRpbWUpKENMT0NLX0JPT1RUSU1FLCAmc3lzdGltZS0+Ym9vdCkpCj4gKyAg IDsKPiArI2VuZGlmCj4gKyNlbmRpZgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBuZXh0X3RpbWUo c3RydWN0IHRpbWVzcGVjICp0cCwgc3RydWN0IHRpbWVzcGVjICp0aWNrbGVuKQo+ICt7Cj4gKyAg aWYgKHNoYXJlZF9zZW0gIT0gTlVMTCkKPiArICB7Cj4gKyAgICBzdHJ1Y3QgdGltZXNwZWMgaW5j Owo+ICsgICAgLyogbG9jayAqLwo+ICsgICAgaWYgKHNlbV93YWl0KHNoYXJlZF9zZW0pID09IC0x KQo+ICsgICAgewo+ICsgICAgICBwZXJyb3IoInNlbV93YWl0Iik7Cj4gKyAgICAgIGV4aXQoMSk7 Cj4gKyAgICB9Cj4gKyAgICAvKiBjYWxjdWxhdGUgYW5kIHVwZGF0ZSBlbGFwc2VkIHRpbWUgKi8K PiArICAgIHRpbWVzcGVjbXVsKHRpY2tsZW4sIGZ0X3NoYXJlZC0+dGlja3MsICZpbmMpOwo+ICsg ICAgdGltZXNwZWNhZGQoJnVzZXJfZmFrZWRfdGltZV90aW1lc3BlYywgJmluYywgdHApOwo+ICsg ICAgKGZ0X3NoYXJlZC0+dGlja3MpKys7Cj4gKyAgICAvKiB1bmxvY2sgKi8KPiArICAgIGlmIChz ZW1fcG9zdChzaGFyZWRfc2VtKSA9PSAtMSkKPiArICAgIHsKPiArICAgICAgcGVycm9yKCJzZW1f cG9zdCIpOwo+ICsgICAgICBleGl0KDEpOwo+ICsgICAgfQo+ICsgIH0KPiArfQo+ICsKPiArCj4g Ky8qCj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICogICAgICBTYXZpbmcgJiBsb2FkaW5n IHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gU0FWRQo+ ICsgKiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Cj4gKyAqLwo+ICsKPiArc3RhdGljIHZvaWQgc2F2ZV90 aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHApCj4gK3sKPiArICBpZiAoKHNoYXJlZF9zZW0gIT0gTlVM TCkgJiYgKG91dGZpbGUgIT0gLTEpKQo+ICsgIHsKPiArICAgIHN0cnVjdCBzYXZlZF90aW1lc3Rh bXAgdGltZV93cml0ZTsKPiArICAgIHNzaXplX3Qgd3JpdHRlbjsKPiArICAgIHNpemVfdCBuID0g MDsKPiArCj4gKyAgICB0aW1lX3dyaXRlLnNlYyA9IGh0b2JlNjQodHAtPnR2X3NlYyk7Cj4gKyAg ICB0aW1lX3dyaXRlLm5zZWMgPSBodG9iZTY0KHRwLT50dl9uc2VjKTsKPiArCj4gKyAgICAvKiBs b2NrICovCj4gKyAgICBpZiAoc2VtX3dhaXQoc2hhcmVkX3NlbSkgPT0gLTEpCj4gKyAgICB7Cj4g KyAgICAgIHBlcnJvcigic2VtX3dhaXQiKTsKPiArICAgICAgZXhpdCgxKTsKPiArICAgIH0KPiAr Cj4gKyAgICBsc2VlayhvdXRmaWxlLCAwLCBTRUVLX0VORCk7Cj4gKyAgICBkbwo+ICsgICAgewo+ ICsgICAgICB3cml0dGVuID0gd3JpdGUob3V0ZmlsZSwgJigoKGNoYXIqKSZ0aW1lX3dyaXRlKVtu XSksIHNpemVvZih0aW1lX3dyaXRlKSAtIG4pOwo+ICsgICAgfQo+ICsgICAgd2hpbGUgKCgod3Jp dHRlbiA9PSAtMSkgJiYgKGVycm5vID09IEVJTlRSKSkgfHwKPiArICAgICAgICAgICAgKHNpemVv Zih0aW1lX3dyaXRlKSA8IChuICs9IHdyaXR0ZW4pKSk7Cj4gKwo+ICsgICAgaWYgKCh3cml0dGVu ID09IC0xKSB8fCAobiA8IHNpemVvZih0aW1lX3dyaXRlKSkpCj4gKyAgICB7Cj4gKyAgICAgIHBl cnJvcigiU2F2aW5nIHRpbWVzdGFtcCB0byBmaWxlIGZhaWxlZCIpOwo+ICsgICAgfQo+ICsKPiAr ICAgIC8qIHVubG9jayAqLwo+ICsgICAgaWYgKHNlbV9wb3N0KHNoYXJlZF9zZW0pID09IC0xKQo+ ICsgICAgewo+ICsgICAgICBwZXJyb3IoInNlbV9wb3N0Iik7Cj4gKyAgICAgIGV4aXQoMSk7Cj4g KyAgICB9Cj4gKyAgfQo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBQcm92aWRlIGZha2VkIHRpbWUgZnJv bSBmaWxlLgo+ICsgKiBAcmV0dXJuIHRpbWUgaXMgc2V0IGZyb20gZmlsZW4KPiArICovCj4gK3N0 YXRpYyBib29sIGxvYWRfdGltZShzdHJ1Y3QgdGltZXNwZWMgKnRwKQo+ICt7Cj4gKyAgYm9vbCBy ZXQgPSBmYWxzZTsKPiArICBpZiAoKHNoYXJlZF9zZW0gIT0gTlVMTCkgJiYgKGluZmlsZV9zZXQp KQo+ICsgIHsKPiArICAgIC8qIGxvY2sgKi8KPiArICAgIGlmIChzZW1fd2FpdChzaGFyZWRfc2Vt KSA9PSAtMSkKPiArICAgIHsKPiArICAgICAgcGVycm9yKCJzZW1fd2FpdCIpOwo+ICsgICAgICBl eGl0KDEpOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICgoc2l6ZW9mKHN0c3NbMF0pICogKGZ0X3No YXJlZC0+ZmlsZV9pZHggKyAxKSkgPiBpbmZpbGVfc2l6ZSkKPiArICAgIHsKPiArICAgICAgLyog d2UgYXJlIG91dCBvZiB0aW1zdGFtcHMgdG8gcmVwbGF5LCByZXR1cm4gdG8gZmFraW5nIHRpbWUg YnkgcnVsZXMKPiArICAgICAgICogdXNpbmcgbGFzdCB0aW1lc3RhbXAgZnJvbSBmaWxlIGFzIHRo ZSB1c2VyIHByb3ZpZGVkIHRpbWVzdGFtcCAqLwo+ICsgICAgICB0aW1lc3BlY19mcm9tX3NhdmVk KCZ1c2VyX2Zha2VkX3RpbWVfdGltZXNwZWMsICZzdHNzWyhpbmZpbGVfc2l6ZSAvIHNpemVvZihz dHNzWzBdKSkgLSAxIF0pOwo+ICsKPiArICAgICAgaWYgKGZ0X3NoYXJlZC0+dGlja3MgPT0gMCkK PiArICAgICAgewo+ICsgICAgICAgIC8qIHdlIHNldCBzaGFyZWQgbWVtb3J5IHRvIHN0b3AgdXNp bmcgaW5maWxlICovCj4gKyAgICAgICAgZnRfc2hhcmVkLT50aWNrcyA9IDE7Cj4gKyAgICAgICAg c3lzdGVtX3RpbWVfZnJvbV9zeXN0ZW0oJmZ0cGxfc3RhcnR0aW1lKTsKPiArICAgICAgICBmdF9z aGFyZWQtPnN0YXJ0X3RpbWUgPSBmdHBsX3N0YXJ0dGltZTsKPiArICAgICAgfQo+ICsgICAgICBl bHNlCj4gKyAgICAgIHsKPiArICAgICAgICBmdHBsX3N0YXJ0dGltZSA9IGZ0X3NoYXJlZC0+c3Rh cnRfdGltZTsKPiArICAgICAgfQo+ICsKPiArICAgICAgbXVubWFwKHN0c3MsIGluZmlsZV9zaXpl KTsKPiArICAgICAgaW5maWxlX3NldCA9IGZhbHNlOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsg ICAgewo+ICsgICAgICB0aW1lc3BlY19mcm9tX3NhdmVkKHRwLCAmc3Rzc1tmdF9zaGFyZWQtPmZp bGVfaWR4XSk7Cj4gKyAgICAgIGZ0X3NoYXJlZC0+ZmlsZV9pZHgrKzsKPiArICAgICAgcmV0ID0g dHJ1ZTsKPiArICAgIH0KPiArCj4gKyAgICAvKiB1bmxvY2sgKi8KPiArICAgIGlmIChzZW1fcG9z dChzaGFyZWRfc2VtKSA9PSAtMSkKPiArICAgIHsKPiArICAgICAgcGVycm9yKCJzZW1fcG9zdCIp Owo+ICsgICAgICBleGl0KDEpOwo+ICsgICAgfQo+ICsgIH0KPiArICByZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICsKPiArLyoKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKiAgICAgIEZha2Vk IHN5c3RlbSBmdW5jdGlvbnM6IGZpbGUgcmVsYXRlZCAgICAgICAgICAgICAgICAgICAgID09PSBG QUtFKEZJTEUpCj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICovCj4gKwo+ICsjaWZkZWYg RkFLRV9TVEFUCj4gKwo+ICsjaWZuZGVmIE5PX0FURklMRQo+ICsjaWZuZGVmIF9BVEZJTEVfU09V UkNFCj4gKyNkZWZpbmUgX0FURklMRV9TT1VSQ0UKPiArI2VuZGlmCj4gKyNpbmNsdWRlIDxmY250 bC5oPiAvKiBEZWZpbml0aW9uIG9mIEFUXyogY29uc3RhbnRzICovCj4gKyNlbmRpZgo+ICsKPiAr I2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gKwo+ICtzdGF0aWMgaW50IGZha2Vfc3RhdF9kaXNhYmxl ZCA9IDA7Cj4gKwo+ICsjZGVmaW5lIEZBS0VfU1RSVUNUX1NUQVRfVElNRSh3aGljaCkgeyAgICAg ICAgICAgICAgICBcCj4gKyAgICBzdHJ1Y3QgdGltZXNwZWMgdCA9IHtidWYtPnN0XyMjd2hpY2gj I3RpbWUsICAgICAgIFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi0+c3RfIyN3aGlj aCMjdGltZW5zZWN9OyAgXAo+ICsgICAgZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1F LCAmdCk7ICAgICAgICAgICBcCj4gKyAgICBidWYtPnN0XyMjd2hpY2gjI3RpbWUgPSB0LnR2X3Nl YzsgICAgICAgICAgICAgICAgIFwKPiArICAgIGJ1Zi0+c3RfIyN3aGljaCMjdGltZW5zZWMgPSB0 LnR2X25zZWM7ICAgICAgICAgICAgXAo+ICsgIH0gd2hpbGUgKDApCj4gKwo+ICtzdGF0aWMgaW5s aW5lIHZvaWQgZmFrZV9zdGF0YnVmIChzdHJ1Y3Qgc3RhdCAqYnVmKSB7Cj4gKyNpZm5kZWYgc3Rf YXRpbWUKPiArICBGQUtFX1NUUlVDVF9TVEFUX1RJTUUoYyk7Cj4gKyAgRkFLRV9TVFJVQ1RfU1RB VF9USU1FKGEpOwo+ICsgIEZBS0VfU1RSVUNUX1NUQVRfVElNRShtKTsKPiArI2Vsc2UKPiArICBm YWtlX2Nsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZidWYtPnN0X2N0aW0pOwo+ICsgIGZh a2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmJ1Zi0+c3RfYXRpbSk7Cj4gKyAgZmFr ZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmYnVmLT5zdF9tdGltKTsKPiArI2VuZGlm Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBmYWtlX3N0YXQ2NGJ1ZiAoc3RydWN0IHN0 YXQ2NCAqYnVmKSB7Cj4gKyNpZm5kZWYgc3RfYXRpbWUKPiArICBGQUtFX1NUUlVDVF9TVEFUX1RJ TUUoYyk7Cj4gKyAgRkFLRV9TVFJVQ1RfU1RBVF9USU1FKGEpOwo+ICsgIEZBS0VfU1RSVUNUX1NU QVRfVElNRShtKTsKPiArI2Vsc2UKPiArICBmYWtlX2Nsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJ TUUsICZidWYtPnN0X2N0aW0pOwo+ICsgIGZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElN RSwgJmJ1Zi0+c3RfYXRpbSk7Cj4gKyAgZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1F LCAmYnVmLT5zdF9tdGltKTsKPiArI2VuZGlmCj4gK30KPiArCj4gKy8qIENvbnRyaWJ1dGVkIGJ5 IFBoaWxpcHAgSGFjaHRtYW5uIGluIHZlcnNpb24gMC42ICovCj4gK2ludCBfX3hzdGF0IChpbnQg dmVyLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqYnVmKQo+ICt7Cj4gKyAgaWYgKCFp bml0aWFsaXplZCkKPiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4gKyAgaWYgKE5V TEwgPT0gcmVhbF9zdGF0KQo+ICsgIHsgLyogZGxzeW0oKSBmYWlsZWQgKi8KPiArI2lmZGVmIERF QlVHCj4gKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBwcm9ibGVtOiBvcmln aW5hbCBzdGF0KCkgbm90IGZvdW5kLlxuIik7Cj4gKyNlbmRpZgo+ICsgICAgcmV0dXJuIC0xOyAv KiBwcm9wYWdhdGUgZXJyb3IgdG8gY2FsbGVyICovCj4gKyAgfQo+ICsKPiArICBpbnQgcmVzdWx0 Owo+ICsgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9IHJlYWxfc3RhdCh2ZXIsIHBhdGgsIGJ1Zikp Owo+ICsgIGlmIChyZXN1bHQgPT0gLTEpCj4gKyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0K PiArCj4gKyAgIGlmIChidWYgIT0gTlVMTCkKPiArICAgewo+ICsgICAgIGlmICghZmFrZV9zdGF0 X2Rpc2FibGVkKQo+ICsgICAgIHsKPiArICAgICAgIGZha2Vfc3RhdGJ1ZihidWYpOwo+ICsgICAg IH0KPiArICAgfQo+ICsKPiArICByZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICsvKiBDb250cmli dXRlZCBieSBQaGlsaXBwIEhhY2h0bWFubiBpbiB2ZXJzaW9uIDAuNiAqLwo+ICtpbnQgX19meHN0 YXQgKGludCB2ZXIsIGludCBmaWxkZXMsIHN0cnVjdCBzdGF0ICpidWYpCj4gK3sKPiArICBpZiAo IWluaXRpYWxpemVkKQo+ICsgIHsKPiArICAgIGZ0cGxfaW5pdCgpOwo+ICsgIH0KPiArICBpZiAo TlVMTCA9PSByZWFsX2ZzdGF0KQo+ICsgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCj4gKyNpZmRl ZiBERUJVRwo+ICsgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxlbTog b3JpZ2luYWwgZnN0YXQoKSBub3QgZm91bmQuXG4iKTsKPiArI2VuZGlmCj4gKyAgICByZXR1cm4g LTE7IC8qIHByb3BhZ2F0ZSBlcnJvciB0byBjYWxsZXIgKi8KPiArICB9Cj4gKwo+ICsgIGludCBy ZXN1bHQ7Cj4gKyAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gcmVhbF9mc3RhdCh2ZXIsIGZpbGRl cywgYnVmKSk7Cj4gKyAgaWYgKHJlc3VsdCA9PSAtMSkKPiArICB7Cj4gKyAgICByZXR1cm4gLTE7 Cj4gKyAgfQo+ICsKPiArICBpZiAoYnVmICE9IE5VTEwpCj4gKyAgewo+ICsgICAgaWYgKCFmYWtl X3N0YXRfZGlzYWJsZWQpCj4gKyAgICB7Cj4gKyAgICAgIGZha2Vfc3RhdGJ1ZihidWYpOwo+ICsg ICAgfQo+ICsgIH0KPiArICByZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICsvKiBBZGRlZCBpbiB2 MC44IGFzIHN1Z2dlc3RlZCBieSBEYW5pZWwgS2FobiBHaWxsbW9yICovCj4gKyNpZm5kZWYgTk9f QVRGSUxFCj4gK2ludCBfX2Z4c3RhdGF0KGludCB2ZXIsIGludCBmaWxkZXMsIGNvbnN0IGNoYXIg KmZpbGVuYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmLCBpbnQgZmxhZykKPiArewo+ICsgIGlmICghaW5p dGlhbGl6ZWQpCj4gKyAgewo+ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChOVUxM ID09IHJlYWxfZnN0YXRhdCkKPiArICB7IC8qIGRsc3ltKCkgZmFpbGVkICovCj4gKyNpZmRlZiBE RUJVRwo+ICsgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxlbTogb3Jp Z2luYWwgZnN0YXRhdCgpIG5vdCBmb3VuZC5cbiIpOwo+ICsjZW5kaWYKPiArICAgIHJldHVybiAt MTsgLyogcHJvcGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLwo+ICsgIH0KPiArCj4gKyAgaW50IHJl c3VsdDsKPiArICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSByZWFsX2ZzdGF0YXQodmVyLCBmaWxk ZXMsIGZpbGVuYW1lLCBidWYsIGZsYWcpKTsKPiArICBpZiAocmVzdWx0ID09IC0xKQo+ICsgIHsK PiArICAgIHJldHVybiAtMTsKPiArICB9Cj4gKwo+ICsgIGlmIChidWYgIT0gTlVMTCkKPiArICB7 Cj4gKyAgICBpZiAoIWZha2Vfc3RhdF9kaXNhYmxlZCkKPiArICAgIHsKPiArICAgICAgZmFrZV9z dGF0YnVmKGJ1Zik7Cj4gKyAgICB9Cj4gKyAgfQo+ICsgIHJldHVybiByZXN1bHQ7Cj4gK30KPiAr I2VuZGlmCj4gKwo+ICsvKiBDb250cmlidXRlZCBieSBQaGlsaXBwIEhhY2h0bWFubiBpbiB2ZXJz aW9uIDAuNiAqLwo+ICtpbnQgX19seHN0YXQgKGludCB2ZXIsIGNvbnN0IGNoYXIgKnBhdGgsIHN0 cnVjdCBzdGF0ICpidWYpCj4gK3sKPiArICBpZiAoIWluaXRpYWxpemVkKQo+ICsgIHsKPiArICAg IGZ0cGxfaW5pdCgpOwo+ICsgIH0KPiArICBpZiAoTlVMTCA9PSByZWFsX2xzdGF0KQo+ICsgIHsg IC8qIGRsc3ltKCkgZmFpbGVkICovCj4gKyNpZmRlZiBERUJVRwo+ICsgICAgKHZvaWQpIGZwcmlu dGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxlbTogb3JpZ2luYWwgbHN0YXQoKSBub3QgZm91bmQu XG4iKTsKPiArI2VuZGlmCj4gKyAgICByZXR1cm4gLTE7IC8qIHByb3BhZ2F0ZSBlcnJvciB0byBj YWxsZXIgKi8KPiArICB9Cj4gKwo+ICsgIGludCByZXN1bHQ7Cj4gKyAgRE9OVF9GQUtFX1RJTUUo cmVzdWx0ID0gcmVhbF9sc3RhdCh2ZXIsIHBhdGgsIGJ1ZikpOwo+ICsgIGlmIChyZXN1bHQgPT0g LTEpCj4gKyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArCj4gKyAgaWYgKGJ1ZiAhPSBO VUxMKQo+ICsgIHsKPiArICAgIGlmICghZmFrZV9zdGF0X2Rpc2FibGVkKQo+ICsgICAgewo+ICsg ICAgICBmYWtlX3N0YXRidWYoYnVmKTsKPiArICAgIH0KPiArICB9Cj4gKyAgcmV0dXJuIHJlc3Vs dDsKPiArfQo+ICsKPiArLyogQ29udHJpYnV0ZWQgYnkgUGhpbGlwcCBIYWNodG1hbm4gaW4gdmVy c2lvbiAwLjYgKi8KPiAraW50IF9feHN0YXQ2NCAoaW50IHZlciwgY29uc3QgY2hhciAqcGF0aCwg c3RydWN0IHN0YXQ2NCAqYnVmKQo+ICt7Cj4gKyAgaWYgKCFpbml0aWFsaXplZCkKPiArICB7Cj4g KyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4gKyAgaWYgKE5VTEwgPT0gcmVhbF9zdGF0NjQpCj4g KyAgeyAvKiBkbHN5bSgpIGZhaWxlZCAqLwo+ICsjaWZkZWYgREVCVUcKPiArICAgICh2b2lkKSBm cHJpbnRmKHN0ZGVyciwgImZha2V0aW1lIHByb2JsZW06IG9yaWdpbmFsIHN0YXQoKSBub3QgZm91 bmQuXG4iKTsKPiArI2VuZGlmCj4gKyAgICByZXR1cm4gLTE7IC8qIHByb3BhZ2F0ZSBlcnJvciB0 byBjYWxsZXIgKi8KPiArICB9Cj4gKwo+ICsgIGludCByZXN1bHQ7Cj4gKyAgRE9OVF9GQUtFX1RJ TUUocmVzdWx0ID0gcmVhbF9zdGF0NjQodmVyLCBwYXRoLCBidWYpKTsKPiArICBpZiAocmVzdWx0 ID09IC0xKQo+ICsgIHsKPiArICAgIHJldHVybiAtMTsKPiArICB9Cj4gKwo+ICsgIGlmIChidWYg IT0gTlVMTCkKPiArICB7Cj4gKyAgICBpZiAoIWZha2Vfc3RhdF9kaXNhYmxlZCkKPiArICAgIHsK PiArICAgICAgZmFrZV9zdGF0NjRidWYoYnVmKTsKPiArICAgIH0KPiArICB9Cj4gKyAgcmV0dXJu IHJlc3VsdDsKPiArfQo+ICsKPiArLyogQ29udHJpYnV0ZWQgYnkgUGhpbGlwcCBIYWNodG1hbm4g aW4gdmVyc2lvbiAwLjYgKi8KPiAraW50IF9fZnhzdGF0NjQgKGludCB2ZXIsIGludCBmaWxkZXMs IHN0cnVjdCBzdGF0NjQgKmJ1ZikKPiArewo+ICsgIGlmICghaW5pdGlhbGl6ZWQpCj4gKyAgewo+ ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChOVUxMID09IHJlYWxfZnN0YXQ2NCkK PiArICB7ICAvKiBkbHN5bSgpIGZhaWxlZCAqLwo+ICsjaWZkZWYgREVCVUcKPiArICAgICh2b2lk KSBmcHJpbnRmKHN0ZGVyciwgImZha2V0aW1lIHByb2JsZW06IG9yaWdpbmFsIGZzdGF0KCkgbm90 IGZvdW5kLlxuIik7Cj4gKyNlbmRpZgo+ICsgICAgcmV0dXJuIC0xOyAvKiBwcm9wYWdhdGUgZXJy b3IgdG8gY2FsbGVyICovCj4gKyAgfQo+ICsKPiArICBpbnQgcmVzdWx0Owo+ICsgIERPTlRfRkFL RV9USU1FKHJlc3VsdCA9IHJlYWxfZnN0YXQ2NCh2ZXIsIGZpbGRlcywgYnVmKSk7Cj4gKyAgaWYg KHJlc3VsdCA9PSAtMSkKPiArICB7Cj4gKyAgICByZXR1cm4gLTE7Cj4gKyAgfQo+ICsKPiArICBp ZiAoYnVmICE9IE5VTEwpCj4gKyAgewo+ICsgICAgaWYgKCFmYWtlX3N0YXRfZGlzYWJsZWQpCj4g KyAgICB7Cj4gKyAgICAgIGZha2Vfc3RhdDY0YnVmKGJ1Zik7Cj4gKyAgICB9Cj4gKyAgfQo+ICsg IHJldHVybiByZXN1bHQ7Cj4gK30KPiArCj4gKy8qIEFkZGVkIGluIHYwLjggYXMgc3VnZ2VzdGVk IGJ5IERhbmllbCBLYWhuIEdpbGxtb3IgKi8KPiArI2lmbmRlZiBOT19BVEZJTEUKPiAraW50IF9f ZnhzdGF0YXQ2NCAoaW50IHZlciwgaW50IGZpbGRlcywgY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0 cnVjdCBzdGF0NjQgKmJ1ZiwgaW50IGZsYWcpCj4gK3sKPiArICBpZiAoIWluaXRpYWxpemVkKQo+ ICsgIHsKPiArICAgIGZ0cGxfaW5pdCgpOwo+ICsgIH0KPiArICBpZiAoTlVMTCA9PSByZWFsX2Zz dGF0YXQ2NCkKPiArICB7ICAvKiBkbHN5bSgpIGZhaWxlZCAqLwo+ICsjaWZkZWYgREVCVUcKPiAr ICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImZha2V0aW1lIHByb2JsZW06IG9yaWdpbmFsIGZz dGF0YXQ2NCgpIG5vdCBmb3VuZC5cbiIpOwo+ICsjZW5kaWYKPiArICAgIHJldHVybiAtMTsgLyog cHJvcGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLwo+ICsgIH0KPiArCj4gKyAgaW50IHJlc3VsdDsK PiArICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSByZWFsX2ZzdGF0YXQ2NCh2ZXIsIGZpbGRlcywg ZmlsZW5hbWUsIGJ1ZiwgZmxhZykpOwo+ICsgIGlmIChyZXN1bHQgPT0gLTEpCj4gKyAgewo+ICsg ICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArCj4gKyAgaWYgKGJ1ZiAhPSBOVUxMKQo+ICsgIHsKPiAr ICAgIGlmICghZmFrZV9zdGF0X2Rpc2FibGVkKQo+ICsgICAgewo+ICsgICAgICBmYWtlX3N0YXQ2 NGJ1ZihidWYpOwo+ICsgICAgfQo+ICsgIH0KPiArICByZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKyNl bmRpZgo+ICsKPiArLyogQ29udHJpYnV0ZWQgYnkgUGhpbGlwcCBIYWNodG1hbm4gaW4gdmVyc2lv biAwLjYgKi8KPiAraW50IF9fbHhzdGF0NjQgKGludCB2ZXIsIGNvbnN0IGNoYXIgKnBhdGgsIHN0 cnVjdCBzdGF0NjQgKmJ1ZikKPiArewo+ICsgIGlmICghaW5pdGlhbGl6ZWQpCj4gKyAgewo+ICsg ICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChOVUxMID09IHJlYWxfbHN0YXQ2NCkKPiAr ICB7ICAvKiBkbHN5bSgpIGZhaWxlZCAqLwo+ICsjaWZkZWYgREVCVUcKPiArICAgICh2b2lkKSBm cHJpbnRmKHN0ZGVyciwgImZha2V0aW1lIHByb2JsZW06IG9yaWdpbmFsIGxzdGF0KCkgbm90IGZv dW5kLlxuIik7Cj4gKyNlbmRpZgo+ICsgICAgcmV0dXJuIC0xOyAvKiBwcm9wYWdhdGUgZXJyb3Ig dG8gY2FsbGVyICovCj4gKyAgfQo+ICsKPiArICBpbnQgcmVzdWx0Owo+ICsgIERPTlRfRkFLRV9U SU1FKHJlc3VsdCA9IHJlYWxfbHN0YXQ2NCh2ZXIsIHBhdGgsIGJ1ZikpOwo+ICsgIGlmIChyZXN1 bHQgPT0gLTEpCj4gKyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArCj4gKyAgaWYgKGJ1 ZiAhPSBOVUxMKQo+ICsgIHsKPiArICAgIGlmICghZmFrZV9zdGF0X2Rpc2FibGVkKQo+ICsgICAg ewo+ICsgICAgICBmYWtlX3N0YXQ2NGJ1ZihidWYpOwo+ICsgICAgfQo+ICsgIH0KPiArICByZXR1 cm4gcmVzdWx0Owo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArLyoKPiArICogICAgICA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQo+ICsgKiAgICAgIEZha2VkIHN5c3RlbSBmdW5jdGlvbnM6IHNsZWVwL2FsYXJtL3BvbGwv dGltZXIgcmVsYXRlZCAgPT09IEZBS0UoU0xFRVApCj4gKyAqICAgICAgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K PiArICogICAgICBDb250cmlidXRlZCBieSBCYWxpbnQgUmVjemV5IGluIHYwLjkuNQo+ICsgKi8K PiArCj4gKyNpZmRlZiBGQUtFX1NMRUVQCj4gKy8qCj4gKyAqIEZha2VkIG5hbm9zbGVlcCgpCj4g KyAqLwo+ICtpbnQgbmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVxLCBzdHJ1Y3Qg dGltZXNwZWMgKnJlbSkKPiArewo+ICsgIGludCByZXN1bHQ7Cj4gKyAgc3RydWN0IHRpbWVzcGVj IHJlYWxfcmVxOwo+ICsKPiArICBpZiAoIWluaXRpYWxpemVkKQo+ICsgIHsKPiArICAgIGZ0cGxf aW5pdCgpOwo+ICsgIH0KPiArICBpZiAocmVhbF9uYW5vc2xlZXAgPT0gTlVMTCkKPiArICB7Cj4g KyAgICByZXR1cm4gLTE7Cj4gKyAgfQo+ICsgIGlmIChyZXEgIT0gTlVMTCkKPiArICB7Cj4gKyAg ICBpZiAodXNlcl9yYXRlX3NldCAmJiAhZG9udF9mYWtlKQo+ICsgICAgewo+ICsgICAgICB0aW1l c3BlY211bChyZXEsIDEuMCAvIHVzZXJfcmF0ZSwgJnJlYWxfcmVxKTsKPiArICAgIH0KPiArICAg IGVsc2UKPiArICAgIHsKPiArICAgICAgcmVhbF9yZXEgPSAqcmVxOwo+ICsgICAgfQo+ICsgIH0K PiArICBlbHNlCj4gKyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArCj4gKyAgRE9OVF9G QUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX25hbm9zbGVlcCkoJnJlYWxfcmVxLCByZW0pKTsKPiAr ICBpZiAocmVzdWx0ID09IC0xKQo+ICsgIHsKPiArICAgIHJldHVybiByZXN1bHQ7Cj4gKyAgfQo+ ICsKPiArICAvKiBmYWtlIHJldHVybmVkIHBhcnRzICovCj4gKyAgaWYgKChyZW0gIT0gTlVMTCkg JiYgKChyZW0tPnR2X3NlYyAhPSAwKSB8fCAocmVtLT50dl9uc2VjICE9IDApKSkKPiArICB7Cj4g KyAgICBpZiAodXNlcl9yYXRlX3NldCAmJiAhZG9udF9mYWtlKQo+ICsgICAgewo+ICsgICAgICB0 aW1lc3BlY211bChyZW0sIHVzZXJfcmF0ZSwgcmVtKTsKPiArICAgIH0KPiArICB9Cj4gKyAgLyog cmV0dXJuIHRoZSByZXN1bHQgdG8gdGhlIGNhbGxlciAqLwo+ICsgIHJldHVybiByZXN1bHQ7Cj4g K30KPiArCj4gKy8qCj4gKyAqIEZha2VkIHVzbGVlcCgpCj4gKyAqLwo+ICtpbnQgdXNsZWVwKHVz ZWNvbmRzX3QgdXNlYykKPiArewo+ICsgIGludCByZXN1bHQ7Cj4gKwo+ICsgIGlmICghaW5pdGlh bGl6ZWQpCj4gKyAgewo+ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmICh1c2VyX3Jh dGVfc2V0ICYmICFkb250X2Zha2UpCj4gKyAgewo+ICsgICAgc3RydWN0IHRpbWVzcGVjIHJlYWxf cmVxOwo+ICsKPiArICAgIGlmIChyZWFsX25hbm9zbGVlcCA9PSBOVUxMKQo+ICsgICAgewo+ICsg ICAgICAvKiBmYWxsIGJhY2sgdG8gdXNsZWVwKCkgKi8KPiArICAgICAgaWYgKHJlYWxfdXNsZWVw ID09IE5VTEwpCj4gKyAgICAgIHsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICAgIH0KPiAr ICAgICAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX3VzbGVlcCkoKDEuMCAvIHVzZXJf cmF0ZSkgKiB1c2VjKSk7Cj4gKyAgICAgIHJldHVybiByZXN1bHQ7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcmVhbF9yZXEudHZfc2VjID0gdXNlYyAvIDEwMDAwMDA7Cj4gKyAgICByZWFsX3JlcS50dl9u c2VjID0gKHVzZWMgJSAxMDAwMDAwKSAqIDEwMDA7Cj4gKyAgICB0aW1lc3BlY211bCgmcmVhbF9y ZXEsIDEuMCAvIHVzZXJfcmF0ZSwgJnJlYWxfcmVxKTsKPiArICAgIERPTlRfRkFLRV9USU1FKHJl c3VsdCA9ICgqcmVhbF9uYW5vc2xlZXApKCZyZWFsX3JlcSwgTlVMTCkpOwo+ICsgIH0KPiArICBl bHNlCj4gKyAgewo+ICsgICAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX3VzbGVlcCko dXNlYykpOwo+ICsgIH0KPiArICByZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBG YWtlZCBzbGVlcCgpCj4gKyAqLwo+ICt1bnNpZ25lZCBpbnQgc2xlZXAodW5zaWduZWQgaW50IHNl Y29uZHMpCj4gK3sKPiArICBpZiAoIWluaXRpYWxpemVkKQo+ICsgIHsKPiArICAgIGZ0cGxfaW5p dCgpOwo+ICsgIH0KPiArICBpZiAodXNlcl9yYXRlX3NldCAmJiAhZG9udF9mYWtlKQo+ICsgIHsK PiArICAgIGlmIChyZWFsX25hbm9zbGVlcCA9PSBOVUxMKQo+ICsgICAgewo+ICsgICAgICAvKiBm YWxsIGJhY2sgdG8gc2xlZXAgKi8KPiArICAgICAgdW5zaWduZWQgaW50IHJldDsKPiArICAgICAg aWYgKHJlYWxfc2xlZXAgPT0gTlVMTCkKPiArICAgICAgewo+ICsgICAgICAgIHJldHVybiAwOwo+ ICsgICAgICB9Cj4gKyAgICAgIERPTlRfRkFLRV9USU1FKHJldCA9ICgqcmVhbF9zbGVlcCkoKDEu MCAvIHVzZXJfcmF0ZSkgKiBzZWNvbmRzKSk7Cj4gKyAgICAgIHJldHVybiAodXNlcl9yYXRlX3Nl dCAmJiAhZG9udF9mYWtlKT8odXNlcl9yYXRlICogcmV0KTpyZXQ7Cj4gKyAgICB9Cj4gKyAgICBl bHNlCj4gKyAgICB7Cj4gKyAgICAgIGludCByZXN1bHQ7Cj4gKyAgICAgIHN0cnVjdCB0aW1lc3Bl YyByZWFsX3JlcSA9IHtzZWNvbmRzLCAwfSwgcmVtOwo+ICsgICAgICB0aW1lc3BlY211bCgmcmVh bF9yZXEsIDEuMCAvIHVzZXJfcmF0ZSwgJnJlYWxfcmVxKTsKPiArICAgICAgRE9OVF9GQUtFX1RJ TUUocmVzdWx0ID0gKCpyZWFsX25hbm9zbGVlcCkoJnJlYWxfcmVxLCAmcmVtKSk7Cj4gKyAgICAg IGlmIChyZXN1bHQgPT0gLTEpCj4gKyAgICAgIHsKPiArICAgICAgICByZXR1cm4gMDsKPiArICAg ICAgfQo+ICsKPiArICAgICAgLyogZmFrZSByZXR1cm5lZCBwYXJ0cyAqLwo+ICsgICAgICBpZiAo KHJlbS50dl9zZWMgIT0gMCkgfHwgKHJlbS50dl9uc2VjICE9IDApKQo+ICsgICAgICB7Cj4gKyAg ICAgICAgdGltZXNwZWNtdWwoJnJlbSwgdXNlcl9yYXRlLCAmcmVtKTsKPiArICAgICAgfQo+ICsg ICAgICAvKiByZXR1cm4gdGhlIHJlc3VsdCB0byB0aGUgY2FsbGVyICovCj4gKyAgICAgIHJldHVy biByZW0udHZfc2VjOwo+ICsgICAgfQo+ICsgIH0KPiArICBlbHNlCj4gKyAgewo+ICsgICAgLyog bm8gbmVlZCB0byBmYWtlIGFueXRoaW5nICovCj4gKyAgICB1bnNpZ25lZCBpbnQgcmV0Owo+ICsg ICAgRE9OVF9GQUtFX1RJTUUocmV0ID0gKCpyZWFsX3NsZWVwKShzZWNvbmRzKSk7Cj4gKyAgICBy ZXR1cm4gcmV0Owo+ICsgIH0KPiArfQo+ICsKPiArLyoKPiArICogRmFrZWQgYWxhcm0oKQo+ICsg KiBAbm90ZSBkdWUgdG8gcm91bmRpbmcgYWxhcm0oMikgd2l0aCBmYWtldGltZSAtZiAnKzAgeDcn IHdvbid0IHdhaXQgMi83Cj4gKyAqIHdhbGwgY2xvY2sgc2Vjb25kcyBidXQgMCBzZWNvbmRzCj4g KyAqLwo+ICt1bnNpZ25lZCBpbnQgYWxhcm0odW5zaWduZWQgaW50IHNlY29uZHMpCj4gK3sKPiAr ICB1bnNpZ25lZCBpbnQgcmV0Owo+ICsgIHVuc2lnbmVkIGludCBzZWNvbmRzX3JlYWwgPSAodXNl cl9yYXRlX3NldCAmJiAhZG9udF9mYWtlKT8oKDEuMCAvIHVzZXJfcmF0ZSkgKiBzZWNvbmRzKTpz ZWNvbmRzOwo+ICsKPiArICBpZiAoIWluaXRpYWxpemVkKQo+ICsgIHsKPiArICAgIGZ0cGxfaW5p dCgpOwo+ICsgIH0KPiArICBpZiAocmVhbF9hbGFybSA9PSBOVUxMKQo+ICsgIHsKPiArICAgIHJl dHVybiAtMTsKPiArICB9Cj4gKwo+ICsgIERPTlRfRkFLRV9USU1FKHJldCA9ICgqcmVhbF9hbGFy bSkoc2Vjb25kc19yZWFsKSk7Cj4gKyAgcmV0dXJuICh1c2VyX3JhdGVfc2V0ICYmICFkb250X2Zh a2UpPyh1c2VyX3JhdGUgKiByZXQpOnJldDsKPiArfQo+ICsKPiArLyoKPiArICogRmFrZWQgcHBv bGwoKQo+ICsgKi8KPiAraW50IHBwb2xsKHN0cnVjdCBwb2xsZmQgKmZkcywgbmZkc190IG5mZHMs Cj4gKyAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXRfdHMsIGNvbnN0IHNpZ3NldF90 ICpzaWdtYXNrKQo+ICt7Cj4gKyAgc3RydWN0IHRpbWVzcGVjIHJlYWxfdGltZW91dCwgKnJlYWxf dGltZW91dF9wdDsKPiArICBpbnQgcmV0Owo+ICsKPiArICBpZiAoIWluaXRpYWxpemVkKQo+ICsg IHsKPiArICAgIGZ0cGxfaW5pdCgpOwo+ICsgIH0KPiArICBpZiAocmVhbF9wcG9sbCA9PSBOVUxM KQo+ICsgIHsKPiArICAgIHJldHVybiAtMTsKPiArICB9Cj4gKyAgaWYgKHRpbWVvdXRfdHMgIT0g TlVMTCkKPiArICB7Cj4gKyAgICBpZiAodXNlcl9yYXRlX3NldCAmJiAhZG9udF9mYWtlICYmICh0 aW1lb3V0X3RzLT50dl9zZWMgPiAwKSkKPiArICAgIHsKPiArICAgICAgdGltZXNwZWNtdWwodGlt ZW91dF90cywgMS4wIC8gdXNlcl9yYXRlLCAmcmVhbF90aW1lb3V0KTsKPiArICAgICAgcmVhbF90 aW1lb3V0X3B0ID0gJnJlYWxfdGltZW91dDsKPiArICAgIH0KPiArICAgIGVsc2UKPiArICAgIHsK PiArICAgICAgLyogY2FzdCBhd2F5IGNvbnN0bmVzcyAqLwo+ICsgICAgICByZWFsX3RpbWVvdXRf cHQgPSAoc3RydWN0IHRpbWVzcGVjICopdGltZW91dF90czsKPiArICAgIH0KPiArICB9Cj4gKyAg ZWxzZQo+ICsgIHsKPiArICAgIHJlYWxfdGltZW91dF9wdCA9IE5VTEw7Cj4gKyAgfQo+ICsKPiAr ICBET05UX0ZBS0VfVElNRShyZXQgPSAoKnJlYWxfcHBvbGwpKGZkcywgbmZkcywgcmVhbF90aW1l b3V0X3B0LCBzaWdtYXNrKSk7Cj4gKyAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoKPiArICog RmFrZWQgcG9sbCgpCj4gKyAqLwo+ICtpbnQgcG9sbChzdHJ1Y3QgcG9sbGZkICpmZHMsIG5mZHNf dCBuZmRzLCBpbnQgdGltZW91dCkKPiArewo+ICsgIGludCByZXQsIHRpbWVvdXRfcmVhbCA9ICh1 c2VyX3JhdGVfc2V0ICYmICFkb250X2Zha2UgJiYgKHRpbWVvdXQgPiAwKSk/KHRpbWVvdXQgLyB1 c2VyX3JhdGUpOnRpbWVvdXQ7Cj4gKwo+ICsgIGlmICghaW5pdGlhbGl6ZWQpCj4gKyAgewo+ICsg ICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChyZWFsX3BvbGwgPT0gTlVMTCkKPiArICB7 Cj4gKyAgICByZXR1cm4gLTE7Cj4gKyAgfQo+ICsKPiArICBET05UX0ZBS0VfVElNRShyZXQgPSAo KnJlYWxfcG9sbCkoZmRzLCBuZmRzLCB0aW1lb3V0X3JlYWwpKTsKPiArICByZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICsvKgo+ICsgKiBGYWtlZCBzZWxlY3QoKQo+ICsgKi8KPiAraW50IHNlbGVjdChp bnQgbmZkcywgZmRfc2V0ICpyZWFkZmRzLAo+ICsgICAgICAgICAgIGZkX3NldCAqd3JpdGVmZHMs Cj4gKyAgICAgICAgICAgZmRfc2V0ICplcnJvcmZkcywKPiArICAgICAgICAgICBzdHJ1Y3QgdGlt ZXZhbCAqdGltZW91dCkKPiArewo+ICsgIGludCByZXQ7Cj4gKyAgc3RydWN0IHRpbWV2YWwgdGlt ZW91dF9yZWFsOwo+ICsKPiArICBpZiAoIWluaXRpYWxpemVkKQo+ICsgIHsKPiArICAgIGZ0cGxf aW5pdCgpOwo+ICsgIH0KPiArCj4gKyAgaWYgKHJlYWxfc2VsZWN0ID09IE5VTEwpCj4gKyAgewo+ ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArCj4gKyAgaWYgKHRpbWVvdXQgIT0gTlVMTCkKPiAr ICB7Cj4gKyAgICBpZiAodXNlcl9yYXRlX3NldCAmJiAhZG9udF9mYWtlICYmICh0aW1lb3V0LT50 dl9zZWMgPiAwIHx8IHRpbWVvdXQtPnR2X3VzZWMgPiAwKSkKPiArICAgIHsKPiArICAgICAgc3Ry dWN0IHRpbWVzcGVjIHRzOwo+ICsKPiArICAgICAgdHMudHZfc2VjID0gdGltZW91dC0+dHZfc2Vj Owo+ICsgICAgICB0cy50dl9uc2VjID0gdGltZW91dC0+dHZfdXNlYyAqIDEwMDA7Cj4gKwo+ICsg ICAgICB0aW1lc3BlY211bCgmdHMsIDEuMCAvIHVzZXJfcmF0ZSwgJnRzKTsKPiArCj4gKyAgICAg IHRpbWVvdXRfcmVhbC50dl9zZWMgPSB0cy50dl9zZWM7Cj4gKyAgICAgIHRpbWVvdXRfcmVhbC50 dl91c2VjID0gdHMudHZfbnNlYyAvIDEwMDA7Cj4gKyAgICB9Cj4gKyAgICBlbHNlCj4gKyAgICB7 Cj4gKyAgICAgIHRpbWVvdXRfcmVhbC50dl9zZWMgPSB0aW1lb3V0LT50dl9zZWM7Cj4gKyAgICAg IHRpbWVvdXRfcmVhbC50dl91c2VjID0gdGltZW91dC0+dHZfdXNlYzsKPiArICAgIH0KPiArICB9 Cj4gKwo+ICsgIERPTlRfRkFLRV9USU1FKHJldCA9ICgqcmVhbF9zZWxlY3QpKG5mZHMsIHJlYWRm ZHMsIHdyaXRlZmRzLCBlcnJvcmZkcywgdGltZW91dCA9PSBOVUxMID8gdGltZW91dCA6ICZ0aW1l b3V0X3JlYWwpKTsKPiArICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgc2VtX3RpbWVkd2Fp dChzZW1fdCAqc2VtLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmFic190aW1lb3V0KQo+ICt7Cj4g KyAgaW50IHJlc3VsdDsKPiArICBzdHJ1Y3QgdGltZXNwZWMgcmVhbF9hYnNfdGltZW91dCwgKnJl YWxfYWJzX3RpbWVvdXRfcHQ7Cj4gKwo+ICsgIC8qIHNhbml0eSBjaGVjayAqLwo+ICsgIGlmIChh YnNfdGltZW91dCA9PSBOVUxMKQo+ICsgIHsKPiArICAgIHJldHVybiAtMTsKPiArICB9Cj4gKwo+ ICsgIGlmIChOVUxMID09IHJlYWxfc2VtX3RpbWVkd2FpdCkKPiArICB7ICAvKiBkbHN5bSgpIGZh aWxlZCAqLwo+ICsjaWZkZWYgREVCVUcKPiArICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImZh a2V0aW1lIHByb2JsZW06IG9yaWdpbmFsIHNlbV90aW1lZHdhaXQoKSBub3QgZm91bmQuXG4iKTsK PiArI2VuZGlmCj4gKyAgICByZXR1cm4gLTE7IC8qIHByb3BhZ2F0ZSBlcnJvciB0byBjYWxsZXIg Ki8KPiArICB9Cj4gKwo+ICsgIGlmICghZG9udF9mYWtlKQo+ICsgIHsKPiArICAgIHN0cnVjdCB0 aW1lc3BlYyB0ZGlmZiwgdGltZWFkajsKPiArCj4gKyAgICB0aW1lc3BlY3N1YihhYnNfdGltZW91 dCwgJmZ0cGxfc3RhcnR0aW1lLnJlYWwsICZ0ZGlmZik7Cj4gKwo+ICsgICAgaWYgKHVzZXJfcmF0 ZV9zZXQpCj4gKyAgICB7Cj4gKyAgICAgIHRpbWVzcGVjbXVsKCZ0ZGlmZiwgdXNlcl9yYXRlLCAm dGltZWFkaik7Cj4gKyAgICB9Cj4gKyAgICBlbHNlCj4gKyAgICB7Cj4gKyAgICAgICAgdGltZWFk aiA9IHRkaWZmOwo+ICsgICAgfQo+ICsgICAgdGltZXNwZWNhZGQoJnVzZXJfZmFrZWRfdGltZV90 aW1lc3BlYywgJnRpbWVhZGosICZyZWFsX2Fic190aW1lb3V0KTsKPiArICAgIHJlYWxfYWJzX3Rp bWVvdXRfcHQgPSAmcmVhbF9hYnNfdGltZW91dDsKPiArICB9Cj4gKyAgZWxzZQo+ICsgIHsKPiAr ICAgIC8qIGNhc3QgYXdheSBjb25zdG5lc3MgKi8KPiArICAgIHJlYWxfYWJzX3RpbWVvdXRfcHQg PSAoc3RydWN0IHRpbWVzcGVjICopYWJzX3RpbWVvdXQ7Cj4gKyAgfQo+ICsKPiArICBET05UX0ZB S0VfVElNRShyZXN1bHQgPSAoKnJlYWxfc2VtX3RpbWVkd2FpdCkoc2VtLCByZWFsX2Fic190aW1l b3V0X3B0KSk7Cj4gKyAgcmV0dXJuIHJlc3VsdDsKPiArfQo+ICsjZW5kaWYKPiArCj4gKyNpZm5k ZWYgX19BUFBMRV9fCj4gKyNpZmRlZiBGQUtFX1RJTUVSUwo+ICsKPiArLyogdGltZXIgcmVsYXRl ZCBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgKi8KPiArdHlwZWRlZiB1bmlvbiB7Cj4gKyAgaW50 IGludF9tZW1iZXI7Cj4gKyAgdGltZXJfdCB0aW1lcl90X21lbWJlcjsKPiArfSB0aW1lcl90X29y X2ludDsKPiArCj4gKy8qCj4gKyAqIEZha2V0aW1lJ3MgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24n cyBjb21wYXRpYmlsaXR5IG1vZGUKPiArICovCj4gK3R5cGVkZWYgZW51bSB7RlRfQ09NUEFUX0dM SUJDXzJfMiwgRlRfQ09NUEFUX0dMSUJDXzJfM18zfSBmdF9saWJfY29tcGF0Owo+ICsKPiArCj4g Ky8qCj4gKyAqIEZha2VkIHRpbWVyX3NldHRpbWUoKQo+ICsgKiBEb2VzIG5vdCBhZmZlY3QgdGlt ZXIgc3BlZWQgd2hlbiBzdGVwcGluZyBjbG9jayB3aXRoIGVhY2ggdGltZSgpIGNhbGwuCj4gKyAq Lwo+ICtzdGF0aWMgaW50Cj4gK3RpbWVyX3NldHRpbWVfY29tbW9uKHRpbWVyX3Rfb3JfaW50IHRp bWVyaWQsIGludCBmbGFncywKPiArICAgICAgICAgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKm5l d192YWx1ZSwKPiArICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKm9sZF92YWx1ZSwgZnRfbGli X2NvbXBhdCBjb21wYXQpCj4gK3sKPiArICBpbnQgcmVzdWx0Owo+ICsgIHN0cnVjdCBpdGltZXJz cGVjIG5ld19yZWFsOwo+ICsgIHN0cnVjdCBpdGltZXJzcGVjICpuZXdfcmVhbF9wdCA9ICZuZXdf cmVhbDsKPiArCj4gKyAgaWYgKCFpbml0aWFsaXplZCkKPiArICB7Cj4gKyAgICBmdHBsX2luaXQo KTsKPiArICB9Cj4gKyAgaWYgKG5ld192YWx1ZSA9PSBOVUxMKQo+ICsgIHsKPiArICAgIG5ld19y ZWFsX3B0ID0gTlVMTDsKPiArICB9Cj4gKyAgZWxzZSBpZiAoZG9udF9mYWtlKQo+ICsgIHsKPiAr ICAgIC8qIGNhc3QgYXdheSBjb25zdG5lc3MqLwo+ICsgICAgbmV3X3JlYWxfcHQgPSAoc3RydWN0 IGl0aW1lcnNwZWMgKiluZXdfdmFsdWU7Cj4gKyAgfQo+ICsgIGVsc2UKPiArICB7Cj4gKyAgICAv KiBzZXQgaXRfdmFsdWUgKi8KPiArICAgIGlmICgobmV3X3ZhbHVlLT5pdF92YWx1ZS50dl9zZWMg IT0gMCkgfHwKPiArICAgICAgICAobmV3X3ZhbHVlLT5pdF92YWx1ZS50dl9uc2VjICE9IDApKQo+ ICsgICAgewo+ICsgICAgICBpZiAoZmxhZ3MgJiBUSU1FUl9BQlNUSU1FKQo+ICsgICAgICB7Cj4g KyAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRkaWZmLCB0aW1lYWRqOwo+ICsgICAgICAgIHRpbWVz cGVjc3ViKCZuZXdfdmFsdWUtPml0X3ZhbHVlLCAmdXNlcl9mYWtlZF90aW1lX3RpbWVzcGVjLCAm dGltZWFkaik7Cj4gKyAgICAgICAgaWYgKHVzZXJfcmF0ZV9zZXQpCj4gKyAgICAgICAgewo+ICsg ICAgICAgICAgdGltZXNwZWNtdWwoJnRpbWVhZGosIDEuMC91c2VyX3JhdGUsICZ0ZGlmZik7Cj4g KyAgICAgICAgfQo+ICsgICAgICAgIGVsc2UKPiArICAgICAgICB7Cj4gKyAgICAgICAgICB0ZGlm ZiA9IHRpbWVhZGo7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIC8qIG9ubHkgQ0xPQ0tfUkVBTFRJ TUUgaXMgaGFuZGxlZCAqLwo+ICsgICAgICAgIHRpbWVzcGVjYWRkKCZmdHBsX3N0YXJ0dGltZS5y ZWFsLCAmdGRpZmYsICZuZXdfcmVhbC5pdF92YWx1ZSk7Cj4gKyAgICAgIH0KPiArICAgICAgZWxz ZQo+ICsgICAgICB7Cj4gKyAgICAgICAgaWYgKHVzZXJfcmF0ZV9zZXQpCj4gKyAgICAgICAgewo+ ICsgICAgICAgICAgdGltZXNwZWNtdWwoJm5ld192YWx1ZS0+aXRfdmFsdWUsIDEuMC91c2VyX3Jh dGUsICZuZXdfcmVhbC5pdF92YWx1ZSk7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGVsc2UKPiAr ICAgICAgICB7Cj4gKyAgICAgICAgICBuZXdfcmVhbC5pdF92YWx1ZSA9IG5ld192YWx1ZS0+aXRf dmFsdWU7Cj4gKyAgICAgICAgfQo+ICsgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBlbHNlCj4gKyAg ICB7Cj4gKyAgICAgIG5ld19yZWFsLml0X3ZhbHVlID0gbmV3X3ZhbHVlLT5pdF92YWx1ZTsKPiAr ICAgIH0KPiArICAgIC8qIHNldCBpdF9pbnRlcnZhbCAqLwo+ICsgICAgaWYgKHVzZXJfcmF0ZV9z ZXQgJiYgKChuZXdfdmFsdWUtPml0X2ludGVydmFsLnR2X3NlYyAhPSAwKSB8fAo+ICsgICAgICAg KG5ld192YWx1ZS0+aXRfaW50ZXJ2YWwudHZfbnNlYyAhPSAwKSkpCj4gKyAgICB7Cj4gKyAgICAg IHRpbWVzcGVjbXVsKCZuZXdfdmFsdWUtPml0X2ludGVydmFsLCAxLjAvdXNlcl9yYXRlLCAmbmV3 X3JlYWwuaXRfaW50ZXJ2YWwpOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsgICAg ICBuZXdfcmVhbC5pdF9pbnRlcnZhbCA9IG5ld192YWx1ZS0+aXRfaW50ZXJ2YWw7Cj4gKyAgICB9 Cj4gKyAgfQo+ICsKPiArICBzd2l0Y2ggKGNvbXBhdCkKPiArICB7Cj4gKyAgICBjYXNlIEZUX0NP TVBBVF9HTElCQ18yXzI6Cj4gKyAgICAgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF90 aW1lcl9zZXR0aW1lXzIyKSh0aW1lcmlkLmludF9tZW1iZXIsIGZsYWdzLAo+ICsgICAgICAgICAg ICAgICAgICAgIG5ld19yZWFsX3B0LCBvbGRfdmFsdWUpKTsKPiArICAgICAgYnJlYWs7Cj4gKyAg ICBjYXNlIEZUX0NPTVBBVF9HTElCQ18yXzNfMzoKPiArICAgICAgIERPTlRfRkFLRV9USU1FKHJl c3VsdCA9ICgqcmVhbF90aW1lcl9zZXR0aW1lXzIzMykodGltZXJpZC50aW1lcl90X21lbWJlciwK PiArICAgICAgICAgICAgICAgICAgICBmbGFncywgbmV3X3JlYWxfcHQsIG9sZF92YWx1ZSkpOwo+ ICsgICAgICAgYnJlYWs7Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICByZXN1bHQgPSAtMTsKPiAr ICAgICAgYnJlYWs7Cj4gKyAgfQo+ICsKPiArICBpZiAocmVzdWx0ID09IC0xKQo+ICsgIHsKPiAr ICAgIHJldHVybiByZXN1bHQ7Cj4gKyAgfQo+ICsKPiArICAvKiBmYWtlIHJldHVybmVkIHBhcnRz ICovCj4gKyAgaWYgKChvbGRfdmFsdWUgIT0gTlVMTCkgJiYgIWRvbnRfZmFrZSkKPiArICB7Cj4g KyAgICBpZiAoKG9sZF92YWx1ZS0+aXRfdmFsdWUudHZfc2VjICE9IDApIHx8Cj4gKyAgICAgICAg KG9sZF92YWx1ZS0+aXRfdmFsdWUudHZfbnNlYyAhPSAwKSkKPiArICAgIHsKPiArICAgICAgcmVz dWx0ID0gZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmb2xkX3ZhbHVlLT5pdF92 YWx1ZSk7Cj4gKyAgICB9Cj4gKyAgICBpZiAodXNlcl9yYXRlX3NldCAmJiAoKG9sZF92YWx1ZS0+ aXRfaW50ZXJ2YWwudHZfc2VjICE9IDApIHx8Cj4gKyAgICAgICAob2xkX3ZhbHVlLT5pdF9pbnRl cnZhbC50dl9uc2VjICE9IDApKSkKPiArICAgIHsKPiArICAgICAgdGltZXNwZWNtdWwoJm9sZF92 YWx1ZS0+aXRfaW50ZXJ2YWwsIHVzZXJfcmF0ZSwgJm9sZF92YWx1ZS0+aXRfaW50ZXJ2YWwpOwo+ ICsgICAgfQo+ICsgIH0KPiArCj4gKyAgLyogcmV0dXJuIHRoZSByZXN1bHQgdG8gdGhlIGNhbGxl ciAqLwo+ICsgIHJldHVybiByZXN1bHQ7Cj4gK30KPiArCj4gKy8qCj4gKyAqIEZha2VkIHRpbWVy X3NldHRpbWUoKSBjb21wYXRpYmxlIHdpdGggaW1wbGVtZW50YXRpb24gaW4gR0xJQkMgMi4yCj4g KyAqLwo+ICtpbnQgdGltZXJfc2V0dGltZV8yMihpbnQgdGltZXJpZCwgaW50IGZsYWdzLAo+ICsg ICAgICAgICBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqbmV3X3ZhbHVlLAo+ICsgICAgICAgICBz dHJ1Y3QgaXRpbWVyc3BlYyAqb2xkX3ZhbHVlKQo+ICt7Cj4gKyAgaWYgKCFpbml0aWFsaXplZCkK PiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4gKyAgaWYgKHJlYWxfdGltZXJfc2V0 dGltZV8yMiA9PSBOVUxMKQo+ICsgIHsKPiArICAgIHJldHVybiAtMTsKPiArICB9Cj4gKyAgZWxz ZQo+ICsgIHsKPiArICAgIHJldHVybiAodGltZXJfc2V0dGltZV9jb21tb24oKHRpbWVyX3Rfb3Jf aW50KXRpbWVyaWQsIGZsYWdzLCBuZXdfdmFsdWUsIG9sZF92YWx1ZSwKPiArICAgICAgICAgICAg RlRfQ09NUEFUX0dMSUJDXzJfMikpOwo+ICsgIH0KPiArfQo+ICsKPiArLyoKPiArICogRmFrZWQg dGltZXJfc2V0dGltZSgpIGNvbXBhdGlibGUgd2l0aCBpbXBsZW1lbnRhdGlvbiBpbiBHTElCQyAy LjMuMwo+ICsgKi8KPiAraW50IHRpbWVyX3NldHRpbWVfMjMzKHRpbWVyX3QgdGltZXJpZCwgaW50 IGZsYWdzLAo+ICsgICAgICBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqbmV3X3ZhbHVlLAo+ICsg ICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqb2xkX3ZhbHVlKQo+ICt7Cj4gKyAgaWYgKCFpbml0aWFs aXplZCkKPiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4gKyAgaWYgKHJlYWxfdGlt ZXJfc2V0dGltZV8yMzMgPT0gTlVMTCkKPiArICB7Cj4gKyAgICByZXR1cm4gLTE7Cj4gKyAgfQo+ ICsgIGVsc2UKPiArICB7Cj4gKyAgICByZXR1cm4gKHRpbWVyX3NldHRpbWVfY29tbW9uKCh0aW1l cl90X29yX2ludCl0aW1lcmlkLCBmbGFncywgbmV3X3ZhbHVlLCBvbGRfdmFsdWUsCj4gKyAgICAg ICAgICAgIEZUX0NPTVBBVF9HTElCQ18yXzNfMykpOwo+ICsgIH0KPiArfQo+ICsKPiArLyoKPiAr ICogRmFrZWQgdGltZXJfZ2V0dGltZSgpCj4gKyAqIERvZXMgbm90IGFmZmVjdCB0aW1lciBzcGVl ZCB3aGVuIHN0ZXBwaW5nIGNsb2NrIHdpdGggZWFjaCB0aW1lKCkgY2FsbC4KPiArICovCj4gK2lu dCB0aW1lcl9nZXR0aW1lX2NvbW1vbih0aW1lcl90X29yX2ludCB0aW1lcmlkLCBzdHJ1Y3QgaXRp bWVyc3BlYyAqY3Vycl92YWx1ZSwgZnRfbGliX2NvbXBhdCBjb21wYXQpCj4gK3sKPiArICBpbnQg cmVzdWx0Owo+ICsKPiArICBpZiAoIWluaXRpYWxpemVkKQo+ICsgIHsKPiArICAgIGZ0cGxfaW5p dCgpOwo+ICsgIH0KPiArICBpZiAocmVhbF90aW1lcl9nZXR0aW1lXzIzMyA9PSBOVUxMKQo+ICsg IHsKPiArICAgIHJldHVybiAtMTsKPiArICB9Cj4gKwo+ICsgIHN3aXRjaCAoY29tcGF0KQo+ICsg IHsKPiArICAgIGNhc2UgRlRfQ09NUEFUX0dMSUJDXzJfMjoKPiArICAgICAgRE9OVF9GQUtFX1RJ TUUocmVzdWx0ID0gKCpyZWFsX3RpbWVyX2dldHRpbWVfMjIpKHRpbWVyaWQuaW50X21lbWJlciwg Y3Vycl92YWx1ZSkpOwo+ICsgICAgICBicmVhazsKPiArICAgIGNhc2UgRlRfQ09NUEFUX0dMSUJD XzJfM18zOgo+ICsgICAgICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfdGltZXJfZ2V0 dGltZV8yMzMpKHRpbWVyaWQudGltZXJfdF9tZW1iZXIsIGN1cnJfdmFsdWUpKTsKPiArICAgICAg YnJlYWs7Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICByZXN1bHQgPSAtMTsKPiArICAgICAgYnJl YWs7Cj4gKyAgfQo+ICsKPiArICBpZiAocmVzdWx0ID09IC0xKQo+ICsgIHsKPiArICAgIHJldHVy biByZXN1bHQ7Cj4gKyAgfQo+ICsKPiArICAvKiBmYWtlIHJldHVybmVkIHBhcnRzICovCj4gKyAg aWYgKGN1cnJfdmFsdWUgIT0gTlVMTCkKPiArICB7Cj4gKyAgICBpZiAodXNlcl9yYXRlX3NldCAm JiAhZG9udF9mYWtlKQo+ICsgICAgewo+ICsgICAgICB0aW1lc3BlY211bCgmY3Vycl92YWx1ZS0+ aXRfaW50ZXJ2YWwsIHVzZXJfcmF0ZSwgJmN1cnJfdmFsdWUtPml0X2ludGVydmFsKTsKPiArICAg ICAgdGltZXNwZWNtdWwoJmN1cnJfdmFsdWUtPml0X3ZhbHVlLCB1c2VyX3JhdGUsICZjdXJyX3Zh bHVlLT5pdF92YWx1ZSk7Cj4gKyAgICB9Cj4gKyAgfQo+ICsgIC8qIHJldHVybiB0aGUgcmVzdWx0 IHRvIHRoZSBjYWxsZXIgKi8KPiArICByZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICsvKgo+ICsg KiBGYWtlZCB0aW1lcl9nZXR0aW1lKCkgY29tcGF0aWJsZSB3aXRoIGltcGxlbWVudGF0aW9uIGlu IEdMSUJDIDIuMgo+ICsgKi8KPiAraW50IHRpbWVyX2dldHRpbWVfMjIodGltZXJfdCB0aW1lcmlk LCBzdHJ1Y3QgaXRpbWVyc3BlYyAqY3Vycl92YWx1ZSkKPiArewo+ICsgIGlmICghaW5pdGlhbGl6 ZWQpCj4gKyAgewo+ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChyZWFsX3RpbWVy X2dldHRpbWVfMjIgPT0gTlVMTCkKPiArICB7Cj4gKyAgICByZXR1cm4gLTE7Cj4gKyAgfQo+ICsg IGVsc2UKPiArICB7Cj4gKyAgICByZXR1cm4gKHRpbWVyX2dldHRpbWVfY29tbW9uKCh0aW1lcl90 X29yX2ludCl0aW1lcmlkLCBjdXJyX3ZhbHVlLAo+ICsgICAgICAgICBGVF9DT01QQVRfR0xJQkNf Ml8yKSk7Cj4gKyAgfQo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBGYWtlZCB0aW1lcl9nZXR0aW1lKCkg Y29tcGF0aWJsZSB3aXRoIGltcGxlbWVudGF0aW9uIGluIEdMSUJDIDIuMy4zCj4gKyAqLwo+ICtp bnQgdGltZXJfZ2V0dGltZV8yMzModGltZXJfdCB0aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyAq Y3Vycl92YWx1ZSkKPiArewo+ICsgIGlmICghaW5pdGlhbGl6ZWQpCj4gKyAgewo+ICsgICAgZnRw bF9pbml0KCk7Cj4gKyAgfQo+ICsgIGlmIChyZWFsX3RpbWVyX2dldHRpbWVfMjMzID09IE5VTEwp Cj4gKyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiArICBlbHNlCj4gKyAgewo+ICsgICAg cmV0dXJuICh0aW1lcl9nZXR0aW1lX2NvbW1vbigodGltZXJfdF9vcl9pbnQpdGltZXJpZCwgY3Vy cl92YWx1ZSwKPiArICAgICAgICAgICAgRlRfQ09NUEFUX0dMSUJDXzJfM18zKSk7Cj4gKyAgfQo+ ICt9Cj4gKwo+ICtfX2FzbV9fKCIuc3ltdmVyIHRpbWVyX2dldHRpbWVfMjIsIHRpbWVyX2dldHRp bWVAR0xJQkNfMi4yIik7Cj4gK19fYXNtX18oIi5zeW12ZXIgdGltZXJfZ2V0dGltZV8yMzMsIHRp bWVyX2dldHRpbWVAQEdMSUJDXzIuMy4zIik7Cj4gK19fYXNtX18oIi5zeW12ZXIgdGltZXJfc2V0 dGltZV8yMiwgdGltZXJfc2V0dGltZUBHTElCQ18yLjIiKTsKPiArX19hc21fXygiLnN5bXZlciB0 aW1lcl9zZXR0aW1lXzIzMywgdGltZXJfc2V0dGltZUBAR0xJQkNfMi4zLjMiKTsKPiArCj4gKyNl bmRpZgo+ICsjZW5kaWYKPiArCj4gKwo+ICsvKgo+ICsgKiAgICAgID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4g KyAqICAgICAgRmFrZWQgc3lzdGVtIGZ1bmN0aW9uczogYmFzaWMgdGltZSBmdW5jdGlvbnMgICAg ICAgICAgICAgPT09IEZBS0UoVElNRSkKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKi8K PiArCj4gKy8qCj4gKyAqIHRpbWUoKSBpbXBsZW1lbnRhdGlvbiB1c2luZyBjbG9ja19nZXR0aW1l KCkKPiArICogQG5vdGUgRG9lcyBub3QgY2hlY2sgZm9yIEVGQVVMVCwgc2VlIG1hbiAyIHRpbWUK PiArICovCj4gK3RpbWVfdCB0aW1lKHRpbWVfdCAqdGltZV90cHRyKQo+ICt7Cj4gKyAgc3RydWN0 IHRpbWVzcGVjIHRwOwo+ICsgIHRpbWVfdCByZXN1bHQ7Cj4gKwo+ICsgIGlmICghaW5pdGlhbGl6 ZWQpCj4gKyAgewo+ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIERPTlRfRkFLRV9USU1F KHJlc3VsdCA9ICgqcmVhbF9jbG9ja19nZXR0aW1lKShDTE9DS19SRUFMVElNRSwgJnRwKSk7Cj4g KyAgaWYgKHJlc3VsdCA9PSAtMSkgcmV0dXJuIC0xOwo+ICsKPiArICAvKiBwYXNzIHRoZSByZWFs IGN1cnJlbnQgdGltZSB0byBvdXIgZmFraW5nIHZlcnNpb24sIG92ZXJ3cml0aW5nIGl0ICovCj4g KyAgKHZvaWQpZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHApOwo+ICsKPiAr ICBpZiAodGltZV90cHRyICE9IE5VTEwpCj4gKyAgewo+ICsgICAgKnRpbWVfdHB0ciA9IHRwLnR2 X3NlYzsKPiArICB9Cj4gKyAgcmV0dXJuIHRwLnR2X3NlYzsKPiArfQo+ICsKPiAraW50IGZ0aW1l KHN0cnVjdCB0aW1lYiAqdGIpCj4gK3sKPiArICBzdHJ1Y3QgdGltZXNwZWMgdHA7Cj4gKyAgaW50 IHJlc3VsdDsKPiArCj4gKyAgaWYgKCFpbml0aWFsaXplZCkKPiArICB7Cj4gKyAgICBmdHBsX2lu aXQoKTsKPiArICB9Cj4gKyAgLyogc2FuaXR5IGNoZWNrICovCj4gKyAgaWYgKHRiID09IE5VTEwp Cj4gKyAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAvKiBmdGltZSgpIGFsd2F5cyByZXR1cm5z IDAsIHNlZSBtYW5wYWdlICovCj4gKwo+ICsgIC8qIENoZWNrIHdoZXRoZXIgd2UndmUgZ290IGEg cG9pbnRlciB0byB0aGUgcmVhbCBmdGltZSgpIGZ1bmN0aW9uIHlldCAqLwo+ICsgIGlmIChOVUxM ID09IHJlYWxfZnRpbWUpCj4gKyAgeyAgLyogZGxzeW0oKSBmYWlsZWQgKi8KPiArI2lmZGVmIERF QlVHCj4gKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBwcm9ibGVtOiBvcmln aW5hbCBmdGltZSgpIG5vdCBmb3VuZC5cbiIpOwo+ICsjZW5kaWYKPiArICAgIHJldHVybiAwOyAv KiBwcm9wYWdhdGUgZXJyb3IgdG8gY2FsbGVyICovCj4gKyAgfQo+ICsKPiArICAvKiBpbml0aWFs aXplIG91ciBUWiByZXN1bHQgd2l0aCB0aGUgcmVhbCBjdXJyZW50IHRpbWUgKi8KPiArICBET05U X0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfZnRpbWUpKHRiKSk7Cj4gKyAgaWYgKHJlc3VsdCA9 PSAtMSkKPiArICB7Cj4gKyAgICByZXR1cm4gcmVzdWx0Owo+ICsgIH0KPiArCj4gKyAgRE9OVF9G QUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX2Nsb2NrX2dldHRpbWUpKENMT0NLX1JFQUxUSU1FLCAm dHApKTsKPiArICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gLTE7Cj4gKwo+ICsgIC8qIHBhc3Mg dGhlIHJlYWwgY3VycmVudCB0aW1lIHRvIG91ciBmYWtpbmcgdmVyc2lvbiwgb3ZlcndyaXRpbmcg aXQgKi8KPiArICAodm9pZClmYWtlX2Nsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cCk7 Cj4gKwo+ICsgIHRiLT50aW1lID0gdHAudHZfc2VjOwo+ICsgIHRiLT5taWxsaXRtID0gdHAudHZf bnNlYyAvIDEwMDAwMDA7Cj4gKwo+ICsgIC8qIHJldHVybiB0aGUgcmVzdWx0IHRvIHRoZSBjYWxs ZXIgKi8KPiArICByZXR1cm4gcmVzdWx0OyAvKiB3aWxsIGFsd2F5cyBiZSAwIChzZWUgbWFucGFn ZSkgKi8KPiArfQo+ICsKPiAraW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHZv aWQgKnR6KQo+ICt7Cj4gKyAgaW50IHJlc3VsdDsKPiArCj4gKyAgaWYgKCFpbml0aWFsaXplZCkK PiArICB7Cj4gKyAgICBmdHBsX2luaXQoKTsKPiArICB9Cj4gKyAgLyogc2FuaXR5IGNoZWNrICov Cj4gKyAgaWYgKHR2ID09IE5VTEwpCj4gKyAgewo+ICsgICAgcmV0dXJuIC0xOwo+ICsgIH0KPiAr Cj4gKyAgLyogQ2hlY2sgd2hldGhlciB3ZSd2ZSBnb3QgYSBwb2ludGVyIHRvIHRoZSByZWFsIGZ0 aW1lKCkgZnVuY3Rpb24geWV0ICovCj4gKyAgaWYgKE5VTEwgPT0gcmVhbF9nZXR0aW1lb2ZkYXkp Cj4gKyAgeyAgLyogZGxzeW0oKSBmYWlsZWQgKi8KPiArI2lmZGVmIERFQlVHCj4gKyAgICAodm9p ZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBwcm9ibGVtOiBvcmlnaW5hbCBnZXR0aW1lb2Zk YXkoKSBub3QgZm91bmQuXG4iKTsKPiArI2VuZGlmCj4gKyAgICByZXR1cm4gLTE7IC8qIHByb3Bh Z2F0ZSBlcnJvciB0byBjYWxsZXIgKi8KPiArICB9Cj4gKwo+ICsgIC8qIGluaXRpYWxpemUgb3Vy IHJlc3VsdCB3aXRoIHRoZSByZWFsIGN1cnJlbnQgdGltZSAqLwo+ICsgIERPTlRfRkFLRV9USU1F KHJlc3VsdCA9ICgqcmVhbF9nZXR0aW1lb2ZkYXkpKHR2LCB0eikpOwo+ICsgIGlmIChyZXN1bHQg PT0gLTEpIHJldHVybiByZXN1bHQ7IC8qIG9yaWdpbmFsIGZ1bmN0aW9uIGZhaWxlZCAqLwo+ICsK PiArICAvKiBwYXNzIHRoZSByZWFsIGN1cnJlbnQgdGltZSB0byBvdXIgZmFraW5nIHZlcnNpb24s IG92ZXJ3cml0aW5nIGl0ICovCj4gKyAgcmVzdWx0ID0gZmFrZV9nZXR0aW1lb2ZkYXkodHYpOwo+ ICsKPiArICAvKiByZXR1cm4gdGhlIHJlc3VsdCB0byB0aGUgY2FsbGVyICovCj4gKyAgcmV0dXJu IHJlc3VsdDsKPiArfQo+ICsKPiAraW50IGNsb2NrX2dldHRpbWUoY2xvY2tpZF90IGNsa19pZCwg c3RydWN0IHRpbWVzcGVjICp0cCkKPiArewo+ICsgIGludCByZXN1bHQ7Cj4gKwo+ICsgIGlmICgh aW5pdGlhbGl6ZWQpCj4gKyAgewo+ICsgICAgZnRwbF9pbml0KCk7Cj4gKyAgfQo+ICsgIC8qIHNh bml0eSBjaGVjayAqLwo+ICsgIGlmICh0cCA9PSBOVUxMKQo+ICsgIHsKPiArICAgIHJldHVybiAt MTsKPiArICB9Cj4gKwo+ICsgIGlmIChOVUxMID09IHJlYWxfY2xvY2tfZ2V0dGltZSkKPiArICB7 ICAvKiBkbHN5bSgpIGZhaWxlZCAqLwo+ICsjaWZkZWYgREVCVUcKPiArICAgICh2b2lkKSBmcHJp bnRmKHN0ZGVyciwgImZha2V0aW1lIHByb2JsZW06IG9yaWdpbmFsIGNsb2NrX2dldHRpbWUoKSBu b3QgZm91bmQuXG4iKTsKPiArI2VuZGlmCj4gKyAgICByZXR1cm4gLTE7IC8qIHByb3BhZ2F0ZSBl cnJvciB0byBjYWxsZXIgKi8KPiArICB9Cj4gKwo+ICsgIC8qIGluaXRpYWxpemUgb3VyIHJlc3Vs dCB3aXRoIHRoZSByZWFsIGN1cnJlbnQgdGltZSAqLwo+ICsgIERPTlRfRkFLRV9USU1FKHJlc3Vs dCA9ICgqcmVhbF9jbG9ja19nZXR0aW1lKShjbGtfaWQsIHRwKSk7Cj4gKyAgaWYgKHJlc3VsdCA9 PSAtMSkgcmV0dXJuIHJlc3VsdDsgLyogb3JpZ2luYWwgZnVuY3Rpb24gZmFpbGVkICovCj4gKwo+ ICsgIC8qIHBhc3MgdGhlIHJlYWwgY3VycmVudCB0aW1lIHRvIG91ciBmYWtpbmcgdmVyc2lvbiwg b3ZlcndyaXRpbmcgaXQgKi8KPiArICBpZiAoZmFrZV9tb25vdG9uaWNfY2xvY2sgfHwgY2xrX2lk ICE9IENMT0NLX01PTk9UT05JQykKPiArICB7Cj4gKyAgICByZXN1bHQgPSBmYWtlX2Nsb2NrX2dl dHRpbWUoY2xrX2lkLCB0cCk7Cj4gKyAgfQo+ICsKPiArICAvKiByZXR1cm4gdGhlIHJlc3VsdCB0 byB0aGUgY2FsbGVyICovCj4gKyAgcmV0dXJuIHJlc3VsdDsKPiArfQo+ICsKPiArCj4gKy8qCj4g KyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KPiArICogICAgICBQYXJzaW5nIHRoZSB1c2VyJ3MgZmFr ZXRpbWUgcmVxdWVzdHMgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBQQVJTRQo+ICsgKiAg ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Cj4gKyAqLwo+ICsKPiArc3RhdGljIHZvaWQgcGFyc2VfZnRfc3Ry aW5nKGNvbnN0IGNoYXIgKnVzZXJfZmFrZWRfdGltZSkKPiArewo+ICsgIHN0cnVjdCB0bSB1c2Vy X2Zha2VkX3RpbWVfdG07Cj4gKyAgY2hhciAqIHRtcF90aW1lX2ZtdDsKPiArCj4gKyAgaWYgKCFz dHJuY21wKHVzZXJfZmFrZWRfdGltZSwgdXNlcl9mYWtlZF90aW1lX3NhdmVkLCBCVUZGRVJMRU4p KQo+ICsgIHsKPiArICAgICAgLyogTm8gY2hhbmdlICovCj4gKyAgICAgIHJldHVybjsKPiArICB9 Cj4gKwo+ICsgIC8qIGNoZWNrIHdoZXRoZXIgdGhlIHVzZXIgZ2F2ZSB1cyBhbiBhYnNvbHV0ZSB0 aW1lIHRvIGZha2UgKi8KPiArICBzd2l0Y2ggKHVzZXJfZmFrZWRfdGltZVswXSkKPiArICB7Cj4g Kwo+ICsgICAgZGVmYXVsdDogIC8qIFRyeSBhbmQgaW50ZXJwcmV0IHRoaXMgYXMgYSBzcGVjaWZp ZWQgdGltZSAqLwo+ICsgICAgICBpZiAoZnRfbW9kZSAhPSBGVF9OT09QKSBmdF9tb2RlID0gRlRf RlJFRVpFOwo+ICsgICAgICB1c2VyX2Zha2VkX3RpbWVfdG0udG1faXNkc3QgPSAtMTsKPiArICAg ICAgaWYgKE5VTEwgIT0gc3RycHRpbWUodXNlcl9mYWtlZF90aW1lLCB1c2VyX2Zha2VkX3RpbWVf Zm10LCAmdXNlcl9mYWtlZF90aW1lX3RtKSkKPiArICAgICAgewo+ICsgICAgICAgIHVzZXJfZmFr ZWRfdGltZV90aW1lc3BlYy50dl9zZWMgPSBta3RpbWUoJnVzZXJfZmFrZWRfdGltZV90bSk7Cj4g KyAgICAgICAgdXNlcl9mYWtlZF90aW1lX3RpbWVzcGVjLnR2X25zZWMgPSAwOwo+ICsgICAgICAg IHVzZXJfZmFrZWRfdGltZV9zZXQgPSB0cnVlOwo+ICsgICAgICB9Cj4gKyAgICAgIGVsc2UKPiAr ICAgICAgewo+ICsgICAgICAgIHBlcnJvcigiRmFpbGVkIHRvIHBhcnNlIEZBS0VUSU1FIHRpbWVz dGFtcCIpOwo+ICsgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKPiArICAgICAgfQo+ICsgICAg ICBicmVhazsKPiArCj4gKyAgICBjYXNlICcrJzoKPiArICAgIGNhc2UgJy0nOiAvKiBVc2VyLXNw ZWNpZmllZCBvZmZzZXQgKi8KPiArICAgICAgaWYgKGZ0X21vZGUgIT0gRlRfTk9PUCkgZnRfbW9k ZSA9IEZUX1NUQVJUX0FUOwo+ICsgICAgICAvKiBmcmFjdGlvbmFsIHRpbWUgb2Zmc2V0cyBjb250 cmlidXRlZCBieSBLYXJsIENoZW4gaW4gdjAuOCAqLwo+ICsgICAgICBkb3VibGUgZnJhY19vZmZz ZXQgPSBhdG9mKHVzZXJfZmFrZWRfdGltZSk7Cj4gKwo+ICsgICAgICAvKiBvZmZzZXQgaXMgaW4g c2Vjb25kcyBieSBkZWZhdWx0LCBidXQgdGhlIHN0cmluZyBtYXkgY29udGFpbgo+ICsgICAgICAg KiBtdWx0aXBsaWVycy4uLgo+ICsgICAgICAgKi8KPiArICAgICAgaWYgKHN0cmNocih1c2VyX2Zh a2VkX3RpbWUsICdtJykgIT0gTlVMTCkgZnJhY19vZmZzZXQgKj0gNjA7Cj4gKyAgICAgIGVsc2Ug aWYgKHN0cmNocih1c2VyX2Zha2VkX3RpbWUsICdoJykgIT0gTlVMTCkgZnJhY19vZmZzZXQgKj0g NjAgKiA2MDsKPiArICAgICAgZWxzZSBpZiAoc3RyY2hyKHVzZXJfZmFrZWRfdGltZSwgJ2QnKSAh PSBOVUxMKSBmcmFjX29mZnNldCAqPSA2MCAqIDYwICogMjQ7Cj4gKyAgICAgIGVsc2UgaWYgKHN0 cmNocih1c2VyX2Zha2VkX3RpbWUsICd5JykgIT0gTlVMTCkgZnJhY19vZmZzZXQgKj0gNjAgKiA2 MCAqIDI0ICogMzY1Owo+ICsKPiArICAgICAgdXNlcl9vZmZzZXQudHZfc2VjID0gZmxvb3IoZnJh Y19vZmZzZXQpOwo+ICsgICAgICB1c2VyX29mZnNldC50dl9uc2VjID0gKGZyYWNfb2Zmc2V0IC0g dXNlcl9vZmZzZXQudHZfc2VjKSAqIFNFQ19UT19uU0VDOwo+ICsgICAgICB0aW1lc3BlY2FkZCgm ZnRwbF9zdGFydHRpbWUucmVhbCwgJnVzZXJfb2Zmc2V0LCAmdXNlcl9mYWtlZF90aW1lX3RpbWVz cGVjKTsKPiArICAgICAgZ290byBwYXJzZV9tb2RpZmllcnM7Cj4gKyAgICAgIGJyZWFrOwo+ICsK PiArICAgICAgLyogQ29udHJpYnV0ZWQgYnkgRGF2aWQgTm9ydGgsIFRESSBpbiB2ZXJzaW9uIDAu NyAqLwo+ICsgICAgY2FzZSAnQCc6IC8qIFNwZWNpZmljIHRpbWUsIGJ1dCBjbG9jayBhbG9uZyBy ZWxhdGl2ZSB0byB0aGF0IHN0YXJ0dGltZSAqLwo+ICsgICAgICBmdF9tb2RlID0gRlRfU1RBUlRf QVQ7Cj4gKyAgICAgIHVzZXJfZmFrZWRfdGltZV90bS50bV9pc2RzdCA9IC0xOwo+ICsgICAgICAo dm9pZCkgc3RycHRpbWUoJnVzZXJfZmFrZWRfdGltZVsxXSwgdXNlcl9mYWtlZF90aW1lX2ZtdCwg JnVzZXJfZmFrZWRfdGltZV90bSk7Cj4gKwo+ICsgICAgICB1c2VyX2Zha2VkX3RpbWVfdGltZXNw ZWMudHZfc2VjID0gbWt0aW1lKCZ1c2VyX2Zha2VkX3RpbWVfdG0pOwo+ICsgICAgICB1c2VyX2Zh a2VkX3RpbWVfdGltZXNwZWMudHZfbnNlYyA9IDA7Cj4gKwo+ICsgICAgICAvKiBSZXNldCBzdGFy dHRpbWUgKi8KPiArICAgICAgc3lzdGVtX3RpbWVfZnJvbV9zeXN0ZW0oJmZ0cGxfc3RhcnR0aW1l KTsKPiArICAgICAgZ290byBwYXJzZV9tb2RpZmllcnM7Cj4gKyAgICAgIGJyZWFrOwo+ICsKPiAr ICAgIGNhc2UgJ2knOgo+ICsgICAgY2FzZSAneCc6IC8qIE9ubHkgbW9kaWZpZXJzIGFyZSBwYXNz ZWQsIGRvbid0IGZhbGwgYmFjayB0byBzdHJwdGltZSAqLwo+ICtwYXJzZV9tb2RpZmllcnM6Cj4g KyAgICAgIC8qIFNwZWVkLXVwIC8gc2xvdy1kb3duIGNvbnRyaWJ1dGVkIGJ5IEthcmwgQ2hlbiBp biB2MC44ICovCj4gKyAgICAgIGlmIChzdHJjaHIodXNlcl9mYWtlZF90aW1lLCAneCcpICE9IE5V TEwpCj4gKyAgICAgIHsKPiArICAgICAgICB1c2VyX3JhdGUgPSBhdG9mKHN0cmNocih1c2VyX2Zh a2VkX3RpbWUsICd4JykrMSk7Cj4gKyAgICAgICAgdXNlcl9yYXRlX3NldCA9IHRydWU7Cj4gKyAg ICAgIH0KPiArICAgICAgZWxzZSBpZiAoTlVMTCAhPSAodG1wX3RpbWVfZm10ID0gc3RyY2hyKHVz ZXJfZmFrZWRfdGltZSwgJ2knKSkpCj4gKyAgICAgIHsKPiArICAgICAgICBkb3VibGUgdGlja19p bmMgPSBhdG9mKHRtcF90aW1lX2ZtdCArIDEpOwo+ICsgICAgICAgIC8qIGluY3JlbWVudCB0aW1l IHdpdGggZXZlcnkgdGltZSgpIGNhbGwqLwo+ICsgICAgICAgIHVzZXJfcGVyX3RpY2tfaW5jLnR2 X3NlYyA9IGZsb29yKHRpY2tfaW5jKTsKPiArICAgICAgICB1c2VyX3Blcl90aWNrX2luYy50dl9u c2VjID0gKHRpY2tfaW5jIC0gdXNlcl9wZXJfdGlja19pbmMudHZfc2VjKSAqIFNFQ19UT19uU0VD IDsKPiArICAgICAgICB1c2VyX3Blcl90aWNrX2luY19zZXQgPSB0cnVlOwo+ICsgICAgICB9Cj4g KyAgICAgIGJyZWFrOwo+ICsgIH0gLy8gZW5kIG9mIHN3aXRjaAo+ICsKPiArICBzdHJuY3B5KHVz ZXJfZmFrZWRfdGltZV9zYXZlZCwgdXNlcl9mYWtlZF90aW1lLCBCVUZGRVJMRU4tMSk7Cj4gKyAg dXNlcl9mYWtlZF90aW1lX3NhdmVkW0JVRkZFUkxFTi0xXSA9IDA7Cj4gKyNpZmRlZiBERUJVRwo+ ICsgIGZwcmludGYoc3RkZXJyLCAibmV3IEZBS0VUSU1FOiAlc1xuIiwgdXNlcl9mYWtlZF90aW1l X3NhdmVkKTsKPiArI2VuZGlmCj4gK30KPiArCj4gKwo+ICsvKgo+ICsgKiAgICAgID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Cj4gKyAqICAgICAgSW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPT09IElOSVQKPiArICogICAgICA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQo+ICsgKi8KPiArCj4gK3ZvaWQgZnRwbF9pbml0KHZvaWQpCj4gK3sKPiArICBjaGFyICp0bXBf ZW52Owo+ICsgIGJvb2wgZG9udF9mYWtlX2ZpbmFsOwo+ICsKPiArI2lmZGVmIF9fQVBQTEVfXwo+ ICsgIGNvbnN0IGNoYXIgKnByb2duYW1lID0gZ2V0cHJvZ25hbWUoKTsKPiArI2Vsc2UKPiArICBj b25zdCBjaGFyICpwcm9nbmFtZSA9IF9fcHJvZ25hbWU7Cj4gKyNlbmRpZgo+ICsKPiArICAvKiBM b29rIHVwIGFsbCByZWFsXyogZnVuY3Rpb25zLiBOVUxMIHdpbGwgbWFyayBtaXNzaW5nIG9uZXMu ICovCj4gKyAgcmVhbF9zdGF0ID0gICAgICAgICAgICAgICBkbHN5bShSVExEX05FWFQsICJfX3hz dGF0Iik7Cj4gKyAgcmVhbF9mc3RhdCA9ICAgICAgICAgICAgICBkbHN5bShSVExEX05FWFQsICJf X2Z4c3RhdCIpOwo+ICsgIHJlYWxfZnN0YXRhdCA9ICAgICAgICAgICAgZGxzeW0oUlRMRF9ORVhU LCAiX19meHN0YXRhdCIpOwo+ICsgIHJlYWxfbHN0YXQgPSAgICAgICAgICAgICAgZGxzeW0oUlRM RF9ORVhULCAiX19seHN0YXQiKTsKPiArICByZWFsX3N0YXQ2NCA9ICAgICAgICAgICAgIGRsc3lt KFJUTERfTkVYVCwiX194c3RhdDY0Iik7Cj4gKyAgcmVhbF9mc3RhdDY0ID0gICAgICAgICAgICBk bHN5bShSVExEX05FWFQsICJfX2Z4c3RhdDY0Iik7Cj4gKyAgcmVhbF9mc3RhdGF0NjQgPSAgICAg ICAgICBkbHN5bShSVExEX05FWFQsICJfX2Z4c3RhdGF0NjQiKTsKPiArICByZWFsX2xzdGF0NjQg PSAgICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwgIl9fbHhzdGF0NjQiKTsKPiArICByZWFsX3Rp bWUgPSAgICAgICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwgInRpbWUiKTsKPiArICByZWFsX2Z0 aW1lID0gICAgICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwgImZ0aW1lIik7Cj4gKyAgcmVhbF9n ZXR0aW1lb2ZkYXkgPSAgICAgICBkbHN5bShSVExEX05FWFQsICJnZXR0aW1lb2ZkYXkiKTsKPiAr I2lmZGVmIEZBS0VfU0xFRVAKPiArICByZWFsX25hbm9zbGVlcCA9ICAgICAgICAgIGRsc3ltKFJU TERfTkVYVCwgIm5hbm9zbGVlcCIpOwo+ICsgIHJlYWxfdXNsZWVwID0gICAgICAgICAgICAgZGxz eW0oUlRMRF9ORVhULCAidXNsZWVwIik7Cj4gKyAgcmVhbF9zbGVlcCA9ICAgICAgICAgICAgICBk bHN5bShSVExEX05FWFQsICJzbGVlcCIpOwo+ICsgIHJlYWxfYWxhcm0gPSAgICAgICAgICAgICAg ZGxzeW0oUlRMRF9ORVhULCAiYWxhcm0iKTsKPiArICByZWFsX3BvbGwgPSAgICAgICAgICAgICAg IGRsc3ltKFJUTERfTkVYVCwgInBvbGwiKTsKPiArICByZWFsX3Bwb2xsID0gICAgICAgICAgICAg IGRsc3ltKFJUTERfTkVYVCwgInBwb2xsIik7Cj4gKyAgcmVhbF9zZWxlY3QgPSAgICAgICAgICAg ICBkbHN5bShSVExEX05FWFQsICJzZWxlY3QiKTsKPiArICByZWFsX3NlbV90aW1lZHdhaXQgPSAg ICAgIGRsc3ltKFJUTERfTkVYVCwgInNlbV90aW1lZHdhaXQiKTsKPiArI2VuZGlmCj4gKyNpZmRl ZiBGQUtFX0lOVEVSTkFMX0NBTExTCj4gKyAgcmVhbF9fX2Z0aW1lID0gICAgICAgICAgICAgIGRs c3ltKFJUTERfTkVYVCwgIl9fZnRpbWUiKTsKPiArICByZWFsX19fZ2V0dGltZW9mZGF5ID0gICAg ICAgZGxzeW0oUlRMRF9ORVhULCAiX19nZXR0aW1lb2ZkYXkiKTsKPiArICByZWFsX19fY2xvY2tf Z2V0dGltZSAgPSAgICAgZGxzeW0oUlRMRF9ORVhULCAiX19jbG9ja19nZXR0aW1lIik7Cj4gKyNl bmRpZgo+ICsjaWZkZWYgX19BUFBMRU9TWF9fCj4gKyAgcmVhbF9jbG9ja19nZXRfdGltZSA9ICAg ICBkbHN5bShSVExEX05FWFQsICJjbG9ja19nZXRfdGltZSIpOwo+ICsgIHJlYWxfY2xvY2tfZ2V0 dGltZSAgPSAgICAgYXBwbGVfY2xvY2tfZ2V0dGltZTsKPiArI2Vsc2UKPiArICByZWFsX2Nsb2Nr X2dldHRpbWUgID0gICAgIGRsc3ltKFJUTERfTkVYVCwgIl9fY2xvY2tfZ2V0dGltZSIpOwo+ICsg IGlmIChOVUxMID09IHJlYWxfY2xvY2tfZ2V0dGltZSkKPiArICB7Cj4gKyAgICByZWFsX2Nsb2Nr X2dldHRpbWUgID0gICBkbHN5bShSVExEX05FWFQsICJjbG9ja19nZXR0aW1lIik7Cj4gKyAgfQo+ ICsjaWZkZWYgRkFLRV9USU1FUlMKPiArI2lmIGRlZmluZWQoX19zdW4pCj4gKyAgICByZWFsX3Rp bWVyX2dldHRpbWVfMjMzID0gIGRsc3ltKFJUTERfTkVYVCwgInRpbWVyX2dldHRpbWUiKTsKPiAr ICAgIHJlYWxfdGltZXJfc2V0dGltZV8yMzMgPSAgZGxzeW0oUlRMRF9ORVhULCAidGltZXJfc2V0 dGltZSIpOwo+ICsjZWxzZQo+ICsgIHJlYWxfdGltZXJfc2V0dGltZV8yMiA9ICAgZGx2c3ltKFJU TERfTkVYVCwgInRpbWVyX3NldHRpbWUiLCJHTElCQ18yLjIiKTsKPiArICByZWFsX3RpbWVyX3Nl dHRpbWVfMjMzID0gIGRsdnN5bShSVExEX05FWFQsICJ0aW1lcl9zZXR0aW1lIiwiR0xJQkNfMi4z LjMiKTsKPiArICBpZiAoTlVMTCA9PSByZWFsX3RpbWVyX3NldHRpbWVfMjMzKQo+ICsgIHsKPiAr ICAgIHJlYWxfdGltZXJfc2V0dGltZV8yMzMgPSAgZGxzeW0oUlRMRF9ORVhULCAidGltZXJfc2V0 dGltZSIpOwo+ICsgIH0KPiArICByZWFsX3RpbWVyX2dldHRpbWVfMjIgPSAgIGRsdnN5bShSVExE X05FWFQsICJ0aW1lcl9nZXR0aW1lIiwiR0xJQkNfMi4yIik7Cj4gKyAgcmVhbF90aW1lcl9nZXR0 aW1lXzIzMyA9ICBkbHZzeW0oUlRMRF9ORVhULCAidGltZXJfZ2V0dGltZSIsIkdMSUJDXzIuMy4z Iik7Cj4gKyAgaWYgKE5VTEwgPT0gcmVhbF90aW1lcl9nZXR0aW1lXzIzMykKPiArICB7Cj4gKyAg ICByZWFsX3RpbWVyX2dldHRpbWVfMjMzID0gIGRsc3ltKFJUTERfTkVYVCwgInRpbWVyX2dldHRp bWUiKTsKPiArICB9Cj4gKyNlbmRpZgo+ICsjZW5kaWYKPiArI2VuZGlmCj4gKwo+ICsgIGRvbnRf ZmFrZSA9IHRydWU7IC8vIERvIG5vdCBmYWtlIHRpbWVzIGR1cmluZyBpbml0aWFsaXphdGlvbgo+ ICsgIGRvbnRfZmFrZV9maW5hbCA9IGZhbHNlOwo+ICsgIGluaXRpYWxpemVkID0gMTsKPiArCj4g KyAgZnRfc2htX2luaXQoKTsKPiArI2lmZGVmIEZBS0VfU1RBVAo+ICsgIGlmIChnZXRlbnYoIk5P X0ZBS0VfU1RBVCIpIT1OVUxMKQo+ICsgIHsKPiArICAgIGZha2Vfc3RhdF9kaXNhYmxlZCA9IDE7 ICAvL05vdGUgdGhhdCB0aGlzIGlzIE5PVCByZS1jaGVja2VkCj4gKyAgfQo+ICsjZW5kaWYKPiAr Cj4gKyAgaWYgKCh0bXBfZW52ID0gZ2V0ZW52KCJGQUtFVElNRV9DQUNIRV9EVVJBVElPTiIpKSAh PSBOVUxMKQo+ICsgIHsKPiArICAgIGNhY2hlX2R1cmF0aW9uID0gYXRvaSh0bXBfZW52KTsKPiAr ICB9Cj4gKyAgaWYgKCh0bXBfZW52ID0gZ2V0ZW52KCJGQUtFVElNRV9OT19DQUNIRSIpKSAhPSBO VUxMKQo+ICsgIHsKPiArICAgIGlmICgwID09IHN0cmNtcCh0bXBfZW52LCAiMSIpKQo+ICsgICAg ewo+ICsgICAgICBjYWNoZV9lbmFibGVkID0gMDsKPiArICAgIH0KPiArICB9Cj4gKyAgaWYgKCh0 bXBfZW52ID0gZ2V0ZW52KCJET05UX0ZBS0VfTU9OT1RPTklDIikpICE9IE5VTEwpCj4gKyAgewo+ ICsgICAgaWYgKDAgPT0gc3RyY21wKHRtcF9lbnYsICIxIikpCj4gKyAgICB7Cj4gKyAgICAgIGZh a2VfbW9ub3RvbmljX2Nsb2NrID0gMDsKPiArICAgIH0KPiArICB9Cj4gKyAgLyogQ2hlY2sgd2hl dGhlciB3ZSBhY3R1YWxseSBzaG91bGQgYmUgZmFraW5nIHRoZSByZXR1cm5lZCB0aW1lc3RhbXAu ICovCj4gKwo+ICsgIC8qIFdlIGNhbiBwcmV2ZW50IGZha2luZyB0aW1lIGZvciBzcGVjaWZpZWQg Y29tbWFuZHMgKi8KPiArICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYoIkZBS0VUSU1FX1NLSVBfQ01E UyIpKSAhPSBOVUxMKQo+ICsgIHsKPiArICAgIGNoYXIgKnNraXBfY21kLCAqc2F2ZXB0ciwgKnRt cHZhcjsKPiArICAgIC8qIERvbid0IG1lc3Mgd2l0aCB0aGUgZW52IHZhcmlhYmxlIGRpcmVjdGx5 LiAqLwo+ICsgICAgdG1wdmFyID0gc3RyZHVwKHRtcF9lbnYpOwo+ICsgICAgaWYgKHRtcHZhciAh PSBOVUxMKQo+ICsgICAgewo+ICsgICAgICBza2lwX2NtZCA9IHN0cnRva19yKHRtcHZhciwgIiwi LCAmc2F2ZXB0cik7Cj4gKyAgICAgIHdoaWxlIChza2lwX2NtZCAhPSBOVUxMKQo+ICsgICAgICB7 Cj4gKyAgICAgICAgaWYgKDAgPT0gc3RyY21wKHByb2duYW1lLCBza2lwX2NtZCkpCj4gKyAgICAg ICAgewo+ICsgICAgICAgICAgZnRfbW9kZSA9IEZUX05PT1A7Cj4gKyAgICAgICAgICBkb250X2Zh a2VfZmluYWwgPSB0cnVlOwo+ICsgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAg ICAgIHNraXBfY21kID0gc3RydG9rX3IoTlVMTCwgIiwiLCAmc2F2ZXB0cik7Cj4gKyAgICAgIH0K PiArICAgICAgZnJlZSh0bXB2YXIpOwo+ICsgICAgICB0bXB2YXIgPSBOVUxMOwo+ICsgICAgfQo+ ICsgICAgZWxzZQo+ICsgICAgewo+ICsgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBDb3Vs ZCBub3QgY29weSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUuXG4iKTsKPiArICAgICAg ZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsgICAgfQo+ICsgIH0KPiArCj4gKyAgLyogV2UgY2FuIGxp bWl0IGZha2luZyB0aW1lIHRvIHNwZWNpZmllZCBjb21tYW5kcyAqLwo+ICsgIGlmICgodG1wX2Vu diA9IGdldGVudigiRkFLRVRJTUVfT05MWV9DTURTIikpICE9IE5VTEwpCj4gKyAgewo+ICsgICAg Y2hhciAqb25seV9jbWQsICpzYXZlcHRyLCAqdG1wdmFyOwo+ICsgICAgYm9vbCBjbWRfbWF0Y2hl ZCA9IGZhbHNlOwo+ICsKPiArICAgIGlmIChnZXRlbnYoIkZBS0VUSU1FX1NLSVBfQ01EUyIpICE9 IE5VTEwpCj4gKyAgICB7Cj4gKyAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IEJvdGggRkFL RVRJTUVfU0tJUF9DTURTIGFuZCBGQUtFVElNRV9PTkxZX0NNRFMgY2FuJ3QgYmUgc2V0LlxuIik7 Cj4gKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBEb24n dCBtZXNzIHdpdGggdGhlIGVudiB2YXJpYWJsZSBkaXJlY3RseS4gKi8KPiArICAgIHRtcHZhciA9 IHN0cmR1cCh0bXBfZW52KTsKPiArICAgIGlmICh0bXB2YXIgIT0gTlVMTCkgewo+ICsgICAgICBv bmx5X2NtZCA9IHN0cnRva19yKHRtcHZhciwgIiwiLCAmc2F2ZXB0cik7Cj4gKyAgICAgIHdoaWxl IChvbmx5X2NtZCAhPSBOVUxMKQo+ICsgICAgICB7Cj4gKyAgICAgICAgaWYgKDAgPT0gc3RyY21w KHByb2duYW1lLCBvbmx5X2NtZCkpCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgY21kX21hdGNo ZWQgPSB0cnVlOwo+ICsgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIG9u bHlfY21kID0gc3RydG9rX3IoTlVMTCwgIiwiLCAmc2F2ZXB0cik7Cj4gKyAgICAgIH0KPiArCj4g KyAgICAgIGlmICghY21kX21hdGNoZWQpCj4gKyAgICAgIHsKPiArICAgICAgICBmdF9tb2RlID0g RlRfTk9PUDsKPiArICAgICAgICBkb250X2Zha2VfZmluYWwgPSB0cnVlOwo+ICsgICAgICB9Cj4g KyAgICAgIGZyZWUodG1wdmFyKTsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgIGZwcmludGYoc3Rk ZXJyLCAiRXJyb3I6IENvdWxkIG5vdCBjb3B5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1 ZS5cbiIpOwo+ICsgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAgICB9Cj4gKyAgfQo+ICsK PiArICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYoIkZBS0VUSU1FX1NUQVJUX0FGVEVSX1NFQ09ORFMi KSkgIT0gTlVMTCkKPiArICB7Cj4gKyAgICBmdF9zdGFydF9hZnRlcl9zZWNzID0gYXRvbCh0bXBf ZW52KTsKPiArICAgIGxpbWl0ZWRfZmFraW5nID0gdHJ1ZTsKPiArICB9Cj4gKyAgaWYgKCh0bXBf ZW52ID0gZ2V0ZW52KCJGQUtFVElNRV9TVE9QX0FGVEVSX1NFQ09ORFMiKSkgIT0gTlVMTCkKPiAr ICB7Cj4gKyAgICBmdF9zdG9wX2FmdGVyX3NlY3MgPSBhdG9sKHRtcF9lbnYpOwo+ICsgICAgbGlt aXRlZF9mYWtpbmcgPSB0cnVlOwo+ICsgIH0KPiArICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYoIkZB S0VUSU1FX1NUQVJUX0FGVEVSX05VTUNBTExTIikpICE9IE5VTEwpCj4gKyAgewo+ICsgICAgZnRf c3RhcnRfYWZ0ZXJfbmNhbGxzID0gYXRvbCh0bXBfZW52KTsKPiArICAgIGxpbWl0ZWRfZmFraW5n ID0gdHJ1ZTsKPiArICB9Cj4gKyAgaWYgKCh0bXBfZW52ID0gZ2V0ZW52KCJGQUtFVElNRV9TVE9Q X0FGVEVSX05VTUNBTExTIikpICE9IE5VTEwpCj4gKyAgewo+ICsgICAgZnRfc3RvcF9hZnRlcl9u Y2FsbHMgPSBhdG9sKHRtcF9lbnYpOwo+ICsgICAgbGltaXRlZF9mYWtpbmcgPSB0cnVlOwo+ICsg IH0KPiArCj4gKyAgLyogY2hlY2sgd2hldGhlciB3ZSBzaG91bGQgc3Bhd24gYW4gZXh0ZXJuYWwg Y29tbWFuZCAqLwo+ICsgIGlmICgodG1wX2VudiA9IGdldGVudigiRkFLRVRJTUVfU1BBV05fVEFS R0VUIikpICE9IE5VTEwpCj4gKyAgewo+ICsgICAgc3Bhd25zdXBwb3J0ID0gdHJ1ZTsKPiArICAg ICh2b2lkKSBzdHJuY3B5KGZ0X3NwYXduX3RhcmdldCwgZ2V0ZW52KCJGQUtFVElNRV9TUEFXTl9U QVJHRVQiKSwgMTAyNCk7Cj4gKyAgICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYoIkZBS0VUSU1FX1NQ QVdOX1NFQ09ORFMiKSkgIT0gTlVMTCkKPiArICAgIHsKPiArICAgICAgZnRfc3Bhd25fc2VjcyA9 IGF0b2wodG1wX2Vudik7Cj4gKyAgICB9Cj4gKyAgICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYoIkZB S0VUSU1FX1NQQVdOX05VTUNBTExTIikpICE9IE5VTEwpCj4gKyAgICB7Cj4gKyAgICAgIGZ0X3Nw YXduX25jYWxscyA9IGF0b2wodG1wX2Vudik7Cj4gKyAgICB9Cj4gKyAgfQo+ICsKPiArICBpZiAo KHRtcF9lbnYgPSBnZXRlbnYoIkZBS0VUSU1FX1NBVkVfRklMRSIpKSAhPSBOVUxMKQo+ICsgIHsK PiArICAgIGlmICgtMSA9PSAob3V0ZmlsZSA9IG9wZW4odG1wX2VudiwgT19SRFdSIHwgT19BUFBF TkQgfCBPX0NMT0VYRUMgfCBPX0NSRUFULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTX0lXVVNSIHwgU19JUlVTUikpKQo+ICsgICAgewo+ICsgICAgICBwZXJyb3IoIk9wZW5pbmcg ZmlsZSBmb3Igc2F2aW5nIHRpbWVzdGFtcHMgZmFpbGVkIik7Cj4gKyAgICAgIGV4aXQoRVhJVF9G QUlMVVJFKTsKPiArICAgIH0KPiArICB9Cj4gKwo+ICsgIC8qIGxvYWQgZmlsZSBvbmx5IGlmIHJl YWRpbmcgdGltc3RhbXBzIGZyb20gaXQgaXMgbm90IGZpbmlzaGVkIHlldCAqLwo+ICsgIGlmICgo dG1wX2VudiA9IGdldGVudigiRkFLRVRJTUVfTE9BRF9GSUxFIikpICE9IE5VTEwpCj4gKyAgewo+ ICsgICAgaW50IGluZmlsZSA9IC0xOwo+ICsgICAgc3RydWN0IHN0YXQgc2I7Cj4gKyAgICBpZiAo LTEgPT0gKGluZmlsZSA9IG9wZW4odG1wX2VudiwgT19SRE9OTFl8T19DTE9FWEVDKSkpCj4gKyAg ICB7Cj4gKyAgICAgIHBlcnJvcigiT3BlbmluZyBmaWxlIGZvciBsb2FkaW5nIHRpbWVzdGFtcHMg ZmFpbGVkIik7Cj4gKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKPiArICAgIH0KPiArCj4gKyAg ICBmc3RhdChpbmZpbGUsICZzYik7Cj4gKyAgICBpZiAoc2l6ZW9mKHN0c3NbMF0pID4gKGluZmls ZV9zaXplID0gc2Iuc3Rfc2l6ZSkpCj4gKyAgICB7Cj4gKyAgICAgIHByaW50ZigiVGhlcmUgYXJl IG5vIHRpbWVzdGFtcHMgaW4gdGhlIHByb3ZpZGVkIGZpbGUgdG8gbG9hZCB0aW1lc3RhbXBzIGZy b20iKTsKPiArICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsgICAgfQo+ICsKPiArICAgIGlm ICgoaW5maWxlX3NpemUgJSBzaXplb2Yoc3Rzc1swXSkpICE9IDApCj4gKyAgICB7Cj4gKyAgICAg IHByaW50ZigiRmlsZSBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiB0aW1lc3RhbXAgc2l6ZS4gSXQg aXMgcHJvYmFibHkgZGFtYWdlZC4iKTsKPiArICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsg ICAgfQo+ICsKPiArICAgIHN0c3MgPSBtbWFwKE5VTEwsIGluZmlsZV9zaXplLCBQUk9UX1JFQUQs IE1BUF9TSEFSRUQsIGluZmlsZSwgMCk7Cj4gKyAgICBpZiAoc3RzcyA9PSBNQVBfRkFJTEVEKQo+ ICsgICAgewo+ICsgICAgICBwZXJyb3IoIk1hcHBpbmcgZmlsZSBmb3IgbG9hZGluZyB0aW1lc3Rh bXBzIGZhaWxlZCIpOwo+ICsgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAgICB9Cj4gKyAg ICBpbmZpbGVfc2V0ID0gdHJ1ZTsKPiArICB9Cj4gKwo+ICsgIHRtcF9lbnYgPSBnZXRlbnYoIkZB S0VUSU1FX0ZNVCIpOwo+ICsgIGlmICh0bXBfZW52ID09IE5VTEwpCj4gKyAgewo+ICsgICAgc3Ry Y3B5KHVzZXJfZmFrZWRfdGltZV9mbXQsICIlWS0lbS0lZCAlVCIpOwo+ICsgIH0KPiArICBlbHNl Cj4gKyAgewo+ICsgICAgc3RybmNweSh1c2VyX2Zha2VkX3RpbWVfZm10LCB0bXBfZW52LCBCVUZT SVopOwo+ICsgIH0KPiArCj4gKyAgaWYgKHNoYXJlZF9zZW0gIT0gMCkKPiArICB7Cj4gKyAgICBp ZiAoc2VtX3dhaXQoc2hhcmVkX3NlbSkgPT0gLTEpCj4gKyAgICB7Cj4gKyAgICAgIHBlcnJvcigi c2VtX3dhaXQiKTsKPiArICAgICAgZXhpdCgxKTsKPiArICAgIH0KPiArICAgIGlmIChmdF9zaGFy ZWQtPnN0YXJ0X3RpbWUucmVhbC50dl9uc2VjID09IC0xKQo+ICsgICAgewo+ICsgICAgICAvKiBz ZXQgdXAgZ2xvYmFsIHN0YXJ0IHRpbWUgKi8KPiArICAgICAgc3lzdGVtX3RpbWVfZnJvbV9zeXN0 ZW0oJmZ0cGxfc3RhcnR0aW1lKTsKPiArICAgICAgZnRfc2hhcmVkLT5zdGFydF90aW1lID0gZnRw bF9zdGFydHRpbWU7Cj4gKyAgICB9Cj4gKyAgICBlbHNlCj4gKyAgICB7Cj4gKyAgICAgIC8qKiBn ZXQgcHJlc2V0IHN0YXJ0IHRpbWUgKi8KPiArICAgICAgZnRwbF9zdGFydHRpbWUgPSBmdF9zaGFy ZWQtPnN0YXJ0X3RpbWU7Cj4gKyAgICB9Cj4gKyAgICBpZiAoc2VtX3Bvc3Qoc2hhcmVkX3NlbSkg PT0gLTEpCj4gKyAgICB7Cj4gKyAgICAgIHBlcnJvcigic2VtX3Bvc3QiKTsKPiArICAgICAgZXhp dCgxKTsKPiArICAgIH0KPiArICB9Cj4gKyAgZWxzZQo+ICsgIHsKPiArICAgIHN5c3RlbV90aW1l X2Zyb21fc3lzdGVtKCZmdHBsX3N0YXJ0dGltZSk7Cj4gKyAgfQo+ICsgIC8qIGZha2UgdGltZSBz dXBwbGllZCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZT8gKi8KPiArICBpZiAoTlVMTCAhPSAodG1w X2VudiA9IGdldGVudigiRkFLRVRJTUUiKSkpCj4gKyAgewo+ICsgICAgcGFyc2VfY29uZmlnX2Zp bGUgPSBmYWxzZTsKPiArICAgIHBhcnNlX2Z0X3N0cmluZyh0bXBfZW52KTsKPiArICB9Cj4gKwo+ ICsgIGRvbnRfZmFrZSA9IGRvbnRfZmFrZV9maW5hbDsKPiArfQo+ICsKPiArCj4gKy8qCj4gKyAq ICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KPiArICogICAgICBIZWxwZXIgZnVuY3Rpb25zICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09IEhFTFBFUgo+ICsgKiAgICAg ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Cj4gKyAqLwo+ICsKPiArc3RhdGljIHZvaWQgcmVtb3ZlX3RyYWlsaW5n X2VvbHMoY2hhciAqbGluZSkKPiArewo+ICsgIGNoYXIgKmVuZHAgPSBsaW5lICsgc3RybGVuKGxp bmUpOwo+ICsgIC8qCj4gKyAgICogZXJhc2UgdGhlIGxhc3QgY2hhciBpZiBpdCdzIGEgbmV3bGlu ZQo+ICsgICAqIG9yIGNhcnJpYWdlIHJldHVybiwgYW5kIGJhY2sgdXAuCj4gKyAgICoga2VlcCBk b2luZyB0aGlzLCBidXQgZG9uJ3QgYmFjayB1cAo+ICsgICAqIHBhc3QgdGhlIGJlZ2lubmluZyBv ZiB0aGUgc3RyaW5nLgo+ICsgICAqLwo+ICsjIGRlZmluZSBpc19lb2xjaGFyKGMpICgoYykgPT0g J1xuJyB8fCAoYykgPT0gJ1xyJykKPiArICB3aGlsZSAoZW5kcCA+IGxpbmUgJiYgaXNfZW9sY2hh cihlbmRwWy0xXSkpCj4gKyAgewo+ICsgICAgKi0tZW5kcCA9ICdcMCc7Cj4gKyAgfQo+ICt9Cj4g Kwo+ICsKPiArLyoKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKiAgICAgIEltcGxlbWVu dGF0aW9uIG9mIGZha2VkIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgID09PSBGQUtF KEZBS0UpCj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICovCj4gKwo+ICtpbnQgZmFrZV9j bG9ja19nZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHApCj4gK3sK PiArICAvKiB2YXJpYWJsZXMgdXNlZCBmb3IgY2FjaGluZywgaW50cm9kdWNlZCBpbiB2ZXJzaW9u IDAuNiAqLwo+ICsgIHN0YXRpYyB0aW1lX3QgbGFzdF9kYXRhX2ZldGNoID0gMDsgIC8qIG5vdCBm ZXRjaGVkIHByZXZpb3VzbHkgYXQgZmlyc3QgY2FsbCAqLwo+ICsgIHN0YXRpYyBpbnQgY2FjaGVf ZXhwaXJlZCA9IDE7ICAgICAgIC8qIGNvbnNpZGVyZWQgZXhwaXJlZCBhdCBmaXJzdCBjYWxsICov Cj4gKwo+ICsgIGlmIChkb250X2Zha2UpIHJldHVybiAwOwo+ICsgIC8qIFBlciBwcm9jZXNzIHRp bWVycyBhcmUgb25seSBzcGVkIHVwIG9yIHNsb3dlZCBkb3duICovCj4gKyAgaWYgKChjbGtfaWQg PT0gQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lEICkgfHwgKGNsa19pZCA9PSBDTE9DS19USFJFQURf Q1BVVElNRV9JRCkpCj4gKyAgewo+ICsgICAgaWYgKHVzZXJfcmF0ZV9zZXQpCj4gKyAgICB7Cj4g KyAgICAgIHRpbWVzcGVjbXVsKHRwLCB1c2VyX3JhdGUsIHRwKTsKPiArICAgIH0KPiArICAgIHJl dHVybiAwOwo+ICsgIH0KPiArCj4gKyAgLyogU2FuaXR5IGNoZWNrIGJ5IEthcmwgQ2hhbiBzaW5j ZSB2MC44ICovCj4gKyAgaWYgKHRwID09IE5VTEwpIHJldHVybiAtMTsKPiArCj4gKyNpZmRlZiBQ VEhSRUFEX1NJTkdMRVRIUkVBREVEX1RJTUUKPiArICBzdGF0aWMgcHRocmVhZF9tdXRleF90IHRp bWVfbXV0ZXg9UFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKPiArICBwdGhyZWFkX211dGV4X2xv Y2soJnRpbWVfbXV0ZXgpOwo+ICsgIHB0aHJlYWRfY2xlYW51cF9wdXNoKCh2b2lkICgqKSh2b2lk ICopKXB0aHJlYWRfbXV0ZXhfdW5sb2NrLCAodm9pZCAqKSZ0aW1lX211dGV4KTsKPiArI2VuZGlm Cj4gKwo+ICsgIGlmICgobGltaXRlZF9mYWtpbmcgJiYKPiArICAgICAoKGZ0X3N0YXJ0X2FmdGVy X25jYWxscyAhPSAtMSkgfHwgKGZ0X3N0b3BfYWZ0ZXJfbmNhbGxzICE9IC0xKSkpIHx8Cj4gKyAg ICAgKHNwYXduc3VwcG9ydCAmJiBmdF9zcGF3bl9uY2FsbHMpKQo+ICsgIHsKPiArICAgIGlmIChj YWxsY291bnRlciA8IExPTkdfTUFYKSBjYWxsY291bnRlcisrOwo+ICsgIH0KPiArCj4gKyAgaWYg KGxpbWl0ZWRfZmFraW5nIHx8IHNwYXduc3VwcG9ydCkKPiArICB7Cj4gKyAgICBzdHJ1Y3QgdGlt ZXNwZWMgdG1wX3RzOwo+ICsgICAgLyogRm9yIGRlYnVnZ2luZywgb3V0cHV0ICNzZWNvbmRzIGFu ZCAjY2FsbHMgKi8KPiArICAgIHN3aXRjaCAoY2xrX2lkKQo+ICsgICAgewo+ICsgICAgICBjYXNl IENMT0NLX1JFQUxUSU1FOgo+ICsjaWZkZWYgQ0xPQ0tfUkVBTFRJTUVfQ09BUlNFCj4gKyAgICAg IGNhc2UgQ0xPQ0tfUkVBTFRJTUVfQ09BUlNFOgo+ICsjZW5kaWYKPiArICAgICAgICB0aW1lc3Bl Y3N1Yih0cCwgJmZ0cGxfc3RhcnR0aW1lLnJlYWwsICZ0bXBfdHMpOwo+ICsgICAgICAgIGJyZWFr Owo+ICsgICAgICBjYXNlIENMT0NLX01PTk9UT05JQzoKPiArI2lmZGVmIENMT0NLX01PTk9UT05J Q19DT0FSU0UKPiArICAgICAgY2FzZSBDTE9DS19NT05PVE9OSUNfQ09BUlNFOgo+ICsjZW5kaWYK PiArICAgICAgICB0aW1lc3BlY3N1Yih0cCwgJmZ0cGxfc3RhcnR0aW1lLm1vbiwgJnRtcF90cyk7 Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICAgIGNhc2UgQ0xPQ0tfTU9OT1RPTklDX1JBVzoKPiAr ICAgICAgICB0aW1lc3BlY3N1Yih0cCwgJmZ0cGxfc3RhcnR0aW1lLm1vbl9yYXcsICZ0bXBfdHMp Owo+ICsgICAgICAgIGJyZWFrOwo+ICsjaWZkZWYgQ0xPQ0tfQk9PVFRJTUUKPiArICAgICAgY2Fz ZSBDTE9DS19CT09UVElNRToKPiArICAgICAgICB0aW1lc3BlY3N1Yih0cCwgJmZ0cGxfc3RhcnR0 aW1lLmJvb3QsICZ0bXBfdHMpOwo+ICsgICAgICAgIGJyZWFrOwo+ICsjZW5kaWYKPiArICAgICAg ZGVmYXVsdDoKPiArICAgICAgICBwcmludGYoIkludmFsaWQgY2xvY2tfaWQgZm9yIGNsb2NrX2dl dHRpbWU6ICVkIiwgY2xrX2lkKTsKPiArICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgaWYgKGxpbWl0ZWRfZmFraW5nKQo+ICsgICAgewo+ICsgICAgICAvKiBD aGVjayB3aGV0aGVyIHdlIGFjdHVhbGx5IHNob3VsZCBiZSBmYWtpbmcgdGhlIHJldHVybmVkIHRp bWVzdGFtcC4gKi8KPiArICAgICAgLyogZnByaW50ZihzdGRlcnIsICIobGliZmFrZXRpbWUgbGlt aXRzIC0+IHJ1bnRpbWU6ICVsdSwgY2FsbGNvdW50ZXI6ICVsdVxuIiwgKCp0aW1lX3RwdHIgLSBm dHBsX3N0YXJ0dGltZSksIGNhbGxjb3VudGVyKTsgKi8KPiArICAgICAgaWYgKChmdF9zdGFydF9h ZnRlcl9zZWNzICE9IC0xKSAgICYmICh0bXBfdHMudHZfc2VjIDwgZnRfc3RhcnRfYWZ0ZXJfc2Vj cykpIHJldHVybiAwOwo+ICsgICAgICBpZiAoKGZ0X3N0b3BfYWZ0ZXJfc2VjcyAhPSAtMSkgICAg JiYgKHRtcF90cy50dl9zZWMgPj0gZnRfc3RvcF9hZnRlcl9zZWNzKSkgcmV0dXJuIDA7Cj4gKyAg ICAgIGlmICgoZnRfc3RhcnRfYWZ0ZXJfbmNhbGxzICE9IC0xKSAmJiAoY2FsbGNvdW50ZXIgPCBm dF9zdGFydF9hZnRlcl9uY2FsbHMpKSByZXR1cm4gMDsKPiArICAgICAgaWYgKChmdF9zdG9wX2Fm dGVyX25jYWxscyAhPSAtMSkgICYmIChjYWxsY291bnRlciA+PSBmdF9zdG9wX2FmdGVyX25jYWxs cykpIHJldHVybiAwOwo+ICsgICAgICAvKiBmcHJpbnRmKHN0ZGVyciwgIihsaWJmYWtldGltZSBs aW1pdHMgLT4gcnVudGltZTogJWx1LCBjYWxsY291bnRlcjogJWx1IGNvbnRpbnVlc1xuIiwgKCp0 aW1lX3RwdHIgLSBmdHBsX3N0YXJ0dGltZSksIGNhbGxjb3VudGVyKTsgKi8KPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoc3Bhd25zdXBwb3J0KQo+ICsgICAgewo+ICsgICAgICAvKiBjaGVjayB3aGV0 aGVyIHdlIHNob3VsZCBzcGF3biBhbiBleHRlcm5hbCBjb21tYW5kICovCj4gKyAgICAgIGlmIChz cGF3bmVkID09IDApCj4gKyAgICAgIHsgLyogZXhlYyBleHRlcm5hbCBjb21tYW5kIG9uY2Ugb25s eSAqLwo+ICsgICAgICAgIGlmICgoKHRtcF90cy50dl9zZWMgPT0gZnRfc3Bhd25fc2VjcykgfHwg KGNhbGxjb3VudGVyID09IGZ0X3NwYXduX25jYWxscykpICYmIChzcGF3bmVkID09IDApKQo+ICsg ICAgICAgIHsKPiArICAgICAgICAgIHNwYXduZWQgPSAxOwo+ICsgICAgICAgICAgKHZvaWQpIChz eXN0ZW0oZnRfc3Bhd25fdGFyZ2V0KSArIDEpOwo+ICsgICAgICAgIH0KPiArICAgICAgfQo+ICsg ICAgfQo+ICsgIH0KPiArCj4gKyAgaWYgKGxhc3RfZGF0YV9mZXRjaCA+IDApCj4gKyAgewo+ICsg ICAgaWYgKCh0cC0+dHZfc2VjIC0gbGFzdF9kYXRhX2ZldGNoKSA+IGNhY2hlX2R1cmF0aW9uKQo+ ICsgICAgewo+ICsgICAgICBjYWNoZV9leHBpcmVkID0gMTsKPiArICAgIH0KPiArICAgIGVsc2UK PiArICAgIHsKPiArICAgICAgY2FjaGVfZXhwaXJlZCA9IDA7Cj4gKyAgICB9Cj4gKyAgfQo+ICsK PiArICBpZiAoY2FjaGVfZW5hYmxlZCA9PSAwKQo+ICsgIHsKPiArICAgIGNhY2hlX2V4cGlyZWQg PSAxOwo+ICsgIH0KPiArCj4gKyAgaWYgKGNhY2hlX2V4cGlyZWQgPT0gMSkKPiArICB7Cj4gKyAg ICBzdGF0aWMgY2hhciB1c2VyX2Zha2VkX3RpbWVbQlVGRkVSTEVOXTsgLyogY2hhbmdlZCB0byBz dGF0aWMgZm9yIGNhY2hpbmcgaW4gdjAuNiAqLwo+ICsgICAgLyogaW5pdGlhbGl6ZSB3aXRoIGRl ZmF1bHQgb3IgZW52LiB2YXJpYWJsZSAqLwo+ICsgICAgY2hhciAqdG1wX2VudjsKPiArCj4gKyAg ICAvKiBDYW4gYmUgZW5hYmxlZCBmb3IgdGVzdGluZyAuLi4KPiArICAgICAgZnByaW50ZihzdGRl cnIsICIqKioqKioqKioqKioqKiorKyBDYWNoZSBleHBpcmVkICsrKioqKioqKioqKioqKipcbiIp Owo+ICsgICAgKi8KPiArCj4gKyAgICBpZiAoTlVMTCAhPSAodG1wX2VudiA9IGdldGVudigiRkFL RVRJTUUiKSkpCj4gKyAgICB7Cj4gKyAgICAgIHN0cm5jcHkodXNlcl9mYWtlZF90aW1lLCB0bXBf ZW52LCBCVUZGRVJMRU4pOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsgICAgICBz bnByaW50Zih1c2VyX2Zha2VkX3RpbWUsIEJVRkZFUkxFTiwgIiswIik7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgbGFzdF9kYXRhX2ZldGNoID0gdHAtPnR2X3NlYzsKPiArICAgIC8qIGZha2UgdGltZSBz dXBwbGllZCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZT8gKi8KPiArICAgIGlmIChwYXJzZV9jb25m aWdfZmlsZSkKPiArICAgIHsKPiArICAgICAgY2hhciBjdXN0b21fZmlsZW5hbWVbQlVGU0laXTsK PiArICAgICAgY2hhciBmaWxlbmFtZVtCVUZTSVpdOwo+ICsgICAgICBGSUxFICpmYWtldGltZXJj Owo+ICsgICAgICAvKiBjaGVjayB3aGV0aGVyIHRoZXJlJ3MgYSAuZmFrZXRpbWVyYyBpbiB0aGUg dXNlcidzIGhvbWUgZGlyZWN0b3J5LCBvcgo+ICsgICAgICAgKiBhIHN5c3RlbS13aWRlIC9ldGMv ZmFrZXRpbWVyYyBwcmVzZW50Lgo+ICsgICAgICAgKiBUaGUgL2V0Yy9mYWtldGltZXJjIGhhbmRs aW5nIGhhcyBiZWVuIGNvbnRyaWJ1dGVkIGJ5IERhdmlkIEJ1cmxleSwKPiArICAgICAgICogSmFj b2IgTW9vcm1hbiwgYW5kIFdheW5lIERhdmlzb24gb2YgU291cmNlRm9yZ2UsIEluYy4gaW4gdmVy c2lvbiAwLjYgKi8KPiArICAgICAgKHZvaWQpIHNucHJpbnRmKGN1c3RvbV9maWxlbmFtZSwgQlVG U0laLCAiJXMiLCBnZXRlbnYoIkZBS0VUSU1FX1RJTUVTVEFNUF9GSUxFIikpOwo+ICsgICAgICAo dm9pZCkgc25wcmludGYoZmlsZW5hbWUsIEJVRlNJWiwgIiVzLy5mYWtldGltZXJjIiwgZ2V0ZW52 KCJIT01FIikpOwo+ICsgICAgICBpZiAoKGZha2V0aW1lcmMgPSBmb3BlbihjdXN0b21fZmlsZW5h bWUsICJydCIpKSAhPSBOVUxMIHx8Cj4gKyAgICAgICAgICAoZmFrZXRpbWVyYyA9IGZvcGVuKGZp bGVuYW1lLCAicnQiKSkgIT0gTlVMTCB8fAo+ICsgICAgICAgICAgKGZha2V0aW1lcmMgPSBmb3Bl bigiL2V0Yy9mYWtldGltZXJjIiwgInJ0IikpICE9IE5VTEwpCj4gKyAgICAgIHsKPiArICAgICAg ICBjaGFyIGxpbmVbQlVGRkVSTEVOXTsKPiArICAgICAgICB3aGlsZShmZ2V0cyhsaW5lLCBCVUZG RVJMRU4sIGZha2V0aW1lcmMpICE9IE5VTEwpCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgaWYg KChzdHJsZW4obGluZSkgPiAxKSAmJiAobGluZVswXSAhPSAnICcpICYmCj4gKyAgICAgICAgICAg ICAgKGxpbmVbMF0gIT0gJyMnKSAmJiAobGluZVswXSAhPSAnOycpKQo+ICsgICAgICAgICAgewo+ ICsgICAgICAgICAgICByZW1vdmVfdHJhaWxpbmdfZW9scyhsaW5lKTsKPiArICAgICAgICAgICAg c3RybmNweSh1c2VyX2Zha2VkX3RpbWUsIGxpbmUsIEJVRkZFUkxFTi0xKTsKPiArICAgICAgICAg ICAgdXNlcl9mYWtlZF90aW1lW0JVRkZFUkxFTi0xXSA9IDA7Cj4gKyAgICAgICAgICAgIGJyZWFr Owo+ICsgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgICAgICBmY2xvc2UoZmFrZXRpbWVy Yyk7Cj4gKyAgICAgIH0KPiArICAgIH0gLyogcmVhZCBmYWtlIHRpbWUgZnJvbSBmaWxlICovCj4g KyAgICBwYXJzZV9mdF9zdHJpbmcodXNlcl9mYWtlZF90aW1lKTsKPiArICB9IC8qIGNhY2hlIGhh ZCBleHBpcmVkICovCj4gKwo+ICsgIGlmIChpbmZpbGVfc2V0KQo+ICsgIHsKPiArICAgIGlmIChs b2FkX3RpbWUodHApKQo+ICsgICAgewo+ICsgICAgICByZXR1cm4gMDsKPiArICAgIH0KPiArICB9 Cj4gKwo+ICsgIC8qIGNoZWNrIHdoZXRoZXIgdGhlIHVzZXIgZ2F2ZSB1cyBhbiBhYnNvbHV0ZSB0 aW1lIHRvIGZha2UgKi8KPiArICBzd2l0Y2ggKGZ0X21vZGUpCj4gKyAgewo+ICsgICAgY2FzZSBG VF9GUkVFWkU6ICAvKiBhIHNwZWNpZmllZCB0aW1lICovCj4gKyAgICAgIGlmICh1c2VyX2Zha2Vk X3RpbWVfc2V0KQo+ICsgICAgICB7Cj4gKyAgICAgICAgKnRwID0gdXNlcl9mYWtlZF90aW1lX3Rp bWVzcGVjOwo+ICsgICAgICB9Cj4gKyAgICAgIGJyZWFrOwo+ICsKPiArICAgIGNhc2UgRlRfU1RB UlRfQVQ6IC8qIFVzZXItc3BlY2lmaWVkIG9mZnNldCAqLwo+ICsgICAgICBpZiAodXNlcl9wZXJf dGlja19pbmNfc2V0KQo+ICsgICAgICB7Cj4gKyAgICAgICAgLyogaW5jcmVtZW50IHRpbWUgd2l0 aCBldmVyeSB0aW1lKCkgY2FsbCovCj4gKyAgICAgICAgbmV4dF90aW1lKHRwLCAmdXNlcl9wZXJf dGlja19pbmMpOwo+ICsgICAgICB9Cj4gKyAgICAgIGVsc2UKPiArICAgICAgewo+ICsgICAgICAg IC8qIFNwZWVkLXVwIC8gc2xvdy1kb3duIGNvbnRyaWJ1dGVkIGJ5IEthcmwgQ2hlbiBpbiB2MC44 ICovCj4gKyAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRkaWZmLCB0aW1lYWRqOwo+ICsgICAgICAg IHN3aXRjaCAoY2xrX2lkKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgIGNhc2UgQ0xPQ0tfUkVB TFRJTUU6Cj4gKyNpZmRlZiBDTE9DS19SRUFMVElNRV9DT0FSU0UKPiArICAgICAgICAgIGNhc2Ug Q0xPQ0tfUkVBTFRJTUVfQ09BUlNFOgo+ICsjZW5kaWYKPiArICAgICAgICAgICAgdGltZXNwZWNz dWIodHAsICZmdHBsX3N0YXJ0dGltZS5yZWFsLCAmdGRpZmYpOwo+ICsgICAgICAgICAgICBicmVh azsKPiArICAgICAgICAgIGNhc2UgQ0xPQ0tfTU9OT1RPTklDOgo+ICsjaWZkZWYgQ0xPQ0tfTU9O T1RPTklDX0NPQVJTRQo+ICsgICAgICAgICAgY2FzZSBDTE9DS19NT05PVE9OSUNfQ09BUlNFOgo+ ICsjZW5kaWYKPiArICAgICAgICAgICAgdGltZXNwZWNzdWIodHAsICZmdHBsX3N0YXJ0dGltZS5t b24sICZ0ZGlmZik7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgY2FzZSBDTE9D S19NT05PVE9OSUNfUkFXOgo+ICsgICAgICAgICAgICB0aW1lc3BlY3N1Yih0cCwgJmZ0cGxfc3Rh cnR0aW1lLm1vbl9yYXcsICZ0ZGlmZik7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsjaWZkZWYg Q0xPQ0tfQk9PVFRJTUUKPiArICAgICAgICAgIGNhc2UgQ0xPQ0tfQk9PVFRJTUU6Cj4gKyAgICAg ICAgICAgIHRpbWVzcGVjc3ViKHRwLCAmZnRwbF9zdGFydHRpbWUuYm9vdCwgJnRkaWZmKTsKPiAr ICAgICAgICAgICAgYnJlYWs7Cj4gKyNlbmRpZgo+ICsgICAgICAgICAgZGVmYXVsdDoKPiArICAg ICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGNsb2NrX2lkIGZvciBjbG9ja19nZXR0aW1lOiAlZCIs IGNsa19pZCk7Cj4gKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKPiArICAgICAgICB9 IC8vIGVuZCBvZiBzd2l0Y2ggKGNsa19pZCkKPiArICAgICAgICBpZiAodXNlcl9yYXRlX3NldCkK PiArICAgICAgICB7Cj4gKyAgICAgICAgICB0aW1lc3BlY211bCgmdGRpZmYsIHVzZXJfcmF0ZSwg JnRpbWVhZGopOwo+ICsgICAgICAgIH0KPiArICAgICAgICBlbHNlCj4gKyAgICAgICAgewo+ICsg ICAgICAgICAgdGltZWFkaiA9IHRkaWZmOwo+ICsgICAgICAgIH0KPiArICAgICAgICB0aW1lc3Bl Y2FkZCgmdXNlcl9mYWtlZF90aW1lX3RpbWVzcGVjLCAmdGltZWFkaiwgdHApOwo+ICsgICAgICB9 Cj4gKyAgICAgIGJyZWFrOwo+ICsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgIHJldHVybiAtMTsK PiArICB9IC8vIGVuZCBvZiBzd2l0Y2goZnRfbW9kZSkKPiArCj4gKyNpZmRlZiBQVEhSRUFEX1NJ TkdMRVRIUkVBREVEX1RJTUUKPiArICBwdGhyZWFkX2NsZWFudXBfcG9wKDEpOwo+ICsjZW5kaWYK PiArICBzYXZlX3RpbWUodHApOwo+ICsgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgZmFrZV9n ZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQo+ICt7Cj4gKyAgc3RydWN0IHRpbWVzcGVj IHRzOwo+ICsgIGludCByZXQ7Cj4gKyAgdHMudHZfc2VjID0gdHYtPnR2X3NlYzsKPiArICB0cy50 dl9uc2VjID0gdHYtPnR2X3VzZWMgKiAxMDAwICArIGZ0cGxfc3RhcnR0aW1lLnJlYWwudHZfbnNl YyAlIDEwMDA7Cj4gKwo+ICsgIHJldCA9IGZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElN RSwgJnRzKTsKPiArICB0di0+dHZfc2VjID0gdHMudHZfc2VjOwo+ICsgIHR2LT50dl91c2VjID10 cy50dl9uc2VjIC8gMTAwMDsKPiArCj4gKyAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArCj4gKy8q Cj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICogICAgICBGYWtlZCBzeXN0ZW0gZnVuY3Rp b25zOiBBcHBsZSBNYWMgT1MgWCBzcGVjaWZpYyAgICAgICAgICAgPT09IEZBS0UoT1NYKQo+ICsg KiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Cj4gKyAqLwo+ICsKPiArI2lmZGVmIF9fQVBQTEVPU1hfXwo+ ICsvKgo+ICsgKiBjbG9ja19nZXR0aW1lIGltcGxlbWVudGF0aW9uIGZvciBfX0FQUExFX18KPiAr ICogQG5vdGUgSXQgYWx3YXlzIGJlaGF2ZSBsaWtlIGJlaW5nIGNhbGxlZCB3aXRoIENMT0NLX1JF QUxUSU1FLgo+ICsgKi8KPiArc3RhdGljIGludCBhcHBsZV9jbG9ja19nZXR0aW1lKGNsb2NraWRf dCBjbGtfaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHApCj4gK3sKPiArICBpbnQgcmVzdWx0Owo+ICsg IG1hY2hfdGltZXNwZWNfdCBjdXJfdGltZWNsb2NraWRfdDsKPiArICAodm9pZCkgY2xrX2lkOyAv KiB1bnVzZWQgKi8KPiArCj4gKyAgaWYgKE5VTEwgPT0gcmVhbF9jbG9ja19nZXRfdGltZSkKPiAr ICB7ICAvKiBkbHN5bSgpIGZhaWxlZCAqLwo+ICsjaWZkZWYgREVCVUcKPiArICAgICh2b2lkKSBm cHJpbnRmKHN0ZGVyciwgImZha2V0aW1lIHByb2JsZW06IG9yaWdpbmFsIGNsb2NrX2dldF90aW1l KCkgbm90IGZvdW5kLlxuIik7Cj4gKyNlbmRpZgo+ICsgICAgcmV0dXJuIC0xOyAvKiBwcm9wYWdh dGUgZXJyb3IgdG8gY2FsbGVyICovCj4gKyAgfQo+ICsKPiArICBET05UX0ZBS0VfVElNRShyZXN1 bHQgPSAoKnJlYWxfY2xvY2tfZ2V0X3RpbWUpKGNsb2NrX3NlcnZfcmVhbCwgJmN1cl90aW1lY2xv Y2tpZF90KSk7Cj4gKyAgdHAtPnR2X3NlYyA9ICBjdXJfdGltZWNsb2NraWRfdC50dl9zZWM7Cj4g KyAgdHAtPnR2X25zZWMgPSBjdXJfdGltZWNsb2NraWRfdC50dl9uc2VjOwo+ICsgIHJldHVybiBy ZXN1bHQ7Cj4gK30KPiArCj4gK2ludCBjbG9ja19nZXRfdGltZShjbG9ja19zZXJ2X3QgY2xvY2tf c2VydiwgbWFjaF90aW1lc3BlY190ICpjdXJfdGltZWNsb2NraWRfdCkKPiArewo+ICsgIGludCBy ZXN1bHQ7Cj4gKyAgc3RydWN0IHRpbWVzcGVjIHRzOwo+ICsKPiArICAvKgo+ICsgICAqIEluaXRp YWxpemUgb3VyIHJlc3VsdCB3aXRoIHRoZSByZWFsIGN1cnJlbnQgdGltZSBmcm9tIENBTEVOREFS X0NMT0NLLgo+ICsgICAqIFRoaXMgaXMgYSBiaXQgb2YgY2hlYXRpbmcsIGJ1dCB3ZSBkb24ndCBr ZWVwIHRyYWNrIG9mIG9idGFpbmVkIGNsb2NrCj4gKyAgICogc2VydmljZXMuCj4gKyAgICovCj4g KyAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX2Nsb2NrX2dldHRpbWUpKENMT0NLX1JF QUxUSU1FLCAmdHMpKTsKPiArICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gcmVzdWx0OyAvKiBv cmlnaW5hbCBmdW5jdGlvbiBmYWlsZWQgKi8KPiArCj4gKyAgLyogcGFzcyB0aGUgcmVhbCBjdXJy ZW50IHRpbWUgdG8gb3VyIGZha2luZyB2ZXJzaW9uLCBvdmVyd3JpdGluZyBpdCAqLwo+ICsgIHJl c3VsdCA9IGZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzKTsKPiArICBjdXJf dGltZWNsb2NraWRfdC0+dHZfc2VjID0gdHMudHZfc2VjOwo+ICsgIGN1cl90aW1lY2xvY2tpZF90 LT50dl9uc2VjID0gdHMudHZfbnNlYzsKPiArCj4gKyAgLyogcmV0dXJuIHRoZSByZXN1bHQgdG8g dGhlIGNhbGxlciAqLwo+ICsgIHJldHVybiByZXN1bHQ7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICsK PiArLyoKPiArICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsgKiAgICAgIEZha2VkIHN5c3RlbS1p bnRlcm5hbCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gRkFLRShJTlQp Cj4gKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArICovCj4gKwo+ICsjaWZkZWYgRkFLRV9JTlRF Uk5BTF9DQUxMUwo+ICtpbnQgX19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCB2b2lk ICp0eikKPiArewo+ICsgIGludCByZXN1bHQ7Cj4gKwo+ICsgIC8qIHNhbml0eSBjaGVjayAqLwo+ ICsgIGlmICh0diA9PSBOVUxMKQo+ICsgIHsKPiArICAgIHJldHVybiAtMTsKPiArICB9Cj4gKwo+ ICsgIC8qIENoZWNrIHdoZXRoZXIgd2UndmUgZ290IGEgcG9pbnRlciB0byB0aGUgcmVhbCBmdGlt ZSgpIGZ1bmN0aW9uIHlldCAqLwo+ICsgIGlmIChOVUxMID09IHJlYWxfX19nZXR0aW1lb2ZkYXkp Cj4gKyAgeyAgLyogZGxzeW0oKSBmYWlsZWQgKi8KPiArI2lmZGVmIERFQlVHCj4gKyAgICAodm9p ZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBwcm9ibGVtOiBvcmlnaW5hbCBfX2dldHRpbWVv ZmRheSgpIG5vdCBmb3VuZC5cbiIpOwo+ICsjZW5kaWYKPiArICAgIHJldHVybiAtMTsgLyogcHJv cGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLwo+ICsgIH0KPiArCj4gKyAgLyogaW5pdGlhbGl6ZSBv dXIgcmVzdWx0IHdpdGggdGhlIHJlYWwgY3VycmVudCB0aW1lICovCj4gKyAgRE9OVF9GQUtFX1RJ TUUocmVzdWx0ID0gKCpyZWFsX19fZ2V0dGltZW9mZGF5KSh0diwgdHopKTsKPiArICBpZiAocmVz dWx0ID09IC0xKSByZXR1cm4gcmVzdWx0OyAvKiBvcmlnaW5hbCBmdW5jdGlvbiBmYWlsZWQgKi8K PiArCj4gKyAgLyogcGFzcyB0aGUgcmVhbCBjdXJyZW50IHRpbWUgdG8gb3VyIGZha2luZyB2ZXJz aW9uLCBvdmVyd3JpdGluZyBpdCAqLwo+ICsgIHJlc3VsdCA9IGZha2VfZ2V0dGltZW9mZGF5KHR2 KTsKPiArCj4gKyAgLyogcmV0dXJuIHRoZSByZXN1bHQgdG8gdGhlIGNhbGxlciAqLwo+ICsgIHJl dHVybiByZXN1bHQ7Cj4gK30KPiArCj4gK2ludCBfX2Nsb2NrX2dldHRpbWUoY2xvY2tpZF90IGNs a19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCkKPiArewo+ICsgIGludCByZXN1bHQ7Cj4gKwo+ICsg IC8qIHNhbml0eSBjaGVjayAqLwo+ICsgIGlmICh0cCA9PSBOVUxMKQo+ICsgIHsKPiArICAgIHJl dHVybiAtMTsKPiArICB9Cj4gKwo+ICsgIGlmIChOVUxMID09IHJlYWxfX19jbG9ja19nZXR0aW1l KQo+ICsgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCj4gKyNpZmRlZiBERUJVRwo+ICsgICAgKHZv aWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxlbTogb3JpZ2luYWwgX19jbG9ja19n ZXR0aW1lKCkgbm90IGZvdW5kLlxuIik7Cj4gKyNlbmRpZgo+ICsgICAgcmV0dXJuIC0xOyAvKiBw cm9wYWdhdGUgZXJyb3IgdG8gY2FsbGVyICovCj4gKyAgfQo+ICsKPiArICAvKiBpbml0aWFsaXpl IG91ciByZXN1bHQgd2l0aCB0aGUgcmVhbCBjdXJyZW50IHRpbWUgKi8KPiArICBET05UX0ZBS0Vf VElNRShyZXN1bHQgPSAoKnJlYWxfX19jbG9ja19nZXR0aW1lKShjbGtfaWQsIHRwKSk7Cj4gKyAg aWYgKHJlc3VsdCA9PSAtMSkgcmV0dXJuIHJlc3VsdDsgLyogb3JpZ2luYWwgZnVuY3Rpb24gZmFp bGVkICovCj4gKwo+ICsgIC8qIHBhc3MgdGhlIHJlYWwgY3VycmVudCB0aW1lIHRvIG91ciBmYWtp bmcgdmVyc2lvbiwgb3ZlcndyaXRpbmcgaXQgKi8KPiArICBpZiAoZmFrZV9tb25vdG9uaWNfY2xv Y2sgfHwgY2xrX2lkICE9IENMT0NLX01PTk9UT05JQykKPiArICB7Cj4gKyAgICByZXN1bHQgPSBm YWtlX2Nsb2NrX2dldHRpbWUoY2xrX2lkLCB0cCk7Cj4gKyAgfQo+ICsKPiArICAvKiByZXR1cm4g dGhlIHJlc3VsdCB0byB0aGUgY2FsbGVyICovCj4gKyAgcmV0dXJuIHJlc3VsdDsKPiArfQo+ICsK PiArdGltZV90IF9fdGltZSh0aW1lX3QgKnRpbWVfdHB0cikKPiArewo+ICsgIHN0cnVjdCB0aW1l c3BlYyB0cDsKPiArICB0aW1lX3QgcmVzdWx0Owo+ICsKPiArICBET05UX0ZBS0VfVElNRShyZXN1 bHQgPSAoKnJlYWxfY2xvY2tfZ2V0dGltZSkoQ0xPQ0tfUkVBTFRJTUUsICZ0cCkpOwo+ICsgIGlm IChyZXN1bHQgPT0gLTEpIHJldHVybiAtMTsKPiArCj4gKyAgLyogcGFzcyB0aGUgcmVhbCBjdXJy ZW50IHRpbWUgdG8gb3VyIGZha2luZyB2ZXJzaW9uLCBvdmVyd3JpdGluZyBpdCAqLwo+ICsgICh2 b2lkKWZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRwKTsKPiArCj4gKyAgaWYg KHRpbWVfdHB0ciAhPSBOVUxMKQo+ICsgIHsKPiArICAgICp0aW1lX3RwdHIgPSB0cC50dl9zZWM7 Cj4gKyAgfQo+ICsgIHJldHVybiB0cC50dl9zZWM7Cj4gK30KPiArCj4gK2ludCBfX2Z0aW1lKHN0 cnVjdCB0aW1lYiAqdGIpCj4gK3sKPiArICBzdHJ1Y3QgdGltZXNwZWMgdHA7Cj4gKyAgaW50IHJl c3VsdDsKPiArCj4gKyAgLyogc2FuaXR5IGNoZWNrICovCj4gKyAgaWYgKHRiID09IE5VTEwpCj4g KyAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAvKiBmdGltZSgpIGFsd2F5cyByZXR1cm5zIDAs IHNlZSBtYW5wYWdlICovCj4gKwo+ICsgIC8qIENoZWNrIHdoZXRoZXIgd2UndmUgZ290IGEgcG9p bnRlciB0byB0aGUgcmVhbCBmdGltZSgpIGZ1bmN0aW9uIHlldCAqLwo+ICsgIGlmIChOVUxMID09 IHJlYWxfX19mdGltZSkKPiArICB7ICAvKiBkbHN5bSgpIGZhaWxlZCAqLwo+ICsjaWZkZWYgREVC VUcKPiArICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImZha2V0aW1lIHByb2JsZW06IG9yaWdp bmFsIGZ0aW1lKCkgbm90IGZvdW5kLlxuIik7Cj4gKyNlbmRpZgo+ICsgICAgcmV0dXJuIDA7IC8q IHByb3BhZ2F0ZSBlcnJvciB0byBjYWxsZXIgKi8KPiArICB9Cj4gKwo+ICsgIC8qIGluaXRpYWxp emUgb3VyIFRaIHJlc3VsdCB3aXRoIHRoZSByZWFsIGN1cnJlbnQgdGltZSAqLwo+ICsgIERPTlRf RkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9fX2Z0aW1lKSh0YikpOwo+ICsgIGlmIChyZXN1bHQg PT0gLTEpCj4gKyAgewo+ICsgICAgcmV0dXJuIHJlc3VsdDsKPiArICB9Cj4gKwo+ICsgIERPTlRf RkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9jbG9ja19nZXR0aW1lKShDTE9DS19SRUFMVElNRSwg JnRwKSk7Cj4gKyAgaWYgKHJlc3VsdCA9PSAtMSkgcmV0dXJuIC0xOwo+ICsKPiArICAvKiBwYXNz IHRoZSByZWFsIGN1cnJlbnQgdGltZSB0byBvdXIgZmFraW5nIHZlcnNpb24sIG92ZXJ3cml0aW5n IGl0ICovCj4gKyAgKHZvaWQpZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHAp Owo+ICsKPiArICB0Yi0+dGltZSA9IHRwLnR2X3NlYzsKPiArICB0Yi0+bWlsbGl0bSA9IHRwLnR2 X25zZWMgLyAxMDAwMDAwOwo+ICsKPiArICAvKiByZXR1cm4gdGhlIHJlc3VsdCB0byB0aGUgY2Fs bGVyICovCj4gKyAgcmV0dXJuIHJlc3VsdDsgLyogd2lsbCBhbHdheXMgYmUgMCAoc2VlIG1hbnBh Z2UpICovCj4gK30KPiArCj4gKyNlbmRpZgo+ICsKPiArLyoKPiArICogRWRpdG9yIG1vZGVsaW5l cwo+ICsgKgo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6Cj4gKyAqIGMtYmFzaWMtb2Zmc2V0OiAyCj4g KyAqIHRhYi13aWR0aDogMgo+ICsgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKPiArICogRW5kOgo+ ICsgKgo+ICsgKiB2aTogc2V0IHNoaWZ0d2lkdGg9MiB0YWJzdG9wPTIgZXhwYW5kdGFiOgo+ICsg KiA6aW5kZW50U2l6ZT0yOnRhYlNpemU9Mjpub1RhYnM9dHJ1ZToKPiArICovCj4gKwo+ICsvKiBl b2YgKi8KPiBkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWJmYWtldGltZS9saWJmYWtldGltZS5tYXAg Yi9zY3JpcHRzL2xpYmZha2V0aW1lL2xpYmZha2V0aW1lLm1hcAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uNmUwMDhjZgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9zY3Jp cHRzL2xpYmZha2V0aW1lL2xpYmZha2V0aW1lLm1hcAo+IEBAIC0wLDAgKzEsMTAgQEAKPiArR0xJ QkNfMi4yIHsKPiArICBnbG9iYWw6Cj4gKwo+ICsgIHRpbWVyX2dldHRpbWU7IHRpbWVyX3NldHRp bWU7Cj4gKyAgbG9jYWw6IHRpbWVyX3NldHRpbWVfKjsgdGltZXJfZ2V0dGltZV8qOwo+ICt9Owo+ ICtHTElCQ18yLjMuMyB7Cj4gKyAgIyBDaGFuZ2VkIHRpbWVyX3QuCj4gKyAgdGltZXJfZ2V0dGlt ZTsgdGltZXJfc2V0dGltZTsKPiArfSBHTElCQ18yLjI7Cj4gZGlmZiAtLWdpdCBhL3NjcmlwdHMv bGliZmFrZXRpbWUvdGltZV9vcHMuaCBiL3NjcmlwdHMvbGliZmFrZXRpbWUvdGltZV9vcHMuaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNTlhYjFlZQo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9zY3JpcHRzL2xpYmZha2V0aW1lL3RpbWVfb3BzLmgKPiBAQCAtMCwwICsx LDEwNCBAQAo+ICsvKgo+ICsgKiBUaW1lIG9wZXJhdGlvbiBtYWNyb3MgYmFzZWQgb24gc3lzL3Rp bWUuaAo+ICsgKiBDb3B5cmlnaHQgMjAxMyBCYWxpbnQgUmVjemV5IDxiYWxpbnRAYmFsaW50cmVj emV5Lmh1Pgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJmYWtldGltZS4KPiAr ICoKPiArICogbGliZmFrZXRpbWUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgo+ICsgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQo+ICsgKiBT b2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBsaWJmYWtldGltZSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAo+ICsgKiBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFO VEFCSUxJVFkgb3IKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgo+ICsgKiBtb3JlIGRldGFpbHMuCj4g KyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHYyIGFsb25nCj4gKyAqIHdpdGggbGliZmFrZXRpbWU7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKPiArICogNTkg VGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQo+ICsg Ki8KPiArCj4gKyNpZm5kZWYgVElNRV9PUFNfSAo+ICsjZGVmaW5lIFRJTUVfT1BTX0gKPiArI2lu Y2x1ZGUgPHRpbWUuaD4KPiArCj4gKyNkZWZpbmUgU0VDX1RPX3VTRUMgMTAwMDAwMAo+ICsjZGVm aW5lIFNFQ19UT19uU0VDIDEwMDAwMDAwMDAKPiArCj4gKy8qIENvbnZlbmllbmNlIG1hY3JvcyBm b3Igb3BlcmF0aW9ucyBvbiB0aW1ldmFscy4KPiArICAgTk9URTogYHRpbWVyY21wJyBkb2VzIG5v dCB3b3JrIGZvciA+PSBvciA8PS4gICovCj4gKyNkZWZpbmUgdGltZXJpc3NldDIodHZwLCBwcmVm aXgpICgodHZwKS0+dHZfc2VjIHx8ICh0dnApLT50dl8jI3ByZWZpeCMjc2VjKQo+ICsjZGVmaW5l IHRpbWVyY2xlYXIyKHR2cCwgcHJlZml4KSAoKHR2cCktPnR2X3NlYyA9ICh0dnApLT50dl8jI3By ZWZpeCMjc2VjID0gMCkKPiArI2RlZmluZSB0aW1lcmNtcDIoYSwgYiwgQ01QLCBwcmVmaXgpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgKCgoYSktPnR2X3NlYyA9PSAoYikt PnR2X3NlYykgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAoKGEp LT50dl8jI3ByZWZpeCMjc2VjIENNUCAoYiktPnR2XyMjcHJlZml4IyNzZWMpIDogICAgICAgICAg ICAgIFwKPiArICAgKChhKS0+dHZfc2VjIENNUCAoYiktPnR2X3NlYykpCj4gKyNkZWZpbmUgdGlt ZXJhZGQyKGEsIGIsIHJlc3VsdCwgcHJlZml4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+ICsgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKPiArICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAocmVzdWx0KS0+dHZfc2Vj ID0gKGEpLT50dl9zZWMgKyAoYiktPnR2X3NlYzsgICAgICAgICAgICAgICAgICAgXAo+ICsgICAg KHJlc3VsdCktPnR2XyMjcHJlZml4IyNzZWMgPSAoYSktPnR2XyMjcHJlZml4IyNzZWMgKyAgICAg ICAgICAgIFwKPiArICAgICAgKGIpLT50dl8jI3ByZWZpeCMjc2VjOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICBpZiAoKHJlc3VsdCktPnR2XyMjcHJlZml4 IyNzZWMgPj0gU0VDX1RPXyMjcHJlZml4IyNTRUMpICAgICAgICAgXAo+ICsgICAgICB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiArICAgICAgICArKyhyZXN1bHQpLT50dl9zZWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gKyAgICAgICAgKHJlc3VsdCktPnR2XyMjcHJlZml4IyNzZWMgLT0g U0VDX1RPXyMjcHJlZml4IyNTRUM7ICAgICAgICAgXAo+ICsgICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICB9IHdo aWxlICgwKQo+ICsjZGVmaW5lIHRpbWVyc3ViMihhLCBiLCByZXN1bHQsIHByZWZpeCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiArICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ ICsgICAgKHJlc3VsdCktPnR2X3NlYyA9IChhKS0+dHZfc2VjIC0gKGIpLT50dl9zZWM7ICAgICAg ICAgICAgICAgICAgIFwKPiArICAgIChyZXN1bHQpLT50dl8jI3ByZWZpeCMjc2VjID0gKGEpLT50 dl8jI3ByZWZpeCMjc2VjIC0gICAgICAgICAgICBcCj4gKyAgICAgIChiKS0+dHZfIyNwcmVmaXgj I3NlYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgaWYg KChyZXN1bHQpLT50dl8jI3ByZWZpeCMjc2VjIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKPiArICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgIC0tKHJlc3VsdCktPnR2X3NlYzsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAocmVzdWx0KS0+ dHZfIyNwcmVmaXgjI3NlYyArPSBTRUNfVE9fIyNwcmVmaXgjI1NFQzsgICAgICAgICAgIFwKPiAr ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4gKyAgfSB3aGlsZSAoMCkKPiArI2RlZmluZSB0aW1lcm11bDIodHZwLCBj LCByZXN1bHQsIHByZWZpeCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgZG8gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ICsgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPiArICAgIGxvbmcgbG9uZyB0bXBfdGltZTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICB0bXBfdGltZSA9IChj KSAqICgodHZwKS0+dHZfc2VjICogU0VDX1RPXyMjcHJlZml4IyNTRUMgKyAgICAgICAgXAo+ICsg ICAgICAgICAgICAgICAodHZwKS0+dHZfIyNwcmVmaXgjI3NlYyk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKPiArICAgIChyZXN1bHQpLT50dl8jI3ByZWZpeCMjc2VjID0gdG1wX3RpbWUg JSBTRUNfVE9fIyNwcmVmaXgjI1NFQzsgICBcCj4gKyAgICAocmVzdWx0KS0+dHZfc2VjID0gKHRt cF90aW1lIC0gKHJlc3VsdCktPnR2XyMjcHJlZml4IyNzZWMpIC8gICAgXAo+ICsgICAgICBTRUNf VE9fIyNwcmVmaXgjI1NFQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKPiArICAgIGlmICgocmVzdWx0KS0+dHZfIyNwcmVmaXgjI3NlYyA8IDApICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAocmVzdWx0KS0+dHZf IyNwcmVmaXgjI3NlYyArPSAgU0VDX1RPXyMjcHJlZml4IyNTRUM7ICAgICAgICAgIFwKPiArICAg ICAgKHJlc3VsdCktPnR2X3NlYyAtPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4gKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgIH0gd2hpbGUgKDApCj4gKwo+ICsvKiBvcHMg Zm9yIG1pY3Jvc2VjcyAqLwo+ICsjaWZuZGVmIHRpbWVyaXNzZXQKPiArI2RlZmluZSB0aW1lcmlz c2V0KHR2cCkgdGltZXJpc3NldDIodHZwLHUpCj4gKyNlbmRpZgo+ICsjaWZuZGVmIHRpbWVyY2xl YXIKPiArI2RlZmluZSB0aW1lcmNsZWFyKHR2cCkgdGltZXJjbGVhcjIodHZwLCB1KQo+ICsjZW5k aWYKPiArI2lmbmRlZiB0aW1lcmNtcAo+ICsjZGVmaW5lIHRpbWVyY21wKGEsIGIsIENNUCkgdGlt ZXJjbXAyKGEsIGIsIENNUCwgdSkKPiArI2VuZGlmCj4gKyNpZm5kZWYgdGltZXJhZGQKPiArI2Rl ZmluZSB0aW1lcmFkZChhLCBiLCByZXN1bHQpIHRpbWVyYWRkMihhLCBiLCByZXN1bHQsIHUpCj4g KyNlbmRpZgo+ICsjaWZuZGVmIHRpbWVyc3ViCj4gKyNkZWZpbmUgdGltZXJzdWIoYSwgYiwgcmVz dWx0KSB0aW1lcnN1YjIoYSwgYiwgcmVzdWx0LCB1KQo+ICsjZW5kaWYKPiArI2lmbmRlZiB0aW1l cnN1Ygo+ICsjZGVmaW5lIHRpbWVybXVsKGEsIGMsIHJlc3VsdCkgdGltZXJtdWwyKGEsIGMsIHJl c3VsdCwgdSkKPiArI2VuZGlmCj4gKwo+ICsvKiBvcHMgZm9yIG5hbm9zZWNzICovCj4gKyNkZWZp bmUgdGltZXNwZWNpc3NldCh0dnApIHRpbWVyaXNzZXQyKHR2cCxuKQo+ICsjZGVmaW5lIHRpbWVz cGVjY2xlYXIodHZwKSB0aW1lcmNsZWFyMih0dnAsIG4pCj4gKyNkZWZpbmUgdGltZXNwZWNjbXAo YSwgYiwgQ01QKSB0aW1lcmNtcDIoYSwgYiwgQ01QLCBuKQo+ICsjZGVmaW5lIHRpbWVzcGVjYWRk KGEsIGIsIHJlc3VsdCkgdGltZXJhZGQyKGEsIGIsIHJlc3VsdCwgbikKPiArI2RlZmluZSB0aW1l c3BlY3N1YihhLCBiLCByZXN1bHQpIHRpbWVyc3ViMihhLCBiLCByZXN1bHQsIG4pCj4gKyNkZWZp bmUgdGltZXNwZWNtdWwoYSwgYywgcmVzdWx0KSB0aW1lcm11bDIoYSwgYywgcmVzdWx0LCBuKQo+ ICsKPiArI2VuZGlmCj4gLS0gCj4gMS45LjEKPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+IHB0eGRpc3QgbWFpbGluZyBsaXN0Cj4gcHR4ZGlz dEBwZW5ndXRyb25peC5kZQoKLS0gClBlbmd1dHJvbml4IGUuSy4gICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkluZHVzdHJpYWwgTGludXgg U29sdXRpb25zICAgICAgICAgICAgICAgICB8IGh0dHA6Ly93d3cucGVuZ3V0cm9uaXguZGUvICB8 ClBlaW5lciBTdHIuIDYtOCwgMzExMzcgSGlsZGVzaGVpbSwgR2VybWFueSB8IFBob25lOiArNDkt NTEyMS0yMDY5MTctMCAgICB8CkFtdHNnZXJpY2h0IEhpbGRlc2hlaW0sIEhSQSAyNjg2ICAgICAg ICAgICB8IEZheDogICArNDktNTEyMS0yMDY5MTctNTU1NSB8CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpwdHhkaXN0IG1haWxpbmcgbGlzdApwdHhkaXN0 QHBlbmd1dHJvbml4LmRl From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: From: jon@ringle.org Date: Fri, 3 Aug 2018 11:44:55 -0400 Message-Id: <1533311096-14315-1-git-send-email-jon@ringle.org> Subject: [ptxdist] [PATCH v4 1/2] Add libfaketime as a core component of ptxdist for patchin support List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ptxdist-bounces@pengutronix.de Sender: "ptxdist" To: ptxdist@pengutronix.com Cc: Jon Ringle RnJvbTogSm9uIFJpbmdsZSA8anJpbmdsZUBncmlkcG9pbnQuY29tPgoKbGliZmFrZXRpbWUgd2ls bCBiZSB1c2VkIGR1cmluZyBwYXRjaGluIHNvIHRoYXQgY29tbWl0dGVyIHRpbWVzdGFtcHMgYWx3 YXlzCmhhdmUgYSBmaXhlZCB2YWx1ZSBhbmQgdGhlcmVmb3JlIG1ha2luZyB0aGUgJHtQS0d9X1NF UklFU19TSEEyNTYgdmFsdWUKcmVwZWF0YWJsZQoKVGhlIG1pbmltYWwgc2V0IG9mIHNvdXJjZSBm aWxlcyB3YXMgcGlja2VkIG91dCBvZiBsaWJmYWtldGltZS0wLjkuNwoKU2lnbmVkLW9mZi1ieTog Sm9uIFJpbmdsZSA8anJpbmdsZUBncmlkcG9pbnQuY29tPgotLS0KIE1ha2VmaWxlLmluICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICstCiBzY3JpcHRzL2xpYmZha2V0aW1lL01ha2Vm aWxlICAgICAgICAgIHwgIDExOCArKwogc2NyaXB0cy9saWJmYWtldGltZS9mYWtldGltZS5jICAg ICAgICB8ICAzODUgKysrKysrCiBzY3JpcHRzL2xpYmZha2V0aW1lL2Zha2V0aW1lX2NvbW1vbi5o IHwgICA2MSArCiBzY3JpcHRzL2xpYmZha2V0aW1lL2xpYmZha2V0aW1lLmMgICAgIHwgMjQxMCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNjcmlwdHMvbGliZmFrZXRpbWUvbGli ZmFrZXRpbWUubWFwICAgfCAgIDEwICsKIHNjcmlwdHMvbGliZmFrZXRpbWUvdGltZV9vcHMuaCAg ICAgICAgfCAgMTA0ICsrCiA3IGZpbGVzIGNoYW5nZWQsIDMxMDEgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNjcmlwdHMvbGliZmFrZXRpbWUvTWFrZWZp bGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzY3JpcHRzL2xpYmZha2V0aW1lL2Zha2V0aW1lLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzY3JpcHRzL2xpYmZha2V0aW1lL2Zha2V0aW1lX2NvbW1vbi5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgc2NyaXB0cy9saWJmYWtldGltZS9saWJmYWtldGltZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgc2NyaXB0cy9saWJmYWtldGltZS9saWJmYWtldGltZS5tYXAKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzY3JpcHRzL2xpYmZha2V0aW1lL3RpbWVfb3BzLmgKCmRpZmYgLS1naXQg YS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCmluZGV4IDQwYzY3NmMuLjZlMDgzNzcgMTAwNjQ0 Ci0tLSBhL01ha2VmaWxlLmluCisrKyBiL01ha2VmaWxlLmluCkBAIC0yMiw3ICsyMiw3IEBAIGV4 cG9ydCBTSEVMTAogCiBAQlVJTERfTkNPTkZfVFJVRUBOQ09ORiA9IG5jb25mCiAKLWFsbDoga2Nv bmZpZyBlbnZpcm9ubWVudAorYWxsOiBrY29uZmlnIGxpYmZha2V0aW1lIGVudmlyb25tZW50CiAJ QHRvdWNoIC5kb25lCiAKIGtjb25maWc6CkBAIC00MSw2ICs0MSwxNyBAQCBrY29uZmlnOgogCQlj b25mIG1jb25mICQoTkNPTkYpCiAJQGVjaG8gImRvbmUuIgogCitsaWJmYWtldGltZToKKwlAZWNo byAiYnVpbGRpbmcgbGliZmFrZXRpbWUgLi4uIgorCUBDQz0iJChDQykiIFwKKwlDWFg9IiQoQ1hY KSIgXAorCUNGTEFHUz0iJChDRkxBR1MpIiBcCisJQ1hYRkxBR1M9IiQoQ1hYRkxBR1MpIiBcCisJ Q1BQRkxBR1M9IiQoQ1BQRkxBR1MpIiBcCisJTERGTEFHUz0iJChMREZMQUdTKSIgXAorCSQoTUFL RSkgLUMgIiQoYWJzX3NyY2Rpcikvc2NyaXB0cy9saWJmYWtldGltZSIgYWxsCisJQGVjaG8gImRv bmUuIgorCiBlbnZpcm9ubWVudDoKIAlAZWNobyAtbiAicHJlcGFyaW5nIFBUWGRpc3QgZW52aXJv bm1lbnQgLi4uIgogCUBsbiAtc2YgQEFXS0AgIiQoYWJzX3NyY2RpcikvYmluL2F3ayIKQEAgLTg5 LDYgKzEwMCw3IEBAIGNsZWFuOgogCUBybSAtZiAuZG9uZQogCUBmaW5kICIkKGFic19zcmNkaXIp L2JpbiIgLXR5cGUgbCAtcHJpbnQwIHwgeGFyZ3MgLTAgcm0gLWYKIAlAJChNQUtFKSAtQyAiJChh YnNfc3JjZGlyKS9zY3JpcHRzL2tjb25maWciIGNsZWFuCisJQCQoTUFLRSkgLUMgIiQoYWJzX3Ny Y2Rpcikvc2NyaXB0cy9saWJmYWtldGltZSIgY2xlYW4KIAogZGlydHktY2hlY2s6CiAJQGNhc2Ug IiQodmVyc2lvbikiIGluIFwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliZmFrZXRpbWUvTWFrZWZp bGUgYi9zY3JpcHRzL2xpYmZha2V0aW1lL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmE1NTdjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYmZha2V0 aW1lL01ha2VmaWxlCkBAIC0wLDAgKzEsMTE4IEBACisjCisjIE5vdGVzOgorIworIyAgICogQ29t cGlsYXRpb24gRGVmaW5lczoKKyMKKyMgICAgIEZBS0VfU1RBVAorIyAgICAgICAgIC0gRW5hYmxl cyB0aW1lIGZha2luZyBhbHNvIGZvciBmaWxlcycgdGltZXN0YW1wcy4KKyMKKyMgICAgIE5PX0FU RklMRQorIyAgICAgICAgIC0gRGlzYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGZzdGF0YXQoKSBncm91 cCBvZiBmdW5jdGlvbnMKKyMKKyMgICAgIFBUSFJFQUQKKyMgICAgICAgICAtIERlZmluZSB0aGlz IHRvIGVuYWJsZSBtdWx0aXRocmVhZGluZyBzdXBwb3J0LgorIworIyAgICAgUFRIUkVBRF9TSU5H TEVUSFJFQURFRF9USU1FCisjICAgICAgICAgLSBEZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCB0byBz aW5nbGUtdGhyZWFkIHRpbWUoKSAuLi4gdGhlcmUgQVJFCisjICAgICAgICAgICBwb3NzaWJpbGUg Y2FjaGluZyBzaWRlLWVmZmVjdHMgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50CisjICAg ICAgICAgICB3aXRob3V0IHRoaXMsIGJ1dCB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IG1heSByZXF1 aXJlIHlvdSB0bworIyAgICAgICAgICAgdHJ5IGl0IHVuc3luY2hyb25pemVkLgorIworIyAgICAg RkFLRV9JTlRFUk5BTF9DQUxMUworIyAgICAgICAgIC0gQWxzbyBpbnRlcmNlcHQgbGliYyBpbnRl cm5hbCBfX2Z1bmN0aW9ucywgZS5nLiBub3QganVzdCB0aW1lKCksCisjICAgICAgICAgICBidXQg YWxzbyBfX3RpbWUoKS4gRW5oYW5jZXMgY29tcGF0aWJpbGl0eSB3aXRoIGFwcGxpY2F0aW9ucwor IyAgICAgICAgICAgdGhhdCBtYWtlIHVzZSBvZiBsb3ctbGV2ZWwgc3lzdGVtIGNhbGxzLCBzdWNo IGFzIEphdmEgVmlydHVhbAorIyAgICAgICAgICAgTWFjaGluZXMuCisjCisjIAkgIEZBS0VfU0xF RVAKKyMgCSAgICAgIC0gQWxzbyBpbnRlcmNlcHQgc2xlZXAoKSwgbmFub3NsZWVwKCksIHVzbGVl cCgpLCBhbGFybSgpLCBbcF1wb2xsKCkKKyMKKyMJICBGQUtFX1RJTUVSUworIwkgICAgICAtIEFs c28gaW50ZXJjZXB0IHRpbWVyX3NldHRpbWUoKSBhbmQgdGltZXJfZ2V0dGltZSgpCisjCisjCSAg TVVMVElfQVJDSAorIwkgIAkgIC0gSWYgTVVMVElfQVJDSCBpcyBzZXQsIHRoZSBmYWtldGltZSB3 cmFwcGVyIHByb2dyYW0gd2lsbCBwdXQgYSBsaXRlcmFsCisjCSAgCSAgICAkTElCIGludG8gdGhl IExEX1BSRUxPQUQgZW52aXJvbm1lbnQgdmFyaWFibGUgaXQgY3JlYXRlcywgd2hpY2ggbWFrZXMK KyMJICAJICAgIGxkIGF1dG9tYXRpY2FsbHkgY2hvb3NlIHRoZSBjb3JyZWN0IGxpYnJhcnkgdmVy c2lvbiB0byB1c2UgZm9yIHRoZQorIwkgIAkgICAgdGFyZ2V0IGJpbmFyeS4gVXNlIGZvciBMaW51 eCBwbGF0Zm9ybXMgd2l0aCBNdWx0aS1BcmNoIHN1cHBvcnQgb25seSEKKyMKKyMgICAqIENvbXBp bGF0aW9uIGFkZGl0aW9uOiBzZWNvbmQgbGliTVQgdGFyZ2V0IGFkZGVkIGZvciBidWlsZGluZyB0 aGUgcHRocmVhZC0KKyMgICAgIGVuYWJsZWQgbGlicmFyeSBhcyBhIHNlcGFyYXRlIGxpYnJhcnkK KyMKKyMgICAqIENvbXBpbGF0aW9uIHN3aXRjaCBjaGFuZ2U6IHByZXZpb3VzIHZlcnNpb25zIGNv bXBpbGVkIHVzaW5nICctbm9zdGFydGZpbGVzJworIyAgICAgVGhpcyBpcyBubyBsb25nZXIgdGhl IGNhc2Ugc2luY2UgdGhlcmUgaXMgYSAnc3RhcnR1cCcgY29uc3RydWN0b3IgZm9yIHRoZSBsaWJy YXJ5CisjICAgICB3aGljaCBpcyB1c2VkIHRvIGFjdGl2YXRlIHRoZSBzdGFydC1hdCB0aW1lcyB3 aGVuIHNwZWNpZmllZC4gVGhpcyBhbHNvIGluaXRpYWxpemVzCisjICAgICB0aGUgZHluYW1pYyBk aXNhYmxpbmcgb2YgdGhlIEZBS0VfU1RBVCBjYWxscy4KKyMKKyMgQnkgZGVmYXVsdCwgbGliZmFr ZXRpbWUgd2lsbCBiZSBjb21waWxlZCBmb3IgeW91ciBzeXN0ZW0ncyBkZWZhdWx0IGFyY2hpdGVj dHVyZS4KKyMgVG8gYnVpbGQgMzItYml0IGxpYnJhcmllcyBhbmQgYmluYXJpZXMsIGFkZCAtbTMy IHRvIENGTEFHUyBhbmQgTERGTEFHUy4KKyMKKyMgQ2hhbmdlIFBSRUZJWCB0byB3aGVyZSB5b3Ug d2FudCBsaWJmYWtldGltZSAobGlicmFyaWVzIGFuZCB3cmFwcGVyIGJpbmFyeSkgaW5zdGFsbGVk LgorIyBMSUJESVJOQU1FIGlzIHJlbGF0aXZlIHRvIFBSRUZJWC4gVGhlIGRlZmF1bHQgaXMgdG8g aW5zdGFsbCBpbnRvICRQUkVGSVgvbGliL2Zha2V0aW1lLAorIyBidXQgeW91IGNhbiBzZXQgTElC RElSTkFNRSB0bywgZS5nLiwgL2xpYjY0IGlmIHlvdSB3YW50IHRvIGluc3RhbGwgaXQgZWxzZXdo ZXJlLgorIyBMSUJESVJOQU1FIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gc3VwcG9ydCBNdWx0aUxp YiBzeXN0ZW1zLiBQbGVhc2UgZG8gbm90IGNoYW5nZSB0aGUgCisjIGRlZmF1bHQgdmFsdWUgb24g TXVsdGlBcmNoIHN5c3RlbXMuIAorIworIyBGb3IgdGVzdGluZyBpbiB0aGUgY3VycmVudCBkaXJl Y3Rvcnkgd2l0aG91dCBpbnN0YWxsYXRpb24sIHRyeSBtYWtlIFBSRUZJWD0gTElCRElSTkFNRT0n LicKKworQ0MgPz0gZ2NjCitJTlNUQUxMID89IGluc3RhbGwKKworUFJFRklYID89IC91c3IvbG9j YWwKK0xJQkRJUk5BTUUgPz0gL2xpYi9mYWtldGltZQorUExBVEZPUk0gPz0kKHNoZWxsIHVuYW1l KQorCitDRkxBR1MgKz0gLXN0ZD1nbnU5OSAtV2FsbCAtV2V4dHJhIC1XZXJyb3IgLVduby1ub25u dWxsLWNvbXBhcmUgLURGQUtFX1NUQVQgLURGQUtFX1NMRUVQIC1ERkFLRV9USU1FUlMgLURGQUtF X0lOVEVSTkFMX0NBTExTIC1mUElDIC1EUFJFRklYPSciJyQoUFJFRklYKSciJyAtRExJQkRJUk5B TUU9JyInJChMSUJESVJOQU1FKSciJworaWZlcSAoJChQTEFURk9STSksU3VuT1MpCitDRkxBR1Mg Kz0gLURfX0VYVEVOU0lPTlNfXyAtRF9YT1BFTl9TT1VSQ0U9NjAwCitlbmRpZgorCitMSUJfTERG TEFHUyArPSAtc2hhcmVkCisKK0xERkxBR1MgKz0gLWxwdGhyZWFkCitpZm5lcSAoJChQTEFURk9S TSksU3VuT1MpCitMREZMQUdTICs9IC1XbCwtLXZlcnNpb24tc2NyaXB0PWxpYmZha2V0aW1lLm1h cAorZW5kaWYKKworTERBREQgKz0gLWxkbCAtbG0gLWxydAorQklOX0xERkxBR1MgKz0gLWxydAor CitTUkMgPSBsaWJmYWtldGltZS5jCitMSUJTX09CSiA9IGxpYmZha2V0aW1lLm8gbGliZmFrZXRp bWVNVC5vCitCSU5TID0gZmFrZXRpbWUKKworU09OQU1FID0gMQorTElCUyA9IGxpYmZha2V0aW1l LnNvLiR7U09OQU1FfSBsaWJmYWtldGltZU1ULnNvLiR7U09OQU1FfQorCithbGw6ICR7TElCU30g JHtCSU5TfQorCitsaWJmYWtldGltZU1ULm86IEVYVFJBX0ZMQUdTIDo9IC1EUFRIUkVBRCAtRFBU SFJFQURfU0lOR0xFVEhSRUFERURfVElNRQorCiske0xJQlNfT0JKfTogbGliZmFrZXRpbWUuYwor CSR7Q0N9IC1vICRAIC1jICR7Q0ZMQUdTfSAke0VYVFJBX0ZMQUdTfSAkPAorCislLnNvLiR7U09O QU1FfTogJS5vIGxpYmZha2V0aW1lLm1hcAorCSR7Q0N9IC1vICRAIC1XbCwtc29uYW1lLCRAICR7 TERGTEFHU30gJHtMSUJfTERGTEFHU30gJDwgJHtMREFERH0KKworJHtCSU5TfTogZmFrZXRpbWUu YworCSR7Q0N9IC1vICRAICR7Q0ZMQUdTfSAke0VYVFJBX0ZMQUdTfSAkPCAke0xERkxBR1N9ICR7 QklOX0xERkxBR1N9CisKK2NsZWFuOgorCUBybSAtZiAke0xJQlNfT0JKfSAke0xJQlN9ICR7QklO U30KKworZGlzdGNsZWFuOiBjbGVhbgorCUBlY2hvCisKK2luc3RhbGw6ICR7TElCU30gJHtCSU5T fQorCUBlY2hvCisJQGVjaG8gIkNvcHlpbmcgdGhlIGZha2V0aW1lIGxpYnJhcmllcyB0byAke0RF U1RESVJ9JHtQUkVGSVh9JHtMSUJESVJOQU1FfSBhbmQgdGhlIGZha2V0aW1lIHdyYXBwZXIgc2Ny aXB0IHRvICR7REVTVERJUn0ke1BSRUZJWH0vYmluIC4uLiIKKwkkKElOU1RBTEwpIC1kbTA3NTUg IiR7REVTVERJUn0ke1BSRUZJWH0ke0xJQkRJUk5BTUV9LyIKKwkkKElOU1RBTEwpIC1tMDY0NCAk e0xJQlN9ICIke0RFU1RESVJ9JHtQUkVGSVh9JHtMSUJESVJOQU1FfS8iCisJJChJTlNUQUxMKSAt RG0wNzU1IGZha2V0aW1lICIke0RFU1RESVJ9JHtQUkVGSVh9L2Jpbi9mYWtldGltZSIKKwordW5p bnN0YWxsOgorCWZvciBmIGluICR7TElCU307IGRvIHJtIC1mICIke0RFU1RESVJ9JHtQUkVGSVh9 JHtMSUJESVJOQU1FfS8kJGYiOyBkb25lCisJcm1kaXIgIiR7REVTVERJUn0ke1BSRUZJWH0ke0xJ QkRJUk5BTUV9IgorCXJtIC1mICIke0RFU1RESVJ9JHtQUkVGSVh9L2Jpbi9mYWtldGltZSIKKwor LlBIT05ZOiBhbGwgY2xlYW4gZGlzdGNsZWFuIGluc3RhbGwgdW5pbnN0YWxsCmRpZmYgLS1naXQg YS9zY3JpcHRzL2xpYmZha2V0aW1lL2Zha2V0aW1lLmMgYi9zY3JpcHRzL2xpYmZha2V0aW1lL2Zh a2V0aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM4ZWJiZAotLS0g L2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliZmFrZXRpbWUvZmFrZXRpbWUuYwpAQCAtMCwwICsx LDM4NSBAQAorLyoKKyAqICBsaWJmYWtldGltZSB3cmFwcGVyIGNvbW1hbmQKKyAqCisgKiAgVGhp cyBmaWxlIGlzIHBhcnQgb2YgbGliZmFrZXRpbWUsIHZlcnNpb24gMC45LjcKKyAqCisgKiAgbGli ZmFrZXRpbWUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdjIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiAgbGliZmFrZXRpbWUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MiBh bG9uZworICogIHdpdGggdGhlIGxpYmZha2V0aW1lOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAz MzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIENvbnZlcnRlZCBmcm9tIHNo ZWxsIHNjcmlwdCBieSBCYWxpbnQgUmVjemV5IHdpdGggdGhlIGZvbGxvd2luZyBjcmVkaXRzCisg KiBhbmQgY29tbWVudHM6CisgKgorICogVGhhbmtzIHRvIERhbmllbCBLYWhuIEdpbGxtb3IgZm9y IGltcHJvdmVtZW50IHN1Z2dlc3Rpb25zLgorCisgKiBUaGlzIHdyYXBwZXIgZXhwb3NlcyBvbmx5 IGEgc21hbGwgc3Vic2V0IG9mIHRoZSBsaWJmYWtldGltZSBmdW5jdGlvbmFsaXR5LgorICogUGxl YXNlIHNlZSBsaWJmYWtldGltZSdzIFJFQURNRSBmaWxlIGFuZCBtYW4gcGFnZSBmb3IgbW9yZSBk ZXRhaWxzLgorCisgKiBBY2tub3dsZWRnbWVudDogUGFydHMgb2YgdGhlIGZ1bmN0aW9uYWxpdHkg b2YgdGhpcyB3cmFwcGVyIGhhdmUgYmVlbgorICogaW5zcGlyZWQgYnkgTWF0dGhpYXMgVXJsaWNo cycgZGF0ZWZ1ZGdlIDEuMTQuCisKKyAqIENvbXBpbGUgdGltZSBjb25maWd1cmF0aW9uOiBQYXRo IHdoZXJlIHRoZSBsaWJmYWtldGltZSBsaWJyYXJpZXMgY2FuIGJlIGZvdW5kCisgKiBvbiBMaW51 eC9VTklYCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxz dGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVk ZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o PgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRl IDxzZW1hcGhvcmUuaD4KKworI2luY2x1ZGUgImZha2V0aW1lX2NvbW1vbi5oIgorCitjb25zdCBj aGFyIHZlcnNpb25bXSA9ICIwLjkuNyI7CisKKyNpZmRlZiBfX0FQUExFX18KK3N0YXRpYyBjb25z dCBjaGFyICpkYXRlX2NtZCA9ICJnZGF0ZSI7CisjZWxzZQorc3RhdGljIGNvbnN0IGNoYXIgKmRh dGVfY21kID0gImRhdGUiOworI2VuZGlmCisKKyNkZWZpbmUgUEFUSF9CVUZTSVpFIDQwOTYKKwor Lyogc2VtYXBob3JlIGFuZCBzaGFyZWQgbWVtb3J5IG5hbWVzICovCitjaGFyIHNlbV9uYW1lW1BB VEhfQlVGU0laRV0gPSB7MH0sIHNobV9uYW1lW1BBVEhfQlVGU0laRV0gPSB7MH07CisKK3ZvaWQg dXNhZ2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgcHJpbnRmKCJcbiIKKyAgIlVzYWdlOiAlcyBb c3dpdGNoZXNdIDx0aW1lc3RhbXA+IDxwcm9ncmFtIHdpdGggYXJndW1lbnRzPlxuIgorICAiXG4i CisgICJUaGlzIHdpbGwgcnVuIHRoZSBzcGVjaWZpZWQgJ3Byb2dyYW0nIHdpdGggdGhlIGdpdmVu ICdhcmd1bWVudHMnLlxuIgorICAiVGhlIHByb2dyYW0gd2lsbCBiZSB0cmlja2VkIGludG8gc2Vl aW5nIHRoZSBnaXZlbiAndGltZXN0YW1wJyBhcyBpdHMgc3RhcnRpbmcgZGF0ZSBhbmQgdGltZS5c biIKKyAgIlRoZSBjbG9jayB3aWxsIGNvbnRpbnVlIHRvIHJ1biBmcm9tIHRoaXMgdGltZXN0YW1w LiBQbGVhc2Ugc2VlIHRoZSBtYW5wYWdlIChtYW4gZmFrZXRpbWUpXG4iCisgICJmb3IgYWR2YW5j ZWQgb3B0aW9ucywgc3VjaCBhcyBzdG9wcGluZyB0aGUgd2FsbCBjbG9jayBhbmQgbWFrZSBpdCBy dW4gZmFzdGVyIG9yIHNsb3dlci5cbiIKKyAgIlxuIgorICAiVGhlIG9wdGlvbmFsIHN3aXRjaGVz IGFyZTpcbiIKKyAgIiAgLW0gICAgICAgICAgICAgICAgICA6IFVzZSB0aGUgbXVsdGktdGhyZWFk ZWQgdmVyc2lvbiBvZiBsaWJmYWtldGltZVxuIgorICAiICAtZiAgICAgICAgICAgICAgICAgIDog VXNlIHRoZSBhZHZhbmNlZCB0aW1lc3RhbXAgc3BlY2lmaWNhdGlvbiBmb3JtYXQgKHNlZSBtYW5w YWdlKVxuIgorICAiICAtLWV4Y2x1ZGUtbW9ub3RvbmljIDogUHJldmVudCBtb25vdG9uaWMgY2xv Y2sgZnJvbSBkcmlmdGluZyAobm90IHRoZSByYXcgbW9ub3RvbmljIG9uZSlcbiIKKyAgIlxuIgor ICAiRXhhbXBsZXM6XG4iCisgICIlcyAnbGFzdCBmcmlkYXkgNSBwbScgL2Jpbi9kYXRlXG4iCisg ICIlcyAnMjAwOC0xMi0yNCAwODoxNTo0MicgL2Jpbi9kYXRlXG4iCisgICIlcyAtZiAnKzIsNXkg eDEwLDAnIC9iaW4vYmFzaCAtYyAnZGF0ZTsgd2hpbGUgdHJ1ZTsgZG8gZWNobyAkU0VDT05EUyA7 IHNsZWVwIDEgOyBkb25lJ1xuIgorICAiJXMgLWYgJysyLDV5IHgwLDUwJyAvYmluL2Jhc2ggLWMg J2RhdGU7IHdoaWxlIHRydWU7IGRvIGVjaG8gJFNFQ09ORFMgOyBzbGVlcCAxIDsgZG9uZSdcbiIK KyAgIiVzIC1mICcrMiw1eSBpMiwwJyAvYmluL2Jhc2ggLWMgJ2RhdGU7IHdoaWxlIHRydWU7IGRv IGRhdGU7IHNsZWVwIDEgOyBkb25lJ1xuIgorICAiSW4gdGhpcyBzaW5nbGUgY2FzZSBhbGwgc3Bh d25lZCBwcm9jZXNzZXMgd2lsbCB1c2UgdGhlIHNhbWUgZ2xvYmFsIGNsb2NrXG4iCisgICJ3aXRo b3V0IHJlc3RhcnRpbmcgaXQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggcHJvY2Vzcy5cblxuIgorICAi KFBsZWFzZSBub3RlIHRoYXQgaXQgZGVwZW5kcyBvbiB5b3VyIGxvY2FsZSBzZXR0aW5ncyB3aGV0 aGVyIC4gb3IgLCBoYXMgdG8gYmUgdXNlZCBmb3IgZnJhY3Rpb25zKVxuIgorICAiXG4iLCBuYW1l LCBuYW1lLCBuYW1lLCBuYW1lLCBuYW1lLCBuYW1lKTsKK30KKworLyoqIENsZWFuIHVwIHNoYXJl ZCBvYmplY3RzICovCitzdGF0aWMgdm9pZCBjbGVhbnVwX3Nob2JqcygpCit7CisgIGlmICgtMSA9 PSBzZW1fdW5saW5rKHNlbV9uYW1lKSkKKyAgeworICAgIHBlcnJvcigic2VtX3VubGluayIpOwor ICB9CisgIGlmICgtMSA9PSBzaG1fdW5saW5rKHNobV9uYW1lKSkKKyAgeworICAgIHBlcnJvcigi c2htX3VubGluayIpOworICB9Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3Yp Cit7CisgIHBpZF90IGNoaWxkX3BpZDsKKyAgaW50IGN1cnJfb3B0ID0gMTsKKyAgYm9vbCB1c2Vf bXQgPSBmYWxzZSwgdXNlX2RpcmVjdCA9IGZhbHNlOworICBsb25nIG9mZnNldDsKKworICB3aGls ZShjdXJyX29wdCA8IGFyZ2MpCisgIHsKKyAgICBpZiAoMCA9PSBzdHJjbXAoYXJndltjdXJyX29w dF0sICItbSIpKQorICAgIHsKKyAgICAgIHVzZV9tdCA9IHRydWU7CisgICAgICBjdXJyX29wdCsr OworICAgICAgY29udGludWU7CisgICAgfQorICAgIGVsc2UgaWYgKDAgPT0gc3RyY21wKGFyZ3Zb Y3Vycl9vcHRdLCAiLWYiKSkKKyAgICB7CisgICAgICB1c2VfZGlyZWN0ID0gdHJ1ZTsKKyAgICAg IGN1cnJfb3B0Kys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoMCA9PSBz dHJjbXAoYXJndltjdXJyX29wdF0sICItLWV4Y2x1ZGUtbW9ub3RvbmljIikpCisgICAgeworICAg ICAgc2V0ZW52KCJET05UX0ZBS0VfTU9OT1RPTklDIiwgIjEiLCB0cnVlKTsKKyAgICAgIGN1cnJf b3B0Kys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoKDAgPT0gc3RyY21w KGFyZ3ZbY3Vycl9vcHRdLCAiLXYiKSkgfHwKKyAgICAgICAgICAgICAoMCA9PSBzdHJjbXAoYXJn dltjdXJyX29wdF0sICItLXZlcnNpb24iKSkpCisgICAgeworICAgICAgcHJpbnRmKCJcbiVzOiBW ZXJzaW9uICVzXG4iCisgICAgICAgICAiRm9yIHVzYWdlIGluZm9ybWF0aW9uIHBsZWFzZSB1c2Ug JyVzIC0taGVscCcuXG4iLAorICAgICAgICAgYXJndlswXSwgdmVyc2lvbiwgYXJndlswXSk7Cisg ICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgfQorICAgIGVsc2UgaWYgKCgwID09IHN0cmNt cChhcmd2W2N1cnJfb3B0XSwgIi1oIikpIHx8CisgICAgICAgICAgICAgKDAgPT0gc3RyY21wKGFy Z3ZbY3Vycl9vcHRdLCAiLT8iKSkgfHwKKyAgICAgICAgICAgICAoMCA9PSBzdHJjbXAoYXJndltj dXJyX29wdF0sICItLWhlbHAiKSkpCisgICAgeworICAgICAgdXNhZ2UoYXJndlswXSk7CisgICAg ICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiB3 ZSBwYXJzZWQgYWxsIG9wdGlvbnMgKi8KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIC8q IHdlIG5lZWQgYXQgbGVhc3QgYSB0aW1lc3RhbXAgc3RyaW5nIGFuZCBhIGNvbW1hbmQgdG8gcnVu ICovCisgIGlmIChhcmdjIC0gY3Vycl9vcHQgPCAyKQorICB7CisgICAgdXNhZ2UoYXJndlswXSk7 CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICB9CisKKyAgaWYgKCF1c2VfZGlyZWN0KQorICB7 CisgICAgLy8gVE9ETyBnZXQgc2Vjb25kcworICAgIGludCBwZmRzWzJdOworICAgICh2b2lkKSAo cGlwZShwZmRzKSArIDEpOworICAgIGludCByZXQgPSBFWElUX1NVQ0NFU1M7CisKKyAgICBpZiAo MCA9PSAoY2hpbGRfcGlkID0gZm9yaygpKSkKKyAgICB7CisgICAgICBjbG9zZSgxKTsgICAgICAg LyogY2xvc2Ugbm9ybWFsIHN0ZG91dCAqLworICAgICAgKHZvaWQpIChkdXAocGZkc1sxXSkgKyAx KTsgICAvKiBtYWtlIHN0ZG91dCBzYW1lIGFzIHBmZHNbMV0gKi8KKyAgICAgIGNsb3NlKHBmZHNb MF0pOyAvKiB3ZSBkb24ndCBuZWVkIHRoaXMgKi8KKyAgICAgIGlmIChFWElUX1NVQ0NFU1MgIT0g ZXhlY2xwKGRhdGVfY21kLCBkYXRlX2NtZCwgIi1kIiwgYXJndltjdXJyX29wdF0sICIrJXMiLChj aGFyICopIE5VTEwpKQorICAgICAgeworICAgICAgICBwZXJyb3IoIlJ1bm5pbmcgKGcpZGF0ZSBm YWlsZWQiKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgIH0KKyAg ICBlbHNlCisgICAgeworICAgICAgY2hhciBidWZbMjU2XSA9IHswfTsgLyogZSB3aWxsIGhhdmUg d2F5IGxlc3MgdGhhbiAyNTYgZGlnaXRzICovCisgICAgICBjbG9zZShwZmRzWzFdKTsgICAvKiB3 ZSB3b24ndCB3cml0ZSB0byB0aGlzICovCisgICAgICAodm9pZCkgKHJlYWQocGZkc1swXSwgYnVm LCAyNTYpICsgMSk7CisgICAgICB3YWl0cGlkKGNoaWxkX3BpZCwgJnJldCwgMCk7CisgICAgICBp ZiAocmV0ICE9IEVYSVRfU1VDQ0VTUykKKyAgICAgIHsKKyAgICAgICAgcHJpbnRmKCJFcnJvcjog VGltZXN0YW1wIHRvIGZha2Ugbm90IHJlY29nbml6ZWQsIHBsZWFzZSByZS10cnkgd2l0aCBhICIK KyAgICAgICAgICAgICAgICJkaWZmZXJlbnQgdGltZXN0YW1wLlxuIik7CisgICAgICAgIGV4aXQo RVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIG9mZnNldCA9IGF0b2woYnVmKSAtIHRpbWUo TlVMTCk7CisgICAgICByZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlbGQiLCAo b2Zmc2V0ID49IDApPyIrIjoiIiwgb2Zmc2V0KTsKKyAgICAgIHNldGVudigiRkFLRVRJTUUiLCBi dWYsIHRydWUpOworICAgICAgY2xvc2UocGZkc1swXSk7IC8qIGZpbmlzaGVkIHJlYWRpbmcgKi8K KyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogc2ltcGx5IHBhc3MgZm9ybWF0IHN0cmlu ZyBhbG9uZyAqLworICAgIHNldGVudigiRkFLRVRJTUUiLCBhcmd2W2N1cnJfb3B0XSwgdHJ1ZSk7 CisgIH0KKyAgaW50IGtlZXBhbGl2ZV9mZHNbMl07CisgICh2b2lkKSAocGlwZShrZWVwYWxpdmVf ZmRzKSArIDEpOworCisgIC8qIHdlIGp1c3QgY29uc3VtZWQgdGhlIHRpbWVzdGFtcCBvcHRpb24g Ki8KKyAgY3Vycl9vcHQrKzsKKworICB7CisgICAgLyogY3JlYXRlIHNlbWFwaG9yZXMgYW5kIHNo YXJlZCBtZW1vcnkgKi8KKyAgICBpbnQgc2htX2ZkOworICAgIHNlbV90ICpzZW07CisgICAgc3Ry dWN0IGZ0X3NoYXJlZF9zICpmdF9zaGFyZWQ7CisgICAgY2hhciBzaGFyZWRfb2Jqc1tQQVRIX0JV RlNJWkVdOworCisgICAgLyoKKyAgICAgKiBDYXN0aW5nIG9mIGdldHBpZCgpIHJldHVybiB2YWx1 ZSB0byBsb25nIG5lZWRlZCB0byBtYWtlIEdDQyBvbiBTbWFydE9TCisgICAgICogaGFwcHksIHNp bmNlIGdldHBpZCdzIHJldHVybiB2YWx1ZSdzIHR5cGUgb24gU21hcnRPUyBpcyBsb25nLiBTaW5j ZQorICAgICAqIGdldHBpZCdzIHJldHVybiB2YWx1ZSdzIHR5cGUgaXMgaW50IG9uIG1vc3Qgb3Ro ZXIgc3lzdGVtcywgYW5kIHRoYXQKKyAgICAgKiBzaXplb2YobG9uZykgYWx3YXlzID49IHNpemVv ZihpbnQpLCB0aGlzIHdvcmtzIG9uIGFsbCBwbGF0Zm9ybXMgd2l0aG91dAorICAgICAqIHRoZSBu ZWVkIGZvciBjcmF6eSAjaWZkZWZzLgorICAgICAqLworICAgIHNucHJpbnRmKHNlbV9uYW1lLCBQ QVRIX0JVRlNJWkUgLTEgLCIvZmFrZXRpbWVfc2VtXyVsZCIsIChsb25nKWdldHBpZCgpKTsKKyAg ICBzbnByaW50ZihzaG1fbmFtZSwgUEFUSF9CVUZTSVpFIC0xICwiL2Zha2V0aW1lX3NobV8lbGQi LCAobG9uZylnZXRwaWQoKSk7CisKKyAgICBpZiAoU0VNX0ZBSUxFRCA9PSAoc2VtID0gc2VtX29w ZW4oc2VtX25hbWUsIE9fQ1JFQVR8T19FWENMLCBTX0lXVVNSfFNfSVJVU1IsIDEpKSkKKyAgICB7 CisgICAgICBwZXJyb3IoInNlbV9vcGVuIik7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cisg ICAgfQorCisgICAgLyogY3JlYXRlIHNobSAqLworICAgIGlmICgtMSA9PSAoc2htX2ZkID0gc2ht X29wZW4oc2htX25hbWUsIE9fQ1JFQVR8T19FWENMfE9fUkRXUiwgU19JV1VTUnxTX0lSVVNSKSkp CisgICAgeworICAgICAgcGVycm9yKCJzaG1fb3BlbiIpOworICAgICAgaWYgKC0xID09IHNlbV91 bmxpbmsoYXJndlsyXSkpCisgICAgICB7CisgICAgICAgIHBlcnJvcigic2VtX3VubGluayIpOwor ICAgICAgfQorICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIC8qIHNldCBz aG0gc2l6ZSAqLworICAgIGlmICgtMSA9PSBmdHJ1bmNhdGUoc2htX2ZkLCBzaXplb2YodWludDY0 X3QpKSkKKyAgICB7CisgICAgICBwZXJyb3IoImZ0cnVuY2F0ZSIpOworICAgICAgY2xlYW51cF9z aG9ianMoKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICAvKiBtYXAg c2htICovCisgICAgaWYgKE1BUF9GQUlMRUQgPT0gKGZ0X3NoYXJlZCA9IG1tYXAoTlVMTCwgc2l6 ZW9mKHN0cnVjdCBmdF9zaGFyZWRfcyksIFBST1RfUkVBRHxQUk9UX1dSSVRFLAorICAgICAgICAg ICAgICAgICAgICAgICAgTUFQX1NIQVJFRCwgc2htX2ZkLCAwKSkpCisgICAgeworICAgICAgcGVy cm9yKCJtbWFwIik7CisgICAgICBjbGVhbnVwX3Nob2JqcygpOworICAgICAgZXhpdChFWElUX0ZB SUxVUkUpOworICAgIH0KKworICAgIGlmIChzZW1fd2FpdChzZW0pID09IC0xKQorICAgIHsKKyAg ICAgIHBlcnJvcigic2VtX3dhaXQiKTsKKyAgICAgIGNsZWFudXBfc2hvYmpzKCk7CisgICAgICBl eGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgLyogaW5pdCBlbGFwc2VkIHRpbWUgdGlj a3MgdG8gemVybyAqLworICAgIGZ0X3NoYXJlZC0+dGlja3MgPSAwOworICAgIGZ0X3NoYXJlZC0+ ZmlsZV9pZHggPSAwOworICAgIGZ0X3NoYXJlZC0+c3RhcnRfdGltZS5yZWFsLnR2X3NlYyA9IDA7 CisgICAgZnRfc2hhcmVkLT5zdGFydF90aW1lLnJlYWwudHZfbnNlYyA9IC0xOworICAgIGZ0X3No YXJlZC0+c3RhcnRfdGltZS5tb24udHZfc2VjID0gMDsKKyAgICBmdF9zaGFyZWQtPnN0YXJ0X3Rp bWUubW9uLnR2X25zZWMgPSAtMTsKKyAgICBmdF9zaGFyZWQtPnN0YXJ0X3RpbWUubW9uX3Jhdy50 dl9zZWMgPSAwOworICAgIGZ0X3NoYXJlZC0+c3RhcnRfdGltZS5tb25fcmF3LnR2X25zZWMgPSAt MTsKKworICAgIGlmICgtMSA9PSBtdW5tYXAoZnRfc2hhcmVkLCAoc2l6ZW9mKHN0cnVjdCBmdF9z aGFyZWRfcykpKSkKKyAgICB7CisgICAgICBwZXJyb3IoIm11bm1hcCIpOworICAgICAgY2xlYW51 cF9zaG9ianMoKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICBpZiAo c2VtX3Bvc3Qoc2VtKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoInNlbW9wIik7CisgICAg ICBjbGVhbnVwX3Nob2JqcygpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKwor ICAgIHNucHJpbnRmKHNoYXJlZF9vYmpzLCBQQVRIX0JVRlNJWkUsICIlcyAlcyIsIHNlbV9uYW1l LCBzaG1fbmFtZSk7CisgICAgc2V0ZW52KCJGQUtFVElNRV9TSEFSRUQiLCBzaGFyZWRfb2Jqcywg dHJ1ZSk7CisgICAgc2VtX2Nsb3NlKHNlbSk7CisgIH0KKworICB7CisgICAgY2hhciAqZnRwbF9w YXRoOworI2lmZGVmIF9fQVBQTEVfXworICAgIGZ0cGxfcGF0aCA9IFBSRUZJWCAiL2xpYmZha2V0 aW1lLjEuZHlsaWIiOworICAgIEZJTEUgKmNoZWNrOworICAgIGNoZWNrID0gZm9wZW4oZnRwbF9w YXRoLCAicm8iKTsKKyAgICBpZiAoY2hlY2sgPT0gTlVMTCkKKyAgICB7CisgICAgICBmdHBsX3Bh dGggPSBQUkVGSVggIi9saWIvZmFrZXRpbWUvbGliZmFrZXRpbWUuMS5keWxpYiI7CisgICAgfQor ICAgIGVsc2UKKyAgICB7CisgICAgICBmY2xvc2UoY2hlY2spOworICAgIH0KKyAgICBzZXRlbnYo IkRZTERfSU5TRVJUX0xJQlJBUklFUyIsIGZ0cGxfcGF0aCwgdHJ1ZSk7CisgICAgc2V0ZW52KCJE WUxEX0ZPUkNFX0ZMQVRfTkFNRVNQQUNFIiwgIjEiLCB0cnVlKTsKKyNlbHNlCisgICAgeworICAg ICAgY2hhciAqbGRfcHJlbG9hZF9uZXcsICpsZF9wcmVsb2FkID0gZ2V0ZW52KCJMRF9QUkVMT0FE Iik7CisgICAgICBzaXplX3QgbGVuOworICAgICAgaWYgKHVzZV9tdCkKKyAgICAgIHsKKyAgICAg ICAgLyoKKyAgICAgICAgICogb24gTXVsdGlBcmNoIHBsYXRmb3Jtcywgc3VjaCBhcyBEZWJpYW4s IHdlIHB1dCBhIGxpdGVyYWwgJExJQiBpbnRvIExEX1BSRUxPQUQuCisgICAgICAgICAqLworI2lm bmRlZiBNVUxUSV9BUkNICisgICAgICAgIGZ0cGxfcGF0aCA9IFBSRUZJWCBMSUJESVJOQU1FICIv bGliZmFrZXRpbWVNVC5zby4xIjsKKyNlbHNlCisgICAgICAgIGZ0cGxfcGF0aCA9IFBSRUZJWCAi LyRMSUIvZmFrZXRpbWUvbGliZmFrZXRpbWVNVC5zby4xIjsKKyNlbmRpZgorICAgICAgfQorICAg ICAgZWxzZQorICAgICAgeworI2lmbmRlZiBNVUxUSV9BUkNICisgICAgICAgIGZ0cGxfcGF0aCA9 IFBSRUZJWCBMSUJESVJOQU1FICIvbGliZmFrZXRpbWUuc28uMSI7CisjZWxzZQorICAgICAgICBm dHBsX3BhdGggPSBQUkVGSVggIi8kTElCL2Zha2V0aW1lL2xpYmZha2V0aW1lLnNvLjEiOworI2Vu ZGlmCisgICAgICB9CisgICAgICBsZW4gPSAoKGxkX3ByZWxvYWQpP3N0cmxlbihsZF9wcmVsb2Fk KSArIDE6IDApICsgMSArIHN0cmxlbihmdHBsX3BhdGgpOworICAgICAgbGRfcHJlbG9hZF9uZXcg PSBtYWxsb2MobGVuKTsKKyAgICAgIHNucHJpbnRmKGxkX3ByZWxvYWRfbmV3LCBsZW4gLCIlcyVz JXMiLCAobGRfcHJlbG9hZCk/bGRfcHJlbG9hZDoiIiwKKyAgICAgICAgICAgICAgKGxkX3ByZWxv YWQpPyI6IjoiIiwgZnRwbF9wYXRoKTsKKyAgICAgIHNldGVudigiTERfUFJFTE9BRCIsIGxkX3By ZWxvYWRfbmV3LCB0cnVlKTsKKyAgICAgIGZyZWUobGRfcHJlbG9hZF9uZXcpOworICAgIH0KKyNl bmRpZgorICB9CisKKyAgLyogcnVuIGNvbW1hbmQgYW5kIGNsZWFuIHVwIHNoYXJlZCBvYmplY3Rz ICovCisgIGlmICgwID09IChjaGlsZF9waWQgPSBmb3JrKCkpKQorICB7CisgICAgY2xvc2Uoa2Vl cGFsaXZlX2Zkc1swXSk7IC8qIG9ubHkgcGFyZW50IG5lZWRzIHRvIHJlYWQgdGhpcyAqLworICAg IGlmIChFWElUX1NVQ0NFU1MgIT0gZXhlY3ZwKGFyZ3ZbY3Vycl9vcHRdLCAmYXJndltjdXJyX29w dF0pKQorICAgIHsKKyAgICAgIHBlcnJvcigiUnVubmluZyBzcGVjaWZpZWQgY29tbWFuZCBmYWls ZWQiKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7 CisgICAgaW50IHJldDsKKyAgICBjaGFyIGJ1ZjsKKyAgICBjbG9zZShrZWVwYWxpdmVfZmRzWzFd KTsgLyogb25seSBjaGlsZHJlbiBuZWVkIGtlZXAgdGhpcyBvcGVuICovCisgICAgd2FpdHBpZChj aGlsZF9waWQsICZyZXQsIDApOworICAgICh2b2lkKSAocmVhZChrZWVwYWxpdmVfZmRzWzBdLCAm YnVmLCAxKSArIDEpOyAvKiByZWFkcyAwQiB3aGVuIGFsbCBjaGlsZHJlbiBleGl0ICovCisgICAg Y2xlYW51cF9zaG9ianMoKTsKKyAgICBpZiAoV0lGU0lHTkFMRUQocmV0KSkKKyAgICB7CisgICAg ICBmcHJpbnRmKHN0ZGVyciwgIkNhdWdodCAlc1xuIiwgc3Ryc2lnbmFsKFdURVJNU0lHKHJldCkp KTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgZXhpdChXRVhJVFNUQVRV UyhyZXQpKTsKKyAgfQorCisgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBFZGl0 b3IgbW9kZWxpbmVzCisgKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6 IDIKKyAqIHRhYi13aWR0aDogMgorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6Cisg KgorICogdmk6IHNldCBzaGlmdHdpZHRoPTIgdGFic3RvcD0yIGV4cGFuZHRhYjoKKyAqIDppbmRl bnRTaXplPTI6dGFiU2l6ZT0yOm5vVGFicz10cnVlOgorICovCisKKy8qIGVvZiAqLwpkaWZmIC0t Z2l0IGEvc2NyaXB0cy9saWJmYWtldGltZS9mYWtldGltZV9jb21tb24uaCBiL3NjcmlwdHMvbGli ZmFrZXRpbWUvZmFrZXRpbWVfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uOWZkYTZhNwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliZmFrZXRpbWUvZmFr ZXRpbWVfY29tbW9uLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIEZha2V0aW1lJ3MgY29tbW9u IGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IDIwMTMgQmFsaW50IFJlY3pleSA8YmFsaW50 QGJhbGludHJlY3pleS5odT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbGliZmFr ZXRpbWUuCisgKgorICogbGliZmFrZXRpbWUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAq IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogbGliZmFrZXRpbWUgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJ TElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHYyIGFsb25nCisgKiB3aXRoIGxpYmZha2V0aW1lOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UsIFN1 aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBGQUtF VElNRV9DT01NT05fSAorI2RlZmluZSBGQUtFVElNRV9DT01NT05fSAorCisjaW5jbHVkZSA8c3Rk aW50Lmg+CisKK3N0cnVjdCBzeXN0ZW1fdGltZV9zCit7CisgIC8qIFN5c3RlbSB0aW1lIGFjY29y ZGluZyB0byBDTE9DS19SRUFMVElNRSAqLworICBzdHJ1Y3QgdGltZXNwZWMgcmVhbDsKKyAgLyog U3lzdGVtIHRpbWUgYWNjb3JkaW5nIHRvIENMT0NLX01PTk9UT05JQyAqLworICBzdHJ1Y3QgdGlt ZXNwZWMgbW9uOworICAvKiBTeXN0ZW0gdGltZSBhY2NvcmRpbmcgdG8gQ0xPQ0tfTU9OT1RPTklD X1JBVyAqLworICBzdHJ1Y3QgdGltZXNwZWMgbW9uX3JhdzsKKyNpZmRlZiBDTE9DS19CT09UVElN RQorICAvKiBTeXN0ZW0gdGltZSBhY2NvcmRpbmcgdG8gQ0xPQ0tfQk9PVFRJTUUgKi8KKyAgc3Ry dWN0IHRpbWVzcGVjIGJvb3Q7CisjZW5kaWYKK307CisKKy8qIERhdGEgc2hhcmVkIGFtb25nIGZh a2V0aW1lLXNwYXduZWQgcHJvY2Vzc2VzICovCitzdHJ1Y3QgZnRfc2hhcmVkX3MKK3sKKyAgLyoK KyAgICogV2hlbiBhZHZhbmNpbmcgdGltZSBsaW5lYXJseSB3aXRoIGVhY2ggdGltZSgpLCBldGMu IGNhbGwsIHRoZSBjYWxscyBhcmUKKyAgICogY291bnRlZCBoZXJlICovCisgIHVpbnQ2NF90IHRp Y2tzOworICAvKiBJbmRleCBvZiB0aW1zdGFtcCB0byBiZSBsb2FkZWQgZnJvbSBmaWxlICovCisg IHVpbnQ2NF90IGZpbGVfaWR4OworICAvKiBTeXN0ZW0gdGltZSBGYWtldGltZSBzdGFydGVkIGF0 ICovCisgIHN0cnVjdCBzeXN0ZW1fdGltZV9zIHN0YXJ0X3RpbWU7Cit9OworCisvKiBUaGVzZSBh cmUgYWxsIG5lZWRlZCBpbiBvcmRlciB0byBwcm9wZXJseSBidWlsZCBvbiBPU1ggKi8KKyNpZmRl ZiBfX0FQUExFX18KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNo X2hvc3QuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgorI2VuZGlmCisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvc2NyaXB0cy9saWJmYWtldGltZS9saWJmYWtldGltZS5jIGIvc2NyaXB0cy9s aWJmYWtldGltZS9saWJmYWtldGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmViMmQwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYmZha2V0aW1lL2xpYmZh a2V0aW1lLmMKQEAgLTAsMCArMSwyNDEwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IGxpYmZha2V0aW1lLCB2ZXJzaW9uIDAuOS43CisgKgorICogIGxpYmZha2V0aW1lIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIGFzIHB1 Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIGxp YmZha2V0aW1lIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgor ICogIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgYWxvbmcKKyAqICB3aXRoIHRo ZSBsaWJmYWtldGltZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLAorICogIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAw MjExMS0xMzA3ICBVU0EKKyAqLworCisvKgorICogICAgICA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAg ICBHbG9iYWwgc2V0dGluZ3MsIGluY2x1ZGVzLCBhbmQgbWFjcm9zICAgICAgICAgICAgICAgICAg ICAgICAgICA9PT0gSEVBRAorICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNkZWZpbmUg X0dOVV9TT1VSQ0UgICAgICAgICAgICAgLyogcmVxdWlyZWQgdG8gZ2V0IFJUTERfTkVYVCBkZWZp bmVkICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1 ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4K KyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHBvbGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+ CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5n Lmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNs dWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGlu ZXQvaW4uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgInRpbWVfb3BzLmgiCisj aW5jbHVkZSAiZmFrZXRpbWVfY29tbW9uLmgiCisKKy8qIHB0aHJlYWQtaGFuZGxpbmcgY29udHJp YnV0ZWQgYnkgRGF2aWQgTm9ydGgsIFRESSBpbiB2ZXJzaW9uIDAuNyAqLworI2lmZGVmIFBUSFJF QUQKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90aW1lYi5o PgorI2luY2x1ZGUgPGRsZmNuLmg+CisKKyNkZWZpbmUgQlVGRkVSTEVOICAgMjU2CisKKyNpZm5k ZWYgX19BUFBMRV9fCitleHRlcm4gY2hhciAqX19wcm9nbmFtZTsKKyNpZmRlZiBfX3N1bgorI2lu Y2x1ZGUgInN1bm9zX2VuZGlhbi5oIgorI2Vsc2UKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbmRp ZgorI2Vsc2UKKy8qIGVuZGlhbm5lc3MgcmVsYXRlZCBtYWNyb3MgKi8KKyNpZm5kZWYgT1NTd2Fw SG9zdFRvQmlnSW50NjQKKyNkZWZpbmUgT1NTd2FwSG9zdFRvQmlnSW50NjQoeCkgKCh1aW50NjRf dCkoeCkpCisjZW5kaWYKKyNkZWZpbmUgaHRvYmU2NCh4KSBPU1N3YXBIb3N0VG9CaWdJbnQ2NCh4 KQorI2lmbmRlZiBPU1N3YXBIb3N0VG9MaXR0bGVJbnQ2NAorI2RlZmluZSBPU1N3YXBIb3N0VG9M aXR0bGVJbnQ2NCh4KSBPU1N3YXBJbnQ2NCh4KQorI2VuZGlmCisjZGVmaW5lIGh0b2xlNjQoeCkg T1NTd2FwSG9zdFRvTGl0dGxlSW50NjQoeCkKKyNpZm5kZWYgT1NTd2FwQmlnVG9Ib3N0SW50NjQK KyNkZWZpbmUgT1NTd2FwQmlnVG9Ib3N0SW50NjQoeCkgKCh1aW50NjRfdCkoeCkpCisjZW5kaWYK KyNkZWZpbmUgYmU2NHRvaCh4KSBPU1N3YXBCaWdUb0hvc3RJbnQ2NCh4KQorI2lmbmRlZiBPU1N3 YXBMaXR0bGVUb0hvc3RJbnQ2NAorI2RlZmluZSBPU1N3YXBMaXR0bGVUb0hvc3RJbnQ2NCh4KSBP U1N3YXBJbnQ2NCh4KQorI2VuZGlmCisjZGVmaW5lIGxlNjR0b2goeCkgT1NTd2FwTGl0dGxlVG9I b3N0SW50NjQoeCkKKworLyogY2xvY2tfZ2V0dGltZSgpIGFuZCByZWxhdGVkIGNsb2NrIGRlZmlu aXRpb25zIGFyZSBtaXNzaW5nIG9uIF9fQVBQTEVfXyAqLworI2lmbmRlZiBDTE9DS19SRUFMVElN RQorLyogZnJvbSBHTlUgQyBMaWJyYXJ5IHRpbWUuaCAqLworLyogSWRlbnRpZmllciBmb3Igc3lz dGVtLXdpZGUgcmVhbHRpbWUgY2xvY2suICggPT0gMSkgKi8KKyNkZWZpbmUgQ0xPQ0tfUkVBTFRJ TUUgICAgICAgICAgICAgICBDQUxFTkRBUl9DTE9DSworLyogTW9ub3RvbmljIHN5c3RlbS13aWRl IGNsb2NrLiAoPT0gMCkgKi8KKyNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDICAgICAgICAgICAgICBT WVNURU1fQ0xPQ0sKKy8qIEhpZ2gtcmVzb2x1dGlvbiB0aW1lciBmcm9tIHRoZSBDUFUuICAqLwor I2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgICAgIDIKKy8qIFRocmVhZC1zcGVjaWZp YyBDUFUtdGltZSBjbG9jay4gICovCisjZGVmaW5lIENMT0NLX1RIUkVBRF9DUFVUSU1FX0lEICAg ICAgMworLyogTW9ub3RvbmljIHN5c3RlbS13aWRlIGNsb2NrLCBub3QgYWRqdXN0ZWQgZm9yIGZy ZXF1ZW5jeSBzY2FsaW5nLiAgKi8KKyNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDX1JBVyAgICAgICAg ICA0Cit0eXBlZGVmIGludCBjbG9ja2lkX3Q7CisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorI2lu Y2x1ZGUgPG1hY2gvbWFjaC5oPgorI2VuZGlmCisjZW5kaWYKKworLyogc29tZSBzeXN0ZW1zIGxh Y2sgcmF3IGNsb2NrICovCisjaWZuZGVmIENMT0NLX01PTk9UT05JQ19SQVcKKyNkZWZpbmUgQ0xP Q0tfTU9OT1RPTklDX1JBVyAoQ0xPQ0tfTU9OT1RPTklDICsgMSkKKyNlbmRpZgorCisvKgorICog UGVyIHRocmVhZCB2YXJpYWJsZSwgd2hpY2ggd2UgdHVybiBvbiBpbnNpZGUgcmVhbF8qIGNhbGxz IHRvIGF2b2lkIG1vZGlmeWluZworICogdGltZSBtdWx0aXBsZSB0aW1lcyBvZiBmb3IgdGhlIHdo b2xlIHByb2Nlc3MgdG8gcHJldmVudCBmYWtpbmcgdGltZQorICovCitzdGF0aWMgX190aHJlYWQg Ym9vbCBkb250X2Zha2UgPSBmYWxzZTsKKworLyogV3JhcHBlciBmb3IgZnVuY3Rpb24gY2FsbHMs IHdoaWNoIHdlIHdhbnQgdG8gcmV0dXJuIHN5c3RlbSB0aW1lICovCisjZGVmaW5lIERPTlRfRkFL RV9USU1FKGNhbGwpICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgIGJvb2wgZG9udF9mYWtlX29yaWcgPSBkb250X2Zha2U7ICBcCisgICAgaWYg KCFkb250X2Zha2UpICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgZG9udF9mYWtlID0gdHJ1ZTsgICAgICAgICAgICAgICBc CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYWxsOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvbnRfZmFrZSA9IGRvbnRfZmFrZV9vcmln OyAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKy8qIHBvaW50ZXJzIHRvIHJlYWwgKG5vdCBmYWtl ZCkgZnVuY3Rpb25zICovCitzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9zdGF0KSAgICAgICAg ICAgIChpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CitzdGF0aWMgaW50ICAgICAg ICAgICgqcmVhbF9mc3RhdCkgICAgICAgICAgIChpbnQsIGludCwgc3RydWN0IHN0YXQgKik7Citz dGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9mc3RhdGF0KSAgICAgICAgIChpbnQsIGludCwgY29u c3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGludCAgICAgICAgICAoKnJl YWxfbHN0YXQpICAgICAgICAgICAoaW50LCBjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopOwor c3RhdGljIGludCAgICAgICAgICAoKnJlYWxfc3RhdDY0KSAgICAgICAgICAoaW50LCBjb25zdCBj aGFyICosIHN0cnVjdCBzdGF0NjQgKik7CitzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9mc3Rh dDY0KSAgICAgICAgIChpbnQsIGludCAsIHN0cnVjdCBzdGF0NjQgKik7CitzdGF0aWMgaW50ICAg ICAgICAgICgqcmVhbF9mc3RhdGF0NjQpICAgICAgIChpbnQsIGludCAsIGNvbnN0IGNoYXIgKiwg c3RydWN0IHN0YXQ2NCAqLCBpbnQpOworc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfbHN0YXQ2 NCkgICAgICAgICAoaW50LCBjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0NjQgKik7CitzdGF0aWMg dGltZV90ICAgICAgICgqcmVhbF90aW1lKSAgICAgICAgICAgICh0aW1lX3QgKik7CitzdGF0aWMg aW50ICAgICAgICAgICgqcmVhbF9mdGltZSkgICAgICAgICAgIChzdHJ1Y3QgdGltZWIgKik7Citz dGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9nZXR0aW1lb2ZkYXkpICAgIChzdHJ1Y3QgdGltZXZh bCAqLCB2b2lkICopOworc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfY2xvY2tfZ2V0dGltZSkg ICAoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCk7CisjaWZkZWYgRkFLRV9J TlRFUk5BTF9DQUxMUworc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfX19mdGltZSkgICAgICAg ICAgIChzdHJ1Y3QgdGltZWIgKik7CitzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9fX2dldHRp bWVvZmRheSkgICAgKHN0cnVjdCB0aW1ldmFsICosIHZvaWQgKik7CitzdGF0aWMgaW50ICAgICAg ICAgICgqcmVhbF9fX2Nsb2NrX2dldHRpbWUpICAgKGNsb2NraWRfdCBjbGtfaWQsIHN0cnVjdCB0 aW1lc3BlYyAqdHApOworI2VuZGlmCisjaWZuZGVmIF9fQVBQTEVPU1hfXworI2lmZGVmIEZBS0Vf VElNRVJTCitzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF90aW1lcl9zZXR0aW1lXzIyKSAgIChp bnQgdGltZXJpZCwgaW50IGZsYWdzLCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqbmV3X3ZhbHVl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGl0aW1lcnNwZWMgKiBvbGRfdmFsdWUpOworc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfdGlt ZXJfc2V0dGltZV8yMzMpICAodGltZXJfdCB0aW1lcmlkLCBpbnQgZmxhZ3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaXRpbWVy c3BlYyAqbmV3X3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKiBvbGRfdmFsdWUpOworc3RhdGljIGludCAgICAg ICAgICAoKnJlYWxfdGltZXJfZ2V0dGltZV8yMikgICAoaW50IHRpbWVyaWQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAq Y3Vycl92YWx1ZSk7CitzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF90aW1lcl9nZXR0aW1lXzIz MykgICh0aW1lcl90IHRpbWVyaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqY3Vycl92YWx1ZSk7CisjZW5kaWYKKyNl bmRpZgorI2lmZGVmIEZBS0VfU0xFRVAKK3N0YXRpYyBpbnQgICAgICAgICAgKCpyZWFsX25hbm9z bGVlcCkgICAgICAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVxLCBzdHJ1Y3QgdGltZXNwZWMg KnJlbSk7CitzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF91c2xlZXApICAgICAgICAgICh1c2Vj b25kc190IHVzZWMpOworc3RhdGljIHVuc2lnbmVkIGludCAoKnJlYWxfc2xlZXApICAgICAgICAg ICAodW5zaWduZWQgaW50IHNlY29uZHMpOworc3RhdGljIHVuc2lnbmVkIGludCAoKnJlYWxfYWxh cm0pICAgICAgICAgICAodW5zaWduZWQgaW50IHNlY29uZHMpOworc3RhdGljIGludCAgICAgICAg ICAoKnJlYWxfcG9sbCkgICAgICAgICAgICAoc3RydWN0IHBvbGxmZCAqLCBuZmRzX3QsIGludCk7 CitzdGF0aWMgaW50ICAgICAgICAgICgqcmVhbF9wcG9sbCkgICAgICAgICAgIChzdHJ1Y3QgcG9s bGZkICosIG5mZHNfdCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIGNvbnN0IHNpZ3NldF90ICop Oworc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfc2VsZWN0KSAgICAgICAgICAoaW50IG5mZHMs IGZkX3NldCAqcmVzdHJpY3QgcmVhZGZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZkX3NldCAqcmVzdHJpY3Qgd3JpdGVmZHMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKnJlc3RyaWN0IGVycm9yZmRz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRp bWV2YWwgKnJlc3RyaWN0IHRpbWVvdXQpOworc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfc2Vt X3RpbWVkd2FpdCkgICAoc2VtX3QqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqKTsKKyNlbmRpZgor I2lmZGVmIF9fQVBQTEVPU1hfXworc3RhdGljIGludCAgICAgICAgICAoKnJlYWxfY2xvY2tfZ2V0 X3RpbWUpICAoY2xvY2tfc2Vydl90IGNsb2NrX3NlcnYsIG1hY2hfdGltZXNwZWNfdCAqY3VyX3Rp bWVjbG9ja2lkX3QpOworc3RhdGljIGludCAgICAgICAgICBhcHBsZV9jbG9ja19nZXR0aW1lICAg ICAoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCk7CitzdGF0aWMgY2xvY2tf c2Vydl90IGNsb2NrX3NlcnZfcmVhbDsKKyNlbmRpZgorCitzdGF0aWMgaW50IGluaXRpYWxpemVk ID0gMDsKKworLyogcHJvdG90eXBlcyAqLworc3RhdGljIGludCAgICBmYWtlX2dldHRpbWVvZmRh eShzdHJ1Y3QgdGltZXZhbCAqdHYpOworc3RhdGljIGludCAgICBmYWtlX2Nsb2NrX2dldHRpbWUo Y2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCk7CisKKy8qKiBTZW1hcGhvcmUg cHJvdGVjdGluZyBzaGFyZWQgZGF0YSAqLworc3RhdGljIHNlbV90ICpzaGFyZWRfc2VtID0gTlVM TDsKKworLyoqIERhdGEgc2hhcmVkIGFtb25nIGZha2V0aW1lLXNwYXduZWQgcHJvY2Vzc2VzICov CitzdGF0aWMgc3RydWN0IGZ0X3NoYXJlZF9zICpmdF9zaGFyZWQgPSBOVUxMOworCisvKiogU3Rv cmFnZSBmb3JtYXQgZm9yIHRpbWVzdGFtcHMgd3JpdHRlbiB0byBmaWxlLiBCaWcgZW5kaWFuLiov CitzdHJ1Y3Qgc2F2ZWRfdGltZXN0YW1wCit7CisgIGludDY0X3Qgc2VjOworICB1aW50NjRfdCBu c2VjOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVzcGVjX2Zyb21fc2F2ZWQgKHN0cnVj dCB0aW1lc3BlYyAqdHAsCisgIHN0cnVjdCBzYXZlZF90aW1lc3RhbXAgKnNhdmVkKQoreworICAv KiByZWFkIGFzIGJpZyBlbmRpYW4gKi8KKyAgdHAtPnR2X3NlYyA9IGJlNjR0b2goc2F2ZWQtPnNl Yyk7CisgIHRwLT50dl9uc2VjID0gYmU2NHRvaChzYXZlZC0+bnNlYyk7Cit9CisKKy8qKiBTYXZl ZCB0aW1lc3RhbXBzICovCitzdGF0aWMgc3RydWN0IHNhdmVkX3RpbWVzdGFtcCAqc3RzcyA9IE5V TEw7CitzdGF0aWMgc2l6ZV90IGluZmlsZV9zaXplOworc3RhdGljIGJvb2wgaW5maWxlX3NldCA9 IGZhbHNlOworCisvKiogRmlsZSBmZCB0byBzYXZlIHRpbWVzdGFtcHMgdG8gKi8KK3N0YXRpYyBp bnQgb3V0ZmlsZSA9IC0xOworCitzdGF0aWMgYm9vbCBsaW1pdGVkX2Zha2luZyA9IGZhbHNlOwor c3RhdGljIGxvbmcgY2FsbGNvdW50ZXIgPSAwOworc3RhdGljIGxvbmcgZnRfc3RhcnRfYWZ0ZXJf c2VjcyA9IC0xOworc3RhdGljIGxvbmcgZnRfc3RvcF9hZnRlcl9zZWNzID0gLTE7CitzdGF0aWMg bG9uZyBmdF9zdGFydF9hZnRlcl9uY2FsbHMgPSAtMTsKK3N0YXRpYyBsb25nIGZ0X3N0b3BfYWZ0 ZXJfbmNhbGxzID0gLTE7CisKK3N0YXRpYyBib29sIHNwYXduc3VwcG9ydCA9IGZhbHNlOworc3Rh dGljIGludCBzcGF3bmVkID0gMDsKK3N0YXRpYyBjaGFyIGZ0X3NwYXduX3RhcmdldFsxMDI0XTsK K3N0YXRpYyBsb25nIGZ0X3NwYXduX3NlY3MgPSAtMTsKK3N0YXRpYyBsb25nIGZ0X3NwYXduX25j YWxscyA9IC0xOworCitzdGF0aWMgaW50IGZha2VfbW9ub3RvbmljX2Nsb2NrID0gMTsKK3N0YXRp YyBpbnQgY2FjaGVfZW5hYmxlZCA9IDE7CitzdGF0aWMgaW50IGNhY2hlX2R1cmF0aW9uID0gMTA7 ICAgICAvKiBjYWNoZSBmYWtlIHRpbWUgaW5wdXQgZm9yIDEwIHNlY29uZHMgKi8KKworLyoKKyAq IFN0YXRpYyB0aW1lc3BlYyB0byBzdG9yZSBvdXIgc3RhcnR1cCB0aW1lLCBmb2xsb3dlZCBieSBh IGxvYWQtdGltZSBsaWJyYXJ5CisgKiBpbml0aWFsaXphdGlvbiBkZWNsYXJhdGlvbi4KKyAqLwor I2lmbmRlZiBDTE9DS19CT09UVElNRQorc3RhdGljIHN0cnVjdCBzeXN0ZW1fdGltZV9zIGZ0cGxf c3RhcnR0aW1lID0ge3swLCAtMX0sIHswLCAtMX0sIHswLCAtMX19OworI2Vsc2UKK3N0YXRpYyBz dHJ1Y3Qgc3lzdGVtX3RpbWVfcyBmdHBsX3N0YXJ0dGltZSA9IHt7MCwgLTF9LCB7MCwgLTF9LCB7 MCwgLTF9LCB7MCwgLTF9fTsKKyNlbmRpZgorCitzdGF0aWMgY2hhciB1c2VyX2Zha2VkX3RpbWVf Zm10W0JVRlNJWl0gPSB7MH07CisKKy8qIFVzZXIgc3VwcGxpZWQgYmFzZSB0aW1lIHRvIGZha2Ug Ki8KK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgdXNlcl9mYWtlZF90aW1lX3RpbWVzcGVjID0gezAs IC0xfTsKKy8qIFVzZXIgc3VwcGxpZWQgYmFzZSB0aW1lIGlzIHNldCAqLworc3RhdGljIGJvb2wg dXNlcl9mYWtlZF90aW1lX3NldCA9IGZhbHNlOworc3RhdGljIGNoYXIgdXNlcl9mYWtlZF90aW1l X3NhdmVkW0JVRkZFUkxFTl0gPSB7MH07CisKKy8qIEZyYWN0aW9uYWwgdXNlciBvZmZzZXQgcHJv dmlkZWQgdGhyb3VnaCBGQUtFVElNRSBlbnYuIHZhci4qLworc3RhdGljIHN0cnVjdCB0aW1lc3Bl YyB1c2VyX29mZnNldCA9IHswLCAtMX07CisvKiBTcGVlZCB1cCBvciBzbG93IGRvd24gY2xvY2sg Ki8KK3N0YXRpYyBkb3VibGUgdXNlcl9yYXRlID0gMS4wOworc3RhdGljIGJvb2wgdXNlcl9yYXRl X3NldCA9IGZhbHNlOworc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB1c2VyX3Blcl90aWNrX2luYyA9 IHswLCAtMX07CitzdGF0aWMgYm9vbCB1c2VyX3Blcl90aWNrX2luY19zZXQgPSBmYWxzZTsKKwor ZW51bSBmdF9tb2RlX3Qge0ZUX0ZSRUVaRSwgRlRfU1RBUlRfQVQsIEZUX05PT1B9IGZ0X21vZGUg PSBGVF9GUkVFWkU7CisKKy8qIFRpbWUgdG8gZmFrZSBpcyBub3QgcHJvdmlkZWQgdGhyb3VnaCBG QUtFVElNRSBlbnYuIHZhci4gKi8KK3N0YXRpYyBib29sIHBhcnNlX2NvbmZpZ19maWxlID0gdHJ1 ZTsKKwordm9pZCBmdF9jbGVhbnVwICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoZGVzdHJ1Y3Rvcikp Owordm9pZCBmdHBsX2luaXQgKHZvaWQpIF9fYXR0cmlidXRlX18gKChjb25zdHJ1Y3RvcikpOwor CisKKy8qCisgKiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgIFNoYXJlZCBtZW1vcnkgcmVs YXRlZCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gU0hNCisg KiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworc3RhdGljIHZvaWQgZnRfc2htX2luaXQgKHZv aWQpCit7CisgIGludCB0aWNrc19zaG1fZmQ7CisgIGNoYXIgc2VtX25hbWVbMjU2XSwgc2htX25h bWVbMjU2XSwgKmZ0X3NoYXJlZF9lbnYgPSBnZXRlbnYoIkZBS0VUSU1FX1NIQVJFRCIpOworCisg IGlmIChmdF9zaGFyZWRfZW52ICE9IE5VTEwpCisgIHsKKyAgICBpZiAoc3NjYW5mKGZ0X3NoYXJl ZF9lbnYsICIlMjU1cyAlMjU1cyIsIHNlbV9uYW1lLCBzaG1fbmFtZSkgPCAyKQorICAgIHsKKyAg ICAgIHByaW50ZigiRXJyb3IgcGFyc2luZyBzZW1hcGhvcmUgbmFtZSBhbmQgc2hhcmVkIG1lbW9y eSBpZCBmcm9tIHN0cmluZzogJXMiLCBmdF9zaGFyZWRfZW52KTsKKyAgICAgIGV4aXQoMSk7Cisg ICAgfQorCisgICAgaWYgKFNFTV9GQUlMRUQgPT0gKHNoYXJlZF9zZW0gPSBzZW1fb3BlbihzZW1f bmFtZSwgMCkpKQorICAgIHsKKyAgICAgIHBlcnJvcigic2VtX29wZW4iKTsKKyAgICAgIGV4aXQo MSk7CisgICAgfQorCisgICAgaWYgKC0xID09ICh0aWNrc19zaG1fZmQgPSBzaG1fb3BlbihzaG1f bmFtZSwgT19DUkVBVHxPX1JEV1IsIFNfSVdVU1J8U19JUlVTUikpKQorICAgIHsKKyAgICAgIHBl cnJvcigic2htX29wZW4iKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgaWYgKE1BUF9G QUlMRUQgPT0gKGZ0X3NoYXJlZCA9IG1tYXAoTlVMTCwgc2l6ZW9mKHN0cnVjdCBmdF9zaGFyZWRf cyksIFBST1RfUkVBRHxQUk9UX1dSSVRFLAorICAgICAgICAgICAgTUFQX1NIQVJFRCwgdGlja3Nf c2htX2ZkLCAwKSkpCisgICAgeworICAgICAgcGVycm9yKCJtbWFwIik7CisgICAgICBleGl0KDEp OworICAgIH0KKyAgfQorfQorCit2b2lkIGZ0X2NsZWFudXAgKHZvaWQpCit7CisgIC8qIGRldGFj aCBmcm9tIHNoYXJlZCBtZW1vcnkgKi8KKyAgaWYgKGZ0X3NoYXJlZCAhPSBOVUxMKQorICB7Cisg ICAgbXVubWFwKGZ0X3NoYXJlZCwgc2l6ZW9mKHVpbnQ2NF90KSk7CisgIH0KKyAgaWYgKHN0c3Mg IT0gTlVMTCkKKyAgeworICAgIG11bm1hcChzdHNzLCBpbmZpbGVfc2l6ZSk7CisgIH0KKyAgaWYg KHNoYXJlZF9zZW0gIT0gTlVMTCkKKyAgeworICAgIHNlbV9jbG9zZShzaGFyZWRfc2VtKTsKKyAg fQorfQorCisKKy8qCisgKiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgIEludGVybmFsIHRp bWUgcmV0cmlldmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBJTlRU SU1FCisgKiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworLyogR2V0IHN5c3RlbSB0aW1lIGZy b20gc3lzdGVtIGZvciBhbGwgY2xvY2tzICovCitzdGF0aWMgdm9pZCBzeXN0ZW1fdGltZV9mcm9t X3N5c3RlbSAoc3RydWN0IHN5c3RlbV90aW1lX3MgKiBzeXN0aW1lKQoreworI2lmZGVmIF9fQVBQ TEVPU1hfXworICAvKiBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTE2 NzI2OS9jbG9jay1nZXR0aW1lLWFsdGVybmF0aXZlLWluLW1hYy1vcy14ICovCisgIGNsb2NrX3Nl cnZfdCBjY2xvY2s7CisgIG1hY2hfdGltZXNwZWNfdCBtdHM7CisgIGhvc3RfZ2V0X2Nsb2NrX3Nl cnZpY2UobWFjaF9ob3N0X3NlbGYoKSwgQ0FMRU5EQVJfQ0xPQ0ssICZjbG9ja19zZXJ2X3JlYWwp OworICAoKnJlYWxfY2xvY2tfZ2V0X3RpbWUpKGNsb2NrX3NlcnZfcmVhbCwgJm10cyk7CisgIHN5 c3RpbWUtPnJlYWwudHZfc2VjID0gbXRzLnR2X3NlYzsKKyAgc3lzdGltZS0+cmVhbC50dl9uc2Vj ID0gbXRzLnR2X25zZWM7CisgIGhvc3RfZ2V0X2Nsb2NrX3NlcnZpY2UobWFjaF9ob3N0X3NlbGYo KSwgU1lTVEVNX0NMT0NLLCAmY2Nsb2NrKTsKKyAgKCpyZWFsX2Nsb2NrX2dldF90aW1lKShjY2xv Y2ssICZtdHMpOworICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBjY2xv Y2spOworICBzeXN0aW1lLT5tb24udHZfc2VjID0gbXRzLnR2X3NlYzsKKyAgc3lzdGltZS0+bW9u LnR2X25zZWMgPSBtdHMudHZfbnNlYzsKKyAgc3lzdGltZS0+bW9uX3Jhdy50dl9zZWMgPSBtdHMu dHZfc2VjOworICBzeXN0aW1lLT5tb25fcmF3LnR2X25zZWMgPSBtdHMudHZfbnNlYzsKKyNlbHNl CisgIERPTlRfRkFLRV9USU1FKCgqcmVhbF9jbG9ja19nZXR0aW1lKShDTE9DS19SRUFMVElNRSwg JnN5c3RpbWUtPnJlYWwpKQorICAgOworICBET05UX0ZBS0VfVElNRSgoKnJlYWxfY2xvY2tfZ2V0 dGltZSkoQ0xPQ0tfTU9OT1RPTklDLCAmc3lzdGltZS0+bW9uKSkKKyAgIDsKKyAgRE9OVF9GQUtF X1RJTUUoKCpyZWFsX2Nsb2NrX2dldHRpbWUpKENMT0NLX01PTk9UT05JQ19SQVcsICZzeXN0aW1l LT5tb25fcmF3KSkKKyAgIDsKKyNpZmRlZiBDTE9DS19CT09UVElNRQorICBET05UX0ZBS0VfVElN RSgoKnJlYWxfY2xvY2tfZ2V0dGltZSkoQ0xPQ0tfQk9PVFRJTUUsICZzeXN0aW1lLT5ib290KSkK KyAgIDsKKyNlbmRpZgorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIG5leHRfdGltZShzdHJ1Y3Qg dGltZXNwZWMgKnRwLCBzdHJ1Y3QgdGltZXNwZWMgKnRpY2tsZW4pCit7CisgIGlmIChzaGFyZWRf c2VtICE9IE5VTEwpCisgIHsKKyAgICBzdHJ1Y3QgdGltZXNwZWMgaW5jOworICAgIC8qIGxvY2sg Ki8KKyAgICBpZiAoc2VtX3dhaXQoc2hhcmVkX3NlbSkgPT0gLTEpCisgICAgeworICAgICAgcGVy cm9yKCJzZW1fd2FpdCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgLyogY2FsY3VsYXRl IGFuZCB1cGRhdGUgZWxhcHNlZCB0aW1lICovCisgICAgdGltZXNwZWNtdWwodGlja2xlbiwgZnRf c2hhcmVkLT50aWNrcywgJmluYyk7CisgICAgdGltZXNwZWNhZGQoJnVzZXJfZmFrZWRfdGltZV90 aW1lc3BlYywgJmluYywgdHApOworICAgIChmdF9zaGFyZWQtPnRpY2tzKSsrOworICAgIC8qIHVu bG9jayAqLworICAgIGlmIChzZW1fcG9zdChzaGFyZWRfc2VtKSA9PSAtMSkKKyAgICB7CisgICAg ICBwZXJyb3IoInNlbV9wb3N0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgfQorfQorCisK Ky8qCisgKiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgIFNhdmluZyAmIGxvYWRpbmcgdGlt ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBTQVZFCisgKiAg ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisgKi8KKworc3RhdGljIHZvaWQgc2F2ZV90aW1lKHN0cnVjdCB0 aW1lc3BlYyAqdHApCit7CisgIGlmICgoc2hhcmVkX3NlbSAhPSBOVUxMKSAmJiAob3V0ZmlsZSAh PSAtMSkpCisgIHsKKyAgICBzdHJ1Y3Qgc2F2ZWRfdGltZXN0YW1wIHRpbWVfd3JpdGU7CisgICAg c3NpemVfdCB3cml0dGVuOworICAgIHNpemVfdCBuID0gMDsKKworICAgIHRpbWVfd3JpdGUuc2Vj ID0gaHRvYmU2NCh0cC0+dHZfc2VjKTsKKyAgICB0aW1lX3dyaXRlLm5zZWMgPSBodG9iZTY0KHRw LT50dl9uc2VjKTsKKworICAgIC8qIGxvY2sgKi8KKyAgICBpZiAoc2VtX3dhaXQoc2hhcmVkX3Nl bSkgPT0gLTEpCisgICAgeworICAgICAgcGVycm9yKCJzZW1fd2FpdCIpOworICAgICAgZXhpdCgx KTsKKyAgICB9CisKKyAgICBsc2VlayhvdXRmaWxlLCAwLCBTRUVLX0VORCk7CisgICAgZG8KKyAg ICB7CisgICAgICB3cml0dGVuID0gd3JpdGUob3V0ZmlsZSwgJigoKGNoYXIqKSZ0aW1lX3dyaXRl KVtuXSksIHNpemVvZih0aW1lX3dyaXRlKSAtIG4pOworICAgIH0KKyAgICB3aGlsZSAoKCh3cml0 dGVuID09IC0xKSAmJiAoZXJybm8gPT0gRUlOVFIpKSB8fAorICAgICAgICAgICAgKHNpemVvZih0 aW1lX3dyaXRlKSA8IChuICs9IHdyaXR0ZW4pKSk7CisKKyAgICBpZiAoKHdyaXR0ZW4gPT0gLTEp IHx8IChuIDwgc2l6ZW9mKHRpbWVfd3JpdGUpKSkKKyAgICB7CisgICAgICBwZXJyb3IoIlNhdmlu ZyB0aW1lc3RhbXAgdG8gZmlsZSBmYWlsZWQiKTsKKyAgICB9CisKKyAgICAvKiB1bmxvY2sgKi8K KyAgICBpZiAoc2VtX3Bvc3Qoc2hhcmVkX3NlbSkgPT0gLTEpCisgICAgeworICAgICAgcGVycm9y KCJzZW1fcG9zdCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIH0KK30KKworLyoKKyAqIFBy b3ZpZGUgZmFrZWQgdGltZSBmcm9tIGZpbGUuCisgKiBAcmV0dXJuIHRpbWUgaXMgc2V0IGZyb20g ZmlsZW4KKyAqLworc3RhdGljIGJvb2wgbG9hZF90aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHApCit7 CisgIGJvb2wgcmV0ID0gZmFsc2U7CisgIGlmICgoc2hhcmVkX3NlbSAhPSBOVUxMKSAmJiAoaW5m aWxlX3NldCkpCisgIHsKKyAgICAvKiBsb2NrICovCisgICAgaWYgKHNlbV93YWl0KHNoYXJlZF9z ZW0pID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigic2VtX3dhaXQiKTsKKyAgICAgIGV4aXQo MSk7CisgICAgfQorCisgICAgaWYgKChzaXplb2Yoc3Rzc1swXSkgKiAoZnRfc2hhcmVkLT5maWxl X2lkeCArIDEpKSA+IGluZmlsZV9zaXplKQorICAgIHsKKyAgICAgIC8qIHdlIGFyZSBvdXQgb2Yg dGltc3RhbXBzIHRvIHJlcGxheSwgcmV0dXJuIHRvIGZha2luZyB0aW1lIGJ5IHJ1bGVzCisgICAg ICAgKiB1c2luZyBsYXN0IHRpbWVzdGFtcCBmcm9tIGZpbGUgYXMgdGhlIHVzZXIgcHJvdmlkZWQg dGltZXN0YW1wICovCisgICAgICB0aW1lc3BlY19mcm9tX3NhdmVkKCZ1c2VyX2Zha2VkX3RpbWVf dGltZXNwZWMsICZzdHNzWyhpbmZpbGVfc2l6ZSAvIHNpemVvZihzdHNzWzBdKSkgLSAxIF0pOwor CisgICAgICBpZiAoZnRfc2hhcmVkLT50aWNrcyA9PSAwKQorICAgICAgeworICAgICAgICAvKiB3 ZSBzZXQgc2hhcmVkIG1lbW9yeSB0byBzdG9wIHVzaW5nIGluZmlsZSAqLworICAgICAgICBmdF9z aGFyZWQtPnRpY2tzID0gMTsKKyAgICAgICAgc3lzdGVtX3RpbWVfZnJvbV9zeXN0ZW0oJmZ0cGxf c3RhcnR0aW1lKTsKKyAgICAgICAgZnRfc2hhcmVkLT5zdGFydF90aW1lID0gZnRwbF9zdGFydHRp bWU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGZ0cGxfc3RhcnR0aW1l ID0gZnRfc2hhcmVkLT5zdGFydF90aW1lOworICAgICAgfQorCisgICAgICBtdW5tYXAoc3Rzcywg aW5maWxlX3NpemUpOworICAgICAgaW5maWxlX3NldCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNl CisgICAgeworICAgICAgdGltZXNwZWNfZnJvbV9zYXZlZCh0cCwgJnN0c3NbZnRfc2hhcmVkLT5m aWxlX2lkeF0pOworICAgICAgZnRfc2hhcmVkLT5maWxlX2lkeCsrOworICAgICAgcmV0ID0gdHJ1 ZTsKKyAgICB9CisKKyAgICAvKiB1bmxvY2sgKi8KKyAgICBpZiAoc2VtX3Bvc3Qoc2hhcmVkX3Nl bSkgPT0gLTEpCisgICAgeworICAgICAgcGVycm9yKCJzZW1fcG9zdCIpOworICAgICAgZXhpdCgx KTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworCisvKgorICogICAgICA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorICogICAgICBGYWtlZCBzeXN0ZW0gZnVuY3Rpb25zOiBmaWxlIHJlbGF0ZWQgICAg ICAgICAgICAgICAgICAgICA9PT0gRkFLRShGSUxFKQorICogICAgICA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor ICovCisKKyNpZmRlZiBGQUtFX1NUQVQKKworI2lmbmRlZiBOT19BVEZJTEUKKyNpZm5kZWYgX0FU RklMRV9TT1VSQ0UKKyNkZWZpbmUgX0FURklMRV9TT1VSQ0UKKyNlbmRpZgorI2luY2x1ZGUgPGZj bnRsLmg+IC8qIERlZmluaXRpb24gb2YgQVRfKiBjb25zdGFudHMgKi8KKyNlbmRpZgorCisjaW5j bHVkZSA8c3lzL3N0YXQuaD4KKworc3RhdGljIGludCBmYWtlX3N0YXRfZGlzYWJsZWQgPSAwOwor CisjZGVmaW5lIEZBS0VfU1RSVUNUX1NUQVRfVElNRSh3aGljaCkgeyAgICAgICAgICAgICAgICBc CisgICAgc3RydWN0IHRpbWVzcGVjIHQgPSB7YnVmLT5zdF8jI3doaWNoIyN0aW1lLCAgICAgICBc CisgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLT5zdF8jI3doaWNoIyN0aW1lbnNlY307ICBc CisgICAgZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdCk7ICAgICAgICAgICBc CisgICAgYnVmLT5zdF8jI3doaWNoIyN0aW1lID0gdC50dl9zZWM7ICAgICAgICAgICAgICAgICBc CisgICAgYnVmLT5zdF8jI3doaWNoIyN0aW1lbnNlYyA9IHQudHZfbnNlYzsgICAgICAgICAgICBc CisgIH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmYWtlX3N0YXRidWYgKHN0cnVj dCBzdGF0ICpidWYpIHsKKyNpZm5kZWYgc3RfYXRpbWUKKyAgRkFLRV9TVFJVQ1RfU1RBVF9USU1F KGMpOworICBGQUtFX1NUUlVDVF9TVEFUX1RJTUUoYSk7CisgIEZBS0VfU1RSVUNUX1NUQVRfVElN RShtKTsKKyNlbHNlCisgIGZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmJ1Zi0+ c3RfY3RpbSk7CisgIGZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmJ1Zi0+c3Rf YXRpbSk7CisgIGZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmJ1Zi0+c3RfbXRp bSk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZha2Vfc3RhdDY0YnVmIChzdHJ1 Y3Qgc3RhdDY0ICpidWYpIHsKKyNpZm5kZWYgc3RfYXRpbWUKKyAgRkFLRV9TVFJVQ1RfU1RBVF9U SU1FKGMpOworICBGQUtFX1NUUlVDVF9TVEFUX1RJTUUoYSk7CisgIEZBS0VfU1RSVUNUX1NUQVRf VElNRShtKTsKKyNlbHNlCisgIGZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmJ1 Zi0+c3RfY3RpbSk7CisgIGZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmJ1Zi0+ c3RfYXRpbSk7CisgIGZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmJ1Zi0+c3Rf bXRpbSk7CisjZW5kaWYKK30KKworLyogQ29udHJpYnV0ZWQgYnkgUGhpbGlwcCBIYWNodG1hbm4g aW4gdmVyc2lvbiAwLjYgKi8KK2ludCBfX3hzdGF0IChpbnQgdmVyLCBjb25zdCBjaGFyICpwYXRo LCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworICBpZiAoIWluaXRpYWxpemVkKQorICB7CisgICAgZnRw bF9pbml0KCk7CisgIH0KKyAgaWYgKE5VTEwgPT0gcmVhbF9zdGF0KQorICB7IC8qIGRsc3ltKCkg ZmFpbGVkICovCisjaWZkZWYgREVCVUcKKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtl dGltZSBwcm9ibGVtOiBvcmlnaW5hbCBzdGF0KCkgbm90IGZvdW5kLlxuIik7CisjZW5kaWYKKyAg ICByZXR1cm4gLTE7IC8qIHByb3BhZ2F0ZSBlcnJvciB0byBjYWxsZXIgKi8KKyAgfQorCisgIGlu dCByZXN1bHQ7CisgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9IHJlYWxfc3RhdCh2ZXIsIHBhdGgs IGJ1ZikpOworICBpZiAocmVzdWx0ID09IC0xKQorICB7CisgICAgcmV0dXJuIC0xOworICB9CisK KyAgIGlmIChidWYgIT0gTlVMTCkKKyAgIHsKKyAgICAgaWYgKCFmYWtlX3N0YXRfZGlzYWJsZWQp CisgICAgIHsKKyAgICAgICBmYWtlX3N0YXRidWYoYnVmKTsKKyAgICAgfQorICAgfQorCisgIHJl dHVybiByZXN1bHQ7Cit9CisKKy8qIENvbnRyaWJ1dGVkIGJ5IFBoaWxpcHAgSGFjaHRtYW5uIGlu IHZlcnNpb24gMC42ICovCitpbnQgX19meHN0YXQgKGludCB2ZXIsIGludCBmaWxkZXMsIHN0cnVj dCBzdGF0ICpidWYpCit7CisgIGlmICghaW5pdGlhbGl6ZWQpCisgIHsKKyAgICBmdHBsX2luaXQo KTsKKyAgfQorICBpZiAoTlVMTCA9PSByZWFsX2ZzdGF0KQorICB7ICAvKiBkbHN5bSgpIGZhaWxl ZCAqLworI2lmZGVmIERFQlVHCisgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUg cHJvYmxlbTogb3JpZ2luYWwgZnN0YXQoKSBub3QgZm91bmQuXG4iKTsKKyNlbmRpZgorICAgIHJl dHVybiAtMTsgLyogcHJvcGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLworICB9CisKKyAgaW50IHJl c3VsdDsKKyAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gcmVhbF9mc3RhdCh2ZXIsIGZpbGRlcywg YnVmKSk7CisgIGlmIChyZXN1bHQgPT0gLTEpCisgIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKwor ICBpZiAoYnVmICE9IE5VTEwpCisgIHsKKyAgICBpZiAoIWZha2Vfc3RhdF9kaXNhYmxlZCkKKyAg ICB7CisgICAgICBmYWtlX3N0YXRidWYoYnVmKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3Vs dDsKK30KKworLyogQWRkZWQgaW4gdjAuOCBhcyBzdWdnZXN0ZWQgYnkgRGFuaWVsIEthaG4gR2ls bG1vciAqLworI2lmbmRlZiBOT19BVEZJTEUKK2ludCBfX2Z4c3RhdGF0KGludCB2ZXIsIGludCBm aWxkZXMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmLCBpbnQgZmxhZykK K3sKKyAgaWYgKCFpbml0aWFsaXplZCkKKyAgeworICAgIGZ0cGxfaW5pdCgpOworICB9CisgIGlm IChOVUxMID09IHJlYWxfZnN0YXRhdCkKKyAgeyAvKiBkbHN5bSgpIGZhaWxlZCAqLworI2lmZGVm IERFQlVHCisgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiZmFrZXRpbWUgcHJvYmxlbTogb3Jp Z2luYWwgZnN0YXRhdCgpIG5vdCBmb3VuZC5cbiIpOworI2VuZGlmCisgICAgcmV0dXJuIC0xOyAv KiBwcm9wYWdhdGUgZXJyb3IgdG8gY2FsbGVyICovCisgIH0KKworICBpbnQgcmVzdWx0OworICBE T05UX0ZBS0VfVElNRShyZXN1bHQgPSByZWFsX2ZzdGF0YXQodmVyLCBmaWxkZXMsIGZpbGVuYW1l LCBidWYsIGZsYWcpKTsKKyAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgeworICAgIHJldHVybiAtMTsK KyAgfQorCisgIGlmIChidWYgIT0gTlVMTCkKKyAgeworICAgIGlmICghZmFrZV9zdGF0X2Rpc2Fi bGVkKQorICAgIHsKKyAgICAgIGZha2Vfc3RhdGJ1ZihidWYpOworICAgIH0KKyAgfQorICByZXR1 cm4gcmVzdWx0OworfQorI2VuZGlmCisKKy8qIENvbnRyaWJ1dGVkIGJ5IFBoaWxpcHAgSGFjaHRt YW5uIGluIHZlcnNpb24gMC42ICovCitpbnQgX19seHN0YXQgKGludCB2ZXIsIGNvbnN0IGNoYXIg KnBhdGgsIHN0cnVjdCBzdGF0ICpidWYpCit7CisgIGlmICghaW5pdGlhbGl6ZWQpCisgIHsKKyAg ICBmdHBsX2luaXQoKTsKKyAgfQorICBpZiAoTlVMTCA9PSByZWFsX2xzdGF0KQorICB7ICAvKiBk bHN5bSgpIGZhaWxlZCAqLworI2lmZGVmIERFQlVHCisgICAgKHZvaWQpIGZwcmludGYoc3RkZXJy LCAiZmFrZXRpbWUgcHJvYmxlbTogb3JpZ2luYWwgbHN0YXQoKSBub3QgZm91bmQuXG4iKTsKKyNl bmRpZgorICAgIHJldHVybiAtMTsgLyogcHJvcGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLworICB9 CisKKyAgaW50IHJlc3VsdDsKKyAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gcmVhbF9sc3RhdCh2 ZXIsIHBhdGgsIGJ1ZikpOworICBpZiAocmVzdWx0ID09IC0xKQorICB7CisgICAgcmV0dXJuIC0x OworICB9CisKKyAgaWYgKGJ1ZiAhPSBOVUxMKQorICB7CisgICAgaWYgKCFmYWtlX3N0YXRfZGlz YWJsZWQpCisgICAgeworICAgICAgZmFrZV9zdGF0YnVmKGJ1Zik7CisgICAgfQorICB9CisgIHJl dHVybiByZXN1bHQ7Cit9CisKKy8qIENvbnRyaWJ1dGVkIGJ5IFBoaWxpcHAgSGFjaHRtYW5uIGlu IHZlcnNpb24gMC42ICovCitpbnQgX194c3RhdDY0IChpbnQgdmVyLCBjb25zdCBjaGFyICpwYXRo LCBzdHJ1Y3Qgc3RhdDY0ICpidWYpCit7CisgIGlmICghaW5pdGlhbGl6ZWQpCisgIHsKKyAgICBm dHBsX2luaXQoKTsKKyAgfQorICBpZiAoTlVMTCA9PSByZWFsX3N0YXQ2NCkKKyAgeyAvKiBkbHN5 bSgpIGZhaWxlZCAqLworI2lmZGVmIERFQlVHCisgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAi ZmFrZXRpbWUgcHJvYmxlbTogb3JpZ2luYWwgc3RhdCgpIG5vdCBmb3VuZC5cbiIpOworI2VuZGlm CisgICAgcmV0dXJuIC0xOyAvKiBwcm9wYWdhdGUgZXJyb3IgdG8gY2FsbGVyICovCisgIH0KKwor ICBpbnQgcmVzdWx0OworICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSByZWFsX3N0YXQ2NCh2ZXIs IHBhdGgsIGJ1ZikpOworICBpZiAocmVzdWx0ID09IC0xKQorICB7CisgICAgcmV0dXJuIC0xOwor ICB9CisKKyAgaWYgKGJ1ZiAhPSBOVUxMKQorICB7CisgICAgaWYgKCFmYWtlX3N0YXRfZGlzYWJs ZWQpCisgICAgeworICAgICAgZmFrZV9zdGF0NjRidWYoYnVmKTsKKyAgICB9CisgIH0KKyAgcmV0 dXJuIHJlc3VsdDsKK30KKworLyogQ29udHJpYnV0ZWQgYnkgUGhpbGlwcCBIYWNodG1hbm4gaW4g dmVyc2lvbiAwLjYgKi8KK2ludCBfX2Z4c3RhdDY0IChpbnQgdmVyLCBpbnQgZmlsZGVzLCBzdHJ1 Y3Qgc3RhdDY0ICpidWYpCit7CisgIGlmICghaW5pdGlhbGl6ZWQpCisgIHsKKyAgICBmdHBsX2lu aXQoKTsKKyAgfQorICBpZiAoTlVMTCA9PSByZWFsX2ZzdGF0NjQpCisgIHsgIC8qIGRsc3ltKCkg ZmFpbGVkICovCisjaWZkZWYgREVCVUcKKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtl dGltZSBwcm9ibGVtOiBvcmlnaW5hbCBmc3RhdCgpIG5vdCBmb3VuZC5cbiIpOworI2VuZGlmCisg ICAgcmV0dXJuIC0xOyAvKiBwcm9wYWdhdGUgZXJyb3IgdG8gY2FsbGVyICovCisgIH0KKworICBp bnQgcmVzdWx0OworICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSByZWFsX2ZzdGF0NjQodmVyLCBm aWxkZXMsIGJ1ZikpOworICBpZiAocmVzdWx0ID09IC0xKQorICB7CisgICAgcmV0dXJuIC0xOwor ICB9CisKKyAgaWYgKGJ1ZiAhPSBOVUxMKQorICB7CisgICAgaWYgKCFmYWtlX3N0YXRfZGlzYWJs ZWQpCisgICAgeworICAgICAgZmFrZV9zdGF0NjRidWYoYnVmKTsKKyAgICB9CisgIH0KKyAgcmV0 dXJuIHJlc3VsdDsKK30KKworLyogQWRkZWQgaW4gdjAuOCBhcyBzdWdnZXN0ZWQgYnkgRGFuaWVs IEthaG4gR2lsbG1vciAqLworI2lmbmRlZiBOT19BVEZJTEUKK2ludCBfX2Z4c3RhdGF0NjQgKGlu dCB2ZXIsIGludCBmaWxkZXMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3Qgc3RhdDY0ICpi dWYsIGludCBmbGFnKQoreworICBpZiAoIWluaXRpYWxpemVkKQorICB7CisgICAgZnRwbF9pbml0 KCk7CisgIH0KKyAgaWYgKE5VTEwgPT0gcmVhbF9mc3RhdGF0NjQpCisgIHsgIC8qIGRsc3ltKCkg ZmFpbGVkICovCisjaWZkZWYgREVCVUcKKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtl dGltZSBwcm9ibGVtOiBvcmlnaW5hbCBmc3RhdGF0NjQoKSBub3QgZm91bmQuXG4iKTsKKyNlbmRp ZgorICAgIHJldHVybiAtMTsgLyogcHJvcGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLworICB9CisK KyAgaW50IHJlc3VsdDsKKyAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gcmVhbF9mc3RhdGF0NjQo dmVyLCBmaWxkZXMsIGZpbGVuYW1lLCBidWYsIGZsYWcpKTsKKyAgaWYgKHJlc3VsdCA9PSAtMSkK KyAgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmIChidWYgIT0gTlVMTCkKKyAgeworICAg IGlmICghZmFrZV9zdGF0X2Rpc2FibGVkKQorICAgIHsKKyAgICAgIGZha2Vfc3RhdDY0YnVmKGJ1 Zik7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworLyogQ29udHJp YnV0ZWQgYnkgUGhpbGlwcCBIYWNodG1hbm4gaW4gdmVyc2lvbiAwLjYgKi8KK2ludCBfX2x4c3Rh dDY0IChpbnQgdmVyLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdDY0ICpidWYpCit7Cisg IGlmICghaW5pdGlhbGl6ZWQpCisgIHsKKyAgICBmdHBsX2luaXQoKTsKKyAgfQorICBpZiAoTlVM TCA9PSByZWFsX2xzdGF0NjQpCisgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCisjaWZkZWYgREVC VUcKKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBwcm9ibGVtOiBvcmlnaW5h bCBsc3RhdCgpIG5vdCBmb3VuZC5cbiIpOworI2VuZGlmCisgICAgcmV0dXJuIC0xOyAvKiBwcm9w YWdhdGUgZXJyb3IgdG8gY2FsbGVyICovCisgIH0KKworICBpbnQgcmVzdWx0OworICBET05UX0ZB S0VfVElNRShyZXN1bHQgPSByZWFsX2xzdGF0NjQodmVyLCBwYXRoLCBidWYpKTsKKyAgaWYgKHJl c3VsdCA9PSAtMSkKKyAgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmIChidWYgIT0gTlVM TCkKKyAgeworICAgIGlmICghZmFrZV9zdGF0X2Rpc2FibGVkKQorICAgIHsKKyAgICAgIGZha2Vf c3RhdDY0YnVmKGJ1Zik7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYK KworLyoKKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgRmFrZWQgc3lzdGVtIGZ1bmN0 aW9uczogc2xlZXAvYWxhcm0vcG9sbC90aW1lciByZWxhdGVkICA9PT0gRkFLRShTTEVFUCkKKyAq ICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgQ29udHJpYnV0ZWQgYnkgQmFsaW50IFJlY3pl eSBpbiB2MC45LjUKKyAqLworCisjaWZkZWYgRkFLRV9TTEVFUAorLyoKKyAqIEZha2VkIG5hbm9z bGVlcCgpCisgKi8KK2ludCBuYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZXEsIHN0 cnVjdCB0aW1lc3BlYyAqcmVtKQoreworICBpbnQgcmVzdWx0OworICBzdHJ1Y3QgdGltZXNwZWMg cmVhbF9yZXE7CisKKyAgaWYgKCFpbml0aWFsaXplZCkKKyAgeworICAgIGZ0cGxfaW5pdCgpOwor ICB9CisgIGlmIChyZWFsX25hbm9zbGVlcCA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIC0xOwor ICB9CisgIGlmIChyZXEgIT0gTlVMTCkKKyAgeworICAgIGlmICh1c2VyX3JhdGVfc2V0ICYmICFk b250X2Zha2UpCisgICAgeworICAgICAgdGltZXNwZWNtdWwocmVxLCAxLjAgLyB1c2VyX3JhdGUs ICZyZWFsX3JlcSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZWFsX3JlcSA9ICpy ZXE7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIERP TlRfRkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9uYW5vc2xlZXApKCZyZWFsX3JlcSwgcmVtKSk7 CisgIGlmIChyZXN1bHQgPT0gLTEpCisgIHsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAg LyogZmFrZSByZXR1cm5lZCBwYXJ0cyAqLworICBpZiAoKHJlbSAhPSBOVUxMKSAmJiAoKHJlbS0+ dHZfc2VjICE9IDApIHx8IChyZW0tPnR2X25zZWMgIT0gMCkpKQorICB7CisgICAgaWYgKHVzZXJf cmF0ZV9zZXQgJiYgIWRvbnRfZmFrZSkKKyAgICB7CisgICAgICB0aW1lc3BlY211bChyZW0sIHVz ZXJfcmF0ZSwgcmVtKTsKKyAgICB9CisgIH0KKyAgLyogcmV0dXJuIHRoZSByZXN1bHQgdG8gdGhl IGNhbGxlciAqLworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogRmFrZWQgdXNsZWVwKCkK KyAqLworaW50IHVzbGVlcCh1c2Vjb25kc190IHVzZWMpCit7CisgIGludCByZXN1bHQ7CisKKyAg aWYgKCFpbml0aWFsaXplZCkKKyAgeworICAgIGZ0cGxfaW5pdCgpOworICB9CisgIGlmICh1c2Vy X3JhdGVfc2V0ICYmICFkb250X2Zha2UpCisgIHsKKyAgICBzdHJ1Y3QgdGltZXNwZWMgcmVhbF9y ZXE7CisKKyAgICBpZiAocmVhbF9uYW5vc2xlZXAgPT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBm YWxsIGJhY2sgdG8gdXNsZWVwKCkgKi8KKyAgICAgIGlmIChyZWFsX3VzbGVlcCA9PSBOVUxMKQor ICAgICAgeworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAgICBET05UX0ZBS0VfVElN RShyZXN1bHQgPSAoKnJlYWxfdXNsZWVwKSgoMS4wIC8gdXNlcl9yYXRlKSAqIHVzZWMpKTsKKyAg ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmVhbF9yZXEudHZfc2VjID0gdXNlYyAv IDEwMDAwMDA7CisgICAgcmVhbF9yZXEudHZfbnNlYyA9ICh1c2VjICUgMTAwMDAwMCkgKiAxMDAw OworICAgIHRpbWVzcGVjbXVsKCZyZWFsX3JlcSwgMS4wIC8gdXNlcl9yYXRlLCAmcmVhbF9yZXEp OworICAgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9uYW5vc2xlZXApKCZyZWFsX3Jl cSwgTlVMTCkpOworICB9CisgIGVsc2UKKyAgeworICAgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9 ICgqcmVhbF91c2xlZXApKHVzZWMpKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKgor ICogRmFrZWQgc2xlZXAoKQorICovCit1bnNpZ25lZCBpbnQgc2xlZXAodW5zaWduZWQgaW50IHNl Y29uZHMpCit7CisgIGlmICghaW5pdGlhbGl6ZWQpCisgIHsKKyAgICBmdHBsX2luaXQoKTsKKyAg fQorICBpZiAodXNlcl9yYXRlX3NldCAmJiAhZG9udF9mYWtlKQorICB7CisgICAgaWYgKHJlYWxf bmFub3NsZWVwID09IE5VTEwpCisgICAgeworICAgICAgLyogZmFsbCBiYWNrIHRvIHNsZWVwICov CisgICAgICB1bnNpZ25lZCBpbnQgcmV0OworICAgICAgaWYgKHJlYWxfc2xlZXAgPT0gTlVMTCkK KyAgICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBET05UX0ZBS0VfVElN RShyZXQgPSAoKnJlYWxfc2xlZXApKCgxLjAgLyB1c2VyX3JhdGUpICogc2Vjb25kcykpOworICAg ICAgcmV0dXJuICh1c2VyX3JhdGVfc2V0ICYmICFkb250X2Zha2UpPyh1c2VyX3JhdGUgKiByZXQp OnJldDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGludCByZXN1bHQ7CisgICAgICBz dHJ1Y3QgdGltZXNwZWMgcmVhbF9yZXEgPSB7c2Vjb25kcywgMH0sIHJlbTsKKyAgICAgIHRpbWVz cGVjbXVsKCZyZWFsX3JlcSwgMS4wIC8gdXNlcl9yYXRlLCAmcmVhbF9yZXEpOworICAgICAgRE9O VF9GQUtFX1RJTUUocmVzdWx0ID0gKCpyZWFsX25hbm9zbGVlcCkoJnJlYWxfcmVxLCAmcmVtKSk7 CisgICAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgeworICAgICAgICByZXR1cm4gMDsKKyAg ICAgIH0KKworICAgICAgLyogZmFrZSByZXR1cm5lZCBwYXJ0cyAqLworICAgICAgaWYgKChyZW0u dHZfc2VjICE9IDApIHx8IChyZW0udHZfbnNlYyAhPSAwKSkKKyAgICAgIHsKKyAgICAgICAgdGlt ZXNwZWNtdWwoJnJlbSwgdXNlcl9yYXRlLCAmcmVtKTsKKyAgICAgIH0KKyAgICAgIC8qIHJldHVy biB0aGUgcmVzdWx0IHRvIHRoZSBjYWxsZXIgKi8KKyAgICAgIHJldHVybiByZW0udHZfc2VjOwor ICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBubyBuZWVkIHRvIGZha2UgYW55dGhpbmcg Ki8KKyAgICB1bnNpZ25lZCBpbnQgcmV0OworICAgIERPTlRfRkFLRV9USU1FKHJldCA9ICgqcmVh bF9zbGVlcCkoc2Vjb25kcykpOworICAgIHJldHVybiByZXQ7CisgIH0KK30KKworLyoKKyAqIEZh a2VkIGFsYXJtKCkKKyAqIEBub3RlIGR1ZSB0byByb3VuZGluZyBhbGFybSgyKSB3aXRoIGZha2V0 aW1lIC1mICcrMCB4Nycgd29uJ3Qgd2FpdCAyLzcKKyAqIHdhbGwgY2xvY2sgc2Vjb25kcyBidXQg MCBzZWNvbmRzCisgKi8KK3Vuc2lnbmVkIGludCBhbGFybSh1bnNpZ25lZCBpbnQgc2Vjb25kcykK K3sKKyAgdW5zaWduZWQgaW50IHJldDsKKyAgdW5zaWduZWQgaW50IHNlY29uZHNfcmVhbCA9ICh1 c2VyX3JhdGVfc2V0ICYmICFkb250X2Zha2UpPygoMS4wIC8gdXNlcl9yYXRlKSAqIHNlY29uZHMp OnNlY29uZHM7CisKKyAgaWYgKCFpbml0aWFsaXplZCkKKyAgeworICAgIGZ0cGxfaW5pdCgpOwor ICB9CisgIGlmIChyZWFsX2FsYXJtID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gLTE7CisgIH0K KworICBET05UX0ZBS0VfVElNRShyZXQgPSAoKnJlYWxfYWxhcm0pKHNlY29uZHNfcmVhbCkpOwor ICByZXR1cm4gKHVzZXJfcmF0ZV9zZXQgJiYgIWRvbnRfZmFrZSk/KHVzZXJfcmF0ZSAqIHJldCk6 cmV0OworfQorCisvKgorICogRmFrZWQgcHBvbGwoKQorICovCitpbnQgcHBvbGwoc3RydWN0IHBv bGxmZCAqZmRzLCBuZmRzX3QgbmZkcywKKyAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVv dXRfdHMsIGNvbnN0IHNpZ3NldF90ICpzaWdtYXNrKQoreworICBzdHJ1Y3QgdGltZXNwZWMgcmVh bF90aW1lb3V0LCAqcmVhbF90aW1lb3V0X3B0OworICBpbnQgcmV0OworCisgIGlmICghaW5pdGlh bGl6ZWQpCisgIHsKKyAgICBmdHBsX2luaXQoKTsKKyAgfQorICBpZiAocmVhbF9wcG9sbCA9PSBO VUxMKQorICB7CisgICAgcmV0dXJuIC0xOworICB9CisgIGlmICh0aW1lb3V0X3RzICE9IE5VTEwp CisgIHsKKyAgICBpZiAodXNlcl9yYXRlX3NldCAmJiAhZG9udF9mYWtlICYmICh0aW1lb3V0X3Rz LT50dl9zZWMgPiAwKSkKKyAgICB7CisgICAgICB0aW1lc3BlY211bCh0aW1lb3V0X3RzLCAxLjAg LyB1c2VyX3JhdGUsICZyZWFsX3RpbWVvdXQpOworICAgICAgcmVhbF90aW1lb3V0X3B0ID0gJnJl YWxfdGltZW91dDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIGNhc3QgYXdheSBj b25zdG5lc3MgKi8KKyAgICAgIHJlYWxfdGltZW91dF9wdCA9IChzdHJ1Y3QgdGltZXNwZWMgKil0 aW1lb3V0X3RzOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICByZWFsX3RpbWVvdXRfcHQg PSBOVUxMOworICB9CisKKyAgRE9OVF9GQUtFX1RJTUUocmV0ID0gKCpyZWFsX3Bwb2xsKShmZHMs IG5mZHMsIHJlYWxfdGltZW91dF9wdCwgc2lnbWFzaykpOworICByZXR1cm4gcmV0OworfQorCisv KgorICogRmFrZWQgcG9sbCgpCisgKi8KK2ludCBwb2xsKHN0cnVjdCBwb2xsZmQgKmZkcywgbmZk c190IG5mZHMsIGludCB0aW1lb3V0KQoreworICBpbnQgcmV0LCB0aW1lb3V0X3JlYWwgPSAodXNl cl9yYXRlX3NldCAmJiAhZG9udF9mYWtlICYmICh0aW1lb3V0ID4gMCkpPyh0aW1lb3V0IC8gdXNl cl9yYXRlKTp0aW1lb3V0OworCisgIGlmICghaW5pdGlhbGl6ZWQpCisgIHsKKyAgICBmdHBsX2lu aXQoKTsKKyAgfQorICBpZiAocmVhbF9wb2xsID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gLTE7 CisgIH0KKworICBET05UX0ZBS0VfVElNRShyZXQgPSAoKnJlYWxfcG9sbCkoZmRzLCBuZmRzLCB0 aW1lb3V0X3JlYWwpKTsKKyAgcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEZha2VkIHNlbGVjdCgp CisgKi8KK2ludCBzZWxlY3QoaW50IG5mZHMsIGZkX3NldCAqcmVhZGZkcywKKyAgICAgICAgICAg ZmRfc2V0ICp3cml0ZWZkcywKKyAgICAgICAgICAgZmRfc2V0ICplcnJvcmZkcywKKyAgICAgICAg ICAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQpCit7CisgIGludCByZXQ7CisgIHN0cnVjdCB0aW1l dmFsIHRpbWVvdXRfcmVhbDsKKworICBpZiAoIWluaXRpYWxpemVkKQorICB7CisgICAgZnRwbF9p bml0KCk7CisgIH0KKworICBpZiAocmVhbF9zZWxlY3QgPT0gTlVMTCkKKyAgeworICAgIHJldHVy biAtMTsKKyAgfQorCisgIGlmICh0aW1lb3V0ICE9IE5VTEwpCisgIHsKKyAgICBpZiAodXNlcl9y YXRlX3NldCAmJiAhZG9udF9mYWtlICYmICh0aW1lb3V0LT50dl9zZWMgPiAwIHx8IHRpbWVvdXQt PnR2X3VzZWMgPiAwKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisKKyAgICAg IHRzLnR2X3NlYyA9IHRpbWVvdXQtPnR2X3NlYzsKKyAgICAgIHRzLnR2X25zZWMgPSB0aW1lb3V0 LT50dl91c2VjICogMTAwMDsKKworICAgICAgdGltZXNwZWNtdWwoJnRzLCAxLjAgLyB1c2VyX3Jh dGUsICZ0cyk7CisKKyAgICAgIHRpbWVvdXRfcmVhbC50dl9zZWMgPSB0cy50dl9zZWM7CisgICAg ICB0aW1lb3V0X3JlYWwudHZfdXNlYyA9IHRzLnR2X25zZWMgLyAxMDAwOworICAgIH0KKyAgICBl bHNlCisgICAgeworICAgICAgdGltZW91dF9yZWFsLnR2X3NlYyA9IHRpbWVvdXQtPnR2X3NlYzsK KyAgICAgIHRpbWVvdXRfcmVhbC50dl91c2VjID0gdGltZW91dC0+dHZfdXNlYzsKKyAgICB9Cisg IH0KKworICBET05UX0ZBS0VfVElNRShyZXQgPSAoKnJlYWxfc2VsZWN0KShuZmRzLCByZWFkZmRz LCB3cml0ZWZkcywgZXJyb3JmZHMsIHRpbWVvdXQgPT0gTlVMTCA/IHRpbWVvdXQgOiAmdGltZW91 dF9yZWFsKSk7CisgIHJldHVybiByZXQ7Cit9CisKK2ludCBzZW1fdGltZWR3YWl0KHNlbV90ICpz ZW0sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzX3RpbWVvdXQpCit7CisgIGludCByZXN1bHQ7 CisgIHN0cnVjdCB0aW1lc3BlYyByZWFsX2Fic190aW1lb3V0LCAqcmVhbF9hYnNfdGltZW91dF9w dDsKKworICAvKiBzYW5pdHkgY2hlY2sgKi8KKyAgaWYgKGFic190aW1lb3V0ID09IE5VTEwpCisg IHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAoTlVMTCA9PSByZWFsX3NlbV90aW1lZHdh aXQpCisgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCisjaWZkZWYgREVCVUcKKyAgICAodm9pZCkg ZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBwcm9ibGVtOiBvcmlnaW5hbCBzZW1fdGltZWR3YWl0 KCkgbm90IGZvdW5kLlxuIik7CisjZW5kaWYKKyAgICByZXR1cm4gLTE7IC8qIHByb3BhZ2F0ZSBl cnJvciB0byBjYWxsZXIgKi8KKyAgfQorCisgIGlmICghZG9udF9mYWtlKQorICB7CisgICAgc3Ry dWN0IHRpbWVzcGVjIHRkaWZmLCB0aW1lYWRqOworCisgICAgdGltZXNwZWNzdWIoYWJzX3RpbWVv dXQsICZmdHBsX3N0YXJ0dGltZS5yZWFsLCAmdGRpZmYpOworCisgICAgaWYgKHVzZXJfcmF0ZV9z ZXQpCisgICAgeworICAgICAgdGltZXNwZWNtdWwoJnRkaWZmLCB1c2VyX3JhdGUsICZ0aW1lYWRq KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdGltZWFkaiA9IHRkaWZmOworICAg IH0KKyAgICB0aW1lc3BlY2FkZCgmdXNlcl9mYWtlZF90aW1lX3RpbWVzcGVjLCAmdGltZWFkaiwg JnJlYWxfYWJzX3RpbWVvdXQpOworICAgIHJlYWxfYWJzX3RpbWVvdXRfcHQgPSAmcmVhbF9hYnNf dGltZW91dDsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBjYXN0IGF3YXkgY29uc3RuZXNzICov CisgICAgcmVhbF9hYnNfdGltZW91dF9wdCA9IChzdHJ1Y3QgdGltZXNwZWMgKilhYnNfdGltZW91 dDsKKyAgfQorCisgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9zZW1fdGltZWR3YWl0 KShzZW0sIHJlYWxfYWJzX3RpbWVvdXRfcHQpKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRp ZgorCisjaWZuZGVmIF9fQVBQTEVfXworI2lmZGVmIEZBS0VfVElNRVJTCisKKy8qIHRpbWVyIHJl bGF0ZWQgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzICovCit0eXBlZGVmIHVuaW9uIHsKKyAgaW50 IGludF9tZW1iZXI7CisgIHRpbWVyX3QgdGltZXJfdF9tZW1iZXI7Cit9IHRpbWVyX3Rfb3JfaW50 OworCisvKgorICogRmFrZXRpbWUncyBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbidzIGNvbXBhdGli aWxpdHkgbW9kZQorICovCit0eXBlZGVmIGVudW0ge0ZUX0NPTVBBVF9HTElCQ18yXzIsIEZUX0NP TVBBVF9HTElCQ18yXzNfM30gZnRfbGliX2NvbXBhdDsKKworCisvKgorICogRmFrZWQgdGltZXJf c2V0dGltZSgpCisgKiBEb2VzIG5vdCBhZmZlY3QgdGltZXIgc3BlZWQgd2hlbiBzdGVwcGluZyBj bG9jayB3aXRoIGVhY2ggdGltZSgpIGNhbGwuCisgKi8KK3N0YXRpYyBpbnQKK3RpbWVyX3NldHRp bWVfY29tbW9uKHRpbWVyX3Rfb3JfaW50IHRpbWVyaWQsIGludCBmbGFncywKKyAgICAgICAgIGNv bnN0IHN0cnVjdCBpdGltZXJzcGVjICpuZXdfdmFsdWUsCisgICAgICAgICBzdHJ1Y3QgaXRpbWVy c3BlYyAqb2xkX3ZhbHVlLCBmdF9saWJfY29tcGF0IGNvbXBhdCkKK3sKKyAgaW50IHJlc3VsdDsK KyAgc3RydWN0IGl0aW1lcnNwZWMgbmV3X3JlYWw7CisgIHN0cnVjdCBpdGltZXJzcGVjICpuZXdf cmVhbF9wdCA9ICZuZXdfcmVhbDsKKworICBpZiAoIWluaXRpYWxpemVkKQorICB7CisgICAgZnRw bF9pbml0KCk7CisgIH0KKyAgaWYgKG5ld192YWx1ZSA9PSBOVUxMKQorICB7CisgICAgbmV3X3Jl YWxfcHQgPSBOVUxMOworICB9CisgIGVsc2UgaWYgKGRvbnRfZmFrZSkKKyAgeworICAgIC8qIGNh c3QgYXdheSBjb25zdG5lc3MqLworICAgIG5ld19yZWFsX3B0ID0gKHN0cnVjdCBpdGltZXJzcGVj ICopbmV3X3ZhbHVlOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIHNldCBpdF92YWx1ZSAqLwor ICAgIGlmICgobmV3X3ZhbHVlLT5pdF92YWx1ZS50dl9zZWMgIT0gMCkgfHwKKyAgICAgICAgKG5l d192YWx1ZS0+aXRfdmFsdWUudHZfbnNlYyAhPSAwKSkKKyAgICB7CisgICAgICBpZiAoZmxhZ3Mg JiBUSU1FUl9BQlNUSU1FKQorICAgICAgeworICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdGRpZmYs IHRpbWVhZGo7CisgICAgICAgIHRpbWVzcGVjc3ViKCZuZXdfdmFsdWUtPml0X3ZhbHVlLCAmdXNl cl9mYWtlZF90aW1lX3RpbWVzcGVjLCAmdGltZWFkaik7CisgICAgICAgIGlmICh1c2VyX3JhdGVf c2V0KQorICAgICAgICB7CisgICAgICAgICAgdGltZXNwZWNtdWwoJnRpbWVhZGosIDEuMC91c2Vy X3JhdGUsICZ0ZGlmZik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg ICAgICAgdGRpZmYgPSB0aW1lYWRqOworICAgICAgICB9CisgICAgICAgIC8qIG9ubHkgQ0xPQ0tf UkVBTFRJTUUgaXMgaGFuZGxlZCAqLworICAgICAgICB0aW1lc3BlY2FkZCgmZnRwbF9zdGFydHRp bWUucmVhbCwgJnRkaWZmLCAmbmV3X3JlYWwuaXRfdmFsdWUpOworICAgICAgfQorICAgICAgZWxz ZQorICAgICAgeworICAgICAgICBpZiAodXNlcl9yYXRlX3NldCkKKyAgICAgICAgeworICAgICAg ICAgIHRpbWVzcGVjbXVsKCZuZXdfdmFsdWUtPml0X3ZhbHVlLCAxLjAvdXNlcl9yYXRlLCAmbmV3 X3JlYWwuaXRfdmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg ICAgICAgIG5ld19yZWFsLml0X3ZhbHVlID0gbmV3X3ZhbHVlLT5pdF92YWx1ZTsKKyAgICAgICAg fQorICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgbmV3X3JlYWwuaXRfdmFs dWUgPSBuZXdfdmFsdWUtPml0X3ZhbHVlOworICAgIH0KKyAgICAvKiBzZXQgaXRfaW50ZXJ2YWwg Ki8KKyAgICBpZiAodXNlcl9yYXRlX3NldCAmJiAoKG5ld192YWx1ZS0+aXRfaW50ZXJ2YWwudHZf c2VjICE9IDApIHx8CisgICAgICAgKG5ld192YWx1ZS0+aXRfaW50ZXJ2YWwudHZfbnNlYyAhPSAw KSkpCisgICAgeworICAgICAgdGltZXNwZWNtdWwoJm5ld192YWx1ZS0+aXRfaW50ZXJ2YWwsIDEu MC91c2VyX3JhdGUsICZuZXdfcmVhbC5pdF9pbnRlcnZhbCk7CisgICAgfQorICAgIGVsc2UKKyAg ICB7CisgICAgICBuZXdfcmVhbC5pdF9pbnRlcnZhbCA9IG5ld192YWx1ZS0+aXRfaW50ZXJ2YWw7 CisgICAgfQorICB9CisKKyAgc3dpdGNoIChjb21wYXQpCisgIHsKKyAgICBjYXNlIEZUX0NPTVBB VF9HTElCQ18yXzI6CisgICAgICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfdGltZXJf c2V0dGltZV8yMikodGltZXJpZC5pbnRfbWVtYmVyLCBmbGFncywKKyAgICAgICAgICAgICAgICAg ICAgbmV3X3JlYWxfcHQsIG9sZF92YWx1ZSkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGVF9D T01QQVRfR0xJQkNfMl8zXzM6CisgICAgICAgRE9OVF9GQUtFX1RJTUUocmVzdWx0ID0gKCpyZWFs X3RpbWVyX3NldHRpbWVfMjMzKSh0aW1lcmlkLnRpbWVyX3RfbWVtYmVyLAorICAgICAgICAgICAg ICAgICAgICBmbGFncywgbmV3X3JlYWxfcHQsIG9sZF92YWx1ZSkpOworICAgICAgIGJyZWFrOwor ICAgIGRlZmF1bHQ6CisgICAgICByZXN1bHQgPSAtMTsKKyAgICAgIGJyZWFrOworICB9CisKKyAg aWYgKHJlc3VsdCA9PSAtMSkKKyAgeworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICAvKiBm YWtlIHJldHVybmVkIHBhcnRzICovCisgIGlmICgob2xkX3ZhbHVlICE9IE5VTEwpICYmICFkb250 X2Zha2UpCisgIHsKKyAgICBpZiAoKG9sZF92YWx1ZS0+aXRfdmFsdWUudHZfc2VjICE9IDApIHx8 CisgICAgICAgIChvbGRfdmFsdWUtPml0X3ZhbHVlLnR2X25zZWMgIT0gMCkpCisgICAgeworICAg ICAgcmVzdWx0ID0gZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmb2xkX3ZhbHVl LT5pdF92YWx1ZSk7CisgICAgfQorICAgIGlmICh1c2VyX3JhdGVfc2V0ICYmICgob2xkX3ZhbHVl LT5pdF9pbnRlcnZhbC50dl9zZWMgIT0gMCkgfHwKKyAgICAgICAob2xkX3ZhbHVlLT5pdF9pbnRl cnZhbC50dl9uc2VjICE9IDApKSkKKyAgICB7CisgICAgICB0aW1lc3BlY211bCgmb2xkX3ZhbHVl LT5pdF9pbnRlcnZhbCwgdXNlcl9yYXRlLCAmb2xkX3ZhbHVlLT5pdF9pbnRlcnZhbCk7CisgICAg fQorICB9CisKKyAgLyogcmV0dXJuIHRoZSByZXN1bHQgdG8gdGhlIGNhbGxlciAqLworICByZXR1 cm4gcmVzdWx0OworfQorCisvKgorICogRmFrZWQgdGltZXJfc2V0dGltZSgpIGNvbXBhdGlibGUg d2l0aCBpbXBsZW1lbnRhdGlvbiBpbiBHTElCQyAyLjIKKyAqLworaW50IHRpbWVyX3NldHRpbWVf MjIoaW50IHRpbWVyaWQsIGludCBmbGFncywKKyAgICAgICAgIGNvbnN0IHN0cnVjdCBpdGltZXJz cGVjICpuZXdfdmFsdWUsCisgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqb2xkX3ZhbHVlKQor eworICBpZiAoIWluaXRpYWxpemVkKQorICB7CisgICAgZnRwbF9pbml0KCk7CisgIH0KKyAgaWYg KHJlYWxfdGltZXJfc2V0dGltZV8yMiA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIC0xOworICB9 CisgIGVsc2UKKyAgeworICAgIHJldHVybiAodGltZXJfc2V0dGltZV9jb21tb24oKHRpbWVyX3Rf b3JfaW50KXRpbWVyaWQsIGZsYWdzLCBuZXdfdmFsdWUsIG9sZF92YWx1ZSwKKyAgICAgICAgICAg IEZUX0NPTVBBVF9HTElCQ18yXzIpKTsKKyAgfQorfQorCisvKgorICogRmFrZWQgdGltZXJfc2V0 dGltZSgpIGNvbXBhdGlibGUgd2l0aCBpbXBsZW1lbnRhdGlvbiBpbiBHTElCQyAyLjMuMworICov CitpbnQgdGltZXJfc2V0dGltZV8yMzModGltZXJfdCB0aW1lcmlkLCBpbnQgZmxhZ3MsCisgICAg ICBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqbmV3X3ZhbHVlLAorICAgICAgc3RydWN0IGl0aW1l cnNwZWMgKm9sZF92YWx1ZSkKK3sKKyAgaWYgKCFpbml0aWFsaXplZCkKKyAgeworICAgIGZ0cGxf aW5pdCgpOworICB9CisgIGlmIChyZWFsX3RpbWVyX3NldHRpbWVfMjMzID09IE5VTEwpCisgIHsK KyAgICByZXR1cm4gLTE7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuICh0aW1lcl9zZXR0 aW1lX2NvbW1vbigodGltZXJfdF9vcl9pbnQpdGltZXJpZCwgZmxhZ3MsIG5ld192YWx1ZSwgb2xk X3ZhbHVlLAorICAgICAgICAgICAgRlRfQ09NUEFUX0dMSUJDXzJfM18zKSk7CisgIH0KK30KKwor LyoKKyAqIEZha2VkIHRpbWVyX2dldHRpbWUoKQorICogRG9lcyBub3QgYWZmZWN0IHRpbWVyIHNw ZWVkIHdoZW4gc3RlcHBpbmcgY2xvY2sgd2l0aCBlYWNoIHRpbWUoKSBjYWxsLgorICovCitpbnQg dGltZXJfZ2V0dGltZV9jb21tb24odGltZXJfdF9vcl9pbnQgdGltZXJpZCwgc3RydWN0IGl0aW1l cnNwZWMgKmN1cnJfdmFsdWUsIGZ0X2xpYl9jb21wYXQgY29tcGF0KQoreworICBpbnQgcmVzdWx0 OworCisgIGlmICghaW5pdGlhbGl6ZWQpCisgIHsKKyAgICBmdHBsX2luaXQoKTsKKyAgfQorICBp ZiAocmVhbF90aW1lcl9nZXR0aW1lXzIzMyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIC0xOwor ICB9CisKKyAgc3dpdGNoIChjb21wYXQpCisgIHsKKyAgICBjYXNlIEZUX0NPTVBBVF9HTElCQ18y XzI6CisgICAgICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfdGltZXJfZ2V0dGltZV8y MikodGltZXJpZC5pbnRfbWVtYmVyLCBjdXJyX3ZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBj YXNlIEZUX0NPTVBBVF9HTElCQ18yXzNfMzoKKyAgICAgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9 ICgqcmVhbF90aW1lcl9nZXR0aW1lXzIzMykodGltZXJpZC50aW1lcl90X21lbWJlciwgY3Vycl92 YWx1ZSkpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJlc3VsdCA9IC0xOwor ICAgICAgYnJlYWs7CisgIH0KKworICBpZiAocmVzdWx0ID09IC0xKQorICB7CisgICAgcmV0dXJu IHJlc3VsdDsKKyAgfQorCisgIC8qIGZha2UgcmV0dXJuZWQgcGFydHMgKi8KKyAgaWYgKGN1cnJf dmFsdWUgIT0gTlVMTCkKKyAgeworICAgIGlmICh1c2VyX3JhdGVfc2V0ICYmICFkb250X2Zha2Up CisgICAgeworICAgICAgdGltZXNwZWNtdWwoJmN1cnJfdmFsdWUtPml0X2ludGVydmFsLCB1c2Vy X3JhdGUsICZjdXJyX3ZhbHVlLT5pdF9pbnRlcnZhbCk7CisgICAgICB0aW1lc3BlY211bCgmY3Vy cl92YWx1ZS0+aXRfdmFsdWUsIHVzZXJfcmF0ZSwgJmN1cnJfdmFsdWUtPml0X3ZhbHVlKTsKKyAg ICB9CisgIH0KKyAgLyogcmV0dXJuIHRoZSByZXN1bHQgdG8gdGhlIGNhbGxlciAqLworICByZXR1 cm4gcmVzdWx0OworfQorCisvKgorICogRmFrZWQgdGltZXJfZ2V0dGltZSgpIGNvbXBhdGlibGUg d2l0aCBpbXBsZW1lbnRhdGlvbiBpbiBHTElCQyAyLjIKKyAqLworaW50IHRpbWVyX2dldHRpbWVf MjIodGltZXJfdCB0aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqY3Vycl92YWx1ZSkKK3sKKyAg aWYgKCFpbml0aWFsaXplZCkKKyAgeworICAgIGZ0cGxfaW5pdCgpOworICB9CisgIGlmIChyZWFs X3RpbWVyX2dldHRpbWVfMjIgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiAtMTsKKyAgfQorICBl bHNlCisgIHsKKyAgICByZXR1cm4gKHRpbWVyX2dldHRpbWVfY29tbW9uKCh0aW1lcl90X29yX2lu dCl0aW1lcmlkLCBjdXJyX3ZhbHVlLAorICAgICAgICAgRlRfQ09NUEFUX0dMSUJDXzJfMikpOwor ICB9Cit9CisKKy8qCisgKiBGYWtlZCB0aW1lcl9nZXR0aW1lKCkgY29tcGF0aWJsZSB3aXRoIGlt cGxlbWVudGF0aW9uIGluIEdMSUJDIDIuMy4zCisgKi8KK2ludCB0aW1lcl9nZXR0aW1lXzIzMyh0 aW1lcl90IHRpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpjdXJyX3ZhbHVlKQoreworICBpZiAo IWluaXRpYWxpemVkKQorICB7CisgICAgZnRwbF9pbml0KCk7CisgIH0KKyAgaWYgKHJlYWxfdGlt ZXJfZ2V0dGltZV8yMzMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiAtMTsKKyAgfQorICBlbHNl CisgIHsKKyAgICByZXR1cm4gKHRpbWVyX2dldHRpbWVfY29tbW9uKCh0aW1lcl90X29yX2ludCl0 aW1lcmlkLCBjdXJyX3ZhbHVlLAorICAgICAgICAgICAgRlRfQ09NUEFUX0dMSUJDXzJfM18zKSk7 CisgIH0KK30KKworX19hc21fXygiLnN5bXZlciB0aW1lcl9nZXR0aW1lXzIyLCB0aW1lcl9nZXR0 aW1lQEdMSUJDXzIuMiIpOworX19hc21fXygiLnN5bXZlciB0aW1lcl9nZXR0aW1lXzIzMywgdGlt ZXJfZ2V0dGltZUBAR0xJQkNfMi4zLjMiKTsKK19fYXNtX18oIi5zeW12ZXIgdGltZXJfc2V0dGlt ZV8yMiwgdGltZXJfc2V0dGltZUBHTElCQ18yLjIiKTsKK19fYXNtX18oIi5zeW12ZXIgdGltZXJf c2V0dGltZV8yMzMsIHRpbWVyX3NldHRpbWVAQEdMSUJDXzIuMy4zIik7CisKKyNlbmRpZgorI2Vu ZGlmCisKKworLyoKKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgRmFrZWQgc3lzdGVt IGZ1bmN0aW9uczogYmFzaWMgdGltZSBmdW5jdGlvbnMgICAgICAgICAgICAgPT09IEZBS0UoVElN RSkKKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisvKgorICogdGltZSgpIGltcGxlbWVu dGF0aW9uIHVzaW5nIGNsb2NrX2dldHRpbWUoKQorICogQG5vdGUgRG9lcyBub3QgY2hlY2sgZm9y IEVGQVVMVCwgc2VlIG1hbiAyIHRpbWUKKyAqLwordGltZV90IHRpbWUodGltZV90ICp0aW1lX3Rw dHIpCit7CisgIHN0cnVjdCB0aW1lc3BlYyB0cDsKKyAgdGltZV90IHJlc3VsdDsKKworICBpZiAo IWluaXRpYWxpemVkKQorICB7CisgICAgZnRwbF9pbml0KCk7CisgIH0KKyAgRE9OVF9GQUtFX1RJ TUUocmVzdWx0ID0gKCpyZWFsX2Nsb2NrX2dldHRpbWUpKENMT0NLX1JFQUxUSU1FLCAmdHApKTsK KyAgaWYgKHJlc3VsdCA9PSAtMSkgcmV0dXJuIC0xOworCisgIC8qIHBhc3MgdGhlIHJlYWwgY3Vy cmVudCB0aW1lIHRvIG91ciBmYWtpbmcgdmVyc2lvbiwgb3ZlcndyaXRpbmcgaXQgKi8KKyAgKHZv aWQpZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHApOworCisgIGlmICh0aW1l X3RwdHIgIT0gTlVMTCkKKyAgeworICAgICp0aW1lX3RwdHIgPSB0cC50dl9zZWM7CisgIH0KKyAg cmV0dXJuIHRwLnR2X3NlYzsKK30KKworaW50IGZ0aW1lKHN0cnVjdCB0aW1lYiAqdGIpCit7Cisg IHN0cnVjdCB0aW1lc3BlYyB0cDsKKyAgaW50IHJlc3VsdDsKKworICBpZiAoIWluaXRpYWxpemVk KQorICB7CisgICAgZnRwbF9pbml0KCk7CisgIH0KKyAgLyogc2FuaXR5IGNoZWNrICovCisgIGlm ICh0YiA9PSBOVUxMKQorICAgIHJldHVybiAwOyAgICAgICAgICAgICAgIC8qIGZ0aW1lKCkgYWx3 YXlzIHJldHVybnMgMCwgc2VlIG1hbnBhZ2UgKi8KKworICAvKiBDaGVjayB3aGV0aGVyIHdlJ3Zl IGdvdCBhIHBvaW50ZXIgdG8gdGhlIHJlYWwgZnRpbWUoKSBmdW5jdGlvbiB5ZXQgKi8KKyAgaWYg KE5VTEwgPT0gcmVhbF9mdGltZSkKKyAgeyAgLyogZGxzeW0oKSBmYWlsZWQgKi8KKyNpZmRlZiBE RUJVRworICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImZha2V0aW1lIHByb2JsZW06IG9yaWdp bmFsIGZ0aW1lKCkgbm90IGZvdW5kLlxuIik7CisjZW5kaWYKKyAgICByZXR1cm4gMDsgLyogcHJv cGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLworICB9CisKKyAgLyogaW5pdGlhbGl6ZSBvdXIgVFog cmVzdWx0IHdpdGggdGhlIHJlYWwgY3VycmVudCB0aW1lICovCisgIERPTlRfRkFLRV9USU1FKHJl c3VsdCA9ICgqcmVhbF9mdGltZSkodGIpKTsKKyAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgeworICAg IHJldHVybiByZXN1bHQ7CisgIH0KKworICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxf Y2xvY2tfZ2V0dGltZSkoQ0xPQ0tfUkVBTFRJTUUsICZ0cCkpOworICBpZiAocmVzdWx0ID09IC0x KSByZXR1cm4gLTE7CisKKyAgLyogcGFzcyB0aGUgcmVhbCBjdXJyZW50IHRpbWUgdG8gb3VyIGZh a2luZyB2ZXJzaW9uLCBvdmVyd3JpdGluZyBpdCAqLworICAodm9pZClmYWtlX2Nsb2NrX2dldHRp bWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cCk7CisKKyAgdGItPnRpbWUgPSB0cC50dl9zZWM7CisgIHRi LT5taWxsaXRtID0gdHAudHZfbnNlYyAvIDEwMDAwMDA7CisKKyAgLyogcmV0dXJuIHRoZSByZXN1 bHQgdG8gdGhlIGNhbGxlciAqLworICByZXR1cm4gcmVzdWx0OyAvKiB3aWxsIGFsd2F5cyBiZSAw IChzZWUgbWFucGFnZSkgKi8KK30KKworaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAq dHYsIHZvaWQgKnR6KQoreworICBpbnQgcmVzdWx0OworCisgIGlmICghaW5pdGlhbGl6ZWQpCisg IHsKKyAgICBmdHBsX2luaXQoKTsKKyAgfQorICAvKiBzYW5pdHkgY2hlY2sgKi8KKyAgaWYgKHR2 ID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvKiBDaGVjayB3aGV0aGVy IHdlJ3ZlIGdvdCBhIHBvaW50ZXIgdG8gdGhlIHJlYWwgZnRpbWUoKSBmdW5jdGlvbiB5ZXQgKi8K KyAgaWYgKE5VTEwgPT0gcmVhbF9nZXR0aW1lb2ZkYXkpCisgIHsgIC8qIGRsc3ltKCkgZmFpbGVk ICovCisjaWZkZWYgREVCVUcKKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBw cm9ibGVtOiBvcmlnaW5hbCBnZXR0aW1lb2ZkYXkoKSBub3QgZm91bmQuXG4iKTsKKyNlbmRpZgor ICAgIHJldHVybiAtMTsgLyogcHJvcGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLworICB9CisKKyAg LyogaW5pdGlhbGl6ZSBvdXIgcmVzdWx0IHdpdGggdGhlIHJlYWwgY3VycmVudCB0aW1lICovCisg IERPTlRfRkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9nZXR0aW1lb2ZkYXkpKHR2LCB0eikpOwor ICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gcmVzdWx0OyAvKiBvcmlnaW5hbCBmdW5jdGlvbiBm YWlsZWQgKi8KKworICAvKiBwYXNzIHRoZSByZWFsIGN1cnJlbnQgdGltZSB0byBvdXIgZmFraW5n IHZlcnNpb24sIG92ZXJ3cml0aW5nIGl0ICovCisgIHJlc3VsdCA9IGZha2VfZ2V0dGltZW9mZGF5 KHR2KTsKKworICAvKiByZXR1cm4gdGhlIHJlc3VsdCB0byB0aGUgY2FsbGVyICovCisgIHJldHVy biByZXN1bHQ7Cit9CisKK2ludCBjbG9ja19nZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQsIHN0cnVj dCB0aW1lc3BlYyAqdHApCit7CisgIGludCByZXN1bHQ7CisKKyAgaWYgKCFpbml0aWFsaXplZCkK KyAgeworICAgIGZ0cGxfaW5pdCgpOworICB9CisgIC8qIHNhbml0eSBjaGVjayAqLworICBpZiAo dHAgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmIChOVUxMID09IHJl YWxfY2xvY2tfZ2V0dGltZSkKKyAgeyAgLyogZGxzeW0oKSBmYWlsZWQgKi8KKyNpZmRlZiBERUJV RworICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImZha2V0aW1lIHByb2JsZW06IG9yaWdpbmFs IGNsb2NrX2dldHRpbWUoKSBub3QgZm91bmQuXG4iKTsKKyNlbmRpZgorICAgIHJldHVybiAtMTsg LyogcHJvcGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLworICB9CisKKyAgLyogaW5pdGlhbGl6ZSBv dXIgcmVzdWx0IHdpdGggdGhlIHJlYWwgY3VycmVudCB0aW1lICovCisgIERPTlRfRkFLRV9USU1F KHJlc3VsdCA9ICgqcmVhbF9jbG9ja19nZXR0aW1lKShjbGtfaWQsIHRwKSk7CisgIGlmIChyZXN1 bHQgPT0gLTEpIHJldHVybiByZXN1bHQ7IC8qIG9yaWdpbmFsIGZ1bmN0aW9uIGZhaWxlZCAqLwor CisgIC8qIHBhc3MgdGhlIHJlYWwgY3VycmVudCB0aW1lIHRvIG91ciBmYWtpbmcgdmVyc2lvbiwg b3ZlcndyaXRpbmcgaXQgKi8KKyAgaWYgKGZha2VfbW9ub3RvbmljX2Nsb2NrIHx8IGNsa19pZCAh PSBDTE9DS19NT05PVE9OSUMpCisgIHsKKyAgICByZXN1bHQgPSBmYWtlX2Nsb2NrX2dldHRpbWUo Y2xrX2lkLCB0cCk7CisgIH0KKworICAvKiByZXR1cm4gdGhlIHJlc3VsdCB0byB0aGUgY2FsbGVy ICovCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyoKKyAqICAgICAgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KyAqICAgICAgUGFyc2luZyB0aGUgdXNlcidzIGZha2V0aW1lIHJlcXVlc3RzICAgICAgICAgICAg ICAgICAgICAgICAgICA9PT0gUEFSU0UKKyAqICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCitz dGF0aWMgdm9pZCBwYXJzZV9mdF9zdHJpbmcoY29uc3QgY2hhciAqdXNlcl9mYWtlZF90aW1lKQor eworICBzdHJ1Y3QgdG0gdXNlcl9mYWtlZF90aW1lX3RtOworICBjaGFyICogdG1wX3RpbWVfZm10 OworCisgIGlmICghc3RybmNtcCh1c2VyX2Zha2VkX3RpbWUsIHVzZXJfZmFrZWRfdGltZV9zYXZl ZCwgQlVGRkVSTEVOKSkKKyAgeworICAgICAgLyogTm8gY2hhbmdlICovCisgICAgICByZXR1cm47 CisgIH0KKworICAvKiBjaGVjayB3aGV0aGVyIHRoZSB1c2VyIGdhdmUgdXMgYW4gYWJzb2x1dGUg dGltZSB0byBmYWtlICovCisgIHN3aXRjaCAodXNlcl9mYWtlZF90aW1lWzBdKQorICB7CisKKyAg ICBkZWZhdWx0OiAgLyogVHJ5IGFuZCBpbnRlcnByZXQgdGhpcyBhcyBhIHNwZWNpZmllZCB0aW1l ICovCisgICAgICBpZiAoZnRfbW9kZSAhPSBGVF9OT09QKSBmdF9tb2RlID0gRlRfRlJFRVpFOwor ICAgICAgdXNlcl9mYWtlZF90aW1lX3RtLnRtX2lzZHN0ID0gLTE7CisgICAgICBpZiAoTlVMTCAh PSBzdHJwdGltZSh1c2VyX2Zha2VkX3RpbWUsIHVzZXJfZmFrZWRfdGltZV9mbXQsICZ1c2VyX2Zh a2VkX3RpbWVfdG0pKQorICAgICAgeworICAgICAgICB1c2VyX2Zha2VkX3RpbWVfdGltZXNwZWMu dHZfc2VjID0gbWt0aW1lKCZ1c2VyX2Zha2VkX3RpbWVfdG0pOworICAgICAgICB1c2VyX2Zha2Vk X3RpbWVfdGltZXNwZWMudHZfbnNlYyA9IDA7CisgICAgICAgIHVzZXJfZmFrZWRfdGltZV9zZXQg PSB0cnVlOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBwZXJyb3IoIkZh aWxlZCB0byBwYXJzZSBGQUtFVElNRSB0aW1lc3RhbXAiKTsKKyAgICAgICAgZXhpdChFWElUX0ZB SUxVUkUpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcrJzoKKyAgICBjYXNl ICctJzogLyogVXNlci1zcGVjaWZpZWQgb2Zmc2V0ICovCisgICAgICBpZiAoZnRfbW9kZSAhPSBG VF9OT09QKSBmdF9tb2RlID0gRlRfU1RBUlRfQVQ7CisgICAgICAvKiBmcmFjdGlvbmFsIHRpbWUg b2Zmc2V0cyBjb250cmlidXRlZCBieSBLYXJsIENoZW4gaW4gdjAuOCAqLworICAgICAgZG91Ymxl IGZyYWNfb2Zmc2V0ID0gYXRvZih1c2VyX2Zha2VkX3RpbWUpOworCisgICAgICAvKiBvZmZzZXQg aXMgaW4gc2Vjb25kcyBieSBkZWZhdWx0LCBidXQgdGhlIHN0cmluZyBtYXkgY29udGFpbgorICAg ICAgICogbXVsdGlwbGllcnMuLi4KKyAgICAgICAqLworICAgICAgaWYgKHN0cmNocih1c2VyX2Zh a2VkX3RpbWUsICdtJykgIT0gTlVMTCkgZnJhY19vZmZzZXQgKj0gNjA7CisgICAgICBlbHNlIGlm IChzdHJjaHIodXNlcl9mYWtlZF90aW1lLCAnaCcpICE9IE5VTEwpIGZyYWNfb2Zmc2V0ICo9IDYw ICogNjA7CisgICAgICBlbHNlIGlmIChzdHJjaHIodXNlcl9mYWtlZF90aW1lLCAnZCcpICE9IE5V TEwpIGZyYWNfb2Zmc2V0ICo9IDYwICogNjAgKiAyNDsKKyAgICAgIGVsc2UgaWYgKHN0cmNocih1 c2VyX2Zha2VkX3RpbWUsICd5JykgIT0gTlVMTCkgZnJhY19vZmZzZXQgKj0gNjAgKiA2MCAqIDI0 ICogMzY1OworCisgICAgICB1c2VyX29mZnNldC50dl9zZWMgPSBmbG9vcihmcmFjX29mZnNldCk7 CisgICAgICB1c2VyX29mZnNldC50dl9uc2VjID0gKGZyYWNfb2Zmc2V0IC0gdXNlcl9vZmZzZXQu dHZfc2VjKSAqIFNFQ19UT19uU0VDOworICAgICAgdGltZXNwZWNhZGQoJmZ0cGxfc3RhcnR0aW1l LnJlYWwsICZ1c2VyX29mZnNldCwgJnVzZXJfZmFrZWRfdGltZV90aW1lc3BlYyk7CisgICAgICBn b3RvIHBhcnNlX21vZGlmaWVyczsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBDb250cmlidXRl ZCBieSBEYXZpZCBOb3J0aCwgVERJIGluIHZlcnNpb24gMC43ICovCisgICAgY2FzZSAnQCc6IC8q IFNwZWNpZmljIHRpbWUsIGJ1dCBjbG9jayBhbG9uZyByZWxhdGl2ZSB0byB0aGF0IHN0YXJ0dGlt ZSAqLworICAgICAgZnRfbW9kZSA9IEZUX1NUQVJUX0FUOworICAgICAgdXNlcl9mYWtlZF90aW1l X3RtLnRtX2lzZHN0ID0gLTE7CisgICAgICAodm9pZCkgc3RycHRpbWUoJnVzZXJfZmFrZWRfdGlt ZVsxXSwgdXNlcl9mYWtlZF90aW1lX2ZtdCwgJnVzZXJfZmFrZWRfdGltZV90bSk7CisKKyAgICAg IHVzZXJfZmFrZWRfdGltZV90aW1lc3BlYy50dl9zZWMgPSBta3RpbWUoJnVzZXJfZmFrZWRfdGlt ZV90bSk7CisgICAgICB1c2VyX2Zha2VkX3RpbWVfdGltZXNwZWMudHZfbnNlYyA9IDA7CisKKyAg ICAgIC8qIFJlc2V0IHN0YXJ0dGltZSAqLworICAgICAgc3lzdGVtX3RpbWVfZnJvbV9zeXN0ZW0o JmZ0cGxfc3RhcnR0aW1lKTsKKyAgICAgIGdvdG8gcGFyc2VfbW9kaWZpZXJzOworICAgICAgYnJl YWs7CisKKyAgICBjYXNlICdpJzoKKyAgICBjYXNlICd4JzogLyogT25seSBtb2RpZmllcnMgYXJl IHBhc3NlZCwgZG9uJ3QgZmFsbCBiYWNrIHRvIHN0cnB0aW1lICovCitwYXJzZV9tb2RpZmllcnM6 CisgICAgICAvKiBTcGVlZC11cCAvIHNsb3ctZG93biBjb250cmlidXRlZCBieSBLYXJsIENoZW4g aW4gdjAuOCAqLworICAgICAgaWYgKHN0cmNocih1c2VyX2Zha2VkX3RpbWUsICd4JykgIT0gTlVM TCkKKyAgICAgIHsKKyAgICAgICAgdXNlcl9yYXRlID0gYXRvZihzdHJjaHIodXNlcl9mYWtlZF90 aW1lLCAneCcpKzEpOworICAgICAgICB1c2VyX3JhdGVfc2V0ID0gdHJ1ZTsKKyAgICAgIH0KKyAg ICAgIGVsc2UgaWYgKE5VTEwgIT0gKHRtcF90aW1lX2ZtdCA9IHN0cmNocih1c2VyX2Zha2VkX3Rp bWUsICdpJykpKQorICAgICAgeworICAgICAgICBkb3VibGUgdGlja19pbmMgPSBhdG9mKHRtcF90 aW1lX2ZtdCArIDEpOworICAgICAgICAvKiBpbmNyZW1lbnQgdGltZSB3aXRoIGV2ZXJ5IHRpbWUo KSBjYWxsKi8KKyAgICAgICAgdXNlcl9wZXJfdGlja19pbmMudHZfc2VjID0gZmxvb3IodGlja19p bmMpOworICAgICAgICB1c2VyX3Blcl90aWNrX2luYy50dl9uc2VjID0gKHRpY2tfaW5jIC0gdXNl cl9wZXJfdGlja19pbmMudHZfc2VjKSAqIFNFQ19UT19uU0VDIDsKKyAgICAgICAgdXNlcl9wZXJf dGlja19pbmNfc2V0ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICB9IC8vIGVuZCBv ZiBzd2l0Y2gKKworICBzdHJuY3B5KHVzZXJfZmFrZWRfdGltZV9zYXZlZCwgdXNlcl9mYWtlZF90 aW1lLCBCVUZGRVJMRU4tMSk7CisgIHVzZXJfZmFrZWRfdGltZV9zYXZlZFtCVUZGRVJMRU4tMV0g PSAwOworI2lmZGVmIERFQlVHCisgIGZwcmludGYoc3RkZXJyLCAibmV3IEZBS0VUSU1FOiAlc1xu IiwgdXNlcl9mYWtlZF90aW1lX3NhdmVkKTsKKyNlbmRpZgorfQorCisKKy8qCisgKiAgICAgID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisgKiAgICAgIEluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBJTklUCisgKiAgICAgID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisgKi8KKwordm9pZCBmdHBsX2luaXQodm9pZCkKK3sKKyAgY2hhciAqdG1wX2VudjsKKyAg Ym9vbCBkb250X2Zha2VfZmluYWw7CisKKyNpZmRlZiBfX0FQUExFX18KKyAgY29uc3QgY2hhciAq cHJvZ25hbWUgPSBnZXRwcm9nbmFtZSgpOworI2Vsc2UKKyAgY29uc3QgY2hhciAqcHJvZ25hbWUg PSBfX3Byb2duYW1lOworI2VuZGlmCisKKyAgLyogTG9vayB1cCBhbGwgcmVhbF8qIGZ1bmN0aW9u cy4gTlVMTCB3aWxsIG1hcmsgbWlzc2luZyBvbmVzLiAqLworICByZWFsX3N0YXQgPSAgICAgICAg ICAgICAgIGRsc3ltKFJUTERfTkVYVCwgIl9feHN0YXQiKTsKKyAgcmVhbF9mc3RhdCA9ICAgICAg ICAgICAgICBkbHN5bShSVExEX05FWFQsICJfX2Z4c3RhdCIpOworICByZWFsX2ZzdGF0YXQgPSAg ICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwgIl9fZnhzdGF0YXQiKTsKKyAgcmVhbF9sc3RhdCA9 ICAgICAgICAgICAgICBkbHN5bShSVExEX05FWFQsICJfX2x4c3RhdCIpOworICByZWFsX3N0YXQ2 NCA9ICAgICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwiX194c3RhdDY0Iik7CisgIHJlYWxfZnN0 YXQ2NCA9ICAgICAgICAgICAgZGxzeW0oUlRMRF9ORVhULCAiX19meHN0YXQ2NCIpOworICByZWFs X2ZzdGF0YXQ2NCA9ICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwgIl9fZnhzdGF0YXQ2NCIpOwor ICByZWFsX2xzdGF0NjQgPSAgICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwgIl9fbHhzdGF0NjQi KTsKKyAgcmVhbF90aW1lID0gICAgICAgICAgICAgICBkbHN5bShSVExEX05FWFQsICJ0aW1lIik7 CisgIHJlYWxfZnRpbWUgPSAgICAgICAgICAgICAgZGxzeW0oUlRMRF9ORVhULCAiZnRpbWUiKTsK KyAgcmVhbF9nZXR0aW1lb2ZkYXkgPSAgICAgICBkbHN5bShSVExEX05FWFQsICJnZXR0aW1lb2Zk YXkiKTsKKyNpZmRlZiBGQUtFX1NMRUVQCisgIHJlYWxfbmFub3NsZWVwID0gICAgICAgICAgZGxz eW0oUlRMRF9ORVhULCAibmFub3NsZWVwIik7CisgIHJlYWxfdXNsZWVwID0gICAgICAgICAgICAg ZGxzeW0oUlRMRF9ORVhULCAidXNsZWVwIik7CisgIHJlYWxfc2xlZXAgPSAgICAgICAgICAgICAg ZGxzeW0oUlRMRF9ORVhULCAic2xlZXAiKTsKKyAgcmVhbF9hbGFybSA9ICAgICAgICAgICAgICBk bHN5bShSVExEX05FWFQsICJhbGFybSIpOworICByZWFsX3BvbGwgPSAgICAgICAgICAgICAgIGRs c3ltKFJUTERfTkVYVCwgInBvbGwiKTsKKyAgcmVhbF9wcG9sbCA9ICAgICAgICAgICAgICBkbHN5 bShSVExEX05FWFQsICJwcG9sbCIpOworICByZWFsX3NlbGVjdCA9ICAgICAgICAgICAgIGRsc3lt KFJUTERfTkVYVCwgInNlbGVjdCIpOworICByZWFsX3NlbV90aW1lZHdhaXQgPSAgICAgIGRsc3lt KFJUTERfTkVYVCwgInNlbV90aW1lZHdhaXQiKTsKKyNlbmRpZgorI2lmZGVmIEZBS0VfSU5URVJO QUxfQ0FMTFMKKyAgcmVhbF9fX2Z0aW1lID0gICAgICAgICAgICAgIGRsc3ltKFJUTERfTkVYVCwg Il9fZnRpbWUiKTsKKyAgcmVhbF9fX2dldHRpbWVvZmRheSA9ICAgICAgIGRsc3ltKFJUTERfTkVY VCwgIl9fZ2V0dGltZW9mZGF5Iik7CisgIHJlYWxfX19jbG9ja19nZXR0aW1lICA9ICAgICBkbHN5 bShSVExEX05FWFQsICJfX2Nsb2NrX2dldHRpbWUiKTsKKyNlbmRpZgorI2lmZGVmIF9fQVBQTEVP U1hfXworICByZWFsX2Nsb2NrX2dldF90aW1lID0gICAgIGRsc3ltKFJUTERfTkVYVCwgImNsb2Nr X2dldF90aW1lIik7CisgIHJlYWxfY2xvY2tfZ2V0dGltZSAgPSAgICAgYXBwbGVfY2xvY2tfZ2V0 dGltZTsKKyNlbHNlCisgIHJlYWxfY2xvY2tfZ2V0dGltZSAgPSAgICAgZGxzeW0oUlRMRF9ORVhU LCAiX19jbG9ja19nZXR0aW1lIik7CisgIGlmIChOVUxMID09IHJlYWxfY2xvY2tfZ2V0dGltZSkK KyAgeworICAgIHJlYWxfY2xvY2tfZ2V0dGltZSAgPSAgIGRsc3ltKFJUTERfTkVYVCwgImNsb2Nr X2dldHRpbWUiKTsKKyAgfQorI2lmZGVmIEZBS0VfVElNRVJTCisjaWYgZGVmaW5lZChfX3N1bikK KyAgICByZWFsX3RpbWVyX2dldHRpbWVfMjMzID0gIGRsc3ltKFJUTERfTkVYVCwgInRpbWVyX2dl dHRpbWUiKTsKKyAgICByZWFsX3RpbWVyX3NldHRpbWVfMjMzID0gIGRsc3ltKFJUTERfTkVYVCwg InRpbWVyX3NldHRpbWUiKTsKKyNlbHNlCisgIHJlYWxfdGltZXJfc2V0dGltZV8yMiA9ICAgZGx2 c3ltKFJUTERfTkVYVCwgInRpbWVyX3NldHRpbWUiLCJHTElCQ18yLjIiKTsKKyAgcmVhbF90aW1l cl9zZXR0aW1lXzIzMyA9ICBkbHZzeW0oUlRMRF9ORVhULCAidGltZXJfc2V0dGltZSIsIkdMSUJD XzIuMy4zIik7CisgIGlmIChOVUxMID09IHJlYWxfdGltZXJfc2V0dGltZV8yMzMpCisgIHsKKyAg ICByZWFsX3RpbWVyX3NldHRpbWVfMjMzID0gIGRsc3ltKFJUTERfTkVYVCwgInRpbWVyX3NldHRp bWUiKTsKKyAgfQorICByZWFsX3RpbWVyX2dldHRpbWVfMjIgPSAgIGRsdnN5bShSVExEX05FWFQs ICJ0aW1lcl9nZXR0aW1lIiwiR0xJQkNfMi4yIik7CisgIHJlYWxfdGltZXJfZ2V0dGltZV8yMzMg PSAgZGx2c3ltKFJUTERfTkVYVCwgInRpbWVyX2dldHRpbWUiLCJHTElCQ18yLjMuMyIpOworICBp ZiAoTlVMTCA9PSByZWFsX3RpbWVyX2dldHRpbWVfMjMzKQorICB7CisgICAgcmVhbF90aW1lcl9n ZXR0aW1lXzIzMyA9ICBkbHN5bShSVExEX05FWFQsICJ0aW1lcl9nZXR0aW1lIik7CisgIH0KKyNl bmRpZgorI2VuZGlmCisjZW5kaWYKKworICBkb250X2Zha2UgPSB0cnVlOyAvLyBEbyBub3QgZmFr ZSB0aW1lcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24KKyAgZG9udF9mYWtlX2ZpbmFsID0gZmFsc2U7 CisgIGluaXRpYWxpemVkID0gMTsKKworICBmdF9zaG1faW5pdCgpOworI2lmZGVmIEZBS0VfU1RB VAorICBpZiAoZ2V0ZW52KCJOT19GQUtFX1NUQVQiKSE9TlVMTCkKKyAgeworICAgIGZha2Vfc3Rh dF9kaXNhYmxlZCA9IDE7ICAvL05vdGUgdGhhdCB0aGlzIGlzIE5PVCByZS1jaGVja2VkCisgIH0K KyNlbmRpZgorCisgIGlmICgodG1wX2VudiA9IGdldGVudigiRkFLRVRJTUVfQ0FDSEVfRFVSQVRJ T04iKSkgIT0gTlVMTCkKKyAgeworICAgIGNhY2hlX2R1cmF0aW9uID0gYXRvaSh0bXBfZW52KTsK KyAgfQorICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYoIkZBS0VUSU1FX05PX0NBQ0hFIikpICE9IE5V TEwpCisgIHsKKyAgICBpZiAoMCA9PSBzdHJjbXAodG1wX2VudiwgIjEiKSkKKyAgICB7CisgICAg ICBjYWNoZV9lbmFibGVkID0gMDsKKyAgICB9CisgIH0KKyAgaWYgKCh0bXBfZW52ID0gZ2V0ZW52 KCJET05UX0ZBS0VfTU9OT1RPTklDIikpICE9IE5VTEwpCisgIHsKKyAgICBpZiAoMCA9PSBzdHJj bXAodG1wX2VudiwgIjEiKSkKKyAgICB7CisgICAgICBmYWtlX21vbm90b25pY19jbG9jayA9IDA7 CisgICAgfQorICB9CisgIC8qIENoZWNrIHdoZXRoZXIgd2UgYWN0dWFsbHkgc2hvdWxkIGJlIGZh a2luZyB0aGUgcmV0dXJuZWQgdGltZXN0YW1wLiAqLworCisgIC8qIFdlIGNhbiBwcmV2ZW50IGZh a2luZyB0aW1lIGZvciBzcGVjaWZpZWQgY29tbWFuZHMgKi8KKyAgaWYgKCh0bXBfZW52ID0gZ2V0 ZW52KCJGQUtFVElNRV9TS0lQX0NNRFMiKSkgIT0gTlVMTCkKKyAgeworICAgIGNoYXIgKnNraXBf Y21kLCAqc2F2ZXB0ciwgKnRtcHZhcjsKKyAgICAvKiBEb24ndCBtZXNzIHdpdGggdGhlIGVudiB2 YXJpYWJsZSBkaXJlY3RseS4gKi8KKyAgICB0bXB2YXIgPSBzdHJkdXAodG1wX2Vudik7CisgICAg aWYgKHRtcHZhciAhPSBOVUxMKQorICAgIHsKKyAgICAgIHNraXBfY21kID0gc3RydG9rX3IodG1w dmFyLCAiLCIsICZzYXZlcHRyKTsKKyAgICAgIHdoaWxlIChza2lwX2NtZCAhPSBOVUxMKQorICAg ICAgeworICAgICAgICBpZiAoMCA9PSBzdHJjbXAocHJvZ25hbWUsIHNraXBfY21kKSkKKyAgICAg ICAgeworICAgICAgICAgIGZ0X21vZGUgPSBGVF9OT09QOworICAgICAgICAgIGRvbnRfZmFrZV9m aW5hbCA9IHRydWU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2tpcF9j bWQgPSBzdHJ0b2tfcihOVUxMLCAiLCIsICZzYXZlcHRyKTsKKyAgICAgIH0KKyAgICAgIGZyZWUo dG1wdmFyKTsKKyAgICAgIHRtcHZhciA9IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg ICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBDb3VsZCBub3QgY29weSB0aGUgZW52aXJvbm1l bnQgdmFyaWFibGUgdmFsdWUuXG4iKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9 CisgIH0KKworICAvKiBXZSBjYW4gbGltaXQgZmFraW5nIHRpbWUgdG8gc3BlY2lmaWVkIGNvbW1h bmRzICovCisgIGlmICgodG1wX2VudiA9IGdldGVudigiRkFLRVRJTUVfT05MWV9DTURTIikpICE9 IE5VTEwpCisgIHsKKyAgICBjaGFyICpvbmx5X2NtZCwgKnNhdmVwdHIsICp0bXB2YXI7CisgICAg Ym9vbCBjbWRfbWF0Y2hlZCA9IGZhbHNlOworCisgICAgaWYgKGdldGVudigiRkFLRVRJTUVfU0tJ UF9DTURTIikgIT0gTlVMTCkKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBC b3RoIEZBS0VUSU1FX1NLSVBfQ01EUyBhbmQgRkFLRVRJTUVfT05MWV9DTURTIGNhbid0IGJlIHNl dC5cbiIpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIC8qIERvbid0 IG1lc3Mgd2l0aCB0aGUgZW52IHZhcmlhYmxlIGRpcmVjdGx5LiAqLworICAgIHRtcHZhciA9IHN0 cmR1cCh0bXBfZW52KTsKKyAgICBpZiAodG1wdmFyICE9IE5VTEwpIHsKKyAgICAgIG9ubHlfY21k ID0gc3RydG9rX3IodG1wdmFyLCAiLCIsICZzYXZlcHRyKTsKKyAgICAgIHdoaWxlIChvbmx5X2Nt ZCAhPSBOVUxMKQorICAgICAgeworICAgICAgICBpZiAoMCA9PSBzdHJjbXAocHJvZ25hbWUsIG9u bHlfY21kKSkKKyAgICAgICAgeworICAgICAgICAgIGNtZF9tYXRjaGVkID0gdHJ1ZTsKKyAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBvbmx5X2NtZCA9IHN0cnRva19yKE5VTEws ICIsIiwgJnNhdmVwdHIpOworICAgICAgfQorCisgICAgICBpZiAoIWNtZF9tYXRjaGVkKQorICAg ICAgeworICAgICAgICBmdF9tb2RlID0gRlRfTk9PUDsKKyAgICAgICAgZG9udF9mYWtlX2ZpbmFs ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGZyZWUodG1wdmFyKTsKKyAgICB9IGVsc2UgeworICAg ICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogQ291bGQgbm90IGNvcHkgdGhlIGVudmlyb25tZW50 IHZhcmlhYmxlIHZhbHVlLlxuIik7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQor ICB9CisKKyAgaWYgKCh0bXBfZW52ID0gZ2V0ZW52KCJGQUtFVElNRV9TVEFSVF9BRlRFUl9TRUNP TkRTIikpICE9IE5VTEwpCisgIHsKKyAgICBmdF9zdGFydF9hZnRlcl9zZWNzID0gYXRvbCh0bXBf ZW52KTsKKyAgICBsaW1pdGVkX2Zha2luZyA9IHRydWU7CisgIH0KKyAgaWYgKCh0bXBfZW52ID0g Z2V0ZW52KCJGQUtFVElNRV9TVE9QX0FGVEVSX1NFQ09ORFMiKSkgIT0gTlVMTCkKKyAgeworICAg IGZ0X3N0b3BfYWZ0ZXJfc2VjcyA9IGF0b2wodG1wX2Vudik7CisgICAgbGltaXRlZF9mYWtpbmcg PSB0cnVlOworICB9CisgIGlmICgodG1wX2VudiA9IGdldGVudigiRkFLRVRJTUVfU1RBUlRfQUZU RVJfTlVNQ0FMTFMiKSkgIT0gTlVMTCkKKyAgeworICAgIGZ0X3N0YXJ0X2FmdGVyX25jYWxscyA9 IGF0b2wodG1wX2Vudik7CisgICAgbGltaXRlZF9mYWtpbmcgPSB0cnVlOworICB9CisgIGlmICgo dG1wX2VudiA9IGdldGVudigiRkFLRVRJTUVfU1RPUF9BRlRFUl9OVU1DQUxMUyIpKSAhPSBOVUxM KQorICB7CisgICAgZnRfc3RvcF9hZnRlcl9uY2FsbHMgPSBhdG9sKHRtcF9lbnYpOworICAgIGxp bWl0ZWRfZmFraW5nID0gdHJ1ZTsKKyAgfQorCisgIC8qIGNoZWNrIHdoZXRoZXIgd2Ugc2hvdWxk IHNwYXduIGFuIGV4dGVybmFsIGNvbW1hbmQgKi8KKyAgaWYgKCh0bXBfZW52ID0gZ2V0ZW52KCJG QUtFVElNRV9TUEFXTl9UQVJHRVQiKSkgIT0gTlVMTCkKKyAgeworICAgIHNwYXduc3VwcG9ydCA9 IHRydWU7CisgICAgKHZvaWQpIHN0cm5jcHkoZnRfc3Bhd25fdGFyZ2V0LCBnZXRlbnYoIkZBS0VU SU1FX1NQQVdOX1RBUkdFVCIpLCAxMDI0KTsKKyAgICBpZiAoKHRtcF9lbnYgPSBnZXRlbnYoIkZB S0VUSU1FX1NQQVdOX1NFQ09ORFMiKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICBmdF9zcGF3bl9z ZWNzID0gYXRvbCh0bXBfZW52KTsKKyAgICB9CisgICAgaWYgKCh0bXBfZW52ID0gZ2V0ZW52KCJG QUtFVElNRV9TUEFXTl9OVU1DQUxMUyIpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGZ0X3NwYXdu X25jYWxscyA9IGF0b2wodG1wX2Vudik7CisgICAgfQorICB9CisKKyAgaWYgKCh0bXBfZW52ID0g Z2V0ZW52KCJGQUtFVElNRV9TQVZFX0ZJTEUiKSkgIT0gTlVMTCkKKyAgeworICAgIGlmICgtMSA9 PSAob3V0ZmlsZSA9IG9wZW4odG1wX2VudiwgT19SRFdSIHwgT19BUFBFTkQgfCBPX0NMT0VYRUMg fCBPX0NSRUFULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU19JV1VTUiB8IFNfSVJV U1IpKSkKKyAgICB7CisgICAgICBwZXJyb3IoIk9wZW5pbmcgZmlsZSBmb3Igc2F2aW5nIHRpbWVz dGFtcHMgZmFpbGVkIik7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICB9CisK KyAgLyogbG9hZCBmaWxlIG9ubHkgaWYgcmVhZGluZyB0aW1zdGFtcHMgZnJvbSBpdCBpcyBub3Qg ZmluaXNoZWQgeWV0ICovCisgIGlmICgodG1wX2VudiA9IGdldGVudigiRkFLRVRJTUVfTE9BRF9G SUxFIikpICE9IE5VTEwpCisgIHsKKyAgICBpbnQgaW5maWxlID0gLTE7CisgICAgc3RydWN0IHN0 YXQgc2I7CisgICAgaWYgKC0xID09IChpbmZpbGUgPSBvcGVuKHRtcF9lbnYsIE9fUkRPTkxZfE9f Q0xPRVhFQykpKQorICAgIHsKKyAgICAgIHBlcnJvcigiT3BlbmluZyBmaWxlIGZvciBsb2FkaW5n IHRpbWVzdGFtcHMgZmFpbGVkIik7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQor CisgICAgZnN0YXQoaW5maWxlLCAmc2IpOworICAgIGlmIChzaXplb2Yoc3Rzc1swXSkgPiAoaW5m aWxlX3NpemUgPSBzYi5zdF9zaXplKSkKKyAgICB7CisgICAgICBwcmludGYoIlRoZXJlIGFyZSBu byB0aW1lc3RhbXBzIGluIHRoZSBwcm92aWRlZCBmaWxlIHRvIGxvYWQgdGltZXN0YW1wcyBmcm9t Iik7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgaWYgKChpbmZpbGVf c2l6ZSAlIHNpemVvZihzdHNzWzBdKSkgIT0gMCkKKyAgICB7CisgICAgICBwcmludGYoIkZpbGUg c2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgdGltZXN0YW1wIHNpemUuIEl0IGlzIHByb2JhYmx5IGRh bWFnZWQuIik7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgc3RzcyA9 IG1tYXAoTlVMTCwgaW5maWxlX3NpemUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgaW5maWxlLCAw KTsKKyAgICBpZiAoc3RzcyA9PSBNQVBfRkFJTEVEKQorICAgIHsKKyAgICAgIHBlcnJvcigiTWFw cGluZyBmaWxlIGZvciBsb2FkaW5nIHRpbWVzdGFtcHMgZmFpbGVkIik7CisgICAgICBleGl0KEVY SVRfRkFJTFVSRSk7CisgICAgfQorICAgIGluZmlsZV9zZXQgPSB0cnVlOworICB9CisKKyAgdG1w X2VudiA9IGdldGVudigiRkFLRVRJTUVfRk1UIik7CisgIGlmICh0bXBfZW52ID09IE5VTEwpCisg IHsKKyAgICBzdHJjcHkodXNlcl9mYWtlZF90aW1lX2ZtdCwgIiVZLSVtLSVkICVUIik7CisgIH0K KyAgZWxzZQorICB7CisgICAgc3RybmNweSh1c2VyX2Zha2VkX3RpbWVfZm10LCB0bXBfZW52LCBC VUZTSVopOworICB9CisKKyAgaWYgKHNoYXJlZF9zZW0gIT0gMCkKKyAgeworICAgIGlmIChzZW1f d2FpdChzaGFyZWRfc2VtKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoInNlbV93YWl0Iik7 CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBpZiAoZnRfc2hhcmVkLT5zdGFydF90aW1lLnJl YWwudHZfbnNlYyA9PSAtMSkKKyAgICB7CisgICAgICAvKiBzZXQgdXAgZ2xvYmFsIHN0YXJ0IHRp bWUgKi8KKyAgICAgIHN5c3RlbV90aW1lX2Zyb21fc3lzdGVtKCZmdHBsX3N0YXJ0dGltZSk7Cisg ICAgICBmdF9zaGFyZWQtPnN0YXJ0X3RpbWUgPSBmdHBsX3N0YXJ0dGltZTsKKyAgICB9CisgICAg ZWxzZQorICAgIHsKKyAgICAgIC8qKiBnZXQgcHJlc2V0IHN0YXJ0IHRpbWUgKi8KKyAgICAgIGZ0 cGxfc3RhcnR0aW1lID0gZnRfc2hhcmVkLT5zdGFydF90aW1lOworICAgIH0KKyAgICBpZiAoc2Vt X3Bvc3Qoc2hhcmVkX3NlbSkgPT0gLTEpCisgICAgeworICAgICAgcGVycm9yKCJzZW1fcG9zdCIp OworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgc3lzdGVtX3Rp bWVfZnJvbV9zeXN0ZW0oJmZ0cGxfc3RhcnR0aW1lKTsKKyAgfQorICAvKiBmYWtlIHRpbWUgc3Vw cGxpZWQgYXMgZW52aXJvbm1lbnQgdmFyaWFibGU/ICovCisgIGlmIChOVUxMICE9ICh0bXBfZW52 ID0gZ2V0ZW52KCJGQUtFVElNRSIpKSkKKyAgeworICAgIHBhcnNlX2NvbmZpZ19maWxlID0gZmFs c2U7CisgICAgcGFyc2VfZnRfc3RyaW5nKHRtcF9lbnYpOworICB9CisKKyAgZG9udF9mYWtlID0g ZG9udF9mYWtlX2ZpbmFsOworfQorCisKKy8qCisgKiAgICAgID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAg ICAgIEhlbHBlciBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA9PT0gSEVMUEVSCisgKiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworc3RhdGlj IHZvaWQgcmVtb3ZlX3RyYWlsaW5nX2VvbHMoY2hhciAqbGluZSkKK3sKKyAgY2hhciAqZW5kcCA9 IGxpbmUgKyBzdHJsZW4obGluZSk7CisgIC8qCisgICAqIGVyYXNlIHRoZSBsYXN0IGNoYXIgaWYg aXQncyBhIG5ld2xpbmUKKyAgICogb3IgY2FycmlhZ2UgcmV0dXJuLCBhbmQgYmFjayB1cC4KKyAg ICoga2VlcCBkb2luZyB0aGlzLCBidXQgZG9uJ3QgYmFjayB1cAorICAgKiBwYXN0IHRoZSBiZWdp bm5pbmcgb2YgdGhlIHN0cmluZy4KKyAgICovCisjIGRlZmluZSBpc19lb2xjaGFyKGMpICgoYykg PT0gJ1xuJyB8fCAoYykgPT0gJ1xyJykKKyAgd2hpbGUgKGVuZHAgPiBsaW5lICYmIGlzX2VvbGNo YXIoZW5kcFstMV0pKQorICB7CisgICAgKi0tZW5kcCA9ICdcMCc7CisgIH0KK30KKworCisvKgor ICogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICBJbXBsZW1lbnRhdGlvbiBvZiBmYWtlZCBm dW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICA9PT0gRkFLRShGQUtFKQorICogICAgICA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorICovCisKK2ludCBmYWtlX2Nsb2NrX2dldHRpbWUoY2xvY2tpZF90IGNs a19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCkKK3sKKyAgLyogdmFyaWFibGVzIHVzZWQgZm9yIGNh Y2hpbmcsIGludHJvZHVjZWQgaW4gdmVyc2lvbiAwLjYgKi8KKyAgc3RhdGljIHRpbWVfdCBsYXN0 X2RhdGFfZmV0Y2ggPSAwOyAgLyogbm90IGZldGNoZWQgcHJldmlvdXNseSBhdCBmaXJzdCBjYWxs ICovCisgIHN0YXRpYyBpbnQgY2FjaGVfZXhwaXJlZCA9IDE7ICAgICAgIC8qIGNvbnNpZGVyZWQg ZXhwaXJlZCBhdCBmaXJzdCBjYWxsICovCisKKyAgaWYgKGRvbnRfZmFrZSkgcmV0dXJuIDA7Cisg IC8qIFBlciBwcm9jZXNzIHRpbWVycyBhcmUgb25seSBzcGVkIHVwIG9yIHNsb3dlZCBkb3duICov CisgIGlmICgoY2xrX2lkID09IENMT0NLX1BST0NFU1NfQ1BVVElNRV9JRCApIHx8IChjbGtfaWQg PT0gQ0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUQpKQorICB7CisgICAgaWYgKHVzZXJfcmF0ZV9zZXQp CisgICAgeworICAgICAgdGltZXNwZWNtdWwodHAsIHVzZXJfcmF0ZSwgdHApOworICAgIH0KKyAg ICByZXR1cm4gMDsKKyAgfQorCisgIC8qIFNhbml0eSBjaGVjayBieSBLYXJsIENoYW4gc2luY2Ug djAuOCAqLworICBpZiAodHAgPT0gTlVMTCkgcmV0dXJuIC0xOworCisjaWZkZWYgUFRIUkVBRF9T SU5HTEVUSFJFQURFRF9USU1FCisgIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgdGltZV9tdXRleD1Q VEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworICBwdGhyZWFkX211dGV4X2xvY2soJnRpbWVfbXV0 ZXgpOworICBwdGhyZWFkX2NsZWFudXBfcHVzaCgodm9pZCAoKikodm9pZCAqKSlwdGhyZWFkX211 dGV4X3VubG9jaywgKHZvaWQgKikmdGltZV9tdXRleCk7CisjZW5kaWYKKworICBpZiAoKGxpbWl0 ZWRfZmFraW5nICYmCisgICAgICgoZnRfc3RhcnRfYWZ0ZXJfbmNhbGxzICE9IC0xKSB8fCAoZnRf c3RvcF9hZnRlcl9uY2FsbHMgIT0gLTEpKSkgfHwKKyAgICAgKHNwYXduc3VwcG9ydCAmJiBmdF9z cGF3bl9uY2FsbHMpKQorICB7CisgICAgaWYgKGNhbGxjb3VudGVyIDwgTE9OR19NQVgpIGNhbGxj b3VudGVyKys7CisgIH0KKworICBpZiAobGltaXRlZF9mYWtpbmcgfHwgc3Bhd25zdXBwb3J0KQor ICB7CisgICAgc3RydWN0IHRpbWVzcGVjIHRtcF90czsKKyAgICAvKiBGb3IgZGVidWdnaW5nLCBv dXRwdXQgI3NlY29uZHMgYW5kICNjYWxscyAqLworICAgIHN3aXRjaCAoY2xrX2lkKQorICAgIHsK KyAgICAgIGNhc2UgQ0xPQ0tfUkVBTFRJTUU6CisjaWZkZWYgQ0xPQ0tfUkVBTFRJTUVfQ09BUlNF CisgICAgICBjYXNlIENMT0NLX1JFQUxUSU1FX0NPQVJTRToKKyNlbmRpZgorICAgICAgICB0aW1l c3BlY3N1Yih0cCwgJmZ0cGxfc3RhcnR0aW1lLnJlYWwsICZ0bXBfdHMpOworICAgICAgICBicmVh azsKKyAgICAgIGNhc2UgQ0xPQ0tfTU9OT1RPTklDOgorI2lmZGVmIENMT0NLX01PTk9UT05JQ19D T0FSU0UKKyAgICAgIGNhc2UgQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRToKKyNlbmRpZgorICAgICAg ICB0aW1lc3BlY3N1Yih0cCwgJmZ0cGxfc3RhcnR0aW1lLm1vbiwgJnRtcF90cyk7CisgICAgICAg IGJyZWFrOworICAgICAgY2FzZSBDTE9DS19NT05PVE9OSUNfUkFXOgorICAgICAgICB0aW1lc3Bl Y3N1Yih0cCwgJmZ0cGxfc3RhcnR0aW1lLm1vbl9yYXcsICZ0bXBfdHMpOworICAgICAgICBicmVh azsKKyNpZmRlZiBDTE9DS19CT09UVElNRQorICAgICAgY2FzZSBDTE9DS19CT09UVElNRToKKyAg ICAgICAgdGltZXNwZWNzdWIodHAsICZmdHBsX3N0YXJ0dGltZS5ib290LCAmdG1wX3RzKTsKKyAg ICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiSW52 YWxpZCBjbG9ja19pZCBmb3IgY2xvY2tfZ2V0dGltZTogJWQiLCBjbGtfaWQpOworICAgICAgICBl eGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgaWYgKGxpbWl0ZWRfZmFraW5nKQorICAg IHsKKyAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgYWN0dWFsbHkgc2hvdWxkIGJlIGZha2luZyB0 aGUgcmV0dXJuZWQgdGltZXN0YW1wLiAqLworICAgICAgLyogZnByaW50ZihzdGRlcnIsICIobGli ZmFrZXRpbWUgbGltaXRzIC0+IHJ1bnRpbWU6ICVsdSwgY2FsbGNvdW50ZXI6ICVsdVxuIiwgKCp0 aW1lX3RwdHIgLSBmdHBsX3N0YXJ0dGltZSksIGNhbGxjb3VudGVyKTsgKi8KKyAgICAgIGlmICgo ZnRfc3RhcnRfYWZ0ZXJfc2VjcyAhPSAtMSkgICAmJiAodG1wX3RzLnR2X3NlYyA8IGZ0X3N0YXJ0 X2FmdGVyX3NlY3MpKSByZXR1cm4gMDsKKyAgICAgIGlmICgoZnRfc3RvcF9hZnRlcl9zZWNzICE9 IC0xKSAgICAmJiAodG1wX3RzLnR2X3NlYyA+PSBmdF9zdG9wX2FmdGVyX3NlY3MpKSByZXR1cm4g MDsKKyAgICAgIGlmICgoZnRfc3RhcnRfYWZ0ZXJfbmNhbGxzICE9IC0xKSAmJiAoY2FsbGNvdW50 ZXIgPCBmdF9zdGFydF9hZnRlcl9uY2FsbHMpKSByZXR1cm4gMDsKKyAgICAgIGlmICgoZnRfc3Rv cF9hZnRlcl9uY2FsbHMgIT0gLTEpICAmJiAoY2FsbGNvdW50ZXIgPj0gZnRfc3RvcF9hZnRlcl9u Y2FsbHMpKSByZXR1cm4gMDsKKyAgICAgIC8qIGZwcmludGYoc3RkZXJyLCAiKGxpYmZha2V0aW1l IGxpbWl0cyAtPiBydW50aW1lOiAlbHUsIGNhbGxjb3VudGVyOiAlbHUgY29udGludWVzXG4iLCAo KnRpbWVfdHB0ciAtIGZ0cGxfc3RhcnR0aW1lKSwgY2FsbGNvdW50ZXIpOyAqLworICAgIH0KKwor ICAgIGlmIChzcGF3bnN1cHBvcnQpCisgICAgeworICAgICAgLyogY2hlY2sgd2hldGhlciB3ZSBz aG91bGQgc3Bhd24gYW4gZXh0ZXJuYWwgY29tbWFuZCAqLworICAgICAgaWYgKHNwYXduZWQgPT0g MCkKKyAgICAgIHsgLyogZXhlYyBleHRlcm5hbCBjb21tYW5kIG9uY2Ugb25seSAqLworICAgICAg ICBpZiAoKCh0bXBfdHMudHZfc2VjID09IGZ0X3NwYXduX3NlY3MpIHx8IChjYWxsY291bnRlciA9 PSBmdF9zcGF3bl9uY2FsbHMpKSAmJiAoc3Bhd25lZCA9PSAwKSkKKyAgICAgICAgeworICAgICAg ICAgIHNwYXduZWQgPSAxOworICAgICAgICAgICh2b2lkKSAoc3lzdGVtKGZ0X3NwYXduX3Rhcmdl dCkgKyAxKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChsYXN0X2Rh dGFfZmV0Y2ggPiAwKQorICB7CisgICAgaWYgKCh0cC0+dHZfc2VjIC0gbGFzdF9kYXRhX2ZldGNo KSA+IGNhY2hlX2R1cmF0aW9uKQorICAgIHsKKyAgICAgIGNhY2hlX2V4cGlyZWQgPSAxOworICAg IH0KKyAgICBlbHNlCisgICAgeworICAgICAgY2FjaGVfZXhwaXJlZCA9IDA7CisgICAgfQorICB9 CisKKyAgaWYgKGNhY2hlX2VuYWJsZWQgPT0gMCkKKyAgeworICAgIGNhY2hlX2V4cGlyZWQgPSAx OworICB9CisKKyAgaWYgKGNhY2hlX2V4cGlyZWQgPT0gMSkKKyAgeworICAgIHN0YXRpYyBjaGFy IHVzZXJfZmFrZWRfdGltZVtCVUZGRVJMRU5dOyAvKiBjaGFuZ2VkIHRvIHN0YXRpYyBmb3IgY2Fj aGluZyBpbiB2MC42ICovCisgICAgLyogaW5pdGlhbGl6ZSB3aXRoIGRlZmF1bHQgb3IgZW52LiB2 YXJpYWJsZSAqLworICAgIGNoYXIgKnRtcF9lbnY7CisKKyAgICAvKiBDYW4gYmUgZW5hYmxlZCBm b3IgdGVzdGluZyAuLi4KKyAgICAgIGZwcmludGYoc3RkZXJyLCAiKioqKioqKioqKioqKioqKysg Q2FjaGUgZXhwaXJlZCArKyoqKioqKioqKioqKioqXG4iKTsKKyAgICAqLworCisgICAgaWYgKE5V TEwgIT0gKHRtcF9lbnYgPSBnZXRlbnYoIkZBS0VUSU1FIikpKQorICAgIHsKKyAgICAgIHN0cm5j cHkodXNlcl9mYWtlZF90aW1lLCB0bXBfZW52LCBCVUZGRVJMRU4pOworICAgIH0KKyAgICBlbHNl CisgICAgeworICAgICAgc25wcmludGYodXNlcl9mYWtlZF90aW1lLCBCVUZGRVJMRU4sICIrMCIp OworICAgIH0KKworICAgIGxhc3RfZGF0YV9mZXRjaCA9IHRwLT50dl9zZWM7CisgICAgLyogZmFr ZSB0aW1lIHN1cHBsaWVkIGFzIGVudmlyb25tZW50IHZhcmlhYmxlPyAqLworICAgIGlmIChwYXJz ZV9jb25maWdfZmlsZSkKKyAgICB7CisgICAgICBjaGFyIGN1c3RvbV9maWxlbmFtZVtCVUZTSVpd OworICAgICAgY2hhciBmaWxlbmFtZVtCVUZTSVpdOworICAgICAgRklMRSAqZmFrZXRpbWVyYzsK KyAgICAgIC8qIGNoZWNrIHdoZXRoZXIgdGhlcmUncyBhIC5mYWtldGltZXJjIGluIHRoZSB1c2Vy J3MgaG9tZSBkaXJlY3RvcnksIG9yCisgICAgICAgKiBhIHN5c3RlbS13aWRlIC9ldGMvZmFrZXRp bWVyYyBwcmVzZW50LgorICAgICAgICogVGhlIC9ldGMvZmFrZXRpbWVyYyBoYW5kbGluZyBoYXMg YmVlbiBjb250cmlidXRlZCBieSBEYXZpZCBCdXJsZXksCisgICAgICAgKiBKYWNvYiBNb29ybWFu LCBhbmQgV2F5bmUgRGF2aXNvbiBvZiBTb3VyY2VGb3JnZSwgSW5jLiBpbiB2ZXJzaW9uIDAuNiAq LworICAgICAgKHZvaWQpIHNucHJpbnRmKGN1c3RvbV9maWxlbmFtZSwgQlVGU0laLCAiJXMiLCBn ZXRlbnYoIkZBS0VUSU1FX1RJTUVTVEFNUF9GSUxFIikpOworICAgICAgKHZvaWQpIHNucHJpbnRm KGZpbGVuYW1lLCBCVUZTSVosICIlcy8uZmFrZXRpbWVyYyIsIGdldGVudigiSE9NRSIpKTsKKyAg ICAgIGlmICgoZmFrZXRpbWVyYyA9IGZvcGVuKGN1c3RvbV9maWxlbmFtZSwgInJ0IikpICE9IE5V TEwgfHwKKyAgICAgICAgICAoZmFrZXRpbWVyYyA9IGZvcGVuKGZpbGVuYW1lLCAicnQiKSkgIT0g TlVMTCB8fAorICAgICAgICAgIChmYWtldGltZXJjID0gZm9wZW4oIi9ldGMvZmFrZXRpbWVyYyIs ICJydCIpKSAhPSBOVUxMKQorICAgICAgeworICAgICAgICBjaGFyIGxpbmVbQlVGRkVSTEVOXTsK KyAgICAgICAgd2hpbGUoZmdldHMobGluZSwgQlVGRkVSTEVOLCBmYWtldGltZXJjKSAhPSBOVUxM KQorICAgICAgICB7CisgICAgICAgICAgaWYgKChzdHJsZW4obGluZSkgPiAxKSAmJiAobGluZVsw XSAhPSAnICcpICYmCisgICAgICAgICAgICAgIChsaW5lWzBdICE9ICcjJykgJiYgKGxpbmVbMF0g IT0gJzsnKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICByZW1vdmVfdHJhaWxpbmdfZW9scyhs aW5lKTsKKyAgICAgICAgICAgIHN0cm5jcHkodXNlcl9mYWtlZF90aW1lLCBsaW5lLCBCVUZGRVJM RU4tMSk7CisgICAgICAgICAgICB1c2VyX2Zha2VkX3RpbWVbQlVGRkVSTEVOLTFdID0gMDsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmY2xvc2Uo ZmFrZXRpbWVyYyk7CisgICAgICB9CisgICAgfSAvKiByZWFkIGZha2UgdGltZSBmcm9tIGZpbGUg Ki8KKyAgICBwYXJzZV9mdF9zdHJpbmcodXNlcl9mYWtlZF90aW1lKTsKKyAgfSAvKiBjYWNoZSBo YWQgZXhwaXJlZCAqLworCisgIGlmIChpbmZpbGVfc2V0KQorICB7CisgICAgaWYgKGxvYWRfdGlt ZSh0cCkpCisgICAgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgLyogY2hlY2sg d2hldGhlciB0aGUgdXNlciBnYXZlIHVzIGFuIGFic29sdXRlIHRpbWUgdG8gZmFrZSAqLworICBz d2l0Y2ggKGZ0X21vZGUpCisgIHsKKyAgICBjYXNlIEZUX0ZSRUVaRTogIC8qIGEgc3BlY2lmaWVk IHRpbWUgKi8KKyAgICAgIGlmICh1c2VyX2Zha2VkX3RpbWVfc2V0KQorICAgICAgeworICAgICAg ICAqdHAgPSB1c2VyX2Zha2VkX3RpbWVfdGltZXNwZWM7CisgICAgICB9CisgICAgICBicmVhazsK KworICAgIGNhc2UgRlRfU1RBUlRfQVQ6IC8qIFVzZXItc3BlY2lmaWVkIG9mZnNldCAqLworICAg ICAgaWYgKHVzZXJfcGVyX3RpY2tfaW5jX3NldCkKKyAgICAgIHsKKyAgICAgICAgLyogaW5jcmVt ZW50IHRpbWUgd2l0aCBldmVyeSB0aW1lKCkgY2FsbCovCisgICAgICAgIG5leHRfdGltZSh0cCwg JnVzZXJfcGVyX3RpY2tfaW5jKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAg ICAgLyogU3BlZWQtdXAgLyBzbG93LWRvd24gY29udHJpYnV0ZWQgYnkgS2FybCBDaGVuIGluIHYw LjggKi8KKyAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRkaWZmLCB0aW1lYWRqOworICAgICAgICBz d2l0Y2ggKGNsa19pZCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgQ0xPQ0tfUkVBTFRJTUU6 CisjaWZkZWYgQ0xPQ0tfUkVBTFRJTUVfQ09BUlNFCisgICAgICAgICAgY2FzZSBDTE9DS19SRUFM VElNRV9DT0FSU0U6CisjZW5kaWYKKyAgICAgICAgICAgIHRpbWVzcGVjc3ViKHRwLCAmZnRwbF9z dGFydHRpbWUucmVhbCwgJnRkaWZmKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh c2UgQ0xPQ0tfTU9OT1RPTklDOgorI2lmZGVmIENMT0NLX01PTk9UT05JQ19DT0FSU0UKKyAgICAg ICAgICBjYXNlIENMT0NLX01PTk9UT05JQ19DT0FSU0U6CisjZW5kaWYKKyAgICAgICAgICAgIHRp bWVzcGVjc3ViKHRwLCAmZnRwbF9zdGFydHRpbWUubW9uLCAmdGRpZmYpOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSBDTE9DS19NT05PVE9OSUNfUkFXOgorICAgICAgICAgICAg dGltZXNwZWNzdWIodHAsICZmdHBsX3N0YXJ0dGltZS5tb25fcmF3LCAmdGRpZmYpOworICAgICAg ICAgICAgYnJlYWs7CisjaWZkZWYgQ0xPQ0tfQk9PVFRJTUUKKyAgICAgICAgICBjYXNlIENMT0NL X0JPT1RUSU1FOgorICAgICAgICAgICAgdGltZXNwZWNzdWIodHAsICZmdHBsX3N0YXJ0dGltZS5i b290LCAmdGRpZmYpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGNsb2NrX2lkIGZvciBjbG9ja19nZXR0 aW1lOiAlZCIsIGNsa19pZCk7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAg ICAgIH0gLy8gZW5kIG9mIHN3aXRjaCAoY2xrX2lkKQorICAgICAgICBpZiAodXNlcl9yYXRlX3Nl dCkKKyAgICAgICAgeworICAgICAgICAgIHRpbWVzcGVjbXVsKCZ0ZGlmZiwgdXNlcl9yYXRlLCAm dGltZWFkaik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg dGltZWFkaiA9IHRkaWZmOworICAgICAgICB9CisgICAgICAgIHRpbWVzcGVjYWRkKCZ1c2VyX2Zh a2VkX3RpbWVfdGltZXNwZWMsICZ0aW1lYWRqLCB0cCk7CisgICAgICB9CisgICAgICBicmVhazsK KworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gLTE7CisgIH0gLy8gZW5kIG9mIHN3aXRjaChm dF9tb2RlKQorCisjaWZkZWYgUFRIUkVBRF9TSU5HTEVUSFJFQURFRF9USU1FCisgIHB0aHJlYWRf Y2xlYW51cF9wb3AoMSk7CisjZW5kaWYKKyAgc2F2ZV90aW1lKHRwKTsKKyAgcmV0dXJuIDA7Cit9 CisKK2ludCBmYWtlX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCit7CisgIHN0cnVj dCB0aW1lc3BlYyB0czsKKyAgaW50IHJldDsKKyAgdHMudHZfc2VjID0gdHYtPnR2X3NlYzsKKyAg dHMudHZfbnNlYyA9IHR2LT50dl91c2VjICogMTAwMCAgKyBmdHBsX3N0YXJ0dGltZS5yZWFsLnR2 X25zZWMgJSAxMDAwOworCisgIHJldCA9IGZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElN RSwgJnRzKTsKKyAgdHYtPnR2X3NlYyA9IHRzLnR2X3NlYzsKKyAgdHYtPnR2X3VzZWMgPXRzLnR2 X25zZWMgLyAxMDAwOworCisgIHJldHVybiByZXQ7Cit9CisKKworLyoKKyAqICAgICAgPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKyAqICAgICAgRmFrZWQgc3lzdGVtIGZ1bmN0aW9uczogQXBwbGUgTWFjIE9TIFgg c3BlY2lmaWMgICAgICAgICAgID09PSBGQUtFKE9TWCkKKyAqICAgICAgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KyAqLworCisjaWZkZWYgX19BUFBMRU9TWF9fCisvKgorICogY2xvY2tfZ2V0dGltZSBpbXBsZW1l bnRhdGlvbiBmb3IgX19BUFBMRV9fCisgKiBAbm90ZSBJdCBhbHdheXMgYmVoYXZlIGxpa2UgYmVp bmcgY2FsbGVkIHdpdGggQ0xPQ0tfUkVBTFRJTUUuCisgKi8KK3N0YXRpYyBpbnQgYXBwbGVfY2xv Y2tfZ2V0dGltZShjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQoreworICBp bnQgcmVzdWx0OworICBtYWNoX3RpbWVzcGVjX3QgY3VyX3RpbWVjbG9ja2lkX3Q7CisgICh2b2lk KSBjbGtfaWQ7IC8qIHVudXNlZCAqLworCisgIGlmIChOVUxMID09IHJlYWxfY2xvY2tfZ2V0X3Rp bWUpCisgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCisjaWZkZWYgREVCVUcKKyAgICAodm9pZCkg ZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBwcm9ibGVtOiBvcmlnaW5hbCBjbG9ja19nZXRfdGlt ZSgpIG5vdCBmb3VuZC5cbiIpOworI2VuZGlmCisgICAgcmV0dXJuIC0xOyAvKiBwcm9wYWdhdGUg ZXJyb3IgdG8gY2FsbGVyICovCisgIH0KKworICBET05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJl YWxfY2xvY2tfZ2V0X3RpbWUpKGNsb2NrX3NlcnZfcmVhbCwgJmN1cl90aW1lY2xvY2tpZF90KSk7 CisgIHRwLT50dl9zZWMgPSAgY3VyX3RpbWVjbG9ja2lkX3QudHZfc2VjOworICB0cC0+dHZfbnNl YyA9IGN1cl90aW1lY2xvY2tpZF90LnR2X25zZWM7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2lu dCBjbG9ja19nZXRfdGltZShjbG9ja19zZXJ2X3QgY2xvY2tfc2VydiwgbWFjaF90aW1lc3BlY190 ICpjdXJfdGltZWNsb2NraWRfdCkKK3sKKyAgaW50IHJlc3VsdDsKKyAgc3RydWN0IHRpbWVzcGVj IHRzOworCisgIC8qCisgICAqIEluaXRpYWxpemUgb3VyIHJlc3VsdCB3aXRoIHRoZSByZWFsIGN1 cnJlbnQgdGltZSBmcm9tIENBTEVOREFSX0NMT0NLLgorICAgKiBUaGlzIGlzIGEgYml0IG9mIGNo ZWF0aW5nLCBidXQgd2UgZG9uJ3Qga2VlcCB0cmFjayBvZiBvYnRhaW5lZCBjbG9jaworICAgKiBz ZXJ2aWNlcy4KKyAgICovCisgIERPTlRfRkFLRV9USU1FKHJlc3VsdCA9ICgqcmVhbF9jbG9ja19n ZXR0aW1lKShDTE9DS19SRUFMVElNRSwgJnRzKSk7CisgIGlmIChyZXN1bHQgPT0gLTEpIHJldHVy biByZXN1bHQ7IC8qIG9yaWdpbmFsIGZ1bmN0aW9uIGZhaWxlZCAqLworCisgIC8qIHBhc3MgdGhl IHJlYWwgY3VycmVudCB0aW1lIHRvIG91ciBmYWtpbmcgdmVyc2lvbiwgb3ZlcndyaXRpbmcgaXQg Ki8KKyAgcmVzdWx0ID0gZmFrZV9jbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOwor ICBjdXJfdGltZWNsb2NraWRfdC0+dHZfc2VjID0gdHMudHZfc2VjOworICBjdXJfdGltZWNsb2Nr aWRfdC0+dHZfbnNlYyA9IHRzLnR2X25zZWM7CisKKyAgLyogcmV0dXJuIHRoZSByZXN1bHQgdG8g dGhlIGNhbGxlciAqLworICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKworLyoKKyAqICAg ICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKyAqICAgICAgRmFrZWQgc3lzdGVtLWludGVybmFsIGZ1bmN0aW9u cyAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBGQUtFKElOVCkKKyAqICAgICAgPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKyAqLworCisjaWZkZWYgRkFLRV9JTlRFUk5BTF9DQUxMUworaW50IF9fZ2V0dGlt ZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgdm9pZCAqdHopCit7CisgIGludCByZXN1bHQ7CisK KyAgLyogc2FuaXR5IGNoZWNrICovCisgIGlmICh0diA9PSBOVUxMKQorICB7CisgICAgcmV0dXJu IC0xOworICB9CisKKyAgLyogQ2hlY2sgd2hldGhlciB3ZSd2ZSBnb3QgYSBwb2ludGVyIHRvIHRo ZSByZWFsIGZ0aW1lKCkgZnVuY3Rpb24geWV0ICovCisgIGlmIChOVUxMID09IHJlYWxfX19nZXR0 aW1lb2ZkYXkpCisgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCisjaWZkZWYgREVCVUcKKyAgICAo dm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBwcm9ibGVtOiBvcmlnaW5hbCBfX2dldHRp bWVvZmRheSgpIG5vdCBmb3VuZC5cbiIpOworI2VuZGlmCisgICAgcmV0dXJuIC0xOyAvKiBwcm9w YWdhdGUgZXJyb3IgdG8gY2FsbGVyICovCisgIH0KKworICAvKiBpbml0aWFsaXplIG91ciByZXN1 bHQgd2l0aCB0aGUgcmVhbCBjdXJyZW50IHRpbWUgKi8KKyAgRE9OVF9GQUtFX1RJTUUocmVzdWx0 ID0gKCpyZWFsX19fZ2V0dGltZW9mZGF5KSh0diwgdHopKTsKKyAgaWYgKHJlc3VsdCA9PSAtMSkg cmV0dXJuIHJlc3VsdDsgLyogb3JpZ2luYWwgZnVuY3Rpb24gZmFpbGVkICovCisKKyAgLyogcGFz cyB0aGUgcmVhbCBjdXJyZW50IHRpbWUgdG8gb3VyIGZha2luZyB2ZXJzaW9uLCBvdmVyd3JpdGlu ZyBpdCAqLworICByZXN1bHQgPSBmYWtlX2dldHRpbWVvZmRheSh0dik7CisKKyAgLyogcmV0dXJu IHRoZSByZXN1bHQgdG8gdGhlIGNhbGxlciAqLworICByZXR1cm4gcmVzdWx0OworfQorCitpbnQg X19jbG9ja19nZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHApCit7 CisgIGludCByZXN1bHQ7CisKKyAgLyogc2FuaXR5IGNoZWNrICovCisgIGlmICh0cCA9PSBOVUxM KQorICB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYgKE5VTEwgPT0gcmVhbF9fX2Nsb2Nr X2dldHRpbWUpCisgIHsgIC8qIGRsc3ltKCkgZmFpbGVkICovCisjaWZkZWYgREVCVUcKKyAgICAo dm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGltZSBwcm9ibGVtOiBvcmlnaW5hbCBfX2Nsb2Nr X2dldHRpbWUoKSBub3QgZm91bmQuXG4iKTsKKyNlbmRpZgorICAgIHJldHVybiAtMTsgLyogcHJv cGFnYXRlIGVycm9yIHRvIGNhbGxlciAqLworICB9CisKKyAgLyogaW5pdGlhbGl6ZSBvdXIgcmVz dWx0IHdpdGggdGhlIHJlYWwgY3VycmVudCB0aW1lICovCisgIERPTlRfRkFLRV9USU1FKHJlc3Vs dCA9ICgqcmVhbF9fX2Nsb2NrX2dldHRpbWUpKGNsa19pZCwgdHApKTsKKyAgaWYgKHJlc3VsdCA9 PSAtMSkgcmV0dXJuIHJlc3VsdDsgLyogb3JpZ2luYWwgZnVuY3Rpb24gZmFpbGVkICovCisKKyAg LyogcGFzcyB0aGUgcmVhbCBjdXJyZW50IHRpbWUgdG8gb3VyIGZha2luZyB2ZXJzaW9uLCBvdmVy d3JpdGluZyBpdCAqLworICBpZiAoZmFrZV9tb25vdG9uaWNfY2xvY2sgfHwgY2xrX2lkICE9IENM T0NLX01PTk9UT05JQykKKyAgeworICAgIHJlc3VsdCA9IGZha2VfY2xvY2tfZ2V0dGltZShjbGtf aWQsIHRwKTsKKyAgfQorCisgIC8qIHJldHVybiB0aGUgcmVzdWx0IHRvIHRoZSBjYWxsZXIgKi8K KyAgcmV0dXJuIHJlc3VsdDsKK30KKwordGltZV90IF9fdGltZSh0aW1lX3QgKnRpbWVfdHB0cikK K3sKKyAgc3RydWN0IHRpbWVzcGVjIHRwOworICB0aW1lX3QgcmVzdWx0OworCisgIERPTlRfRkFL RV9USU1FKHJlc3VsdCA9ICgqcmVhbF9jbG9ja19nZXR0aW1lKShDTE9DS19SRUFMVElNRSwgJnRw KSk7CisgIGlmIChyZXN1bHQgPT0gLTEpIHJldHVybiAtMTsKKworICAvKiBwYXNzIHRoZSByZWFs IGN1cnJlbnQgdGltZSB0byBvdXIgZmFraW5nIHZlcnNpb24sIG92ZXJ3cml0aW5nIGl0ICovCisg ICh2b2lkKWZha2VfY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRwKTsKKworICBpZiAo dGltZV90cHRyICE9IE5VTEwpCisgIHsKKyAgICAqdGltZV90cHRyID0gdHAudHZfc2VjOworICB9 CisgIHJldHVybiB0cC50dl9zZWM7Cit9CisKK2ludCBfX2Z0aW1lKHN0cnVjdCB0aW1lYiAqdGIp Cit7CisgIHN0cnVjdCB0aW1lc3BlYyB0cDsKKyAgaW50IHJlc3VsdDsKKworICAvKiBzYW5pdHkg Y2hlY2sgKi8KKyAgaWYgKHRiID09IE5VTEwpCisgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAg LyogZnRpbWUoKSBhbHdheXMgcmV0dXJucyAwLCBzZWUgbWFucGFnZSAqLworCisgIC8qIENoZWNr IHdoZXRoZXIgd2UndmUgZ290IGEgcG9pbnRlciB0byB0aGUgcmVhbCBmdGltZSgpIGZ1bmN0aW9u IHlldCAqLworICBpZiAoTlVMTCA9PSByZWFsX19fZnRpbWUpCisgIHsgIC8qIGRsc3ltKCkgZmFp bGVkICovCisjaWZkZWYgREVCVUcKKyAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJmYWtldGlt ZSBwcm9ibGVtOiBvcmlnaW5hbCBmdGltZSgpIG5vdCBmb3VuZC5cbiIpOworI2VuZGlmCisgICAg cmV0dXJuIDA7IC8qIHByb3BhZ2F0ZSBlcnJvciB0byBjYWxsZXIgKi8KKyAgfQorCisgIC8qIGlu aXRpYWxpemUgb3VyIFRaIHJlc3VsdCB3aXRoIHRoZSByZWFsIGN1cnJlbnQgdGltZSAqLworICBE T05UX0ZBS0VfVElNRShyZXN1bHQgPSAoKnJlYWxfX19mdGltZSkodGIpKTsKKyAgaWYgKHJlc3Vs dCA9PSAtMSkKKyAgeworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBET05UX0ZBS0VfVElN RShyZXN1bHQgPSAoKnJlYWxfY2xvY2tfZ2V0dGltZSkoQ0xPQ0tfUkVBTFRJTUUsICZ0cCkpOwor ICBpZiAocmVzdWx0ID09IC0xKSByZXR1cm4gLTE7CisKKyAgLyogcGFzcyB0aGUgcmVhbCBjdXJy ZW50IHRpbWUgdG8gb3VyIGZha2luZyB2ZXJzaW9uLCBvdmVyd3JpdGluZyBpdCAqLworICAodm9p ZClmYWtlX2Nsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cCk7CisKKyAgdGItPnRpbWUg PSB0cC50dl9zZWM7CisgIHRiLT5taWxsaXRtID0gdHAudHZfbnNlYyAvIDEwMDAwMDA7CisKKyAg LyogcmV0dXJuIHRoZSByZXN1bHQgdG8gdGhlIGNhbGxlciAqLworICByZXR1cm4gcmVzdWx0OyAv KiB3aWxsIGFsd2F5cyBiZSAwIChzZWUgbWFucGFnZSkgKi8KK30KKworI2VuZGlmCisKKy8qCisg KiBFZGl0b3IgbW9kZWxpbmVzCisgKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1v ZmZzZXQ6IDIKKyAqIHRhYi13aWR0aDogMgorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBF bmQ6CisgKgorICogdmk6IHNldCBzaGlmdHdpZHRoPTIgdGFic3RvcD0yIGV4cGFuZHRhYjoKKyAq IDppbmRlbnRTaXplPTI6dGFiU2l6ZT0yOm5vVGFicz10cnVlOgorICovCisKKy8qIGVvZiAqLwpk aWZmIC0tZ2l0IGEvc2NyaXB0cy9saWJmYWtldGltZS9saWJmYWtldGltZS5tYXAgYi9zY3JpcHRz L2xpYmZha2V0aW1lL2xpYmZha2V0aW1lLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi42ZTAwOGNmCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWJmYWtldGltZS9s aWJmYWtldGltZS5tYXAKQEAgLTAsMCArMSwxMCBAQAorR0xJQkNfMi4yIHsKKyAgZ2xvYmFsOgor CisgIHRpbWVyX2dldHRpbWU7IHRpbWVyX3NldHRpbWU7CisgIGxvY2FsOiB0aW1lcl9zZXR0aW1l Xyo7IHRpbWVyX2dldHRpbWVfKjsKK307CitHTElCQ18yLjMuMyB7CisgICMgQ2hhbmdlZCB0aW1l cl90LgorICB0aW1lcl9nZXR0aW1lOyB0aW1lcl9zZXR0aW1lOworfSBHTElCQ18yLjI7CmRpZmYg LS1naXQgYS9zY3JpcHRzL2xpYmZha2V0aW1lL3RpbWVfb3BzLmggYi9zY3JpcHRzL2xpYmZha2V0 aW1lL3RpbWVfb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhYjFl ZQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliZmFrZXRpbWUvdGltZV9vcHMuaApAQCAt MCwwICsxLDEwNCBAQAorLyoKKyAqIFRpbWUgb3BlcmF0aW9uIG1hY3JvcyBiYXNlZCBvbiBzeXMv dGltZS5oCisgKiBDb3B5cmlnaHQgMjAxMyBCYWxpbnQgUmVjemV5IDxiYWxpbnRAYmFsaW50cmVj emV5Lmh1PgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmZha2V0aW1lLgorICoKKyAq IGxpYmZha2V0aW1lIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdjIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorICoKKyAqIGxpYmZha2V0aW1lIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MiBhbG9u ZworICogd2l0aCBsaWJmYWtldGltZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rv biwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgVElNRV9PUFNfSAorI2RlZmlu ZSBUSU1FX09QU19ICisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVmaW5lIFNFQ19UT191U0VDIDEw MDAwMDAKKyNkZWZpbmUgU0VDX1RPX25TRUMgMTAwMDAwMDAwMAorCisvKiBDb252ZW5pZW5jZSBt YWNyb3MgZm9yIG9wZXJhdGlvbnMgb24gdGltZXZhbHMuCisgICBOT1RFOiBgdGltZXJjbXAnIGRv ZXMgbm90IHdvcmsgZm9yID49IG9yIDw9LiAgKi8KKyNkZWZpbmUgdGltZXJpc3NldDIodHZwLCBw cmVmaXgpICgodHZwKS0+dHZfc2VjIHx8ICh0dnApLT50dl8jI3ByZWZpeCMjc2VjKQorI2RlZmlu ZSB0aW1lcmNsZWFyMih0dnAsIHByZWZpeCkgKCh0dnApLT50dl9zZWMgPSAodHZwKS0+dHZfIyNw cmVmaXgjI3NlYyA9IDApCisjZGVmaW5lIHRpbWVyY21wMihhLCBiLCBDTVAsIHByZWZpeCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoYSktPnR2X3NlYyA9PSAoYiktPnR2 X3NlYykgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKChhKS0+dHZf IyNwcmVmaXgjI3NlYyBDTVAgKGIpLT50dl8jI3ByZWZpeCMjc2VjKSA6ICAgICAgICAgICAgICBc CisgICAoKGEpLT50dl9zZWMgQ01QIChiKS0+dHZfc2VjKSkKKyNkZWZpbmUgdGltZXJhZGQyKGEs IGIsIHJlc3VsdCwgcHJlZml4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAocmVzdWx0KS0+dHZfc2VjID0gKGEpLT50dl9zZWMg KyAoYiktPnR2X3NlYzsgICAgICAgICAgICAgICAgICAgXAorICAgIChyZXN1bHQpLT50dl8jI3By ZWZpeCMjc2VjID0gKGEpLT50dl8jI3ByZWZpeCMjc2VjICsgICAgICAgICAgICBcCisgICAgICAo YiktPnR2XyMjcHJlZml4IyNzZWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICBpZiAoKHJlc3VsdCktPnR2XyMjcHJlZml4IyNzZWMgPj0gU0VDX1RPXyMjcHJl Zml4IyNTRUMpICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICsrKHJlc3VsdCktPnR2 X3NlYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg KHJlc3VsdCktPnR2XyMjcHJlZml4IyNzZWMgLT0gU0VDX1RPXyMjcHJlZml4IyNTRUM7ICAgICAg ICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIHRpbWVyc3ViMihhLCBi LCByZXN1bHQsIHByZWZpeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgKHJlc3VsdCktPnR2X3NlYyA9IChhKS0+dHZfc2VjIC0g KGIpLT50dl9zZWM7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAocmVzdWx0KS0+dHZfIyNwcmVm aXgjI3NlYyA9IChhKS0+dHZfIyNwcmVmaXgjI3NlYyAtICAgICAgICAgICAgXAorICAgICAgKGIp LT50dl8jI3ByZWZpeCMjc2VjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgaWYgKChyZXN1bHQpLT50dl8jI3ByZWZpeCMjc2VjIDwgMCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLS0ocmVzdWx0KS0+dHZfc2Vj OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAocmVz dWx0KS0+dHZfIyNwcmVmaXgjI3NlYyArPSBTRUNfVE9fIyNwcmVmaXgjI1NFQzsgICAgICAgICAg IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2RlZmluZSB0aW1lcm11bDIodHZwLCBj LCByZXN1bHQsIHByZWZpeCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIGxvbmcgbG9uZyB0bXBfdGltZTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdG1wX3RpbWUgPSAoYykgKiAoKHR2 cCktPnR2X3NlYyAqIFNFQ19UT18jI3ByZWZpeCMjU0VDICsgICAgICAgIFwKKyAgICAgICAgICAg ICAgICh0dnApLT50dl8jI3ByZWZpeCMjc2VjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIChyZXN1bHQpLT50dl8jI3ByZWZpeCMjc2VjID0gdG1wX3RpbWUgJSBTRUNfVE9fIyNw cmVmaXgjI1NFQzsgICBcCisgICAgKHJlc3VsdCktPnR2X3NlYyA9ICh0bXBfdGltZSAtIChyZXN1 bHQpLT50dl8jI3ByZWZpeCMjc2VjKSAvICAgIFwKKyAgICAgIFNFQ19UT18jI3ByZWZpeCMjU0VD OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgocmVz dWx0KS0+dHZfIyNwcmVmaXgjI3NlYyA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgIChyZXN1bHQpLT50dl8jI3ByZWZpeCMjc2VjICs9ICBTRUNf VE9fIyNwcmVmaXgjI1NFQzsgICAgICAgICAgXAorICAgICAgKHJlc3VsdCktPnR2X3NlYyAtPSAx OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgfSB3aGlsZSAoMCkKKworLyogb3BzIGZvciBtaWNyb3NlY3MgKi8KKyNpZm5kZWYgdGltZXJp c3NldAorI2RlZmluZSB0aW1lcmlzc2V0KHR2cCkgdGltZXJpc3NldDIodHZwLHUpCisjZW5kaWYK KyNpZm5kZWYgdGltZXJjbGVhcgorI2RlZmluZSB0aW1lcmNsZWFyKHR2cCkgdGltZXJjbGVhcjIo dHZwLCB1KQorI2VuZGlmCisjaWZuZGVmIHRpbWVyY21wCisjZGVmaW5lIHRpbWVyY21wKGEsIGIs IENNUCkgdGltZXJjbXAyKGEsIGIsIENNUCwgdSkKKyNlbmRpZgorI2lmbmRlZiB0aW1lcmFkZAor I2RlZmluZSB0aW1lcmFkZChhLCBiLCByZXN1bHQpIHRpbWVyYWRkMihhLCBiLCByZXN1bHQsIHUp CisjZW5kaWYKKyNpZm5kZWYgdGltZXJzdWIKKyNkZWZpbmUgdGltZXJzdWIoYSwgYiwgcmVzdWx0 KSB0aW1lcnN1YjIoYSwgYiwgcmVzdWx0LCB1KQorI2VuZGlmCisjaWZuZGVmIHRpbWVyc3ViCisj ZGVmaW5lIHRpbWVybXVsKGEsIGMsIHJlc3VsdCkgdGltZXJtdWwyKGEsIGMsIHJlc3VsdCwgdSkK KyNlbmRpZgorCisvKiBvcHMgZm9yIG5hbm9zZWNzICovCisjZGVmaW5lIHRpbWVzcGVjaXNzZXQo dHZwKSB0aW1lcmlzc2V0Mih0dnAsbikKKyNkZWZpbmUgdGltZXNwZWNjbGVhcih0dnApIHRpbWVy Y2xlYXIyKHR2cCwgbikKKyNkZWZpbmUgdGltZXNwZWNjbXAoYSwgYiwgQ01QKSB0aW1lcmNtcDIo YSwgYiwgQ01QLCBuKQorI2RlZmluZSB0aW1lc3BlY2FkZChhLCBiLCByZXN1bHQpIHRpbWVyYWRk MihhLCBiLCByZXN1bHQsIG4pCisjZGVmaW5lIHRpbWVzcGVjc3ViKGEsIGIsIHJlc3VsdCkgdGlt ZXJzdWIyKGEsIGIsIHJlc3VsdCwgbikKKyNkZWZpbmUgdGltZXNwZWNtdWwoYSwgYywgcmVzdWx0 KSB0aW1lcm11bDIoYSwgYywgcmVzdWx0LCBuKQorCisjZW5kaWYKLS0gCjEuOS4xCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcHR4ZGlzdCBtYWlsaW5n IGxpc3QKcHR4ZGlzdEBwZW5ndXRyb25peC5kZQ==