From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] drm: Extract drm_vblank.[hc] Date: Thu, 1 Jun 2017 07:55:01 +0200 Message-ID: <20170601055501.zthbmhknlrujbxyh@phenom.ffwll.local> References: <20170524145212.27837-8-daniel.vetter@ffwll.ch> <20170531092146.12528-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Stefan Agner Cc: Daniel Vetter , Intel Graphics Development , DRI Development , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBNYXkgMzEsIDIwMTcgYXQgMTA6NTE6MTFBTSAtMDcwMCwgU3RlZmFuIEFnbmVyIHdy b3RlOgo+IE9uIDIwMTctMDUtMzEgMDI6MjEsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiBkcm1f aXJxLmMgY29udGFpbnMgYm90aCB0aGUgaXJxIGhlbHBlciBsaWJyYXJ5IChvcHRpb25hbCkgYW5k IHRoZQo+ID4gdmJsYW5rIHN1cHBvcnQgKG9wdGlvbmFsLCBidXQgcGFydCBvZiB0aGUgbW9kZXNl dCB1YXBpLCBhbmQgZG9lc24ndAo+ID4gcmVxdWlyZSB0aGUgdXNlIG9mIHRoZSBpcnEgaGVscGVy cyBhdCBhbGwuCj4gPiAKPiA+IFNwbGl0IHRoaXMgdXAgZm9yIG1vcmUgY2xhcml0eSBvZiB0aGUg c2NvcGUgb2YgdGhlIGluZGl2aWR1YWwgYml0cy4KPiA+IAo+ID4gdjI6IE1vdmUgbWlzcGxhY2Vk IGh1bmtzIHRvIHRoaXMgcGF0Y2ggKFN0ZWZhbikuCj4gPiAKPiAKPiBMb29rcyBnb29kIHRvIG1l Ogo+IAo+IFJldmlld2VkLWJ5OiBTdGVmYW4gQWduZXIgPHN0ZWZhbkBhZ25lci5jaD4KClRoYW5r cyBmb3IgeW91ciByZXZpZXcsIEkgYXBwbGllZCB0aGUgdGhlc2UgdHdvIHBhdGNoZXMuCi1EYW5p ZWwKCj4gCj4gLS0KPiBTdGVmYW4KPiAKPiA+IENjOiBTdGVmYW4gQWduZXIgPHN0ZWZhbkBhZ25l ci5jaD4KPiA+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50 ZWwuY29tPgo+ID4gLS0tCj4gPiAgRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWludGVybmFscy5yc3Qg fCAgICA5ICsKPiA+ICBEb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdCAgICAgICB8ICAgIDQg Ky0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICB8ICAgIDIgKy0KPiA+ ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVybmFsLmggICAgICB8ICAgIDMgKy0KPiA+ICBkcml2 ZXJzL2dwdS9kcm0vZHJtX2lycS5jICAgICAgICAgICB8IDE2MjMgKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fdmJsYW5rLmMgICAgICAg IHwgMTY0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIGluY2x1ZGUv ZHJtL2RybVAuaCAgICAgICAgICAgICAgICAgIHwgICAgNSArLQo+ID4gIGluY2x1ZGUvZHJtL2Ry bV9maWxlLmggICAgICAgICAgICAgIHwgICAgMSArCj4gPiAgaW5jbHVkZS9kcm0vZHJtX2lycS5o ICAgICAgICAgICAgICAgfCAgMTU4ICstLS0KPiA+ICBpbmNsdWRlL2RybS9kcm1fcHJpbWUuaCAg ICAgICAgICAgICB8ICAgIDIgKwo+ID4gIGluY2x1ZGUvZHJtL2RybV92YmxhbmsuaCAgICAgICAg ICAgIHwgIDE4MSArKysrCj4gPiAgMTEgZmlsZXMgY2hhbmdlZCwgMTg2OSBpbnNlcnRpb25zKCsp LCAxNzY0IGRlbGV0aW9ucygtKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vZHJtX3ZibGFuay5jCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV92 YmxhbmsuaAo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWludGVy bmFscy5yc3QKPiA+IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWludGVybmFscy5yc3QKPiA+IGlu ZGV4IGQyMThkZDI5MjIxYS4uZGQyOGUzOWNmOTY2IDEwMDY0NAo+ID4gLS0tIGEvRG9jdW1lbnRh dGlvbi9ncHUvZHJtLWludGVybmFscy5yc3QKPiA+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2Ry bS1pbnRlcm5hbHMucnN0Cj4gPiBAQCAtMjA0LDYgKzIwNCwxNSBAQCBkcm1fZGV2aWNlIDxkcm1f ZGV2aWNlPmAgaXJxX2VuYWJsZWQgZmllbGQgdG8gMSB1cG9uCj4gPiAgcmVnaXN0cmF0aW9uIG9m IHRoZSBJUlFzLCBhbmQgY2xlYXIgaXQgdG8gMCBhZnRlciB1bnJlZ2lzdGVyaW5nIHRoZQo+ID4g IElSUXMuCj4gPiAgCj4gPiArSVJRIEhlbHBlciBMaWJyYXJ5Cj4gPiArfn5+fn5+fn5+fn5+fn5+ fn5+Cj4gPiArCj4gPiArLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMK PiA+ICsgICA6ZG9jOiBpcnEgaGVscGVycwo+ID4gKwo+ID4gKy4uIGtlcm5lbC1kb2M6OiBkcml2 ZXJzL2dwdS9kcm0vZHJtX2lycS5jCj4gPiArICAgOmV4cG9ydDoKPiA+ICsKPiA+ICBNZW1vcnkg TWFuYWdlciBJbml0aWFsaXphdGlvbgo+ID4gIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ Cj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy5yc3QgYi9E b2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdAo+ID4gaW5kZXggYmZlY2QyMWE4Y2RmLi4yZDc3 Yzk1ODAxNjQgMTAwNjQ0Cj4gPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdAo+ ID4gKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy5yc3QKPiA+IEBAIC02MTIsOCArNjEy LDggQEAgb3BlcmF0aW9uIGhhbmRsZXIuCj4gPiAgVmVydGljYWwgQmxhbmtpbmcgYW5kIEludGVy cnVwdCBIYW5kbGluZyBGdW5jdGlvbnMgUmVmZXJlbmNlCj4gPiAgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiAgCj4gPiAtLi4g a2VybmVsLWRvYzo6IGluY2x1ZGUvZHJtL2RybV9pcnEuaAo+ID4gKy4uIGtlcm5lbC1kb2M6OiBp bmNsdWRlL2RybS9kcm1fdmJsYW5rLmgKPiA+ICAgICA6aW50ZXJuYWw6Cj4gPiAgCj4gPiAtLi4g a2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKPiA+ICsuLiBrZXJuZWwtZG9j OjogZHJpdmVycy9ncHUvZHJtL2RybV92YmxhbmsuYwo+ID4gICAgIDpleHBvcnQ6Cj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlCj4gPiBpbmRleCBjMTU2ZmVjZmIzNjIuLmFjYzg4OTQyYzJlNSAxMDA2NDQKPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlCj4gPiBAQCAtMTYsNyArMTYsNyBAQCBkcm0teSAgICAgICA6PQlkcm1fYXV0aC5vIGRybV9i dWZzLm8gZHJtX2NhY2hlLm8gXAo+ID4gIAkJZHJtX2ZyYW1lYnVmZmVyLm8gZHJtX2Nvbm5lY3Rv ci5vIGRybV9ibGVuZC5vIFwKPiA+ICAJCWRybV9lbmNvZGVyLm8gZHJtX21vZGVfb2JqZWN0Lm8g ZHJtX3Byb3BlcnR5Lm8gXAo+ID4gIAkJZHJtX3BsYW5lLm8gZHJtX2NvbG9yX21nbXQubyBkcm1f cHJpbnQubyBcCj4gPiAtCQlkcm1fZHVtYl9idWZmZXJzLm8gZHJtX21vZGVfY29uZmlnLm8KPiA+ ICsJCWRybV9kdW1iX2J1ZmZlcnMubyBkcm1fbW9kZV9jb25maWcubyBkcm1fdmJsYW5rLm8KPiA+ ICAKPiA+ICBkcm0tJChDT05GSUdfRFJNX0xJQl9SQU5ET00pICs9IGxpYi9kcm1fcmFuZG9tLm8K PiA+ICBkcm0tJChDT05GSUdfRFJNX1ZNKSArPSBkcm1fdm0ubwo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJu YWwuaAo+ID4gaW5kZXggYmNhMmM2NmM1ZDI4Li42YTBjYmNjODQ1MzQgMTAwNjQ0Cj4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVybmFsLmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1faW50ZXJuYWwuaAo+ID4gQEAgLTU0LDggKzU0LDkgQEAgaW50IGRybV9uYW1lX2luZm8o c3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKTsKPiA+ICBpbnQgZHJtX2NsaWVudHNfaW5m byhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQqIGRhdGEpOwo+ID4gIGludCBkcm1fZ2VtX25hbWVf aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpOwo+ID4gIAo+ID4gLS8qIGRybV9p cnEuYyAqLwo+ID4gKy8qIGRybV92YmxhbmsuYyAqLwo+ID4gIGV4dGVybiB1bnNpZ25lZCBpbnQg ZHJtX3RpbWVzdGFtcF9tb25vdG9uaWM7Cj4gPiArdm9pZCBkcm1fdmJsYW5rX2Rpc2FibGVfYW5k X3NhdmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUpOwo+ID4gIAo+ ID4gIC8qIElPQ1RMUyAqLwo+ID4gIGludCBkcm1fd2FpdF92Ymxhbmsoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSwKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJt X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwo+ID4gaW5kZXggYzdkZWJhYWQ2N2Y4 Li4yOGQ3MzZjM2ZjYjQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5j Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCj4gPiBAQCAtMyw2ICszLDI1IEBA Cj4gPiAgICoKPiA+ICAgKiBcYXV0aG9yIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZh bGludXguY29tPgo+ID4gICAqIFxhdXRob3IgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXgu Y29tPgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+ ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiArICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAo+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4K PiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gPiArICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks Cj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gPiArICogVkEgTElOVVggU1lTVEVNUyBBTkQvT1Ig SVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgo+ID4gKyAq IE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLAo+ID4gKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ID4gKyAqIE9USEVSIERFQUxJTkdT IElOIFRIRSBTT0ZUV0FSRS4KPiA+ICAgKi8KPiA+ICAKPiA+ICAvKgo+ID4gQEAgLTMyLDQyOSAr NTEsMTUgQEAKPiA+ICAgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gPiAgICov Cj4gPiAgCj4gPiArI2luY2x1ZGUgPGRybS9kcm1faXJxLmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9k cm1QLmg+Cj4gPiAtI2luY2x1ZGUgImRybV90cmFjZS5oIgo+ID4gLSNpbmNsdWRlICJkcm1faW50 ZXJuYWwuaCIKPiA+ICAKPiA+ICAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CS8qIEZvciB0 YXNrIHF1ZXVlIHN1cHBvcnQgKi8KPiA+IC0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ID4gIAo+ ID4gICNpbmNsdWRlIDxsaW51eC92Z2FhcmIuaD4KPiA+ICAjaW5jbHVkZSA8bGludXgvZXhwb3J0 Lmg+Cj4gPiAgCj4gPiAtLyogUmV0cnkgdGltZXN0YW1wIGNhbGN1bGF0aW9uIHVwIHRvIDMgdGlt ZXMgdG8gc2F0aXNmeQo+ID4gLSAqIGRybV90aW1lc3RhbXBfcHJlY2lzaW9uIGJlZm9yZSBnaXZp bmcgdXAuCj4gPiAtICovCj4gPiAtI2RlZmluZSBEUk1fVElNRVNUQU1QX01BWFJFVFJJRVMgMwo+ ID4gLQo+ID4gLS8qIFRocmVzaG9sZCBpbiBuYW5vc2Vjb25kcyBmb3IgZGV0ZWN0aW9uIG9mIHJl ZHVuZGFudAo+ID4gLSAqIHZibGFuayBpcnEgaW4gZHJtX2hhbmRsZV92YmxhbmsoKS4gMSBtc2Vj IHNob3VsZCBiZSBvay4KPiA+IC0gKi8KPiA+IC0jZGVmaW5lIERSTV9SRURVTkRBTlRfVkJMSVJR X1RIUkVTSF9OUyAxMDAwMDAwCj4gPiAtCj4gPiAtc3RhdGljIGJvb2wKPiA+IC1kcm1fZ2V0X2xh c3RfdmJsdGltZXN0YW1wKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBl LAo+ID4gLQkJCSAgc3RydWN0IHRpbWV2YWwgKnR2YmxhbmssIGJvb2wgaW5fdmJsYW5rX2lycSk7 Cj4gPiAtCj4gPiAtc3RhdGljIHVuc2lnbmVkIGludCBkcm1fdGltZXN0YW1wX3ByZWNpc2lvbiA9 IDIwOyAgLyogRGVmYXVsdCB0byAyMCB1c2Vjcy4gKi8KPiA+IC0KPiA+IC0vKgo+ID4gLSAqIERl ZmF1bHQgdG8gdXNlIG1vbm90b25pYyB0aW1lc3RhbXBzIGZvciB3YWl0LWZvci12YmxhbmsgYW5k IHBhZ2UtZmxpcAo+ID4gLSAqIGNvbXBsZXRlIGV2ZW50cy4KPiA+IC0gKi8KPiA+IC11bnNpZ25l ZCBpbnQgZHJtX3RpbWVzdGFtcF9tb25vdG9uaWMgPSAxOwo+ID4gLQo+ID4gLXN0YXRpYyBpbnQg ZHJtX3ZibGFua19vZmZkZWxheSA9IDUwMDA7ICAgIC8qIERlZmF1bHQgdG8gNTAwMCBtc2Vjcy4g Ki8KPiA+IC0KPiA+IC1tb2R1bGVfcGFyYW1fbmFtZWQodmJsYW5rb2ZmZGVsYXksIGRybV92Ymxh bmtfb2ZmZGVsYXksIGludCwgMDYwMCk7Cj4gPiAtbW9kdWxlX3BhcmFtX25hbWVkKHRpbWVzdGFt cF9wcmVjaXNpb25fdXNlYywgZHJtX3RpbWVzdGFtcF9wcmVjaXNpb24sCj4gPiBpbnQsIDA2MDAp Owo+ID4gLW1vZHVsZV9wYXJhbV9uYW1lZCh0aW1lc3RhbXBfbW9ub3RvbmljLCBkcm1fdGltZXN0 YW1wX21vbm90b25pYywgaW50LCAwNjAwKTsKPiA+IC1NT0RVTEVfUEFSTV9ERVNDKHZibGFua29m ZmRlbGF5LCAiRGVsYXkgdW50aWwgdmJsYW5rIGlycSBhdXRvLWRpc2FibGUKPiA+IFttc2Vjc10g KDA6IG5ldmVyIGRpc2FibGUsIDwwOiBkaXNhYmxlIGltbWVkaWF0ZWx5KSIpOwo+ID4gLU1PRFVM RV9QQVJNX0RFU0ModGltZXN0YW1wX3ByZWNpc2lvbl91c2VjLCAiTWF4LiBlcnJvciBvbiB0aW1l c3RhbXBzIFt1c2Vjc10iKTsKPiA+IC1NT0RVTEVfUEFSTV9ERVNDKHRpbWVzdGFtcF9tb25vdG9u aWMsICJVc2UgbW9ub3RvbmljIHRpbWVzdGFtcHMiKTsKPiA+IC0KPiA+IC1zdGF0aWMgdm9pZCBz dG9yZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsCj4g PiAtCQkJIHUzMiB2YmxhbmtfY291bnRfaW5jLAo+ID4gLQkJCSBzdHJ1Y3QgdGltZXZhbCAqdF92 YmxhbmssIHUzMiBsYXN0KQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJs YW5rID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gLQo+ID4gLQlhc3NlcnRfc3Bpbl9sb2NrZWQo JmRldi0+dmJsYW5rX3RpbWVfbG9jayk7Cj4gPiAtCj4gPiAtCXZibGFuay0+bGFzdCA9IGxhc3Q7 Cj4gPiAtCj4gPiAtCXdyaXRlX3NlcWxvY2soJnZibGFuay0+c2VxbG9jayk7Cj4gPiAtCXZibGFu ay0+dGltZSA9ICp0X3ZibGFuazsKPiA+IC0JdmJsYW5rLT5jb3VudCArPSB2YmxhbmtfY291bnRf aW5jOwo+ID4gLQl3cml0ZV9zZXF1bmxvY2soJnZibGFuay0+c2VxbG9jayk7Cj4gPiAtfQo+ID4g LQo+ID4gLS8qCj4gPiAtICogIk5vIGh3IGNvdW50ZXIiIGZhbGxiYWNrIGltcGxlbWVudGF0aW9u IG9mIC5nZXRfdmJsYW5rX2NvdW50ZXIoKSBob29rLAo+ID4gLSAqIGlmIHRoZXJlIGlzIG5vIHVz ZWFibGUgaGFyZHdhcmUgZnJhbWUgY291bnRlciBhdmFpbGFibGUuCj4gPiAtICovCj4gPiAtc3Rh dGljIHUzMiBkcm1fdmJsYW5rX25vX2h3X2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dW5zaWduZWQgaW50IHBpcGUpCj4gPiAtewo+ID4gLQlXQVJOX09OX09OQ0UoZGV2LT5tYXhfdmJs YW5rX2NvdW50ICE9IDApOwo+ID4gLQlyZXR1cm4gMDsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGlj IHUzMiBfX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25l ZCBpbnQgcGlwZSkKPiA+IC17Cj4gPiAtCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwg RFJJVkVSX01PREVTRVQpKSB7Cj4gPiAtCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBkcm1fY3J0 Y19mcm9tX2luZGV4KGRldiwgcGlwZSk7Cj4gPiAtCj4gPiAtCQlpZiAoY3J0Yy0+ZnVuY3MtPmdl dF92YmxhbmtfY291bnRlcikKPiA+IC0JCQlyZXR1cm4gY3J0Yy0+ZnVuY3MtPmdldF92Ymxhbmtf Y291bnRlcihjcnRjKTsKPiA+IC0JfQo+ID4gLQo+ID4gLQlpZiAoZGV2LT5kcml2ZXItPmdldF92 YmxhbmtfY291bnRlcikKPiA+IC0JCXJldHVybiBkZXYtPmRyaXZlci0+Z2V0X3ZibGFua19jb3Vu dGVyKGRldiwgcGlwZSk7Cj4gPiAtCj4gPiAtCXJldHVybiBkcm1fdmJsYW5rX25vX2h3X2NvdW50 ZXIoZGV2LCBwaXBlKTsKPiA+IC19Cj4gPiAtCj4gPiAtLyoKPiA+IC0gKiBSZXNldCB0aGUgc3Rv cmVkIHRpbWVzdGFtcCBmb3IgdGhlIGN1cnJlbnQgdmJsYW5rIGNvdW50IHRvIGNvcnJlc3BvbmQK PiA+IC0gKiB0byB0aGUgbGFzdCB2Ymxhbmsgb2NjdXJyZWQuCj4gPiAtICoKPiA+IC0gKiBPbmx5 IHRvIGJlIGNhbGxlZCBmcm9tIGRybV9jcnRjX3ZibGFua19vbigpLgo+ID4gLSAqCj4gPiAtICog Tm90ZTogY2FsbGVyIG11c3QgaG9sZCAmZHJtX2RldmljZS52YmxfbG9jayBzaW5jZSB0aGlzIHJl YWRzICYgd3JpdGVzCj4gPiAtICogZGV2aWNlIHZibGFuayBmaWVsZHMuCj4gPiAtICovCj4gPiAt c3RhdGljIHZvaWQgZHJtX3Jlc2V0X3ZibGFua190aW1lc3RhbXAoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiA+IHVuc2lnbmVkIGludCBwaXBlKQo+ID4gLXsKPiA+IC0JdTMyIGN1cl92Ymxhbms7 Cj4gPiAtCWJvb2wgcmM7Cj4gPiAtCXN0cnVjdCB0aW1ldmFsIHRfdmJsYW5rOwo+ID4gLQlpbnQg Y291bnQgPSBEUk1fVElNRVNUQU1QX01BWFJFVFJJRVM7Cj4gPiAtCj4gPiAtCXNwaW5fbG9jaygm ZGV2LT52YmxhbmtfdGltZV9sb2NrKTsKPiA+IC0KPiA+IC0JLyoKPiA+IC0JICogc2FtcGxlIHRo ZSBjdXJyZW50IGNvdW50ZXIgdG8gYXZvaWQgcmFuZG9tIGp1bXBzCj4gPiAtCSAqIHdoZW4gZHJt X3ZibGFua19lbmFibGUoKSBhcHBsaWVzIHRoZSBkaWZmCj4gPiAtCSAqLwo+ID4gLQlkbyB7Cj4g PiAtCQljdXJfdmJsYW5rID0gX19nZXRfdmJsYW5rX2NvdW50ZXIoZGV2LCBwaXBlKTsKPiA+IC0J CXJjID0gZHJtX2dldF9sYXN0X3ZibHRpbWVzdGFtcChkZXYsIHBpcGUsICZ0X3ZibGFuaywgZmFs c2UpOwo+ID4gLQl9IHdoaWxlIChjdXJfdmJsYW5rICE9IF9fZ2V0X3ZibGFua19jb3VudGVyKGRl diwgcGlwZSkgJiYgLS1jb3VudCA+IDApOwo+ID4gLQo+ID4gLQkvKgo+ID4gLQkgKiBPbmx5IHJl aW5pdGlhbGl6ZSBjb3JyZXNwb25kaW5nIHZibGFuayB0aW1lc3RhbXAgaWYgaGlnaC1wcmVjaXNp b24gcXVlcnkKPiA+IC0JICogYXZhaWxhYmxlIGFuZCBkaWRuJ3QgZmFpbC4gT3RoZXJ3aXNlIHJl aW5pdGlhbGl6ZSBkZWxheWVkIGF0IG5leHQgdmJsYW5rCj4gPiAtCSAqIGludGVycnVwdCBhbmQg YXNzaWduIDAgZm9yIG5vdywgdG8gbWFyayB0aGUgdmJsYW5rdGltZXN0YW1wIGFzIGludmFsaWQu Cj4gPiAtCSAqLwo+ID4gLQlpZiAoIXJjKQo+ID4gLQkJdF92YmxhbmsgPSAoc3RydWN0IHRpbWV2 YWwpIHswLCAwfTsKPiA+IC0KPiA+IC0JLyoKPiA+IC0JICogKzEgdG8gbWFrZSBzdXJlIHVzZXIg d2lsbCBuZXZlciBzZWUgdGhlIHNhbWUKPiA+IC0JICogdmJsYW5rIGNvdW50ZXIgdmFsdWUgYmVm b3JlIGFuZCBhZnRlciBhIG1vZGVzZXQKPiA+IC0JICovCj4gPiAtCXN0b3JlX3ZibGFuayhkZXYs IHBpcGUsIDEsICZ0X3ZibGFuaywgY3VyX3ZibGFuayk7Cj4gPiAtCj4gPiAtCXNwaW5fdW5sb2Nr KCZkZXYtPnZibGFua190aW1lX2xvY2spOwo+ID4gLX0KPiA+IC0KPiA+IC0vKgo+ID4gLSAqIENh bGwgYmFjayBpbnRvIHRoZSBkcml2ZXIgdG8gdXBkYXRlIHRoZSBhcHByb3ByaWF0ZSB2Ymxhbmsg Y291bnRlcgo+ID4gLSAqIChzcGVjaWZpZWQgYnkgQHBpcGUpLiAgRGVhbCB3aXRoIHdyYXBhcm91 bmQsIGlmIGl0IG9jY3VycmVkLCBhbmQKPiA+IC0gKiB1cGRhdGUgdGhlIGxhc3QgcmVhZCB2YWx1 ZSBzbyB3ZSBjYW4gZGVhbCB3aXRoIHdyYXBhcm91bmQgb24gdGhlIG5leHQKPiA+IC0gKiBjYWxs IGlmIG5lY2Vzc2FyeS4KPiA+IC0gKgo+ID4gLSAqIE9ubHkgbmVjZXNzYXJ5IHdoZW4gZ29pbmcg ZnJvbSBvZmYtPm9uLCB0byBhY2NvdW50IGZvciBmcmFtZXMgd2UKPiA+IC0gKiBkaWRuJ3QgZ2V0 IGFuIGludGVycnVwdCBmb3IuCj4gPiAtICoKPiA+IC0gKiBOb3RlOiBjYWxsZXIgbXVzdCBob2xk ICZkcm1fZGV2aWNlLnZibF9sb2NrIHNpbmNlIHRoaXMgcmVhZHMgJiB3cml0ZXMKPiA+IC0gKiBk ZXZpY2UgdmJsYW5rIGZpZWxkcy4KPiA+IC0gKi8KPiA+IC1zdGF0aWMgdm9pZCBkcm1fdXBkYXRl X3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwK PiA+IC0JCQkJICAgIGJvb2wgaW5fdmJsYW5rX2lycSkKPiA+IC17Cj4gPiAtCXN0cnVjdCBkcm1f dmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYtPnZibGFua1twaXBlXTsKPiA+IC0JdTMyIGN1cl92 YmxhbmssIGRpZmY7Cj4gPiAtCWJvb2wgcmM7Cj4gPiAtCXN0cnVjdCB0aW1ldmFsIHRfdmJsYW5r Owo+ID4gLQlpbnQgY291bnQgPSBEUk1fVElNRVNUQU1QX01BWFJFVFJJRVM7Cj4gPiAtCWludCBm cmFtZWR1cl9ucyA9IHZibGFuay0+ZnJhbWVkdXJfbnM7Cj4gPiAtCj4gPiAtCS8qCj4gPiAtCSAq IEludGVycnVwdHMgd2VyZSBkaXNhYmxlZCBwcmlvciB0byB0aGlzIGNhbGwsIHNvIGRlYWwgd2l0 aCBjb3VudGVyCj4gPiAtCSAqIHdyYXAgaWYgbmVlZGVkLgo+ID4gLQkgKiBOT1RFISAgSXQncyBw b3NzaWJsZSB3ZSBsb3N0IGEgZnVsbCBkZXYtPm1heF92YmxhbmtfY291bnQgKyAxIGV2ZW50cwo+ ID4gLQkgKiBoZXJlIGlmIHRoZSByZWdpc3RlciBpcyBzbWFsbCBvciB3ZSBoYWQgdmJsYW5rIGlu dGVycnVwdHMgb2ZmIGZvcgo+ID4gLQkgKiBhIGxvbmcgdGltZS4KPiA+IC0JICoKPiA+IC0JICog V2UgcmVwZWF0IHRoZSBoYXJkd2FyZSB2YmxhbmsgY291bnRlciAmIHRpbWVzdGFtcCBxdWVyeSB1 bnRpbAo+ID4gLQkgKiB3ZSBnZXQgY29uc2lzdGVudCByZXN1bHRzLiBUaGlzIHRvIHByZXZlbnQg cmFjZXMgYmV0d2VlbiBncHUKPiA+IC0JICogdXBkYXRpbmcgaXRzIGhhcmR3YXJlIGNvdW50ZXIg d2hpbGUgd2UgYXJlIHJldHJpZXZpbmcgdGhlCj4gPiAtCSAqIGNvcnJlc3BvbmRpbmcgdmJsYW5r IHRpbWVzdGFtcC4KPiA+IC0JICovCj4gPiAtCWRvIHsKPiA+IC0JCWN1cl92YmxhbmsgPSBfX2dl dF92YmxhbmtfY291bnRlcihkZXYsIHBpcGUpOwo+ID4gLQkJcmMgPSBkcm1fZ2V0X2xhc3RfdmJs dGltZXN0YW1wKGRldiwgcGlwZSwgJnRfdmJsYW5rLCBpbl92YmxhbmtfaXJxKTsKPiA+IC0JfSB3 aGlsZSAoY3VyX3ZibGFuayAhPSBfX2dldF92YmxhbmtfY291bnRlcihkZXYsIHBpcGUpICYmIC0t Y291bnQgPiAwKTsKPiA+IC0KPiA+IC0JaWYgKGRldi0+bWF4X3ZibGFua19jb3VudCAhPSAwKSB7 Cj4gPiAtCQkvKiB0cnVzdCB0aGUgaHcgY291bnRlciB3aGVuIGl0J3MgYXJvdW5kICovCj4gPiAt CQlkaWZmID0gKGN1cl92YmxhbmsgLSB2YmxhbmstPmxhc3QpICYgZGV2LT5tYXhfdmJsYW5rX2Nv dW50Owo+ID4gLQl9IGVsc2UgaWYgKHJjICYmIGZyYW1lZHVyX25zKSB7Cj4gPiAtCQljb25zdCBz dHJ1Y3QgdGltZXZhbCAqdF9vbGQ7Cj4gPiAtCQl1NjQgZGlmZl9uczsKPiA+IC0KPiA+IC0JCXRf b2xkID0gJnZibGFuay0+dGltZTsKPiA+IC0JCWRpZmZfbnMgPSB0aW1ldmFsX3RvX25zKCZ0X3Zi bGFuaykgLSB0aW1ldmFsX3RvX25zKHRfb2xkKTsKPiA+IC0KPiA+IC0JCS8qCj4gPiAtCQkgKiBG aWd1cmUgb3V0IGhvdyBtYW55IHZibGFua3Mgd2UndmUgbWlzc2VkIGJhc2VkCj4gPiAtCQkgKiBv biB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgdGltZXN0YW1wcyBhbmQgdGhlCj4gPiAtCQkgKiBmcmFt ZS9maWVsZCBkdXJhdGlvbi4KPiA+IC0JCSAqLwo+ID4gLQkJZGlmZiA9IERJVl9ST1VORF9DTE9T RVNUX1VMTChkaWZmX25zLCBmcmFtZWR1cl9ucyk7Cj4gPiAtCj4gPiAtCQlpZiAoZGlmZiA9PSAw ICYmIGluX3ZibGFua19pcnEpCj4gPiAtCQkJRFJNX0RFQlVHX1ZCTCgiY3J0YyAldTogUmVkdW5k YW50IHZibGlycSBpZ25vcmVkLiIKPiA+IC0JCQkJICAgICAgIiBkaWZmX25zID0gJWxsZCwgZnJh bWVkdXJfbnMgPSAlZClcbiIsCj4gPiAtCQkJCSAgICAgIHBpcGUsIChsb25nIGxvbmcpIGRpZmZf bnMsIGZyYW1lZHVyX25zKTsKPiA+IC0JfSBlbHNlIHsKPiA+IC0JCS8qIHNvbWUga2luZCBvZiBk ZWZhdWx0IGZvciBkcml2ZXJzIHcvbyBhY2N1cmF0ZSB2YmwgdGltZXN0YW1waW5nICovCj4gPiAt CQlkaWZmID0gaW5fdmJsYW5rX2lycSA/IDEgOiAwOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCS8qCj4g PiAtCSAqIFdpdGhpbiBhIGRybV92YmxhbmtfcHJlX21vZGVzZXQgLSBkcm1fdmJsYW5rX3Bvc3Rf bW9kZXNldAo+ID4gLQkgKiBpbnRlcnZhbD8gSWYgc28gdGhlbiB2YmxhbmsgaXJxcyBrZWVwIHJ1 bm5pbmcgYW5kIGl0IHdpbGwgbGlrZWx5Cj4gPiAtCSAqIGhhcHBlbiB0aGF0IHRoZSBoYXJkd2Fy ZSB2YmxhbmsgY291bnRlciBpcyBub3QgdHJ1c3R3b3J0aHkgYXMgaXQKPiA+IC0JICogbWlnaHQg cmVzZXQgYXQgc29tZSBwb2ludCBpbiB0aGF0IGludGVydmFsIGFuZCB2YmxhbmsgdGltZXN0YW1w cwo+ID4gLQkgKiBhcmUgbm90IHRydXN0d29ydGh5IGVpdGhlciBpbiB0aGF0IGludGVydmFsLiBJ b3cuIHRoaXMgY2FuIHJlc3VsdAo+ID4gLQkgKiBpbiBhIGJvZ3VzIGRpZmYgPj4gMSB3aGljaCBt dXN0IGJlIGF2b2lkZWQgYXMgaXQgd291bGQgY2F1c2UKPiA+IC0JICogcmFuZG9tIGxhcmdlIGZv cndhcmQganVtcHMgb2YgdGhlIHNvZnR3YXJlIHZibGFuayBjb3VudGVyLgo+ID4gLQkgKi8KPiA+ IC0JaWYgKGRpZmYgPiAxICYmICh2YmxhbmstPmlubW9kZXNldCAmIDB4MikpIHsKPiA+IC0JCURS TV9ERUJVR19WQkwoImNsYW1waW5nIHZibGFuayBidW1wIHRvIDEgb24gY3J0YyAldTogZGlmZnI9 JXUiCj4gPiAtCQkJICAgICAgIiBkdWUgdG8gcHJlLW1vZGVzZXQuXG4iLCBwaXBlLCBkaWZmKTsK PiA+IC0JCWRpZmYgPSAxOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCURSTV9ERUJVR19WQkwoInVwZGF0 aW5nIHZibGFuayBjb3VudCBvbiBjcnRjICV1OiIKPiA+IC0JCSAgICAgICIgY3VycmVudD0ldSwg ZGlmZj0ldSwgaHc9JXUgaHdfbGFzdD0ldVxuIiwKPiA+IC0JCSAgICAgIHBpcGUsIHZibGFuay0+ Y291bnQsIGRpZmYsIGN1cl92YmxhbmssIHZibGFuay0+bGFzdCk7Cj4gPiAtCj4gPiAtCWlmIChk aWZmID09IDApIHsKPiA+IC0JCVdBUk5fT05fT05DRShjdXJfdmJsYW5rICE9IHZibGFuay0+bGFz dCk7Cj4gPiAtCQlyZXR1cm47Cj4gPiAtCX0KPiA+IC0KPiA+IC0JLyoKPiA+IC0JICogT25seSBy ZWluaXRpYWxpemUgY29ycmVzcG9uZGluZyB2YmxhbmsgdGltZXN0YW1wIGlmIGhpZ2gtcHJlY2lz aW9uIHF1ZXJ5Cj4gPiAtCSAqIGF2YWlsYWJsZSBhbmQgZGlkbid0IGZhaWwsIG9yIHdlIHdlcmUg Y2FsbGVkIGZyb20gdGhlIHZibGFuayBpbnRlcnJ1cHQuCj4gPiAtCSAqIE90aGVyd2lzZSByZWlu aXRpYWxpemUgZGVsYXllZCBhdCBuZXh0IHZibGFuayBpbnRlcnJ1cHQgYW5kIGFzc2lnbiAwCj4g PiAtCSAqIGZvciBub3csIHRvIG1hcmsgdGhlIHZibGFua3RpbWVzdGFtcCBhcyBpbnZhbGlkLgo+ ID4gLQkgKi8KPiA+IC0JaWYgKCFyYyAmJiBpbl92YmxhbmtfaXJxKQo+ID4gLQkJdF92Ymxhbmsg PSAoc3RydWN0IHRpbWV2YWwpIHswLCAwfTsKPiA+IC0KPiA+IC0Jc3RvcmVfdmJsYW5rKGRldiwg cGlwZSwgZGlmZiwgJnRfdmJsYW5rLCBjdXJfdmJsYW5rKTsKPiA+IC19Cj4gPiAtCj4gPiAtc3Rh dGljIHUzMiBkcm1fdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVk IGludCBwaXBlKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5rID0g JmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gLQo+ID4gLQlpZiAoV0FSTl9PTihwaXBlID49IGRldi0+ bnVtX2NydGNzKSkKPiA+IC0JCXJldHVybiAwOwo+ID4gLQo+ID4gLQlyZXR1cm4gdmJsYW5rLT5j b3VudDsKPiA+IC19Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX2FjY3VyYXRlX3ZibGFua19j b3VudCAtIHJldHJpZXZlIHRoZSBtYXN0ZXIgdmJsYW5rIGNvdW50ZXIKPiA+IC0gKiBAY3J0Yzog d2hpY2ggY291bnRlciB0byByZXRyaWV2ZQo+ID4gLSAqCj4gPiAtICogVGhpcyBmdW5jdGlvbiBp cyBzaW1pbGFyIHRvIEBkcm1fY3J0Y192YmxhbmtfY291bnQgYnV0IHRoaXMKPiA+IC0gKiBmdW5j dGlvbiBpbnRlcnBvbGF0ZXMgdG8gaGFuZGxlIGEgcmFjZSB3aXRoIHZibGFuayBpcnEncy4KPiA+ IC0gKgo+ID4gLSAqIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgaGFyZHdhcmUgdGhhdCBjYW4g b2J0YWluIHRoZSBzY2Fub3V0Cj4gPiAtICogcG9zaXRpb24sIGJ1dCBkb2Vzbid0IGhhdmUgYSBm cmFtZSBjb3VudGVyLgo+ID4gLSAqLwo+ID4gLXUzMiBkcm1fYWNjdXJhdGVfdmJsYW5rX2NvdW50 KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+IC17Cj4gPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5kZXY7Cj4gPiAtCXVuc2lnbmVkIGludCBwaXBlID0gZHJtX2NydGNfaW5kZXgo Y3J0Yyk7Cj4gPiAtCXUzMiB2Ymxhbms7Cj4gPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiAt Cj4gPiAtCVdBUk4oIWRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX3RpbWVzdGFtcCwKPiA+IC0JICAg ICAiVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBzdXBwb3J0IGZvciBhY2N1cmF0ZSB2YmxhbmsgdGlt ZXN0YW1wcy4iKTsKPiA+IC0KPiA+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsYW5rX3Rp bWVfbG9jaywgZmxhZ3MpOwo+ID4gLQo+ID4gLQlkcm1fdXBkYXRlX3ZibGFua19jb3VudChkZXYs IHBpcGUsIGZhbHNlKTsKPiA+IC0JdmJsYW5rID0gZHJtX3ZibGFua19jb3VudChkZXYsIHBpcGUp Owo+ID4gLQo+ID4gLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibGFua190aW1lX2xv Y2ssIGZsYWdzKTsKPiA+IC0KPiA+IC0JcmV0dXJuIHZibGFuazsKPiA+IC19Cj4gPiAtRVhQT1JU X1NZTUJPTChkcm1fYWNjdXJhdGVfdmJsYW5rX2NvdW50KTsKPiA+IC0KPiA+IC1zdGF0aWMgdm9p ZCBfX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBw aXBlKQo+ID4gLXsKPiA+IC0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJf TU9ERVNFVCkpIHsKPiA+IC0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGRybV9jcnRjX2Zyb21f aW5kZXgoZGV2LCBwaXBlKTsKPiA+IC0KPiA+IC0JCWlmIChjcnRjLT5mdW5jcy0+ZGlzYWJsZV92 YmxhbmspIHsKPiA+IC0JCQljcnRjLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmsoY3J0Yyk7Cj4gPiAt CQkJcmV0dXJuOwo+ID4gLQkJfQo+ID4gLQl9Cj4gPiAtCj4gPiAtCWRldi0+ZHJpdmVyLT5kaXNh YmxlX3ZibGFuayhkZXYsIHBpcGUpOwo+ID4gLX0KPiA+IC0KPiA+IC0vKgo+ID4gLSAqIERpc2Fi bGUgdmJsYW5rIGlycSdzIG9uIGNydGMsIG1ha2Ugc3VyZSB0aGF0IGxhc3QgdmJsYW5rIGNvdW50 Cj4gPiAtICogb2YgaGFyZHdhcmUgYW5kIGNvcnJlc3BvbmRpbmcgY29uc2lzdGVudCBzb2Z0d2Fy ZSB2YmxhbmsgY291bnRlcgo+ID4gLSAqIGFyZSBwcmVzZXJ2ZWQsIGV2ZW4gaWYgdGhlcmUgYXJl IGFueSBzcHVyaW91cyB2YmxhbmsgaXJxJ3MgYWZ0ZXIKPiA+IC0gKiBkaXNhYmxlLgo+ID4gLSAq Lwo+ID4gLXN0YXRpYyB2b2lkIHZibGFua19kaXNhYmxlX2FuZF9zYXZlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV92Ymxh bmtfY3J0YyAqdmJsYW5rID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gLQl1bnNpZ25lZCBsb25n IGlycWZsYWdzOwo+ID4gLQo+ID4gLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRldi0+dmJsX2xvY2sp Owo+ID4gLQo+ID4gLQkvKiBQcmV2ZW50IHZibGFuayBpcnEgcHJvY2Vzc2luZyB3aGlsZSBkaXNh YmxpbmcgdmJsYW5rIGlycXMsCj4gPiAtCSAqIHNvIG5vIHVwZGF0ZXMgb2YgdGltZXN0YW1wcyBv ciBjb3VudCBjYW4gaGFwcGVuIGFmdGVyIHdlJ3ZlCj4gPiAtCSAqIGRpc2FibGVkLiBOZWVkZWQg dG8gcHJldmVudCByYWNlcyBpbiBjYXNlIG9mIGRlbGF5ZWQgaXJxJ3MuCj4gPiAtCSAqLwo+ID4g LQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxhbmtfdGltZV9sb2NrLCBpcnFmbGFncyk7Cj4g PiAtCj4gPiAtCS8qCj4gPiAtCSAqIE9ubHkgZGlzYWJsZSB2YmxhbmsgaW50ZXJydXB0cyBpZiB0 aGV5J3JlIGVuYWJsZWQuIFRoaXMgYXZvaWRzCj4gPiAtCSAqIGNhbGxpbmcgdGhlIC0+ZGlzYWJs ZV92YmxhbmsoKSBvcGVyYXRpb24gaW4gYXRvbWljIGNvbnRleHQgd2l0aCB0aGUKPiA+IC0JICog aGFyZHdhcmUgcG90ZW50aWFsbHkgcnVudGltZSBzdXNwZW5kZWQuCj4gPiAtCSAqLwo+ID4gLQlp ZiAodmJsYW5rLT5lbmFibGVkKSB7Cj4gPiAtCQlfX2Rpc2FibGVfdmJsYW5rKGRldiwgcGlwZSk7 Cj4gPiAtCQl2YmxhbmstPmVuYWJsZWQgPSBmYWxzZTsKPiA+IC0JfQo+ID4gLQo+ID4gLQkvKgo+ ID4gLQkgKiBBbHdheXMgdXBkYXRlIHRoZSBjb3VudCBhbmQgdGltZXN0YW1wIHRvIG1haW50YWlu IHRoZQo+ID4gLQkgKiBhcHBlYXJhbmNlIHRoYXQgdGhlIGNvdW50ZXIgaGFzIGJlZW4gdGlja2lu ZyBhbGwgYWxvbmcgdW50aWwKPiA+IC0JICogdGhpcyB0aW1lLiBUaGlzIG1ha2VzIHRoZSBjb3Vu dCBhY2NvdW50IGZvciB0aGUgZW50aXJlIHRpbWUKPiA+IC0JICogYmV0d2VlbiBkcm1fY3J0Y192 Ymxhbmtfb24oKSBhbmQgZHJtX2NydGNfdmJsYW5rX29mZigpLgo+ID4gLQkgKi8KPiA+IC0JZHJt X3VwZGF0ZV92YmxhbmtfY291bnQoZGV2LCBwaXBlLCBmYWxzZSk7Cj4gPiAtCj4gPiAtCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MpOwo+ID4g LX0KPiA+IC0KPiA+IC1zdGF0aWMgdm9pZCB2YmxhbmtfZGlzYWJsZV9mbih1bnNpZ25lZCBsb25n IGFyZykKPiA+IC17Cj4gPiAtCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICh2b2lk ICopYXJnOwo+ID4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdmJsYW5rLT5kZXY7Cj4gPiAt CXVuc2lnbmVkIGludCBwaXBlID0gdmJsYW5rLT5waXBlOwo+ID4gLQl1bnNpZ25lZCBsb25nIGly cWZsYWdzOwo+ID4gLQo+ID4gLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJx ZmxhZ3MpOwo+ID4gLQlpZiAoYXRvbWljX3JlYWQoJnZibGFuay0+cmVmY291bnQpID09IDAgJiYg dmJsYW5rLT5lbmFibGVkKSB7Cj4gPiAtCQlEUk1fREVCVUcoImRpc2FibGluZyB2Ymxhbmsgb24g Y3J0YyAldVxuIiwgcGlwZSk7Cj4gPiAtCQl2YmxhbmtfZGlzYWJsZV9hbmRfc2F2ZShkZXYsIHBp cGUpOwo+ID4gLQl9Cj4gPiAtCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ss IGlycWZsYWdzKTsKPiA+IC19Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX3ZibGFua19jbGVh bnVwIC0gY2xlYW51cCB2Ymxhbmsgc3VwcG9ydAo+ID4gLSAqIEBkZXY6IERSTSBkZXZpY2UKPiA+ IC0gKgo+ID4gLSAqIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIGFueSByZXNvdXJjZXMgYWxsb2Nh dGVkIGluIGRybV92YmxhbmtfaW5pdC4KPiA+IC0gKi8KPiA+IC12b2lkIGRybV92YmxhbmtfY2xl YW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gLXsKPiA+IC0JdW5zaWduZWQgaW50IHBp cGU7Cj4gPiAtCj4gPiAtCS8qIEJhaWwgaWYgdGhlIGRyaXZlciBkaWRuJ3QgY2FsbCBkcm1fdmJs YW5rX2luaXQoKSAqLwo+ID4gLQlpZiAoZGV2LT5udW1fY3J0Y3MgPT0gMCkKPiA+IC0JCXJldHVy bjsKPiA+IC0KPiA+IC0JZm9yIChwaXBlID0gMDsgcGlwZSA8IGRldi0+bnVtX2NydGNzOyBwaXBl KyspIHsKPiA+IC0JCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYtPnZibGFu a1twaXBlXTsKPiA+IC0KPiA+IC0JCVdBUk5fT04oUkVBRF9PTkNFKHZibGFuay0+ZW5hYmxlZCkg JiYKPiA+IC0JCQlkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKTsK PiA+IC0KPiA+IC0JCWRlbF90aW1lcl9zeW5jKCZ2YmxhbmstPmRpc2FibGVfdGltZXIpOwo+ID4g LQl9Cj4gPiAtCj4gPiAtCWtmcmVlKGRldi0+dmJsYW5rKTsKPiA+IC0KPiA+IC0JZGV2LT5udW1f Y3J0Y3MgPSAwOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfY2xlYW51cCk7 Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX3ZibGFua19pbml0IC0gaW5pdGlhbGl6ZSB2Ymxh bmsgc3VwcG9ydAo+ID4gLSAqIEBkZXY6IERSTSBkZXZpY2UKPiA+IC0gKiBAbnVtX2NydGNzOiBu dW1iZXIgb2YgQ1JUQ3Mgc3VwcG9ydGVkIGJ5IEBkZXYKPiA+IC0gKgo+ID4gLSAqIFRoaXMgZnVu Y3Rpb24gaW5pdGlhbGl6ZXMgdmJsYW5rIHN1cHBvcnQgZm9yIEBudW1fY3J0Y3MgZGlzcGxheSBw aXBlbGluZXMuCj4gPiAtICoKPiA+IC0gKiBSZXR1cm5zOgo+ID4gLSAqIFplcm8gb24gc3VjY2Vz cyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+IC0gKi8KPiA+IC1pbnQg ZHJtX3ZibGFua19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBudW1f Y3J0Y3MpCj4gPiAtewo+ID4gLQlpbnQgcmV0ID0gLUVOT01FTTsKPiA+IC0JdW5zaWduZWQgaW50 IGk7Cj4gPiAtCj4gPiAtCXNwaW5fbG9ja19pbml0KCZkZXYtPnZibF9sb2NrKTsKPiA+IC0Jc3Bp bl9sb2NrX2luaXQoJmRldi0+dmJsYW5rX3RpbWVfbG9jayk7Cj4gPiAtCj4gPiAtCWRldi0+bnVt X2NydGNzID0gbnVtX2NydGNzOwo+ID4gLQo+ID4gLQlkZXYtPnZibGFuayA9IGtjYWxsb2MobnVt X2NydGNzLCBzaXplb2YoKmRldi0+dmJsYW5rKSwgR0ZQX0tFUk5FTCk7Cj4gPiAtCWlmICghZGV2 LT52YmxhbmspCj4gPiAtCQlnb3RvIGVycjsKPiA+IC0KPiA+IC0JZm9yIChpID0gMDsgaSA8IG51 bV9jcnRjczsgaSsrKSB7Cj4gPiAtCQlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAm ZGV2LT52YmxhbmtbaV07Cj4gPiAtCj4gPiAtCQl2YmxhbmstPmRldiA9IGRldjsKPiA+IC0JCXZi bGFuay0+cGlwZSA9IGk7Cj4gPiAtCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2YmxhbmstPnF1ZXVl KTsKPiA+IC0JCXNldHVwX3RpbWVyKCZ2YmxhbmstPmRpc2FibGVfdGltZXIsIHZibGFua19kaXNh YmxlX2ZuLAo+ID4gLQkJCSAgICAodW5zaWduZWQgbG9uZyl2YmxhbmspOwo+ID4gLQkJc2VxbG9j a19pbml0KCZ2YmxhbmstPnNlcWxvY2spOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCURSTV9JTkZPKCJT dXBwb3J0cyB2YmxhbmsgdGltZXN0YW1wIGNhY2hpbmcgUmV2IDIgKDIxLjEwLjIwMTMpLlxuIik7 Cj4gPiAtCj4gPiAtCS8qIERyaXZlciBzcGVjaWZpYyBoaWdoLXByZWNpc2lvbiB2YmxhbmsgdGlt ZXN0YW1waW5nIHN1cHBvcnRlZD8gKi8KPiA+IC0JaWYgKGRldi0+ZHJpdmVyLT5nZXRfdmJsYW5r X3RpbWVzdGFtcCkKPiA+IC0JCURSTV9JTkZPKCJEcml2ZXIgc3VwcG9ydHMgcHJlY2lzZSB2Ymxh bmsgdGltZXN0YW1wIHF1ZXJ5LlxuIik7Cj4gPiAtCWVsc2UKPiA+IC0JCURSTV9JTkZPKCJObyBk cml2ZXIgc3VwcG9ydCBmb3IgdmJsYW5rIHRpbWVzdGFtcCBxdWVyeS5cbiIpOwo+ID4gLQo+ID4g LQkvKiBNdXN0IGhhdmUgcHJlY2lzZSB0aW1lc3RhbXBpbmcgZm9yIHJlbGlhYmxlIHZibGFuayBp bnN0YW50IGRpc2FibGUgKi8KPiA+IC0JaWYgKGRldi0+dmJsYW5rX2Rpc2FibGVfaW1tZWRpYXRl ICYmICFkZXYtPmRyaXZlci0+Z2V0X3ZibGFua190aW1lc3RhbXApIHsKPiA+IC0JCWRldi0+dmJs YW5rX2Rpc2FibGVfaW1tZWRpYXRlID0gZmFsc2U7Cj4gPiAtCQlEUk1fSU5GTygiU2V0dGluZyB2 YmxhbmtfZGlzYWJsZV9pbW1lZGlhdGUgdG8gZmFsc2UgYmVjYXVzZSAiCj4gPiAtCQkJICJnZXRf dmJsYW5rX3RpbWVzdGFtcCA9PSBOVUxMXG4iKTsKPiA+IC0JfQo+ID4gLQo+ID4gLQlyZXR1cm4g MDsKPiA+IC0KPiA+IC1lcnI6Cj4gPiAtCWRldi0+bnVtX2NydGNzID0gMDsKPiA+IC0JcmV0dXJu IHJldDsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX2luaXQpOwo+ID4gKyNp bmNsdWRlICJkcm1faW50ZXJuYWwuaCIKPiA+ICAKPiA+ICAvKioKPiA+ICAgKiBkcm1faXJxX2lu c3RhbGwgLSBpbnN0YWxsIElSUSBoYW5kbGVyCj4gPiBAQCAtNTcxLDcgKzE3Niw3IEBAIGludCBk cm1faXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gIAo+ID4gIAkJCVdB Uk5fT04oZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSk7Cj4gPiAg Cj4gPiAtCQkJdmJsYW5rX2Rpc2FibGVfYW5kX3NhdmUoZGV2LCBpKTsKPiA+ICsJCQlkcm1fdmJs YW5rX2Rpc2FibGVfYW5kX3NhdmUoZGV2LCBpKTsKPiA+ICAJCQl3YWtlX3VwKCZ2YmxhbmstPnF1 ZXVlKTsKPiA+ICAJCX0KPiA+ICAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xv Y2ssIGlycWZsYWdzKTsKPiA+IEBAIC02MzQsMTE4NyArMjM5LDMgQEAgaW50IGRybV9sZWdhY3lf aXJxX2NvbnRyb2woc3RydWN0IGRybV9kZXZpY2UKPiA+ICpkZXYsIHZvaWQgKmRhdGEsCj4gPiAg CQlyZXR1cm4gLUVJTlZBTDsKPiA+ICAJfQo+ID4gIH0KPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBk cm1fY2FsY190aW1lc3RhbXBpbmdfY29uc3RhbnRzIC0gY2FsY3VsYXRlIHZibGFuayB0aW1lc3Rh bXAgY29uc3RhbnRzCj4gPiAtICogQGNydGM6IGRybV9jcnRjIHdob3NlIHRpbWVzdGFtcCBjb25z dGFudHMgc2hvdWxkIGJlIHVwZGF0ZWQuCj4gPiAtICogQG1vZGU6IGRpc3BsYXkgbW9kZSBjb250 YWluaW5nIHRoZSBzY2Fub3V0IHRpbWluZ3MKPiA+IC0gKgo+ID4gLSAqIENhbGN1bGF0ZSBhbmQg c3RvcmUgdmFyaW91cyBjb25zdGFudHMgd2hpY2ggYXJlIGxhdGVyCj4gPiAtICogbmVlZGVkIGJ5 IHZibGFuayBhbmQgc3dhcC1jb21wbGV0aW9uIHRpbWVzdGFtcGluZywgZS5nLAo+ID4gLSAqIGJ5 IGRybV9jYWxjX3ZibHRpbWVzdGFtcF9mcm9tX3NjYW5vdXRwb3MoKS4gVGhleSBhcmUKPiA+IC0g KiBkZXJpdmVkIGZyb20gQ1JUQydzIHRydWUgc2Nhbm91dCB0aW1pbmcsIHNvIHRoZXkgdGFrZQo+ ID4gLSAqIHRoaW5ncyBsaWtlIHBhbmVsIHNjYWxpbmcgb3Igb3RoZXIgYWRqdXN0bWVudHMgaW50 byBhY2NvdW50Lgo+ID4gLSAqLwo+ID4gLXZvaWQgZHJtX2NhbGNfdGltZXN0YW1waW5nX2NvbnN0 YW50cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAtCQkJCSAgICAgY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gY3J0Yy0+ZGV2Owo+ID4gLQl1bnNpZ25lZCBpbnQgcGlwZSA9IGRybV9jcnRjX2luZGV4KGNy dGMpOwo+ID4gLQlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2LT52Ymxhbmtb cGlwZV07Cj4gPiAtCWludCBsaW5lZHVyX25zID0gMCwgZnJhbWVkdXJfbnMgPSAwOwo+ID4gLQlp bnQgZG90Y2xvY2sgPSBtb2RlLT5jcnRjX2Nsb2NrOwo+ID4gLQo+ID4gLQlpZiAoIWRldi0+bnVt X2NydGNzKQo+ID4gLQkJcmV0dXJuOwo+ID4gLQo+ID4gLQlpZiAoV0FSTl9PTihwaXBlID49IGRl di0+bnVtX2NydGNzKSkKPiA+IC0JCXJldHVybjsKPiA+IC0KPiA+IC0JLyogVmFsaWQgZG90Y2xv Y2s/ICovCj4gPiAtCWlmIChkb3RjbG9jayA+IDApIHsKPiA+IC0JCWludCBmcmFtZV9zaXplID0g bW9kZS0+Y3J0Y19odG90YWwgKiBtb2RlLT5jcnRjX3Z0b3RhbDsKPiA+IC0KPiA+IC0JCS8qCj4g PiAtCQkgKiBDb252ZXJ0IHNjYW5saW5lIGxlbmd0aCBpbiBwaXhlbHMgYW5kIHZpZGVvCj4gPiAt CQkgKiBkb3QgY2xvY2sgdG8gbGluZSBkdXJhdGlvbiBhbmQgZnJhbWUgZHVyYXRpb24KPiA+IC0J CSAqIGluIG5hbm9zZWNvbmRzOgo+ID4gLQkJICovCj4gPiAtCQlsaW5lZHVyX25zICA9IGRpdl91 NjQoKHU2NCkgbW9kZS0+Y3J0Y19odG90YWwgKiAxMDAwMDAwLCBkb3RjbG9jayk7Cj4gPiAtCQlm cmFtZWR1cl9ucyA9IGRpdl91NjQoKHU2NCkgZnJhbWVfc2l6ZSAqIDEwMDAwMDAsIGRvdGNsb2Nr KTsKPiA+IC0KPiA+IC0JCS8qCj4gPiAtCQkgKiBGaWVsZHMgb2YgaW50ZXJsYWNlZCBzY2Fub3V0 IG1vZGVzIGFyZSBvbmx5IGhhbGYgYSBmcmFtZSBkdXJhdGlvbi4KPiA+IC0JCSAqLwo+ID4gLQkJ aWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCj4gPiAtCQkJZnJhbWVk dXJfbnMgLz0gMjsKPiA+IC0JfSBlbHNlCj4gPiAtCQlEUk1fRVJST1IoImNydGMgJXU6IENhbid0 IGNhbGN1bGF0ZSBjb25zdGFudHMsIGRvdGNsb2NrID0gMCFcbiIsCj4gPiAtCQkJICBjcnRjLT5i YXNlLmlkKTsKPiA+IC0KPiA+IC0JdmJsYW5rLT5saW5lZHVyX25zICA9IGxpbmVkdXJfbnM7Cj4g PiAtCXZibGFuay0+ZnJhbWVkdXJfbnMgPSBmcmFtZWR1cl9uczsKPiA+IC0JdmJsYW5rLT5od21v ZGUgPSAqbW9kZTsKPiA+IC0KPiA+IC0JRFJNX0RFQlVHKCJjcnRjICV1OiBod21vZGU6IGh0b3Rh bCAlZCwgdnRvdGFsICVkLCB2ZGlzcGxheSAlZFxuIiwKPiA+IC0JCSAgY3J0Yy0+YmFzZS5pZCwg bW9kZS0+Y3J0Y19odG90YWwsCj4gPiAtCQkgIG1vZGUtPmNydGNfdnRvdGFsLCBtb2RlLT5jcnRj X3ZkaXNwbGF5KTsKPiA+IC0JRFJNX0RFQlVHKCJjcnRjICV1OiBjbG9jayAlZCBrSHogZnJhbWVk dXIgJWQgbGluZWR1ciAlZFxuIiwKPiA+IC0JCSAgY3J0Yy0+YmFzZS5pZCwgZG90Y2xvY2ssIGZy YW1lZHVyX25zLCBsaW5lZHVyX25zKTsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChkcm1fY2Fs Y190aW1lc3RhbXBpbmdfY29uc3RhbnRzKTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcm1fY2Fs Y192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9zIC0gcHJlY2lzZSB2YmxhbmsgdGltZXN0YW1w IGhlbHBlcgo+ID4gLSAqIEBkZXY6IERSTSBkZXZpY2UKPiA+IC0gKiBAcGlwZTogaW5kZXggb2Yg Q1JUQyB3aG9zZSB2YmxhbmsgdGltZXN0YW1wIHRvIHJldHJpZXZlCj4gPiAtICogQG1heF9lcnJv cjogRGVzaXJlZCBtYXhpbXVtIGFsbG93YWJsZSBlcnJvciBpbiB0aW1lc3RhbXBzIChuYW5vc2Vj cykKPiA+IC0gKiAgICAgICAgICAgICBPbiByZXR1cm4gY29udGFpbnMgdHJ1ZSBtYXhpbXVtIGVy cm9yIG9mIHRpbWVzdGFtcAo+ID4gLSAqIEB2YmxhbmtfdGltZTogUG9pbnRlciB0byBzdHJ1Y3Qg dGltZXZhbCB3aGljaCBzaG91bGQgcmVjZWl2ZSB0aGUgdGltZXN0YW1wCj4gPiAtICogQGluX3Zi bGFua19pcnE6Cj4gPiAtICogICAgIFRydWUgd2hlbiBjYWxsZWQgZnJvbSBkcm1fY3J0Y19oYW5k bGVfdmJsYW5rKCkuICBTb21lIGRyaXZlcnMKPiA+IC0gKiAgICAgbmVlZCB0byBhcHBseSBzb21l IHdvcmthcm91bmRzIGZvciBncHUtc3BlY2lmaWMgdmJsYW5rIGlycSBxdWlya3MKPiA+IC0gKiAg ICAgaWYgZmxhZyBpcyBzZXQuCj4gPiAtICoKPiA+IC0gKiBJbXBsZW1lbnRzIGNhbGN1bGF0aW9u IG9mIGV4YWN0IHZibGFuayB0aW1lc3RhbXBzIGZyb20gZ2l2ZW4KPiA+IGRybV9kaXNwbGF5X21v ZGUKPiA+IC0gKiB0aW1pbmdzIGFuZCBjdXJyZW50IHZpZGVvIHNjYW5vdXQgcG9zaXRpb24gb2Yg YSBDUlRDLiBUaGlzIGNhbiBiZQo+ID4gY2FsbGVkIGZyb20KPiA+IC0gKiB3aXRoaW4gZ2V0X3Zi bGFua190aW1lc3RhbXAoKSBpbXBsZW1lbnRhdGlvbiBvZiBhIGttcyBkcml2ZXIgdG8KPiA+IGlt cGxlbWVudCB0aGUKPiA+IC0gKiBhY3R1YWwgdGltZXN0YW1waW5nLgo+ID4gLSAqCj4gPiAtICog U2hvdWxkIHJldHVybiB0aW1lc3RhbXBzIGNvbmZvcm1pbmcgdG8gdGhlIE9NTF9zeW5jX2NvbnRy b2wgT3Blbk1MCj4gPiAtICogZXh0ZW5zaW9uIHNwZWNpZmljYXRpb24uIFRoZSB0aW1lc3RhbXAg Y29ycmVzcG9uZHMgdG8gdGhlIGVuZCBvZgo+ID4gLSAqIHRoZSB2YmxhbmsgaW50ZXJ2YWwsIGFr YSBzdGFydCBvZiBzY2Fub3V0IG9mIHRvcG1vc3QtbGVmdG1vc3QgZGlzcGxheQo+ID4gLSAqIHBp eGVsIGluIHRoZSBmb2xsb3dpbmcgdmlkZW8gZnJhbWUuCj4gPiAtICoKPiA+IC0gKiBSZXF1aXJl cyBzdXBwb3J0IGZvciBvcHRpb25hbCBkZXYtPmRyaXZlci0+Z2V0X3NjYW5vdXRfcG9zaXRpb24o KQo+ID4gLSAqIGluIGttcyBkcml2ZXIsIHBsdXMgYSBiaXQgb2Ygc2V0dXAgY29kZSB0byBwcm92 aWRlIGEgZHJtX2Rpc3BsYXlfbW9kZQo+ID4gLSAqIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHRy dWUgc2Nhbm91dCB0aW1pbmcuCj4gPiAtICoKPiA+IC0gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRh dGlvbiBvbmx5IGhhbmRsZXMgc3RhbmRhcmQgdmlkZW8gbW9kZXMuIEl0Cj4gPiAtICogcmV0dXJu cyBhcyBubyBvcGVyYXRpb24gaWYgYSBkb3VibGVzY2FuIG9yIGludGVybGFjZWQgdmlkZW8gbW9k ZSBpcwo+ID4gLSAqIGFjdGl2ZS4gSGlnaGVyIGxldmVsIGNvZGUgaXMgZXhwZWN0ZWQgdG8gaGFu ZGxlIHRoaXMuCj4gPiAtICoKPiA+IC0gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGlt cGxlbWVudCB0aGUgJmRybV9kcml2ZXIuZ2V0X3ZibGFua190aW1lc3RhbXAKPiA+IC0gKiBkaXJl Y3RseSwgaWYgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHRoZQo+ID4gJmRybV9kcml2ZXIuZ2V0X3Nj YW5vdXRfcG9zaXRpb24gaG9vay4KPiA+IC0gKgo+ID4gLSAqIE5vdGUgdGhhdCBhdG9taWMgZHJp dmVycyBtdXN0IGNhbGwgZHJtX2NhbGNfdGltZXN0YW1waW5nX2NvbnN0YW50cygpIGJlZm9yZQo+ ID4gLSAqIGVuYWJsaW5nIGEgQ1JUQy4gVGhlIGF0b21pYyBoZWxwZXJzIGFscmVhZHkgdGFrZSBj YXJlIG9mIHRoYXQgaW4KPiA+IC0gKiBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfbGVnYWN5X21v ZGVzZXRfc3RhdGUoKS4KPiA+IC0gKgo+ID4gLSAqIFJldHVybnM6Cj4gPiAtICoKPiA+IC0gKiBS ZXR1cm5zIHRydWUgb24gc3VjY2VzcywgYW5kIGZhbHNlIG9uIGZhaWx1cmUsIGkuZS4gd2hlbiBu byBhY2N1cmF0ZQo+ID4gLSAqIHRpbWVzdGFtcCBjb3VsZCBiZSBhY3F1aXJlZC4KPiA+IC0gKi8K PiA+IC1ib29sIGRybV9jYWxjX3ZibHRpbWVzdGFtcF9mcm9tX3NjYW5vdXRwb3Moc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiA+IC0JCQkJCSAgIHVuc2lnbmVkIGludCBwaXBlLAo+ID4gLQkJCQkJ ICAgaW50ICptYXhfZXJyb3IsCj4gPiAtCQkJCQkgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rX3Rp bWUsCj4gPiAtCQkJCQkgICBib29sIGluX3ZibGFua19pcnEpCj4gPiAtewo+ID4gLQlzdHJ1Y3Qg dGltZXZhbCB0dl9ldGltZTsKPiA+IC0Ja3RpbWVfdCBzdGltZSwgZXRpbWU7Cj4gPiAtCWJvb2wg dmJsX3N0YXR1czsKPiA+IC0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ID4gLQljb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPiA+IC0Jc3RydWN0IGRybV92YmxhbmtfY3J0YyAq dmJsYW5rID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gLQlpbnQgdnBvcywgaHBvcywgaTsKPiA+ IC0JaW50IGRlbHRhX25zLCBkdXJhdGlvbl9uczsKPiA+IC0KPiA+IC0JaWYgKCFkcm1fY29yZV9j aGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQo+ID4gLQkJcmV0dXJuIGZhbHNlOwo+ ID4gLQo+ID4gLQljcnRjID0gZHJtX2NydGNfZnJvbV9pbmRleChkZXYsIHBpcGUpOwo+ID4gLQo+ ID4gLQlpZiAocGlwZSA+PSBkZXYtPm51bV9jcnRjcyB8fCAhY3J0Yykgewo+ID4gLQkJRFJNX0VS Uk9SKCJJbnZhbGlkIGNydGMgJXVcbiIsIHBpcGUpOwo+ID4gLQkJcmV0dXJuIGZhbHNlOwo+ID4g LQl9Cj4gPiAtCj4gPiAtCS8qIFNjYW5vdXQgcG9zaXRpb24gcXVlcnkgbm90IHN1cHBvcnRlZD8g U2hvdWxkIG5vdCBoYXBwZW4uICovCj4gPiAtCWlmICghZGV2LT5kcml2ZXItPmdldF9zY2Fub3V0 X3Bvc2l0aW9uKSB7Cj4gPiAtCQlEUk1fRVJST1IoIkNhbGxlZCBmcm9tIGRyaXZlciB3L28gZ2V0 X3NjYW5vdXRfcG9zaXRpb24oKSE/XG4iKTsKPiA+IC0JCXJldHVybiBmYWxzZTsKPiA+IC0JfQo+ ID4gLQo+ID4gLQlpZiAoZHJtX2Rydl91c2VzX2F0b21pY19tb2Rlc2V0KGRldikpCj4gPiAtCQlt b2RlID0gJnZibGFuay0+aHdtb2RlOwo+ID4gLQllbHNlCj4gPiAtCQltb2RlID0gJmNydGMtPmh3 bW9kZTsKPiA+IC0KPiA+IC0JLyogSWYgbW9kZSB0aW1pbmcgdW5kZWZpbmVkLCBqdXN0IHJldHVy biBhcyBuby1vcDoKPiA+IC0JICogSGFwcGVucyBkdXJpbmcgaW5pdGlhbCBtb2Rlc2V0dGluZyBv ZiBhIGNydGMuCj4gPiAtCSAqLwo+ID4gLQlpZiAobW9kZS0+Y3J0Y19jbG9jayA9PSAwKSB7Cj4g PiAtCQlEUk1fREVCVUcoImNydGMgJXU6IE5vb3AgZHVlIHRvIHVuaW5pdGlhbGl6ZWQgbW9kZS5c biIsIHBpcGUpOwo+ID4gLQkJV0FSTl9PTl9PTkNFKGRybV9kcnZfdXNlc19hdG9taWNfbW9kZXNl dChkZXYpKTsKPiA+IC0KPiA+IC0JCXJldHVybiBmYWxzZTsKPiA+IC0JfQo+ID4gLQo+ID4gLQkv KiBHZXQgY3VycmVudCBzY2Fub3V0IHBvc2l0aW9uIHdpdGggc3lzdGVtIHRpbWVzdGFtcC4KPiA+ IC0JICogUmVwZWF0IHF1ZXJ5IHVwIHRvIERSTV9USU1FU1RBTVBfTUFYUkVUUklFUyB0aW1lcwo+ ID4gLQkgKiBpZiBzaW5nbGUgcXVlcnkgdGFrZXMgbG9uZ2VyIHRoYW4gbWF4X2Vycm9yIG5hbm9z ZWNvbmRzLgo+ID4gLQkgKgo+ID4gLQkgKiBUaGlzIGd1YXJhbnRlZXMgYSB0aWdodCBib3VuZCBv biBtYXhpbXVtIGVycm9yIGlmCj4gPiAtCSAqIGNvZGUgZ2V0cyBwcmVlbXB0ZWQgb3IgZGVsYXll ZCBmb3Igc29tZSByZWFzb24uCj4gPiAtCSAqLwo+ID4gLQlmb3IgKGkgPSAwOyBpIDwgRFJNX1RJ TUVTVEFNUF9NQVhSRVRSSUVTOyBpKyspIHsKPiA+IC0JCS8qCj4gPiAtCQkgKiBHZXQgdmVydGlj YWwgYW5kIGhvcml6b250YWwgc2Nhbm91dCBwb3NpdGlvbiB2cG9zLCBocG9zLAo+ID4gLQkJICog YW5kIGJvdW5kaW5nIHRpbWVzdGFtcHMgc3RpbWUsIGV0aW1lLCBwcmUvcG9zdCBxdWVyeS4KPiA+ IC0JCSAqLwo+ID4gLQkJdmJsX3N0YXR1cyA9IGRldi0+ZHJpdmVyLT5nZXRfc2Nhbm91dF9wb3Np dGlvbihkZXYsIHBpcGUsCj4gPiAtCQkJCQkJCSAgICAgICBpbl92YmxhbmtfaXJxLAo+ID4gLQkJ CQkJCQkgICAgICAgJnZwb3MsICZocG9zLAo+ID4gLQkJCQkJCQkgICAgICAgJnN0aW1lLCAmZXRp bWUsCj4gPiAtCQkJCQkJCSAgICAgICBtb2RlKTsKPiA+IC0KPiA+IC0JCS8qIFJldHVybiBhcyBu by1vcCBpZiBzY2Fub3V0IHF1ZXJ5IHVuc3VwcG9ydGVkIG9yIGZhaWxlZC4gKi8KPiA+IC0JCWlm ICghdmJsX3N0YXR1cykgewo+ID4gLQkJCURSTV9ERUJVRygiY3J0YyAldSA6IHNjYW5vdXRwb3Mg cXVlcnkgZmFpbGVkLlxuIiwKPiA+IC0JCQkJICBwaXBlKTsKPiA+IC0JCQlyZXR1cm4gZmFsc2U7 Cj4gPiAtCQl9Cj4gPiAtCj4gPiAtCQkvKiBDb21wdXRlIHVuY2VydGFpbnR5IGluIHRpbWVzdGFt cCBvZiBzY2Fub3V0IHBvc2l0aW9uIHF1ZXJ5LiAqLwo+ID4gLQkJZHVyYXRpb25fbnMgPSBrdGlt ZV90b19ucyhldGltZSkgLSBrdGltZV90b19ucyhzdGltZSk7Cj4gPiAtCj4gPiAtCQkvKiBBY2Nl cHQgcmVzdWx0IHdpdGggPCAgbWF4X2Vycm9yIG5zZWNzIHRpbWluZyB1bmNlcnRhaW50eS4gKi8K PiA+IC0JCWlmIChkdXJhdGlvbl9ucyA8PSAqbWF4X2Vycm9yKQo+ID4gLQkJCWJyZWFrOwo+ID4g LQl9Cj4gPiAtCj4gPiAtCS8qIE5vaXN5IHN5c3RlbSB0aW1pbmc/ICovCj4gPiAtCWlmIChpID09 IERSTV9USU1FU1RBTVBfTUFYUkVUUklFUykgewo+ID4gLQkJRFJNX0RFQlVHKCJjcnRjICV1OiBO b2lzeSB0aW1lc3RhbXAgJWQgdXMgPiAlZCB1cyBbJWQgcmVwc10uXG4iLAo+ID4gLQkJCSAgcGlw ZSwgZHVyYXRpb25fbnMvMTAwMCwgKm1heF9lcnJvci8xMDAwLCBpKTsKPiA+IC0JfQo+ID4gLQo+ ID4gLQkvKiBSZXR1cm4gdXBwZXIgYm91bmQgb2YgdGltZXN0YW1wIHByZWNpc2lvbiBlcnJvci4g Ki8KPiA+IC0JKm1heF9lcnJvciA9IGR1cmF0aW9uX25zOwo+ID4gLQo+ID4gLQkvKiBDb252ZXJ0 IHNjYW5vdXQgcG9zaXRpb24gaW50byBlbGFwc2VkIHRpbWUgYXQgcmF3X3RpbWUgcXVlcnkKPiA+ IC0JICogc2luY2Ugc3RhcnQgb2Ygc2Nhbm91dCBhdCBmaXJzdCBkaXNwbGF5IHNjYW5saW5lLiBk ZWx0YV9ucwo+ID4gLQkgKiBjYW4gYmUgbmVnYXRpdmUgaWYgc3RhcnQgb2Ygc2Nhbm91dCBoYXNu J3QgaGFwcGVuZWQgeWV0Lgo+ID4gLQkgKi8KPiA+IC0JZGVsdGFfbnMgPSBkaXZfczY0KDEwMDAw MDBMTCAqICh2cG9zICogbW9kZS0+Y3J0Y19odG90YWwgKyBocG9zKSwKPiA+IC0JCQkgICBtb2Rl LT5jcnRjX2Nsb2NrKTsKPiA+IC0KPiA+IC0JaWYgKCFkcm1fdGltZXN0YW1wX21vbm90b25pYykK PiA+IC0JCWV0aW1lID0ga3RpbWVfbW9ub190b19yZWFsKGV0aW1lKTsKPiA+IC0KPiA+IC0JLyog c2F2ZSB0aGlzIG9ubHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLwo+ID4gLQl0dl9ldGltZSA9 IGt0aW1lX3RvX3RpbWV2YWwoZXRpbWUpOwo+ID4gLQkvKiBTdWJ0cmFjdCB0aW1lIGRlbHRhIGZy b20gcmF3IHRpbWVzdGFtcCB0byBnZXQgZmluYWwKPiA+IC0JICogdmJsYW5rX3RpbWUgdGltZXN0 YW1wIGZvciBlbmQgb2YgdmJsYW5rLgo+ID4gLQkgKi8KPiA+IC0JZXRpbWUgPSBrdGltZV9zdWJf bnMoZXRpbWUsIGRlbHRhX25zKTsKPiA+IC0JKnZibGFua190aW1lID0ga3RpbWVfdG9fdGltZXZh bChldGltZSk7Cj4gPiAtCj4gPiAtCURSTV9ERUJVR19WQkwoImNydGMgJXUgOiB2IHAoJWQsJWQp QCAlbGQuJWxkIC0+ICVsZC4lbGQgW2UgJWQgdXMsICVkIHJlcF1cbiIsCj4gPiAtCQkgICAgICBw aXBlLCBocG9zLCB2cG9zLAo+ID4gLQkJICAgICAgKGxvbmcpdHZfZXRpbWUudHZfc2VjLCAobG9u Zyl0dl9ldGltZS50dl91c2VjLAo+ID4gLQkJICAgICAgKGxvbmcpdmJsYW5rX3RpbWUtPnR2X3Nl YywgKGxvbmcpdmJsYW5rX3RpbWUtPnR2X3VzZWMsCj4gPiAtCQkgICAgICBkdXJhdGlvbl9ucy8x MDAwLCBpKTsKPiA+IC0KPiA+IC0JcmV0dXJuIHRydWU7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1C T0woZHJtX2NhbGNfdmJsdGltZXN0YW1wX2Zyb21fc2Nhbm91dHBvcyk7Cj4gPiAtCj4gPiAtc3Rh dGljIHN0cnVjdCB0aW1ldmFsIGdldF9kcm1fdGltZXN0YW1wKHZvaWQpCj4gPiAtewo+ID4gLQlr dGltZV90IG5vdzsKPiA+IC0KPiA+IC0Jbm93ID0gZHJtX3RpbWVzdGFtcF9tb25vdG9uaWMgPyBr dGltZV9nZXQoKSA6IGt0aW1lX2dldF9yZWFsKCk7Cj4gPiAtCXJldHVybiBrdGltZV90b190aW1l dmFsKG5vdyk7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIGRybV9nZXRfbGFzdF92Ymx0 aW1lc3RhbXAgLSByZXRyaWV2ZSByYXcgdGltZXN0YW1wIGZvciB0aGUgbW9zdCByZWNlbnQKPiA+ IC0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmJsYW5rIGludGVydmFsCj4gPiAtICog QGRldjogRFJNIGRldmljZQo+ID4gLSAqIEBwaXBlOiBpbmRleCBvZiBDUlRDIHdob3NlIHZibGFu ayB0aW1lc3RhbXAgdG8gcmV0cmlldmUKPiA+IC0gKiBAdHZibGFuazogUG9pbnRlciB0byB0YXJn ZXQgc3RydWN0IHRpbWV2YWwgd2hpY2ggc2hvdWxkIHJlY2VpdmUKPiA+IHRoZSB0aW1lc3RhbXAK PiA+IC0gKiBAaW5fdmJsYW5rX2lycToKPiA+IC0gKiAgICAgVHJ1ZSB3aGVuIGNhbGxlZCBmcm9t IGRybV9jcnRjX2hhbmRsZV92YmxhbmsoKS4gIFNvbWUgZHJpdmVycwo+ID4gLSAqICAgICBuZWVk IHRvIGFwcGx5IHNvbWUgd29ya2Fyb3VuZHMgZm9yIGdwdS1zcGVjaWZpYyB2YmxhbmsgaXJxIHF1 aXJrcwo+ID4gLSAqICAgICBpZiBmbGFnIGlzIHNldC4KPiA+IC0gKgo+ID4gLSAqIEZldGNoZXMg dGhlIHN5c3RlbSB0aW1lc3RhbXAgY29ycmVzcG9uZGluZyB0byB0aGUgdGltZSBvZiB0aGUgbW9z dCByZWNlbnQKPiA+IC0gKiB2YmxhbmsgaW50ZXJ2YWwgb24gc3BlY2lmaWVkIENSVEMuIE1heSBj YWxsIGludG8ga21zLWRyaXZlciB0bwo+ID4gLSAqIGNvbXB1dGUgdGhlIHRpbWVzdGFtcCB3aXRo IGEgaGlnaC1wcmVjaXNpb24gR1BVIHNwZWNpZmljIG1ldGhvZC4KPiA+IC0gKgo+ID4gLSAqIFJl dHVybnMgemVybyBpZiB0aW1lc3RhbXAgb3JpZ2luYXRlcyBmcm9tIHVuY29ycmVjdGVkIGRvX2dl dHRpbWVvZmRheSgpCj4gPiAtICogY2FsbCwgaS5lLiwgaXQgaXNuJ3QgdmVyeSBwcmVjaXNlbHkg bG9ja2VkIHRvIHRoZSB0cnVlIHZibGFuay4KPiA+IC0gKgo+ID4gLSAqIFJldHVybnM6Cj4gPiAt ICogVHJ1ZSBpZiB0aW1lc3RhbXAgaXMgY29uc2lkZXJlZCB0byBiZSB2ZXJ5IHByZWNpc2UsIGZh bHNlIG90aGVyd2lzZS4KPiA+IC0gKi8KPiA+IC1zdGF0aWMgYm9vbAo+ID4gLWRybV9nZXRfbGFz dF92Ymx0aW1lc3RhbXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUs Cj4gPiAtCQkJICBzdHJ1Y3QgdGltZXZhbCAqdHZibGFuaywgYm9vbCBpbl92YmxhbmtfaXJxKQo+ ID4gLXsKPiA+IC0JYm9vbCByZXQgPSBmYWxzZTsKPiA+IC0KPiA+IC0JLyogRGVmaW5lIHJlcXVl c3RlZCBtYXhpbXVtIGVycm9yIG9uIHRpbWVzdGFtcHMgKG5hbm9zZWNvbmRzKS4gKi8KPiA+IC0J aW50IG1heF9lcnJvciA9IChpbnQpIGRybV90aW1lc3RhbXBfcHJlY2lzaW9uICogMTAwMDsKPiA+ IC0KPiA+IC0JLyogUXVlcnkgZHJpdmVyIGlmIHBvc3NpYmxlIGFuZCBwcmVjaXNpb24gdGltZXN0 YW1waW5nIGVuYWJsZWQuICovCj4gPiAtCWlmIChkZXYtPmRyaXZlci0+Z2V0X3ZibGFua190aW1l c3RhbXAgJiYgKG1heF9lcnJvciA+IDApKQo+ID4gLQkJcmV0ID0gZGV2LT5kcml2ZXItPmdldF92 YmxhbmtfdGltZXN0YW1wKGRldiwgcGlwZSwgJm1heF9lcnJvciwKPiA+IC0JCQkJCQkJdHZibGFu aywgaW5fdmJsYW5rX2lycSk7Cj4gPiAtCj4gPiAtCS8qIEdQVSBoaWdoIHByZWNpc2lvbiB0aW1l c3RhbXAgcXVlcnkgdW5zdXBwb3J0ZWQgb3IgZmFpbGVkLgo+ID4gLQkgKiBSZXR1cm4gY3VycmVu dCBtb25vdG9uaWMvZ2V0dGltZW9mZGF5IHRpbWVzdGFtcCBhcyBiZXN0IGVzdGltYXRlLgo+ID4g LQkgKi8KPiA+IC0JaWYgKCFyZXQpCj4gPiAtCQkqdHZibGFuayA9IGdldF9kcm1fdGltZXN0YW1w KCk7Cj4gPiAtCj4gPiAtCXJldHVybiByZXQ7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qKgo+ID4gLSAq IGRybV9jcnRjX3ZibGFua19jb3VudCAtIHJldHJpZXZlICJjb29rZWQiIHZibGFuayBjb3VudGVy IHZhbHVlCj4gPiAtICogQGNydGM6IHdoaWNoIGNvdW50ZXIgdG8gcmV0cmlldmUKPiA+IC0gKgo+ ID4gLSAqIEZldGNoZXMgdGhlICJjb29rZWQiIHZibGFuayBjb3VudCB2YWx1ZSB0aGF0IHJlcHJl c2VudHMgdGhlIG51bWJlciBvZgo+ID4gLSAqIHZibGFuayBldmVudHMgc2luY2UgdGhlIHN5c3Rl bSB3YXMgYm9vdGVkLCBpbmNsdWRpbmcgbG9zdCBldmVudHMgZHVlIHRvCj4gPiAtICogbW9kZXNl dHRpbmcgYWN0aXZpdHkuCj4gPiAtICoKPiA+IC0gKiBSZXR1cm5zOgo+ID4gLSAqIFRoZSBzb2Z0 d2FyZSB2YmxhbmsgY291bnRlci4KPiA+IC0gKi8KPiA+IC11MzIgZHJtX2NydGNfdmJsYW5rX2Nv dW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+IC17Cj4gPiAtCXJldHVybiBkcm1fdmJsYW5r X2NvdW50KGNydGMtPmRldiwgZHJtX2NydGNfaW5kZXgoY3J0YykpOwo+ID4gLX0KPiA+IC1FWFBP UlRfU1lNQk9MKGRybV9jcnRjX3ZibGFua19jb3VudCk7Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICog ZHJtX3ZibGFua19jb3VudF9hbmRfdGltZSAtIHJldHJpZXZlICJjb29rZWQiIHZibGFuayBjb3Vu dGVyIHZhbHVlIGFuZCB0aGUKPiA+IC0gKiAgICAgc3lzdGVtIHRpbWVzdGFtcCBjb3JyZXNwb25k aW5nIHRvIHRoYXQgdmJsYW5rIGNvdW50ZXIgdmFsdWUuCj4gPiAtICogQGRldjogRFJNIGRldmlj ZQo+ID4gLSAqIEBwaXBlOiBpbmRleCBvZiBDUlRDIHdob3NlIGNvdW50ZXIgdG8gcmV0cmlldmUK PiA+IC0gKiBAdmJsYW5rdGltZTogUG9pbnRlciB0byBzdHJ1Y3QgdGltZXZhbCB0byByZWNlaXZl IHRoZSB2YmxhbmsgdGltZXN0YW1wLgo+ID4gLSAqCj4gPiAtICogRmV0Y2hlcyB0aGUgImNvb2tl ZCIgdmJsYW5rIGNvdW50IHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mCj4gPiAt ICogdmJsYW5rIGV2ZW50cyBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIGluY2x1ZGluZyBs b3N0IGV2ZW50cyBkdWUgdG8KPiA+IC0gKiBtb2Rlc2V0dGluZyBhY3Rpdml0eS4gUmV0dXJucyBj b3JyZXNwb25kaW5nIHN5c3RlbSB0aW1lc3RhbXAgb2YgdGhlIHRpbWUKPiA+IC0gKiBvZiB0aGUg dmJsYW5rIGludGVydmFsIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgdmJsYW5rIGNv dW50ZXIgdmFsdWUuCj4gPiAtICoKPiA+IC0gKiBUaGlzIGlzIHRoZSBsZWdhY3kgdmVyc2lvbiBv ZiBkcm1fY3J0Y192YmxhbmtfY291bnRfYW5kX3RpbWUoKS4KPiA+IC0gKi8KPiA+IC1zdGF0aWMg dTMyIGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5z aWduZWQgaW50IHBpcGUsCj4gPiAtCQkJCSAgICAgc3RydWN0IHRpbWV2YWwgKnZibGFua3RpbWUp Cj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2LT52Ymxh bmtbcGlwZV07Cj4gPiAtCXUzMiB2YmxhbmtfY291bnQ7Cj4gPiAtCXVuc2lnbmVkIGludCBzZXE7 Cj4gPiAtCj4gPiAtCWlmIChXQVJOX09OKHBpcGUgPj0gZGV2LT5udW1fY3J0Y3MpKSB7Cj4gPiAt CQkqdmJsYW5rdGltZSA9IChzdHJ1Y3QgdGltZXZhbCkgeyAwIH07Cj4gPiAtCQlyZXR1cm4gMDsK PiA+IC0JfQo+ID4gLQo+ID4gLQlkbyB7Cj4gPiAtCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ2Ymxh bmstPnNlcWxvY2spOwo+ID4gLQkJdmJsYW5rX2NvdW50ID0gdmJsYW5rLT5jb3VudDsKPiA+IC0J CSp2Ymxhbmt0aW1lID0gdmJsYW5rLT50aW1lOwo+ID4gLQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5 KCZ2YmxhbmstPnNlcWxvY2ssIHNlcSkpOwo+ID4gLQo+ID4gLQlyZXR1cm4gdmJsYW5rX2NvdW50 Owo+ID4gLX0KPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcm1fY3J0Y192YmxhbmtfY291bnRfYW5k X3RpbWUgLSByZXRyaWV2ZSAiY29va2VkIiB2YmxhbmsgY291bnRlciB2YWx1ZQo+ID4gLSAqICAg ICBhbmQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgY29ycmVzcG9uZGluZyB0byB0aGF0IHZibGFuayBj b3VudGVyIHZhbHVlCj4gPiAtICogQGNydGM6IHdoaWNoIGNvdW50ZXIgdG8gcmV0cmlldmUKPiA+ IC0gKiBAdmJsYW5rdGltZTogUG9pbnRlciB0byBzdHJ1Y3QgdGltZXZhbCB0byByZWNlaXZlIHRo ZSB2YmxhbmsgdGltZXN0YW1wLgo+ID4gLSAqCj4gPiAtICogRmV0Y2hlcyB0aGUgImNvb2tlZCIg dmJsYW5rIGNvdW50IHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mCj4gPiAtICog dmJsYW5rIGV2ZW50cyBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIGluY2x1ZGluZyBsb3N0 IGV2ZW50cyBkdWUgdG8KPiA+IC0gKiBtb2Rlc2V0dGluZyBhY3Rpdml0eS4gUmV0dXJucyBjb3Jy ZXNwb25kaW5nIHN5c3RlbSB0aW1lc3RhbXAgb2YgdGhlIHRpbWUKPiA+IC0gKiBvZiB0aGUgdmJs YW5rIGludGVydmFsIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgdmJsYW5rIGNvdW50 ZXIgdmFsdWUuCj4gPiAtICovCj4gPiAtdTMyIGRybV9jcnRjX3ZibGFua19jb3VudF9hbmRfdGlt ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAtCQkJCSAgIHN0cnVjdCB0aW1ldmFsICp2Ymxh bmt0aW1lKQo+ID4gLXsKPiA+IC0JcmV0dXJuIGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoY3J0 Yy0+ZGV2LCBkcm1fY3J0Y19pbmRleChjcnRjKSwKPiA+IC0JCQkJCSB2Ymxhbmt0aW1lKTsKPiA+ IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChkcm1fY3J0Y192YmxhbmtfY291bnRfYW5kX3RpbWUpOwo+ ID4gLQo+ID4gLXN0YXRpYyB2b2lkIHNlbmRfdmJsYW5rX2V2ZW50KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gPiAtCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplLAo+ID4gLQkJ dW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCB0aW1ldmFsICpub3cpCj4gPiAtewo+ID4gLQllLT5l dmVudC5zZXF1ZW5jZSA9IHNlcTsKPiA+IC0JZS0+ZXZlbnQudHZfc2VjID0gbm93LT50dl9zZWM7 Cj4gPiAtCWUtPmV2ZW50LnR2X3VzZWMgPSBub3ctPnR2X3VzZWM7Cj4gPiAtCj4gPiAtCXRyYWNl X2RybV92YmxhbmtfZXZlbnRfZGVsaXZlcmVkKGUtPmJhc2UuZmlsZV9wcml2LCBlLT5waXBlLAo+ ID4gLQkJCQkJIGUtPmV2ZW50LnNlcXVlbmNlKTsKPiA+IC0KPiA+IC0JZHJtX3NlbmRfZXZlbnRf bG9ja2VkKGRldiwgJmUtPmJhc2UpOwo+ID4gLX0KPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcm1f Y3J0Y19hcm1fdmJsYW5rX2V2ZW50IC0gYXJtIHZibGFuayBldmVudCBhZnRlciBwYWdlZmxpcAo+ ID4gLSAqIEBjcnRjOiB0aGUgc291cmNlIENSVEMgb2YgdGhlIHZibGFuayBldmVudAo+ID4gLSAq IEBlOiB0aGUgZXZlbnQgdG8gc2VuZAo+ID4gLSAqCj4gPiAtICogQSBsb3Qgb2YgZHJpdmVycyBu ZWVkIHRvIGdlbmVyYXRlIHZibGFuayBldmVudHMgZm9yIHRoZSB2ZXJ5IG5leHQgdmJsYW5rCj4g PiAtICogaW50ZXJydXB0LiBGb3IgZXhhbXBsZSB3aGVuIHRoZSBwYWdlIGZsaXAgaW50ZXJydXB0 IGhhcHBlbnMgd2hlbiB0aGUgcGFnZQo+ID4gLSAqIGZsaXAgZ2V0cyBhcm1lZCwgYnV0IG5vdCB3 aGVuIGl0IGFjdHVhbGx5IGV4ZWN1dGVzIHdpdGhpbiB0aGUgbmV4dCB2YmxhbmsKPiA+IC0gKiBw ZXJpb2QuIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGltcGxlbWVudHMgZXhhY3RseSB0aGUgcmVxdWly ZWQgdmJsYW5rIGFybWluZwo+ID4gLSAqIGJlaGF2aW91ci4KPiA+IC0gKgo+ID4gLSAqIE5PVEU6 IERyaXZlcnMgdXNpbmcgdGhpcyB0byBzZW5kIG91dCB0aGUgJmRybV9jcnRjX3N0YXRlLmV2ZW50 IGFzIHBhcnQgb2YgYW4KPiA+IC0gKiBhdG9taWMgY29tbWl0IG11c3QgZW5zdXJlIHRoYXQgdGhl IG5leHQgdmJsYW5rIGhhcHBlbnMgYXQgZXhhY3RseSB0aGUgc2FtZQo+ID4gLSAqIHRpbWUgYXMg dGhlIGF0b21pYyBjb21taXQgaXMgY29tbWl0dGVkIHRvIHRoZSBoYXJkd2FyZS4gVGhpcyBmdW5j dGlvbiBpdHNlbGYKPiA+IC0gKiBkb2VzICoqbm90KiogcHJvdGVjdCBhZ2FpbiB0aGUgbmV4dCB2 YmxhbmsgaW50ZXJydXB0IHJhY2luZyB3aXRoIGVpdGhlciB0aGlzCj4gPiAtICogZnVuY3Rpb24g Y2FsbCBvciB0aGUgYXRvbWljIGNvbW1pdCBvcGVyYXRpb24uIEEgcG9zc2libGUgc2VxdWVuY2Ug Y291bGQgYmU6Cj4gPiAtICoKPiA+IC0gKiAxLiBEcml2ZXIgY29tbWl0cyBuZXcgaGFyZHdhcmUg c3RhdGUgaW50byB2Ymxhbmstc3luY2hyb25pemVkIHJlZ2lzdGVycy4KPiA+IC0gKiAyLiBBIHZi bGFuayBoYXBwZW5zLCBjb21taXR0aW5nIHRoZSBoYXJkd2FyZSBzdGF0ZS4gQWxzbyB0aGUgY29y cmVzcG9uZGluZwo+ID4gLSAqICAgIHZibGFuayBpbnRlcnJ1cHQgaXMgZmlyZWQgb2ZmIGFuZCBm dWxseSBwcm9jZXNzZWQgYnkgdGhlIGludGVycnVwdAo+ID4gLSAqICAgIGhhbmRsZXIuCj4gPiAt ICogMy4gVGhlIGF0b21pYyBjb21taXQgb3BlcmF0aW9uIHByb2NlZWRzIHRvIGNhbGwgZHJtX2Ny dGNfYXJtX3ZibGFua19ldmVudCgpLgo+ID4gLSAqIDQuIFRoZSBldmVudCBpcyBvbmx5IHNlbmQg b3V0IGZvciB0aGUgbmV4dCB2YmxhbmssIHdoaWNoIGlzIHdyb25nLgo+ID4gLSAqCj4gPiAtICog QW4gZXF1aXZhbGVudCByYWNlIGNhbiBoYXBwZW4gd2hlbiB0aGUgZHJpdmVyIGNhbGxzCj4gPiAt ICogZHJtX2NydGNfYXJtX3ZibGFua19ldmVudCgpIGJlZm9yZSB3cml0aW5nIG91dCB0aGUgbmV3 IGhhcmR3YXJlIHN0YXRlLgo+ID4gLSAqCj4gPiAtICogVGhlIG9ubHkgd2F5IHRvIG1ha2UgdGhp cyB3b3JrIHNhZmVseSBpcyB0byBwcmV2ZW50IHRoZSB2YmxhbmsgZnJvbSBmaXJpbmcKPiA+IC0g KiAoYW5kIHRoZSBoYXJkd2FyZSBmcm9tIGNvbW1pdHRpbmcgYW55dGhpbmcgZWxzZSkgdW50aWwg dGhlIGVudGlyZSBhdG9taWMKPiA+IC0gKiBjb21taXQgc2VxdWVuY2UgaGFzIHJ1biB0byBjb21w bGV0aW9uLiBJZiB0aGUgaGFyZHdhcmUgZG9lcyBub3QgaGF2ZSBzdWNoIGEKPiA+IC0gKiBmZWF0 dXJlIChlLmcuIHVzaW5nIGEgImdvIiBiaXQpLCB0aGVuIGl0IGlzIHVuc2FmZSB0byB1c2UgdGhp cyBmdW5jdGlvbnMuCj4gPiAtICogSW5zdGVhZCBkcml2ZXJzIG5lZWQgdG8gbWFudWFsbHkgc2Vu ZCBvdXQgdGhlIGV2ZW50IGZyb20gdGhlaXIgaW50ZXJydXB0Cj4gPiAtICogaGFuZGxlciBieSBj YWxsaW5nIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KCkgYW5kIG1ha2Ugc3VyZSB0aGF0Cj4g PiB0aGVyZSdzIG5vCj4gPiAtICogcG9zc2libGUgcmFjZSB3aXRoIHRoZSBoYXJkd2FyZSBjb21t aXR0aW5nIHRoZSBhdG9taWMgdXBkYXRlLgo+ID4gLSAqCj4gPiAtICogQ2FsbGVyIG11c3QgaG9s ZCBldmVudCBsb2NrLiBDYWxsZXIgbXVzdCBhbHNvIGhvbGQgYSB2YmxhbmsgcmVmZXJlbmNlIGZv cgo+ID4gLSAqIHRoZSBldmVudCBAZSwgd2hpY2ggd2lsbCBiZSBkcm9wcGVkIHdoZW4gdGhlIG5l eHQgdmJsYW5rIGFycml2ZXMuCj4gPiAtICovCj4gPiAtdm9pZCBkcm1fY3J0Y19hcm1fdmJsYW5r X2V2ZW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+IC0JCQkgICAgICAgc3RydWN0IGRybV9w ZW5kaW5nX3ZibGFua19ldmVudCAqZSkKPiA+IC17Cj4gPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5kZXY7Cj4gPiAtCXVuc2lnbmVkIGludCBwaXBlID0gZHJtX2NydGNfaW5kZXgo Y3J0Yyk7Cj4gPiAtCj4gPiAtCWFzc2VydF9zcGluX2xvY2tlZCgmZGV2LT5ldmVudF9sb2NrKTsK PiA+IC0KPiA+IC0JZS0+cGlwZSA9IHBpcGU7Cj4gPiAtCWUtPmV2ZW50LnNlcXVlbmNlID0gZHJt X3ZibGFua19jb3VudChkZXYsIHBpcGUpOwo+ID4gLQllLT5ldmVudC5jcnRjX2lkID0gY3J0Yy0+ YmFzZS5pZDsKPiA+IC0JbGlzdF9hZGRfdGFpbCgmZS0+YmFzZS5saW5rLCAmZGV2LT52Ymxhbmtf ZXZlbnRfbGlzdCk7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1CT0woZHJtX2NydGNfYXJtX3ZibGFu a19ldmVudCk7Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX2NydGNfc2VuZF92YmxhbmtfZXZl bnQgLSBoZWxwZXIgdG8gc2VuZCB2YmxhbmsgZXZlbnQgYWZ0ZXIgcGFnZWZsaXAKPiA+IC0gKiBA Y3J0YzogdGhlIHNvdXJjZSBDUlRDIG9mIHRoZSB2YmxhbmsgZXZlbnQKPiA+IC0gKiBAZTogdGhl IGV2ZW50IHRvIHNlbmQKPiA+IC0gKgo+ID4gLSAqIFVwZGF0ZXMgc2VxdWVuY2UgIyBhbmQgdGlt ZXN0YW1wIG9uIGV2ZW50IGZvciB0aGUgbW9zdCByZWNlbnRseSBwcm9jZXNzZWQKPiA+IC0gKiB2 YmxhbmssIGFuZCBzZW5kcyBpdCB0byB1c2Vyc3BhY2UuICBDYWxsZXIgbXVzdCBob2xkIGV2ZW50 IGxvY2suCj4gPiAtICoKPiA+IC0gKiBTZWUgZHJtX2NydGNfYXJtX3ZibGFua19ldmVudCgpIGZv ciBhIGhlbHBlciB3aGljaCBjYW4gYmUgdXNlZCBpbiBjZXJ0YWluCj4gPiAtICogc2l0dWF0aW9u LCBlc3BlY2lhbGx5IHRvIHNlbmQgb3V0IGV2ZW50cyBmb3IgYXRvbWljIGNvbW1pdCBvcGVyYXRp b25zLgo+ID4gLSAqLwo+ID4gLXZvaWQgZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoc3RydWN0 IGRybV9jcnRjICpjcnRjLAo+ID4gLQkJCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50 ICplKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+ IC0JdW5zaWduZWQgaW50IHNlcSwgcGlwZSA9IGRybV9jcnRjX2luZGV4KGNydGMpOwo+ID4gLQlz dHJ1Y3QgdGltZXZhbCBub3c7Cj4gPiAtCj4gPiAtCWlmIChkZXYtPm51bV9jcnRjcyA+IDApIHsK PiA+IC0JCXNlcSA9IGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoZGV2LCBwaXBlLCAmbm93KTsK PiA+IC0JfSBlbHNlIHsKPiA+IC0JCXNlcSA9IDA7Cj4gPiAtCj4gPiAtCQlub3cgPSBnZXRfZHJt X3RpbWVzdGFtcCgpOwo+ID4gLQl9Cj4gPiAtCWUtPnBpcGUgPSBwaXBlOwo+ID4gLQllLT5ldmVu dC5jcnRjX2lkID0gY3J0Yy0+YmFzZS5pZDsKPiA+IC0Jc2VuZF92YmxhbmtfZXZlbnQoZGV2LCBl LCBzZXEsICZub3cpOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKGRybV9jcnRjX3NlbmRfdmJs YW5rX2V2ZW50KTsKPiA+IC0KPiA+IC1zdGF0aWMgaW50IF9fZW5hYmxlX3ZibGFuayhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSkKPiA+IC17Cj4gPiAtCWlmIChkcm1f Y29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7Cj4gPiAtCQlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMgPSBkcm1fY3J0Y19mcm9tX2luZGV4KGRldiwgcGlwZSk7Cj4gPiAtCj4g PiAtCQlpZiAoY3J0Yy0+ZnVuY3MtPmVuYWJsZV92YmxhbmspCj4gPiAtCQkJcmV0dXJuIGNydGMt PmZ1bmNzLT5lbmFibGVfdmJsYW5rKGNydGMpOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCXJldHVybiBk ZXYtPmRyaXZlci0+ZW5hYmxlX3ZibGFuayhkZXYsIHBpcGUpOwo+ID4gLX0KPiA+IC0KPiA+IC0v KioKPiA+IC0gKiBkcm1fdmJsYW5rX2VuYWJsZSAtIGVuYWJsZSB0aGUgdmJsYW5rIGludGVycnVw dCBvbiBhIENSVEMKPiA+IC0gKiBAZGV2OiBEUk0gZGV2aWNlCj4gPiAtICogQHBpcGU6IENSVEMg aW5kZXgKPiA+IC0gKgo+ID4gLSAqIFJldHVybnM6Cj4gPiAtICogWmVybyBvbiBzdWNjZXNzIG9y IGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gLSAqLwo+ID4gLXN0YXRpYyBp bnQgZHJtX3ZibGFua19lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50 IHBpcGUpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2 LT52YmxhbmtbcGlwZV07Cj4gPiAtCWludCByZXQgPSAwOwo+ID4gLQo+ID4gLQlhc3NlcnRfc3Bp bl9sb2NrZWQoJmRldi0+dmJsX2xvY2spOwo+ID4gLQo+ID4gLQlzcGluX2xvY2soJmRldi0+dmJs YW5rX3RpbWVfbG9jayk7Cj4gPiAtCj4gPiAtCWlmICghdmJsYW5rLT5lbmFibGVkKSB7Cj4gPiAt CQkvKgo+ID4gLQkJICogRW5hYmxlIHZibGFuayBpcnFzIHVuZGVyIHZibGFua190aW1lX2xvY2sg cHJvdGVjdGlvbi4KPiA+IC0JCSAqIEFsbCB2YmxhbmsgY291bnQgJiB0aW1lc3RhbXAgdXBkYXRl cyBhcmUgaGVsZCBvZmYKPiA+IC0JCSAqIHVudGlsIHdlIGFyZSBkb25lIHJlaW5pdGlhbGl6aW5n IG1hc3RlciBjb3VudGVyIGFuZAo+ID4gLQkJICogdGltZXN0YW1wcy4gRmlsdGVyY29kZSBpbiBk cm1faGFuZGxlX3ZibGFuaygpIHdpbGwKPiA+IC0JCSAqIHByZXZlbnQgZG91YmxlLWFjY291bnRp bmcgb2Ygc2FtZSB2YmxhbmsgaW50ZXJ2YWwuCj4gPiAtCQkgKi8KPiA+IC0JCXJldCA9IF9fZW5h YmxlX3ZibGFuayhkZXYsIHBpcGUpOwo+ID4gLQkJRFJNX0RFQlVHKCJlbmFibGluZyB2Ymxhbmsg b24gY3J0YyAldSwgcmV0OiAlZFxuIiwgcGlwZSwgcmV0KTsKPiA+IC0JCWlmIChyZXQpIHsKPiA+ IC0JCQlhdG9taWNfZGVjKCZ2YmxhbmstPnJlZmNvdW50KTsKPiA+IC0JCX0gZWxzZSB7Cj4gPiAt CQkJZHJtX3VwZGF0ZV92YmxhbmtfY291bnQoZGV2LCBwaXBlLCAwKTsKPiA+IC0JCQkvKiBkcm1f dXBkYXRlX3ZibGFua19jb3VudCgpIGluY2x1ZGVzIGEgd21iIHNvIHdlIGp1c3QKPiA+IC0JCQkg KiBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb21waWxlciBlbWl0cyB0aGUgd3JpdGUKPiA+IC0J CQkgKiB0byBtYXJrIHRoZSB2YmxhbmsgYXMgZW5hYmxlZCBhZnRlciB0aGUgY2FsbAo+ID4gLQkJ CSAqIHRvIGRybV91cGRhdGVfdmJsYW5rX2NvdW50KCkuCj4gPiAtCQkJICovCj4gPiAtCQkJV1JJ VEVfT05DRSh2YmxhbmstPmVuYWJsZWQsIHRydWUpOwo+ID4gLQkJfQo+ID4gLQl9Cj4gPiAtCj4g PiAtCXNwaW5fdW5sb2NrKCZkZXYtPnZibGFua190aW1lX2xvY2spOwo+ID4gLQo+ID4gLQlyZXR1 cm4gcmV0Owo+ID4gLX0KPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcm1fdmJsYW5rX2dldCAtIGdl dCBhIHJlZmVyZW5jZSBjb3VudCBvbiB2YmxhbmsgZXZlbnRzCj4gPiAtICogQGRldjogRFJNIGRl dmljZQo+ID4gLSAqIEBwaXBlOiBpbmRleCBvZiBDUlRDIHRvIG93bgo+ID4gLSAqCj4gPiAtICog QWNxdWlyZSBhIHJlZmVyZW5jZSBjb3VudCBvbiB2YmxhbmsgZXZlbnRzIHRvIGF2b2lkIGhhdmlu ZyB0aGVtIGRpc2FibGVkCj4gPiAtICogd2hpbGUgaW4gdXNlLgo+ID4gLSAqCj4gPiAtICogVGhp cyBpcyB0aGUgbGVnYWN5IHZlcnNpb24gb2YgZHJtX2NydGNfdmJsYW5rX2dldCgpLgo+ID4gLSAq Cj4gPiAtICogUmV0dXJuczoKPiA+IC0gKiBaZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBl cnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiAtICovCj4gPiAtc3RhdGljIGludCBkcm1fdmJsYW5r X2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSkKPiA+IC17Cj4g PiAtCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYtPnZibGFua1twaXBlXTsK PiA+IC0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiA+IC0JaW50IHJldCA9IDA7Cj4gPiAtCj4g PiAtCWlmICghZGV2LT5udW1fY3J0Y3MpCj4gPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiA+IC0KPiA+ IC0JaWYgKFdBUk5fT04ocGlwZSA+PSBkZXYtPm51bV9jcnRjcykpCj4gPiAtCQlyZXR1cm4gLUVJ TlZBTDsKPiA+IC0KPiA+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsX2xvY2ssIGlycWZs YWdzKTsKPiA+IC0JLyogR29pbmcgZnJvbSAwLT4xIG1lYW5zIHdlIGhhdmUgdG8gZW5hYmxlIGlu dGVycnVwdHMgYWdhaW4gKi8KPiA+IC0JaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZ2Ymxhbmst PnJlZmNvdW50KSA9PSAxKSB7Cj4gPiAtCQlyZXQgPSBkcm1fdmJsYW5rX2VuYWJsZShkZXYsIHBp cGUpOwo+ID4gLQl9IGVsc2Ugewo+ID4gLQkJaWYgKCF2YmxhbmstPmVuYWJsZWQpIHsKPiA+IC0J CQlhdG9taWNfZGVjKCZ2YmxhbmstPnJlZmNvdW50KTsKPiA+IC0JCQlyZXQgPSAtRUlOVkFMOwo+ ID4gLQkJfQo+ID4gLQl9Cj4gPiAtCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xv Y2ssIGlycWZsYWdzKTsKPiA+IC0KPiA+IC0JcmV0dXJuIHJldDsKPiA+IC19Cj4gPiAtCj4gPiAt LyoqCj4gPiAtICogZHJtX2NydGNfdmJsYW5rX2dldCAtIGdldCBhIHJlZmVyZW5jZSBjb3VudCBv biB2YmxhbmsgZXZlbnRzCj4gPiAtICogQGNydGM6IHdoaWNoIENSVEMgdG8gb3duCj4gPiAtICoK PiA+IC0gKiBBY3F1aXJlIGEgcmVmZXJlbmNlIGNvdW50IG9uIHZibGFuayBldmVudHMgdG8gYXZv aWQgaGF2aW5nIHRoZW0gZGlzYWJsZWQKPiA+IC0gKiB3aGlsZSBpbiB1c2UuCj4gPiAtICoKPiA+ IC0gKiBSZXR1cm5zOgo+ID4gLSAqIFplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9y IGNvZGUgb24gZmFpbHVyZS4KPiA+IC0gKi8KPiA+IC1pbnQgZHJtX2NydGNfdmJsYW5rX2dldChz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiAtewo+ID4gLQlyZXR1cm4gZHJtX3ZibGFua19nZXQo Y3J0Yy0+ZGV2LCBkcm1fY3J0Y19pbmRleChjcnRjKSk7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1C T0woZHJtX2NydGNfdmJsYW5rX2dldCk7Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX3ZibGFu a19wdXQgLSByZWxlYXNlIG93bmVyc2hpcCBvZiB2YmxhbmsgZXZlbnRzCj4gPiAtICogQGRldjog RFJNIGRldmljZQo+ID4gLSAqIEBwaXBlOiBpbmRleCBvZiBDUlRDIHRvIHJlbGVhc2UKPiA+IC0g Kgo+ID4gLSAqIFJlbGVhc2Ugb3duZXJzaGlwIG9mIGEgZ2l2ZW4gdmJsYW5rIGNvdW50ZXIsIHR1 cm5pbmcgb2ZmIGludGVycnVwdHMKPiA+IC0gKiBpZiBwb3NzaWJsZS4gRGlzYWJsZSBpbnRlcnJ1 cHRzIGFmdGVyIGRybV92Ymxhbmtfb2ZmZGVsYXkgbWlsbGlzZWNvbmRzLgo+ID4gLSAqCj4gPiAt ICogVGhpcyBpcyB0aGUgbGVnYWN5IHZlcnNpb24gb2YgZHJtX2NydGNfdmJsYW5rX3B1dCgpLgo+ ID4gLSAqLwo+ID4gLXN0YXRpYyB2b2lkIGRybV92YmxhbmtfcHV0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV92Ymxhbmtf Y3J0YyAqdmJsYW5rID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gLQo+ID4gLQlpZiAoV0FSTl9P TihwaXBlID49IGRldi0+bnVtX2NydGNzKSkKPiA+IC0JCXJldHVybjsKPiA+IC0KPiA+IC0JaWYg KFdBUk5fT04oYXRvbWljX3JlYWQoJnZibGFuay0+cmVmY291bnQpID09IDApKQo+ID4gLQkJcmV0 dXJuOwo+ID4gLQo+ID4gLQkvKiBMYXN0IHVzZXIgc2NoZWR1bGVzIGludGVycnVwdCBkaXNhYmxl ICovCj4gPiAtCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ2YmxhbmstPnJlZmNvdW50KSkgewo+ ID4gLQkJaWYgKGRybV92Ymxhbmtfb2ZmZGVsYXkgPT0gMCkKPiA+IC0JCQlyZXR1cm47Cj4gPiAt CQllbHNlIGlmIChkcm1fdmJsYW5rX29mZmRlbGF5IDwgMCkKPiA+IC0JCQl2YmxhbmtfZGlzYWJs ZV9mbigodW5zaWduZWQgbG9uZyl2YmxhbmspOwo+ID4gLQkJZWxzZSBpZiAoIWRldi0+dmJsYW5r X2Rpc2FibGVfaW1tZWRpYXRlKQo+ID4gLQkJCW1vZF90aW1lcigmdmJsYW5rLT5kaXNhYmxlX3Rp bWVyLAo+ID4gLQkJCQkgIGppZmZpZXMgKyAoKGRybV92Ymxhbmtfb2ZmZGVsYXkgKiBIWikvMTAw MCkpOwo+ID4gLQl9Cj4gPiAtfQo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIGRybV9jcnRjX3ZibGFu a19wdXQgLSBnaXZlIHVwIG93bmVyc2hpcCBvZiB2YmxhbmsgZXZlbnRzCj4gPiAtICogQGNydGM6 IHdoaWNoIGNvdW50ZXIgdG8gZ2l2ZSB1cAo+ID4gLSAqCj4gPiAtICogUmVsZWFzZSBvd25lcnNo aXAgb2YgYSBnaXZlbiB2YmxhbmsgY291bnRlciwgdHVybmluZyBvZmYgaW50ZXJydXB0cwo+ID4g LSAqIGlmIHBvc3NpYmxlLiBEaXNhYmxlIGludGVycnVwdHMgYWZ0ZXIgZHJtX3ZibGFua19vZmZk ZWxheSBtaWxsaXNlY29uZHMuCj4gPiAtICovCj4gPiAtdm9pZCBkcm1fY3J0Y192YmxhbmtfcHV0 KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+IC17Cj4gPiAtCWRybV92YmxhbmtfcHV0KGNydGMt PmRldiwgZHJtX2NydGNfaW5kZXgoY3J0YykpOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKGRy bV9jcnRjX3ZibGFua19wdXQpOwo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIGRybV93YWl0X29uZV92 YmxhbmsgLSB3YWl0IGZvciBvbmUgdmJsYW5rCj4gPiAtICogQGRldjogRFJNIGRldmljZQo+ID4g LSAqIEBwaXBlOiBDUlRDIGluZGV4Cj4gPiAtICoKPiA+IC0gKiBUaGlzIHdhaXRzIGZvciBvbmUg dmJsYW5rIHRvIHBhc3Mgb24gQHBpcGUsIHVzaW5nIHRoZSBpcnEgZHJpdmVyIGludGVyZmFjZXMu Cj4gPiAtICogSXQgaXMgYSBmYWlsdXJlIHRvIGNhbGwgdGhpcyB3aGVuIHRoZSB2YmxhbmsgaXJx IGZvciBAcGlwZSBpcyBkaXNhYmxlZCwgZS5nLgo+ID4gLSAqIGR1ZSB0byBsYWNrIG9mIGRyaXZl ciBzdXBwb3J0IG9yIGJlY2F1c2UgdGhlIGNydGMgaXMgb2ZmLgo+ID4gLSAqLwo+ID4gLXZvaWQg ZHJtX3dhaXRfb25lX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQg cGlwZSkKPiA+IC17Cj4gPiAtCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYt PnZibGFua1twaXBlXTsKPiA+IC0JaW50IHJldDsKPiA+IC0JdTMyIGxhc3Q7Cj4gPiAtCj4gPiAt CWlmIChXQVJOX09OKHBpcGUgPj0gZGV2LT5udW1fY3J0Y3MpKQo+ID4gLQkJcmV0dXJuOwo+ID4g LQo+ID4gLQlyZXQgPSBkcm1fdmJsYW5rX2dldChkZXYsIHBpcGUpOwo+ID4gLQlpZiAoV0FSTihy ZXQsICJ2Ymxhbmsgbm90IGF2YWlsYWJsZSBvbiBjcnRjICVpLCByZXQ9JWlcbiIsIHBpcGUsIHJl dCkpCj4gPiAtCQlyZXR1cm47Cj4gPiAtCj4gPiAtCWxhc3QgPSBkcm1fdmJsYW5rX2NvdW50KGRl diwgcGlwZSk7Cj4gPiAtCj4gPiAtCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dCh2YmxhbmstPnF1 ZXVlLAo+ID4gLQkJCQkgbGFzdCAhPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgcGlwZSksCj4gPiAt CQkJCSBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwo+ID4gLQo+ID4gLQlXQVJOKHJldCA9PSAwLCAi dmJsYW5rIHdhaXQgdGltZWQgb3V0IG9uIGNydGMgJWlcbiIsIHBpcGUpOwo+ID4gLQo+ID4gLQlk cm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKGRybV93 YWl0X29uZV92YmxhbmspOwo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIGRybV9jcnRjX3dhaXRfb25l X3ZibGFuayAtIHdhaXQgZm9yIG9uZSB2YmxhbmsKPiA+IC0gKiBAY3J0YzogRFJNIGNydGMKPiA+ IC0gKgo+ID4gLSAqIFRoaXMgd2FpdHMgZm9yIG9uZSB2YmxhbmsgdG8gcGFzcyBvbiBAY3J0Yywg dXNpbmcgdGhlIGlycSBkcml2ZXIgaW50ZXJmYWNlcy4KPiA+IC0gKiBJdCBpcyBhIGZhaWx1cmUg dG8gY2FsbCB0aGlzIHdoZW4gdGhlIHZibGFuayBpcnEgZm9yIEBjcnRjIGlzIGRpc2FibGVkLCBl LmcuCj4gPiAtICogZHVlIHRvIGxhY2sgb2YgZHJpdmVyIHN1cHBvcnQgb3IgYmVjYXVzZSB0aGUg Y3J0YyBpcyBvZmYuCj4gPiAtICovCj4gPiAtdm9pZCBkcm1fY3J0Y193YWl0X29uZV92Ymxhbmso c3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gLXsKPiA+IC0JZHJtX3dhaXRfb25lX3ZibGFuayhj cnRjLT5kZXYsIGRybV9jcnRjX2luZGV4KGNydGMpKTsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJP TChkcm1fY3J0Y193YWl0X29uZV92YmxhbmspOwo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIGRybV9j cnRjX3ZibGFua19vZmYgLSBkaXNhYmxlIHZibGFuayBldmVudHMgb24gYSBDUlRDCj4gPiAtICog QGNydGM6IENSVEMgaW4gcXVlc3Rpb24KPiA+IC0gKgo+ID4gLSAqIERyaXZlcnMgY2FuIHVzZSB0 aGlzIGZ1bmN0aW9uIHRvIHNodXQgZG93biB0aGUgdmJsYW5rIGludGVycnVwdAo+ID4gaGFuZGxp bmcgd2hlbgo+ID4gLSAqIGRpc2FibGluZyBhIGNydGMuIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0 aGF0IHRoZSBsYXRlc3QgdmJsYW5rCj4gPiBmcmFtZSBjb3VudCBpcwo+ID4gLSAqIHN0b3JlZCBz byB0aGF0IGRybV92Ymxhbmtfb24gY2FuIHJlc3RvcmUgaXQgYWdhaW4uCj4gPiAtICoKPiA+IC0g KiBEcml2ZXJzIG11c3QgdXNlIHRoaXMgZnVuY3Rpb24gd2hlbiB0aGUgaGFyZHdhcmUgdmJsYW5r IGNvdW50ZXIgY2FuIGdldAo+ID4gLSAqIHJlc2V0LCBlLmcuIHdoZW4gc3VzcGVuZGluZy4KPiA+ IC0gKi8KPiA+IC12b2lkIGRybV9jcnRjX3ZibGFua19vZmYoc3RydWN0IGRybV9jcnRjICpjcnRj KQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+IC0J dW5zaWduZWQgaW50IHBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsKPiA+IC0Jc3RydWN0IGRy bV92YmxhbmtfY3J0YyAqdmJsYW5rID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gLQlzdHJ1Y3Qg ZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplLCAqdDsKPiA+IC0Jc3RydWN0IHRpbWV2YWwgbm93 Owo+ID4gLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+ID4gLQl1bnNpZ25lZCBpbnQgc2VxOwo+ ID4gLQo+ID4gLQlpZiAoV0FSTl9PTihwaXBlID49IGRldi0+bnVtX2NydGNzKSkKPiA+IC0JCXJl dHVybjsKPiA+IC0KPiA+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgaXJx ZmxhZ3MpOwo+ID4gLQo+ID4gLQlzcGluX2xvY2soJmRldi0+dmJsX2xvY2spOwo+ID4gLQlEUk1f REVCVUdfVkJMKCJjcnRjICVkLCB2YmxhbmsgZW5hYmxlZCAlZCwgaW5tb2Rlc2V0ICVkXG4iLAo+ ID4gLQkJICAgICAgcGlwZSwgdmJsYW5rLT5lbmFibGVkLCB2YmxhbmstPmlubW9kZXNldCk7Cj4g PiAtCj4gPiAtCS8qIEF2b2lkIHJlZHVuZGFudCB2YmxhbmsgZGlzYWJsZXMgd2l0aG91dCBwcmV2 aW91cwo+ID4gLQkgKiBkcm1fY3J0Y192Ymxhbmtfb24oKS4gKi8KPiA+IC0JaWYgKGRybV9jb3Jl X2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfQVRPTUlDKSB8fCAhdmJsYW5rLT5pbm1vZGVzZXQp Cj4gPiAtCQl2YmxhbmtfZGlzYWJsZV9hbmRfc2F2ZShkZXYsIHBpcGUpOwo+ID4gLQo+ID4gLQl3 YWtlX3VwKCZ2YmxhbmstPnF1ZXVlKTsKPiA+IC0KPiA+IC0JLyoKPiA+IC0JICogUHJldmVudCBz dWJzZXF1ZW50IGRybV92YmxhbmtfZ2V0KCkgZnJvbSByZS1lbmFibGluZwo+ID4gLQkgKiB0aGUg dmJsYW5rIGludGVycnVwdCBieSBidW1waW5nIHRoZSByZWZjb3VudC4KPiA+IC0JICovCj4gPiAt CWlmICghdmJsYW5rLT5pbm1vZGVzZXQpIHsKPiA+IC0JCWF0b21pY19pbmMoJnZibGFuay0+cmVm Y291bnQpOwo+ID4gLQkJdmJsYW5rLT5pbm1vZGVzZXQgPSAxOwo+ID4gLQl9Cj4gPiAtCXNwaW5f dW5sb2NrKCZkZXYtPnZibF9sb2NrKTsKPiA+IC0KPiA+IC0JLyogU2VuZCBhbnkgcXVldWVkIHZi bGFuayBldmVudHMsIGxlc3QgdGhlIG5hdGl2ZXMgZ3JvdyBkaXNxdWlldCAqLwo+ID4gLQlzZXEg PSBkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKGRldiwgcGlwZSwgJm5vdyk7Cj4gPiAtCj4gPiAt CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCB0LCAmZGV2LT52YmxhbmtfZXZlbnRfbGlzdCwg YmFzZS5saW5rKSB7Cj4gPiAtCQlpZiAoZS0+cGlwZSAhPSBwaXBlKQo+ID4gLQkJCWNvbnRpbnVl Owo+ID4gLQkJRFJNX0RFQlVHKCJTZW5kaW5nIHByZW1hdHVyZSB2YmxhbmsgZXZlbnQgb24gZGlz YWJsZTogIgo+ID4gLQkJCSAgIndhbnRlZCAldSwgY3VycmVudCAldVxuIiwKPiA+IC0JCQkgIGUt PmV2ZW50LnNlcXVlbmNlLCBzZXEpOwo+ID4gLQkJbGlzdF9kZWwoJmUtPmJhc2UubGluayk7Cj4g PiAtCQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwo+ID4gLQkJc2VuZF92YmxhbmtfZXZlbnQo ZGV2LCBlLCBzZXEsICZub3cpOwo+ID4gLQl9Cj4gPiAtCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmRldi0+ZXZlbnRfbG9jaywgaXJxZmxhZ3MpOwo+ID4gLQo+ID4gLQkvKiBXaWxsIGJlIHJlc2V0 IGJ5IHRoZSBtb2Rlc2V0IGhlbHBlcnMgd2hlbiByZS1lbmFibGluZyB0aGUgY3J0YyBieQo+ID4g LQkgKiBjYWxsaW5nIGRybV9jYWxjX3RpbWVzdGFtcGluZ19jb25zdGFudHMoKS4gKi8KPiA+IC0J dmJsYW5rLT5od21vZGUuY3J0Y19jbG9jayA9IDA7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1CT0wo ZHJtX2NydGNfdmJsYW5rX29mZik7Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX2NydGNfdmJs YW5rX3Jlc2V0IC0gcmVzZXQgdmJsYW5rIHN0YXRlIHRvIG9mZiBvbiBhIENSVEMKPiA+IC0gKiBA Y3J0YzogQ1JUQyBpbiBxdWVzdGlvbgo+ID4gLSAqCj4gPiAtICogRHJpdmVycyBjYW4gdXNlIHRo aXMgZnVuY3Rpb24gdG8gcmVzZXQgdGhlIHZibGFuayBzdGF0ZSB0byBvZmYgYXQgbG9hZCB0aW1l Lgo+ID4gLSAqIERyaXZlcnMgc2hvdWxkIHVzZSB0aGlzIHRvZ2V0aGVyIHdpdGggdGhlIGRybV9j cnRjX3ZibGFua19vZmYoKSBhbmQKPiA+IC0gKiBkcm1fY3J0Y192Ymxhbmtfb24oKSBmdW5jdGlv bnMuIFRoZSBkaWZmZXJlbmNlIGNvbXBhcmVkIHRvCj4gPiAtICogZHJtX2NydGNfdmJsYW5rX29m ZigpIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHNhdmUgdGhlIHZibGFuayBjb3VudGVy Cj4gPiAtICogYW5kIGhlbmNlIGRvZXNuJ3QgbmVlZCB0byBjYWxsIGFueSBkcml2ZXIgaG9va3Mu Cj4gPiAtICovCj4gPiAtdm9pZCBkcm1fY3J0Y192YmxhbmtfcmVzZXQoc3RydWN0IGRybV9jcnRj ICpjcnRjKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsK PiA+IC0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiA+IC0JdW5zaWduZWQgaW50IHBpcGUgPSBk cm1fY3J0Y19pbmRleChjcnRjKTsKPiA+IC0Jc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5r ID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gLQo+ID4gLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2 LT52YmxfbG9jaywgaXJxZmxhZ3MpOwo+ID4gLQkvKgo+ID4gLQkgKiBQcmV2ZW50IHN1YnNlcXVl bnQgZHJtX3ZibGFua19nZXQoKSBmcm9tIGVuYWJsaW5nIHRoZSB2YmxhbmsKPiA+IC0JICogaW50 ZXJydXB0IGJ5IGJ1bXBpbmcgdGhlIHJlZmNvdW50Lgo+ID4gLQkgKi8KPiA+IC0JaWYgKCF2Ymxh bmstPmlubW9kZXNldCkgewo+ID4gLQkJYXRvbWljX2luYygmdmJsYW5rLT5yZWZjb3VudCk7Cj4g PiAtCQl2YmxhbmstPmlubW9kZXNldCA9IDE7Cj4gPiAtCX0KPiA+IC0Jc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwo+ID4gLQo+ID4gLQlXQVJOX09OKCFs aXN0X2VtcHR5KCZkZXYtPnZibGFua19ldmVudF9saXN0KSk7Cj4gPiAtfQo+ID4gLUVYUE9SVF9T WU1CT0woZHJtX2NydGNfdmJsYW5rX3Jlc2V0KTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcm1f Y3J0Y192Ymxhbmtfb24gLSBlbmFibGUgdmJsYW5rIGV2ZW50cyBvbiBhIENSVEMKPiA+IC0gKiBA Y3J0YzogQ1JUQyBpbiBxdWVzdGlvbgo+ID4gLSAqCj4gPiAtICogVGhpcyBmdW5jdGlvbnMgcmVz dG9yZXMgdGhlIHZibGFuayBpbnRlcnJ1cHQgc3RhdGUgY2FwdHVyZWQgd2l0aAo+ID4gLSAqIGRy bV9jcnRjX3ZibGFua19vZmYoKSBhZ2Fpbi4gTm90ZSB0aGF0IGNhbGxzIHRvIGRybV9jcnRjX3Zi bGFua19vbigpIGFuZAo+ID4gLSAqIGRybV9jcnRjX3ZibGFua19vZmYoKSBjYW4gYmUgdW5iYWxh bmNlZCBhbmQgc28gY2FuIGFsc28gYmUKPiA+IHVuY29uZGl0aW9uYWxseSBjYWxsZWQKPiA+IC0g KiBpbiBkcml2ZXIgbG9hZCBjb2RlIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgaGFyZHdhcmUgc3Rh dGUgb2YgdGhlIGNydGMuCj4gPiAtICovCj4gPiAtdm9pZCBkcm1fY3J0Y192Ymxhbmtfb24oc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNydGMtPmRldjsKPiA+IC0JdW5zaWduZWQgaW50IHBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRj KTsKPiA+IC0Jc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5rID0gJmRldi0+dmJsYW5rW3Bp cGVdOwo+ID4gLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+ID4gLQo+ID4gLQlpZiAoV0FSTl9P TihwaXBlID49IGRldi0+bnVtX2NydGNzKSkKPiA+IC0JCXJldHVybjsKPiA+IC0KPiA+IC0Jc3Bp bl9sb2NrX2lycXNhdmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKPiA+IC0JRFJNX0RFQlVH X1ZCTCgiY3J0YyAlZCwgdmJsYW5rIGVuYWJsZWQgJWQsIGlubW9kZXNldCAlZFxuIiwKPiA+IC0J CSAgICAgIHBpcGUsIHZibGFuay0+ZW5hYmxlZCwgdmJsYW5rLT5pbm1vZGVzZXQpOwo+ID4gLQo+ ID4gLQkvKiBEcm9wIG91ciBwcml2YXRlICJwcmV2ZW50IGRybV92YmxhbmtfZ2V0IiByZWZjb3Vu dCAqLwo+ID4gLQlpZiAodmJsYW5rLT5pbm1vZGVzZXQpIHsKPiA+IC0JCWF0b21pY19kZWMoJnZi bGFuay0+cmVmY291bnQpOwo+ID4gLQkJdmJsYW5rLT5pbm1vZGVzZXQgPSAwOwo+ID4gLQl9Cj4g PiAtCj4gPiAtCWRybV9yZXNldF92YmxhbmtfdGltZXN0YW1wKGRldiwgcGlwZSk7Cj4gPiAtCj4g PiAtCS8qCj4gPiAtCSAqIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIHRoZXJlIGFyZSB1c2VycyBs ZWZ0LCBvciB0aGUKPiA+IC0JICogdXNlciB3aXNoZXMgdmJsYW5rIGludGVycnVwdHMgdG8gYmUg ZW5hYmxlZCBhbGwgdGhlIHRpbWUuCj4gPiAtCSAqLwo+ID4gLQlpZiAoYXRvbWljX3JlYWQoJnZi bGFuay0+cmVmY291bnQpICE9IDAgfHwgZHJtX3ZibGFua19vZmZkZWxheSA9PSAwKQo+ID4gLQkJ V0FSTl9PTihkcm1fdmJsYW5rX2VuYWJsZShkZXYsIHBpcGUpKTsKPiA+IC0Jc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwo+ID4gLX0KPiA+IC1FWFBPUlRf U1lNQk9MKGRybV9jcnRjX3ZibGFua19vbik7Cj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgZHJtX2xl Z2FjeV92YmxhbmtfcHJlX21vZGVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+IC0JCQkJ CSAgdW5zaWduZWQgaW50IHBpcGUpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX3ZibGFua19jcnRj ICp2YmxhbmsgPSAmZGV2LT52YmxhbmtbcGlwZV07Cj4gPiAtCj4gPiAtCS8qIHZibGFuayBpcyBu b3QgaW5pdGlhbGl6ZWQgKElSUSBub3QgaW5zdGFsbGVkID8pLCBvciBoYXMgYmVlbiBmcmVlZCAq Lwo+ID4gLQlpZiAoIWRldi0+bnVtX2NydGNzKQo+ID4gLQkJcmV0dXJuOwo+ID4gLQo+ID4gLQlp ZiAoV0FSTl9PTihwaXBlID49IGRldi0+bnVtX2NydGNzKSkKPiA+IC0JCXJldHVybjsKPiA+IC0K PiA+IC0JLyoKPiA+IC0JICogVG8gYXZvaWQgYWxsIHRoZSBwcm9ibGVtcyB0aGF0IG1pZ2h0IGhh cHBlbiBpZiBpbnRlcnJ1cHRzCj4gPiAtCSAqIHdlcmUgZW5hYmxlZC9kaXNhYmxlZCBhcm91bmQg b3IgYmV0d2VlbiB0aGVzZSBjYWxscywgd2UganVzdAo+ID4gLQkgKiBoYXZlIHRoZSBrZXJuZWwg dGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgQ1JUQyAoanVzdCBvbmNlIHRob3VnaAo+ID4gLQkgKiB0 byBhdm9pZCBjb3JydXB0aW5nIHRoZSBjb3VudCBpZiBtdWx0aXBsZSwgbWlzbWF0Y2ggY2FsbHMg b2NjdXIpLAo+ID4gLQkgKiBzbyB0aGF0IGludGVycnVwdHMgcmVtYWluIGVuYWJsZWQgaW4gdGhl IGludGVyaW0uCj4gPiAtCSAqLwo+ID4gLQlpZiAoIXZibGFuay0+aW5tb2Rlc2V0KSB7Cj4gPiAt CQl2YmxhbmstPmlubW9kZXNldCA9IDB4MTsKPiA+IC0JCWlmIChkcm1fdmJsYW5rX2dldChkZXYs IHBpcGUpID09IDApCj4gPiAtCQkJdmJsYW5rLT5pbm1vZGVzZXQgfD0gMHgyOwo+ID4gLQl9Cj4g PiAtfQo+ID4gLQo+ID4gLXN0YXRpYyB2b2lkIGRybV9sZWdhY3lfdmJsYW5rX3Bvc3RfbW9kZXNl dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gLQkJCQkJICAgdW5zaWduZWQgaW50IHBpcGUp Cj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2LT52Ymxh bmtbcGlwZV07Cj4gPiAtCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gPiAtCj4gPiAtCS8qIHZi bGFuayBpcyBub3QgaW5pdGlhbGl6ZWQgKElSUSBub3QgaW5zdGFsbGVkID8pLCBvciBoYXMgYmVl biBmcmVlZCAqLwo+ID4gLQlpZiAoIWRldi0+bnVtX2NydGNzKQo+ID4gLQkJcmV0dXJuOwo+ID4g LQo+ID4gLQlpZiAoV0FSTl9PTihwaXBlID49IGRldi0+bnVtX2NydGNzKSkKPiA+IC0JCXJldHVy bjsKPiA+IC0KPiA+IC0JaWYgKHZibGFuay0+aW5tb2Rlc2V0KSB7Cj4gPiAtCQlzcGluX2xvY2tf aXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwo+ID4gLQkJZHJtX3Jlc2V0X3ZibGFu a190aW1lc3RhbXAoZGV2LCBwaXBlKTsKPiA+IC0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl di0+dmJsX2xvY2ssIGlycWZsYWdzKTsKPiA+IC0KPiA+IC0JCWlmICh2YmxhbmstPmlubW9kZXNl dCAmIDB4MikKPiA+IC0JCQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwo+ID4gLQo+ID4gLQkJ dmJsYW5rLT5pbm1vZGVzZXQgPSAwOwo+ID4gLQl9Cj4gPiAtfQo+ID4gLQo+ID4gLWludCBkcm1f bGVnYWN5X21vZGVzZXRfY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4g PiAtCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCj4gPiAtewo+ID4gLQlzdHJ1Y3Qg ZHJtX21vZGVzZXRfY3RsICptb2Rlc2V0ID0gZGF0YTsKPiA+IC0JdW5zaWduZWQgaW50IHBpcGU7 Cj4gPiAtCj4gPiAtCS8qIElmIGRybV92YmxhbmtfaW5pdCgpIGhhc24ndCBiZWVuIGNhbGxlZCB5 ZXQsIGp1c3Qgbm8tb3AgKi8KPiA+IC0JaWYgKCFkZXYtPm51bV9jcnRjcykKPiA+IC0JCXJldHVy biAwOwo+ID4gLQo+ID4gLQkvKiBLTVMgZHJpdmVycyBoYW5kbGUgdGhpcyBpbnRlcm5hbGx5ICov Cj4gPiAtCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9MRUdBQ1kpKQo+ ID4gLQkJcmV0dXJuIDA7Cj4gPiAtCj4gPiAtCXBpcGUgPSBtb2Rlc2V0LT5jcnRjOwo+ID4gLQlp ZiAocGlwZSA+PSBkZXYtPm51bV9jcnRjcykKPiA+IC0JCXJldHVybiAtRUlOVkFMOwo+ID4gLQo+ ID4gLQlzd2l0Y2ggKG1vZGVzZXQtPmNtZCkgewo+ID4gLQljYXNlIF9EUk1fUFJFX01PREVTRVQ6 Cj4gPiAtCQlkcm1fbGVnYWN5X3ZibGFua19wcmVfbW9kZXNldChkZXYsIHBpcGUpOwo+ID4gLQkJ YnJlYWs7Cj4gPiAtCWNhc2UgX0RSTV9QT1NUX01PREVTRVQ6Cj4gPiAtCQlkcm1fbGVnYWN5X3Zi bGFua19wb3N0X21vZGVzZXQoZGV2LCBwaXBlKTsKPiA+IC0JCWJyZWFrOwo+ID4gLQlkZWZhdWx0 Ogo+ID4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JcmV0dXJuIDA7Cj4g PiAtfQo+ID4gLQo+ID4gLXN0YXRpYyBpbmxpbmUgYm9vbCB2YmxhbmtfcGFzc2VkKHUzMiBzZXEs IHUzMiByZWYpCj4gPiAtewo+ID4gLQlyZXR1cm4gKHNlcSAtIHJlZikgPD0gKDEgPDwgMjMpOwo+ ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgaW50IGRybV9xdWV1ZV92YmxhbmtfZXZlbnQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsCj4gPiAtCQkJCSAgdW5pb24gZHJt X3dhaXRfdmJsYW5rICp2Ymx3YWl0LAo+ID4gLQkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2KQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5rID0gJmRldi0+ dmJsYW5rW3BpcGVdOwo+ID4gLQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplOwo+ ID4gLQlzdHJ1Y3QgdGltZXZhbCBub3c7Cj4gPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiAt CXVuc2lnbmVkIGludCBzZXE7Cj4gPiAtCWludCByZXQ7Cj4gPiAtCj4gPiAtCWUgPSBremFsbG9j KHNpemVvZigqZSksIEdGUF9LRVJORUwpOwo+ID4gLQlpZiAoZSA9PSBOVUxMKSB7Cj4gPiAtCQly ZXQgPSAtRU5PTUVNOwo+ID4gLQkJZ290byBlcnJfcHV0Owo+ID4gLQl9Cj4gPiAtCj4gPiAtCWUt PnBpcGUgPSBwaXBlOwo+ID4gLQllLT5ldmVudC5iYXNlLnR5cGUgPSBEUk1fRVZFTlRfVkJMQU5L Owo+ID4gLQllLT5ldmVudC5iYXNlLmxlbmd0aCA9IHNpemVvZihlLT5ldmVudCk7Cj4gPiAtCWUt PmV2ZW50LnVzZXJfZGF0YSA9IHZibHdhaXQtPnJlcXVlc3Quc2lnbmFsOwo+ID4gLQo+ID4gLQlz cGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gPiAtCj4gPiAtCS8q Cj4gPiAtCSAqIGRybV9jcnRjX3ZibGFua19vZmYoKSBtaWdodCBoYXZlIGJlZW4gY2FsbGVkIGFm dGVyIHdlIGNhbGxlZAo+ID4gLQkgKiBkcm1fdmJsYW5rX2dldCgpLiBkcm1fY3J0Y192Ymxhbmtf b2ZmKCkgaG9sZHMgZXZlbnRfbG9jayBhcm91bmQgdGhlCj4gPiAtCSAqIHZibGFuayBkaXNhYmxl LCBzbyBubyBuZWVkIGZvciBmdXJ0aGVyIGxvY2tpbmcuICBUaGUgcmVmZXJlbmNlIGZyb20KPiA+ IC0JICogZHJtX3ZibGFua19nZXQoKSBwcm90ZWN0cyBhZ2FpbnN0IHZibGFuayBkaXNhYmxlIGZy b20gYW5vdGhlciBzb3VyY2UuCj4gPiAtCSAqLwo+ID4gLQlpZiAoIVJFQURfT05DRSh2Ymxhbmst PmVuYWJsZWQpKSB7Cj4gPiAtCQlyZXQgPSAtRUlOVkFMOwo+ID4gLQkJZ290byBlcnJfdW5sb2Nr Owo+ID4gLQl9Cj4gPiAtCj4gPiAtCXJldCA9IGRybV9ldmVudF9yZXNlcnZlX2luaXRfbG9ja2Vk KGRldiwgZmlsZV9wcml2LCAmZS0+YmFzZSwKPiA+IC0JCQkJCSAgICAmZS0+ZXZlbnQuYmFzZSk7 Cj4gPiAtCj4gPiAtCWlmIChyZXQpCj4gPiAtCQlnb3RvIGVycl91bmxvY2s7Cj4gPiAtCj4gPiAt CXNlcSA9IGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoZGV2LCBwaXBlLCAmbm93KTsKPiA+IC0K PiA+IC0JRFJNX0RFQlVHKCJldmVudCBvbiB2YmxhbmsgY291bnQgJXUsIGN1cnJlbnQgJXUsIGNy dGMgJXVcbiIsCj4gPiAtCQkgIHZibHdhaXQtPnJlcXVlc3Quc2VxdWVuY2UsIHNlcSwgcGlwZSk7 Cj4gPiAtCj4gPiAtCXRyYWNlX2RybV92YmxhbmtfZXZlbnRfcXVldWVkKGZpbGVfcHJpdiwgcGlw ZSwKPiA+IC0JCQkJICAgICAgdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSk7Cj4gPiAtCj4gPiAt CWUtPmV2ZW50LnNlcXVlbmNlID0gdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZTsKPiA+IC0JaWYg KHZibGFua19wYXNzZWQoc2VxLCB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKSkgewo+ID4gLQkJ ZHJtX3ZibGFua19wdXQoZGV2LCBwaXBlKTsKPiA+IC0JCXNlbmRfdmJsYW5rX2V2ZW50KGRldiwg ZSwgc2VxLCAmbm93KTsKPiA+IC0JCXZibHdhaXQtPnJlcGx5LnNlcXVlbmNlID0gc2VxOwo+ID4g LQl9IGVsc2Ugewo+ID4gLQkJLyogZHJtX2hhbmRsZV92YmxhbmtfZXZlbnRzIHdpbGwgY2FsbCBk cm1fdmJsYW5rX3B1dCAqLwo+ID4gLQkJbGlzdF9hZGRfdGFpbCgmZS0+YmFzZS5saW5rLCAmZGV2 LT52YmxhbmtfZXZlbnRfbGlzdCk7Cj4gPiAtCQl2Ymx3YWl0LT5yZXBseS5zZXF1ZW5jZSA9IHZi bHdhaXQtPnJlcXVlc3Quc2VxdWVuY2U7Cj4gPiAtCX0KPiA+IC0KPiA+IC0Jc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gPiAtCj4gPiAtCXJldHVybiAw Owo+ID4gLQo+ID4gLWVycl91bmxvY2s6Cj4gPiAtCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl di0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ID4gLQlrZnJlZShlKTsKPiA+IC1lcnJfcHV0Ogo+ID4g LQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwo+ID4gLQlyZXR1cm4gcmV0Owo+ID4gLX0KPiA+ IC0KPiA+IC1zdGF0aWMgYm9vbCBkcm1fd2FpdF92YmxhbmtfaXNfcXVlcnkodW5pb24gZHJtX3dh aXRfdmJsYW5rICp2Ymx3YWl0KQo+ID4gLXsKPiA+IC0JaWYgKHZibHdhaXQtPnJlcXVlc3Quc2Vx dWVuY2UpCj4gPiAtCQlyZXR1cm4gZmFsc2U7Cj4gPiAtCj4gPiAtCXJldHVybiBfRFJNX1ZCTEFO S19SRUxBVElWRSA9PQo+ID4gLQkJKHZibHdhaXQtPnJlcXVlc3QudHlwZSAmIChfRFJNX1ZCTEFO S19UWVBFU19NQVNLIHwKPiA+IC0JCQkJCSAgX0RSTV9WQkxBTktfRVZFTlQgfAo+ID4gLQkJCQkJ ICBfRFJNX1ZCTEFOS19ORVhUT05NSVNTKSk7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qCj4gPiAtICog V2FpdCBmb3IgVkJMQU5LLgo+ID4gLSAqCj4gPiAtICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9k ZS4KPiA+IC0gKiBccGFyYW0gZmlsZV9wcml2IERSTSBmaWxlIHByaXZhdGUuCj4gPiAtICogXHBh cmFtIGNtZCBjb21tYW5kLgo+ID4gLSAqIFxwYXJhbSBkYXRhIHVzZXIgYXJndW1lbnQsIHBvaW50 aW5nIHRvIGEgZHJtX3dhaXRfdmJsYW5rIHN0cnVjdHVyZS4KPiA+IC0gKiBccmV0dXJuIHplcm8g b24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIG51bWJlciBvbiBmYWlsdXJlLgo+ID4gLSAqCj4gPiAt ICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSB2YmxhbmsgaW50ZXJydXB0IG9uIHRoZSBwaXBl IHJlcXVlc3RlZCwgdGhlbgo+ID4gLSAqIHNsZWVwcyB3YWl0aW5nIGZvciB0aGUgcmVxdWVzdGVk IHNlcXVlbmNlIG51bWJlciB0byBvY2N1ciwgYW5kIGRyb3BzCj4gPiAtICogdGhlIHZibGFuayBp bnRlcnJ1cHQgcmVmY291bnQgYWZ0ZXJ3YXJkcy4gKHZibGFuayBJUlEgZGlzYWJsZSBmb2xsb3dz IHRoYXQKPiA+IC0gKiBhZnRlciBhIHRpbWVvdXQgd2l0aCBubyBmdXJ0aGVyIHZibGFuayB3YWl0 cyBzY2hlZHVsZWQpLgo+ID4gLSAqLwo+ID4gLWludCBkcm1fd2FpdF92Ymxhbmsoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiA+IC0JCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdikKPiA+IC17Cj4gPiAtCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuazsKPiA+ IC0JdW5pb24gZHJtX3dhaXRfdmJsYW5rICp2Ymx3YWl0ID0gZGF0YTsKPiA+IC0JaW50IHJldDsK PiA+IC0JdW5zaWduZWQgaW50IGZsYWdzLCBzZXEsIHBpcGUsIGhpZ2hfcGlwZTsKPiA+IC0KPiA+ IC0JaWYgKCFkZXYtPmlycV9lbmFibGVkKQo+ID4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAtCj4g PiAtCWlmICh2Ymx3YWl0LT5yZXF1ZXN0LnR5cGUgJiBfRFJNX1ZCTEFOS19TSUdOQUwpCj4gPiAt CQlyZXR1cm4gLUVJTlZBTDsKPiA+IC0KPiA+IC0JaWYgKHZibHdhaXQtPnJlcXVlc3QudHlwZSAm Cj4gPiAtCSAgICB+KF9EUk1fVkJMQU5LX1RZUEVTX01BU0sgfCBfRFJNX1ZCTEFOS19GTEFHU19N QVNLIHwKPiA+IC0JICAgICAgX0RSTV9WQkxBTktfSElHSF9DUlRDX01BU0spKSB7Cj4gPiAtCQlE Uk1fRVJST1IoIlVuc3VwcG9ydGVkIHR5cGUgdmFsdWUgMHgleCwgc3VwcG9ydGVkIG1hc2sgMHgl eFxuIiwKPiA+IC0JCQkgIHZibHdhaXQtPnJlcXVlc3QudHlwZSwKPiA+IC0JCQkgIChfRFJNX1ZC TEFOS19UWVBFU19NQVNLIHwgX0RSTV9WQkxBTktfRkxBR1NfTUFTSyB8Cj4gPiAtCQkJICAgX0RS TV9WQkxBTktfSElHSF9DUlRDX01BU0spKTsKPiA+IC0JCXJldHVybiAtRUlOVkFMOwo+ID4gLQl9 Cj4gPiAtCj4gPiAtCWZsYWdzID0gdmJsd2FpdC0+cmVxdWVzdC50eXBlICYgX0RSTV9WQkxBTktf RkxBR1NfTUFTSzsKPiA+IC0JaGlnaF9waXBlID0gKHZibHdhaXQtPnJlcXVlc3QudHlwZSAmIF9E Uk1fVkJMQU5LX0hJR0hfQ1JUQ19NQVNLKTsKPiA+IC0JaWYgKGhpZ2hfcGlwZSkKPiA+IC0JCXBp cGUgPSBoaWdoX3BpcGUgPj4gX0RSTV9WQkxBTktfSElHSF9DUlRDX1NISUZUOwo+ID4gLQllbHNl Cj4gPiAtCQlwaXBlID0gZmxhZ3MgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkgPyAxIDogMDsKPiA+ IC0JaWYgKHBpcGUgPj0gZGV2LT5udW1fY3J0Y3MpCj4gPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiA+ IC0KPiA+IC0JdmJsYW5rID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gLQo+ID4gLQkvKiBJZiB0 aGUgY291bnRlciBpcyBjdXJyZW50bHkgZW5hYmxlZCBhbmQgYWNjdXJhdGUsIHNob3J0LWNpcmN1 aXQKPiA+IC0JICogcXVlcmllcyB0byByZXR1cm4gdGhlIGNhY2hlZCB0aW1lc3RhbXAgb2YgdGhl IGxhc3QgdmJsYW5rLgo+ID4gLQkgKi8KPiA+IC0JaWYgKGRldi0+dmJsYW5rX2Rpc2FibGVfaW1t ZWRpYXRlICYmCj4gPiAtCSAgICBkcm1fd2FpdF92YmxhbmtfaXNfcXVlcnkodmJsd2FpdCkgJiYK PiA+IC0JICAgIFJFQURfT05DRSh2YmxhbmstPmVuYWJsZWQpKSB7Cj4gPiAtCQlzdHJ1Y3QgdGlt ZXZhbCBub3c7Cj4gPiAtCj4gPiAtCQl2Ymx3YWl0LT5yZXBseS5zZXF1ZW5jZSA9Cj4gPiAtCQkJ ZHJtX3ZibGFua19jb3VudF9hbmRfdGltZShkZXYsIHBpcGUsICZub3cpOwo+ID4gLQkJdmJsd2Fp dC0+cmVwbHkudHZhbF9zZWMgPSBub3cudHZfc2VjOwo+ID4gLQkJdmJsd2FpdC0+cmVwbHkudHZh bF91c2VjID0gbm93LnR2X3VzZWM7Cj4gPiAtCQlyZXR1cm4gMDsKPiA+IC0JfQo+ID4gLQo+ID4g LQlyZXQgPSBkcm1fdmJsYW5rX2dldChkZXYsIHBpcGUpOwo+ID4gLQlpZiAocmV0KSB7Cj4gPiAt CQlEUk1fREVCVUcoImNydGMgJWQgZmFpbGVkIHRvIGFjcXVpcmUgdmJsYW5rIGNvdW50ZXIsICVk XG4iLCBwaXBlLCByZXQpOwo+ID4gLQkJcmV0dXJuIHJldDsKPiA+IC0JfQo+ID4gLQlzZXEgPSBk cm1fdmJsYW5rX2NvdW50KGRldiwgcGlwZSk7Cj4gPiAtCj4gPiAtCXN3aXRjaCAodmJsd2FpdC0+ cmVxdWVzdC50eXBlICYgX0RSTV9WQkxBTktfVFlQRVNfTUFTSykgewo+ID4gLQljYXNlIF9EUk1f VkJMQU5LX1JFTEFUSVZFOgo+ID4gLQkJdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSArPSBzZXE7 Cj4gPiAtCQl2Ymx3YWl0LT5yZXF1ZXN0LnR5cGUgJj0gfl9EUk1fVkJMQU5LX1JFTEFUSVZFOwo+ ID4gLQljYXNlIF9EUk1fVkJMQU5LX0FCU09MVVRFOgo+ID4gLQkJYnJlYWs7Cj4gPiAtCWRlZmF1 bHQ6Cj4gPiAtCQlyZXQgPSAtRUlOVkFMOwo+ID4gLQkJZ290byBkb25lOwo+ID4gLQl9Cj4gPiAt Cj4gPiAtCWlmICgoZmxhZ3MgJiBfRFJNX1ZCTEFOS19ORVhUT05NSVNTKSAmJgo+ID4gLQkgICAg dmJsYW5rX3Bhc3NlZChzZXEsIHZibHdhaXQtPnJlcXVlc3Quc2VxdWVuY2UpKQo+ID4gLQkJdmJs d2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSA9IHNlcSArIDE7Cj4gPiAtCj4gPiAtCWlmIChmbGFncyAm IF9EUk1fVkJMQU5LX0VWRU5UKSB7Cj4gPiAtCQkvKiBtdXN0IGhvbGQgb24gdG8gdGhlIHZibGFu ayByZWYgdW50aWwgdGhlIGV2ZW50IGZpcmVzCj4gPiAtCQkgKiBkcm1fdmJsYW5rX3B1dCB3aWxs IGJlIGNhbGxlZCBhc3luY2hyb25vdXNseQo+ID4gLQkJICovCj4gPiAtCQlyZXR1cm4gZHJtX3F1 ZXVlX3ZibGFua19ldmVudChkZXYsIHBpcGUsIHZibHdhaXQsIGZpbGVfcHJpdik7Cj4gPiAtCX0K PiA+IC0KPiA+IC0JaWYgKHZibHdhaXQtPnJlcXVlc3Quc2VxdWVuY2UgIT0gc2VxKSB7Cj4gPiAt CQlEUk1fREVCVUcoIndhaXRpbmcgb24gdmJsYW5rIGNvdW50ICV1LCBjcnRjICV1XG4iLAo+ID4g LQkJCSAgdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSwgcGlwZSk7Cj4gPiAtCQlEUk1fV0FJVF9P TihyZXQsIHZibGFuay0+cXVldWUsIDMgKiBIWiwKPiA+IC0JCQkgICAgdmJsYW5rX3Bhc3NlZChk cm1fdmJsYW5rX2NvdW50KGRldiwgcGlwZSksCj4gPiAtCQkJCQkgIHZibHdhaXQtPnJlcXVlc3Qu c2VxdWVuY2UpIHx8Cj4gPiAtCQkJICAgICFSRUFEX09OQ0UodmJsYW5rLT5lbmFibGVkKSk7Cj4g PiAtCX0KPiA+IC0KPiA+IC0JaWYgKHJldCAhPSAtRUlOVFIpIHsKPiA+IC0JCXN0cnVjdCB0aW1l dmFsIG5vdzsKPiA+IC0KPiA+IC0JCXZibHdhaXQtPnJlcGx5LnNlcXVlbmNlID0gZHJtX3ZibGFu a19jb3VudF9hbmRfdGltZShkZXYsIHBpcGUsICZub3cpOwo+ID4gLQkJdmJsd2FpdC0+cmVwbHku dHZhbF9zZWMgPSBub3cudHZfc2VjOwo+ID4gLQkJdmJsd2FpdC0+cmVwbHkudHZhbF91c2VjID0g bm93LnR2X3VzZWM7Cj4gPiAtCj4gPiAtCQlEUk1fREVCVUcoImNydGMgJWQgcmV0dXJuaW5nICV1 IHRvIGNsaWVudFxuIiwKPiA+IC0JCQkgIHBpcGUsIHZibHdhaXQtPnJlcGx5LnNlcXVlbmNlKTsK PiA+IC0JfSBlbHNlIHsKPiA+IC0JCURSTV9ERUJVRygiY3J0YyAlZCB2Ymxhbmsgd2FpdCBpbnRl cnJ1cHRlZCBieSBzaWduYWxcbiIsIHBpcGUpOwo+ID4gLQl9Cj4gPiAtCj4gPiAtZG9uZToKPiA+ IC0JZHJtX3ZibGFua19wdXQoZGV2LCBwaXBlKTsKPiA+IC0JcmV0dXJuIHJldDsKPiA+IC19Cj4g PiAtCj4gPiAtc3RhdGljIHZvaWQgZHJtX2hhbmRsZV92YmxhbmtfZXZlbnRzKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV9w ZW5kaW5nX3ZibGFua19ldmVudCAqZSwgKnQ7Cj4gPiAtCXN0cnVjdCB0aW1ldmFsIG5vdzsKPiA+ IC0JdW5zaWduZWQgaW50IHNlcTsKPiA+IC0KPiA+IC0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZkZXYt PmV2ZW50X2xvY2spOwo+ID4gLQo+ID4gLQlzZXEgPSBkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1l KGRldiwgcGlwZSwgJm5vdyk7Cj4gPiAtCj4gPiAtCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShl LCB0LCAmZGV2LT52YmxhbmtfZXZlbnRfbGlzdCwgYmFzZS5saW5rKSB7Cj4gPiAtCQlpZiAoZS0+ cGlwZSAhPSBwaXBlKQo+ID4gLQkJCWNvbnRpbnVlOwo+ID4gLQkJaWYgKCF2YmxhbmtfcGFzc2Vk KHNlcSwgZS0+ZXZlbnQuc2VxdWVuY2UpKQo+ID4gLQkJCWNvbnRpbnVlOwo+ID4gLQo+ID4gLQkJ RFJNX0RFQlVHKCJ2YmxhbmsgZXZlbnQgb24gJXUsIGN1cnJlbnQgJXVcbiIsCj4gPiAtCQkJICBl LT5ldmVudC5zZXF1ZW5jZSwgc2VxKTsKPiA+IC0KPiA+IC0JCWxpc3RfZGVsKCZlLT5iYXNlLmxp bmspOwo+ID4gLQkJZHJtX3ZibGFua19wdXQoZGV2LCBwaXBlKTsKPiA+IC0JCXNlbmRfdmJsYW5r X2V2ZW50KGRldiwgZSwgc2VxLCAmbm93KTsKPiA+IC0JfQo+ID4gLQo+ID4gLQl0cmFjZV9kcm1f dmJsYW5rX2V2ZW50KHBpcGUsIHNlcSk7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIGRy bV9oYW5kbGVfdmJsYW5rIC0gaGFuZGxlIGEgdmJsYW5rIGV2ZW50Cj4gPiAtICogQGRldjogRFJN IGRldmljZQo+ID4gLSAqIEBwaXBlOiBpbmRleCBvZiBDUlRDIHdoZXJlIHRoaXMgZXZlbnQgb2Nj dXJyZWQKPiA+IC0gKgo+ID4gLSAqIERyaXZlcnMgc2hvdWxkIGNhbGwgdGhpcyByb3V0aW5lIGlu IHRoZWlyIHZibGFuayBpbnRlcnJ1cHQgaGFuZGxlcnMgdG8KPiA+IC0gKiB1cGRhdGUgdGhlIHZi bGFuayBjb3VudGVyIGFuZCBzZW5kIGFueSBzaWduYWxzIHRoYXQgbWF5IGJlIHBlbmRpbmcuCj4g PiAtICoKPiA+IC0gKiBUaGlzIGlzIHRoZSBsZWdhY3kgdmVyc2lvbiBvZiBkcm1fY3J0Y19oYW5k bGVfdmJsYW5rKCkuCj4gPiAtICovCj4gPiAtYm9vbCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSkKPiA+IC17Cj4gPiAtCXN0cnVjdCBk cm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYtPnZibGFua1twaXBlXTsKPiA+IC0JdW5zaWdu ZWQgbG9uZyBpcnFmbGFnczsKPiA+IC0JYm9vbCBkaXNhYmxlX2lycTsKPiA+IC0KPiA+IC0JaWYg KFdBUk5fT05fT05DRSghZGV2LT5udW1fY3J0Y3MpKQo+ID4gLQkJcmV0dXJuIGZhbHNlOwo+ID4g LQo+ID4gLQlpZiAoV0FSTl9PTihwaXBlID49IGRldi0+bnVtX2NydGNzKSkKPiA+IC0JCXJldHVy biBmYWxzZTsKPiA+IC0KPiA+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywg aXJxZmxhZ3MpOwo+ID4gLQo+ID4gLQkvKiBOZWVkIHRpbWVzdGFtcCBsb2NrIHRvIHByZXZlbnQg Y29uY3VycmVudCBleGVjdXRpb24gd2l0aAo+ID4gLQkgKiB2YmxhbmsgZW5hYmxlL2Rpc2FibGUs IGFzIHRoaXMgd291bGQgY2F1c2UgaW5jb25zaXN0ZW50Cj4gPiAtCSAqIG9yIGNvcnJ1cHRlZCB0 aW1lc3RhbXBzIGFuZCB2YmxhbmsgY291bnRzLgo+ID4gLQkgKi8KPiA+IC0Jc3Bpbl9sb2NrKCZk ZXYtPnZibGFua190aW1lX2xvY2spOwo+ID4gLQo+ID4gLQkvKiBWYmxhbmsgaXJxIGhhbmRsaW5n IGRpc2FibGVkLiBOb3RoaW5nIHRvIGRvLiAqLwo+ID4gLQlpZiAoIXZibGFuay0+ZW5hYmxlZCkg ewo+ID4gLQkJc3Bpbl91bmxvY2soJmRldi0+dmJsYW5rX3RpbWVfbG9jayk7Cj4gPiAtCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGlycWZsYWdzKTsKPiA+IC0JCXJl dHVybiBmYWxzZTsKPiA+IC0JfQo+ID4gLQo+ID4gLQlkcm1fdXBkYXRlX3ZibGFua19jb3VudChk ZXYsIHBpcGUsIHRydWUpOwo+ID4gLQo+ID4gLQlzcGluX3VubG9jaygmZGV2LT52YmxhbmtfdGlt ZV9sb2NrKTsKPiA+IC0KPiA+IC0Jd2FrZV91cCgmdmJsYW5rLT5xdWV1ZSk7Cj4gPiAtCj4gPiAt CS8qIFdpdGggaW5zdGFudC1vZmYsIHdlIGRlZmVyIGRpc2FibGluZyB0aGUgaW50ZXJydXB0IHVu dGlsIGFmdGVyCj4gPiAtCSAqIHdlIGZpbmlzaCBwcm9jZXNzaW5nIHRoZSBmb2xsb3dpbmcgdmJs YW5rIGFmdGVyIGFsbCBldmVudHMgaGF2ZQo+ID4gLQkgKiBiZWVuIHNpZ25hbGVkLiBUaGUgZGlz YWJsZSBoYXMgdG8gYmUgbGFzdCAoYWZ0ZXIKPiA+IC0JICogZHJtX2hhbmRsZV92YmxhbmtfZXZl bnRzKSBzbyB0aGF0IHRoZSB0aW1lc3RhbXAgaXMgYWx3YXlzIGFjY3VyYXRlLgo+ID4gLQkgKi8K PiA+IC0JZGlzYWJsZV9pcnEgPSAoZGV2LT52YmxhbmtfZGlzYWJsZV9pbW1lZGlhdGUgJiYKPiA+ IC0JCSAgICAgICBkcm1fdmJsYW5rX29mZmRlbGF5ID4gMCAmJgo+ID4gLQkJICAgICAgICFhdG9t aWNfcmVhZCgmdmJsYW5rLT5yZWZjb3VudCkpOwo+ID4gLQo+ID4gLQlkcm1faGFuZGxlX3ZibGFu a19ldmVudHMoZGV2LCBwaXBlKTsKPiA+IC0KPiA+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGV2LT5ldmVudF9sb2NrLCBpcnFmbGFncyk7Cj4gPiAtCj4gPiAtCWlmIChkaXNhYmxlX2lycSkK PiA+IC0JCXZibGFua19kaXNhYmxlX2ZuKCh1bnNpZ25lZCBsb25nKXZibGFuayk7Cj4gPiAtCj4g PiAtCXJldHVybiB0cnVlOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKGRybV9oYW5kbGVfdmJs YW5rKTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcm1fY3J0Y19oYW5kbGVfdmJsYW5rIC0gaGFu ZGxlIGEgdmJsYW5rIGV2ZW50Cj4gPiAtICogQGNydGM6IHdoZXJlIHRoaXMgZXZlbnQgb2NjdXJy ZWQKPiA+IC0gKgo+ID4gLSAqIERyaXZlcnMgc2hvdWxkIGNhbGwgdGhpcyByb3V0aW5lIGluIHRo ZWlyIHZibGFuayBpbnRlcnJ1cHQgaGFuZGxlcnMgdG8KPiA+IC0gKiB1cGRhdGUgdGhlIHZibGFu ayBjb3VudGVyIGFuZCBzZW5kIGFueSBzaWduYWxzIHRoYXQgbWF5IGJlIHBlbmRpbmcuCj4gPiAt ICoKPiA+IC0gKiBUaGlzIGlzIHRoZSBuYXRpdmUgS01TIHZlcnNpb24gb2YgZHJtX2hhbmRsZV92 YmxhbmsoKS4KPiA+IC0gKgo+ID4gLSAqIFJldHVybnM6Cj4gPiAtICogVHJ1ZSBpZiB0aGUgZXZl bnQgd2FzIHN1Y2Nlc3NmdWxseSBoYW5kbGVkLCBmYWxzZSBvbiBmYWlsdXJlLgo+ID4gLSAqLwo+ ID4gLWJvb2wgZHJtX2NydGNfaGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4g PiAtewo+ID4gLQlyZXR1cm4gZHJtX2hhbmRsZV92YmxhbmsoY3J0Yy0+ZGV2LCBkcm1fY3J0Y19p bmRleChjcnRjKSk7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1CT0woZHJtX2NydGNfaGFuZGxlX3Zi bGFuayk7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV92YmxhbmsuYyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fdmJsYW5rLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBp bmRleCAwMDAwMDAwMDAwMDAuLjYzMGRjMjYzNzliNwo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2RybV92YmxhbmsuYwo+ID4gQEAgLTAsMCArMSwxNjQ1IEBACj4g PiArLyoKPiA+ICsgKiBkcm1faXJxLmMgSVJRIGFuZCB2Ymxhbmsgc3VwcG9ydAo+ID4gKyAqCj4g PiArICogXGF1dGhvciBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4K PiA+ICsgKiBcYXV0aG9yIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4KPiA+ICsg Kgo+ID4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiA+ICsg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCj4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gPiArICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCj4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gPiArICogU29mdHdhcmUuCj4gPiArICoKPiA+ ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4gKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAo+ID4gKyAqIFZBIExJTlVYIFNZU1RFTVMgQU5EL09SIElUUyBTVVBQTElF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKPiA+ICsgKiBPVEhFUiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwKPiA+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiA+ICsgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5rLmg+Cj4g PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgo+ ID4gKwo+ID4gKyNpbmNsdWRlICJkcm1fdHJhY2UuaCIKPiA+ICsjaW5jbHVkZSAiZHJtX2ludGVy bmFsLmgiCj4gPiArCj4gPiArLyogUmV0cnkgdGltZXN0YW1wIGNhbGN1bGF0aW9uIHVwIHRvIDMg dGltZXMgdG8gc2F0aXNmeQo+ID4gKyAqIGRybV90aW1lc3RhbXBfcHJlY2lzaW9uIGJlZm9yZSBn aXZpbmcgdXAuCj4gPiArICovCj4gPiArI2RlZmluZSBEUk1fVElNRVNUQU1QX01BWFJFVFJJRVMg Mwo+ID4gKwo+ID4gKy8qIFRocmVzaG9sZCBpbiBuYW5vc2Vjb25kcyBmb3IgZGV0ZWN0aW9uIG9m IHJlZHVuZGFudAo+ID4gKyAqIHZibGFuayBpcnEgaW4gZHJtX2hhbmRsZV92YmxhbmsoKS4gMSBt c2VjIHNob3VsZCBiZSBvay4KPiA+ICsgKi8KPiA+ICsjZGVmaW5lIERSTV9SRURVTkRBTlRfVkJM SVJRX1RIUkVTSF9OUyAxMDAwMDAwCj4gPiArCj4gPiArc3RhdGljIGJvb2wKPiA+ICtkcm1fZ2V0 X2xhc3RfdmJsdGltZXN0YW1wKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBw aXBlLAo+ID4gKwkJCSAgc3RydWN0IHRpbWV2YWwgKnR2YmxhbmssIGJvb2wgaW5fdmJsYW5rX2ly cSk7Cj4gPiArCj4gPiArc3RhdGljIHVuc2lnbmVkIGludCBkcm1fdGltZXN0YW1wX3ByZWNpc2lv biA9IDIwOyAgLyogRGVmYXVsdCB0byAyMCB1c2Vjcy4gKi8KPiA+ICsKPiA+ICsvKgo+ID4gKyAq IERlZmF1bHQgdG8gdXNlIG1vbm90b25pYyB0aW1lc3RhbXBzIGZvciB3YWl0LWZvci12Ymxhbmsg YW5kIHBhZ2UtZmxpcAo+ID4gKyAqIGNvbXBsZXRlIGV2ZW50cy4KPiA+ICsgKi8KPiA+ICt1bnNp Z25lZCBpbnQgZHJtX3RpbWVzdGFtcF9tb25vdG9uaWMgPSAxOwo+ID4gKwo+ID4gK3N0YXRpYyBp bnQgZHJtX3ZibGFua19vZmZkZWxheSA9IDUwMDA7ICAgIC8qIERlZmF1bHQgdG8gNTAwMCBtc2Vj cy4gKi8KPiA+ICsKPiA+ICttb2R1bGVfcGFyYW1fbmFtZWQodmJsYW5rb2ZmZGVsYXksIGRybV92 Ymxhbmtfb2ZmZGVsYXksIGludCwgMDYwMCk7Cj4gPiArbW9kdWxlX3BhcmFtX25hbWVkKHRpbWVz dGFtcF9wcmVjaXNpb25fdXNlYywgZHJtX3RpbWVzdGFtcF9wcmVjaXNpb24sCj4gPiBpbnQsIDA2 MDApOwo+ID4gK21vZHVsZV9wYXJhbV9uYW1lZCh0aW1lc3RhbXBfbW9ub3RvbmljLCBkcm1fdGlt ZXN0YW1wX21vbm90b25pYywgaW50LCAwNjAwKTsKPiA+ICtNT0RVTEVfUEFSTV9ERVNDKHZibGFu a29mZmRlbGF5LCAiRGVsYXkgdW50aWwgdmJsYW5rIGlycSBhdXRvLWRpc2FibGUKPiA+IFttc2Vj c10gKDA6IG5ldmVyIGRpc2FibGUsIDwwOiBkaXNhYmxlIGltbWVkaWF0ZWx5KSIpOwo+ID4gK01P RFVMRV9QQVJNX0RFU0ModGltZXN0YW1wX3ByZWNpc2lvbl91c2VjLCAiTWF4LiBlcnJvciBvbiB0 aW1lc3RhbXBzIFt1c2Vjc10iKTsKPiA+ICtNT0RVTEVfUEFSTV9ERVNDKHRpbWVzdGFtcF9tb25v dG9uaWMsICJVc2UgbW9ub3RvbmljIHRpbWVzdGFtcHMiKTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9p ZCBzdG9yZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUs Cj4gPiArCQkJIHUzMiB2YmxhbmtfY291bnRfaW5jLAo+ID4gKwkJCSBzdHJ1Y3QgdGltZXZhbCAq dF92YmxhbmssIHUzMiBsYXN0KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV92YmxhbmtfY3J0YyAq dmJsYW5rID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gKwo+ID4gKwlhc3NlcnRfc3Bpbl9sb2Nr ZWQoJmRldi0+dmJsYW5rX3RpbWVfbG9jayk7Cj4gPiArCj4gPiArCXZibGFuay0+bGFzdCA9IGxh c3Q7Cj4gPiArCj4gPiArCXdyaXRlX3NlcWxvY2soJnZibGFuay0+c2VxbG9jayk7Cj4gPiArCXZi bGFuay0+dGltZSA9ICp0X3ZibGFuazsKPiA+ICsJdmJsYW5rLT5jb3VudCArPSB2YmxhbmtfY291 bnRfaW5jOwo+ID4gKwl3cml0ZV9zZXF1bmxvY2soJnZibGFuay0+c2VxbG9jayk7Cj4gPiArfQo+ ID4gKwo+ID4gKy8qCj4gPiArICogIk5vIGh3IGNvdW50ZXIiIGZhbGxiYWNrIGltcGxlbWVudGF0 aW9uIG9mIC5nZXRfdmJsYW5rX2NvdW50ZXIoKSBob29rLAo+ID4gKyAqIGlmIHRoZXJlIGlzIG5v IHVzZWFibGUgaGFyZHdhcmUgZnJhbWUgY291bnRlciBhdmFpbGFibGUuCj4gPiArICovCj4gPiAr c3RhdGljIHUzMiBkcm1fdmJsYW5rX25vX2h3X2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdW5zaWduZWQgaW50IHBpcGUpCj4gPiArewo+ID4gKwlXQVJOX09OX09OQ0UoZGV2LT5tYXhf dmJsYW5rX2NvdW50ICE9IDApOwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHUzMiBfX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNp Z25lZCBpbnQgcGlwZSkKPiA+ICt7Cj4gPiArCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRl diwgRFJJVkVSX01PREVTRVQpKSB7Cj4gPiArCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBkcm1f Y3J0Y19mcm9tX2luZGV4KGRldiwgcGlwZSk7Cj4gPiArCj4gPiArCQlpZiAoY3J0Yy0+ZnVuY3Mt PmdldF92YmxhbmtfY291bnRlcikKPiA+ICsJCQlyZXR1cm4gY3J0Yy0+ZnVuY3MtPmdldF92Ymxh bmtfY291bnRlcihjcnRjKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoZGV2LT5kcml2ZXItPmdl dF92YmxhbmtfY291bnRlcikKPiA+ICsJCXJldHVybiBkZXYtPmRyaXZlci0+Z2V0X3ZibGFua19j b3VudGVyKGRldiwgcGlwZSk7Cj4gPiArCj4gPiArCXJldHVybiBkcm1fdmJsYW5rX25vX2h3X2Nv dW50ZXIoZGV2LCBwaXBlKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBSZXNldCB0aGUg c3RvcmVkIHRpbWVzdGFtcCBmb3IgdGhlIGN1cnJlbnQgdmJsYW5rIGNvdW50IHRvIGNvcnJlc3Bv bmQKPiA+ICsgKiB0byB0aGUgbGFzdCB2Ymxhbmsgb2NjdXJyZWQuCj4gPiArICoKPiA+ICsgKiBP bmx5IHRvIGJlIGNhbGxlZCBmcm9tIGRybV9jcnRjX3ZibGFua19vbigpLgo+ID4gKyAqCj4gPiAr ICogTm90ZTogY2FsbGVyIG11c3QgaG9sZCAmZHJtX2RldmljZS52YmxfbG9jayBzaW5jZSB0aGlz IHJlYWRzICYgd3JpdGVzCj4gPiArICogZGV2aWNlIHZibGFuayBmaWVsZHMuCj4gPiArICovCj4g PiArc3RhdGljIHZvaWQgZHJtX3Jlc2V0X3ZibGFua190aW1lc3RhbXAoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPiA+IHVuc2lnbmVkIGludCBwaXBlKQo+ID4gK3sKPiA+ICsJdTMyIGN1cl92Ymxh bms7Cj4gPiArCWJvb2wgcmM7Cj4gPiArCXN0cnVjdCB0aW1ldmFsIHRfdmJsYW5rOwo+ID4gKwlp bnQgY291bnQgPSBEUk1fVElNRVNUQU1QX01BWFJFVFJJRVM7Cj4gPiArCj4gPiArCXNwaW5fbG9j aygmZGV2LT52YmxhbmtfdGltZV9sb2NrKTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogc2FtcGxl IHRoZSBjdXJyZW50IGNvdW50ZXIgdG8gYXZvaWQgcmFuZG9tIGp1bXBzCj4gPiArCSAqIHdoZW4g ZHJtX3ZibGFua19lbmFibGUoKSBhcHBsaWVzIHRoZSBkaWZmCj4gPiArCSAqLwo+ID4gKwlkbyB7 Cj4gPiArCQljdXJfdmJsYW5rID0gX19nZXRfdmJsYW5rX2NvdW50ZXIoZGV2LCBwaXBlKTsKPiA+ ICsJCXJjID0gZHJtX2dldF9sYXN0X3ZibHRpbWVzdGFtcChkZXYsIHBpcGUsICZ0X3ZibGFuaywg ZmFsc2UpOwo+ID4gKwl9IHdoaWxlIChjdXJfdmJsYW5rICE9IF9fZ2V0X3ZibGFua19jb3VudGVy KGRldiwgcGlwZSkgJiYgLS1jb3VudCA+IDApOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBPbmx5 IHJlaW5pdGlhbGl6ZSBjb3JyZXNwb25kaW5nIHZibGFuayB0aW1lc3RhbXAgaWYgaGlnaC1wcmVj aXNpb24gcXVlcnkKPiA+ICsJICogYXZhaWxhYmxlIGFuZCBkaWRuJ3QgZmFpbC4gT3RoZXJ3aXNl IHJlaW5pdGlhbGl6ZSBkZWxheWVkIGF0IG5leHQgdmJsYW5rCj4gPiArCSAqIGludGVycnVwdCBh bmQgYXNzaWduIDAgZm9yIG5vdywgdG8gbWFyayB0aGUgdmJsYW5rdGltZXN0YW1wIGFzIGludmFs aWQuCj4gPiArCSAqLwo+ID4gKwlpZiAoIXJjKQo+ID4gKwkJdF92YmxhbmsgPSAoc3RydWN0IHRp bWV2YWwpIHswLCAwfTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogKzEgdG8gbWFrZSBzdXJlIHVz ZXIgd2lsbCBuZXZlciBzZWUgdGhlIHNhbWUKPiA+ICsJICogdmJsYW5rIGNvdW50ZXIgdmFsdWUg YmVmb3JlIGFuZCBhZnRlciBhIG1vZGVzZXQKPiA+ICsJICovCj4gPiArCXN0b3JlX3ZibGFuayhk ZXYsIHBpcGUsIDEsICZ0X3ZibGFuaywgY3VyX3ZibGFuayk7Cj4gPiArCj4gPiArCXNwaW5fdW5s b2NrKCZkZXYtPnZibGFua190aW1lX2xvY2spOwo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ID4gKyAq IENhbGwgYmFjayBpbnRvIHRoZSBkcml2ZXIgdG8gdXBkYXRlIHRoZSBhcHByb3ByaWF0ZSB2Ymxh bmsgY291bnRlcgo+ID4gKyAqIChzcGVjaWZpZWQgYnkgQHBpcGUpLiAgRGVhbCB3aXRoIHdyYXBh cm91bmQsIGlmIGl0IG9jY3VycmVkLCBhbmQKPiA+ICsgKiB1cGRhdGUgdGhlIGxhc3QgcmVhZCB2 YWx1ZSBzbyB3ZSBjYW4gZGVhbCB3aXRoIHdyYXBhcm91bmQgb24gdGhlIG5leHQKPiA+ICsgKiBj YWxsIGlmIG5lY2Vzc2FyeS4KPiA+ICsgKgo+ID4gKyAqIE9ubHkgbmVjZXNzYXJ5IHdoZW4gZ29p bmcgZnJvbSBvZmYtPm9uLCB0byBhY2NvdW50IGZvciBmcmFtZXMgd2UKPiA+ICsgKiBkaWRuJ3Qg Z2V0IGFuIGludGVycnVwdCBmb3IuCj4gPiArICoKPiA+ICsgKiBOb3RlOiBjYWxsZXIgbXVzdCBo b2xkICZkcm1fZGV2aWNlLnZibF9sb2NrIHNpbmNlIHRoaXMgcmVhZHMgJiB3cml0ZXMKPiA+ICsg KiBkZXZpY2UgdmJsYW5rIGZpZWxkcy4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCBkcm1fdXBk YXRlX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlw ZSwKPiA+ICsJCQkJICAgIGJvb2wgaW5fdmJsYW5rX2lycSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBk cm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYtPnZibGFua1twaXBlXTsKPiA+ICsJdTMyIGN1 cl92YmxhbmssIGRpZmY7Cj4gPiArCWJvb2wgcmM7Cj4gPiArCXN0cnVjdCB0aW1ldmFsIHRfdmJs YW5rOwo+ID4gKwlpbnQgY291bnQgPSBEUk1fVElNRVNUQU1QX01BWFJFVFJJRVM7Cj4gPiArCWlu dCBmcmFtZWR1cl9ucyA9IHZibGFuay0+ZnJhbWVkdXJfbnM7Cj4gPiArCj4gPiArCS8qCj4gPiAr CSAqIEludGVycnVwdHMgd2VyZSBkaXNhYmxlZCBwcmlvciB0byB0aGlzIGNhbGwsIHNvIGRlYWwg d2l0aCBjb3VudGVyCj4gPiArCSAqIHdyYXAgaWYgbmVlZGVkLgo+ID4gKwkgKiBOT1RFISAgSXQn cyBwb3NzaWJsZSB3ZSBsb3N0IGEgZnVsbCBkZXYtPm1heF92YmxhbmtfY291bnQgKyAxIGV2ZW50 cwo+ID4gKwkgKiBoZXJlIGlmIHRoZSByZWdpc3RlciBpcyBzbWFsbCBvciB3ZSBoYWQgdmJsYW5r IGludGVycnVwdHMgb2ZmIGZvcgo+ID4gKwkgKiBhIGxvbmcgdGltZS4KPiA+ICsJICoKPiA+ICsJ ICogV2UgcmVwZWF0IHRoZSBoYXJkd2FyZSB2YmxhbmsgY291bnRlciAmIHRpbWVzdGFtcCBxdWVy eSB1bnRpbAo+ID4gKwkgKiB3ZSBnZXQgY29uc2lzdGVudCByZXN1bHRzLiBUaGlzIHRvIHByZXZl bnQgcmFjZXMgYmV0d2VlbiBncHUKPiA+ICsJICogdXBkYXRpbmcgaXRzIGhhcmR3YXJlIGNvdW50 ZXIgd2hpbGUgd2UgYXJlIHJldHJpZXZpbmcgdGhlCj4gPiArCSAqIGNvcnJlc3BvbmRpbmcgdmJs YW5rIHRpbWVzdGFtcC4KPiA+ICsJICovCj4gPiArCWRvIHsKPiA+ICsJCWN1cl92YmxhbmsgPSBf X2dldF92YmxhbmtfY291bnRlcihkZXYsIHBpcGUpOwo+ID4gKwkJcmMgPSBkcm1fZ2V0X2xhc3Rf dmJsdGltZXN0YW1wKGRldiwgcGlwZSwgJnRfdmJsYW5rLCBpbl92YmxhbmtfaXJxKTsKPiA+ICsJ fSB3aGlsZSAoY3VyX3ZibGFuayAhPSBfX2dldF92YmxhbmtfY291bnRlcihkZXYsIHBpcGUpICYm IC0tY291bnQgPiAwKTsKPiA+ICsKPiA+ICsJaWYgKGRldi0+bWF4X3ZibGFua19jb3VudCAhPSAw KSB7Cj4gPiArCQkvKiB0cnVzdCB0aGUgaHcgY291bnRlciB3aGVuIGl0J3MgYXJvdW5kICovCj4g PiArCQlkaWZmID0gKGN1cl92YmxhbmsgLSB2YmxhbmstPmxhc3QpICYgZGV2LT5tYXhfdmJsYW5r X2NvdW50Owo+ID4gKwl9IGVsc2UgaWYgKHJjICYmIGZyYW1lZHVyX25zKSB7Cj4gPiArCQljb25z dCBzdHJ1Y3QgdGltZXZhbCAqdF9vbGQ7Cj4gPiArCQl1NjQgZGlmZl9uczsKPiA+ICsKPiA+ICsJ CXRfb2xkID0gJnZibGFuay0+dGltZTsKPiA+ICsJCWRpZmZfbnMgPSB0aW1ldmFsX3RvX25zKCZ0 X3ZibGFuaykgLSB0aW1ldmFsX3RvX25zKHRfb2xkKTsKPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkg KiBGaWd1cmUgb3V0IGhvdyBtYW55IHZibGFua3Mgd2UndmUgbWlzc2VkIGJhc2VkCj4gPiArCQkg KiBvbiB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgdGltZXN0YW1wcyBhbmQgdGhlCj4gPiArCQkgKiBm cmFtZS9maWVsZCBkdXJhdGlvbi4KPiA+ICsJCSAqLwo+ID4gKwkJZGlmZiA9IERJVl9ST1VORF9D TE9TRVNUX1VMTChkaWZmX25zLCBmcmFtZWR1cl9ucyk7Cj4gPiArCj4gPiArCQlpZiAoZGlmZiA9 PSAwICYmIGluX3ZibGFua19pcnEpCj4gPiArCQkJRFJNX0RFQlVHX1ZCTCgiY3J0YyAldTogUmVk dW5kYW50IHZibGlycSBpZ25vcmVkLiIKPiA+ICsJCQkJICAgICAgIiBkaWZmX25zID0gJWxsZCwg ZnJhbWVkdXJfbnMgPSAlZClcbiIsCj4gPiArCQkJCSAgICAgIHBpcGUsIChsb25nIGxvbmcpIGRp ZmZfbnMsIGZyYW1lZHVyX25zKTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCS8qIHNvbWUga2luZCBv ZiBkZWZhdWx0IGZvciBkcml2ZXJzIHcvbyBhY2N1cmF0ZSB2YmwgdGltZXN0YW1waW5nICovCj4g PiArCQlkaWZmID0gaW5fdmJsYW5rX2lycSA/IDEgOiAwOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8q Cj4gPiArCSAqIFdpdGhpbiBhIGRybV92YmxhbmtfcHJlX21vZGVzZXQgLSBkcm1fdmJsYW5rX3Bv c3RfbW9kZXNldAo+ID4gKwkgKiBpbnRlcnZhbD8gSWYgc28gdGhlbiB2YmxhbmsgaXJxcyBrZWVw IHJ1bm5pbmcgYW5kIGl0IHdpbGwgbGlrZWx5Cj4gPiArCSAqIGhhcHBlbiB0aGF0IHRoZSBoYXJk d2FyZSB2YmxhbmsgY291bnRlciBpcyBub3QgdHJ1c3R3b3J0aHkgYXMgaXQKPiA+ICsJICogbWln aHQgcmVzZXQgYXQgc29tZSBwb2ludCBpbiB0aGF0IGludGVydmFsIGFuZCB2YmxhbmsgdGltZXN0 YW1wcwo+ID4gKwkgKiBhcmUgbm90IHRydXN0d29ydGh5IGVpdGhlciBpbiB0aGF0IGludGVydmFs LiBJb3cuIHRoaXMgY2FuIHJlc3VsdAo+ID4gKwkgKiBpbiBhIGJvZ3VzIGRpZmYgPj4gMSB3aGlj aCBtdXN0IGJlIGF2b2lkZWQgYXMgaXQgd291bGQgY2F1c2UKPiA+ICsJICogcmFuZG9tIGxhcmdl IGZvcndhcmQganVtcHMgb2YgdGhlIHNvZnR3YXJlIHZibGFuayBjb3VudGVyLgo+ID4gKwkgKi8K PiA+ICsJaWYgKGRpZmYgPiAxICYmICh2YmxhbmstPmlubW9kZXNldCAmIDB4MikpIHsKPiA+ICsJ CURSTV9ERUJVR19WQkwoImNsYW1waW5nIHZibGFuayBidW1wIHRvIDEgb24gY3J0YyAldTogZGlm ZnI9JXUiCj4gPiArCQkJICAgICAgIiBkdWUgdG8gcHJlLW1vZGVzZXQuXG4iLCBwaXBlLCBkaWZm KTsKPiA+ICsJCWRpZmYgPSAxOwo+ID4gKwl9Cj4gPiArCj4gPiArCURSTV9ERUJVR19WQkwoInVw ZGF0aW5nIHZibGFuayBjb3VudCBvbiBjcnRjICV1OiIKPiA+ICsJCSAgICAgICIgY3VycmVudD0l dSwgZGlmZj0ldSwgaHc9JXUgaHdfbGFzdD0ldVxuIiwKPiA+ICsJCSAgICAgIHBpcGUsIHZibGFu ay0+Y291bnQsIGRpZmYsIGN1cl92YmxhbmssIHZibGFuay0+bGFzdCk7Cj4gPiArCj4gPiArCWlm IChkaWZmID09IDApIHsKPiA+ICsJCVdBUk5fT05fT05DRShjdXJfdmJsYW5rICE9IHZibGFuay0+ bGFzdCk7Cj4gPiArCQlyZXR1cm47Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogT25s eSByZWluaXRpYWxpemUgY29ycmVzcG9uZGluZyB2YmxhbmsgdGltZXN0YW1wIGlmIGhpZ2gtcHJl Y2lzaW9uIHF1ZXJ5Cj4gPiArCSAqIGF2YWlsYWJsZSBhbmQgZGlkbid0IGZhaWwsIG9yIHdlIHdl cmUgY2FsbGVkIGZyb20gdGhlIHZibGFuayBpbnRlcnJ1cHQuCj4gPiArCSAqIE90aGVyd2lzZSBy ZWluaXRpYWxpemUgZGVsYXllZCBhdCBuZXh0IHZibGFuayBpbnRlcnJ1cHQgYW5kIGFzc2lnbiAw Cj4gPiArCSAqIGZvciBub3csIHRvIG1hcmsgdGhlIHZibGFua3RpbWVzdGFtcCBhcyBpbnZhbGlk Lgo+ID4gKwkgKi8KPiA+ICsJaWYgKCFyYyAmJiBpbl92YmxhbmtfaXJxKQo+ID4gKwkJdF92Ymxh bmsgPSAoc3RydWN0IHRpbWV2YWwpIHswLCAwfTsKPiA+ICsKPiA+ICsJc3RvcmVfdmJsYW5rKGRl diwgcGlwZSwgZGlmZiwgJnRfdmJsYW5rLCBjdXJfdmJsYW5rKTsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIHUzMiBkcm1fdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2ln bmVkIGludCBwaXBlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5r ID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gKwo+ID4gKwlpZiAoV0FSTl9PTihwaXBlID49IGRl di0+bnVtX2NydGNzKSkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlyZXR1cm4gdmJsYW5r LT5jb3VudDsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2FjY3VyYXRlX3ZibGFu a19jb3VudCAtIHJldHJpZXZlIHRoZSBtYXN0ZXIgdmJsYW5rIGNvdW50ZXIKPiA+ICsgKiBAY3J0 Yzogd2hpY2ggY291bnRlciB0byByZXRyaWV2ZQo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlv biBpcyBzaW1pbGFyIHRvIEBkcm1fY3J0Y192YmxhbmtfY291bnQgYnV0IHRoaXMKPiA+ICsgKiBm dW5jdGlvbiBpbnRlcnBvbGF0ZXMgdG8gaGFuZGxlIGEgcmFjZSB3aXRoIHZibGFuayBpcnEncy4K PiA+ICsgKgo+ID4gKyAqIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgaGFyZHdhcmUgdGhhdCBj YW4gb2J0YWluIHRoZSBzY2Fub3V0Cj4gPiArICogcG9zaXRpb24sIGJ1dCBkb2Vzbid0IGhhdmUg YSBmcmFtZSBjb3VudGVyLgo+ID4gKyAqLwo+ID4gK3UzMiBkcm1fYWNjdXJhdGVfdmJsYW5rX2Nv dW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5kZXY7Cj4gPiArCXVuc2lnbmVkIGludCBwaXBlID0gZHJtX2NydGNfaW5k ZXgoY3J0Yyk7Cj4gPiArCXUzMiB2Ymxhbms7Cj4gPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4g PiArCj4gPiArCVdBUk4oIWRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX3RpbWVzdGFtcCwKPiA+ICsJ ICAgICAiVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBzdXBwb3J0IGZvciBhY2N1cmF0ZSB2Ymxhbmsg dGltZXN0YW1wcy4iKTsKPiA+ICsKPiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsYW5r X3RpbWVfbG9jaywgZmxhZ3MpOwo+ID4gKwo+ID4gKwlkcm1fdXBkYXRlX3ZibGFua19jb3VudChk ZXYsIHBpcGUsIGZhbHNlKTsKPiA+ICsJdmJsYW5rID0gZHJtX3ZibGFua19jb3VudChkZXYsIHBp cGUpOwo+ID4gKwo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibGFua190aW1l X2xvY2ssIGZsYWdzKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHZibGFuazsKPiA+ICt9Cj4gPiArRVhQ T1JUX1NZTUJPTChkcm1fYWNjdXJhdGVfdmJsYW5rX2NvdW50KTsKPiA+ICsKPiA+ICtzdGF0aWMg dm9pZCBfX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGlu dCBwaXBlKQo+ID4gK3sKPiA+ICsJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklW RVJfTU9ERVNFVCkpIHsKPiA+ICsJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGRybV9jcnRjX2Zy b21faW5kZXgoZGV2LCBwaXBlKTsKPiA+ICsKPiA+ICsJCWlmIChjcnRjLT5mdW5jcy0+ZGlzYWJs ZV92YmxhbmspIHsKPiA+ICsJCQljcnRjLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmsoY3J0Yyk7Cj4g PiArCQkJcmV0dXJuOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWRldi0+ZHJpdmVyLT5k aXNhYmxlX3ZibGFuayhkZXYsIHBpcGUpOwo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIERp c2FibGUgdmJsYW5rIGlycSdzIG9uIGNydGMsIG1ha2Ugc3VyZSB0aGF0IGxhc3QgdmJsYW5rIGNv dW50Cj4gPiArICogb2YgaGFyZHdhcmUgYW5kIGNvcnJlc3BvbmRpbmcgY29uc2lzdGVudCBzb2Z0 d2FyZSB2YmxhbmsgY291bnRlcgo+ID4gKyAqIGFyZSBwcmVzZXJ2ZWQsIGV2ZW4gaWYgdGhlcmUg YXJlIGFueSBzcHVyaW91cyB2YmxhbmsgaXJxJ3MgYWZ0ZXIKPiA+ICsgKiBkaXNhYmxlLgo+ID4g KyAqLwo+ID4gK3ZvaWQgZHJtX3ZibGFua19kaXNhYmxlX2FuZF9zYXZlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV92Ymxh bmtfY3J0YyAqdmJsYW5rID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gKwl1bnNpZ25lZCBsb25n IGlycWZsYWdzOwo+ID4gKwo+ID4gKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRldi0+dmJsX2xvY2sp Owo+ID4gKwo+ID4gKwkvKiBQcmV2ZW50IHZibGFuayBpcnEgcHJvY2Vzc2luZyB3aGlsZSBkaXNh YmxpbmcgdmJsYW5rIGlycXMsCj4gPiArCSAqIHNvIG5vIHVwZGF0ZXMgb2YgdGltZXN0YW1wcyBv ciBjb3VudCBjYW4gaGFwcGVuIGFmdGVyIHdlJ3ZlCj4gPiArCSAqIGRpc2FibGVkLiBOZWVkZWQg dG8gcHJldmVudCByYWNlcyBpbiBjYXNlIG9mIGRlbGF5ZWQgaXJxJ3MuCj4gPiArCSAqLwo+ID4g KwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxhbmtfdGltZV9sb2NrLCBpcnFmbGFncyk7Cj4g PiArCj4gPiArCS8qCj4gPiArCSAqIE9ubHkgZGlzYWJsZSB2YmxhbmsgaW50ZXJydXB0cyBpZiB0 aGV5J3JlIGVuYWJsZWQuIFRoaXMgYXZvaWRzCj4gPiArCSAqIGNhbGxpbmcgdGhlIC0+ZGlzYWJs ZV92YmxhbmsoKSBvcGVyYXRpb24gaW4gYXRvbWljIGNvbnRleHQgd2l0aCB0aGUKPiA+ICsJICog aGFyZHdhcmUgcG90ZW50aWFsbHkgcnVudGltZSBzdXNwZW5kZWQuCj4gPiArCSAqLwo+ID4gKwlp ZiAodmJsYW5rLT5lbmFibGVkKSB7Cj4gPiArCQlfX2Rpc2FibGVfdmJsYW5rKGRldiwgcGlwZSk7 Cj4gPiArCQl2YmxhbmstPmVuYWJsZWQgPSBmYWxzZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKgo+ ID4gKwkgKiBBbHdheXMgdXBkYXRlIHRoZSBjb3VudCBhbmQgdGltZXN0YW1wIHRvIG1haW50YWlu IHRoZQo+ID4gKwkgKiBhcHBlYXJhbmNlIHRoYXQgdGhlIGNvdW50ZXIgaGFzIGJlZW4gdGlja2lu ZyBhbGwgYWxvbmcgdW50aWwKPiA+ICsJICogdGhpcyB0aW1lLiBUaGlzIG1ha2VzIHRoZSBjb3Vu dCBhY2NvdW50IGZvciB0aGUgZW50aXJlIHRpbWUKPiA+ICsJICogYmV0d2VlbiBkcm1fY3J0Y192 Ymxhbmtfb24oKSBhbmQgZHJtX2NydGNfdmJsYW5rX29mZigpLgo+ID4gKwkgKi8KPiA+ICsJZHJt X3VwZGF0ZV92YmxhbmtfY291bnQoZGV2LCBwaXBlLCBmYWxzZSk7Cj4gPiArCj4gPiArCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MpOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB2YmxhbmtfZGlzYWJsZV9mbih1bnNpZ25lZCBsb25n IGFyZykKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICh2b2lk ICopYXJnOwo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdmJsYW5rLT5kZXY7Cj4gPiAr CXVuc2lnbmVkIGludCBwaXBlID0gdmJsYW5rLT5waXBlOwo+ID4gKwl1bnNpZ25lZCBsb25nIGly cWZsYWdzOwo+ID4gKwo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJx ZmxhZ3MpOwo+ID4gKwlpZiAoYXRvbWljX3JlYWQoJnZibGFuay0+cmVmY291bnQpID09IDAgJiYg dmJsYW5rLT5lbmFibGVkKSB7Cj4gPiArCQlEUk1fREVCVUcoImRpc2FibGluZyB2Ymxhbmsgb24g Y3J0YyAldVxuIiwgcGlwZSk7Cj4gPiArCQlkcm1fdmJsYW5rX2Rpc2FibGVfYW5kX3NhdmUoZGV2 LCBwaXBlKTsKPiA+ICsJfQo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9s b2NrLCBpcnFmbGFncyk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV92Ymxhbmtf Y2xlYW51cCAtIGNsZWFudXAgdmJsYW5rIHN1cHBvcnQKPiA+ICsgKiBAZGV2OiBEUk0gZGV2aWNl Cj4gPiArICoKPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCBhbnkgcmVzb3VyY2VzIGFs bG9jYXRlZCBpbiBkcm1fdmJsYW5rX2luaXQuCj4gPiArICovCj4gPiArdm9pZCBkcm1fdmJsYW5r X2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGlu dCBwaXBlOwo+ID4gKwo+ID4gKwkvKiBCYWlsIGlmIHRoZSBkcml2ZXIgZGlkbid0IGNhbGwgZHJt X3ZibGFua19pbml0KCkgKi8KPiA+ICsJaWYgKGRldi0+bnVtX2NydGNzID09IDApCj4gPiArCQly ZXR1cm47Cj4gPiArCj4gPiArCWZvciAocGlwZSA9IDA7IHBpcGUgPCBkZXYtPm51bV9jcnRjczsg cGlwZSsrKSB7Cj4gPiArCQlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2LT52 YmxhbmtbcGlwZV07Cj4gPiArCj4gPiArCQlXQVJOX09OKFJFQURfT05DRSh2YmxhbmstPmVuYWJs ZWQpICYmCj4gPiArCQkJZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VU KSk7Cj4gPiArCj4gPiArCQlkZWxfdGltZXJfc3luYygmdmJsYW5rLT5kaXNhYmxlX3RpbWVyKTsK PiA+ICsJfQo+ID4gKwo+ID4gKwlrZnJlZShkZXYtPnZibGFuayk7Cj4gPiArCj4gPiArCWRldi0+ bnVtX2NydGNzID0gMDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX2NsZWFu dXApOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV92YmxhbmtfaW5pdCAtIGluaXRpYWxpemUg dmJsYW5rIHN1cHBvcnQKPiA+ICsgKiBAZGV2OiBEUk0gZGV2aWNlCj4gPiArICogQG51bV9jcnRj czogbnVtYmVyIG9mIENSVENzIHN1cHBvcnRlZCBieSBAZGV2Cj4gPiArICoKPiA+ICsgKiBUaGlz IGZ1bmN0aW9uIGluaXRpYWxpemVzIHZibGFuayBzdXBwb3J0IGZvciBAbnVtX2NydGNzIGRpc3Bs YXkgcGlwZWxpbmVzLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiBaZXJvIG9uIHN1 Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiArICovCj4gPiAr aW50IGRybV92YmxhbmtfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQg bnVtX2NydGNzKQo+ID4gK3sKPiA+ICsJaW50IHJldCA9IC1FTk9NRU07Cj4gPiArCXVuc2lnbmVk IGludCBpOwo+ID4gKwo+ID4gKwlzcGluX2xvY2tfaW5pdCgmZGV2LT52YmxfbG9jayk7Cj4gPiAr CXNwaW5fbG9ja19pbml0KCZkZXYtPnZibGFua190aW1lX2xvY2spOwo+ID4gKwo+ID4gKwlkZXYt Pm51bV9jcnRjcyA9IG51bV9jcnRjczsKPiA+ICsKPiA+ICsJZGV2LT52YmxhbmsgPSBrY2FsbG9j KG51bV9jcnRjcywgc2l6ZW9mKCpkZXYtPnZibGFuayksIEdGUF9LRVJORUwpOwo+ID4gKwlpZiAo IWRldi0+dmJsYW5rKQo+ID4gKwkJZ290byBlcnI7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkg PCBudW1fY3J0Y3M7IGkrKykgewo+ID4gKwkJc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5r ID0gJmRldi0+dmJsYW5rW2ldOwo+ID4gKwo+ID4gKwkJdmJsYW5rLT5kZXYgPSBkZXY7Cj4gPiAr CQl2YmxhbmstPnBpcGUgPSBpOwo+ID4gKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmdmJsYW5rLT5x dWV1ZSk7Cj4gPiArCQlzZXR1cF90aW1lcigmdmJsYW5rLT5kaXNhYmxlX3RpbWVyLCB2Ymxhbmtf ZGlzYWJsZV9mbiwKPiA+ICsJCQkgICAgKHVuc2lnbmVkIGxvbmcpdmJsYW5rKTsKPiA+ICsJCXNl cWxvY2tfaW5pdCgmdmJsYW5rLT5zZXFsb2NrKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlEUk1fSU5G TygiU3VwcG9ydHMgdmJsYW5rIHRpbWVzdGFtcCBjYWNoaW5nIFJldiAyICgyMS4xMC4yMDEzKS5c biIpOwo+ID4gKwo+ID4gKwkvKiBEcml2ZXIgc3BlY2lmaWMgaGlnaC1wcmVjaXNpb24gdmJsYW5r IHRpbWVzdGFtcGluZyBzdXBwb3J0ZWQ/ICovCj4gPiArCWlmIChkZXYtPmRyaXZlci0+Z2V0X3Zi bGFua190aW1lc3RhbXApCj4gPiArCQlEUk1fSU5GTygiRHJpdmVyIHN1cHBvcnRzIHByZWNpc2Ug dmJsYW5rIHRpbWVzdGFtcCBxdWVyeS5cbiIpOwo+ID4gKwllbHNlCj4gPiArCQlEUk1fSU5GTygi Tm8gZHJpdmVyIHN1cHBvcnQgZm9yIHZibGFuayB0aW1lc3RhbXAgcXVlcnkuXG4iKTsKPiA+ICsK PiA+ICsJLyogTXVzdCBoYXZlIHByZWNpc2UgdGltZXN0YW1waW5nIGZvciByZWxpYWJsZSB2Ymxh bmsgaW5zdGFudCBkaXNhYmxlICovCj4gPiArCWlmIChkZXYtPnZibGFua19kaXNhYmxlX2ltbWVk aWF0ZSAmJiAhZGV2LT5kcml2ZXItPmdldF92YmxhbmtfdGltZXN0YW1wKSB7Cj4gPiArCQlkZXYt PnZibGFua19kaXNhYmxlX2ltbWVkaWF0ZSA9IGZhbHNlOwo+ID4gKwkJRFJNX0lORk8oIlNldHRp bmcgdmJsYW5rX2Rpc2FibGVfaW1tZWRpYXRlIHRvIGZhbHNlIGJlY2F1c2UgIgo+ID4gKwkJCSAi Z2V0X3ZibGFua190aW1lc3RhbXAgPT0gTlVMTFxuIik7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0 dXJuIDA7Cj4gPiArCj4gPiArZXJyOgo+ID4gKwlkZXYtPm51bV9jcnRjcyA9IDA7Cj4gPiArCXJl dHVybiByZXQ7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX3ZibGFua19pbml0KTsKPiA+ ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fY3J0Y192Ymxhbmtfd2FpdHF1ZXVlIC0gZ2V0IHZibGFu ayB3YWl0cXVldWUgZm9yIHRoZSBDUlRDCj4gPiArICogQGNydGM6IHdoaWNoIENSVEMncyB2Ymxh bmsgd2FpdHF1ZXVlIHRvIHJldHJpZXZlCj4gPiArICoKPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIHJl dHVybnMgYSBwb2ludGVyIHRvIHRoZSB2Ymxhbmsgd2FpdHF1ZXVlIGZvciB0aGUgQ1JUQy4KPiA+ ICsgKiBEcml2ZXJzIGNhbiB1c2UgdGhpcyB0byBpbXBsZW1lbnQgdmJsYW5rIHdhaXRzIHVzaW5n IHdhaXRfZXZlbnQoKQo+ID4gYW5kIHJlbGF0ZWQKPiA+ICsgKiBmdW5jdGlvbnMuCj4gPiArICov Cj4gPiArd2FpdF9xdWV1ZV9oZWFkX3QgKmRybV9jcnRjX3ZibGFua193YWl0cXVldWUoc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJcmV0dXJuICZjcnRjLT5kZXYtPnZibGFua1tk cm1fY3J0Y19pbmRleChjcnRjKV0ucXVldWU7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJt X2NydGNfdmJsYW5rX3dhaXRxdWV1ZSk7Cj4gPiArCj4gPiArCj4gPiArLyoqCj4gPiArICogZHJt X2NhbGNfdGltZXN0YW1waW5nX2NvbnN0YW50cyAtIGNhbGN1bGF0ZSB2YmxhbmsgdGltZXN0YW1w IGNvbnN0YW50cwo+ID4gKyAqIEBjcnRjOiBkcm1fY3J0YyB3aG9zZSB0aW1lc3RhbXAgY29uc3Rh bnRzIHNob3VsZCBiZSB1cGRhdGVkLgo+ID4gKyAqIEBtb2RlOiBkaXNwbGF5IG1vZGUgY29udGFp bmluZyB0aGUgc2Nhbm91dCB0aW1pbmdzCj4gPiArICoKPiA+ICsgKiBDYWxjdWxhdGUgYW5kIHN0 b3JlIHZhcmlvdXMgY29uc3RhbnRzIHdoaWNoIGFyZSBsYXRlcgo+ID4gKyAqIG5lZWRlZCBieSB2 YmxhbmsgYW5kIHN3YXAtY29tcGxldGlvbiB0aW1lc3RhbXBpbmcsIGUuZywKPiA+ICsgKiBieSBk cm1fY2FsY192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9zKCkuIFRoZXkgYXJlCj4gPiArICog ZGVyaXZlZCBmcm9tIENSVEMncyB0cnVlIHNjYW5vdXQgdGltaW5nLCBzbyB0aGV5IHRha2UKPiA+ ICsgKiB0aGluZ3MgbGlrZSBwYW5lbCBzY2FsaW5nIG9yIG90aGVyIGFkanVzdG1lbnRzIGludG8g YWNjb3VudC4KPiA+ICsgKi8KPiA+ICt2b2lkIGRybV9jYWxjX3RpbWVzdGFtcGluZ19jb25zdGFu dHMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNydGMtPmRldjsKPiA+ICsJdW5zaWduZWQgaW50IHBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRj KTsKPiA+ICsJc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5rID0gJmRldi0+dmJsYW5rW3Bp cGVdOwo+ID4gKwlpbnQgbGluZWR1cl9ucyA9IDAsIGZyYW1lZHVyX25zID0gMDsKPiA+ICsJaW50 IGRvdGNsb2NrID0gbW9kZS0+Y3J0Y19jbG9jazsKPiA+ICsKPiA+ICsJaWYgKCFkZXYtPm51bV9j cnRjcykKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJaWYgKFdBUk5fT04ocGlwZSA+PSBkZXYt Pm51bV9jcnRjcykpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCS8qIFZhbGlkIGRvdGNsb2Nr PyAqLwo+ID4gKwlpZiAoZG90Y2xvY2sgPiAwKSB7Cj4gPiArCQlpbnQgZnJhbWVfc2l6ZSA9IG1v ZGUtPmNydGNfaHRvdGFsICogbW9kZS0+Y3J0Y192dG90YWw7Cj4gPiArCj4gPiArCQkvKgo+ID4g KwkJICogQ29udmVydCBzY2FubGluZSBsZW5ndGggaW4gcGl4ZWxzIGFuZCB2aWRlbwo+ID4gKwkJ ICogZG90IGNsb2NrIHRvIGxpbmUgZHVyYXRpb24gYW5kIGZyYW1lIGR1cmF0aW9uCj4gPiArCQkg KiBpbiBuYW5vc2Vjb25kczoKPiA+ICsJCSAqLwo+ID4gKwkJbGluZWR1cl9ucyAgPSBkaXZfdTY0 KCh1NjQpIG1vZGUtPmNydGNfaHRvdGFsICogMTAwMDAwMCwgZG90Y2xvY2spOwo+ID4gKwkJZnJh bWVkdXJfbnMgPSBkaXZfdTY0KCh1NjQpIGZyYW1lX3NpemUgKiAxMDAwMDAwLCBkb3RjbG9jayk7 Cj4gPiArCj4gPiArCQkvKgo+ID4gKwkJICogRmllbGRzIG9mIGludGVybGFjZWQgc2Nhbm91dCBt b2RlcyBhcmUgb25seSBoYWxmIGEgZnJhbWUgZHVyYXRpb24uCj4gPiArCQkgKi8KPiA+ICsJCWlm IChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQo+ID4gKwkJCWZyYW1lZHVy X25zIC89IDI7Cj4gPiArCX0gZWxzZQo+ID4gKwkJRFJNX0VSUk9SKCJjcnRjICV1OiBDYW4ndCBj YWxjdWxhdGUgY29uc3RhbnRzLCBkb3RjbG9jayA9IDAhXG4iLAo+ID4gKwkJCSAgY3J0Yy0+YmFz ZS5pZCk7Cj4gPiArCj4gPiArCXZibGFuay0+bGluZWR1cl9ucyAgPSBsaW5lZHVyX25zOwo+ID4g Kwl2YmxhbmstPmZyYW1lZHVyX25zID0gZnJhbWVkdXJfbnM7Cj4gPiArCXZibGFuay0+aHdtb2Rl ID0gKm1vZGU7Cj4gPiArCj4gPiArCURSTV9ERUJVRygiY3J0YyAldTogaHdtb2RlOiBodG90YWwg JWQsIHZ0b3RhbCAlZCwgdmRpc3BsYXkgJWRcbiIsCj4gPiArCQkgIGNydGMtPmJhc2UuaWQsIG1v ZGUtPmNydGNfaHRvdGFsLAo+ID4gKwkJICBtb2RlLT5jcnRjX3Z0b3RhbCwgbW9kZS0+Y3J0Y192 ZGlzcGxheSk7Cj4gPiArCURSTV9ERUJVRygiY3J0YyAldTogY2xvY2sgJWQga0h6IGZyYW1lZHVy ICVkIGxpbmVkdXIgJWRcbiIsCj4gPiArCQkgIGNydGMtPmJhc2UuaWQsIGRvdGNsb2NrLCBmcmFt ZWR1cl9ucywgbGluZWR1cl9ucyk7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2NhbGNf dGltZXN0YW1waW5nX2NvbnN0YW50cyk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2NhbGNf dmJsdGltZXN0YW1wX2Zyb21fc2Nhbm91dHBvcyAtIHByZWNpc2UgdmJsYW5rIHRpbWVzdGFtcCBo ZWxwZXIKPiA+ICsgKiBAZGV2OiBEUk0gZGV2aWNlCj4gPiArICogQHBpcGU6IGluZGV4IG9mIENS VEMgd2hvc2UgdmJsYW5rIHRpbWVzdGFtcCB0byByZXRyaWV2ZQo+ID4gKyAqIEBtYXhfZXJyb3I6 IERlc2lyZWQgbWF4aW11bSBhbGxvd2FibGUgZXJyb3IgaW4gdGltZXN0YW1wcyAobmFub3NlY3Mp Cj4gPiArICogICAgICAgICAgICAgT24gcmV0dXJuIGNvbnRhaW5zIHRydWUgbWF4aW11bSBlcnJv ciBvZiB0aW1lc3RhbXAKPiA+ICsgKiBAdmJsYW5rX3RpbWU6IFBvaW50ZXIgdG8gc3RydWN0IHRp bWV2YWwgd2hpY2ggc2hvdWxkIHJlY2VpdmUgdGhlIHRpbWVzdGFtcAo+ID4gKyAqIEBpbl92Ymxh bmtfaXJxOgo+ID4gKyAqICAgICBUcnVlIHdoZW4gY2FsbGVkIGZyb20gZHJtX2NydGNfaGFuZGxl X3ZibGFuaygpLiAgU29tZSBkcml2ZXJzCj4gPiArICogICAgIG5lZWQgdG8gYXBwbHkgc29tZSB3 b3JrYXJvdW5kcyBmb3IgZ3B1LXNwZWNpZmljIHZibGFuayBpcnEgcXVpcmtzCj4gPiArICogICAg IGlmIGZsYWcgaXMgc2V0Lgo+ID4gKyAqCj4gPiArICogSW1wbGVtZW50cyBjYWxjdWxhdGlvbiBv ZiBleGFjdCB2YmxhbmsgdGltZXN0YW1wcyBmcm9tIGdpdmVuCj4gPiBkcm1fZGlzcGxheV9tb2Rl Cj4gPiArICogdGltaW5ncyBhbmQgY3VycmVudCB2aWRlbyBzY2Fub3V0IHBvc2l0aW9uIG9mIGEg Q1JUQy4gVGhpcyBjYW4gYmUKPiA+IGNhbGxlZCBmcm9tCj4gPiArICogd2l0aGluIGdldF92Ymxh bmtfdGltZXN0YW1wKCkgaW1wbGVtZW50YXRpb24gb2YgYSBrbXMgZHJpdmVyIHRvCj4gPiBpbXBs ZW1lbnQgdGhlCj4gPiArICogYWN0dWFsIHRpbWVzdGFtcGluZy4KPiA+ICsgKgo+ID4gKyAqIFNo b3VsZCByZXR1cm4gdGltZXN0YW1wcyBjb25mb3JtaW5nIHRvIHRoZSBPTUxfc3luY19jb250cm9s IE9wZW5NTAo+ID4gKyAqIGV4dGVuc2lvbiBzcGVjaWZpY2F0aW9uLiBUaGUgdGltZXN0YW1wIGNv cnJlc3BvbmRzIHRvIHRoZSBlbmQgb2YKPiA+ICsgKiB0aGUgdmJsYW5rIGludGVydmFsLCBha2Eg c3RhcnQgb2Ygc2Nhbm91dCBvZiB0b3Btb3N0LWxlZnRtb3N0IGRpc3BsYXkKPiA+ICsgKiBwaXhl bCBpbiB0aGUgZm9sbG93aW5nIHZpZGVvIGZyYW1lLgo+ID4gKyAqCj4gPiArICogUmVxdWlyZXMg c3VwcG9ydCBmb3Igb3B0aW9uYWwgZGV2LT5kcml2ZXItPmdldF9zY2Fub3V0X3Bvc2l0aW9uKCkK PiA+ICsgKiBpbiBrbXMgZHJpdmVyLCBwbHVzIGEgYml0IG9mIHNldHVwIGNvZGUgdG8gcHJvdmlk ZSBhIGRybV9kaXNwbGF5X21vZGUKPiA+ICsgKiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cnVl IHNjYW5vdXQgdGltaW5nLgo+ID4gKyAqCj4gPiArICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRp b24gb25seSBoYW5kbGVzIHN0YW5kYXJkIHZpZGVvIG1vZGVzLiBJdAo+ID4gKyAqIHJldHVybnMg YXMgbm8gb3BlcmF0aW9uIGlmIGEgZG91Ymxlc2NhbiBvciBpbnRlcmxhY2VkIHZpZGVvIG1vZGUg aXMKPiA+ICsgKiBhY3RpdmUuIEhpZ2hlciBsZXZlbCBjb2RlIGlzIGV4cGVjdGVkIHRvIGhhbmRs ZSB0aGlzLgo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBpbXBs ZW1lbnQgdGhlICZkcm1fZHJpdmVyLmdldF92YmxhbmtfdGltZXN0YW1wCj4gPiArICogZGlyZWN0 bHksIGlmIHRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUKPiA+ICZkcm1fZHJpdmVyLmdldF9zY2Fu b3V0X3Bvc2l0aW9uIGhvb2suCj4gPiArICoKPiA+ICsgKiBOb3RlIHRoYXQgYXRvbWljIGRyaXZl cnMgbXVzdCBjYWxsIGRybV9jYWxjX3RpbWVzdGFtcGluZ19jb25zdGFudHMoKSBiZWZvcmUKPiA+ ICsgKiBlbmFibGluZyBhIENSVEMuIFRoZSBhdG9taWMgaGVscGVycyBhbHJlYWR5IHRha2UgY2Fy ZSBvZiB0aGF0IGluCj4gPiArICogZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX2xlZ2FjeV9tb2Rl c2V0X3N0YXRlKCkuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqCj4gPiArICogUmV0 dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGFuZCBmYWxzZSBvbiBmYWlsdXJlLCBpLmUuIHdoZW4gbm8g YWNjdXJhdGUKPiA+ICsgKiB0aW1lc3RhbXAgY291bGQgYmUgYWNxdWlyZWQuCj4gPiArICovCj4g PiArYm9vbCBkcm1fY2FsY192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9zKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gPiArCQkJCQkgICB1bnNpZ25lZCBpbnQgcGlwZSwKPiA+ICsJCQkJCSAg IGludCAqbWF4X2Vycm9yLAo+ID4gKwkJCQkJICAgc3RydWN0IHRpbWV2YWwgKnZibGFua190aW1l LAo+ID4gKwkJCQkJICAgYm9vbCBpbl92YmxhbmtfaXJxKQo+ID4gK3sKPiA+ICsJc3RydWN0IHRp bWV2YWwgdHZfZXRpbWU7Cj4gPiArCWt0aW1lX3Qgc3RpbWUsIGV0aW1lOwo+ID4gKwlib29sIHZi bF9zdGF0dXM7Cj4gPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+ICsJY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gPiArCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZi bGFuayA9ICZkZXYtPnZibGFua1twaXBlXTsKPiA+ICsJaW50IHZwb3MsIGhwb3MsIGk7Cj4gPiAr CWludCBkZWx0YV9ucywgZHVyYXRpb25fbnM7Cj4gPiArCj4gPiArCWlmICghZHJtX2NvcmVfY2hl Y2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ ICsKPiA+ICsJY3J0YyA9IGRybV9jcnRjX2Zyb21faW5kZXgoZGV2LCBwaXBlKTsKPiA+ICsKPiA+ ICsJaWYgKHBpcGUgPj0gZGV2LT5udW1fY3J0Y3MgfHwgIWNydGMpIHsKPiA+ICsJCURSTV9FUlJP UigiSW52YWxpZCBjcnRjICV1XG4iLCBwaXBlKTsKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsJ fQo+ID4gKwo+ID4gKwkvKiBTY2Fub3V0IHBvc2l0aW9uIHF1ZXJ5IG5vdCBzdXBwb3J0ZWQ/IFNo b3VsZCBub3QgaGFwcGVuLiAqLwo+ID4gKwlpZiAoIWRldi0+ZHJpdmVyLT5nZXRfc2Nhbm91dF9w b3NpdGlvbikgewo+ID4gKwkJRFJNX0VSUk9SKCJDYWxsZWQgZnJvbSBkcml2ZXIgdy9vIGdldF9z Y2Fub3V0X3Bvc2l0aW9uKCkhP1xuIik7Cj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJaWYgKGRybV9kcnZfdXNlc19hdG9taWNfbW9kZXNldChkZXYpKQo+ID4gKwkJbW9k ZSA9ICZ2YmxhbmstPmh3bW9kZTsKPiA+ICsJZWxzZQo+ID4gKwkJbW9kZSA9ICZjcnRjLT5od21v ZGU7Cj4gPiArCj4gPiArCS8qIElmIG1vZGUgdGltaW5nIHVuZGVmaW5lZCwganVzdCByZXR1cm4g YXMgbm8tb3A6Cj4gPiArCSAqIEhhcHBlbnMgZHVyaW5nIGluaXRpYWwgbW9kZXNldHRpbmcgb2Yg YSBjcnRjLgo+ID4gKwkgKi8KPiA+ICsJaWYgKG1vZGUtPmNydGNfY2xvY2sgPT0gMCkgewo+ID4g KwkJRFJNX0RFQlVHKCJjcnRjICV1OiBOb29wIGR1ZSB0byB1bmluaXRpYWxpemVkIG1vZGUuXG4i LCBwaXBlKTsKPiA+ICsJCVdBUk5fT05fT05DRShkcm1fZHJ2X3VzZXNfYXRvbWljX21vZGVzZXQo ZGV2KSk7Cj4gPiArCj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyog R2V0IGN1cnJlbnQgc2Nhbm91dCBwb3NpdGlvbiB3aXRoIHN5c3RlbSB0aW1lc3RhbXAuCj4gPiAr CSAqIFJlcGVhdCBxdWVyeSB1cCB0byBEUk1fVElNRVNUQU1QX01BWFJFVFJJRVMgdGltZXMKPiA+ ICsJICogaWYgc2luZ2xlIHF1ZXJ5IHRha2VzIGxvbmdlciB0aGFuIG1heF9lcnJvciBuYW5vc2Vj b25kcy4KPiA+ICsJICoKPiA+ICsJICogVGhpcyBndWFyYW50ZWVzIGEgdGlnaHQgYm91bmQgb24g bWF4aW11bSBlcnJvciBpZgo+ID4gKwkgKiBjb2RlIGdldHMgcHJlZW1wdGVkIG9yIGRlbGF5ZWQg Zm9yIHNvbWUgcmVhc29uLgo+ID4gKwkgKi8KPiA+ICsJZm9yIChpID0gMDsgaSA8IERSTV9USU1F U1RBTVBfTUFYUkVUUklFUzsgaSsrKSB7Cj4gPiArCQkvKgo+ID4gKwkJICogR2V0IHZlcnRpY2Fs IGFuZCBob3Jpem9udGFsIHNjYW5vdXQgcG9zaXRpb24gdnBvcywgaHBvcywKPiA+ICsJCSAqIGFu ZCBib3VuZGluZyB0aW1lc3RhbXBzIHN0aW1lLCBldGltZSwgcHJlL3Bvc3QgcXVlcnkuCj4gPiAr CQkgKi8KPiA+ICsJCXZibF9zdGF0dXMgPSBkZXYtPmRyaXZlci0+Z2V0X3NjYW5vdXRfcG9zaXRp b24oZGV2LCBwaXBlLAo+ID4gKwkJCQkJCQkgICAgICAgaW5fdmJsYW5rX2lycSwKPiA+ICsJCQkJ CQkJICAgICAgICZ2cG9zLCAmaHBvcywKPiA+ICsJCQkJCQkJICAgICAgICZzdGltZSwgJmV0aW1l LAo+ID4gKwkJCQkJCQkgICAgICAgbW9kZSk7Cj4gPiArCj4gPiArCQkvKiBSZXR1cm4gYXMgbm8t b3AgaWYgc2Nhbm91dCBxdWVyeSB1bnN1cHBvcnRlZCBvciBmYWlsZWQuICovCj4gPiArCQlpZiAo IXZibF9zdGF0dXMpIHsKPiA+ICsJCQlEUk1fREVCVUcoImNydGMgJXUgOiBzY2Fub3V0cG9zIHF1 ZXJ5IGZhaWxlZC5cbiIsCj4gPiArCQkJCSAgcGlwZSk7Cj4gPiArCQkJcmV0dXJuIGZhbHNlOwo+ ID4gKwkJfQo+ID4gKwo+ID4gKwkJLyogQ29tcHV0ZSB1bmNlcnRhaW50eSBpbiB0aW1lc3RhbXAg b2Ygc2Nhbm91dCBwb3NpdGlvbiBxdWVyeS4gKi8KPiA+ICsJCWR1cmF0aW9uX25zID0ga3RpbWVf dG9fbnMoZXRpbWUpIC0ga3RpbWVfdG9fbnMoc3RpbWUpOwo+ID4gKwo+ID4gKwkJLyogQWNjZXB0 IHJlc3VsdCB3aXRoIDwgIG1heF9lcnJvciBuc2VjcyB0aW1pbmcgdW5jZXJ0YWludHkuICovCj4g PiArCQlpZiAoZHVyYXRpb25fbnMgPD0gKm1heF9lcnJvcikKPiA+ICsJCQlicmVhazsKPiA+ICsJ fQo+ID4gKwo+ID4gKwkvKiBOb2lzeSBzeXN0ZW0gdGltaW5nPyAqLwo+ID4gKwlpZiAoaSA9PSBE Uk1fVElNRVNUQU1QX01BWFJFVFJJRVMpIHsKPiA+ICsJCURSTV9ERUJVRygiY3J0YyAldTogTm9p c3kgdGltZXN0YW1wICVkIHVzID4gJWQgdXMgWyVkIHJlcHNdLlxuIiwKPiA+ICsJCQkgIHBpcGUs IGR1cmF0aW9uX25zLzEwMDAsICptYXhfZXJyb3IvMTAwMCwgaSk7Cj4gPiArCX0KPiA+ICsKPiA+ ICsJLyogUmV0dXJuIHVwcGVyIGJvdW5kIG9mIHRpbWVzdGFtcCBwcmVjaXNpb24gZXJyb3IuICov Cj4gPiArCSptYXhfZXJyb3IgPSBkdXJhdGlvbl9uczsKPiA+ICsKPiA+ICsJLyogQ29udmVydCBz Y2Fub3V0IHBvc2l0aW9uIGludG8gZWxhcHNlZCB0aW1lIGF0IHJhd190aW1lIHF1ZXJ5Cj4gPiAr CSAqIHNpbmNlIHN0YXJ0IG9mIHNjYW5vdXQgYXQgZmlyc3QgZGlzcGxheSBzY2FubGluZS4gZGVs dGFfbnMKPiA+ICsJICogY2FuIGJlIG5lZ2F0aXZlIGlmIHN0YXJ0IG9mIHNjYW5vdXQgaGFzbid0 IGhhcHBlbmVkIHlldC4KPiA+ICsJICovCj4gPiArCWRlbHRhX25zID0gZGl2X3M2NCgxMDAwMDAw TEwgKiAodnBvcyAqIG1vZGUtPmNydGNfaHRvdGFsICsgaHBvcyksCj4gPiArCQkJICAgbW9kZS0+ Y3J0Y19jbG9jayk7Cj4gPiArCj4gPiArCWlmICghZHJtX3RpbWVzdGFtcF9tb25vdG9uaWMpCj4g PiArCQlldGltZSA9IGt0aW1lX21vbm9fdG9fcmVhbChldGltZSk7Cj4gPiArCj4gPiArCS8qIHNh dmUgdGhpcyBvbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKi8KPiA+ICsJdHZfZXRpbWUgPSBr dGltZV90b190aW1ldmFsKGV0aW1lKTsKPiA+ICsJLyogU3VidHJhY3QgdGltZSBkZWx0YSBmcm9t IHJhdyB0aW1lc3RhbXAgdG8gZ2V0IGZpbmFsCj4gPiArCSAqIHZibGFua190aW1lIHRpbWVzdGFt cCBmb3IgZW5kIG9mIHZibGFuay4KPiA+ICsJICovCj4gPiArCWV0aW1lID0ga3RpbWVfc3ViX25z KGV0aW1lLCBkZWx0YV9ucyk7Cj4gPiArCSp2YmxhbmtfdGltZSA9IGt0aW1lX3RvX3RpbWV2YWwo ZXRpbWUpOwo+ID4gKwo+ID4gKwlEUk1fREVCVUdfVkJMKCJjcnRjICV1IDogdiBwKCVkLCVkKUAg JWxkLiVsZCAtPiAlbGQuJWxkIFtlICVkIHVzLCAlZCByZXBdXG4iLAo+ID4gKwkJICAgICAgcGlw ZSwgaHBvcywgdnBvcywKPiA+ICsJCSAgICAgIChsb25nKXR2X2V0aW1lLnR2X3NlYywgKGxvbmcp dHZfZXRpbWUudHZfdXNlYywKPiA+ICsJCSAgICAgIChsb25nKXZibGFua190aW1lLT50dl9zZWMs IChsb25nKXZibGFua190aW1lLT50dl91c2VjLAo+ID4gKwkJICAgICAgZHVyYXRpb25fbnMvMTAw MCwgaSk7Cj4gPiArCj4gPiArCXJldHVybiB0cnVlOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9M KGRybV9jYWxjX3ZibHRpbWVzdGFtcF9mcm9tX3NjYW5vdXRwb3MpOwo+ID4gKwo+ID4gK3N0YXRp YyBzdHJ1Y3QgdGltZXZhbCBnZXRfZHJtX3RpbWVzdGFtcCh2b2lkKQo+ID4gK3sKPiA+ICsJa3Rp bWVfdCBub3c7Cj4gPiArCj4gPiArCW5vdyA9IGRybV90aW1lc3RhbXBfbW9ub3RvbmljID8ga3Rp bWVfZ2V0KCkgOiBrdGltZV9nZXRfcmVhbCgpOwo+ID4gKwlyZXR1cm4ga3RpbWVfdG9fdGltZXZh bChub3cpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZ2V0X2xhc3RfdmJsdGlt ZXN0YW1wIC0gcmV0cmlldmUgcmF3IHRpbWVzdGFtcCBmb3IgdGhlIG1vc3QgcmVjZW50Cj4gPiAr ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZibGFuayBpbnRlcnZhbAo+ID4gKyAqIEBk ZXY6IERSTSBkZXZpY2UKPiA+ICsgKiBAcGlwZTogaW5kZXggb2YgQ1JUQyB3aG9zZSB2Ymxhbmsg dGltZXN0YW1wIHRvIHJldHJpZXZlCj4gPiArICogQHR2Ymxhbms6IFBvaW50ZXIgdG8gdGFyZ2V0 IHN0cnVjdCB0aW1ldmFsIHdoaWNoIHNob3VsZCByZWNlaXZlCj4gPiB0aGUgdGltZXN0YW1wCj4g PiArICogQGluX3ZibGFua19pcnE6Cj4gPiArICogICAgIFRydWUgd2hlbiBjYWxsZWQgZnJvbSBk cm1fY3J0Y19oYW5kbGVfdmJsYW5rKCkuICBTb21lIGRyaXZlcnMKPiA+ICsgKiAgICAgbmVlZCB0 byBhcHBseSBzb21lIHdvcmthcm91bmRzIGZvciBncHUtc3BlY2lmaWMgdmJsYW5rIGlycSBxdWly a3MKPiA+ICsgKiAgICAgaWYgZmxhZyBpcyBzZXQuCj4gPiArICoKPiA+ICsgKiBGZXRjaGVzIHRo ZSBzeXN0ZW0gdGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRpbWUgb2YgdGhlIG1vc3Qg cmVjZW50Cj4gPiArICogdmJsYW5rIGludGVydmFsIG9uIHNwZWNpZmllZCBDUlRDLiBNYXkgY2Fs bCBpbnRvIGttcy1kcml2ZXIgdG8KPiA+ICsgKiBjb21wdXRlIHRoZSB0aW1lc3RhbXAgd2l0aCBh IGhpZ2gtcHJlY2lzaW9uIEdQVSBzcGVjaWZpYyBtZXRob2QuCj4gPiArICoKPiA+ICsgKiBSZXR1 cm5zIHplcm8gaWYgdGltZXN0YW1wIG9yaWdpbmF0ZXMgZnJvbSB1bmNvcnJlY3RlZCBkb19nZXR0 aW1lb2ZkYXkoKQo+ID4gKyAqIGNhbGwsIGkuZS4sIGl0IGlzbid0IHZlcnkgcHJlY2lzZWx5IGxv Y2tlZCB0byB0aGUgdHJ1ZSB2YmxhbmsuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAq IFRydWUgaWYgdGltZXN0YW1wIGlzIGNvbnNpZGVyZWQgdG8gYmUgdmVyeSBwcmVjaXNlLCBmYWxz ZSBvdGhlcndpc2UuCj4gPiArICovCj4gPiArc3RhdGljIGJvb2wKPiA+ICtkcm1fZ2V0X2xhc3Rf dmJsdGltZXN0YW1wKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlLAo+ ID4gKwkJCSAgc3RydWN0IHRpbWV2YWwgKnR2YmxhbmssIGJvb2wgaW5fdmJsYW5rX2lycSkKPiA+ ICt7Cj4gPiArCWJvb2wgcmV0ID0gZmFsc2U7Cj4gPiArCj4gPiArCS8qIERlZmluZSByZXF1ZXN0 ZWQgbWF4aW11bSBlcnJvciBvbiB0aW1lc3RhbXBzIChuYW5vc2Vjb25kcykuICovCj4gPiArCWlu dCBtYXhfZXJyb3IgPSAoaW50KSBkcm1fdGltZXN0YW1wX3ByZWNpc2lvbiAqIDEwMDA7Cj4gPiAr Cj4gPiArCS8qIFF1ZXJ5IGRyaXZlciBpZiBwb3NzaWJsZSBhbmQgcHJlY2lzaW9uIHRpbWVzdGFt cGluZyBlbmFibGVkLiAqLwo+ID4gKwlpZiAoZGV2LT5kcml2ZXItPmdldF92YmxhbmtfdGltZXN0 YW1wICYmIChtYXhfZXJyb3IgPiAwKSkKPiA+ICsJCXJldCA9IGRldi0+ZHJpdmVyLT5nZXRfdmJs YW5rX3RpbWVzdGFtcChkZXYsIHBpcGUsICZtYXhfZXJyb3IsCj4gPiArCQkJCQkJCXR2Ymxhbmss IGluX3ZibGFua19pcnEpOwo+ID4gKwo+ID4gKwkvKiBHUFUgaGlnaCBwcmVjaXNpb24gdGltZXN0 YW1wIHF1ZXJ5IHVuc3VwcG9ydGVkIG9yIGZhaWxlZC4KPiA+ICsJICogUmV0dXJuIGN1cnJlbnQg bW9ub3RvbmljL2dldHRpbWVvZmRheSB0aW1lc3RhbXAgYXMgYmVzdCBlc3RpbWF0ZS4KPiA+ICsJ ICovCj4gPiArCWlmICghcmV0KQo+ID4gKwkJKnR2YmxhbmsgPSBnZXRfZHJtX3RpbWVzdGFtcCgp Owo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBk cm1fY3J0Y192YmxhbmtfY291bnQgLSByZXRyaWV2ZSAiY29va2VkIiB2YmxhbmsgY291bnRlciB2 YWx1ZQo+ID4gKyAqIEBjcnRjOiB3aGljaCBjb3VudGVyIHRvIHJldHJpZXZlCj4gPiArICoKPiA+ ICsgKiBGZXRjaGVzIHRoZSAiY29va2VkIiB2YmxhbmsgY291bnQgdmFsdWUgdGhhdCByZXByZXNl bnRzIHRoZSBudW1iZXIgb2YKPiA+ICsgKiB2YmxhbmsgZXZlbnRzIHNpbmNlIHRoZSBzeXN0ZW0g d2FzIGJvb3RlZCwgaW5jbHVkaW5nIGxvc3QgZXZlbnRzIGR1ZSB0bwo+ID4gKyAqIG1vZGVzZXR0 aW5nIGFjdGl2aXR5Lgo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiBUaGUgc29mdHdh cmUgdmJsYW5rIGNvdW50ZXIuCj4gPiArICovCj4gPiArdTMyIGRybV9jcnRjX3ZibGFua19jb3Vu dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlyZXR1cm4gZHJtX3ZibGFua19j b3VudChjcnRjLT5kZXYsIGRybV9jcnRjX2luZGV4KGNydGMpKTsKPiA+ICt9Cj4gPiArRVhQT1JU X1NZTUJPTChkcm1fY3J0Y192YmxhbmtfY291bnQpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRy bV92YmxhbmtfY291bnRfYW5kX3RpbWUgLSByZXRyaWV2ZSAiY29va2VkIiB2YmxhbmsgY291bnRl ciB2YWx1ZSBhbmQgdGhlCj4gPiArICogICAgIHN5c3RlbSB0aW1lc3RhbXAgY29ycmVzcG9uZGlu ZyB0byB0aGF0IHZibGFuayBjb3VudGVyIHZhbHVlLgo+ID4gKyAqIEBkZXY6IERSTSBkZXZpY2UK PiA+ICsgKiBAcGlwZTogaW5kZXggb2YgQ1JUQyB3aG9zZSBjb3VudGVyIHRvIHJldHJpZXZlCj4g PiArICogQHZibGFua3RpbWU6IFBvaW50ZXIgdG8gc3RydWN0IHRpbWV2YWwgdG8gcmVjZWl2ZSB0 aGUgdmJsYW5rIHRpbWVzdGFtcC4KPiA+ICsgKgo+ID4gKyAqIEZldGNoZXMgdGhlICJjb29rZWQi IHZibGFuayBjb3VudCB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZgo+ID4gKyAq IHZibGFuayBldmVudHMgc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCBpbmNsdWRpbmcgbG9z dCBldmVudHMgZHVlIHRvCj4gPiArICogbW9kZXNldHRpbmcgYWN0aXZpdHkuIFJldHVybnMgY29y cmVzcG9uZGluZyBzeXN0ZW0gdGltZXN0YW1wIG9mIHRoZSB0aW1lCj4gPiArICogb2YgdGhlIHZi bGFuayBpbnRlcnZhbCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHZibGFuayBjb3Vu dGVyIHZhbHVlLgo+ID4gKyAqCj4gPiArICogVGhpcyBpcyB0aGUgbGVnYWN5IHZlcnNpb24gb2Yg ZHJtX2NydGNfdmJsYW5rX2NvdW50X2FuZF90aW1lKCkuCj4gPiArICovCj4gPiArc3RhdGljIHUz MiBkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2ln bmVkIGludCBwaXBlLAo+ID4gKwkJCQkgICAgIHN0cnVjdCB0aW1ldmFsICp2Ymxhbmt0aW1lKQo+ ID4gK3sKPiA+ICsJc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5rID0gJmRldi0+dmJsYW5r W3BpcGVdOwo+ID4gKwl1MzIgdmJsYW5rX2NvdW50Owo+ID4gKwl1bnNpZ25lZCBpbnQgc2VxOwo+ ID4gKwo+ID4gKwlpZiAoV0FSTl9PTihwaXBlID49IGRldi0+bnVtX2NydGNzKSkgewo+ID4gKwkJ KnZibGFua3RpbWUgPSAoc3RydWN0IHRpbWV2YWwpIHsgMCB9Owo+ID4gKwkJcmV0dXJuIDA7Cj4g PiArCX0KPiA+ICsKPiA+ICsJZG8gewo+ID4gKwkJc2VxID0gcmVhZF9zZXFiZWdpbigmdmJsYW5r LT5zZXFsb2NrKTsKPiA+ICsJCXZibGFua19jb3VudCA9IHZibGFuay0+Y291bnQ7Cj4gPiArCQkq dmJsYW5rdGltZSA9IHZibGFuay0+dGltZTsKPiA+ICsJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgm dmJsYW5rLT5zZXFsb2NrLCBzZXEpKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHZibGFua19jb3VudDsK PiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2NydGNfdmJsYW5rX2NvdW50X2FuZF90 aW1lIC0gcmV0cmlldmUgImNvb2tlZCIgdmJsYW5rIGNvdW50ZXIgdmFsdWUKPiA+ICsgKiAgICAg YW5kIHRoZSBzeXN0ZW0gdGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCB2YmxhbmsgY291 bnRlciB2YWx1ZQo+ID4gKyAqIEBjcnRjOiB3aGljaCBjb3VudGVyIHRvIHJldHJpZXZlCj4gPiAr ICogQHZibGFua3RpbWU6IFBvaW50ZXIgdG8gc3RydWN0IHRpbWV2YWwgdG8gcmVjZWl2ZSB0aGUg dmJsYW5rIHRpbWVzdGFtcC4KPiA+ICsgKgo+ID4gKyAqIEZldGNoZXMgdGhlICJjb29rZWQiIHZi bGFuayBjb3VudCB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZgo+ID4gKyAqIHZi bGFuayBldmVudHMgc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCBpbmNsdWRpbmcgbG9zdCBl dmVudHMgZHVlIHRvCj4gPiArICogbW9kZXNldHRpbmcgYWN0aXZpdHkuIFJldHVybnMgY29ycmVz cG9uZGluZyBzeXN0ZW0gdGltZXN0YW1wIG9mIHRoZSB0aW1lCj4gPiArICogb2YgdGhlIHZibGFu ayBpbnRlcnZhbCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHZibGFuayBjb3VudGVy IHZhbHVlLgo+ID4gKyAqLwo+ID4gK3UzMiBkcm1fY3J0Y192YmxhbmtfY291bnRfYW5kX3RpbWUo c3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gKwkJCQkgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5r dGltZSkKPiA+ICt7Cj4gPiArCXJldHVybiBkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKGNydGMt PmRldiwgZHJtX2NydGNfaW5kZXgoY3J0YyksCj4gPiArCQkJCQkgdmJsYW5rdGltZSk7Cj4gPiAr fQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2NydGNfdmJsYW5rX2NvdW50X2FuZF90aW1lKTsKPiA+ ICsKPiA+ICtzdGF0aWMgdm9pZCBzZW5kX3ZibGFua19ldmVudChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+ID4gKwkJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSwKPiA+ICsJCXVu c2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3QgdGltZXZhbCAqbm93KQo+ID4gK3sKPiA+ICsJZS0+ZXZl bnQuc2VxdWVuY2UgPSBzZXE7Cj4gPiArCWUtPmV2ZW50LnR2X3NlYyA9IG5vdy0+dHZfc2VjOwo+ ID4gKwllLT5ldmVudC50dl91c2VjID0gbm93LT50dl91c2VjOwo+ID4gKwo+ID4gKwl0cmFjZV9k cm1fdmJsYW5rX2V2ZW50X2RlbGl2ZXJlZChlLT5iYXNlLmZpbGVfcHJpdiwgZS0+cGlwZSwKPiA+ ICsJCQkJCSBlLT5ldmVudC5zZXF1ZW5jZSk7Cj4gPiArCj4gPiArCWRybV9zZW5kX2V2ZW50X2xv Y2tlZChkZXYsICZlLT5iYXNlKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2Ny dGNfYXJtX3ZibGFua19ldmVudCAtIGFybSB2YmxhbmsgZXZlbnQgYWZ0ZXIgcGFnZWZsaXAKPiA+ ICsgKiBAY3J0YzogdGhlIHNvdXJjZSBDUlRDIG9mIHRoZSB2YmxhbmsgZXZlbnQKPiA+ICsgKiBA ZTogdGhlIGV2ZW50IHRvIHNlbmQKPiA+ICsgKgo+ID4gKyAqIEEgbG90IG9mIGRyaXZlcnMgbmVl ZCB0byBnZW5lcmF0ZSB2YmxhbmsgZXZlbnRzIGZvciB0aGUgdmVyeSBuZXh0IHZibGFuawo+ID4g KyAqIGludGVycnVwdC4gRm9yIGV4YW1wbGUgd2hlbiB0aGUgcGFnZSBmbGlwIGludGVycnVwdCBo YXBwZW5zIHdoZW4gdGhlIHBhZ2UKPiA+ICsgKiBmbGlwIGdldHMgYXJtZWQsIGJ1dCBub3Qgd2hl biBpdCBhY3R1YWxseSBleGVjdXRlcyB3aXRoaW4gdGhlIG5leHQgdmJsYW5rCj4gPiArICogcGVy aW9kLiBUaGlzIGhlbHBlciBmdW5jdGlvbiBpbXBsZW1lbnRzIGV4YWN0bHkgdGhlIHJlcXVpcmVk IHZibGFuayBhcm1pbmcKPiA+ICsgKiBiZWhhdmlvdXIuCj4gPiArICoKPiA+ICsgKiBOT1RFOiBE cml2ZXJzIHVzaW5nIHRoaXMgdG8gc2VuZCBvdXQgdGhlICZkcm1fY3J0Y19zdGF0ZS5ldmVudCBh cyBwYXJ0IG9mIGFuCj4gPiArICogYXRvbWljIGNvbW1pdCBtdXN0IGVuc3VyZSB0aGF0IHRoZSBu ZXh0IHZibGFuayBoYXBwZW5zIGF0IGV4YWN0bHkgdGhlIHNhbWUKPiA+ICsgKiB0aW1lIGFzIHRo ZSBhdG9taWMgY29tbWl0IGlzIGNvbW1pdHRlZCB0byB0aGUgaGFyZHdhcmUuIFRoaXMgZnVuY3Rp b24gaXRzZWxmCj4gPiArICogZG9lcyAqKm5vdCoqIHByb3RlY3QgYWdhaW4gdGhlIG5leHQgdmJs YW5rIGludGVycnVwdCByYWNpbmcgd2l0aCBlaXRoZXIgdGhpcwo+ID4gKyAqIGZ1bmN0aW9uIGNh bGwgb3IgdGhlIGF0b21pYyBjb21taXQgb3BlcmF0aW9uLiBBIHBvc3NpYmxlIHNlcXVlbmNlIGNv dWxkIGJlOgo+ID4gKyAqCj4gPiArICogMS4gRHJpdmVyIGNvbW1pdHMgbmV3IGhhcmR3YXJlIHN0 YXRlIGludG8gdmJsYW5rLXN5bmNocm9uaXplZCByZWdpc3RlcnMuCj4gPiArICogMi4gQSB2Ymxh bmsgaGFwcGVucywgY29tbWl0dGluZyB0aGUgaGFyZHdhcmUgc3RhdGUuIEFsc28gdGhlIGNvcnJl c3BvbmRpbmcKPiA+ICsgKiAgICB2YmxhbmsgaW50ZXJydXB0IGlzIGZpcmVkIG9mZiBhbmQgZnVs bHkgcHJvY2Vzc2VkIGJ5IHRoZSBpbnRlcnJ1cHQKPiA+ICsgKiAgICBoYW5kbGVyLgo+ID4gKyAq IDMuIFRoZSBhdG9taWMgY29tbWl0IG9wZXJhdGlvbiBwcm9jZWVkcyB0byBjYWxsIGRybV9jcnRj X2FybV92YmxhbmtfZXZlbnQoKS4KPiA+ICsgKiA0LiBUaGUgZXZlbnQgaXMgb25seSBzZW5kIG91 dCBmb3IgdGhlIG5leHQgdmJsYW5rLCB3aGljaCBpcyB3cm9uZy4KPiA+ICsgKgo+ID4gKyAqIEFu IGVxdWl2YWxlbnQgcmFjZSBjYW4gaGFwcGVuIHdoZW4gdGhlIGRyaXZlciBjYWxscwo+ID4gKyAq IGRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQoKSBiZWZvcmUgd3JpdGluZyBvdXQgdGhlIG5ldyBo YXJkd2FyZSBzdGF0ZS4KPiA+ICsgKgo+ID4gKyAqIFRoZSBvbmx5IHdheSB0byBtYWtlIHRoaXMg d29yayBzYWZlbHkgaXMgdG8gcHJldmVudCB0aGUgdmJsYW5rIGZyb20gZmlyaW5nCj4gPiArICog KGFuZCB0aGUgaGFyZHdhcmUgZnJvbSBjb21taXR0aW5nIGFueXRoaW5nIGVsc2UpIHVudGlsIHRo ZSBlbnRpcmUgYXRvbWljCj4gPiArICogY29tbWl0IHNlcXVlbmNlIGhhcyBydW4gdG8gY29tcGxl dGlvbi4gSWYgdGhlIGhhcmR3YXJlIGRvZXMgbm90IGhhdmUgc3VjaCBhCj4gPiArICogZmVhdHVy ZSAoZS5nLiB1c2luZyBhICJnbyIgYml0KSwgdGhlbiBpdCBpcyB1bnNhZmUgdG8gdXNlIHRoaXMg ZnVuY3Rpb25zLgo+ID4gKyAqIEluc3RlYWQgZHJpdmVycyBuZWVkIHRvIG1hbnVhbGx5IHNlbmQg b3V0IHRoZSBldmVudCBmcm9tIHRoZWlyIGludGVycnVwdAo+ID4gKyAqIGhhbmRsZXIgYnkgY2Fs bGluZyBkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudCgpIGFuZCBtYWtlIHN1cmUgdGhhdAo+ID4g dGhlcmUncyBubwo+ID4gKyAqIHBvc3NpYmxlIHJhY2Ugd2l0aCB0aGUgaGFyZHdhcmUgY29tbWl0 dGluZyB0aGUgYXRvbWljIHVwZGF0ZS4KPiA+ICsgKgo+ID4gKyAqIENhbGxlciBtdXN0IGhvbGQg ZXZlbnQgbG9jay4gQ2FsbGVyIG11c3QgYWxzbyBob2xkIGEgdmJsYW5rIHJlZmVyZW5jZSBmb3IK PiA+ICsgKiB0aGUgZXZlbnQgQGUsIHdoaWNoIHdpbGwgYmUgZHJvcHBlZCB3aGVuIHRoZSBuZXh0 IHZibGFuayBhcnJpdmVzLgo+ID4gKyAqLwo+ID4gK3ZvaWQgZHJtX2NydGNfYXJtX3ZibGFua19l dmVudChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJICAgICAgIHN0cnVjdCBkcm1fcGVu ZGluZ192YmxhbmtfZXZlbnQgKmUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gY3J0Yy0+ZGV2Owo+ID4gKwl1bnNpZ25lZCBpbnQgcGlwZSA9IGRybV9jcnRjX2luZGV4KGNy dGMpOwo+ID4gKwo+ID4gKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRldi0+ZXZlbnRfbG9jayk7Cj4g PiArCj4gPiArCWUtPnBpcGUgPSBwaXBlOwo+ID4gKwllLT5ldmVudC5zZXF1ZW5jZSA9IGRybV92 YmxhbmtfY291bnQoZGV2LCBwaXBlKTsKPiA+ICsJZS0+ZXZlbnQuY3J0Y19pZCA9IGNydGMtPmJh c2UuaWQ7Cj4gPiArCWxpc3RfYWRkX3RhaWwoJmUtPmJhc2UubGluaywgJmRldi0+dmJsYW5rX2V2 ZW50X2xpc3QpOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9jcnRjX2FybV92Ymxhbmtf ZXZlbnQpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50 IC0gaGVscGVyIHRvIHNlbmQgdmJsYW5rIGV2ZW50IGFmdGVyIHBhZ2VmbGlwCj4gPiArICogQGNy dGM6IHRoZSBzb3VyY2UgQ1JUQyBvZiB0aGUgdmJsYW5rIGV2ZW50Cj4gPiArICogQGU6IHRoZSBl dmVudCB0byBzZW5kCj4gPiArICoKPiA+ICsgKiBVcGRhdGVzIHNlcXVlbmNlICMgYW5kIHRpbWVz dGFtcCBvbiBldmVudCBmb3IgdGhlIG1vc3QgcmVjZW50bHkgcHJvY2Vzc2VkCj4gPiArICogdmJs YW5rLCBhbmQgc2VuZHMgaXQgdG8gdXNlcnNwYWNlLiAgQ2FsbGVyIG11c3QgaG9sZCBldmVudCBs b2NrLgo+ID4gKyAqCj4gPiArICogU2VlIGRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQoKSBmb3Ig YSBoZWxwZXIgd2hpY2ggY2FuIGJlIHVzZWQgaW4gY2VydGFpbgo+ID4gKyAqIHNpdHVhdGlvbiwg ZXNwZWNpYWxseSB0byBzZW5kIG91dCBldmVudHMgZm9yIGF0b21pYyBjb21taXQgb3BlcmF0aW9u cy4KPiA+ICsgKi8KPiA+ICt2b2lkIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKPiA+ICsJCQkJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAq ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gPiAr CXVuc2lnbmVkIGludCBzZXEsIHBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsKPiA+ICsJc3Ry dWN0IHRpbWV2YWwgbm93Owo+ID4gKwo+ID4gKwlpZiAoZGV2LT5udW1fY3J0Y3MgPiAwKSB7Cj4g PiArCQlzZXEgPSBkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKGRldiwgcGlwZSwgJm5vdyk7Cj4g PiArCX0gZWxzZSB7Cj4gPiArCQlzZXEgPSAwOwo+ID4gKwo+ID4gKwkJbm93ID0gZ2V0X2RybV90 aW1lc3RhbXAoKTsKPiA+ICsJfQo+ID4gKwllLT5waXBlID0gcGlwZTsKPiA+ICsJZS0+ZXZlbnQu Y3J0Y19pZCA9IGNydGMtPmJhc2UuaWQ7Cj4gPiArCXNlbmRfdmJsYW5rX2V2ZW50KGRldiwgZSwg c2VxLCAmbm93KTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fY3J0Y19zZW5kX3ZibGFu a19ldmVudCk7Cj4gPiArCj4gPiArc3RhdGljIGludCBfX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUpCj4gPiArewo+ID4gKwlpZiAoZHJtX2Nv cmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewo+ID4gKwkJc3RydWN0IGRy bV9jcnRjICpjcnRjID0gZHJtX2NydGNfZnJvbV9pbmRleChkZXYsIHBpcGUpOwo+ID4gKwo+ID4g KwkJaWYgKGNydGMtPmZ1bmNzLT5lbmFibGVfdmJsYW5rKQo+ID4gKwkJCXJldHVybiBjcnRjLT5m dW5jcy0+ZW5hYmxlX3ZibGFuayhjcnRjKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gZGV2 LT5kcml2ZXItPmVuYWJsZV92YmxhbmsoZGV2LCBwaXBlKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoq Cj4gPiArICogZHJtX3ZibGFua19lbmFibGUgLSBlbmFibGUgdGhlIHZibGFuayBpbnRlcnJ1cHQg b24gYSBDUlRDCj4gPiArICogQGRldjogRFJNIGRldmljZQo+ID4gKyAqIEBwaXBlOiBDUlRDIGlu ZGV4Cj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqIFplcm8gb24gc3VjY2VzcyBvciBh IG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50 IGRybV92YmxhbmtfZW5hYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBw aXBlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5rID0gJmRldi0+ dmJsYW5rW3BpcGVdOwo+ID4gKwlpbnQgcmV0ID0gMDsKPiA+ICsKPiA+ICsJYXNzZXJ0X3NwaW5f bG9ja2VkKCZkZXYtPnZibF9sb2NrKTsKPiA+ICsKPiA+ICsJc3Bpbl9sb2NrKCZkZXYtPnZibGFu a190aW1lX2xvY2spOwo+ID4gKwo+ID4gKwlpZiAoIXZibGFuay0+ZW5hYmxlZCkgewo+ID4gKwkJ LyoKPiA+ICsJCSAqIEVuYWJsZSB2YmxhbmsgaXJxcyB1bmRlciB2YmxhbmtfdGltZV9sb2NrIHBy b3RlY3Rpb24uCj4gPiArCQkgKiBBbGwgdmJsYW5rIGNvdW50ICYgdGltZXN0YW1wIHVwZGF0ZXMg YXJlIGhlbGQgb2ZmCj4gPiArCQkgKiB1bnRpbCB3ZSBhcmUgZG9uZSByZWluaXRpYWxpemluZyBt YXN0ZXIgY291bnRlciBhbmQKPiA+ICsJCSAqIHRpbWVzdGFtcHMuIEZpbHRlcmNvZGUgaW4gZHJt X2hhbmRsZV92YmxhbmsoKSB3aWxsCj4gPiArCQkgKiBwcmV2ZW50IGRvdWJsZS1hY2NvdW50aW5n IG9mIHNhbWUgdmJsYW5rIGludGVydmFsLgo+ID4gKwkJICovCj4gPiArCQlyZXQgPSBfX2VuYWJs ZV92YmxhbmsoZGV2LCBwaXBlKTsKPiA+ICsJCURSTV9ERUJVRygiZW5hYmxpbmcgdmJsYW5rIG9u IGNydGMgJXUsIHJldDogJWRcbiIsIHBpcGUsIHJldCk7Cj4gPiArCQlpZiAocmV0KSB7Cj4gPiAr CQkJYXRvbWljX2RlYygmdmJsYW5rLT5yZWZjb3VudCk7Cj4gPiArCQl9IGVsc2Ugewo+ID4gKwkJ CWRybV91cGRhdGVfdmJsYW5rX2NvdW50KGRldiwgcGlwZSwgMCk7Cj4gPiArCQkJLyogZHJtX3Vw ZGF0ZV92YmxhbmtfY291bnQoKSBpbmNsdWRlcyBhIHdtYiBzbyB3ZSBqdXN0Cj4gPiArCQkJICog bmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29tcGlsZXIgZW1pdHMgdGhlIHdyaXRlCj4gPiArCQkJ ICogdG8gbWFyayB0aGUgdmJsYW5rIGFzIGVuYWJsZWQgYWZ0ZXIgdGhlIGNhbGwKPiA+ICsJCQkg KiB0byBkcm1fdXBkYXRlX3ZibGFua19jb3VudCgpLgo+ID4gKwkJCSAqLwo+ID4gKwkJCVdSSVRF X09OQ0UodmJsYW5rLT5lbmFibGVkLCB0cnVlKTsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4g KwlzcGluX3VubG9jaygmZGV2LT52YmxhbmtfdGltZV9sb2NrKTsKPiA+ICsKPiA+ICsJcmV0dXJu IHJldDsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX3ZibGFua19nZXQgLSBnZXQg YSByZWZlcmVuY2UgY291bnQgb24gdmJsYW5rIGV2ZW50cwo+ID4gKyAqIEBkZXY6IERSTSBkZXZp Y2UKPiA+ICsgKiBAcGlwZTogaW5kZXggb2YgQ1JUQyB0byBvd24KPiA+ICsgKgo+ID4gKyAqIEFj cXVpcmUgYSByZWZlcmVuY2UgY291bnQgb24gdmJsYW5rIGV2ZW50cyB0byBhdm9pZCBoYXZpbmcg dGhlbSBkaXNhYmxlZAo+ID4gKyAqIHdoaWxlIGluIHVzZS4KPiA+ICsgKgo+ID4gKyAqIFRoaXMg aXMgdGhlIGxlZ2FjeSB2ZXJzaW9uIG9mIGRybV9jcnRjX3ZibGFua19nZXQoKS4KPiA+ICsgKgo+ ID4gKyAqIFJldHVybnM6Cj4gPiArICogWmVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbnQgZHJtX3ZibGFua19n ZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUpCj4gPiArewo+ID4g KwlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2LT52YmxhbmtbcGlwZV07Cj4g PiArCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gPiArCWludCByZXQgPSAwOwo+ID4gKwo+ID4g KwlpZiAoIWRldi0+bnVtX2NydGNzKQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiAr CWlmIChXQVJOX09OKHBpcGUgPj0gZGV2LT5udW1fY3J0Y3MpKQo+ID4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gPiArCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFn cyk7Cj4gPiArCS8qIEdvaW5nIGZyb20gMC0+MSBtZWFucyB3ZSBoYXZlIHRvIGVuYWJsZSBpbnRl cnJ1cHRzIGFnYWluICovCj4gPiArCWlmIChhdG9taWNfYWRkX3JldHVybigxLCAmdmJsYW5rLT5y ZWZjb3VudCkgPT0gMSkgewo+ID4gKwkJcmV0ID0gZHJtX3ZibGFua19lbmFibGUoZGV2LCBwaXBl KTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCWlmICghdmJsYW5rLT5lbmFibGVkKSB7Cj4gPiArCQkJ YXRvbWljX2RlYygmdmJsYW5rLT5yZWZjb3VudCk7Cj4gPiArCQkJcmV0ID0gLUVJTlZBTDsKPiA+ ICsJCX0KPiA+ICsJfQo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2Nr LCBpcnFmbGFncyk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gKy8q Kgo+ID4gKyAqIGRybV9jcnRjX3ZibGFua19nZXQgLSBnZXQgYSByZWZlcmVuY2UgY291bnQgb24g dmJsYW5rIGV2ZW50cwo+ID4gKyAqIEBjcnRjOiB3aGljaCBDUlRDIHRvIG93bgo+ID4gKyAqCj4g PiArICogQWNxdWlyZSBhIHJlZmVyZW5jZSBjb3VudCBvbiB2YmxhbmsgZXZlbnRzIHRvIGF2b2lk IGhhdmluZyB0aGVtIGRpc2FibGVkCj4gPiArICogd2hpbGUgaW4gdXNlLgo+ID4gKyAqCj4gPiAr ICogUmV0dXJuczoKPiA+ICsgKiBaZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBj b2RlIG9uIGZhaWx1cmUuCj4gPiArICovCj4gPiAraW50IGRybV9jcnRjX3ZibGFua19nZXQoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGRybV92YmxhbmtfZ2V0KGNy dGMtPmRldiwgZHJtX2NydGNfaW5kZXgoY3J0YykpOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9M KGRybV9jcnRjX3ZibGFua19nZXQpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV92Ymxhbmtf cHV0IC0gcmVsZWFzZSBvd25lcnNoaXAgb2YgdmJsYW5rIGV2ZW50cwo+ID4gKyAqIEBkZXY6IERS TSBkZXZpY2UKPiA+ICsgKiBAcGlwZTogaW5kZXggb2YgQ1JUQyB0byByZWxlYXNlCj4gPiArICoK PiA+ICsgKiBSZWxlYXNlIG93bmVyc2hpcCBvZiBhIGdpdmVuIHZibGFuayBjb3VudGVyLCB0dXJu aW5nIG9mZiBpbnRlcnJ1cHRzCj4gPiArICogaWYgcG9zc2libGUuIERpc2FibGUgaW50ZXJydXB0 cyBhZnRlciBkcm1fdmJsYW5rX29mZmRlbGF5IG1pbGxpc2Vjb25kcy4KPiA+ICsgKgo+ID4gKyAq IFRoaXMgaXMgdGhlIGxlZ2FjeSB2ZXJzaW9uIG9mIGRybV9jcnRjX3ZibGFua19wdXQoKS4KPiA+ ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCBkcm1fdmJsYW5rX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fdmJsYW5rX2Ny dGMgKnZibGFuayA9ICZkZXYtPnZibGFua1twaXBlXTsKPiA+ICsKPiA+ICsJaWYgKFdBUk5fT04o cGlwZSA+PSBkZXYtPm51bV9jcnRjcykpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCWlmIChX QVJOX09OKGF0b21pY19yZWFkKCZ2YmxhbmstPnJlZmNvdW50KSA9PSAwKSkKPiA+ICsJCXJldHVy bjsKPiA+ICsKPiA+ICsJLyogTGFzdCB1c2VyIHNjaGVkdWxlcyBpbnRlcnJ1cHQgZGlzYWJsZSAq Lwo+ID4gKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdmJsYW5rLT5yZWZjb3VudCkpIHsKPiA+ ICsJCWlmIChkcm1fdmJsYW5rX29mZmRlbGF5ID09IDApCj4gPiArCQkJcmV0dXJuOwo+ID4gKwkJ ZWxzZSBpZiAoZHJtX3ZibGFua19vZmZkZWxheSA8IDApCj4gPiArCQkJdmJsYW5rX2Rpc2FibGVf Zm4oKHVuc2lnbmVkIGxvbmcpdmJsYW5rKTsKPiA+ICsJCWVsc2UgaWYgKCFkZXYtPnZibGFua19k aXNhYmxlX2ltbWVkaWF0ZSkKPiA+ICsJCQltb2RfdGltZXIoJnZibGFuay0+ZGlzYWJsZV90aW1l ciwKPiA+ICsJCQkJICBqaWZmaWVzICsgKChkcm1fdmJsYW5rX29mZmRlbGF5ICogSFopLzEwMDAp KTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fY3J0Y192Ymxhbmtf cHV0IC0gZ2l2ZSB1cCBvd25lcnNoaXAgb2YgdmJsYW5rIGV2ZW50cwo+ID4gKyAqIEBjcnRjOiB3 aGljaCBjb3VudGVyIHRvIGdpdmUgdXAKPiA+ICsgKgo+ID4gKyAqIFJlbGVhc2Ugb3duZXJzaGlw IG9mIGEgZ2l2ZW4gdmJsYW5rIGNvdW50ZXIsIHR1cm5pbmcgb2ZmIGludGVycnVwdHMKPiA+ICsg KiBpZiBwb3NzaWJsZS4gRGlzYWJsZSBpbnRlcnJ1cHRzIGFmdGVyIGRybV92Ymxhbmtfb2ZmZGVs YXkgbWlsbGlzZWNvbmRzLgo+ID4gKyAqLwo+ID4gK3ZvaWQgZHJtX2NydGNfdmJsYW5rX3B1dChz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlkcm1fdmJsYW5rX3B1dChjcnRjLT5k ZXYsIGRybV9jcnRjX2luZGV4KGNydGMpKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1f Y3J0Y192YmxhbmtfcHV0KTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fd2FpdF9vbmVfdmJs YW5rIC0gd2FpdCBmb3Igb25lIHZibGFuawo+ID4gKyAqIEBkZXY6IERSTSBkZXZpY2UKPiA+ICsg KiBAcGlwZTogQ1JUQyBpbmRleAo+ID4gKyAqCj4gPiArICogVGhpcyB3YWl0cyBmb3Igb25lIHZi bGFuayB0byBwYXNzIG9uIEBwaXBlLCB1c2luZyB0aGUgaXJxIGRyaXZlciBpbnRlcmZhY2VzLgo+ ID4gKyAqIEl0IGlzIGEgZmFpbHVyZSB0byBjYWxsIHRoaXMgd2hlbiB0aGUgdmJsYW5rIGlycSBm b3IgQHBpcGUgaXMgZGlzYWJsZWQsIGUuZy4KPiA+ICsgKiBkdWUgdG8gbGFjayBvZiBkcml2ZXIg c3VwcG9ydCBvciBiZWNhdXNlIHRoZSBjcnRjIGlzIG9mZi4KPiA+ICsgKi8KPiA+ICt2b2lkIGRy bV93YWl0X29uZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBp cGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2LT52 YmxhbmtbcGlwZV07Cj4gPiArCWludCByZXQ7Cj4gPiArCXUzMiBsYXN0Owo+ID4gKwo+ID4gKwlp ZiAoV0FSTl9PTihwaXBlID49IGRldi0+bnVtX2NydGNzKSkKPiA+ICsJCXJldHVybjsKPiA+ICsK PiA+ICsJcmV0ID0gZHJtX3ZibGFua19nZXQoZGV2LCBwaXBlKTsKPiA+ICsJaWYgKFdBUk4ocmV0 LCAidmJsYW5rIG5vdCBhdmFpbGFibGUgb24gY3J0YyAlaSwgcmV0PSVpXG4iLCBwaXBlLCByZXQp KQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlsYXN0ID0gZHJtX3ZibGFua19jb3VudChkZXYs IHBpcGUpOwo+ID4gKwo+ID4gKwlyZXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQodmJsYW5rLT5xdWV1 ZSwKPiA+ICsJCQkJIGxhc3QgIT0gZHJtX3ZibGFua19jb3VudChkZXYsIHBpcGUpLAo+ID4gKwkJ CQkgbXNlY3NfdG9famlmZmllcygxMDApKTsKPiA+ICsKPiA+ICsJV0FSTihyZXQgPT0gMCwgInZi bGFuayB3YWl0IHRpbWVkIG91dCBvbiBjcnRjICVpXG4iLCBwaXBlKTsKPiA+ICsKPiA+ICsJZHJt X3ZibGFua19wdXQoZGV2LCBwaXBlKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fd2Fp dF9vbmVfdmJsYW5rKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fY3J0Y193YWl0X29uZV92 YmxhbmsgLSB3YWl0IGZvciBvbmUgdmJsYW5rCj4gPiArICogQGNydGM6IERSTSBjcnRjCj4gPiAr ICoKPiA+ICsgKiBUaGlzIHdhaXRzIGZvciBvbmUgdmJsYW5rIHRvIHBhc3Mgb24gQGNydGMsIHVz aW5nIHRoZSBpcnEgZHJpdmVyIGludGVyZmFjZXMuCj4gPiArICogSXQgaXMgYSBmYWlsdXJlIHRv IGNhbGwgdGhpcyB3aGVuIHRoZSB2YmxhbmsgaXJxIGZvciBAY3J0YyBpcyBkaXNhYmxlZCwgZS5n Lgo+ID4gKyAqIGR1ZSB0byBsYWNrIG9mIGRyaXZlciBzdXBwb3J0IG9yIGJlY2F1c2UgdGhlIGNy dGMgaXMgb2ZmLgo+ID4gKyAqLwo+ID4gK3ZvaWQgZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICt7Cj4gPiArCWRybV93YWl0X29uZV92YmxhbmsoY3J0 Yy0+ZGV2LCBkcm1fY3J0Y19pbmRleChjcnRjKSk7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0wo ZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fY3J0 Y192Ymxhbmtfb2ZmIC0gZGlzYWJsZSB2YmxhbmsgZXZlbnRzIG9uIGEgQ1JUQwo+ID4gKyAqIEBj cnRjOiBDUlRDIGluIHF1ZXN0aW9uCj4gPiArICoKPiA+ICsgKiBEcml2ZXJzIGNhbiB1c2UgdGhp cyBmdW5jdGlvbiB0byBzaHV0IGRvd24gdGhlIHZibGFuayBpbnRlcnJ1cHQKPiA+IGhhbmRsaW5n IHdoZW4KPiA+ICsgKiBkaXNhYmxpbmcgYSBjcnRjLiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhh dCB0aGUgbGF0ZXN0IHZibGFuawo+ID4gZnJhbWUgY291bnQgaXMKPiA+ICsgKiBzdG9yZWQgc28g dGhhdCBkcm1fdmJsYW5rX29uIGNhbiByZXN0b3JlIGl0IGFnYWluLgo+ID4gKyAqCj4gPiArICog RHJpdmVycyBtdXN0IHVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIGhhcmR3YXJlIHZibGFuayBj b3VudGVyIGNhbiBnZXQKPiA+ICsgKiByZXNldCwgZS5nLiB3aGVuIHN1c3BlbmRpbmcuCj4gPiAr ICovCj4gPiArdm9pZCBkcm1fY3J0Y192Ymxhbmtfb2ZmKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK PiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gPiArCXVu c2lnbmVkIGludCBwaXBlID0gZHJtX2NydGNfaW5kZXgoY3J0Yyk7Cj4gPiArCXN0cnVjdCBkcm1f dmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYtPnZibGFua1twaXBlXTsKPiA+ICsJc3RydWN0IGRy bV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSwgKnQ7Cj4gPiArCXN0cnVjdCB0aW1ldmFsIG5vdzsK PiA+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiA+ICsJdW5zaWduZWQgaW50IHNlcTsKPiA+ ICsKPiA+ICsJaWYgKFdBUk5fT04ocGlwZSA+PSBkZXYtPm51bV9jcnRjcykpCj4gPiArCQlyZXR1 cm47Cj4gPiArCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGlycWZs YWdzKTsKPiA+ICsKPiA+ICsJc3Bpbl9sb2NrKCZkZXYtPnZibF9sb2NrKTsKPiA+ICsJRFJNX0RF QlVHX1ZCTCgiY3J0YyAlZCwgdmJsYW5rIGVuYWJsZWQgJWQsIGlubW9kZXNldCAlZFxuIiwKPiA+ ICsJCSAgICAgIHBpcGUsIHZibGFuay0+ZW5hYmxlZCwgdmJsYW5rLT5pbm1vZGVzZXQpOwo+ID4g Kwo+ID4gKwkvKiBBdm9pZCByZWR1bmRhbnQgdmJsYW5rIGRpc2FibGVzIHdpdGhvdXQgcHJldmlv dXMKPiA+ICsJICogZHJtX2NydGNfdmJsYW5rX29uKCkuICovCj4gPiArCWlmIChkcm1fY29yZV9j aGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0FUT01JQykgfHwgIXZibGFuay0+aW5tb2Rlc2V0KQo+ ID4gKwkJZHJtX3ZibGFua19kaXNhYmxlX2FuZF9zYXZlKGRldiwgcGlwZSk7Cj4gPiArCj4gPiAr CXdha2VfdXAoJnZibGFuay0+cXVldWUpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBQcmV2ZW50 IHN1YnNlcXVlbnQgZHJtX3ZibGFua19nZXQoKSBmcm9tIHJlLWVuYWJsaW5nCj4gPiArCSAqIHRo ZSB2YmxhbmsgaW50ZXJydXB0IGJ5IGJ1bXBpbmcgdGhlIHJlZmNvdW50Lgo+ID4gKwkgKi8KPiA+ ICsJaWYgKCF2YmxhbmstPmlubW9kZXNldCkgewo+ID4gKwkJYXRvbWljX2luYygmdmJsYW5rLT5y ZWZjb3VudCk7Cj4gPiArCQl2YmxhbmstPmlubW9kZXNldCA9IDE7Cj4gPiArCX0KPiA+ICsJc3Bp bl91bmxvY2soJmRldi0+dmJsX2xvY2spOwo+ID4gKwo+ID4gKwkvKiBTZW5kIGFueSBxdWV1ZWQg dmJsYW5rIGV2ZW50cywgbGVzdCB0aGUgbmF0aXZlcyBncm93IGRpc3F1aWV0ICovCj4gPiArCXNl cSA9IGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoZGV2LCBwaXBlLCAmbm93KTsKPiA+ICsKPiA+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIHQsICZkZXYtPnZibGFua19ldmVudF9saXN0 LCBiYXNlLmxpbmspIHsKPiA+ICsJCWlmIChlLT5waXBlICE9IHBpcGUpCj4gPiArCQkJY29udGlu dWU7Cj4gPiArCQlEUk1fREVCVUcoIlNlbmRpbmcgcHJlbWF0dXJlIHZibGFuayBldmVudCBvbiBk aXNhYmxlOiAiCj4gPiArCQkJICAid2FudGVkICV1LCBjdXJyZW50ICV1XG4iLAo+ID4gKwkJCSAg ZS0+ZXZlbnQuc2VxdWVuY2UsIHNlcSk7Cj4gPiArCQlsaXN0X2RlbCgmZS0+YmFzZS5saW5rKTsK PiA+ICsJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7Cj4gPiArCQlzZW5kX3ZibGFua19ldmVu dChkZXYsIGUsIHNlcSwgJm5vdyk7Cj4gPiArCX0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZGV2LT5ldmVudF9sb2NrLCBpcnFmbGFncyk7Cj4gPiArCj4gPiArCS8qIFdpbGwgYmUgcmVz ZXQgYnkgdGhlIG1vZGVzZXQgaGVscGVycyB3aGVuIHJlLWVuYWJsaW5nIHRoZSBjcnRjIGJ5Cj4g PiArCSAqIGNhbGxpbmcgZHJtX2NhbGNfdGltZXN0YW1waW5nX2NvbnN0YW50cygpLiAqLwo+ID4g Kwl2YmxhbmstPmh3bW9kZS5jcnRjX2Nsb2NrID0gMDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJP TChkcm1fY3J0Y192Ymxhbmtfb2ZmKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fY3J0Y192 YmxhbmtfcmVzZXQgLSByZXNldCB2Ymxhbmsgc3RhdGUgdG8gb2ZmIG9uIGEgQ1JUQwo+ID4gKyAq IEBjcnRjOiBDUlRDIGluIHF1ZXN0aW9uCj4gPiArICoKPiA+ICsgKiBEcml2ZXJzIGNhbiB1c2Ug dGhpcyBmdW5jdGlvbiB0byByZXNldCB0aGUgdmJsYW5rIHN0YXRlIHRvIG9mZiBhdCBsb2FkIHRp bWUuCj4gPiArICogRHJpdmVycyBzaG91bGQgdXNlIHRoaXMgdG9nZXRoZXIgd2l0aCB0aGUgZHJt X2NydGNfdmJsYW5rX29mZigpIGFuZAo+ID4gKyAqIGRybV9jcnRjX3ZibGFua19vbigpIGZ1bmN0 aW9ucy4gVGhlIGRpZmZlcmVuY2UgY29tcGFyZWQgdG8KPiA+ICsgKiBkcm1fY3J0Y192Ymxhbmtf b2ZmKCkgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3Qgc2F2ZSB0aGUgdmJsYW5rIGNvdW50 ZXIKPiA+ICsgKiBhbmQgaGVuY2UgZG9lc24ndCBuZWVkIHRvIGNhbGwgYW55IGRyaXZlciBob29r cy4KPiA+ICsgKi8KPiA+ICt2b2lkIGRybV9jcnRjX3ZibGFua19yZXNldChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2 Owo+ID4gKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+ID4gKwl1bnNpZ25lZCBpbnQgcGlwZSA9 IGRybV9jcnRjX2luZGV4KGNydGMpOwo+ID4gKwlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2Ymxh bmsgPSAmZGV2LT52YmxhbmtbcGlwZV07Cj4gPiArCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZk ZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7Cj4gPiArCS8qCj4gPiArCSAqIFByZXZlbnQgc3Vic2Vx dWVudCBkcm1fdmJsYW5rX2dldCgpIGZyb20gZW5hYmxpbmcgdGhlIHZibGFuawo+ID4gKwkgKiBp bnRlcnJ1cHQgYnkgYnVtcGluZyB0aGUgcmVmY291bnQuCj4gPiArCSAqLwo+ID4gKwlpZiAoIXZi bGFuay0+aW5tb2Rlc2V0KSB7Cj4gPiArCQlhdG9taWNfaW5jKCZ2YmxhbmstPnJlZmNvdW50KTsK PiA+ICsJCXZibGFuay0+aW5tb2Rlc2V0ID0gMTsKPiA+ICsJfQo+ID4gKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7Cj4gPiArCj4gPiArCVdBUk5fT04o IWxpc3RfZW1wdHkoJmRldi0+dmJsYW5rX2V2ZW50X2xpc3QpKTsKPiA+ICt9Cj4gPiArRVhQT1JU X1NZTUJPTChkcm1fY3J0Y192YmxhbmtfcmVzZXQpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRy bV9jcnRjX3ZibGFua19vbiAtIGVuYWJsZSB2YmxhbmsgZXZlbnRzIG9uIGEgQ1JUQwo+ID4gKyAq IEBjcnRjOiBDUlRDIGluIHF1ZXN0aW9uCj4gPiArICoKPiA+ICsgKiBUaGlzIGZ1bmN0aW9ucyBy ZXN0b3JlcyB0aGUgdmJsYW5rIGludGVycnVwdCBzdGF0ZSBjYXB0dXJlZCB3aXRoCj4gPiArICog ZHJtX2NydGNfdmJsYW5rX29mZigpIGFnYWluLiBOb3RlIHRoYXQgY2FsbHMgdG8gZHJtX2NydGNf dmJsYW5rX29uKCkgYW5kCj4gPiArICogZHJtX2NydGNfdmJsYW5rX29mZigpIGNhbiBiZSB1bmJh bGFuY2VkIGFuZCBzbyBjYW4gYWxzbyBiZQo+ID4gdW5jb25kaXRpb25hbGx5IGNhbGxlZAo+ID4g KyAqIGluIGRyaXZlciBsb2FkIGNvZGUgdG8gcmVmbGVjdCB0aGUgY3VycmVudCBoYXJkd2FyZSBz dGF0ZSBvZiB0aGUgY3J0Yy4KPiA+ICsgKi8KPiA+ICt2b2lkIGRybV9jcnRjX3ZibGFua19vbihz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gY3J0Yy0+ZGV2Owo+ID4gKwl1bnNpZ25lZCBpbnQgcGlwZSA9IGRybV9jcnRjX2luZGV4KGNy dGMpOwo+ID4gKwlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2LT52Ymxhbmtb cGlwZV07Cj4gPiArCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gPiArCj4gPiArCWlmIChXQVJO X09OKHBpcGUgPj0gZGV2LT5udW1fY3J0Y3MpKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlz cGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwo+ID4gKwlEUk1fREVC VUdfVkJMKCJjcnRjICVkLCB2YmxhbmsgZW5hYmxlZCAlZCwgaW5tb2Rlc2V0ICVkXG4iLAo+ID4g KwkJICAgICAgcGlwZSwgdmJsYW5rLT5lbmFibGVkLCB2YmxhbmstPmlubW9kZXNldCk7Cj4gPiAr Cj4gPiArCS8qIERyb3Agb3VyIHByaXZhdGUgInByZXZlbnQgZHJtX3ZibGFua19nZXQiIHJlZmNv dW50ICovCj4gPiArCWlmICh2YmxhbmstPmlubW9kZXNldCkgewo+ID4gKwkJYXRvbWljX2RlYygm dmJsYW5rLT5yZWZjb3VudCk7Cj4gPiArCQl2YmxhbmstPmlubW9kZXNldCA9IDA7Cj4gPiArCX0K PiA+ICsKPiA+ICsJZHJtX3Jlc2V0X3ZibGFua190aW1lc3RhbXAoZGV2LCBwaXBlKTsKPiA+ICsK PiA+ICsJLyoKPiA+ICsJICogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgdGhlcmUgYXJlIHVzZXJz IGxlZnQsIG9yIHRoZQo+ID4gKwkgKiB1c2VyIHdpc2hlcyB2YmxhbmsgaW50ZXJydXB0cyB0byBi ZSBlbmFibGVkIGFsbCB0aGUgdGltZS4KPiA+ICsJICovCj4gPiArCWlmIChhdG9taWNfcmVhZCgm dmJsYW5rLT5yZWZjb3VudCkgIT0gMCB8fCBkcm1fdmJsYW5rX29mZmRlbGF5ID09IDApCj4gPiAr CQlXQVJOX09OKGRybV92YmxhbmtfZW5hYmxlKGRldiwgcGlwZSkpOwo+ID4gKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7Cj4gPiArfQo+ID4gK0VYUE9S VF9TWU1CT0woZHJtX2NydGNfdmJsYW5rX29uKTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkcm1f bGVnYWN5X3ZibGFua19wcmVfbW9kZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gKwkJ CQkJICB1bnNpZ25lZCBpbnQgcGlwZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fdmJsYW5rX2Ny dGMgKnZibGFuayA9ICZkZXYtPnZibGFua1twaXBlXTsKPiA+ICsKPiA+ICsJLyogdmJsYW5rIGlz IG5vdCBpbml0aWFsaXplZCAoSVJRIG5vdCBpbnN0YWxsZWQgPyksIG9yIGhhcyBiZWVuIGZyZWVk ICovCj4gPiArCWlmICghZGV2LT5udW1fY3J0Y3MpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiAr CWlmIChXQVJOX09OKHBpcGUgPj0gZGV2LT5udW1fY3J0Y3MpKQo+ID4gKwkJcmV0dXJuOwo+ID4g Kwo+ID4gKwkvKgo+ID4gKwkgKiBUbyBhdm9pZCBhbGwgdGhlIHByb2JsZW1zIHRoYXQgbWlnaHQg aGFwcGVuIGlmIGludGVycnVwdHMKPiA+ICsJICogd2VyZSBlbmFibGVkL2Rpc2FibGVkIGFyb3Vu ZCBvciBiZXR3ZWVuIHRoZXNlIGNhbGxzLCB3ZSBqdXN0Cj4gPiArCSAqIGhhdmUgdGhlIGtlcm5l bCB0YWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBDUlRDIChqdXN0IG9uY2UgdGhvdWdoCj4gPiArCSAq IHRvIGF2b2lkIGNvcnJ1cHRpbmcgdGhlIGNvdW50IGlmIG11bHRpcGxlLCBtaXNtYXRjaCBjYWxs cyBvY2N1ciksCj4gPiArCSAqIHNvIHRoYXQgaW50ZXJydXB0cyByZW1haW4gZW5hYmxlZCBpbiB0 aGUgaW50ZXJpbS4KPiA+ICsJICovCj4gPiArCWlmICghdmJsYW5rLT5pbm1vZGVzZXQpIHsKPiA+ ICsJCXZibGFuay0+aW5tb2Rlc2V0ID0gMHgxOwo+ID4gKwkJaWYgKGRybV92YmxhbmtfZ2V0KGRl diwgcGlwZSkgPT0gMCkKPiA+ICsJCQl2YmxhbmstPmlubW9kZXNldCB8PSAweDI7Cj4gPiArCX0K PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHJtX2xlZ2FjeV92YmxhbmtfcG9zdF9tb2Rl c2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiArCQkJCQkgICB1bnNpZ25lZCBpbnQgcGlw ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYtPnZi bGFua1twaXBlXTsKPiA+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiA+ICsKPiA+ICsJLyog dmJsYW5rIGlzIG5vdCBpbml0aWFsaXplZCAoSVJRIG5vdCBpbnN0YWxsZWQgPyksIG9yIGhhcyBi ZWVuIGZyZWVkICovCj4gPiArCWlmICghZGV2LT5udW1fY3J0Y3MpCj4gPiArCQlyZXR1cm47Cj4g PiArCj4gPiArCWlmIChXQVJOX09OKHBpcGUgPj0gZGV2LT5udW1fY3J0Y3MpKQo+ID4gKwkJcmV0 dXJuOwo+ID4gKwo+ID4gKwlpZiAodmJsYW5rLT5pbm1vZGVzZXQpIHsKPiA+ICsJCXNwaW5fbG9j a19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7Cj4gPiArCQlkcm1fcmVzZXRfdmJs YW5rX3RpbWVzdGFtcChkZXYsIHBpcGUpOwo+ID4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwo+ID4gKwo+ID4gKwkJaWYgKHZibGFuay0+aW5tb2Rl c2V0ICYgMHgyKQo+ID4gKwkJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7Cj4gPiArCj4gPiAr CQl2YmxhbmstPmlubW9kZXNldCA9IDA7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiAraW50IGRy bV9sZWdhY3lfbW9kZXNldF9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK PiA+ICsJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKPiA+ICt7Cj4gPiArCXN0cnVj dCBkcm1fbW9kZXNldF9jdGwgKm1vZGVzZXQgPSBkYXRhOwo+ID4gKwl1bnNpZ25lZCBpbnQgcGlw ZTsKPiA+ICsKPiA+ICsJLyogSWYgZHJtX3ZibGFua19pbml0KCkgaGFzbid0IGJlZW4gY2FsbGVk IHlldCwganVzdCBuby1vcCAqLwo+ID4gKwlpZiAoIWRldi0+bnVtX2NydGNzKQo+ID4gKwkJcmV0 dXJuIDA7Cj4gPiArCj4gPiArCS8qIEtNUyBkcml2ZXJzIGhhbmRsZSB0aGlzIGludGVybmFsbHkg Ki8KPiA+ICsJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0xFR0FDWSkp Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJcGlwZSA9IG1vZGVzZXQtPmNydGM7Cj4gPiAr CWlmIChwaXBlID49IGRldi0+bnVtX2NydGNzKQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAr Cj4gPiArCXN3aXRjaCAobW9kZXNldC0+Y21kKSB7Cj4gPiArCWNhc2UgX0RSTV9QUkVfTU9ERVNF VDoKPiA+ICsJCWRybV9sZWdhY3lfdmJsYW5rX3ByZV9tb2Rlc2V0KGRldiwgcGlwZSk7Cj4gPiAr CQlicmVhazsKPiA+ICsJY2FzZSBfRFJNX1BPU1RfTU9ERVNFVDoKPiA+ICsJCWRybV9sZWdhY3lf dmJsYW5rX3Bvc3RfbW9kZXNldChkZXYsIHBpcGUpOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWRlZmF1 bHQ6Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSBib29sIHZibGFua19wYXNzZWQodTMyIHNl cSwgdTMyIHJlZikKPiA+ICt7Cj4gPiArCXJldHVybiAoc2VxIC0gcmVmKSA8PSAoMSA8PCAyMyk7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHJtX3F1ZXVlX3ZibGFua19ldmVudChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwKPiA+ICsJCQkJICB1bmlvbiBk cm1fd2FpdF92YmxhbmsgKnZibHdhaXQsCj4gPiArCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2 LT52YmxhbmtbcGlwZV07Cj4gPiArCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmU7 Cj4gPiArCXN0cnVjdCB0aW1ldmFsIG5vdzsKPiA+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiA+ ICsJdW5zaWduZWQgaW50IHNlcTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJZSA9IGt6YWxs b2Moc2l6ZW9mKCplKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlmIChlID09IE5VTEwpIHsKPiA+ICsJ CXJldCA9IC1FTk9NRU07Cj4gPiArCQlnb3RvIGVycl9wdXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ ZS0+cGlwZSA9IHBpcGU7Cj4gPiArCWUtPmV2ZW50LmJhc2UudHlwZSA9IERSTV9FVkVOVF9WQkxB Tks7Cj4gPiArCWUtPmV2ZW50LmJhc2UubGVuZ3RoID0gc2l6ZW9mKGUtPmV2ZW50KTsKPiA+ICsJ ZS0+ZXZlbnQudXNlcl9kYXRhID0gdmJsd2FpdC0+cmVxdWVzdC5zaWduYWw7Cj4gPiArCj4gPiAr CXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiA+ICsKPiA+ICsJ LyoKPiA+ICsJICogZHJtX2NydGNfdmJsYW5rX29mZigpIG1pZ2h0IGhhdmUgYmVlbiBjYWxsZWQg YWZ0ZXIgd2UgY2FsbGVkCj4gPiArCSAqIGRybV92YmxhbmtfZ2V0KCkuIGRybV9jcnRjX3ZibGFu a19vZmYoKSBob2xkcyBldmVudF9sb2NrIGFyb3VuZCB0aGUKPiA+ICsJICogdmJsYW5rIGRpc2Fi bGUsIHNvIG5vIG5lZWQgZm9yIGZ1cnRoZXIgbG9ja2luZy4gIFRoZSByZWZlcmVuY2UgZnJvbQo+ ID4gKwkgKiBkcm1fdmJsYW5rX2dldCgpIHByb3RlY3RzIGFnYWluc3QgdmJsYW5rIGRpc2FibGUg ZnJvbSBhbm90aGVyIHNvdXJjZS4KPiA+ICsJICovCj4gPiArCWlmICghUkVBRF9PTkNFKHZibGFu ay0+ZW5hYmxlZCkpIHsKPiA+ICsJCXJldCA9IC1FSU5WQUw7Cj4gPiArCQlnb3RvIGVycl91bmxv Y2s7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gZHJtX2V2ZW50X3Jlc2VydmVfaW5pdF9sb2Nr ZWQoZGV2LCBmaWxlX3ByaXYsICZlLT5iYXNlLAo+ID4gKwkJCQkJICAgICZlLT5ldmVudC5iYXNl KTsKPiA+ICsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWdvdG8gZXJyX3VubG9jazsKPiA+ICsKPiA+ ICsJc2VxID0gZHJtX3ZibGFua19jb3VudF9hbmRfdGltZShkZXYsIHBpcGUsICZub3cpOwo+ID4g Kwo+ID4gKwlEUk1fREVCVUcoImV2ZW50IG9uIHZibGFuayBjb3VudCAldSwgY3VycmVudCAldSwg Y3J0YyAldVxuIiwKPiA+ICsJCSAgdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSwgc2VxLCBwaXBl KTsKPiA+ICsKPiA+ICsJdHJhY2VfZHJtX3ZibGFua19ldmVudF9xdWV1ZWQoZmlsZV9wcml2LCBw aXBlLAo+ID4gKwkJCQkgICAgICB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKTsKPiA+ICsKPiA+ ICsJZS0+ZXZlbnQuc2VxdWVuY2UgPSB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlOwo+ID4gKwlp ZiAodmJsYW5rX3Bhc3NlZChzZXEsIHZibHdhaXQtPnJlcXVlc3Quc2VxdWVuY2UpKSB7Cj4gPiAr CQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwo+ID4gKwkJc2VuZF92YmxhbmtfZXZlbnQoZGV2 LCBlLCBzZXEsICZub3cpOwo+ID4gKwkJdmJsd2FpdC0+cmVwbHkuc2VxdWVuY2UgPSBzZXE7Cj4g PiArCX0gZWxzZSB7Cj4gPiArCQkvKiBkcm1faGFuZGxlX3ZibGFua19ldmVudHMgd2lsbCBjYWxs IGRybV92YmxhbmtfcHV0ICovCj4gPiArCQlsaXN0X2FkZF90YWlsKCZlLT5iYXNlLmxpbmssICZk ZXYtPnZibGFua19ldmVudF9saXN0KTsKPiA+ICsJCXZibHdhaXQtPnJlcGx5LnNlcXVlbmNlID0g dmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiA+ICsKPiA+ICsJcmV0dXJu IDA7Cj4gPiArCj4gPiArZXJyX3VubG9jazoKPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gPiArCWtmcmVlKGUpOwo+ID4gK2Vycl9wdXQ6Cj4g PiArCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7Cj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBib29sIGRybV93YWl0X3ZibGFua19pc19xdWVyeSh1bmlvbiBkcm1f d2FpdF92YmxhbmsgKnZibHdhaXQpCj4gPiArewo+ID4gKwlpZiAodmJsd2FpdC0+cmVxdWVzdC5z ZXF1ZW5jZSkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJcmV0dXJuIF9EUk1fVkJM QU5LX1JFTEFUSVZFID09Cj4gPiArCQkodmJsd2FpdC0+cmVxdWVzdC50eXBlICYgKF9EUk1fVkJM QU5LX1RZUEVTX01BU0sgfAo+ID4gKwkJCQkJICBfRFJNX1ZCTEFOS19FVkVOVCB8Cj4gPiArCQkJ CQkgIF9EUk1fVkJMQU5LX05FWFRPTk1JU1MpKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsg KiBXYWl0IGZvciBWQkxBTksuCj4gPiArICoKPiA+ICsgKiBccGFyYW0gaW5vZGUgZGV2aWNlIGlu b2RlLgo+ID4gKyAqIFxwYXJhbSBmaWxlX3ByaXYgRFJNIGZpbGUgcHJpdmF0ZS4KPiA+ICsgKiBc cGFyYW0gY21kIGNvbW1hbmQuCj4gPiArICogXHBhcmFtIGRhdGEgdXNlciBhcmd1bWVudCwgcG9p bnRpbmcgdG8gYSBkcm1fd2FpdF92Ymxhbmsgc3RydWN0dXJlLgo+ID4gKyAqIFxyZXR1cm4gemVy byBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCj4gPiArICoKPiA+ ICsgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHZibGFuayBpbnRlcnJ1cHQgb24gdGhlIHBp cGUgcmVxdWVzdGVkLCB0aGVuCj4gPiArICogc2xlZXBzIHdhaXRpbmcgZm9yIHRoZSByZXF1ZXN0 ZWQgc2VxdWVuY2UgbnVtYmVyIHRvIG9jY3VyLCBhbmQgZHJvcHMKPiA+ICsgKiB0aGUgdmJsYW5r IGludGVycnVwdCByZWZjb3VudCBhZnRlcndhcmRzLiAodmJsYW5rIElSUSBkaXNhYmxlIGZvbGxv d3MgdGhhdAo+ID4gKyAqIGFmdGVyIGEgdGltZW91dCB3aXRoIG5vIGZ1cnRoZXIgdmJsYW5rIHdh aXRzIHNjaGVkdWxlZCkuCj4gPiArICovCj4gPiAraW50IGRybV93YWl0X3ZibGFuayhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ID4gKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5rOwo+ ID4gKwl1bmlvbiBkcm1fd2FpdF92YmxhbmsgKnZibHdhaXQgPSBkYXRhOwo+ID4gKwlpbnQgcmV0 Owo+ID4gKwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHNlcSwgcGlwZSwgaGlnaF9waXBlOwo+ID4gKwo+ ID4gKwlpZiAoIWRldi0+aXJxX2VuYWJsZWQpCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsK PiA+ICsJaWYgKHZibHdhaXQtPnJlcXVlc3QudHlwZSAmIF9EUk1fVkJMQU5LX1NJR05BTCkKPiA+ ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gKwlpZiAodmJsd2FpdC0+cmVxdWVzdC50eXBl ICYKPiA+ICsJICAgIH4oX0RSTV9WQkxBTktfVFlQRVNfTUFTSyB8IF9EUk1fVkJMQU5LX0ZMQUdT X01BU0sgfAo+ID4gKwkgICAgICBfRFJNX1ZCTEFOS19ISUdIX0NSVENfTUFTSykpIHsKPiA+ICsJ CURSTV9FUlJPUigiVW5zdXBwb3J0ZWQgdHlwZSB2YWx1ZSAweCV4LCBzdXBwb3J0ZWQgbWFzayAw eCV4XG4iLAo+ID4gKwkJCSAgdmJsd2FpdC0+cmVxdWVzdC50eXBlLAo+ID4gKwkJCSAgKF9EUk1f VkJMQU5LX1RZUEVTX01BU0sgfCBfRFJNX1ZCTEFOS19GTEFHU19NQVNLIHwKPiA+ICsJCQkgICBf RFJNX1ZCTEFOS19ISUdIX0NSVENfTUFTSykpOwo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJZmxhZ3MgPSB2Ymx3YWl0LT5yZXF1ZXN0LnR5cGUgJiBfRFJNX1ZCTEFO S19GTEFHU19NQVNLOwo+ID4gKwloaWdoX3BpcGUgPSAodmJsd2FpdC0+cmVxdWVzdC50eXBlICYg X0RSTV9WQkxBTktfSElHSF9DUlRDX01BU0spOwo+ID4gKwlpZiAoaGlnaF9waXBlKQo+ID4gKwkJ cGlwZSA9IGhpZ2hfcGlwZSA+PiBfRFJNX1ZCTEFOS19ISUdIX0NSVENfU0hJRlQ7Cj4gPiArCWVs c2UKPiA+ICsJCXBpcGUgPSBmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSA/IDEgOiAwOwo+ ID4gKwlpZiAocGlwZSA+PSBkZXYtPm51bV9jcnRjcykKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ ID4gKwo+ID4gKwl2YmxhbmsgPSAmZGV2LT52YmxhbmtbcGlwZV07Cj4gPiArCj4gPiArCS8qIElm IHRoZSBjb3VudGVyIGlzIGN1cnJlbnRseSBlbmFibGVkIGFuZCBhY2N1cmF0ZSwgc2hvcnQtY2ly Y3VpdAo+ID4gKwkgKiBxdWVyaWVzIHRvIHJldHVybiB0aGUgY2FjaGVkIHRpbWVzdGFtcCBvZiB0 aGUgbGFzdCB2YmxhbmsuCj4gPiArCSAqLwo+ID4gKwlpZiAoZGV2LT52YmxhbmtfZGlzYWJsZV9p bW1lZGlhdGUgJiYKPiA+ICsJICAgIGRybV93YWl0X3ZibGFua19pc19xdWVyeSh2Ymx3YWl0KSAm Jgo+ID4gKwkgICAgUkVBRF9PTkNFKHZibGFuay0+ZW5hYmxlZCkpIHsKPiA+ICsJCXN0cnVjdCB0 aW1ldmFsIG5vdzsKPiA+ICsKPiA+ICsJCXZibHdhaXQtPnJlcGx5LnNlcXVlbmNlID0KPiA+ICsJ CQlkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKGRldiwgcGlwZSwgJm5vdyk7Cj4gPiArCQl2Ymx3 YWl0LT5yZXBseS50dmFsX3NlYyA9IG5vdy50dl9zZWM7Cj4gPiArCQl2Ymx3YWl0LT5yZXBseS50 dmFsX3VzZWMgPSBub3cudHZfdXNlYzsKPiA+ICsJCXJldHVybiAwOwo+ID4gKwl9Cj4gPiArCj4g PiArCXJldCA9IGRybV92YmxhbmtfZ2V0KGRldiwgcGlwZSk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ ICsJCURSTV9ERUJVRygiY3J0YyAlZCBmYWlsZWQgdG8gYWNxdWlyZSB2YmxhbmsgY291bnRlciwg JWRcbiIsIHBpcGUsIHJldCk7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCXNlcSA9 IGRybV92YmxhbmtfY291bnQoZGV2LCBwaXBlKTsKPiA+ICsKPiA+ICsJc3dpdGNoICh2Ymx3YWl0 LT5yZXF1ZXN0LnR5cGUgJiBfRFJNX1ZCTEFOS19UWVBFU19NQVNLKSB7Cj4gPiArCWNhc2UgX0RS TV9WQkxBTktfUkVMQVRJVkU6Cj4gPiArCQl2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlICs9IHNl cTsKPiA+ICsJCXZibHdhaXQtPnJlcXVlc3QudHlwZSAmPSB+X0RSTV9WQkxBTktfUkVMQVRJVkU7 Cj4gPiArCWNhc2UgX0RSTV9WQkxBTktfQUJTT0xVVEU6Cj4gPiArCQlicmVhazsKPiA+ICsJZGVm YXVsdDoKPiA+ICsJCXJldCA9IC1FSU5WQUw7Cj4gPiArCQlnb3RvIGRvbmU7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJaWYgKChmbGFncyAmIF9EUk1fVkJMQU5LX05FWFRPTk1JU1MpICYmCj4gPiArCSAg ICB2YmxhbmtfcGFzc2VkKHNlcSwgdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSkpCj4gPiArCQl2 Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlID0gc2VxICsgMTsKPiA+ICsKPiA+ICsJaWYgKGZsYWdz ICYgX0RSTV9WQkxBTktfRVZFTlQpIHsKPiA+ICsJCS8qIG11c3QgaG9sZCBvbiB0byB0aGUgdmJs YW5rIHJlZiB1bnRpbCB0aGUgZXZlbnQgZmlyZXMKPiA+ICsJCSAqIGRybV92YmxhbmtfcHV0IHdp bGwgYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5Cj4gPiArCQkgKi8KPiA+ICsJCXJldHVybiBkcm1f cXVldWVfdmJsYW5rX2V2ZW50KGRldiwgcGlwZSwgdmJsd2FpdCwgZmlsZV9wcml2KTsKPiA+ICsJ fQo+ID4gKwo+ID4gKwlpZiAodmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSAhPSBzZXEpIHsKPiA+ ICsJCURSTV9ERUJVRygid2FpdGluZyBvbiB2YmxhbmsgY291bnQgJXUsIGNydGMgJXVcbiIsCj4g PiArCQkJICB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlLCBwaXBlKTsKPiA+ICsJCURSTV9XQUlU X09OKHJldCwgdmJsYW5rLT5xdWV1ZSwgMyAqIEhaLAo+ID4gKwkJCSAgICB2YmxhbmtfcGFzc2Vk KGRybV92YmxhbmtfY291bnQoZGV2LCBwaXBlKSwKPiA+ICsJCQkJCSAgdmJsd2FpdC0+cmVxdWVz dC5zZXF1ZW5jZSkgfHwKPiA+ICsJCQkgICAgIVJFQURfT05DRSh2YmxhbmstPmVuYWJsZWQpKTsK PiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAocmV0ICE9IC1FSU5UUikgewo+ID4gKwkJc3RydWN0IHRp bWV2YWwgbm93Owo+ID4gKwo+ID4gKwkJdmJsd2FpdC0+cmVwbHkuc2VxdWVuY2UgPSBkcm1fdmJs YW5rX2NvdW50X2FuZF90aW1lKGRldiwgcGlwZSwgJm5vdyk7Cj4gPiArCQl2Ymx3YWl0LT5yZXBs eS50dmFsX3NlYyA9IG5vdy50dl9zZWM7Cj4gPiArCQl2Ymx3YWl0LT5yZXBseS50dmFsX3VzZWMg PSBub3cudHZfdXNlYzsKPiA+ICsKPiA+ICsJCURSTV9ERUJVRygiY3J0YyAlZCByZXR1cm5pbmcg JXUgdG8gY2xpZW50XG4iLAo+ID4gKwkJCSAgcGlwZSwgdmJsd2FpdC0+cmVwbHkuc2VxdWVuY2Up Owo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJRFJNX0RFQlVHKCJjcnRjICVkIHZibGFuayB3YWl0IGlu dGVycnVwdGVkIGJ5IHNpZ25hbFxuIiwgcGlwZSk7Cj4gPiArCX0KPiA+ICsKPiA+ICtkb25lOgo+ ID4gKwlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkcm1faGFuZGxlX3ZibGFua19ldmVudHMoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJt X3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplLCAqdDsKPiA+ICsJc3RydWN0IHRpbWV2YWwgbm93Owo+ ID4gKwl1bnNpZ25lZCBpbnQgc2VxOwo+ID4gKwo+ID4gKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRl di0+ZXZlbnRfbG9jayk7Cj4gPiArCj4gPiArCXNlcSA9IGRybV92YmxhbmtfY291bnRfYW5kX3Rp bWUoZGV2LCBwaXBlLCAmbm93KTsKPiA+ICsKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KGUsIHQsICZkZXYtPnZibGFua19ldmVudF9saXN0LCBiYXNlLmxpbmspIHsKPiA+ICsJCWlmIChl LT5waXBlICE9IHBpcGUpCj4gPiArCQkJY29udGludWU7Cj4gPiArCQlpZiAoIXZibGFua19wYXNz ZWQoc2VxLCBlLT5ldmVudC5zZXF1ZW5jZSkpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiAr CQlEUk1fREVCVUcoInZibGFuayBldmVudCBvbiAldSwgY3VycmVudCAldVxuIiwKPiA+ICsJCQkg IGUtPmV2ZW50LnNlcXVlbmNlLCBzZXEpOwo+ID4gKwo+ID4gKwkJbGlzdF9kZWwoJmUtPmJhc2Uu bGluayk7Cj4gPiArCQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwo+ID4gKwkJc2VuZF92Ymxh bmtfZXZlbnQoZGV2LCBlLCBzZXEsICZub3cpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXRyYWNlX2Ry bV92YmxhbmtfZXZlbnQocGlwZSwgc2VxKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICog ZHJtX2hhbmRsZV92YmxhbmsgLSBoYW5kbGUgYSB2YmxhbmsgZXZlbnQKPiA+ICsgKiBAZGV2OiBE Uk0gZGV2aWNlCj4gPiArICogQHBpcGU6IGluZGV4IG9mIENSVEMgd2hlcmUgdGhpcyBldmVudCBv Y2N1cnJlZAo+ID4gKyAqCj4gPiArICogRHJpdmVycyBzaG91bGQgY2FsbCB0aGlzIHJvdXRpbmUg aW4gdGhlaXIgdmJsYW5rIGludGVycnVwdCBoYW5kbGVycyB0bwo+ID4gKyAqIHVwZGF0ZSB0aGUg dmJsYW5rIGNvdW50ZXIgYW5kIHNlbmQgYW55IHNpZ25hbHMgdGhhdCBtYXkgYmUgcGVuZGluZy4K PiA+ICsgKgo+ID4gKyAqIFRoaXMgaXMgdGhlIGxlZ2FjeSB2ZXJzaW9uIG9mIGRybV9jcnRjX2hh bmRsZV92YmxhbmsoKS4KPiA+ICsgKi8KPiA+ICtib29sIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKQo+ID4gK3sKPiA+ICsJc3RydWN0 IGRybV92YmxhbmtfY3J0YyAqdmJsYW5rID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ID4gKwl1bnNp Z25lZCBsb25nIGlycWZsYWdzOwo+ID4gKwlib29sIGRpc2FibGVfaXJxOwo+ID4gKwo+ID4gKwlp ZiAoV0FSTl9PTl9PTkNFKCFkZXYtPm51bV9jcnRjcykpCj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4g PiArCj4gPiArCWlmIChXQVJOX09OKHBpcGUgPj0gZGV2LT5udW1fY3J0Y3MpKQo+ID4gKwkJcmV0 dXJuIGZhbHNlOwo+ID4gKwo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2Nr LCBpcnFmbGFncyk7Cj4gPiArCj4gPiArCS8qIE5lZWQgdGltZXN0YW1wIGxvY2sgdG8gcHJldmVu dCBjb25jdXJyZW50IGV4ZWN1dGlvbiB3aXRoCj4gPiArCSAqIHZibGFuayBlbmFibGUvZGlzYWJs ZSwgYXMgdGhpcyB3b3VsZCBjYXVzZSBpbmNvbnNpc3RlbnQKPiA+ICsJICogb3IgY29ycnVwdGVk IHRpbWVzdGFtcHMgYW5kIHZibGFuayBjb3VudHMuCj4gPiArCSAqLwo+ID4gKwlzcGluX2xvY2so JmRldi0+dmJsYW5rX3RpbWVfbG9jayk7Cj4gPiArCj4gPiArCS8qIFZibGFuayBpcnEgaGFuZGxp bmcgZGlzYWJsZWQuIE5vdGhpbmcgdG8gZG8uICovCj4gPiArCWlmICghdmJsYW5rLT5lbmFibGVk KSB7Cj4gPiArCQlzcGluX3VubG9jaygmZGV2LT52YmxhbmtfdGltZV9sb2NrKTsKPiA+ICsJCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgaXJxZmxhZ3MpOwo+ID4gKwkJ cmV0dXJuIGZhbHNlOwo+ID4gKwl9Cj4gPiArCj4gPiArCWRybV91cGRhdGVfdmJsYW5rX2NvdW50 KGRldiwgcGlwZSwgdHJ1ZSk7Cj4gPiArCj4gPiArCXNwaW5fdW5sb2NrKCZkZXYtPnZibGFua190 aW1lX2xvY2spOwo+ID4gKwo+ID4gKwl3YWtlX3VwKCZ2YmxhbmstPnF1ZXVlKTsKPiA+ICsKPiA+ ICsJLyogV2l0aCBpbnN0YW50LW9mZiwgd2UgZGVmZXIgZGlzYWJsaW5nIHRoZSBpbnRlcnJ1cHQg dW50aWwgYWZ0ZXIKPiA+ICsJICogd2UgZmluaXNoIHByb2Nlc3NpbmcgdGhlIGZvbGxvd2luZyB2 YmxhbmsgYWZ0ZXIgYWxsIGV2ZW50cyBoYXZlCj4gPiArCSAqIGJlZW4gc2lnbmFsZWQuIFRoZSBk aXNhYmxlIGhhcyB0byBiZSBsYXN0IChhZnRlcgo+ID4gKwkgKiBkcm1faGFuZGxlX3ZibGFua19l dmVudHMpIHNvIHRoYXQgdGhlIHRpbWVzdGFtcCBpcyBhbHdheXMgYWNjdXJhdGUuCj4gPiArCSAq Lwo+ID4gKwlkaXNhYmxlX2lycSA9IChkZXYtPnZibGFua19kaXNhYmxlX2ltbWVkaWF0ZSAmJgo+ ID4gKwkJICAgICAgIGRybV92Ymxhbmtfb2ZmZGVsYXkgPiAwICYmCj4gPiArCQkgICAgICAgIWF0 b21pY19yZWFkKCZ2YmxhbmstPnJlZmNvdW50KSk7Cj4gPiArCj4gPiArCWRybV9oYW5kbGVfdmJs YW5rX2V2ZW50cyhkZXYsIHBpcGUpOwo+ID4gKwo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkZXYtPmV2ZW50X2xvY2ssIGlycWZsYWdzKTsKPiA+ICsKPiA+ICsJaWYgKGRpc2FibGVfaXJx KQo+ID4gKwkJdmJsYW5rX2Rpc2FibGVfZm4oKHVuc2lnbmVkIGxvbmcpdmJsYW5rKTsKPiA+ICsK PiA+ICsJcmV0dXJuIHRydWU7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2hhbmRsZV92 YmxhbmspOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9jcnRjX2hhbmRsZV92YmxhbmsgLSBo YW5kbGUgYSB2YmxhbmsgZXZlbnQKPiA+ICsgKiBAY3J0Yzogd2hlcmUgdGhpcyBldmVudCBvY2N1 cnJlZAo+ID4gKyAqCj4gPiArICogRHJpdmVycyBzaG91bGQgY2FsbCB0aGlzIHJvdXRpbmUgaW4g dGhlaXIgdmJsYW5rIGludGVycnVwdCBoYW5kbGVycyB0bwo+ID4gKyAqIHVwZGF0ZSB0aGUgdmJs YW5rIGNvdW50ZXIgYW5kIHNlbmQgYW55IHNpZ25hbHMgdGhhdCBtYXkgYmUgcGVuZGluZy4KPiA+ ICsgKgo+ID4gKyAqIFRoaXMgaXMgdGhlIG5hdGl2ZSBLTVMgdmVyc2lvbiBvZiBkcm1faGFuZGxl X3ZibGFuaygpLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiBUcnVlIGlmIHRoZSBl dmVudCB3YXMgc3VjY2Vzc2Z1bGx5IGhhbmRsZWQsIGZhbHNlIG9uIGZhaWx1cmUuCj4gPiArICov Cj4gPiArYm9vbCBkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK PiA+ICt7Cj4gPiArCXJldHVybiBkcm1faGFuZGxlX3ZibGFuayhjcnRjLT5kZXYsIGRybV9jcnRj X2luZGV4KGNydGMpKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fY3J0Y19oYW5kbGVf dmJsYW5rKTsKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2Ry bS9kcm1QLmgKPiA+IGluZGV4IGMzNjNmMmZkZmYzMS4uMmUwYjc2Y2NlYjk3IDEwMDY0NAo+ID4g LS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCj4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKPiA+ IEBAIC04MCw2ICs4MCw5IEBACj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fZGVidWdmcy5oPgo+ID4g ICNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fc3lzZnMu aD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV92YmxhbmsuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9pcnEuaD4KPiA+ICsKPiA+ICAKPiA+ICBzdHJ1Y3QgbW9kdWxlOwo+ID4gIAo+ID4gQEAgLTQ0 Nyw4ICs0NTAsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wKPiA+IGRybV9kcnZfdXNlc19hdG9taWNf bW9kZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gIAlyZXR1cm4gZGV2LT5tb2RlX2Nv bmZpZy5mdW5jcy0+YXRvbWljX2NvbW1pdCAhPSBOVUxMOwo+ID4gIH0KPiA+ICAKPiA+IC0jaW5j bHVkZSA8ZHJtL2RybV9pcnEuaD4KPiA+IC0KPiA+ICAjZGVmaW5lIERSTV9TV0lUQ0hfUE9XRVJf T04gMAo+ID4gICNkZWZpbmUgRFJNX1NXSVRDSF9QT1dFUl9PRkYgMQo+ID4gICNkZWZpbmUgRFJN X1NXSVRDSF9QT1dFUl9DSEFOR0lORyAyCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJt X2ZpbGUuaCBiL2luY2x1ZGUvZHJtL2RybV9maWxlLmgKPiA+IGluZGV4IDVkZDI3YWU1YzQ3Yy4u ZDY2ZjdlZTA3ZmI1IDEwMDY0NAo+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZpbGUuaAo+ID4g KysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZpbGUuaAo+ID4gQEAgLTQwLDYgKzQwLDcgQEAKPiA+ICBz dHJ1Y3QgZG1hX2ZlbmNlOwo+ID4gIHN0cnVjdCBkcm1fZmlsZTsKPiA+ICBzdHJ1Y3QgZHJtX2Rl dmljZTsKPiA+ICtzdHJ1Y3QgZGV2aWNlOwo+ID4gIAo+ID4gIC8qCj4gPiAgICogRklYTUU6IE5v dCBzdXJlIHdlIHdhbnQgdG8gaGF2ZSBkcm1fbWlub3IgaGVyZSBpbiB0aGUgZW5kLCBidXQgdG8g YXZvaWQKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1faXJxLmggYi9pbmNsdWRlL2Ry bS9kcm1faXJxLmgKPiA+IGluZGV4IDU2OWNhODZkNGUxZi4uZDc3ZjZlNjViMWM2IDEwMDY0NAo+ ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2lycS5oCj4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1f aXJxLmgKPiA+IEBAIC0yNCwxNjUgKzI0LDkgQEAKPiA+ICAjaWZuZGVmIF9EUk1fSVJRX0hfCj4g PiAgI2RlZmluZSBfRFJNX0lSUV9IXwo+ID4gIAo+ID4gLSNpbmNsdWRlIDxsaW51eC9zZXFsb2Nr Lmg+Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVu dCAtIHBlbmRpbmcgdmJsYW5rIGV2ZW50IHRyYWNraW5nCj4gPiAtICovCj4gPiAtc3RydWN0IGRy bV9wZW5kaW5nX3ZibGFua19ldmVudCB7Cj4gPiAtCS8qKgo+ID4gLQkgKiBAYmFzZTogQmFzZSBz dHJ1Y3R1cmUgZm9yIHRyYWNraW5nIHBlbmRpbmcgRFJNIGV2ZW50cy4KPiA+IC0JICovCj4gPiAt CXN0cnVjdCBkcm1fcGVuZGluZ19ldmVudCBiYXNlOwo+ID4gLQkvKioKPiA+IC0JICogQHBpcGU6 IGRybV9jcnRjX2luZGV4KCkgb2YgdGhlICZkcm1fY3J0YyB0aGlzIGV2ZW50IGlzIGZvci4KPiA+ IC0JICovCj4gPiAtCXVuc2lnbmVkIGludCBwaXBlOwo+ID4gLQkvKioKPiA+IC0JICogQGV2ZW50 OiBBY3R1YWwgZXZlbnQgd2hpY2ggd2lsbCBiZSBzZW50IHRvIHVzZXJzcGFjZS4KPiA+IC0JICov Cj4gPiAtCXN0cnVjdCBkcm1fZXZlbnRfdmJsYW5rIGV2ZW50Owo+ID4gLX07Cj4gPiAtCj4gPiAt LyoqCj4gPiAtICogc3RydWN0IGRybV92YmxhbmtfY3J0YyAtIHZibGFuayB0cmFja2luZyBmb3Ig YSBDUlRDCj4gPiAtICoKPiA+IC0gKiBUaGlzIHN0cnVjdHVyZSB0cmFja3MgdGhlIHZibGFuayBz dGF0ZSBmb3Igb25lIENSVEMuCj4gPiAtICoKPiA+IC0gKiBOb3RlIHRoYXQgZm9yIGhpc3Rvcmlj YWwgcmVhc29ucyAtIHRoZSB2YmxhbmsgaGFuZGxpbmcgY29kZSBpcyBzdGlsbCBzaGFyZWQKPiA+ IC0gKiB3aXRoIGxlZ2FjeS9ub24ta21zIGRyaXZlcnMgLSB0aGlzIGlzIGEgZnJlZS1zdGFuZGlu ZyBzdHJ1Y3R1cmUgbm90IGRpcmVjdGx5Cj4gPiAtICogY29ubmVjdGVkIHRvICZzdHJ1Y3QgZHJt X2NydGMuIEJ1dCBhbGwgcHVibGljIGludGVyZmFjZSBmdW5jdGlvbnMgYXJlIHRha2luZwo+ID4g LSAqIGEgJnN0cnVjdCBkcm1fY3J0YyB0byBoaWRlIHRoaXMgaW1wbGVtZW50YXRpb24gZGV0YWls Lgo+ID4gLSAqLwo+ID4gLXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgewo+ID4gLQkvKioKPiA+IC0J ICogQGRldjogUG9pbnRlciB0byB0aGUgJmRybV9kZXZpY2UuCj4gPiAtCSAqLwo+ID4gLQlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2Owo+ID4gLQkvKioKPiA+IC0JICogQHF1ZXVlOiBXYWl0IHF1ZXVl IGZvciB2Ymxhbmsgd2FpdGVycy4KPiA+IC0JICovCj4gPiAtCXdhaXRfcXVldWVfaGVhZF90IHF1 ZXVlOwkvKio8IFZCTEFOSyB3YWl0IHF1ZXVlICovCj4gPiAtCS8qKgo+ID4gLQkgKiBAZGlzYWJs ZV90aW1lcjogRGlzYWJsZSB0aW1lciBmb3IgdGhlIGRlbGF5ZWQgdmJsYW5rIGRpc2FibGluZwo+ ID4gLQkgKiBoeXN0ZXJlc2lzIGxvZ2ljLiBWYmxhbmsgZGlzYWJsaW5nIGlzIGNvbnRyb2xsZWQg dGhyb3VnaCB0aGUKPiA+IC0JICogZHJtX3ZibGFua19vZmZkZWxheSBtb2R1bGUgb3B0aW9uIGFu ZCB0aGUgc2V0dGluZyBvZiB0aGUKPiA+IC0JICogJmRybV9kZXZpY2UubWF4X3ZibGFua19jb3Vu dCB2YWx1ZS4KPiA+IC0JICovCj4gPiAtCXN0cnVjdCB0aW1lcl9saXN0IGRpc2FibGVfdGltZXI7 Cj4gPiAtCj4gPiAtCS8qKgo+ID4gLQkgKiBAc2VxbG9jazogUHJvdGVjdCB2YmxhbmsgY291bnQg YW5kIHRpbWUuCj4gPiAtCSAqLwo+ID4gLQlzZXFsb2NrX3Qgc2VxbG9jazsJCS8qIHByb3RlY3Rz IHZibGFuayBjb3VudCBhbmQgdGltZSAqLwo+ID4gLQo+ID4gLQkvKioKPiA+IC0JICogQGNvdW50 OiBDdXJyZW50IHNvZnR3YXJlIHZibGFuayBjb3VudGVyLgo+ID4gLQkgKi8KPiA+IC0JdTMyIGNv dW50Owo+ID4gLQkvKioKPiA+IC0JICogQHRpbWU6IFZibGFuayB0aW1lc3RhbXAgY29ycmVzcG9u ZGluZyB0byBAY291bnQuCj4gPiAtCSAqLwo+ID4gLQlzdHJ1Y3QgdGltZXZhbCB0aW1lOwo+ID4g LQo+ID4gLQkvKioKPiA+IC0JICogQHJlZmNvdW50OiBOdW1iZXIgb2YgdXNlcnMvd2FpdGVycyBv ZiB0aGUgdmJsYW5rIGludGVycnVwdC4gT25seSB3aGVuCj4gPiAtCSAqIHRoaXMgcmVmY291bnQg cmVhY2hlcyAwIGNhbiB0aGUgaGFyZHdhcmUgaW50ZXJydXB0IGJlIGRpc2FibGVkIHVzaW5nCj4g PiAtCSAqIEBkaXNhYmxlX3RpbWVyLgo+ID4gLQkgKi8KPiA+IC0JYXRvbWljX3QgcmVmY291bnQ7 CQkvKiBudW1iZXIgb2YgdXNlcnMgb2YgdmJsYW5rIGludGVycnVwdHNwZXIgY3J0YyAqLwo+ID4g LQkvKioKPiA+IC0JICogQGxhc3Q6IFByb3RlY3RlZCBieSAmZHJtX2RldmljZS52YmxfbG9jaywg dXNlZCBmb3Igd3JhcGFyb3VuZCBoYW5kbGluZy4KPiA+IC0JICovCj4gPiAtCXUzMiBsYXN0Owo+ ID4gLQkvKioKPiA+IC0JICogQGlubW9kZXNldDogVHJhY2tzIHdoZXRoZXIgdGhlIHZibGFuayBp cyBkaXNhYmxlZCBkdWUgdG8gYSBtb2Rlc2V0Lgo+ID4gLQkgKiBGb3IgbGVnYWN5IGRyaXZlciBi aXQgMiBhZGRpdGlvbmFsbHkgdHJhY2tzIHdoZXRoZXIgYW4gYWRkaXRpb25hbAo+ID4gLQkgKiB0 ZW1wb3JhcnkgdmJsYW5rIHJlZmVyZW5jZSBoYXMgYmVlbiBhY3F1aXJlZCB0byBwYXBlciBvdmVy IHRoZQo+ID4gLQkgKiBoYXJkd2FyZSBjb3VudGVyIHJlc2V0dGluZy9qdW1waW5nLiBLTVMgZHJp dmVycyBzaG91bGQgaW5zdGVhZCBqdXN0Cj4gPiAtCSAqIGNhbGwgZHJtX2NydGNfdmJsYW5rX29m ZigpIGFuZCBkcm1fY3J0Y192Ymxhbmtfb24oKSwgd2hpY2ggZXhwbGljaXRseQo+ID4gLQkgKiBz YXZlIGFuZCByZXN0b3JlIHRoZSB2YmxhbmsgY291bnQuCj4gPiAtCSAqLwo+ID4gLQl1bnNpZ25l ZCBpbnQgaW5tb2Rlc2V0OwkJLyogRGlzcGxheSBkcml2ZXIgaXMgc2V0dGluZyBtb2RlICovCj4g PiAtCS8qKgo+ID4gLQkgKiBAcGlwZTogZHJtX2NydGNfaW5kZXgoKSBvZiB0aGUgJmRybV9jcnRj IGNvcnJlc3BvbmRpbmcgdG8gdGhpcwo+ID4gLQkgKiBzdHJ1Y3R1cmUuCj4gPiAtCSAqLwo+ID4g LQl1bnNpZ25lZCBpbnQgcGlwZTsKPiA+IC0JLyoqCj4gPiAtCSAqIEBmcmFtZWR1cl9uczogRnJh bWUvRmllbGQgZHVyYXRpb24gaW4gbnMsIHVzZWQgYnkKPiA+IC0JICogZHJtX2NhbGNfdmJsdGlt ZXN0YW1wX2Zyb21fc2Nhbm91dHBvcygpIGFuZCBjb21wdXRlZCBieQo+ID4gLQkgKiBkcm1fY2Fs Y190aW1lc3RhbXBpbmdfY29uc3RhbnRzKCkuCj4gPiAtCSAqLwo+ID4gLQlpbnQgZnJhbWVkdXJf bnM7Cj4gPiAtCS8qKgo+ID4gLQkgKiBAbGluZWR1cl9uczogTGluZSBkdXJhdGlvbiBpbiBucywg dXNlZCBieQo+ID4gLQkgKiBkcm1fY2FsY192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9zKCkg YW5kIGNvbXB1dGVkIGJ5Cj4gPiAtCSAqIGRybV9jYWxjX3RpbWVzdGFtcGluZ19jb25zdGFudHMo KS4KPiA+IC0JICovCj4gPiAtCWludCBsaW5lZHVyX25zOwo+ID4gLQo+ID4gLQkvKioKPiA+IC0J ICogQGh3bW9kZToKPiA+IC0JICoKPiA+IC0JICogQ2FjaGUgb2YgdGhlIGN1cnJlbnQgaGFyZHdh cmUgZGlzcGxheSBtb2RlLiBPbmx5IHZhbGlkIHdoZW4gQGVuYWJsZWQKPiA+IC0JICogaXMgc2V0 LiBUaGlzIGlzIHVzZWQgYnkgaGVscGVycyBsaWtlCj4gPiAtCSAqIGRybV9jYWxjX3ZibHRpbWVz dGFtcF9mcm9tX3NjYW5vdXRwb3MoKS4gV2UgY2FuJ3QganVzdCBhY2Nlc3MgdGhlCj4gPiAtCSAq IGhhcmR3YXJlIG1vZGUgYnkgZS5nLiBsb29raW5nIGF0ICZkcm1fY3J0Y19zdGF0ZS5hZGp1c3Rl ZF9tb2RlLAo+ID4gLQkgKiBiZWNhdXNlIHRoYXQgb25lIGlzIHJlYWxseSBoYXJkIHRvIGdldCBm cm9tIGludGVycnVwdCBjb250ZXh0Lgo+ID4gLQkgKi8KPiA+IC0Jc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgaHdtb2RlOwo+ID4gLQo+ID4gLQkvKioKPiA+IC0JICogQGVuYWJsZWQ6IFRyYWNrcyB0 aGUgZW5hYmxpbmcgc3RhdGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgJmRybV9jcnRjIHRvCj4gPiAt CSAqIGF2b2lkIGRvdWJsZS1kaXNhYmxpbmcgYW5kIGhlbmNlIGNvcnJ1cHRpbmcgc2F2ZWQgc3Rh dGUuIE5lZWRlZCBieQo+ID4gLQkgKiBkcml2ZXJzIG5vdCB1c2luZyBhdG9taWMgS01TLCBzaW5j ZSB0aG9zZSBtaWdodCBnbyB0aHJvdWdoIHRoZWlyIENSVEMKPiA+IC0JICogZGlzYWJsaW5nIGZ1 bmN0aW9ucyBtdWx0aXBsZSB0aW1lcy4KPiA+IC0JICovCj4gPiAtCWJvb2wgZW5hYmxlZDsKPiA+ IC19Owo+ID4gK3N0cnVjdCBkcm1fZGV2aWNlOwo+ID4gIAo+ID4gIGludCBkcm1faXJxX2luc3Rh bGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGlycSk7Cj4gPiAgaW50IGRybV9pcnFfdW5p bnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gIAo+ID4gLWludCBkcm1fdmJsYW5r X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG51bV9jcnRjcyk7Cj4g PiAtdTMyIGRybV9jcnRjX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ID4g LXUzMiBkcm1fY3J0Y192YmxhbmtfY291bnRfYW5kX3RpbWUoc3RydWN0IGRybV9jcnRjICpjcnRj LAo+ID4gLQkJCQkgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rdGltZSk7Cj4gPiAtdm9pZCBkcm1f Y3J0Y19zZW5kX3ZibGFua19ldmVudChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAtCQkJICAg ICAgIHN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUpOwo+ID4gLXZvaWQgZHJtX2Ny dGNfYXJtX3ZibGFua19ldmVudChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAtCQkJICAgICAg c3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSk7Cj4gPiAtYm9vbCBkcm1faGFuZGxl X3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSk7Cj4gPiAt Ym9vbCBkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gPiAt aW50IGRybV9jcnRjX3ZibGFua19nZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiA+IC12b2lk IGRybV9jcnRjX3ZibGFua19wdXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiA+IC12b2lkIGRy bV93YWl0X29uZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBp cGUpOwo+ID4gLXZvaWQgZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAq Y3J0Yyk7Cj4gPiAtdm9pZCBkcm1fY3J0Y192Ymxhbmtfb2ZmKHN0cnVjdCBkcm1fY3J0YyAqY3J0 Yyk7Cj4gPiAtdm9pZCBkcm1fY3J0Y192YmxhbmtfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRj KTsKPiA+IC12b2lkIGRybV9jcnRjX3ZibGFua19vbihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ ID4gLXZvaWQgZHJtX3ZibGFua19jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4g LXUzMiBkcm1fYWNjdXJhdGVfdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4g PiAtCj4gPiAtYm9vbCBkcm1fY2FsY192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9zKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCj4gPiAtCQkJCQkgICB1bnNpZ25lZCBpbnQgcGlwZSwgaW50ICpt YXhfZXJyb3IsCj4gPiAtCQkJCQkgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rX3RpbWUsCj4gPiAt CQkJCQkgICBib29sIGluX3ZibGFua19pcnEpOwo+ID4gLXZvaWQgZHJtX2NhbGNfdGltZXN0YW1w aW5nX2NvbnN0YW50cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAtCQkJCSAgICAgY29uc3Qg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIGRy bV9jcnRjX3ZibGFua193YWl0cXVldWUgLSBnZXQgdmJsYW5rIHdhaXRxdWV1ZSBmb3IgdGhlIENS VEMKPiA+IC0gKiBAY3J0Yzogd2hpY2ggQ1JUQydzIHZibGFuayB3YWl0cXVldWUgdG8gcmV0cmll dmUKPiA+IC0gKgo+ID4gLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl IHZibGFuayB3YWl0cXVldWUgZm9yIHRoZSBDUlRDLgo+ID4gLSAqIERyaXZlcnMgY2FuIHVzZSB0 aGlzIHRvIGltcGxlbWVudCB2Ymxhbmsgd2FpdHMgdXNpbmcgd2FpdF9ldmVudCgpCj4gPiBhbmQg cmVsYXRlZAo+ID4gLSAqIGZ1bmN0aW9ucy4KPiA+IC0gKi8KPiA+IC1zdGF0aWMgaW5saW5lIHdh aXRfcXVldWVfaGVhZF90ICpkcm1fY3J0Y192Ymxhbmtfd2FpdHF1ZXVlKHN0cnVjdAo+ID4gZHJt X2NydGMgKmNydGMpCj4gPiAtewo+ID4gLQlyZXR1cm4gJmNydGMtPmRldi0+dmJsYW5rW2RybV9j cnRjX2luZGV4KGNydGMpXS5xdWV1ZTsKPiA+IC19Cj4gPiAtCj4gPiAgI2VuZGlmCj4gPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3ByaW1lLmggYi9pbmNsdWRlL2RybS9kcm1fcHJpbWUu aAo+ID4gaW5kZXggNTljY2FiNDAyZTg1Li45Y2Q5ZTM2Zjc3YjUgMTAwNjQ0Cj4gPiAtLS0gYS9p bmNsdWRlL2RybS9kcm1fcHJpbWUuaAo+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX3ByaW1lLmgK PiA+IEBAIC01OSw2ICs1OSw4IEBAIHN0cnVjdCBkcm1fZGV2aWNlOwo+ID4gIHN0cnVjdCBkcm1f Z2VtX29iamVjdDsKPiA+ICBzdHJ1Y3QgZHJtX2ZpbGU7Cj4gPiAgCj4gPiArc3RydWN0IGRldmlj ZTsKPiA+ICsKPiA+ICBzdHJ1Y3QgZG1hX2J1ZiAqZHJtX2dlbV9wcmltZV9leHBvcnQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKPiA+ICAJCQkJICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiwKPiA+ICAJCQkJICAgICBpbnQgZmxhZ3MpOwo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJt L2RybV92YmxhbmsuaCBiL2luY2x1ZGUvZHJtL2RybV92YmxhbmsuaAo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNGNkZTQ3MzMyZGZhCj4gPiAtLS0gL2Rl di9udWxsCj4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1fdmJsYW5rLmgKPiA+IEBAIC0wLDAgKzEs MTgxIEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgMjAxNiBJbnRlbCBDb3JwLgo+ID4gKyAq Cj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ID4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+ICsgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiArICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAo+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4g KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiArICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCj4gPiArICogVkEgTElOVVggU1lTVEVNUyBBTkQvT1IgSVRTIFNVUFBMSUVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgo+ID4gKyAqIE9USEVSIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LAo+ID4gKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ID4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZU V0FSRS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVmIF9EUk1fVkJMQU5LX0hfCj4gPiArI2Rl ZmluZSBfRFJNX1ZCTEFOS19IXwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+ Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2lkci5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+ Cj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZmlsZS5oPgo+ID4gKyNpbmNsdWRlIDxkcm0v ZHJtX21vZGVzLmg+Cj4gPiArI2luY2x1ZGUgPHVhcGkvZHJtL2RybS5oPgo+ID4gKwo+ID4gK3N0 cnVjdCBkcm1fZGV2aWNlOwo+ID4gK3N0cnVjdCBkcm1fY3J0YzsKPiA+ICsKPiA+ICsvKioKPiA+ ICsgKiBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50IC0gcGVuZGluZyB2YmxhbmsgZXZl bnQgdHJhY2tpbmcKPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50 IHsKPiA+ICsJLyoqCj4gPiArCSAqIEBiYXNlOiBCYXNlIHN0cnVjdHVyZSBmb3IgdHJhY2tpbmcg cGVuZGluZyBEUk0gZXZlbnRzLgo+ID4gKwkgKi8KPiA+ICsJc3RydWN0IGRybV9wZW5kaW5nX2V2 ZW50IGJhc2U7Cj4gPiArCS8qKgo+ID4gKwkgKiBAcGlwZTogZHJtX2NydGNfaW5kZXgoKSBvZiB0 aGUgJmRybV9jcnRjIHRoaXMgZXZlbnQgaXMgZm9yLgo+ID4gKwkgKi8KPiA+ICsJdW5zaWduZWQg aW50IHBpcGU7Cj4gPiArCS8qKgo+ID4gKwkgKiBAZXZlbnQ6IEFjdHVhbCBldmVudCB3aGljaCB3 aWxsIGJlIHNlbnQgdG8gdXNlcnNwYWNlLgo+ID4gKwkgKi8KPiA+ICsJc3RydWN0IGRybV9ldmVu dF92YmxhbmsgZXZlbnQ7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBzdHJ1Y3QgZHJt X3ZibGFua19jcnRjIC0gdmJsYW5rIHRyYWNraW5nIGZvciBhIENSVEMKPiA+ICsgKgo+ID4gKyAq IFRoaXMgc3RydWN0dXJlIHRyYWNrcyB0aGUgdmJsYW5rIHN0YXRlIGZvciBvbmUgQ1JUQy4KPiA+ ICsgKgo+ID4gKyAqIE5vdGUgdGhhdCBmb3IgaGlzdG9yaWNhbCByZWFzb25zIC0gdGhlIHZibGFu ayBoYW5kbGluZyBjb2RlIGlzIHN0aWxsIHNoYXJlZAo+ID4gKyAqIHdpdGggbGVnYWN5L25vbi1r bXMgZHJpdmVycyAtIHRoaXMgaXMgYSBmcmVlLXN0YW5kaW5nIHN0cnVjdHVyZSBub3QgZGlyZWN0 bHkKPiA+ICsgKiBjb25uZWN0ZWQgdG8gJnN0cnVjdCBkcm1fY3J0Yy4gQnV0IGFsbCBwdWJsaWMg aW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgdGFraW5nCj4gPiArICogYSAmc3RydWN0IGRybV9jcnRj IHRvIGhpZGUgdGhpcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCj4gPiArICovCj4gPiArc3RydWN0 IGRybV92YmxhbmtfY3J0YyB7Cj4gPiArCS8qKgo+ID4gKwkgKiBAZGV2OiBQb2ludGVyIHRvIHRo ZSAmZHJtX2RldmljZS4KPiA+ICsJICovCj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4g PiArCS8qKgo+ID4gKwkgKiBAcXVldWU6IFdhaXQgcXVldWUgZm9yIHZibGFuayB3YWl0ZXJzLgo+ ID4gKwkgKi8KPiA+ICsJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CS8qKjwgVkJMQU5LIHdhaXQg cXVldWUgKi8KPiA+ICsJLyoqCj4gPiArCSAqIEBkaXNhYmxlX3RpbWVyOiBEaXNhYmxlIHRpbWVy IGZvciB0aGUgZGVsYXllZCB2YmxhbmsgZGlzYWJsaW5nCj4gPiArCSAqIGh5c3RlcmVzaXMgbG9n aWMuIFZibGFuayBkaXNhYmxpbmcgaXMgY29udHJvbGxlZCB0aHJvdWdoIHRoZQo+ID4gKwkgKiBk cm1fdmJsYW5rX29mZmRlbGF5IG1vZHVsZSBvcHRpb24gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZQo+ ID4gKwkgKiAmZHJtX2RldmljZS5tYXhfdmJsYW5rX2NvdW50IHZhbHVlLgo+ID4gKwkgKi8KPiA+ ICsJc3RydWN0IHRpbWVyX2xpc3QgZGlzYWJsZV90aW1lcjsKPiA+ICsKPiA+ICsJLyoqCj4gPiAr CSAqIEBzZXFsb2NrOiBQcm90ZWN0IHZibGFuayBjb3VudCBhbmQgdGltZS4KPiA+ICsJICovCj4g PiArCXNlcWxvY2tfdCBzZXFsb2NrOwkJLyogcHJvdGVjdHMgdmJsYW5rIGNvdW50IGFuZCB0aW1l ICovCj4gPiArCj4gPiArCS8qKgo+ID4gKwkgKiBAY291bnQ6IEN1cnJlbnQgc29mdHdhcmUgdmJs YW5rIGNvdW50ZXIuCj4gPiArCSAqLwo+ID4gKwl1MzIgY291bnQ7Cj4gPiArCS8qKgo+ID4gKwkg KiBAdGltZTogVmJsYW5rIHRpbWVzdGFtcCBjb3JyZXNwb25kaW5nIHRvIEBjb3VudC4KPiA+ICsJ ICovCj4gPiArCXN0cnVjdCB0aW1ldmFsIHRpbWU7Cj4gPiArCj4gPiArCS8qKgo+ID4gKwkgKiBA cmVmY291bnQ6IE51bWJlciBvZiB1c2Vycy93YWl0ZXJzIG9mIHRoZSB2YmxhbmsgaW50ZXJydXB0 LiBPbmx5IHdoZW4KPiA+ICsJICogdGhpcyByZWZjb3VudCByZWFjaGVzIDAgY2FuIHRoZSBoYXJk d2FyZSBpbnRlcnJ1cHQgYmUgZGlzYWJsZWQgdXNpbmcKPiA+ICsJICogQGRpc2FibGVfdGltZXIu Cj4gPiArCSAqLwo+ID4gKwlhdG9taWNfdCByZWZjb3VudDsJCS8qIG51bWJlciBvZiB1c2VycyBv ZiB2YmxhbmsgaW50ZXJydXB0c3BlciBjcnRjICovCj4gPiArCS8qKgo+ID4gKwkgKiBAbGFzdDog UHJvdGVjdGVkIGJ5ICZkcm1fZGV2aWNlLnZibF9sb2NrLCB1c2VkIGZvciB3cmFwYXJvdW5kIGhh bmRsaW5nLgo+ID4gKwkgKi8KPiA+ICsJdTMyIGxhc3Q7Cj4gPiArCS8qKgo+ID4gKwkgKiBAaW5t b2Rlc2V0OiBUcmFja3Mgd2hldGhlciB0aGUgdmJsYW5rIGlzIGRpc2FibGVkIGR1ZSB0byBhIG1v ZGVzZXQuCj4gPiArCSAqIEZvciBsZWdhY3kgZHJpdmVyIGJpdCAyIGFkZGl0aW9uYWxseSB0cmFj a3Mgd2hldGhlciBhbiBhZGRpdGlvbmFsCj4gPiArCSAqIHRlbXBvcmFyeSB2YmxhbmsgcmVmZXJl bmNlIGhhcyBiZWVuIGFjcXVpcmVkIHRvIHBhcGVyIG92ZXIgdGhlCj4gPiArCSAqIGhhcmR3YXJl IGNvdW50ZXIgcmVzZXR0aW5nL2p1bXBpbmcuIEtNUyBkcml2ZXJzIHNob3VsZCBpbnN0ZWFkIGp1 c3QKPiA+ICsJICogY2FsbCBkcm1fY3J0Y192Ymxhbmtfb2ZmKCkgYW5kIGRybV9jcnRjX3ZibGFu a19vbigpLCB3aGljaCBleHBsaWNpdGx5Cj4gPiArCSAqIHNhdmUgYW5kIHJlc3RvcmUgdGhlIHZi bGFuayBjb3VudC4KPiA+ICsJICovCj4gPiArCXVuc2lnbmVkIGludCBpbm1vZGVzZXQ7CQkvKiBE aXNwbGF5IGRyaXZlciBpcyBzZXR0aW5nIG1vZGUgKi8KPiA+ICsJLyoqCj4gPiArCSAqIEBwaXBl OiBkcm1fY3J0Y19pbmRleCgpIG9mIHRoZSAmZHJtX2NydGMgY29ycmVzcG9uZGluZyB0byB0aGlz Cj4gPiArCSAqIHN0cnVjdHVyZS4KPiA+ICsJICovCj4gPiArCXVuc2lnbmVkIGludCBwaXBlOwo+ ID4gKwkvKioKPiA+ICsJICogQGZyYW1lZHVyX25zOiBGcmFtZS9GaWVsZCBkdXJhdGlvbiBpbiBu cywgdXNlZCBieQo+ID4gKwkgKiBkcm1fY2FsY192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9z KCkgYW5kIGNvbXB1dGVkIGJ5Cj4gPiArCSAqIGRybV9jYWxjX3RpbWVzdGFtcGluZ19jb25zdGFu dHMoKS4KPiA+ICsJICovCj4gPiArCWludCBmcmFtZWR1cl9uczsKPiA+ICsJLyoqCj4gPiArCSAq IEBsaW5lZHVyX25zOiBMaW5lIGR1cmF0aW9uIGluIG5zLCB1c2VkIGJ5Cj4gPiArCSAqIGRybV9j YWxjX3ZibHRpbWVzdGFtcF9mcm9tX3NjYW5vdXRwb3MoKSBhbmQgY29tcHV0ZWQgYnkKPiA+ICsJ ICogZHJtX2NhbGNfdGltZXN0YW1waW5nX2NvbnN0YW50cygpLgo+ID4gKwkgKi8KPiA+ICsJaW50 IGxpbmVkdXJfbnM7Cj4gPiArCj4gPiArCS8qKgo+ID4gKwkgKiBAaHdtb2RlOgo+ID4gKwkgKgo+ ID4gKwkgKiBDYWNoZSBvZiB0aGUgY3VycmVudCBoYXJkd2FyZSBkaXNwbGF5IG1vZGUuIE9ubHkg dmFsaWQgd2hlbiBAZW5hYmxlZAo+ID4gKwkgKiBpcyBzZXQuIFRoaXMgaXMgdXNlZCBieSBoZWxw ZXJzIGxpa2UKPiA+ICsJICogZHJtX2NhbGNfdmJsdGltZXN0YW1wX2Zyb21fc2Nhbm91dHBvcygp LiBXZSBjYW4ndCBqdXN0IGFjY2VzcyB0aGUKPiA+ICsJICogaGFyZHdhcmUgbW9kZSBieSBlLmcu IGxvb2tpbmcgYXQgJmRybV9jcnRjX3N0YXRlLmFkanVzdGVkX21vZGUsCj4gPiArCSAqIGJlY2F1 c2UgdGhhdCBvbmUgaXMgcmVhbGx5IGhhcmQgdG8gZ2V0IGZyb20gaW50ZXJydXB0IGNvbnRleHQu Cj4gPiArCSAqLwo+ID4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBod21vZGU7Cj4gPiArCj4g PiArCS8qKgo+ID4gKwkgKiBAZW5hYmxlZDogVHJhY2tzIHRoZSBlbmFibGluZyBzdGF0ZSBvZiB0 aGUgY29ycmVzcG9uZGluZyAmZHJtX2NydGMgdG8KPiA+ICsJICogYXZvaWQgZG91YmxlLWRpc2Fi bGluZyBhbmQgaGVuY2UgY29ycnVwdGluZyBzYXZlZCBzdGF0ZS4gTmVlZGVkIGJ5Cj4gPiArCSAq IGRyaXZlcnMgbm90IHVzaW5nIGF0b21pYyBLTVMsIHNpbmNlIHRob3NlIG1pZ2h0IGdvIHRocm91 Z2ggdGhlaXIgQ1JUQwo+ID4gKwkgKiBkaXNhYmxpbmcgZnVuY3Rpb25zIG11bHRpcGxlIHRpbWVz Lgo+ID4gKwkgKi8KPiA+ICsJYm9vbCBlbmFibGVkOwo+ID4gK307Cj4gPiArCj4gPiAraW50IGRy bV92YmxhbmtfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbnVtX2Ny dGNzKTsKPiA+ICt1MzIgZHJtX2NydGNfdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0 Yyk7Cj4gPiArdTMyIGRybV9jcnRjX3ZibGFua19jb3VudF9hbmRfdGltZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCj4gPiArCQkJCSAgIHN0cnVjdCB0aW1ldmFsICp2Ymxhbmt0aW1lKTsKPiA+ICt2 b2lkIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ ICsJCQkgICAgICAgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSk7Cj4gPiArdm9p ZCBkcm1fY3J0Y19hcm1fdmJsYW5rX2V2ZW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICsJ CQkgICAgICBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplKTsKPiA+ICtib29sIGRy bV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBl KTsKPiA+ICtib29sIGRybV9jcnRjX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpjcnRj KTsKPiA+ICtpbnQgZHJtX2NydGNfdmJsYW5rX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ ID4gK3ZvaWQgZHJtX2NydGNfdmJsYW5rX3B1dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ID4g K3ZvaWQgZHJtX3dhaXRfb25lX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25l ZCBpbnQgcGlwZSk7Cj4gPiArdm9pZCBkcm1fY3J0Y193YWl0X29uZV92Ymxhbmsoc3RydWN0IGRy bV9jcnRjICpjcnRjKTsKPiA+ICt2b2lkIGRybV9jcnRjX3ZibGFua19vZmYoc3RydWN0IGRybV9j cnRjICpjcnRjKTsKPiA+ICt2b2lkIGRybV9jcnRjX3ZibGFua19yZXNldChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpOwo+ID4gK3ZvaWQgZHJtX2NydGNfdmJsYW5rX29uKHN0cnVjdCBkcm1fY3J0YyAq Y3J0Yyk7Cj4gPiArdm9pZCBkcm1fdmJsYW5rX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7Cj4gPiArdTMyIGRybV9hY2N1cmF0ZV92YmxhbmtfY291bnQoc3RydWN0IGRybV9jcnRjICpj cnRjKTsKPiA+ICsKPiA+ICtib29sIGRybV9jYWxjX3ZibHRpbWVzdGFtcF9mcm9tX3NjYW5vdXRw b3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICsJCQkJCSAgIHVuc2lnbmVkIGludCBwaXBl LCBpbnQgKm1heF9lcnJvciwKPiA+ICsJCQkJCSAgIHN0cnVjdCB0aW1ldmFsICp2YmxhbmtfdGlt ZSwKPiA+ICsJCQkJCSAgIGJvb2wgaW5fdmJsYW5rX2lycSk7Cj4gPiArdm9pZCBkcm1fY2FsY190 aW1lc3RhbXBpbmdfY29uc3RhbnRzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICsJCQkJICAg ICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cj4gPiArd2FpdF9xdWV1ZV9o ZWFkX3QgKmRybV9jcnRjX3ZibGFua193YWl0cXVldWUoc3RydWN0IGRybV9jcnRjICpjcnRjKTsK PiA+ICsjZW5kaWYKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBD b3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK