From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/5692 Path: news.gmane.org!not-for-mail From: Jens Gustedt Newsgroups: gmane.linux.lib.musl.general Subject: working C11 thread implementation Date: Fri, 01 Aug 2014 11:55:31 +0200 Message-ID: <1406886931.4830.92.camel@eris.loria.fr> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-cHzuOE57hzipAoj/i6GN" X-Trace: ger.gmane.org 1406886955 19515 80.91.229.3 (1 Aug 2014 09:55:55 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 1 Aug 2014 09:55:55 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-5697-gllmg-musl=m.gmane.org@lists.openwall.com Fri Aug 01 11:55:50 2014 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1XD9Yu-0007Xr-NG for gllmg-musl@plane.gmane.org; Fri, 01 Aug 2014 11:55:45 +0200 Original-Received: (qmail 11911 invoked by uid 550); 1 Aug 2014 09:55:42 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 11903 invoked from network); 1 Aug 2014 09:55:41 -0000 X-IronPort-AV: E=Sophos;i="5.01,778,1400018400"; d="scan'";a="87877419" Face: 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 X-Mailer: Evolution 3.4.4-3 Xref: news.gmane.org gmane.linux.lib.musl.general:5692 Archived-At: --=-cHzuOE57hzipAoj/i6GN Content-Type: multipart/mixed; boundary="=-GroVBd67FtqiMeB+WCq6" --=-GroVBd67FtqiMeB+WCq6 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable Hi everybody, for anybody interested I attach a first working version, that is mildly tested with a relatively big private application that I have and that uses C11 threads quite intensively. This implementation is still marked experimental, since it makes some choices for which we don't know yet if they are final and which impact binary compatibility. We discussed several choices with Rich, and the result is a solution that should only marginally affect existing code. This "marginally" is - many pthread interfaces now are weak aliases to static functions to avoid name space pollution of the C thread implementation. This adds some noise to the symbol table of unstripped executables. (but those where this is crucial do strip their executables anyhow, don't they ?) - pthread_create.o has two additional small wrapper functions that augment its size by some byte - pthread_create (now __pthread_create) has some instructions more that do the selection between the POSIX and C calling conventions the name space of pthread applications shouldn't be polluted. This principal choice was guided by the idea to reuse maybe 90% or more of existing code from pthreads, to minimize the risk of introducing bugs and to ease maintenance. The choices that affect the ABI that I mentioned are values of some constants and the sizes of the types that are introduced. These may change depending on glibc's choices and also according to future developments. For the choices of the constants, for this version they are such that most wrapper calls result in being tail calls. I verified this by looking into the assembler that is produced. As they are now, most of these tail functions could also be just provided as weak aliases. We chose to implement them as functions such that in case of change of the constants we only have to recompile and no other maintenance is required. For the types, this just uses the pthread types for the moment, nothing fancy. In the near future I will look into replacing some by new implementations, to take advantage of the looser requirements for C threads (no process shared control structures, no robust mutexes, no cancelation). The choices here will also depend on the restrictions that POSIX will impose on compatibility between the two thread models, in particular if some C thread functions will be considered cancelation points for pthread. The idea of all of this is that C threads should give way to a very compact and comprehensive thread implementation. In this sense I think for many users of musl this could be a valid alternative to pthreads. Also one should have in mind that C11 allows the use of its threads by the library itself, as long as it follows the as-if rule. So a C library could provide a parallel implementation of qsort or similar compute intensive functions. Jens -- :: INRIA Nancy Grand Est ::: AlGorille ::: ICube/ICPS ::: :: ::::::::::::::: office Strasbourg : +33 368854536 :: :: :::::::::::::::::::::: gsm France : +33 651400183 :: :: ::::::::::::::: gsm international : +49 15737185122 :: :: http://icube-icps.unistra.fr/index.php/Jens_Gustedt :: --=-GroVBd67FtqiMeB+WCq6 Content-Disposition: attachment; filename="thrd11.patch" Content-Type: text/x-patch; name="thrd11.patch"; charset="ISO-8859-1" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWxsdHlwZXMuaC5pbiBiL2luY2x1ZGUvYWxsdHlwZXMuaC5p bg0KaW5kZXggODQ3OGZiNC4uNGNkMmNiMSAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvYWxsdHlwZXMu aC5pbg0KKysrIGIvaW5jbHVkZS9hbGx0eXBlcy5oLmluDQpAQCAtNTgsNiArNTgsMTAgQEAgVFlQ RURFRiBzdHJ1Y3QgeyB1bnNpZ25lZCBfX2F0dHI7IH0gcHRocmVhZF9tdXRleGF0dHJfdDsNCiBU WVBFREVGIHN0cnVjdCB7IHVuc2lnbmVkIF9fYXR0cjsgfSBwdGhyZWFkX2NvbmRhdHRyX3Q7DQog VFlQRURFRiBzdHJ1Y3QgeyB1bnNpZ25lZCBfX2F0dHI7IH0gcHRocmVhZF9iYXJyaWVyYXR0cl90 Ow0KIFRZUEVERUYgc3RydWN0IHsgdW5zaWduZWQgX19hdHRyWzJdOyB9IHB0aHJlYWRfcndsb2Nr YXR0cl90Ow0KK1RZUEVERUYgcHRocmVhZF9jb25kX3QgY25kX3Q7DQorVFlQRURFRiBwdGhyZWFk X211dGV4X3QgbXR4X3Q7DQorDQorDQogDQogVFlQRURFRiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsN CiANCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RocmVhZHMuaCBiL2luY2x1ZGUvdGhyZWFkcy5oDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZTEzMTc4MQ0KLS0tIC9kZXYvbnVs bA0KKysrIGIvaW5jbHVkZS90aHJlYWRzLmgNCkBAIC0wLDAgKzEsMTY5IEBADQorI2lmbmRlZiBf VEhSRUFEU19IDQorI2RlZmluZSBfVEhSRUFEU19IDQorDQorLyogVGhpcyBvbmUgaXMgZXhwbGlj aXRseSBhbGxvd2VkIHRvIGJlIGluY2x1ZGVkLiAqLw0KKyNpbmNsdWRlIDx0aW1lLmg+DQorDQor DQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2RlZmlu ZSBfX05FRURfY25kX3QNCisjZGVmaW5lIF9fTkVFRF9tdHhfdA0KKy8qIFVudGlsIHdlIGNvbWUg dXAgd2l0aCBhIGJldHRlciBuYW1pbmcgc2NoZW1lLCB3ZSBuZWVkIHRvIGV4cG9zZQ0KKyAgIHNv bWUgcHRocmVhZCB0eXBlcy4gKi8NCisjZGVmaW5lIF9fTkVFRF9wdGhyZWFkX2NvbmRfdA0KKyNk ZWZpbmUgX19ORUVEX3B0aHJlYWRfbXV0ZXhfdA0KKyNkZWZpbmUgX19ORUVEX3B0aHJlYWRfb25j ZV90DQorI2RlZmluZSBfX05FRURfcHRocmVhZF90DQorI2RlZmluZSBfX05FRURfcHRocmVhZF9r ZXlfdA0KKw0KKyNpbmNsdWRlIDxiaXRzL2FsbHR5cGVzLmg+DQorI2luY2x1ZGUgPGJpdHMvZXJy bm8uaD4NCisNCit0eXBlZGVmIHB0aHJlYWRfb25jZV90IG9uY2VfZmxhZzsNCit0eXBlZGVmIHB0 aHJlYWRfdCB0aHJkX3Q7DQordHlwZWRlZiBwdGhyZWFkX2tleV90IHRzc190Ow0KK3R5cGVkZWYg aW50ICgqdGhyZF9zdGFydF90KSh2b2lkKik7DQordHlwZWRlZiB2b2lkICgqdHNzX2R0b3JfdCko dm9pZCopOw0KKw0KKw0KKyNpZm5kZWYgX19USFJEX0VYUEVSSU1FTlRBTA0KKyMgZGVmaW5lIF9f VEhSRF9FWFBFUklNRU5UQUwgMQ0KKyNlbmRpZg0KKw0KKyAgLyogVGhlIGZvbGxvd2luZyBsaXN0 IG9mIDkgaW50ZWdlciBjb25zdGFudHMgbWFrZXMgdXAgZm9yIHRoZSBiaW5hcnkNCisgICAgIGNv bXBhdGliaWxpdHkgb2YgdGhpcyBDIHRocmVhZCBpbXBsZW1lbnRhdGlvbi4gWW91IG11c3QgbmV2 ZXINCisgICAgIGxpbmsgY29kZSBhZ2FpbnN0IHZlcnNpb25zIG9mIHRoZSBDIGxpYnJhcnkgdGhh dCBkbyBub3QgYWdyZWUNCisgICAgIHVwb24gdGhlc2UgQUJJIHBhcmFtZXRlcnMuDQorDQorICAg ICBBZGRpdGlvbmFsbHkgdGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIDUgdHlw ZXMgaGF2ZQ0KKyAgICAgdGhlIHNhbWUgc2l6ZSBhY3Jvc3MgQyBsaWJyYXJpZXMgYW5kIHRoYXQg dGhlc2UgdHlwZXMgY2FuIGJlDQorICAgICBpbml0aWFsaXplZCBieSB0aGUgZGVmYXVsdCBpbml0 aWFsaXplci4NCisNCisgICAgIFRoZSB2YWx1ZXMgZm9yIHRoZSA5IHBhcmFtZXRlcnMgYXJlIG5v dCBmaXhlZCBmb3Igbm93LiBEZXBlbmRpbmcNCisgICAgIG9uIHRoZSBjaG9pY2VzIG9mIG90aGVy IGltcGxlbWVudGF0aW9ucyBhbmQgdGhlIGV2b2x1dGlvbiBvZiB0aGUNCisgICAgIEMgc3RhbmRh cmQgdGhleSBtYXkgc3RpbGwgY2hhbmdlLiBUaGlzIHNob3VsZCBoYXBwZW4gcmFyZWx5LCBidXQN CisgICAgIHlvdSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBDIHRocmVhZCBmZWF0dXJlIHRvIGJlIGV4 cGVyaW1lbnRhbA0KKyAgICAgdW50aWwgdGhlbiwgYW5kIGJlIHByZXBhcmVkIHRvIHJlY29tcGls ZSB5b3VyIGJpbmFyeSB3aGVuIGxpbmtpbmcNCisgICAgIGFnYWluc3QgYSBkaWZmZXJlbnQgaW1w bGVtZW50YXRpb24gb3IgYSBuZXcgdmVyc2lvbi4NCisNCisgICAgIFRoZSBtYWNybyBfX1RIUkRf RVhQRVJJTUVOVEFMIHdpbGwgYmUgZGVmaW5lZCBhcyBsb25nIGFzIHdlDQorICAgICBjb25zaWRl ciB0aGlzIEFCSSB0byBiZSB1bnN0YWJsZS4gVGhpcyBjb21lcyB3aXRoIHNvbWUgbGluayB0aW1l DQorICAgICBjaGVja3MgYW5kIGFuIG92ZXJoZWFkIG9mIHNvbWUgYnl0ZXMuIEF0IHlvdXIgb3du IHJpc2sgeW91IG1heQ0KKyAgICAgc3dpdGNoIHRoaXMgY2hlY2sgb2ZmIGJ5IGRlZmluaW5nIF9f VEhSRF9FWFBFUklNRU5UQUwgbWFjcm8gdG8NCisgICAgIDAuICovDQorDQorI2RlZmluZSBfX1RI UkRfU1VDQ0VTUyAgICAgIDANCisjZGVmaW5lIF9fVEhSRF9CVVNZICAgICAgICAgRUJVU1kNCisj ZGVmaW5lIF9fVEhSRF9FUlJPUiAgICAgICAgRUlOVkFMDQorI2RlZmluZSBfX1RIUkRfTk9NRU0g ICAgICAgIEVOT01FTQ0KKyNkZWZpbmUgX19USFJEX1RJTUVET1VUICAgICBFVElNRURPVVQNCisj ZGVmaW5lIF9fTVRYX1BMQUlOICAgICAgICAgMA0KKyNkZWZpbmUgX19NVFhfUkVDVVJTSVZFICAg ICAxDQorI2RlZmluZSBfX01UWF9USU1FRCAgICAgICAgIDINCisjZGVmaW5lIFRTU19EVE9SX0lU RVJBVElPTlMgNA0KKw0KKyNkZWZpbmUgX19USFJEX0NPTkNBVDEwXyhfMCwgXzEsIF8yLCBfMywg XzQsIF81LCBfNiwgXzcsIF84LCBfOSkgICAgICAgICBcDQorXzAgIyMgXyAjIyBfMSAjIyBfICMj IF8yICMjIF8gIyMgXzMgIyMgXyAjIyBfNCAjIyBfICMjIF81ICMjIF8gIyMgXzYgIyMgXyAjIyBf NyAjIyBfICMjIF84ICMjIF8gIyMgXzkNCisNCisjZGVmaW5lIF9fVEhSRF9DT05DQVQxMChfMCwg XzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84LCBfOSkgXA0KKyAgX19USFJEX0NPTkNBVDEw XyhfMCwgXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84LCBfOSkNCisNCisNCisjZGVmaW5l IF9fVEhSRF9BQkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorX19USFJEX0NPTkNB VDEwKF9fdGhyZF9hYmksICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICBf X1RIUkRfU1VDQ0VTUywgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgX19USFJE X0JVU1ksICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgIF9fVEhSRF9FUlJP UiwgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICBfX1RIUkRfTk9NRU0sICAg ICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgX19USFJEX1RJTUVET1VULCAgICAg ICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgIF9fTVRYX1BMQUlOLCAgICAgICAgICAgICAg ICAgICAgXA0KKyAgICAgICAgICAgICAgICBfX01UWF9SRUNVUlNJVkUsICAgICAgICAgICAgICAg IFwNCisgICAgICAgICAgICAgICAgX19NVFhfVElNRUQsICAgICAgICAgICAgICAgICAgICBcDQor ICAgICAgICAgICAgICAgIFRTU19EVE9SX0lURVJBVElPTlMgICAgICAgICAgICAgXA0KKyAgICAg ICAgICAgICAgICApDQorDQorI2RlZmluZSBfX1RIUkRfU0hGVChYLCBZKSAoKChYKSA8PCAzKSBe IChZKSkNCisNCitlbnVtIHsNCisgIF9fdGhyZF9hYmkgPQ0KKyAgX19USFJEX1NIRlQoc2l6ZW9m KGNuZF90KSwNCisgICAgICAgICAgICAgIF9fVEhSRF9TSEZUKHNpemVvZihtdHhfdCksDQorICAg ICAgICAgICAgICAgICAgICAgICAgICBfX1RIUkRfU0hGVChzaXplb2Yob25jZV9mbGFnKSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVEhSRF9TSEZUKHNpemVvZih0 aHJkX3QpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mKHRzc190KSkpKSksDQorfTsNCisNCitleHRlcm4gdW5zaWduZWQgY29uc3QgX19U SFJEX0FCSTsNCisNCisjZGVmaW5lIF9fVEhSRF9BQklfQ0hFQ0sgKDEvKF9fVEhSRF9BQkkgPT0g X190aHJkX2FiaSkpDQorDQorI2lmIF9fVEhSRF9FWFBFUklNRU5UQUwNCisjIGRlZmluZSBfX1RI UkRfQUJJX01BUksgX19hdHRyaWJ1dGVfXygodXNlZCkpIHN0YXRpYyB1bnNpZ25lZCBjb25zdCpj b25zdCBfX3RocmRfYWJpX21hcmsgPSAmX19USFJEX0FCSQ0KKyNlbHNlDQorIyBkZWZpbmUgX19U SFJEX0FCSV9NQVJLIHR5cGVkZWYgdW5zaWduZWQgX190aHJkX2FiaV9kdW1teV90eXBlDQorI2Vu ZGlmDQorDQorZW51bSB7DQorICB0aHJkX3N1Y2Nlc3MgPSBfX1RIUkRfU1VDQ0VTUywNCisgIHRo cmRfYnVzeSA9IF9fVEhSRF9CVVNZLA0KKyAgdGhyZF9lcnJvciA9IF9fVEhSRF9FUlJPUiwNCisg IHRocmRfbm9tZW0gPSBfX1RIUkRfTk9NRU0sDQorICB0aHJkX3RpbWVkb3V0ID0gX19USFJEX1RJ TUVET1VULA0KK307DQorDQorZW51bSB7DQorICBtdHhfcGxhaW4gPSBfX01UWF9QTEFJTiwNCisg IG10eF9yZWN1cnNpdmUgPSBfX01UWF9SRUNVUlNJVkUsDQorICAvLyBhbGwgbXV0ZXhlcyBhcmUg dGltZWQsIGhlcmUuIHNvIHRoaXMgaXMgYSBuby1vcA0KKyAgbXR4X3RpbWVkID0gX19NVFhfVElN RUQsDQorfTsNCisNCisjZGVmaW5lIE9OQ0VfRkxBR19JTklUIHsgMCB9DQorI2RlZmluZSB0aHJl YWRfbG9jYWwgX1RocmVhZF9sb2NhbA0KKw0KK2ludCB0aHJkX2NyZWF0ZSh0aHJkX3QgKiwgdGhy ZF9zdGFydF90LCB2b2lkICopOw0KK19Ob3JldHVybiB2b2lkIHRocmRfZXhpdChpbnQpOw0KKw0K K2ludCB0aHJkX2RldGFjaCh0aHJkX3QpOw0KK2ludCB0aHJkX2pvaW4odGhyZF90LCBpbnQgKik7 DQorDQoraW50IHRocmRfc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1l c3BlYyAqKTsNCit2b2lkIHRocmRfeWllbGQodm9pZCk7DQorDQordGhyZF90IHRocmRfY3VycmVu dCh2b2lkKTsNCitpbnQgdGhyZF9lcXVhbCh0aHJkX3QsIHRocmRfdCk7DQorI2RlZmluZSB0aHJk X2VxdWFsKEEsIEIpICgoQSkgPT0gKEIpKQ0KKw0KK3ZvaWQgY2FsbF9vbmNlKG9uY2VfZmxhZyAq LCB2b2lkICgqKSh2b2lkKSk7DQorDQoraW50IG10eF9pbml0KG10eF90ICosIGludCk7DQordm9p ZCBtdHhfZGVzdHJveShtdHhfdCAqKTsNCisNCitpbnQgbXR4X2xvY2sobXR4X3QgKik7DQoraW50 IG10eF90aW1lZGxvY2sobXR4X3QgKnJlc3RyaWN0LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJl c3RyaWN0KTsNCitpbnQgbXR4X3RyeWxvY2sobXR4X3QgKik7DQoraW50IG10eF91bmxvY2sobXR4 X3QgKik7DQorDQoraW50IGNuZF9pbml0KGNuZF90ICopOw0KK3ZvaWQgY25kX2Rlc3Ryb3koY25k X3QgKik7DQorDQoraW50IGNuZF9icm9hZGNhc3QoY25kX3QgKik7DQoraW50IGNuZF9zaWduYWwo Y25kX3QgKik7DQorDQoraW50IGNuZF90aW1lZHdhaXQoY25kX3QgKnJlc3RyaWN0LCBtdHhfdCAq cmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVzdHJpY3QpOw0KK2ludCBjbmRfd2Fp dChjbmRfdCAqLCBtdHhfdCAqKTsNCisNCitpbnQgdHNzX2NyZWF0ZSh0c3NfdCAqLCB0c3NfZHRv cl90KTsNCit2b2lkIHRzc19kZWxldGUodHNzX3Qga2V5KTsNCisNCitpbnQgdHNzX3NldCh0c3Nf dCwgdm9pZCAqKTsNCit2b2lkICp0c3NfZ2V0KHRzc190KTsNCisNCisjaWZkZWYgX19jcGx1c3Bs dXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvc3JjL3NjaGVkL3RocmRf eWllbGQuYyBiL3NyYy9zY2hlZC90aHJkX3lpZWxkLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwLi4zMDFlOTUzDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvc2NoZWQvdGhy ZF95aWVsZC5jDQpAQCAtMCwwICsxLDcgQEANCisjaW5jbHVkZSA8c2NoZWQuaD4NCisjaW5jbHVk ZSAic3lzY2FsbC5oIg0KKw0KK3ZvaWQgdGhyZF95aWVsZCgpDQorew0KKyAgICAgICAgICh2b2lk KXN5c2NhbGwoU1lTX3NjaGVkX3lpZWxkKTsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9f X3RocmRfYWJpLmMgYi9zcmMvdGhyZWFkL19fdGhyZF9hYmkuYw0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAuLmU1Njc0ZTYNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJl YWQvX190aHJkX2FiaS5jDQpAQCAtMCwwICsxLDMgQEANCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0K Kw0KK3Vuc2lnbmVkIGNvbnN0IF9fVEhSRF9BQkkgPSAgX190aHJkX2FiaTsNCmRpZmYgLS1naXQg YS9zcmMvdGhyZWFkL19fdGltZWR3YWl0LmMgYi9zcmMvdGhyZWFkL19fdGltZWR3YWl0LmMNCmlu ZGV4IDMwMjI3M2EuLjE2ODAwN2EgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL19fdGltZWR3YWl0 LmMNCisrKyBiL3NyYy90aHJlYWQvX190aW1lZHdhaXQuYw0KQEAgLTQsNiArNCw4IEBADQogI2lu Y2x1ZGUgImZ1dGV4LmgiDQogI2luY2x1ZGUgInN5c2NhbGwuaCINCiANCitpbnQgX19wdGhyZWFk X3NldGNhbmNlbHN0YXRlKGludCBuZXcsIGludCAqb2xkKTsNCisNCiBzdGF0aWMgaW50IGRvX3dh aXQodm9sYXRpbGUgaW50ICphZGRyLCBpbnQgdmFsLA0KIAljbG9ja2lkX3QgY2xrLCBjb25zdCBz dHJ1Y3QgdGltZXNwZWMgKmF0LCBpbnQgcHJpdikNCiB7DQpAQCAtMzMsMTMgKzM1LDEzIEBAIGlu dCBfX3RpbWVkd2FpdCh2b2xhdGlsZSBpbnQgKmFkZHIsIGludCB2YWwsDQogew0KIAlpbnQgciwg Y3M7DQogDQotCWlmICghY2xlYW51cCkgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShQVEhSRUFEX0NB TkNFTF9ESVNBQkxFLCAmY3MpOw0KKwlpZiAoIWNsZWFudXApIF9fcHRocmVhZF9zZXRjYW5jZWxz dGF0ZShQVEhSRUFEX0NBTkNFTF9ESVNBQkxFLCAmY3MpOw0KIAlwdGhyZWFkX2NsZWFudXBfcHVz aChjbGVhbnVwLCBhcmcpOw0KIA0KIAlyID0gZG9fd2FpdChhZGRyLCB2YWwsIGNsaywgYXQsIHBy aXYpOw0KIA0KIAlwdGhyZWFkX2NsZWFudXBfcG9wKDApOw0KLQlpZiAoIWNsZWFudXApIHB0aHJl YWRfc2V0Y2FuY2Vsc3RhdGUoY3MsIDApOw0KKwlpZiAoIWNsZWFudXApIF9fcHRocmVhZF9zZXRj YW5jZWxzdGF0ZShjcywgMCk7DQogDQogCXJldHVybiByOw0KIH0NCmRpZmYgLS1naXQgYS9zcmMv dGhyZWFkL2NhbGxfb25jZS5jIGIvc3JjL3RocmVhZC9jYWxsX29uY2UuYw0KbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjc0MmE3MDcNCi0tLSAvZGV2L251bGwNCisrKyBiL3Ny Yy90aHJlYWQvY2FsbF9vbmNlLmMNCkBAIC0wLDAgKzEsOSBAQA0KKyNpbmNsdWRlICJwdGhyZWFk X2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2ludCBfX3B0aHJlYWRfb25jZShv bmNlX2ZsYWcgKiwgdm9pZCAoKikodm9pZCkpOw0KKw0KK3ZvaWQgKGNhbGxfb25jZSkob25jZV9m bGFnICpmbGFnLCB2b2lkICgqZnVuYykodm9pZCkpIHsNCisJX19USFJEX0FCSV9NQVJLOw0KKwko dm9pZClfX3B0aHJlYWRfb25jZShmbGFnLCBmdW5jKTsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3Ro cmVhZC9jbmRfYnJvYWRjYXN0LmMgYi9zcmMvdGhyZWFkL2NuZF9icm9hZGNhc3QuYw0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjk0NTAxOGYNCi0tLSAvZGV2L251bGwNCisr KyBiL3NyYy90aHJlYWQvY25kX2Jyb2FkY2FzdC5jDQpAQCAtMCwwICsxLDEyIEBADQorI2luY2x1 ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQoraW50IF9fcHRo cmVhZF9jb25kX2Jyb2FkY2FzdChwdGhyZWFkX2NvbmRfdCAqKTsNCisNCitpbnQgY25kX2Jyb2Fk Y2FzdChjbmRfdCAqIGNuZCkgew0KKwkvKiBJbiB0aGUgYmVzdCBvZiBhbGwgd29ybGRzIHRoaXMg aXMgYSB0YWlsIGNhbGwuICovDQorCWludCByZXQgPSBfX3B0aHJlYWRfY29uZF9icm9hZGNhc3Qo Y25kKTsNCisJaWYgKHRocmRfc3VjY2VzcykNCisJCXJldHVybiByZXQgPyB0aHJkX2Vycm9yIDog dGhyZF9zdWNjZXNzOw0KKwlyZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFk L2NuZF9kZXN0cm95LmMgYi9zcmMvdGhyZWFkL2NuZF9kZXN0cm95LmMNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwLi4xMWNmYzE5DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMv dGhyZWFkL2NuZF9kZXN0cm95LmMNCkBAIC0wLDAgKzEsMTcgQEANCisjaW5jbHVkZSAicHRocmVh ZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRocmVhZHMuaD4NCisNCitpbnQgX19wdGhyZWFkX2NvbmRf ZGVzdHJveShwdGhyZWFkX2NvbmRfdCAqKTsNCisNCisvKiBUaGUgYmVoYXZpb3Igb2YgY25kX2Rl c3Ryb3kgaXMgdW5kZWZpbmVkIGlmIGNuZCBpcyBzdGlsbCBpbg0KKyAgIHVzZS4gVGhlIGNob2lj ZSBmb3IgcHRocmVhZF9jb25kX2Rlc3Ryb3kgaW4gdGhhdCBzaXR1YXRpb24gaXMgdG8NCisgICB3 YWtlIHVwIGFsbCB1c2VycyBiZWZvcmUgZGVzdHJveWluZy4gSSBhbSBub3Qgc3VyZSB0aGF0IHdl IHNob3VsZA0KKyAgIGRvIGl0IGxpa2UgdGhhdCBoZXJlLCB0b28uIEFsdGVybmF0aXZlcyB3b3Vs ZCBiZToNCisgICAtIGNvbXBsYWluIGJ5IHVzaW5nIHBlcnJvciBvciBlcXVpdmFsZW50DQorICAg LSBhc3NlcnQgdGhhdCB0aGVyZSBpcyBubyB3YWl0ZXINCisgICAtIGFib3J0IHdoZW4gdGhlcmUg aXMgYSB3YWl0ZXINCisgICAtIGRvIG5vdGhpbmcNCisgICAqLw0KK3ZvaWQgKGNuZF9kZXN0cm95 KShjbmRfdCAqY25kKSB7DQorCSh2b2lkKV9fcHRocmVhZF9jb25kX2Rlc3Ryb3koY25kKTsNCit9 DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9jbmRfaW5pdC5jIGIvc3JjL3RocmVhZC9jbmRfaW5p dC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYzdmMWVkZg0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9jbmRfaW5pdC5jDQpAQCAtMCwwICsxLDEwIEBADQor I2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQoraW50 IGNuZF9pbml0KGNuZF90ICogYykNCit7DQorCSpjID0gKGNuZF90KSB7DQorCQkwDQorCX07DQor CXJldHVybiB0aHJkX3N1Y2Nlc3M7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvY25kX3Np Z25hbC5jIGIvc3JjL3RocmVhZC9jbmRfc2lnbmFsLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwLi4xMDI0MWM1DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL2Nu ZF9zaWduYWwuYw0KQEAgLTAsMCArMSwxMiBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCIN CisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2ludCBfX3B0aHJlYWRfY29uZF9zaWduYWwocHRo cmVhZF9jb25kX3QgKik7DQorDQoraW50IGNuZF9zaWduYWwoY25kX3QgKiBjbmQpIHsNCisJLyog SW4gdGhlIGJlc3Qgb2YgYWxsIHdvcmxkcyB0aGlzIGlzIGEgdGFpbCBjYWxsLiAqLw0KKwlpbnQg cmV0ID0gX19wdGhyZWFkX2NvbmRfc2lnbmFsKGNuZCk7DQorCWlmICh0aHJkX3N1Y2Nlc3MpDQor CQlyZXR1cm4gcmV0ID8gdGhyZF9lcnJvciA6IHRocmRfc3VjY2VzczsNCisJcmV0dXJuIHJldDsN Cit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9jbmRfdGltZWR3YWl0LmMgYi9zcmMvdGhyZWFk L2NuZF90aW1lZHdhaXQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjkz OTc3MDYNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvY25kX3RpbWVkd2FpdC5jDQpA QCAtMCwwICsxLDIyIEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0 aHJlYWRzLmg+DQorDQoraW50IF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdChwdGhyZWFkX2NvbmRf dCAqcmVzdHJpY3QgYywgcHRocmVhZF9tdXRleF90ICpyZXN0cmljdCBtLCBjb25zdCBzdHJ1Y3Qg dGltZXNwZWMgKnJlc3RyaWN0IHRzKTsNCisNCitpbnQgY25kX3RpbWVkd2FpdChjbmRfdCAqcmVz dHJpY3QgY29uZCwgbXR4X3QgKnJlc3RyaWN0IG11dGV4LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMg KnJlc3RyaWN0IHRzKSB7DQorCS8qIEluIHRoZSBiZXN0IG9mIGFsbCB3b3JsZHMgdGhpcyBpcyBh IHRhaWwgY2FsbC4gKi8NCisJaW50IHJldCA9IF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdChjb25k LCBtdXRleCwgdHMpOw0KKwlzd2l0Y2ggKHJldCkgew0KKwljYXNlIDA6DQorCQlpZiAodGhyZF9z dWNjZXNzID09IDApIGJyZWFrOw0KKwkJZWxzZSByZXR1cm4gdGhyZF9zdWNjZXNzOw0KKwljYXNl IEVUSU1FRE9VVDoNCisJCWlmICh0aHJkX3RpbWVkb3V0ID09IEVUSU1FRE9VVCkgYnJlYWs7DQor CQllbHNlIHJldHVybiB0aHJkX3RpbWVkb3V0Ow0KKwljYXNlIEVJTlZBTDoNCisJCWlmICh0aHJk X2Vycm9yID09IEVJTlZBTCkgYnJlYWs7DQorCQllbHNlIHJldHVybiB0aHJkX2Vycm9yOw0KKwl9 DQorCS8qIEluIGNhc2Ugb2YgVUIgbWF5IGFsc28gcmV0dXJuIEVQRVJNLiAqLw0KKwlyZXR1cm4g cmV0Ow0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL2NuZF93YWl0LmMgYi9zcmMvdGhyZWFk L2NuZF93YWl0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi4zOWQwYTBk DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL2NuZF93YWl0LmMNCkBAIC0wLDAgKzEs MTEgQEANCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2ludCBjbmRfd2FpdChjbmRfdCAqY29u ZCwgbXR4X3QgKm11dGV4KQ0KK3sNCisJX19USFJEX0FCSV9NQVJLOw0KKwkvKiBDYWxsaW5nIGNu ZF90aW1lZHdhaXQgd2l0aCBhIG51bGwgcG9pbnRlciBpcyBhbg0KKwkgICBleHRlbnNpb24uIFN1 Y2ggYSBjYWxsIGlzIGNvbnZlbmllbnQsIGhlcmUgc2luY2UgaXQgYXZvaWRzIHRvDQorCSAgIHJl cGVhdCB0aGUgY2FzZSBhbmFseXNpcyB0aGF0IGlzIGFscmVhZHkgZG9uZSBmb3INCisJICAgY25k X3RpbWVkd2FpdC4gKi8NCisJcmV0dXJuIGNuZF90aW1lZHdhaXQoY29uZCwgbXV0ZXgsIDApOw0K K30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL210eF9kZXN0cm95LmMgYi9zcmMvdGhyZWFkL210 eF9kZXN0cm95LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi40ODJiNzgx DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL210eF9kZXN0cm95LmMNCkBAIC0wLDAg KzEsNSBAQA0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQordm9pZCAobXR4X2Rlc3Ryb3kpKG10 eF90ICptdHgpIHsNCisJLyogZW1wdHkgKi8NCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9t dHhfaW5pdC5jIGIvc3JjL3RocmVhZC9tdHhfaW5pdC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMC4uZGNlZThjOA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9t dHhfaW5pdC5jDQpAQCAtMCwwICsxLDEwIEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0K KyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQoraW50IG10eF9pbml0KG10eF90ICogbSwgaW50IHR5 cGUpDQorew0KKwkqbSA9IChwdGhyZWFkX211dGV4X3QpIHsNCisJCS5fbV90eXBlID0gKCh0eXBl Jm10eF9yZWN1cnNpdmUpID8gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgOiAwKSwNCisJfTsNCisJ cmV0dXJuIDA7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvbXR4X2xvY2suYyBiL3NyYy90 aHJlYWQvbXR4X2xvY2suYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjg5 NzMwZjENCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvbXR4X2xvY2suYw0KQEAgLTAs MCArMSwxNCBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFk cy5oPg0KKw0KK2ludCBtdHhfbG9jayhtdHhfdCAqbSkNCit7DQorCV9fVEhSRF9BQklfTUFSSzsN CisJaWYgKG0tPl9tX3R5cGUgPT0gUFRIUkVBRF9NVVRFWF9OT1JNQUwgJiYgIWFfY2FzKCZtLT5f bV9sb2NrLCAwLCBFQlVTWSkpDQorCQlyZXR1cm4gdGhyZF9zdWNjZXNzOw0KKwkvKiBDYWxsaW5n IG10eF90aW1lZGxvY2sgd2l0aCBhIG51bGwgcG9pbnRlciBpcyBhbg0KKwkgICBleHRlbnNpb24u IFN1Y2ggYSBjYWxsIGlzIGNvbnZlbmllbnQsIGhlcmUsIHNpbmNlIGl0IGF2b2lkcw0KKwkgICB0 byByZXBlYXQgdGhlIGNhc2UgYW5hbHlzaXMgdGhhdCBpcyBhbHJlYWR5IGRvbmUgZm9yDQorCSAg IG10eF90aW1lZGxvY2suICovDQorCXJldHVybiBtdHhfdGltZWRsb2NrKG0sIDApOw0KK30NCmRp ZmYgLS1naXQgYS9zcmMvdGhyZWFkL210eF90aW1lZGxvY2suYyBiL3NyYy90aHJlYWQvbXR4X3Rp bWVkbG9jay5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMWUzZmQzNw0K LS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9tdHhfdGltZWRsb2NrLmMNCkBAIC0wLDAg KzEsMjYgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRocmVhZHMu aD4NCisNCitpbnQgX19wdGhyZWFkX211dGV4X3RpbWVkbG9jayhwdGhyZWFkX211dGV4X3QgKnJl c3RyaWN0IG0sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVzdHJpY3QgdHMpOw0KKw0KK2ludCBt dHhfdGltZWRsb2NrKG10eF90ICpyZXN0cmljdCBtdXRleCwgY29uc3Qgc3RydWN0IHRpbWVzcGVj ICpyZXN0cmljdCB0cykgew0KKwkvKiBJbiB0aGUgYmVzdCBvZiBhbGwgd29ybGRzIHRoaXMgaXMg YSB0YWlsIGNhbGwuICovDQorCWludCByZXQgPSBfX3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKG11 dGV4LCB0cyk7DQorCXN3aXRjaCAocmV0KSB7DQorCWNhc2UgMDoNCisJCWlmICh0aHJkX3N1Y2Nl c3MgPT0gMCkgYnJlYWs7DQorCQllbHNlIHJldHVybiB0aHJkX3N1Y2Nlc3M7DQorCWNhc2UgRVRJ TUVET1VUOg0KKwkJaWYgKHRocmRfdGltZWRvdXQgPT0gRVRJTUVET1VUKSBicmVhazsNCisJCWVs c2UgcmV0dXJuIHRocmRfdGltZWRvdXQ7DQorCWNhc2UgRUlOVkFMOg0KKwkJaWYgKHRocmRfZXJy b3IgPT0gRUlOVkFMKSBicmVhazsNCisJCWVsc2UgcmV0dXJuIHRocmRfZXJyb3I7DQorCX0NCisJ LyogSW4gY2FzZSBvZiBVQiBtYXkgYWxzbyByZXR1cm4gRVBFUk0sIEVERUFETEsgb3IgRUFHQUlO LiBFQUdBSU4gaXMNCisJICAgc3BlY2lhbGx5IHRyaWNreSBzaW5jZSBDMTEgZG9lc24ndCBkZWZp bmUgaG93IG1hbnkgcmVjdXJzaXZlDQorCSAgIGNhbGxzIGNhbiBiZSBkb25lLiAodGhpcyAqaXNu J3QqIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBuZXN0ZWQNCisJICAgY2FsbHMhKSBUaGlzIGltcGxl bWVudGF0aW9uIGhlcmUgZGVhbHMgdGhpcyB3aXRoIGEgY291bnRlciBhbmQNCisJICAgZGV0ZWN0 cyBvdmVyZmxvdywgc28gdGhpcyBpcyBkZWZpbml0aXZlbHkgVUIuICovDQorCXJldHVybiByZXQ7 DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvbXR4X3RyeWxvY2suYyBiL3NyYy90aHJlYWQv bXR4X3RyeWxvY2suYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjRiMDFi ZjcNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvbXR4X3RyeWxvY2suYw0KQEAgLTAs MCArMSwyOSBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFk cy5oPg0KKw0KK2ludCBfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jayhwdGhyZWFkX211dGV4X3QgKnJl c3RyaWN0IG0pOw0KKw0KK2ludCBtdHhfdHJ5bG9jayhtdHhfdCAqcmVzdHJpY3QgbSkgew0KKwlp ZiAobS0+X21fdHlwZSA9PSBQVEhSRUFEX01VVEVYX05PUk1BTCkNCisJCXJldHVybiBhX2Nhcygm bS0+X21fbG9jaywgMCwgRUJVU1kpICYgRUJVU1k7DQorDQorCS8qIEluIHRoZSBiZXN0IG9mIGFs bCB3b3JsZHMgdGhpcyBpcyBhIHRhaWwgY2FsbC4gKi8NCisJaW50IHJldCA9IF9fcHRocmVhZF9t dXRleF90cnlsb2NrKG0pOw0KKwlzd2l0Y2ggKHJldCkgew0KKwljYXNlIDA6DQorCQlpZiAodGhy ZF9zdWNjZXNzID09IDApIGJyZWFrOw0KKwkJZWxzZSByZXR1cm4gdGhyZF9zdWNjZXNzOw0KKwlj YXNlIEVCVVNZOg0KKwkJaWYgKHRocmRfYnVzeSA9PSBFQlVTWSkgYnJlYWs7DQorCQllbHNlIHJl dHVybiB0aHJkX2J1c3k7DQorCWNhc2UgRUlOVkFMOg0KKwkJaWYgKHRocmRfZXJyb3IgPT0gRUlO VkFMKSBicmVhazsNCisJCWVsc2UgcmV0dXJuIHRocmRfZXJyb3I7DQorCX0NCisJLyogSW4gY2Fz ZSBvZiBVQiBtYXkgYWxzbyByZXR1cm4gRVBFUk0sIEVERUFETEsgb3IgRUFHQUlOLiBFQUdBSU4g aXMNCisJICAgc3BlY2lhbGx5IHRyaWNreSBzaW5jZSBDMTEgZG9lc24ndCBkZWZpbmUgaG93IG1h bnkgcmVjdXJzaXZlDQorCSAgIGNhbGxzIGNhbiBiZSBkb25lLiAodGhpcyAqaXNuJ3QqIHRoZSBt YXhpbXVtIGFtb3VudCBvZiBuZXN0ZWQNCisJICAgY2FsbHMhKSBUaGlzIGltcGxlbWVudGF0aW9u IGhlcmUgZGVhbHMgdGhpcyB3aXRoIGEgY291bnRlciBhbmQNCisJICAgZGV0ZWN0cyBvdmVyZmxv dywgc28gdGhpcyBpcyBkZWZpbml0aXZlbHkgVUIuICovDQorCXJldHVybiByZXQ7DQorfQ0KZGlm ZiAtLWdpdCBhL3NyYy90aHJlYWQvbXR4X3VubG9jay5jIGIvc3JjL3RocmVhZC9tdHhfdW5sb2Nr LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5kNzc0YjgxDQotLS0gL2Rl di9udWxsDQorKysgYi9zcmMvdGhyZWFkL210eF91bmxvY2suYw0KQEAgLTAsMCArMSwxMyBAQA0K KyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2lu dCBfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsNCisNCitpbnQgKG10 eF91bmxvY2spKG10eF90ICptdHgpIHsNCisJLyogSW4gdGhlIGJlc3Qgb2YgYWxsIHdvcmxkcyB0 aGlzIGlzIGEgdGFpbCBjYWxsLiAqLw0KKwlpbnQgcmV0ID0gX19wdGhyZWFkX211dGV4X3VubG9j ayhtdHgpOw0KKwlpZiAodGhyZF9zdWNjZXNzKQ0KKwkJcmV0dXJuIHJldCA/IHRocmRfZXJyb3Ig OiB0aHJkX3N1Y2Nlc3M7DQorCS8qIEluIGNhc2Ugb2YgVUIgbWF5IGFsc28gcmV0dXJuIEVQRVJN LiAqLw0KKwlyZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRf Y29uZF9icm9hZGNhc3QuYyBiL3NyYy90aHJlYWQvcHRocmVhZF9jb25kX2Jyb2FkY2FzdC5jDQpp bmRleCAwOTAxZGFmLi43YTljZmQ5IDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX2Nv bmRfYnJvYWRjYXN0LmMNCisrKyBiL3NyYy90aHJlYWQvcHRocmVhZF9jb25kX2Jyb2FkY2FzdC5j DQpAQCAtMSw2ICsxLDYgQEANCiAjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQogDQotaW50IHB0 aHJlYWRfY29uZF9icm9hZGNhc3QocHRocmVhZF9jb25kX3QgKmMpDQoraW50IF9fcHRocmVhZF9j b25kX2Jyb2FkY2FzdChwdGhyZWFkX2NvbmRfdCAqYykNCiB7DQogCXB0aHJlYWRfbXV0ZXhfdCAq bTsNCiANCkBAIC0zNywzICszNyw1IEBAIG91dDoNCiANCiAJcmV0dXJuIDA7DQogfQ0KKw0KK3dl YWtfYWxpYXMoX19wdGhyZWFkX2NvbmRfYnJvYWRjYXN0LCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0 KTsNCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfY29uZF9kZXN0cm95LmMgYi9zcmMv dGhyZWFkL3B0aHJlYWRfY29uZF9kZXN0cm95LmMNCmluZGV4IGEwOTZjNTUuLjVkOTllODggMTAw NjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJlYWRfY29uZF9kZXN0cm95LmMNCisrKyBiL3NyYy90 aHJlYWQvcHRocmVhZF9jb25kX2Rlc3Ryb3kuYw0KQEAgLTEsNiArMSw2IEBADQogI2luY2x1ZGUg InB0aHJlYWRfaW1wbC5oIg0KIA0KLWludCBwdGhyZWFkX2NvbmRfZGVzdHJveShwdGhyZWFkX2Nv bmRfdCAqYykNCitpbnQgX19wdGhyZWFkX2NvbmRfZGVzdHJveShwdGhyZWFkX2NvbmRfdCAqYykN CiB7DQogCWludCBwcml2ID0gYy0+X2NfbXV0ZXggIT0gKHZvaWQgKiktMTsNCiAJaW50IGNudDsN CkBAIC0xMSwzICsxMSw1IEBAIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveShwdGhyZWFkX2NvbmRf dCAqYykNCiAJCV9fd2FpdCgmYy0+X2Nfd2FpdGVycywgMCwgY250LCBwcml2KTsNCiAJcmV0dXJu IDA7DQogfQ0KKw0KK3dlYWtfYWxpYXMoX19wdGhyZWFkX2NvbmRfZGVzdHJveSwgcHRocmVhZF9j b25kX2Rlc3Ryb3kpOw0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvcHRocmVhZF9jb25kX3NpZ25h bC5jIGIvc3JjL3RocmVhZC9wdGhyZWFkX2NvbmRfc2lnbmFsLmMNCmluZGV4IDcxYmNkY2QuLjM4 NzU0ZjIgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJlYWRfY29uZF9zaWduYWwuYw0KKysr IGIvc3JjL3RocmVhZC9wdGhyZWFkX2NvbmRfc2lnbmFsLmMNCkBAIC0xLDkgKzEsMTEgQEANCiAj aW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQogDQotaW50IHB0aHJlYWRfY29uZF9zaWduYWwocHRo cmVhZF9jb25kX3QgKmMpDQoraW50IF9fcHRocmVhZF9jb25kX3NpZ25hbChwdGhyZWFkX2NvbmRf dCAqYykNCiB7DQogCWlmICghYy0+X2Nfd2FpdGVycykgcmV0dXJuIDA7DQogCWFfaW5jKCZjLT5f Y19zZXEpOw0KIAlpZiAoYy0+X2Nfd2FpdGVycykgX193YWtlKCZjLT5fY19zZXEsIDEsIDApOw0K IAlyZXR1cm4gMDsNCiB9DQorDQord2Vha19hbGlhcyhfX3B0aHJlYWRfY29uZF9zaWduYWwsIHB0 aHJlYWRfY29uZF9zaWduYWwpOw0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvcHRocmVhZF9jb25k X3RpbWVkd2FpdC5jIGIvc3JjL3RocmVhZC9wdGhyZWFkX2NvbmRfdGltZWR3YWl0LmMNCmluZGV4 IDk5ZDYyY2MuLjgxOWE3YWYgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJlYWRfY29uZF90 aW1lZHdhaXQuYw0KKysrIGIvc3JjL3RocmVhZC9wdGhyZWFkX2NvbmRfdGltZWR3YWl0LmMNCkBA IC0xLDUgKzEsOSBAQA0KICNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCiANCit2b2lkIF9fcHRo cmVhZF90ZXN0Y2FuY2VsKHZvaWQpOw0KK2ludCBfX3B0aHJlYWRfbXV0ZXhfbG9jayhwdGhyZWFk X211dGV4X3QgKik7DQoraW50IF9fcHRocmVhZF9tdXRleF91bmxvY2socHRocmVhZF9tdXRleF90 ICptKTsNCisNCiBzdHJ1Y3QgY20gew0KIAlwdGhyZWFkX2NvbmRfdCAqYzsNCiAJcHRocmVhZF9t dXRleF90ICptOw0KQEAgLTMzLDEwICszNywxMCBAQCBzdGF0aWMgdm9pZCBjbGVhbnVwKHZvaWQg KnApDQogew0KIAlzdHJ1Y3QgY20gKmNtID0gcDsNCiAJdW53YWl0KGNtLT5jLCBjbS0+bSk7DQot CXB0aHJlYWRfbXV0ZXhfbG9jayhjbS0+bSk7DQorCV9fcHRocmVhZF9tdXRleF9sb2NrKGNtLT5t KTsNCiB9DQogDQotaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9jb25kX3QgKnJl c3RyaWN0IGMsIHB0aHJlYWRfbXV0ZXhfdCAqcmVzdHJpY3QgbSwgY29uc3Qgc3RydWN0IHRpbWVz cGVjICpyZXN0cmljdCB0cykNCitpbnQgX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0KHB0aHJlYWRf Y29uZF90ICpyZXN0cmljdCBjLCBwdGhyZWFkX211dGV4X3QgKnJlc3RyaWN0IG0sIGNvbnN0IHN0 cnVjdCB0aW1lc3BlYyAqcmVzdHJpY3QgdHMpDQogew0KIAlzdHJ1Y3QgY20gY20gPSB7IC5jPWMs IC5tPW0gfTsNCiAJaW50IHIsIGU9MCwgc2VxOw0KQEAgLTQ3LDcgKzUxLDcgQEAgaW50IHB0aHJl YWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9jb25kX3QgKnJlc3RyaWN0IGMsIHB0aHJlYWRfbXV0 ZXhfdCAqcmVzdHJpY3QNCiAJaWYgKHRzICYmIHRzLT50dl9uc2VjID49IDEwMDAwMDAwMDBVTCkN CiAJCXJldHVybiBFSU5WQUw7DQogDQotCXB0aHJlYWRfdGVzdGNhbmNlbCgpOw0KKwlfX3B0aHJl YWRfdGVzdGNhbmNlbCgpOw0KIA0KIAlhX2luYygmYy0+X2Nfd2FpdGVycyk7DQogDQpAQCAtNjIs NyArNjYsNyBAQCBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdChwdGhyZWFkX2NvbmRfdCAqcmVz dHJpY3QgYywgcHRocmVhZF9tdXRleF90ICpyZXN0cmljdA0KIA0KIAlzZXEgPSBjLT5fY19zZXE7 DQogDQotCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKG0pOw0KKwlfX3B0aHJlYWRfbXV0ZXhfdW5sb2Nr KG0pOw0KIA0KIAlkbyBlID0gX190aW1lZHdhaXQoJmMtPl9jX3NlcSwgc2VxLCBjLT5fY19jbG9j aywgdHMsIGNsZWFudXAsICZjbSwgMCk7DQogCXdoaWxlIChjLT5fY19zZXEgPT0gc2VxICYmICgh ZSB8fCBlPT1FSU5UUikpOw0KQEAgLTcwLDcgKzc0LDkgQEAgaW50IHB0aHJlYWRfY29uZF90aW1l ZHdhaXQocHRocmVhZF9jb25kX3QgKnJlc3RyaWN0IGMsIHB0aHJlYWRfbXV0ZXhfdCAqcmVzdHJp Y3QNCiANCiAJdW53YWl0KGMsIG0pOw0KIA0KLQlpZiAoKHI9cHRocmVhZF9tdXRleF9sb2NrKG0p KSkgcmV0dXJuIHI7DQorCWlmICgocj1fX3B0aHJlYWRfbXV0ZXhfbG9jayhtKSkpIHJldHVybiBy Ow0KIA0KIAlyZXR1cm4gZTsNCiB9DQorDQord2Vha19hbGlhcyhfX3B0aHJlYWRfY29uZF90aW1l ZHdhaXQsIHB0aHJlYWRfY29uZF90aW1lZHdhaXQpOw0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQv cHRocmVhZF9jb25kX3dhaXQuYyBiL3NyYy90aHJlYWQvcHRocmVhZF9jb25kX3dhaXQuYw0KaW5k ZXggODczNWJmMS4uNTg2NTZmNyAxMDA2NDQNCi0tLSBhL3NyYy90aHJlYWQvcHRocmVhZF9jb25k X3dhaXQuYw0KKysrIGIvc3JjL3RocmVhZC9wdGhyZWFkX2NvbmRfd2FpdC5jDQpAQCAtMSw2ICsx LDggQEANCiAjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQogDQoraW50IF9fcHRocmVhZF9jb25k X3RpbWVkd2FpdChwdGhyZWFkX2NvbmRfdCAqcmVzdHJpY3QgYywgcHRocmVhZF9tdXRleF90ICpy ZXN0cmljdCBtLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJlc3RyaWN0IHRzKTsNCisNCiBpbnQg cHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKnJlc3RyaWN0IGMsIHB0aHJlYWRfbXV0 ZXhfdCAqcmVzdHJpY3QgbSkNCiB7DQotCXJldHVybiBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KGMs IG0sIDApOw0KKwlyZXR1cm4gX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0KGMsIG0sIDApOw0KIH0N CmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfY3JlYXRlLmMgYi9zcmMvdGhyZWFkL3B0 aHJlYWRfY3JlYXRlLmMNCmluZGV4IGU3N2U1NGEuLjBiMjRhMWMgMTAwNjQ0DQotLS0gYS9zcmMv dGhyZWFkL3B0aHJlYWRfY3JlYXRlLmMNCisrKyBiL3NyYy90aHJlYWQvcHRocmVhZF9jcmVhdGUu Yw0KQEAgLTMsNiArMyw5IEBADQogI2luY2x1ZGUgInN0ZGlvX2ltcGwuaCINCiAjaW5jbHVkZSAi bGliYy5oIg0KICNpbmNsdWRlIDxzeXMvbW1hbi5oPg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQor DQorI2RlZmluZSBfX1RIUkRfQzExICgodm9pZCopKHVpbnRwdHJfdCktMSkNCiANCiBzdGF0aWMg dm9pZCBkdW1teV8wKCkNCiB7DQpAQCAtMTEsNyArMTQsNyBAQCB3ZWFrX2FsaWFzKGR1bW15XzAs IF9fYWNxdWlyZV9wdGMpOw0KIHdlYWtfYWxpYXMoZHVtbXlfMCwgX19yZWxlYXNlX3B0Yyk7DQog d2Vha19hbGlhcyhkdW1teV8wLCBfX3B0aHJlYWRfdHNkX3J1bl9kdG9ycyk7DQogDQotX05vcmV0 dXJuIHZvaWQgcHRocmVhZF9leGl0KHZvaWQgKnJlc3VsdCkNCitfTm9yZXR1cm4gdm9pZCBfX3B0 aHJlYWRfZXhpdCh2b2lkICpyZXN1bHQpDQogew0KIAlwdGhyZWFkX3Qgc2VsZiA9IF9fcHRocmVh ZF9zZWxmKCk7DQogCXNpZ3NldF90IHNldDsNCkBAIC0xMTMsNiArMTE2LDE5IEBAIHN0YXRpYyBp bnQgc3RhcnQodm9pZCAqcCkNCiAJcmV0dXJuIDA7DQogfQ0KIA0KK3N0YXRpYyBfTm9yZXR1cm4g dm9pZCBfX3RocmRfZXhpdChpbnQgcmVzdWx0KSB7DQorCV9fcHRocmVhZF9leGl0KCh2b2lkKiko aW50cHRyX3QpcmVzdWx0KTsNCit9DQorDQorDQorc3RhdGljIGludCBzdGFydF9jMTEodm9pZCAq cCkNCit7DQorCXRocmRfdCBzZWxmID0gcDsNCisJaW50ICgqc3RhcnQpKHZvaWQqKSA9IChpbnQo Kikodm9pZCopKSBzZWxmLT5zdGFydDsNCisJX190aHJkX2V4aXQoc3RhcnQoc2VsZi0+c3RhcnRf YXJnKSk7DQorCXJldHVybiAwOw0KK30NCisNCiAjZGVmaW5lIFJPVU5EKHgpICgoKHgpK1BBR0Vf U0laRS0xKSYtUEFHRV9TSVpFKQ0KIA0KIC8qIHB0aHJlYWRfa2V5X2NyZWF0ZS5jIG92ZXJyaWRl cyB0aGlzICovDQpAQCAtMTMzLDEwICsxNDksMTAgQEAgc3RhdGljIHZvaWQgaW5pdF9maWxlX2xv Y2soRklMRSAqZikNCiANCiB2b2lkICpfX2NvcHlfdGxzKHVuc2lnbmVkIGNoYXIgKik7DQogDQot aW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqcmVzdHJpY3QgcmVzLCBjb25zdCBwdGhyZWFk X2F0dHJfdCAqcmVzdHJpY3QgYXR0cnAsIHZvaWQgKigqZW50cnkpKHZvaWQgKiksIHZvaWQgKnJl c3RyaWN0IGFyZykNCitzdGF0aWMgaW50IF9fcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICpyZXN0 cmljdCByZXMsIGNvbnN0IHB0aHJlYWRfYXR0cl90ICpyZXN0cmljdCBhdHRycCwgdm9pZCAqKCpl bnRyeSkodm9pZCAqKSwgdm9pZCAqcmVzdHJpY3QgYXJnKQ0KIHsNCi0JaW50IHJldDsNCi0Jc2l6 ZV90IHNpemUsIGd1YXJkOw0KKwlpbnQgcmV0LCBjMTEgPSAoYXR0cnAgPT0gX19USFJEX0MxMSk7 DQorCXNpemVfdCBzaXplLCBndWFyZCA9IDA7DQogCXN0cnVjdCBwdGhyZWFkICpzZWxmLCAqbmV3 Ow0KIAl1bnNpZ25lZCBjaGFyICptYXAgPSAwLCAqc3RhY2sgPSAwLCAqdHNkID0gMCwgKnN0YWNr X2xpbWl0Ow0KIAl1bnNpZ25lZCBmbGFncyA9IENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9G SUxFUyB8IENMT05FX1NJR0hBTkQNCkBAIC0xNTcsNiArMTczLDkgQEAgaW50IHB0aHJlYWRfY3Jl YXRlKHB0aHJlYWRfdCAqcmVzdHJpY3QgcmVzLCBjb25zdCBwdGhyZWFkX2F0dHJfdCAqcmVzdHJp Y3QgYXR0cnANCiAJCXNlbGYtPnRzZCA9ICh2b2lkICoqKV9fcHRocmVhZF90c2RfbWFpbjsNCiAJ CWxpYmMudGhyZWFkZWQgPSAxOw0KIAl9DQorICAgICAgICBpZiAoYzExKSB7DQorICAgICAgICAg IGF0dHJwID0gMDsNCisgICAgICAgIH0NCiAJaWYgKGF0dHJwKSBhdHRyID0gKmF0dHJwOw0KIA0K IAlfX2FjcXVpcmVfcHRjKCk7DQpAQCAtMjIzLDcgKzI0MiwxMCBAQCBpbnQgcHRocmVhZF9jcmVh dGUocHRocmVhZF90ICpyZXN0cmljdCByZXMsIGNvbnN0IHB0aHJlYWRfYXR0cl90ICpyZXN0cmlj dCBhdHRycA0KIAluZXctPmNhbmFyeSA9IHNlbGYtPmNhbmFyeTsNCiANCiAJYV9pbmMoJmxpYmMu dGhyZWFkc19taW51c18xKTsNCi0JcmV0ID0gX19jbG9uZShzdGFydCwgc3RhY2ssIGZsYWdzLCBu ZXcsICZuZXctPnRpZCwgVFBfQURKKG5ldyksICZuZXctPnRpZCk7DQorCWlmIChjMTEpDQorCQly ZXQgPSBfX2Nsb25lKHN0YXJ0X2MxMSwgc3RhY2ssIGZsYWdzLCBuZXcsICZuZXctPnRpZCwgVFBf QURKKG5ldyksICZuZXctPnRpZCk7DQorCWVsc2UNCisJCXJldCA9IF9fY2xvbmUoc3RhcnQsIHN0 YWNrLCBmbGFncywgbmV3LCAmbmV3LT50aWQsIFRQX0FESihuZXcpLCAmbmV3LT50aWQpOw0KIA0K IAlfX3JlbGVhc2VfcHRjKCk7DQogDQpAQCAtMjUxLDMgKzI3MywxOSBAQCBmYWlsOg0KIAlfX3Jl bGVhc2VfcHRjKCk7DQogCXJldHVybiBFQUdBSU47DQogfQ0KKw0KK3N0YXRpYyBpbnQgX190aHJk X2NyZWF0ZSh0aHJkX3QgKnRociwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZF9zdGFy dF90IGZ1bmMsDQorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykgew0KKwkvKiBJ biB0aGUgYmVzdCBvZiBhbGwgd29ybGRzIHRoaXMgaXMgYSB0YWlsIGNhbGwuICovDQorCWludCBy ZXQgPSBfX3B0aHJlYWRfY3JlYXRlKHRociwgX19USFJEX0MxMSwgKHZvaWQgKiAoKikodm9pZCAq KSlmdW5jLCBhcmcpOw0KKwlpZiAodGhyZF9zdWNjZXNzKQ0KKwkJcmV0dXJuIHJldCA/IHRocmRf ZXJyb3IgOiB0aHJkX3N1Y2Nlc3M7DQorCS8qIEluIGNhc2Ugb2YgVUIgbWF5IGFsc28gcmV0dXJu IEVOT1NZUyBvciBFQUdBSU4uICovDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3dlYWtfYWxpYXMo X19wdGhyZWFkX2V4aXQsIHB0aHJlYWRfZXhpdCk7DQord2Vha19hbGlhcyhfX3B0aHJlYWRfY3Jl YXRlLCBwdGhyZWFkX2NyZWF0ZSk7DQord2Vha19hbGlhcyhfX3RocmRfY3JlYXRlLCB0aHJkX2Ny ZWF0ZSk7DQord2Vha19hbGlhcyhfX3RocmRfZXhpdCwgdGhyZF9leGl0KTsNCmRpZmYgLS1naXQg YS9zcmMvdGhyZWFkL3B0aHJlYWRfZGV0YWNoLmMgYi9zcmMvdGhyZWFkL3B0aHJlYWRfZGV0YWNo LmMNCmluZGV4IDY1MWMzOGUuLjVjYTc4NTUgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJl YWRfZGV0YWNoLmMNCisrKyBiL3NyYy90aHJlYWQvcHRocmVhZF9kZXRhY2guYw0KQEAgLTEsMTEg KzEsMTUgQEANCiAjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQogDQotaW50IHB0aHJlYWRfZGV0 YWNoKHB0aHJlYWRfdCB0KQ0KK2ludCBfX3B0aHJlYWRfam9pbihwdGhyZWFkX3QgdCwgdm9pZCAq KnJlcyk7DQorDQoraW50IF9fcHRocmVhZF9kZXRhY2gocHRocmVhZF90IHQpDQogew0KIAkvKiBD YW5ub3QgZGV0YWNoIGEgdGhyZWFkIHRoYXQncyBhbHJlYWR5IGV4aXRpbmcgKi8NCiAJaWYgKGFf c3dhcCh0LT5leGl0bG9jaywgMSkpDQotCQlyZXR1cm4gcHRocmVhZF9qb2luKHQsIDApOw0KKwkJ cmV0dXJuIF9fcHRocmVhZF9qb2luKHQsIDApOw0KIAl0LT5kZXRhY2hlZCA9IDI7DQogCV9fdW5s b2NrKHQtPmV4aXRsb2NrKTsNCiAJcmV0dXJuIDA7DQogfQ0KKw0KK3dlYWtfYWxpYXMoX19wdGhy ZWFkX2RldGFjaCwgcHRocmVhZF9kZXRhY2gpOw0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvcHRo cmVhZF9lcXVhbC5jIGIvc3JjL3RocmVhZC9wdGhyZWFkX2VxdWFsLmMNCmluZGV4IDNlM2RmNGYu LjM4ZmI0NWUgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJlYWRfZXF1YWwuYw0KKysrIGIv c3JjL3RocmVhZC9wdGhyZWFkX2VxdWFsLmMNCkBAIC0xLDQgKzEsNCBAQA0KLSNpbmNsdWRlIDxw dGhyZWFkLmg+DQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KIA0KIGludCAocHRocmVhZF9l cXVhbCkocHRocmVhZF90IGEsIHB0aHJlYWRfdCBiKQ0KIHsNCmRpZmYgLS1naXQgYS9zcmMvdGhy ZWFkL3B0aHJlYWRfZ2V0c3BlY2lmaWMuYyBiL3NyYy90aHJlYWQvcHRocmVhZF9nZXRzcGVjaWZp Yy5jDQppbmRleCBiMmEyODJjLi5iZmM0Mjk0IDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhy ZWFkX2dldHNwZWNpZmljLmMNCisrKyBiL3NyYy90aHJlYWQvcHRocmVhZF9nZXRzcGVjaWZpYy5j DQpAQCAtMSw3ICsxLDEwIEBADQogI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KIA0KLXZvaWQg KnB0aHJlYWRfZ2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCBrKQ0KK3N0YXRpYyB2b2lkICpfX3B0 aHJlYWRfZ2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCBrKQ0KIHsNCiAJc3RydWN0IHB0aHJlYWQg KnNlbGYgPSBfX3B0aHJlYWRfc2VsZigpOw0KIAlyZXR1cm4gc2VsZi0+dHNkW2tdOw0KIH0NCisN Cit3ZWFrX2FsaWFzKF9fcHRocmVhZF9nZXRzcGVjaWZpYywgcHRocmVhZF9nZXRzcGVjaWZpYyk7 DQord2Vha19hbGlhcyhfX3B0aHJlYWRfZ2V0c3BlY2lmaWMsIHRzc19nZXQpOw0KZGlmZiAtLWdp dCBhL3NyYy90aHJlYWQvcHRocmVhZF9qb2luLmMgYi9zcmMvdGhyZWFkL3B0aHJlYWRfam9pbi5j DQppbmRleCA3MTljOTFjLi4xYjU5NDg5IDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFk X2pvaW4uYw0KKysrIGIvc3JjL3RocmVhZC9wdGhyZWFkX2pvaW4uYw0KQEAgLTUsNyArNSw3IEBA IHN0YXRpYyB2b2lkIGR1bW15KHZvaWQgKnApDQogew0KIH0NCiANCi1pbnQgcHRocmVhZF9qb2lu KHB0aHJlYWRfdCB0LCB2b2lkICoqcmVzKQ0KK2ludCBfX3B0aHJlYWRfam9pbihwdGhyZWFkX3Qg dCwgdm9pZCAqKnJlcykNCiB7DQogCWludCB0bXA7DQogCXdoaWxlICgodG1wID0gdC0+dGlkKSkg X190aW1lZHdhaXQoJnQtPnRpZCwgdG1wLCAwLCAwLCBkdW1teSwgMCwgMCk7DQpAQCAtMTMsMyAr MTMsNSBAQCBpbnQgcHRocmVhZF9qb2luKHB0aHJlYWRfdCB0LCB2b2lkICoqcmVzKQ0KIAlpZiAo dC0+bWFwX2Jhc2UpIG11bm1hcCh0LT5tYXBfYmFzZSwgdC0+bWFwX3NpemUpOw0KIAlyZXR1cm4g MDsNCiB9DQorDQord2Vha19hbGlhcyhfX3B0aHJlYWRfam9pbiwgcHRocmVhZF9qb2luKTsNCmRp ZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfa2V5X2NyZWF0ZS5jIGIvc3JjL3RocmVhZC9w dGhyZWFkX2tleV9jcmVhdGUuYw0KaW5kZXggYTkxODdmNy4uYmZjZDU5NyAxMDA2NDQNCi0tLSBh L3NyYy90aHJlYWQvcHRocmVhZF9rZXlfY3JlYXRlLmMNCisrKyBiL3NyYy90aHJlYWQvcHRocmVh ZF9rZXlfY3JlYXRlLmMNCkBAIC05LDcgKzksNyBAQCBzdGF0aWMgdm9pZCBub2R0b3Iodm9pZCAq ZHVtbXkpDQogew0KIH0NCiANCi1pbnQgcHRocmVhZF9rZXlfY3JlYXRlKHB0aHJlYWRfa2V5X3Qg KmssIHZvaWQgKCpkdG9yKSh2b2lkICopKQ0KK2ludCBfX3B0aHJlYWRfa2V5X2NyZWF0ZShwdGhy ZWFkX2tleV90ICprLCB2b2lkICgqZHRvcikodm9pZCAqKSkNCiB7DQogCXVuc2lnbmVkIGkgPSAo dWludHB0cl90KSZrIC8gMTYgJSBQVEhSRUFEX0tFWVNfTUFYOw0KIAl1bnNpZ25lZCBqID0gaTsN CkBAIC0zMSw3ICszMSw3IEBAIGludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCAq aywgdm9pZCAoKmR0b3IpKHZvaWQgKikpDQogCXJldHVybiBFQUdBSU47DQogfQ0KIA0KLWludCBw dGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9rZXlfdCBrKQ0KK2ludCBfX3B0aHJlYWRfa2V5X2Rl bGV0ZShwdGhyZWFkX2tleV90IGspDQogew0KIAlrZXlzW2tdID0gMDsNCiAJcmV0dXJuIDA7DQpA QCAtNTMsMyArNTMsNiBAQCB2b2lkIF9fcHRocmVhZF90c2RfcnVuX2R0b3JzKCkNCiAJCX0NCiAJ fQ0KIH0NCisNCit3ZWFrX2FsaWFzKF9fcHRocmVhZF9rZXlfZGVsZXRlLCBwdGhyZWFkX2tleV9k ZWxldGUpOw0KK3dlYWtfYWxpYXMoX19wdGhyZWFkX2tleV9jcmVhdGUsIHB0aHJlYWRfa2V5X2Ny ZWF0ZSk7DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9wdGhyZWFkX211dGV4X2xvY2suYyBiL3Ny Yy90aHJlYWQvcHRocmVhZF9tdXRleF9sb2NrLmMNCmluZGV4IDQyYjVhZjYuLjllYTRhOTcgMTAw NjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJlYWRfbXV0ZXhfbG9jay5jDQorKysgYi9zcmMvdGhy ZWFkL3B0aHJlYWRfbXV0ZXhfbG9jay5jDQpAQCAtMSw5ICsxLDEzIEBADQogI2luY2x1ZGUgInB0 aHJlYWRfaW1wbC5oIg0KIA0KLWludCBwdGhyZWFkX211dGV4X2xvY2socHRocmVhZF9tdXRleF90 ICptKQ0KK2ludCBfX3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKHB0aHJlYWRfbXV0ZXhfdCAqcmVz dHJpY3QgbSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZXN0cmljdCBhdCk7DQorDQoraW50IF9f cHRocmVhZF9tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqbSkNCiB7DQogCWlmIChtLT5fbV90 eXBlID09IFBUSFJFQURfTVVURVhfTk9STUFMICYmICFhX2NhcygmbS0+X21fbG9jaywgMCwgRUJV U1kpKQ0KIAkJcmV0dXJuIDA7DQogDQotCXJldHVybiBwdGhyZWFkX211dGV4X3RpbWVkbG9jayht LCAwKTsNCisJcmV0dXJuIF9fcHRocmVhZF9tdXRleF90aW1lZGxvY2sobSwgMCk7DQogfQ0KKw0K K3dlYWtfYWxpYXMoX19wdGhyZWFkX211dGV4X2xvY2ssIHB0aHJlYWRfbXV0ZXhfbG9jayk7DQpk aWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jIGIvc3JjL3Ro cmVhZC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jDQppbmRleCA3YjFhZmMwLi44MjM4ZTcwIDEw MDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jDQorKysgYi9z cmMvdGhyZWFkL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMNCkBAIC0xLDYgKzEsNiBAQA0KICNp bmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCiANCi1pbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2so cHRocmVhZF9tdXRleF90ICpyZXN0cmljdCBtLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJlc3Ry aWN0IGF0KQ0KK2ludCBfX3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKHB0aHJlYWRfbXV0ZXhfdCAq cmVzdHJpY3QgbSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZXN0cmljdCBhdCkNCiB7DQogCWlu dCByLCB0Ow0KIA0KQEAgLTIyLDMgKzIyLDUgQEAgaW50IHB0aHJlYWRfbXV0ZXhfdGltZWRsb2Nr KHB0aHJlYWRfbXV0ZXhfdCAqcmVzdHJpY3QgbSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICoNCiAJ fQ0KIAlyZXR1cm4gcjsNCiB9DQorDQord2Vha19hbGlhcyhfX3B0aHJlYWRfbXV0ZXhfdGltZWRs b2NrLCBwdGhyZWFkX211dGV4X3RpbWVkbG9jayk7DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9w dGhyZWFkX211dGV4X3RyeWxvY2suYyBiL3NyYy90aHJlYWQvcHRocmVhZF9tdXRleF90cnlsb2Nr LmMNCmluZGV4IDAwYWQ2NWQuLjgwODViYzYgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJl YWRfbXV0ZXhfdHJ5bG9jay5jDQorKysgYi9zcmMvdGhyZWFkL3B0aHJlYWRfbXV0ZXhfdHJ5bG9j ay5jDQpAQCAtMSw2ICsxLDYgQEANCiAjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQogDQotaW50 IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhwdGhyZWFkX211dGV4X3QgKm0pDQoraW50IF9fcHRocmVh ZF9tdXRleF90cnlsb2NrKHB0aHJlYWRfbXV0ZXhfdCAqbSkNCiB7DQogCWludCB0aWQsIG9sZCwg b3duOw0KIAlwdGhyZWFkX3Qgc2VsZjsNCkBAIC01MCwzICs1MCw1IEBAIGludCBwdGhyZWFkX211 dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICptKQ0KIA0KIAlyZXR1cm4gMDsNCiB9DQorDQor d2Vha19hbGlhcyhfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jaywgcHRocmVhZF9tdXRleF90cnlsb2Nr KTsNCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfbXV0ZXhfdW5sb2NrLmMgYi9zcmMv dGhyZWFkL3B0aHJlYWRfbXV0ZXhfdW5sb2NrLmMNCmluZGV4IGI0YmQ3NGIuLjNmNmNlNGEgMTAw NjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJlYWRfbXV0ZXhfdW5sb2NrLmMNCisrKyBiL3NyYy90 aHJlYWQvcHRocmVhZF9tdXRleF91bmxvY2suYw0KQEAgLTMsNyArMyw3IEBADQogdm9pZCBfX3Zt X2xvY2tfaW1wbChpbnQpOw0KIHZvaWQgX192bV91bmxvY2tfaW1wbCh2b2lkKTsNCiANCi1pbnQg cHRocmVhZF9tdXRleF91bmxvY2socHRocmVhZF9tdXRleF90ICptKQ0KK2ludCBfX3B0aHJlYWRf bXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqbSkNCiB7DQogCXB0aHJlYWRfdCBzZWxmOw0K IAlpbnQgd2FpdGVycyA9IG0tPl9tX3dhaXRlcnM7DQpAQCAtMzUsMyArMzUsNSBAQCBpbnQgcHRo cmVhZF9tdXRleF91bmxvY2socHRocmVhZF9tdXRleF90ICptKQ0KIAkJX193YWtlKCZtLT5fbV9s b2NrLCAxLCAwKTsNCiAJcmV0dXJuIDA7DQogfQ0KKw0KK3dlYWtfYWxpYXMoX19wdGhyZWFkX211 dGV4X3VubG9jaywgcHRocmVhZF9tdXRleF91bmxvY2spOw0KZGlmZiAtLWdpdCBhL3NyYy90aHJl YWQvcHRocmVhZF9vbmNlLmMgYi9zcmMvdGhyZWFkL3B0aHJlYWRfb25jZS5jDQppbmRleCBlMDFm NmQ0Li5hNjc4NTk3IDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX29uY2UuYw0KKysr IGIvc3JjL3RocmVhZC9wdGhyZWFkX29uY2UuYw0KQEAgLTYsNyArNiw3IEBAIHN0YXRpYyB2b2lk IHVuZG8odm9pZCAqY29udHJvbCkNCiAJX193YWtlKGNvbnRyb2wsIDEsIDApOw0KIH0NCiANCi1p bnQgcHRocmVhZF9vbmNlKHB0aHJlYWRfb25jZV90ICpjb250cm9sLCB2b2lkICgqaW5pdCkodm9p ZCkpDQoraW50IF9fcHRocmVhZF9vbmNlKHB0aHJlYWRfb25jZV90ICpjb250cm9sLCB2b2lkICgq aW5pdCkodm9pZCkpDQogew0KIAlzdGF0aWMgaW50IHdhaXRlcnM7DQogDQpAQCAtMzQsMyArMzQs NSBAQCBpbnQgcHRocmVhZF9vbmNlKHB0aHJlYWRfb25jZV90ICpjb250cm9sLCB2b2lkICgqaW5p dCkodm9pZCkpDQogCQlyZXR1cm4gMDsNCiAJfQ0KIH0NCisNCit3ZWFrX2FsaWFzKF9fcHRocmVh ZF9vbmNlLCBwdGhyZWFkX29uY2UpOw0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvcHRocmVhZF9z ZWxmLmMgYi9zcmMvdGhyZWFkL3B0aHJlYWRfc2VsZi5jDQppbmRleCA1ZjllNjUxLi4wNGYzZTg3 IDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX3NlbGYuYw0KKysrIGIvc3JjL3RocmVh ZC9wdGhyZWFkX3NlbGYuYw0KQEAgLTEsNSArMSw3IEBADQogI2luY2x1ZGUgInB0aHJlYWRfaW1w bC5oIg0KIA0KKy8qIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugbm90IGFsbCBhcmNoIGhhdmUgX19w dGhyZWFkX3NlbGYgYXMgYSBzdGF0aWMNCisgICBzeW1ib2wuICovDQogcHRocmVhZF90IHB0aHJl YWRfc2VsZigpDQogew0KIAlyZXR1cm4gX19wdGhyZWFkX3NlbGYoKTsNCmRpZmYgLS1naXQgYS9z cmMvdGhyZWFkL3B0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUuYyBiL3NyYy90aHJlYWQvcHRocmVhZF9z ZXRjYW5jZWxzdGF0ZS5jDQppbmRleCAwNjBiY2RjLi4yMjY4MjE3IDEwMDY0NA0KLS0tIGEvc3Jj L3RocmVhZC9wdGhyZWFkX3NldGNhbmNlbHN0YXRlLmMNCisrKyBiL3NyYy90aHJlYWQvcHRocmVh ZF9zZXRjYW5jZWxzdGF0ZS5jDQpAQCAtMSw2ICsxLDYgQEANCiAjaW5jbHVkZSAicHRocmVhZF9p bXBsLmgiDQogDQotaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUoaW50IG5ldywgaW50ICpvbGQp DQoraW50IF9fcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShpbnQgbmV3LCBpbnQgKm9sZCkNCiB7DQog CWlmIChuZXcgPiAxVSkgcmV0dXJuIEVJTlZBTDsNCiAJaWYgKCFsaWJjLmhhc190aHJlYWRfcG9p bnRlcikgcmV0dXJuIEVOT1NZUzsNCkBAIC05LDMgKzksNSBAQCBpbnQgcHRocmVhZF9zZXRjYW5j ZWxzdGF0ZShpbnQgbmV3LCBpbnQgKm9sZCkNCiAJc2VsZi0+Y2FuY2VsZGlzYWJsZSA9IG5ldzsN CiAJcmV0dXJuIDA7DQogfQ0KKw0KK3dlYWtfYWxpYXMoX19wdGhyZWFkX3NldGNhbmNlbHN0YXRl LCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlKTsNCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJl YWRfc2V0Y2FuY2VsdHlwZS5jIGIvc3JjL3RocmVhZC9wdGhyZWFkX3NldGNhbmNlbHR5cGUuYw0K aW5kZXggYmYwYTNmMy4uZDQ5M2MxYiAxMDA2NDQNCi0tLSBhL3NyYy90aHJlYWQvcHRocmVhZF9z ZXRjYW5jZWx0eXBlLmMNCisrKyBiL3NyYy90aHJlYWQvcHRocmVhZF9zZXRjYW5jZWx0eXBlLmMN CkBAIC0xLDExICsxLDEzIEBADQogI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KIA0KK3ZvaWQg X19wdGhyZWFkX3Rlc3RjYW5jZWwodm9pZCk7DQorDQogaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlw ZShpbnQgbmV3LCBpbnQgKm9sZCkNCiB7DQogCXN0cnVjdCBwdGhyZWFkICpzZWxmID0gX19wdGhy ZWFkX3NlbGYoKTsNCiAJaWYgKG5ldyA+IDFVKSByZXR1cm4gRUlOVkFMOw0KIAlpZiAob2xkKSAq b2xkID0gc2VsZi0+Y2FuY2VsYXN5bmM7DQogCXNlbGYtPmNhbmNlbGFzeW5jID0gbmV3Ow0KLQlp ZiAobmV3KSBwdGhyZWFkX3Rlc3RjYW5jZWwoKTsNCisJaWYgKG5ldykgX19wdGhyZWFkX3Rlc3Rj YW5jZWwoKTsNCiAJcmV0dXJuIDA7DQogfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvcHRocmVh ZF9zZXRzcGVjaWZpYy5jIGIvc3JjL3RocmVhZC9wdGhyZWFkX3NldHNwZWNpZmljLmMNCmluZGV4 IDU1ZTQ2YTguLmRkMThiOTYgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJlYWRfc2V0c3Bl Y2lmaWMuYw0KKysrIGIvc3JjL3RocmVhZC9wdGhyZWFkX3NldHNwZWNpZmljLmMNCkBAIC0xLDYg KzEsNiBAQA0KICNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCiANCi1pbnQgcHRocmVhZF9zZXRz cGVjaWZpYyhwdGhyZWFkX2tleV90IGssIGNvbnN0IHZvaWQgKngpDQoraW50IF9fcHRocmVhZF9z ZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90IGssIGNvbnN0IHZvaWQgKngpDQogew0KIAlzdHJ1Y3Qg cHRocmVhZCAqc2VsZiA9IF9fcHRocmVhZF9zZWxmKCk7DQogCS8qIEF2b2lkIHVubmVjZXNzYXJ5 IENPVyAqLw0KQEAgLTEwLDMgKzEwLDUgQEAgaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMocHRocmVh ZF9rZXlfdCBrLCBjb25zdCB2b2lkICp4KQ0KIAl9DQogCXJldHVybiAwOw0KIH0NCisNCit3ZWFr X2FsaWFzKF9fcHRocmVhZF9zZXRzcGVjaWZpYywgcHRocmVhZF9zZXRzcGVjaWZpYyk7DQpkaWZm IC0tZ2l0IGEvc3JjL3RocmVhZC9wdGhyZWFkX3Rlc3RjYW5jZWwuYyBiL3NyYy90aHJlYWQvcHRo cmVhZF90ZXN0Y2FuY2VsLmMNCmluZGV4IGJhNWY3YzYuLmVlNDhlNmQgMTAwNjQ0DQotLS0gYS9z cmMvdGhyZWFkL3B0aHJlYWRfdGVzdGNhbmNlbC5jDQorKysgYi9zcmMvdGhyZWFkL3B0aHJlYWRf dGVzdGNhbmNlbC5jDQpAQCAtNyw3ICs3LDkgQEAgc3RhdGljIHZvaWQgZHVtbXkoKQ0KIA0KIHdl YWtfYWxpYXMoZHVtbXksIF9fdGVzdGNhbmNlbCk7DQogDQotdm9pZCBwdGhyZWFkX3Rlc3RjYW5j ZWwoKQ0KK3ZvaWQgX19wdGhyZWFkX3Rlc3RjYW5jZWwoKQ0KIHsNCiAJX190ZXN0Y2FuY2VsKCk7 DQogfQ0KKw0KK3dlYWtfYWxpYXMoX19wdGhyZWFkX3Rlc3RjYW5jZWwsIHB0aHJlYWRfdGVzdGNh bmNlbCk7DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC90aHJkX2N1cnJlbnQuYyBiL3NyYy90aHJl YWQvdGhyZF9jdXJyZW50LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi4z OWY4Yjg5DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL3RocmRfY3VycmVudC5jDQpA QCAtMCwwICsxLDkgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRo cmVhZHMuaD4NCisNCisvKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIG5vdCBhbGwgYXJjaCBoYXZl IF9fcHRocmVhZF9zZWxmIGFzIGEgc3RhdGljDQorICAgc3ltYm9sLiAqLw0KK3B0aHJlYWRfdCB0 aHJkX2N1cnJlbnQoKQ0KK3sNCisJcmV0dXJuIF9fcHRocmVhZF9zZWxmKCk7DQorfQ0KZGlmZiAt LWdpdCBhL3NyYy90aHJlYWQvdGhyZF9kZXRhY2guYyBiL3NyYy90aHJlYWQvdGhyZF9kZXRhY2gu Yw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjEyZGZmMTQNCi0tLSAvZGV2 L251bGwNCisrKyBiL3NyYy90aHJlYWQvdGhyZF9kZXRhY2guYw0KQEAgLTAsMCArMSwxMyBAQA0K KyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2lu dCBfX3B0aHJlYWRfZGV0YWNoKHB0aHJlYWRfdCB0KTsNCisNCitpbnQgdGhyZF9kZXRhY2godGhy ZF90IHQpDQorew0KKwkvKiBJbiB0aGUgYmVzdCBvZiBhbGwgd29ybGRzIHRoaXMgaXMgYSB0YWls IGNhbGwuICovDQorCWludCByZXQgPSBfX3B0aHJlYWRfZGV0YWNoKHQpOw0KKwlpZiAodGhyZF9z dWNjZXNzKQ0KKwkJcmV0dXJuIHJldCA/IHRocmRfZXJyb3IgOiB0aHJkX3N1Y2Nlc3M7DQorCXJl dHVybiByZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvdGhyZF9lcXVhbC5jIGIvc3Jj L3RocmVhZC90aHJkX2VxdWFsLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw Li5hYzQ5YTQ0DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL3RocmRfZXF1YWwuYw0K QEAgLTAsMCArMSw2IEBADQorI2luY2x1ZGUgPHRocmVhZHMuaD4NCisNCitpbnQgKHRocmRfZXF1 YWwpKHRocmRfdCBhLCB0aHJkX3QgYikNCit7DQorCXJldHVybiBhPT1iOw0KK30NCmRpZmYgLS1n aXQgYS9zcmMvdGhyZWFkL3RocmRfam9pbi5jIGIvc3JjL3RocmVhZC90aHJkX2pvaW4uYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjhkNjk4MzkNCi0tLSAvZGV2L251bGwN CisrKyBiL3NyYy90aHJlYWQvdGhyZF9qb2luLmMNCkBAIC0wLDAgKzEsMTQgQEANCisjaW5jbHVk ZSAicHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQorI2luY2x1ZGUgPHRo cmVhZHMuaD4NCisNCisvKiBDMTEgdGhyZWFkcyBjYW5ub3QgYmUgY2FuY2VsZWQsIHNvIHRoZXJl IGlzIG5vIG5lZWQgZm9yIGENCisgICBjYW5jZWxhdGlvbiBmdW5jdGlvbiBwb2ludGVyLCBoZXJl LiAqLw0KK2ludCB0aHJkX2pvaW4odGhyZF90IHQsIGludCAqcmVzKQ0KK3sNCisJaW50IHRtcDsN CisJd2hpbGUgKCh0bXAgPSB0LT50aWQpKSBfX3RpbWVkd2FpdCgmdC0+dGlkLCB0bXAsIDAsIDAs IDAsIDAsIDApOw0KKwlpZiAocmVzKSAqcmVzID0gKGludCkoaW50cHRyX3QpdC0+cmVzdWx0Ow0K KwlpZiAodC0+bWFwX2Jhc2UpIG11bm1hcCh0LT5tYXBfYmFzZSwgdC0+bWFwX3NpemUpOw0KKwly ZXR1cm4gMDsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC90c3NfY3JlYXRlLmMgYi9zcmMv dGhyZWFkL3Rzc19jcmVhdGUuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAu LjBjYmFkYzgNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvdHNzX2NyZWF0ZS5jDQpA QCAtMCwwICsxLDEzIEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0 aHJlYWRzLmg+DQorDQoraW50IF9fcHRocmVhZF9rZXlfY3JlYXRlKHB0aHJlYWRfa2V5X3QgKmss IHZvaWQgKCpkdG9yKSh2b2lkICopKTsNCisNCitpbnQgdHNzX2NyZWF0ZSh0c3NfdCAqdHNzLCB0 c3NfZHRvcl90IGR0b3IpDQorew0KKwlfX1RIUkRfQUJJX01BUks7DQorCS8qIERpZmZlcmVudCBl cnJvciByZXR1cm5zIGFyZSBwb3NzaWJsZS4gQyBnbHVlcyB0aGVtIHRvZ2V0aGVyIGludG8NCisJ ICAganVzdCBmYWlsdXJlIG5vdGlmaWNhdGlvbi4gQ2FuJ3QgYmUgb3B0aW1pemVkIHRvIGEgdGFp bCBjYWxsLA0KKwkgICB1bmxlc3MgdGhyZF9lcnJvciBlcXVhbHMgRUFHQUlOLiAqLw0KKwlyZXR1 cm4gX19wdGhyZWFkX2tleV9jcmVhdGUodHNzLCBkdG9yKSA/IHRocmRfZXJyb3IgOiB0aHJkX3N1 Y2Nlc3M7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvdHNzX2RlbGV0ZS5jIGIvc3JjL3Ro cmVhZC90c3NfZGVsZXRlLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5k NTA3MzFmDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL3Rzc19kZWxldGUuYw0KQEAg LTAsMCArMSw4IEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJl YWRzLmg+DQorDQoraW50IF9fcHRocmVhZF9rZXlfZGVsZXRlKHB0aHJlYWRfa2V5X3Qgayk7DQor DQordm9pZCAodHNzX2RlbGV0ZSkodHNzX3Qga2V5KSB7DQorCSh2b2lkKV9fcHRocmVhZF9rZXlf ZGVsZXRlKGtleSk7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvdHNzX3NldC5jIGIvc3Jj L3RocmVhZC90c3Nfc2V0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi43 ZTQ2NTljDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL3Rzc19zZXQuYw0KQEAgLTAs MCArMSwxMyBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFk cy5oPg0KKw0KK2ludCB0c3Nfc2V0KHRzc190IGssIHZvaWQgKngpDQorew0KKwlzdHJ1Y3QgcHRo cmVhZCAqc2VsZiA9IF9fcHRocmVhZF9zZWxmKCk7DQorCS8qIEF2b2lkIHVubmVjZXNzYXJ5IENP VyAqLw0KKwlpZiAoc2VsZi0+dHNkW2tdICE9IHgpIHsNCisJCXNlbGYtPnRzZFtrXSA9IHg7DQor CQlzZWxmLT50c2RfdXNlZCA9IDE7DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KZGlmZiAtLWdpdCBh L3NyYy90aW1lL3RocmRfc2xlZXAuYyBiL3NyYy90aW1lL3RocmRfc2xlZXAuYw0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmM1OTUwMzINCi0tLSAvZGV2L251bGwNCisrKyBi L3NyYy90aW1lL3RocmRfc2xlZXAuYw0KQEAgLTAsMCArMSwyMyBAQA0KKyNpbmNsdWRlIDx0aW1l Lmg+DQorI2luY2x1ZGUgPGVycm5vLmg+DQorI2luY2x1ZGUgInN5c2NhbGwuaCINCisjaW5jbHVk ZSAibGliYy5oIg0KKyNpbmNsdWRlICJ0aHJlYWRzLmgiDQorDQorLyogUm91Z2hseSBfX3N5c2Nh bGwgYWxyZWFkeSByZXR1cm5zIHRoZSByaWdodCB0aGluZzogMCBpZiBhbGwgd2VudA0KKyAgIHdl bGwgb3IgYSBuZWdhdGl2ZSBlcnJvciBpbmRpY2F0aW9uLCBvdGhlcndpc2UuIFVuZm9ydHVuYXRl bHkgdGhlIEMNCisgICBzdGFuZGFyZCBmb3Jlc2VlcyB0aGUgc3BlY2lhbCBjYXNlIG9mIGFuIGlu dGVycnVwdGVkIGNhbGwgYW5kIGZpeGVzDQorICAgdGhhdCBlcnJvciByZXR1cm4gdG8gLTEgKGlu c3RlYWQgb2YgaW50cm9kdWNpbmcgRUlOVFIpLiAqLw0KK2ludCB0aHJkX3NsZWVwKGNvbnN0IHN0 cnVjdCB0aW1lc3BlYyAqcmVxLCBzdHJ1Y3QgdGltZXNwZWMgKnJlbSkNCit7DQorICBpbnQgcmV0 ID0gX19zeXNjYWxsKFNZU19uYW5vc2xlZXAsIHJlcSwgcmVtKTsNCisgIC8vIGNvbXBpbGUgdGlt ZSBjb21wYXJpc29uLCBjb25zdGFudCBwcm9wYWdhdGVkDQorICBpZiAoRUlOVFIgIT0gMSkgew0K KyAgICBzd2l0Y2ggKHJldCkgew0KKyAgICBjYXNlIC1FSU5UUjogcmV0dXJuIC0xOw0KKyAgICBj YXNlIC0xOiByZXR1cm4gLUVJTlRSOw0KKyAgICB9DQorICB9DQorICAvLyBwb3RlbnRpYWxseSBh IHRhaWwgY2FsbA0KKyAgcmV0dXJuIHJldDsNCit9DQo= --=-GroVBd67FtqiMeB+WCq6-- --=-cHzuOE57hzipAoj/i6GN Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEABECAAYFAlPbZBMACgkQD9PoadrVN+LE8wCgiea4xIWWPjhkTpxX80/c67iV Mz4AnRfTuzaV/SZi7bQcOuqq4603kHqr =W5G6 -----END PGP SIGNATURE----- --=-cHzuOE57hzipAoj/i6GN--