From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 2/2] drm/v3d: Introduce a new DRM driver for Broadcom V3D V3.x+ Date: Fri, 20 Apr 2018 10:57:32 +0200 Message-ID: <20180420085732.GQ31310@phenom.ffwll.local> References: <20180419192035.19898-1-eric@anholt.net> <20180419192035.19898-3-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180419192035.19898-3-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Eric Anholt Cc: Mark Rutland , devicetree@vger.kernel.org, Rob Herring , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: devicetree@vger.kernel.org T24gVGh1LCBBcHIgMTksIDIwMTggYXQgMTI6MjA6MzVQTSAtMDcwMCwgRXJpYyBBbmhvbHQgd3Jv dGU6Cj4gVGhpcyBkcml2ZXIgd2lsbCBiZSB1c2VkIHRvIHN1cHBvcnQgTWVzYSBvbiB0aGUgQnJv YWRjb20gNzI2OCBhbmQgNzI3OAo+IHBsYXRmb3Jtcy4KPiAKPiBWM0QgMy4zIGludHJvZHVjZXMg YW4gTU1VLCB3aGljaCBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCBDTUEgb3IgdmM0J3MKPiBjb21w bGljYXRlZCBDTC9zaGFkZXIgdmFsaWRhdGlvbiBzY2hlbWUuICBUaGlzIG1hc3NpdmVseSBjaGFu Z2VzIHRoZQo+IEdFTSBiZWhhdmlvciwgc28gSSd2ZSBmb3JrZWQgb2ZmIHRvIGEgbmV3IGRyaXZl ci4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgoKUmVh ZCB0aHJvdWdoIHRoZSBlbnRpcmUgdGhpbmcsIGlnbm9yZWQgdGhlIGh3IGRldGFpbHMsIGJ1dCBk cm9wcGVkIGEgZmV3CmNvbW1lbnRzIGFsbCBvdmVyLiBXaXRoIHRob3NlIGFkZHJlc3NlZCBvbmUg d2F5IG9yIGFub3RoZXIgdGhpcyBoYXMgbXkKCkFja2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5p ZWwudmV0dGVyQGZmd2xsLmNoPgoKQ2FuIEkgY2FsbCBpbiBhIHJldHVybiBmYXZvdXIgZm9yCmh0 dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9zZXJpZXMvNDEyMTkvID8KCkNoZWVycywg RGFuaWVsCgo+IC0tLQo+ICBEb2N1bWVudGF0aW9uL2dwdS9kcml2ZXJzLnJzdCAgICAgICAgICB8 ICAgMSArCj4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsK PiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgfCAgIDIgKwo+ICBkcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1 L2RybS92M2QvS2NvbmZpZyAgICAgICAgICAgIHwgICA5ICsKPiAgZHJpdmVycy9ncHUvZHJtL3Yz ZC9NYWtlZmlsZSAgICAgICAgICAgfCAgMTggKwo+ICBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9i by5jICAgICAgICAgICB8IDM5MiArKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3Yz ZC92M2RfZGVidWdmcy5jICAgICAgfCAxOTEgKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vdjNk L3YzZF9kcnYuYyAgICAgICAgICB8IDM3MSArKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9k cm0vdjNkL3YzZF9kcnYuaCAgICAgICAgICB8IDMwNSArKysrKysrKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0vdjNkL3YzZF9mZW5jZS5jICAgICAgICB8ICA1OCArKysKPiAgZHJpdmVycy9ncHUvZHJt L3YzZC92M2RfZ2VtLmMgICAgICAgICAgfCA2NzEgKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ICBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9pcnEuYyAgICAgICAgICB8IDIxMSArKysrKysrKwo+ ICBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9tbXUuYyAgICAgICAgICB8IDEyMiArKysrKwo+ICBk cml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9yZWdzLmggICAgICAgICB8IDI5NSArKysrKysrKysrKwo+ ICBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zY2hlZC5jICAgICAgICB8IDIzMCArKysrKysrKysK PiAgZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfdHJhY2UuaCAgICAgICAgfCAgODIgKysrCj4gIGRy aXZlcnMvZ3B1L2RybS92M2QvdjNkX3RyYWNlX3BvaW50cy5jIHwgICA5ICsKPiAgaW5jbHVkZS91 YXBpL2RybS92M2RfZHJtLmggICAgICAgICAgICAgfCAxOTEgKysrKysrKwo+ICAxOSBmaWxlcyBj aGFuZ2VkLCAzMTY4IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS92M2QvS2NvbmZpZwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3YzZC9NYWtlZmlsZQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3YzZC92 M2RfYm8uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZGVi dWdmcy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kcnYu Ywo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmgKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2ZlbmNlLmMKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2dlbS5jCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9pcnEuYwo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfbW11LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3JlZ3MuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL3YzZC92M2Rfc2NoZWQuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3YzZC92M2RfdHJhY2UuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3YzZC92M2RfdHJhY2VfcG9pbnRzLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1 ZGUvdWFwaS9kcm0vdjNkX2RybS5oCj4gCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1 L2RyaXZlcnMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJpdmVycy5yc3QKPiBpbmRleCBkM2Fi NmFiYWU4MzguLmY5ODI1NThmYzI1ZCAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9k cml2ZXJzLnJzdAo+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RyaXZlcnMucnN0Cj4gQEAgLTEw LDYgKzEwLDcgQEAgR1BVIERyaXZlciBEb2N1bWVudGF0aW9uCj4gICAgIHRlZ3JhCj4gICAgIHRp bnlkcm0KPiAgICAgdHZlMjAwCj4gKyAgIHYzZAo+ICAgICB2YzQKPiAgICAgYnJpZGdlL2R3LWhk bWkKPiAgICAgeGVuLWZyb250Cj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5F UlMKPiBpbmRleCBiY2EzYzMyZmIxNDEuLjczMTRkNjY4MzNmZCAxMDA2NDQKPiAtLS0gYS9NQUlO VEFJTkVSUwo+ICsrKyBiL01BSU5UQUlORVJTCj4gQEAgLTQ3OTUsNiArNDc5NSwxNSBAQCBTOglN YWludGFpbmVkCj4gIEY6CWRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtLwo+ICBGOglEb2N1bWVudGF0 aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90aS8KPiAgCj4gK0RSTSBEUklWRVJTIEZP UiBWM0QKPiArTToJRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KPiArVDoJZ2l0IGdpdDov L2dpdGh1Yi5jb20vYW5ob2x0L2xpbnV4CgpUaGlzIG9uZSBhbHNvIG9mZmljaWFsPyBJZiBpdCdz IGp1c3QgZm9yIG5vdyBJJ2QgZHJvcCBpdCAuLi4KCj4gK1M6CVN1cHBvcnRlZAo+ICtGOglkcml2 ZXJzL2dwdS9kcm0vdjNkLwo+ICtGOglpbmNsdWRlL3VhcGkvZHJtL3YzZF9kcm0uaAo+ICtGOglE b2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9icmNtLGJjbS12M2QudHh0 Cj4gK1Q6CWdpdCBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9kcm0vZHJtLW1pc2MKPiAr Cj4gIERSTSBEUklWRVJTIEZPUiBWQzQKPiAgTToJRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5l dD4KPiAgVDoJZ2l0IGdpdDovL2dpdGh1Yi5jb20vYW5ob2x0L2xpbnV4Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBpbmRl eCA3NTc4MjVhYzYwZGYuLjFjNzNhNDU1ZmRiMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gQEAgLTI2Nyw2ICsy NjcsOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWciCj4gIAo+ ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZyIKPiAgCj4gK3NvdXJjZSAiZHJp dmVycy9ncHUvZHJtL3YzZC9LY29uZmlnIgo+ICsKPiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0v dmM0L0tjb25maWciCj4gIAo+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L0tjb25m aWciCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZQo+IGluZGV4IDlkNjY2NTdlYTExNy4uN2E0MDFlZGQ4NzYxIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZQo+IEBAIC02MSw2ICs2MSw3IEBAIG9iai0kKENPTkZJR19EUk1fTUdBKQkrPSBtZ2Ev Cj4gIG9iai0kKENPTkZJR19EUk1fSTgxMCkJKz0gaTgxMC8KPiAgb2JqLSQoQ09ORklHX0RSTV9J OTE1KQkrPSBpOTE1Lwo+ICBvYmotJChDT05GSUdfRFJNX01HQUcyMDApICs9IG1nYWcyMDAvCj4g K29iai0kKENPTkZJR19EUk1fVjNEKSAgKz0gdjNkLwo+ICBvYmotJChDT05GSUdfRFJNX1ZDNCkg ICs9IHZjNC8KPiAgb2JqLSQoQ09ORklHX0RSTV9DSVJSVVNfUUVNVSkgKz0gY2lycnVzLwo+ICBv YmotJChDT05GSUdfRFJNX1NJUykgICArPSBzaXMvCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92M2QvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvS2NvbmZpZwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hMGMwMjU5MzU1YmQKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC9LY29uZmlnCj4gQEAgLTAsMCArMSw5 IEBACj4gK2NvbmZpZyBEUk1fVjNECj4gKwl0cmlzdGF0ZSAiQnJvYWRjb20gVjNEIDMueCBhbmQg bmV3ZXIiCj4gKwlkZXBlbmRzIG9uIEFSQ0hfQkNNIHx8IEFSQ0hfQkNNU1RCIHx8IENPTVBJTEVf VEVTVAo+ICsJZGVwZW5kcyBvbiBEUk0KPiArCWRlcGVuZHMgb24gQ09NTU9OX0NMSwo+ICsJc2Vs ZWN0IERSTV9TQ0hFRAo+ICsJaGVscAo+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhh dmUgYSBzeXN0ZW0gdGhhdCBoYXMgYSBCcm9hZGNvbQo+ICsJICBWM0QgMy54IG9yIG5ld2VyIEdQ VSwgc3VjaCBhcyBCQ003MjY4Lgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3YzZC9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zNDQ0NmUxZGU2NGYKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsMTggQEAKPiAr IyBQbGVhc2Uga2VlcCB0aGVzZSBidWlsZCBsaXN0cyBzb3J0ZWQhCj4gKwo+ICsjIGNvcmUgZHJp dmVyIGNvZGUKPiArdjNkLXkgOj0gXAo+ICsJdjNkX2JvLm8gXAo+ICsJdjNkX2Rydi5vIFwKPiAr CXYzZF9mZW5jZS5vIFwKPiArCXYzZF9nZW0ubyBcCj4gKwl2M2RfaXJxLm8gXAo+ICsJdjNkX21t dS5vIFwKPiArCXYzZF90cmFjZV9wb2ludHMubyBcCj4gKwl2M2Rfc2NoZWQubwo+ICsKPiArdjNk LSQoQ09ORklHX0RFQlVHX0ZTKSArPSB2M2RfZGVidWdmcy5vCj4gKwo+ICtvYmotJChDT05GSUdf RFJNX1YzRCkgICs9IHYzZC5vCj4gKwo+ICtDRkxBR1NfdjNkX3RyYWNlX3BvaW50cy5vIDo9IC1J JChzcmMpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2JvLmMgYi9kcml2 ZXJzL2dwdS9kcm0vdjNkL3YzZF9iby5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwMDAwMDAuLmUxYzNiZTkwYmQ0Ywo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vdjNkL3YzZF9iby5jCj4gQEAgLTAsMCArMSwzOTIgQEAKPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCj4gKy8qIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEJy b2FkY29tICovCj4gKwo+ICsvKioKPiArICogRE9DOiBWM0QgR0VNIEJPIG1hbmFnZW1lbnQgc3Vw cG9ydAo+ICsgKgo+ICsgKiBDb21wYXJlZCB0byBWQzQgKFYzRCAyLngpLCBWM0QgMy4zIGludHJv ZHVjZXMgYW4gTU1VIGJldHdlZW4gdGhlCj4gKyAqIEdQVSBhbmQgdGhlIGJ1cywgYWxsb3dpbmcg dXMgdG8gdXNlIHNobWVtIG9iamVjdHMgZm9yIG91ciBzdG9yYWdlCj4gKyAqIGluc3RlYWQgb2Yg Q01BLgo+ICsgKgo+ICsgKiBQaHlzaWNhbGx5IGNvbnRpZ3VvdXMgb2JqZWN0cyBtYXkgc3RpbGwg YmUgaW1wb3J0ZWQgdG8gVjNELCBidXQgdGhlCj4gKyAqIGRyaXZlciBkb2Vzbid0IGFsbG9jYXRl IHBoeXNpY2FsbHkgY29udGlndW91cyBvYmplY3RzIG9uIGl0cyBvd24uCj4gKyAqIERpc3BsYXkg ZW5naW5lcyByZXF1aXJpbmcgcGh5c2ljYWxseSBjb250aWd1b3VzIGFsbG9jYXRpb25zIHNob3Vs ZAo+ICsgKiBsb29rIGludG8gTWVzYSdzICJyZW5kZXJvbmx5IiBzdXBwb3J0IChhcyB1c2VkIGJ5 IHRoZSBNZXNhIHBsMTExCj4gKyAqIGRyaXZlcikgZm9yIGFuIGV4YW1wbGUgb2YgaG93IHRvIGlu dGVncmF0ZSB3aXRoIFYzRC4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5o Pgo+ICsjaW5jbHVkZSA8bGludXgvcGZuX3QuaD4KPiArCj4gKyNpbmNsdWRlICJ2M2RfZHJ2Lmgi Cj4gKyNpbmNsdWRlICJ1YXBpL2RybS92M2RfZHJtLmgiCj4gKwo+ICsvKiBQaW5zIHRoZSBzaG1l bSBwYWdlcywgZmlsbHMgaW4gdGhlIC5wYWdlcyBhbmQgLnNndCBmaWVsZHMgb2YgdGhlIEJPLCBh bmQgbWFwcwo+ICsgKiBpdCBmb3IgRE1BLgo+ICsgKi8KPiArc3RhdGljIGludAo+ICt2M2RfYm9f Z2V0X3BhZ2VzKHN0cnVjdCB2M2RfYm8gKmJvKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiA9ICZiby0+YmFzZTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRl djsKPiArCWludCBucGFnZXMgPSBvYmotPnNpemUgPj4gUEFHRV9TSElGVDsKPiArCWludCByZXQg PSAwOwo+ICsKPiArCW11dGV4X2xvY2soJmJvLT5sb2NrKTsKPiArCWlmIChiby0+cGFnZXNfcmVm Y291bnQrKyAhPSAwKQo+ICsJCWdvdG8gdW5sb2NrOwo+ICsKPiArCWlmICghb2JqLT5pbXBvcnRf YXR0YWNoKSB7Cj4gKwkJYm8tPnBhZ2VzID0gZHJtX2dlbV9nZXRfcGFnZXMob2JqKTsKPiArCQlp ZiAoSVNfRVJSKGJvLT5wYWdlcykpIHsKPiArCQkJcmV0ID0gUFRSX0VSUihiby0+cGFnZXMpOwo+ ICsJCQlnb3RvIHVubG9jazsKPiArCQl9Cj4gKwo+ICsJCWJvLT5zZ3QgPSBkcm1fcHJpbWVfcGFn ZXNfdG9fc2coYm8tPnBhZ2VzLCBucGFnZXMpOwo+ICsJCWlmIChJU19FUlIoYm8tPnNndCkpIHsK PiArCQkJcmV0ID0gUFRSX0VSUihiby0+c2d0KTsKPiArCQkJZ290byBwdXRfcGFnZXM7Cj4gKwkJ fQo+ICsJfSBlbHNlIHsKPiArCQliby0+cGFnZXMgPSBrY2FsbG9jKG5wYWdlcywgc2l6ZW9mKCpi by0+cGFnZXMpLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIWJvLT5wYWdlcykKPiArCQkJZ290byBw dXRfcGFnZXM7Cj4gKwo+ICsJCWRybV9wcmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlzKGJvLT5z Z3QsIGJvLT5wYWdlcywKPiArCQkJCQkJIE5VTEwsIG5wYWdlcyk7Cj4gKwl9Cj4gKwo+ICsJLyog TWFwIHRoZSBwYWdlcyBmb3IgdXNlIGJ5IHRoZSBHUFUuICovCj4gKwlkbWFfbWFwX3NnKGRldi0+ ZGV2LCBiby0+c2d0LT5zZ2wsCj4gKwkJICAgYm8tPnNndC0+bmVudHMsIERNQV9CSURJUkVDVElP TkFMKTsKCkZvciBkbWEtYnVmIHlvdSBhbHJlYWR5IGdldCBhIG1hcHBlZCBzZ3QsIGFuZCB0aGUg aWRlYSBhdCBsZWFzdCBpcyB0byBub3QKbm9vZGxlIGFyb3VuZCBpbiBpbnRlcm5hbHMgbGlrZSBk cm1fcHJpbWVfc2dfdG9fcGFnZV9hZGRyX2FycmF5cyBkb2VzIC4uLgpUaGF0IHdhcyBqdXN0IGEg aGFjayBEYXZlIGRpZCB0byBhdm9pZCByZXdyaXRpbmcgYWxsIG9mIHR0bSwgd2hpY2ggaW1vCnNo b3VsZG4ndCBiZSBjb3BpZWQgYWxsIG92ZXIgdGhlIHBsYWNlIChidXQgaXQgaGFwcGVucykuCgpT aW5jZSB5b3UgaW1tZWRpYXRlbHkgY29udmVydCB0aGUgcGFnZSBsaXN0IGJhY2sgaW50byBhIG1h cHBlZCBzZyB0YWJsZQppdCdzIGEgYml0IHNpbGx5LgoKSSBndWVzcyBsb25nZXItdGVybSB3ZSBj b3VsZCBzd2l0Y2ggdGhlIGdlbSBoZWxwZXJzIHRvIGp1c3QgdXNlIHNnIHRhYmxlcwpkaXJlY3Rs eSwgaW5zdGVhZCBvZiBnb2luZyB0aHJvdWdoIHBhZ2VzIGFycmF5cy4gQnV0IGNvcmUgbW0gZm9s a3MganVzdApnb3QgbmFzdHkgb24gdXMgZG9pbmcgdGhhdCwgc28gSSdtIG5vdCBzdXJlIHdoaWNo IGRpcmVjdGlvbiB3ZSBzaG91bGQgZ28KaGVyZSBsb25nZXItdGVybS4KCj4gKwo+ICsJbXV0ZXhf dW5sb2NrKCZiby0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtwdXRfcGFnZXM6Cj4g Kwlkcm1fZ2VtX3B1dF9wYWdlcyhvYmosIGJvLT5wYWdlcywgdHJ1ZSwgdHJ1ZSk7Cj4gKwliby0+ cGFnZXMgPSBOVUxMOwo+ICt1bmxvY2s6Cj4gKwliby0+cGFnZXNfcmVmY291bnQtLTsKPiArCW11 dGV4X3VubG9jaygmYm8tPmxvY2spOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQKPiArdjNkX2JvX3B1dF9wYWdlcyhzdHJ1Y3QgdjNkX2JvICpibykKPiArewo+ICsJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmYm8tPmJhc2U7Cj4gKwo+ICsJbXV0ZXhfbG9jaygm Ym8tPmxvY2spOwo+ICsJaWYgKC0tYm8tPnBhZ2VzX3JlZmNvdW50ID09IDApIHsKPiArCQlkbWFf dW5tYXBfc2cob2JqLT5kZXYtPmRldiwgYm8tPnNndC0+c2dsLAo+ICsJCQkgICAgIGJvLT5zZ3Qt Pm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7Cj4gKwkJaWYgKCFvYmotPmltcG9ydF9hdHRhY2gp IHsKPiArCQkJc2dfZnJlZV90YWJsZShiby0+c2d0KTsKPiArCQkJa2ZyZWUoYm8tPnNndCk7Cj4g KwkJCWRybV9nZW1fcHV0X3BhZ2VzKG9iaiwgYm8tPnBhZ2VzLCB0cnVlLCB0cnVlKTsKPiArCQl9 IGVsc2Ugewo+ICsJCQlrZnJlZShiby0+cGFnZXMpOwo+ICsJCX0KPiArCX0KPiArCW11dGV4X3Vu bG9jaygmYm8tPmxvY2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHYzZF9ibyAqdjNkX2Jv X2NyZWF0ZV9zdHJ1Y3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCQkgICBzaXplX3Qg dW5hbGlnbmVkX3NpemUpCj4gK3sKPiArCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2 KGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCB2M2RfYm8g KmJvOwo+ICsJc2l6ZV90IHNpemUgPSByb3VuZHVwKHVuYWxpZ25lZF9zaXplLCBQQUdFX1NJWkUp Owo+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKHNp emUgPT0gMCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArCj4gKwlibyA9IGt6YWxs b2Moc2l6ZW9mKCpibyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFibykKPiArCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKPiArCW9iaiA9ICZiby0+YmFzZTsKPiArCj4gKwlJTklUX0xJU1RfSEVB RCgmYm8tPnZtYXMpOwo+ICsJSU5JVF9MSVNUX0hFQUQoJmJvLT51bnJlZl9oZWFkKTsKPiArCW11 dGV4X2luaXQoJmJvLT5sb2NrKTsKPiArCj4gKwlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRl diwgb2JqLCBzaXplKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBmcmVlX2JvOwo+ICsKPiArCXNw aW5fbG9jaygmdjNkLT5tbV9sb2NrKTsKPiArCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZV9nZW5l cmljKCZ2M2QtPm1tLCAmYm8tPm5vZGUsCj4gKwkJCQkJIG9iai0+c2l6ZSA+PiBQQUdFX1NISUZU LAo+ICsJCQkJCSBHTVBfR1JBTlVMQVJJVFkgPj4gUEFHRV9TSElGVCwgMCwgMCk7Cj4gKwlzcGlu X3VubG9jaygmdjNkLT5tbV9sb2NrKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBmcmVlX29iajsK PiArCj4gKwlyZXQgPSBkcm1fZ2VtX2NyZWF0ZV9tbWFwX29mZnNldChvYmopOwo+ICsJaWYgKHJl dCkKPiArCQlnb3RvIGZyZWVfbW07Cj4gKwo+ICsJcmV0dXJuIGJvOwo+ICsKPiArZnJlZV9tbToK PiArCXNwaW5fbG9ja19pcnFzYXZlKCZ2M2QtPm1tX2xvY2ssIGlycWZsYWdzKTsKPiArCWRybV9t bV9yZW1vdmVfbm9kZSgmYm8tPm5vZGUpOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdjNk LT5tbV9sb2NrLCBpcnFmbGFncyk7Cj4gKwo+ICtmcmVlX29iajoKPiArCWRybV9nZW1fb2JqZWN0 X3JlbGVhc2Uob2JqKTsKPiArZnJlZV9ibzoKPiArCWtmcmVlKGJvKTsKPiArCXJldHVybiBFUlJf UFRSKHJldCk7Cj4gK30KPiArCj4gK3N0cnVjdCB2M2RfYm8gKnYzZF9ib19jcmVhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gKwkJCSAgICAg c2l6ZV90IHVuYWxpZ25lZF9zaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9f djNkX2RldihkZXYpOwo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlzdHJ1Y3Qg djNkX2JvICpibzsKPiArCWludCByZXQ7Cj4gKwo+ICsJYm8gPSB2M2RfYm9fY3JlYXRlX3N0cnVj dChkZXYsIHVuYWxpZ25lZF9zaXplKTsKPiArCWlmIChJU19FUlIoYm8pKQo+ICsJCXJldHVybiBi bzsKPiArCW9iaiA9ICZiby0+YmFzZTsKPiArCj4gKwliby0+cmVzdiA9ICZiby0+X3Jlc3Y7Cj4g KwlyZXNlcnZhdGlvbl9vYmplY3RfaW5pdChiby0+cmVzdik7Cj4gKwo+ICsJcmV0ID0gdjNkX2Jv X2dldF9wYWdlcyhibyk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZnJlZV9tbTsKPiArCj4gKwl2 M2RfbW11X2luc2VydF9wdGVzKGJvKTsKPiArCj4gKwltdXRleF9sb2NrKCZ2M2QtPmJvX2xvY2sp Owo+ICsJdjNkLT5ib19zdGF0cy5udW1fYWxsb2NhdGVkKys7Cj4gKwl2M2QtPmJvX3N0YXRzLnBh Z2VzX2FsbG9jYXRlZCArPSBvYmotPnNpemUgPj4gUEFHRV9TSElGVDsKPiArCW11dGV4X3VubG9j aygmdjNkLT5ib19sb2NrKTsKPiArCj4gKwlyZXR1cm4gYm87Cj4gKwo+ICtmcmVlX21tOgo+ICsJ c3Bpbl9sb2NrKCZ2M2QtPm1tX2xvY2spOwo+ICsJZHJtX21tX3JlbW92ZV9ub2RlKCZiby0+bm9k ZSk7Cj4gKwlzcGluX3VubG9jaygmdjNkLT5tbV9sb2NrKTsKPiArCj4gKwlkcm1fZ2VtX29iamVj dF9yZWxlYXNlKG9iaik7Cj4gKwlrZnJlZShibyk7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ ICt9Cj4gKwo+ICsvKiBDYWxsZWQgRFJNIGNvcmUgb24gdGhlIGxhc3QgdXNlcnNwYWNlL2tlcm5l bCB1bnJlZmVyZW5jZSBvZiB0aGUKPiArICogQk8uCj4gKyAqLwo+ICt2b2lkIHYzZF9mcmVlX29i amVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsJc3RydWN0IHYzZF9kZXYg KnYzZCA9IHRvX3YzZF9kZXYob2JqLT5kZXYpOwo+ICsJc3RydWN0IHYzZF9ibyAqYm8gPSB0b192 M2RfYm8ob2JqKTsKPiArCj4gKwltdXRleF9sb2NrKCZ2M2QtPmJvX2xvY2spOwo+ICsJdjNkLT5i b19zdGF0cy5udW1fYWxsb2NhdGVkLS07Cj4gKwl2M2QtPmJvX3N0YXRzLnBhZ2VzX2FsbG9jYXRl ZCAtPSBvYmotPnNpemUgPj4gUEFHRV9TSElGVDsKPiArCW11dGV4X3VubG9jaygmdjNkLT5ib19s b2NrKTsKPiArCj4gKwlyZXNlcnZhdGlvbl9vYmplY3RfZmluaSgmYm8tPl9yZXN2KTsKPiArCj4g Kwl2M2RfYm9fcHV0X3BhZ2VzKGJvKTsKPiArCj4gKwlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKQo+ ICsJCWRybV9wcmltZV9nZW1fZGVzdHJveShvYmosIGJvLT5zZ3QpOwo+ICsKPiArCXYzZF9tbXVf cmVtb3ZlX3B0ZXMoYm8pOwo+ICsJc3Bpbl9sb2NrKCZ2M2QtPm1tX2xvY2spOwo+ICsJZHJtX21t X3JlbW92ZV9ub2RlKCZiby0+bm9kZSk7Cj4gKwlzcGluX3VubG9jaygmdjNkLT5tbV9sb2NrKTsK PiArCj4gKwltdXRleF9kZXN0cm95KCZiby0+bG9jayk7Cj4gKwo+ICsJZHJtX2dlbV9vYmplY3Rf cmVsZWFzZShvYmopOwo+ICsJa2ZyZWUoYm8pOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgcmVzZXJ2YXRp b25fb2JqZWN0ICp2M2RfcHJpbWVfcmVzX29iaihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikK PiArewo+ICsJc3RydWN0IHYzZF9ibyAqYm8gPSB0b192M2RfYm8ob2JqKTsKPiArCj4gKwlyZXR1 cm4gYm8tPnJlc3Y7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3YzZF9zZXRfbW1hcF92bWFf ZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gK3sKPiArCXZtYS0+dm1fZmxhZ3Mg Jj0gflZNX1BGTk1BUDsKPiArCXZtYS0+dm1fZmxhZ3MgfD0gVk1fTUlYRURNQVA7Cj4gKwl2bWEt PnZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEt PnZtX2ZsYWdzKSk7Cj4gK30KPiArCj4gK2ludCB2M2RfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9mYXVs dCAqdm1mKQo+ICt7Cj4gKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0+dm1hOwo+ ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKPiAr CXN0cnVjdCB2M2RfYm8gKmJvID0gdG9fdjNkX2JvKG9iaik7Cj4gKwl1bnNpZ25lZCBsb25nIHBm bjsKPiArCXBnb2ZmX3QgcGdvZmY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qIFdlIGRvbid0IHVz ZSB2bWYtPnBnb2ZmIHNpbmNlIHRoYXQgaGFzIHRoZSBmYWtlIG9mZnNldDogKi8KPiArCXBnb2Zm ID0gKHZtZi0+YWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7Cj4gKwlwZm4g PSBwYWdlX3RvX3Bmbihiby0+cGFnZXNbcGdvZmZdKTsKCkZyZWFrZWQgb3V0IGZvciBhIGJpdCwg dGhlbiBub3RpY2VkIHlvdSdyZSBwaW5uaW5nIGV2ZXJ5dGhpbmcuIFRoYXQgbWFrZXMKdGhlIGJv LT5wYWdlc19yZWZjb3VudCBhIGJpdCBjb25mdXNpbmcgc2luY2UgdG90YWxseSBub3QgbmVlZGVk LgoKSSBndWVzcyBpZiB5b3UgZG8gaGF2ZSBsb25nZXItdGVybSBwbGFucyB0byByb2xsIG91dCBh IHNocmlua2VyIEknZCBwdXQgYXQKbGVhc3QgYSBGSVhNRSBoZXJlLgoKPiArCj4gKwlyZXQgPSB2 bV9pbnNlcnRfbWl4ZWQodm1hLCB2bWYtPmFkZHJlc3MsIF9fcGZuX3RvX3Bmbl90KHBmbiwgUEZO X0RFVikpOwo+ICsKPiArCXN3aXRjaCAocmV0KSB7Cj4gKwljYXNlIC1FQUdBSU46Cj4gKwljYXNl IDA6Cj4gKwljYXNlIC1FUkVTVEFSVFNZUzoKPiArCWNhc2UgLUVJTlRSOgo+ICsJY2FzZSAtRUJV U1k6Cj4gKwkJLyoKPiArCQkgKiBFQlVTWSBpcyBvazogdGhpcyBqdXN0IG1lYW5zIHRoYXQgYW5v dGhlciB0aHJlYWQKPiArCQkgKiBhbHJlYWR5IGRpZCB0aGUgam9iLgo+ICsJCSAqLwo+ICsJCXJl dHVybiBWTV9GQVVMVF9OT1BBR0U7Cj4gKwljYXNlIC1FTk9NRU06Cj4gKwkJcmV0dXJuIFZNX0ZB VUxUX09PTTsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKPiArCX0K PiArfQo+ICsKPiAraW50IHYzZF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKnZtYSkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBkcm1fZ2VtX21t YXAoZmlscCwgdm1hKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwl2M2Rf c2V0X21tYXBfdm1hX2ZsYWdzKHZtYSk7CgpJZiBpdCdkIGFjdHVhbGx5IHVuZGVyc3RhbmQgd2hh dCB0aGVzZSB2bWEgZmxhZyBmcm9iYmVyaWVzIGluIG1vc3QgZHJpdmVycwpkbyBJIG1pZ2h0IGNv bWUgdXAgd2l0aCBhbiBpZGVhIGhvdyB3ZSBjYW4gYXZvaWQgdGhlIGNvcHlwYXN0ZS4gT2ggd2Vs bC4KTWF5YmUgYSBkcm1fZ2VtX21tYXBfd2M/Cgo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK2ludCB2M2RfcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZHJt X2dlbV9tbWFwX29iaihvYmosIG9iai0+c2l6ZSwgdm1hKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJ CXJldHVybiByZXQ7Cj4gKwo+ICsJdjNkX3NldF9tbWFwX3ZtYV9mbGFncyh2bWEpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9CgpBIHByaW1lIGhlbHBlciB3aGljaCBjaGVja3Mgb3V0IHRoZSBnZW0g bW1hcCBvZmZzZXQgYW5kIHRoZW4gcmVkaXJlY3RzCndpdGhvdXQgaGF2aW5nIHRvIGR1cGUgY29k ZSB3b3VsZCBiZSBuaWNlIEkgdGhpbmsuIEdpdmVuIHRoYXQgZXZlcnlvbmUKa25vdyBzZWVtcyB0 byB3YW50IHRvIGltcGxlbWVudCBwcmltZSBtbWFwLgoKPiArCj4gK3ZvaWQgKnYzZF9wcmltZV92 bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICt7Cj4gKwlXQVJOX09OQ0UoMSwgIm5v dCBpbXBsZW1lbnRlZCIpOwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3ZvaWQgdjNkX3By aW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3sK PiArCS8qIE5vdGhpbmcgdG8gZG8gKi8KPiArfQoKSSB0aGluayB3ZSBzaG91bGQgcGF0Y2ggZHJt X3ByaW1lLmMgdG8gbWFrZSB0aGVzZSBvcHRpb25hbC4KCj4gKwo+ICtzdHJ1Y3Qgc2dfdGFibGUg Kgo+ICt2M2RfcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ ICt7Cj4gKwlzdHJ1Y3QgdjNkX2JvICpibyA9IHRvX3YzZF9ibyhvYmopOwo+ICsJaW50IG5wYWdl cyA9IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOwo+ICsKPiArCXJldHVybiBkcm1fcHJpbWVfcGFn ZXNfdG9fc2coYm8tPnBhZ2VzLCBucGFnZXMpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKgo+ICt2M2RfcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gKwkJCSAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ICsJCQkgIHN0 cnVjdCBzZ190YWJsZSAqc2d0KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsK PiArCXN0cnVjdCB2M2RfYm8gKmJvOwo+ICsKPiArCWJvID0gdjNkX2JvX2NyZWF0ZV9zdHJ1Y3Qo ZGV2LCBhdHRhY2gtPmRtYWJ1Zi0+c2l6ZSk7Cj4gKwlpZiAoSVNfRVJSKGJvKSkKPiArCQlyZXR1 cm4gRVJSX1BUUihQVFJfRVJSKGJvKSk7Cj4gKwlvYmogPSAmYm8tPmJhc2U7Cj4gKwo+ICsJYm8t PnJlc3YgPSBhdHRhY2gtPmRtYWJ1Zi0+cmVzdjsKPiArCj4gKwliby0+c2d0ID0gc2d0Owo+ICsJ djNkX2JvX2dldF9wYWdlcyhibyk7Cj4gKwo+ICsJdjNkX21tdV9pbnNlcnRfcHRlcyhibyk7Cj4g Kwo+ICsJcmV0dXJuIG9iajsKPiArfQoKQWdhaW4sIG1heWJlIGl0J3Mgd29ydGggaXQgdG8gcHV0 IHRoZSBzZ3QgcG9pbnRlciBpbnRvIHRoZSBjb3JlCmRybV9nZW1fb2JqZWN0IHN0cnVjdCBhbmQg c2hhcmUgYSBwaWxlIG1vcmUgb2YgdGhpcyBjb2RlLiBEdW5uby4KCj4gKwo+ICtpbnQgdjNkX2Ny ZWF0ZV9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICsJCQlz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKPiArewo+ICsJc3RydWN0IGRybV92M2RfY3JlYXRl X2JvICphcmdzID0gZGF0YTsKPiArCXN0cnVjdCB2M2RfYm8gKmJvID0gTlVMTDsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJYm8gPSB2M2RfYm9fY3JlYXRlKGRldiwgZmlsZV9wcml2LCBQQUdFX0FMSUdO KGFyZ3MtPnNpemUpKTsKPiArCWlmIChJU19FUlIoYm8pKQo+ICsJCXJldHVybiBQVFJfRVJSKGJv KTsKPiArCj4gKwlhcmdzLT5vZmZzZXQgPSBiby0+bm9kZS5zdGFydCA8PCBQQUdFX1NISUZUOwo+ ICsKPiArCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZiby0+YmFzZSwg JmFyZ3MtPmhhbmRsZSk7Cj4gKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgm Ym8tPmJhc2UpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK2ludCB2M2RfbW1hcF9i b19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICsJCSAgICAgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3YzZF9tbWFwX2Jv ICphcmdzID0gZGF0YTsKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iajsKPiArCj4g KwlnZW1fb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbGVfcHJpdiwgYXJncy0+aGFuZGxl KTsKPiArCWlmICghZ2VtX29iaikgewo+ICsJCURSTV9ERUJVRygiRmFpbGVkIHRvIGxvb2sgdXAg R0VNIEJPICVkXG4iLCBhcmdzLT5oYW5kbGUpOwo+ICsJCXJldHVybiAtRU5PRU5UOwo+ICsJfQo+ ICsKPiArCS8qIFRoZSBtbWFwIG9mZnNldCB3YXMgc2V0IHVwIGF0IEJPIGFsbG9jYXRpb24gdGlt ZS4gKi8KCnZtYSBub2RlIG1hbmFnZXIgaGFzIGl0J3Mgb3duIGxvb2tpbmcsIHlvdSBjYW4ganVz dCBjYWxsIHRoaXMgd2hlbmV2ZXIgeW91CndhbnQuIEFuZCB0aGUgb2Zmc2V0IGlzIF9ub3RfIHNl dCB1cCBhdCBjcmVhdGUgdGltZSA6LSkKCj4gKwlhcmdzLT5vZmZzZXQgPSBkcm1fdm1hX25vZGVf b2Zmc2V0X2FkZHIoJmdlbV9vYmotPnZtYV9ub2RlKTsKPiArCj4gKwlkcm1fZ2VtX29iamVjdF91 bnJlZmVyZW5jZV91bmxvY2tlZChnZW1fb2JqKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtp bnQgdjNkX2dldF9ib19vZmZzZXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKPiArCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX3YzZF9nZXRfYm9fb2Zmc2V0ICphcmdzID0gZGF0YTsKPiArCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqZ2VtX29iajsKPiArCXN0cnVjdCB2M2RfYm8gKmJvOwo+ICsKPiArCWdlbV9vYmog PSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOwo+ICsJaWYg KCFnZW1fb2JqKSB7Cj4gKwkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gbG9vayB1cCBHRU0gQk8gJWRc biIsIGFyZ3MtPmhhbmRsZSk7Cj4gKwkJcmV0dXJuIC1FTk9FTlQ7Cj4gKwl9Cj4gKwlibyA9IHRv X3YzZF9ibyhnZW1fb2JqKTsKPiArCj4gKwlhcmdzLT5vZmZzZXQgPSBiby0+bm9kZS5zdGFydCA8 PCBQQUdFX1NISUZUOwo+ICsKPiArCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2Vk KGdlbV9vYmopOwo+ICsJcmV0dXJuIDA7Cj4gK30KCkhtLCBob3cgZG9lcyB5b3VyIGh3IHdvcms/ IERvIHlvdSBoYXZlIG9uZSBhZGRyZXNzIHNwYWNlIGZvciBldmVyeW9uZSwgYnV0CmNhbiBibG9j ayBvdXQgZGlmZmVyZW50IHJhbmdlcyB1c2luZyB0aGlzIEdNUCB0aGluZz8gSG93IGJpZyBpcyB0 aGUKYWRkcmVzcyBzcGFjZSAoaS5lLiBkbyB3ZSBleHBlY3QgdG8gcnVuIG91dCBvZiBpdCk/CgpZ b3Ugc2VlbSB0byBvbmx5IGhhdmUgYSAzMiBiaXQgYWRkcmVzcyBzcGFjZSwgZG9lc24ndCBzZWVt IGxpa2UgZ2l2ZW4gdGhhdAp2M2QgbG9va3MgbGlrZSBpdCdsbCBiZSB0aGUgYnJvYWRjb20gZ3B1 IGRyaXZlciBmb3IgcGxlbnR5IG9mIGZ1dHVyZSBody4KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS92M2QvdjNkX2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2RlYnVn ZnMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi40ZGI2MmM1 NDU3NDgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZGVi dWdmcy5jCj4gQEAgLTAsMCArMSwxOTEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjArCj4gKy8qIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEJyb2FkY29tICovCj4gKwo+ ICsjaW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50 aW1lLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bVAuaD4KPiArCj4gKyNpbmNsdWRlICJ2M2RfZHJ2LmgiCj4gKyNpbmNsdWRlICJ2M2RfcmVncy5o Igo+ICsKPiArI2RlZmluZSBSRUdERUYocmVnKSB7IHJlZywgI3JlZyB9Cj4gK3N0cnVjdCB2M2Rf cmVnX2RlZiB7Cj4gKwl1MzIgcmVnOwo+ICsJY29uc3QgY2hhciAqbmFtZTsKPiArfTsKPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjNkX3JlZ19kZWYgdjNkX2h1Yl9yZWdfZGVmc1tdID0gewo+ ICsJUkVHREVGKFYzRF9IVUJfQVhJQ0ZHKSwKPiArCVJFR0RFRihWM0RfSFVCX1VJRkNGRyksCj4g KwlSRUdERUYoVjNEX0hVQl9JREVOVDApLAo+ICsJUkVHREVGKFYzRF9IVUJfSURFTlQxKSwKPiAr CVJFR0RFRihWM0RfSFVCX0lERU5UMiksCj4gKwlSRUdERUYoVjNEX0hVQl9JREVOVDMpLAo+ICsJ UkVHREVGKFYzRF9IVUJfSU5UX1NUUyksCj4gKwlSRUdERUYoVjNEX0hVQl9JTlRfTVNLX1NUUyks Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHYzZF9yZWdfZGVmIHYzZF9nY2FfcmVn X2RlZnNbXSA9IHsKPiArCVJFR0RFRihWM0RfR0NBX1NBRkVfU0hVVERPV04pLAo+ICsJUkVHREVG KFYzRF9HQ0FfU0FGRV9TSFVURE9XTl9BQ0spLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCB2M2RfcmVnX2RlZiB2M2RfY29yZV9yZWdfZGVmc1tdID0gewo+ICsJUkVHREVGKFYzRF9D VExfSURFTlQwKSwKPiArCVJFR0RFRihWM0RfQ1RMX0lERU5UMSksCj4gKwlSRUdERUYoVjNEX0NU TF9JREVOVDIpLAo+ICsJUkVHREVGKFYzRF9DVExfTUlTQ0NGRyksCj4gKwlSRUdERUYoVjNEX0NU TF9JTlRfU1RTKSwKPiArCVJFR0RFRihWM0RfQ1RMX0lOVF9NU0tfU1RTKSwKPiArCVJFR0RFRihW M0RfQ0xFX0NUMENTKSwKPiArCVJFR0RFRihWM0RfQ0xFX0NUMENBKSwKPiArCVJFR0RFRihWM0Rf Q0xFX0NUMEVBKSwKPiArCVJFR0RFRihWM0RfQ0xFX0NUMUNTKSwKPiArCVJFR0RFRihWM0RfQ0xF X0NUMUNBKSwKPiArCVJFR0RFRihWM0RfQ0xFX0NUMUVBKSwKPiArCj4gKwlSRUdERUYoVjNEX1BU Ql9CUENBKSwKPiArCVJFR0RFRihWM0RfUFRCX0JQQ1MpLAo+ICsKPiArCVJFR0RFRihWM0RfTU1V X0NUTCksCj4gKwlSRUdERUYoVjNEX01NVV9WSU9fQUREUiksCj4gKwo+ICsJUkVHREVGKFYzRF9H TVBfU1RBVFVTKSwKPiArCVJFR0RFRihWM0RfR01QX0NGRyksCj4gKwlSRUdERUYoVjNEX0dNUF9W SU9fQUREUiksCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHYzZF92M2RfZGVidWdmc19yZWdzKHN0 cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2luZm9f bm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKW0tPnByaXZhdGU7Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKPiArCXN0cnVjdCB2M2RfZGV2 ICp2M2QgPSB0b192M2RfZGV2KGRldik7Cj4gKwlpbnQgaSwgY29yZTsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRSh2M2RfaHViX3JlZ19kZWZzKTsgaSsrKSB7Cj4gKwkJc2VxX3By aW50ZihtLCAiJXMgKDB4JTA0eCk6IDB4JTA4eFxuIiwKPiArCQkJICAgdjNkX2h1Yl9yZWdfZGVm c1tpXS5uYW1lLCB2M2RfaHViX3JlZ19kZWZzW2ldLnJlZywKPiArCQkJICAgVjNEX1JFQUQodjNk X2h1Yl9yZWdfZGVmc1tpXS5yZWcpKTsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRSh2M2RfZ2NhX3JlZ19kZWZzKTsgaSsrKSB7Cj4gKwkJc2VxX3ByaW50ZihtLCAiJXMg KDB4JTA0eCk6IDB4JTA4eFxuIiwKPiArCQkJICAgdjNkX2djYV9yZWdfZGVmc1tpXS5uYW1lLCB2 M2RfZ2NhX3JlZ19kZWZzW2ldLnJlZywKPiArCQkJICAgVjNEX0dDQV9SRUFEKHYzZF9nY2FfcmVn X2RlZnNbaV0ucmVnKSk7Cj4gKwl9Cj4gKwo+ICsJZm9yIChjb3JlID0gMDsgY29yZSA8IHYzZC0+ Y29yZXM7IGNvcmUrKykgewo+ICsJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHYzZF9jb3Jl X3JlZ19kZWZzKTsgaSsrKSB7Cj4gKwkJCXNlcV9wcmludGYobSwgImNvcmUgJWQgJXMgKDB4JTA0 eCk6IDB4JTA4eFxuIiwKPiArCQkJCSAgIGNvcmUsCj4gKwkJCQkgICB2M2RfY29yZV9yZWdfZGVm c1tpXS5uYW1lLAo+ICsJCQkJICAgdjNkX2NvcmVfcmVnX2RlZnNbaV0ucmVnLAo+ICsJCQkJICAg VjNEX0NPUkVfUkVBRChjb3JlLAo+ICsJCQkJCQkgdjNkX2NvcmVfcmVnX2RlZnNbaV0ucmVnKSk7 Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHYz ZF92M2RfZGVidWdmc19pZGVudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPiAr ewo+ICsJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUg KiltLT5wcml2YXRlOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5k ZXY7Cj4gKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOwo+ICsJdTMyIGlk ZW50MCwgaWRlbnQxLCBpZGVudDIsIGlkZW50MywgY29yZXM7Cj4gKwlpbnQgcmV0LCBjb3JlOwo+ ICsKPiArCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmModjNkLT5kZXYpOwo+ICsJaWYgKHJldCA8 IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZGVudDAgPSBWM0RfUkVBRChWM0RfSFVCX0lE RU5UMCk7Cj4gKwlpZGVudDEgPSBWM0RfUkVBRChWM0RfSFVCX0lERU5UMSk7Cj4gKwlpZGVudDIg PSBWM0RfUkVBRChWM0RfSFVCX0lERU5UMik7Cj4gKwlpZGVudDMgPSBWM0RfUkVBRChWM0RfSFVC X0lERU5UMyk7Cj4gKwljb3JlcyA9IFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSFVCX0lERU5U MV9OQ09SRVMpOwo+ICsKPiArCXNlcV9wcmludGYobSwgIlJldmlzaW9uOiAgICVkLiVkLiVkLiVk XG4iLAo+ICsJCSAgIFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSFVCX0lERU5UMV9UVkVSKSwK PiArCQkgICBWM0RfR0VUX0ZJRUxEKGlkZW50MSwgVjNEX0hVQl9JREVOVDFfUkVWKSwKPiArCQkg ICBWM0RfR0VUX0ZJRUxEKGlkZW50MywgVjNEX0hVQl9JREVOVDNfSVBSRVYpLAo+ICsJCSAgIFYz RF9HRVRfRklFTEQoaWRlbnQzLCBWM0RfSFVCX0lERU5UM19JUElEWCkpOwo+ICsJc2VxX3ByaW50 ZihtLCAiTU1VOiAgICAgICAgJXNcbiIsCj4gKwkJICAgKGlkZW50MiAmIFYzRF9IVUJfSURFTlQy X1dJVEhfTU1VKSA/ICJ5ZXMiIDogIm5vIik7Cj4gKwlzZXFfcHJpbnRmKG0sICJURlU6ICAgICAg ICAlc1xuIiwKPiArCQkgICAoaWRlbnQxICYgVjNEX0hVQl9JREVOVDFfV0lUSF9URlUpID8gInll cyIgOiAibm8iKTsKPiArCXNlcV9wcmludGYobSwgIlRTWTogICAgICAgICVzXG4iLAo+ICsJCSAg IChpZGVudDEgJiBWM0RfSFVCX0lERU5UMV9XSVRIX1RTWSkgPyAieWVzIiA6ICJubyIpOwo+ICsJ c2VxX3ByaW50ZihtLCAiTVNPOiAgICAgICAgJXNcbiIsCj4gKwkJICAgKGlkZW50MSAmIFYzRF9I VUJfSURFTlQxX1dJVEhfTVNPKSA/ICJ5ZXMiIDogIm5vIik7Cj4gKwlzZXFfcHJpbnRmKG0sICJM M0M6ICAgICAgICAlcyAoJWRrYilcbiIsCj4gKwkJICAgKGlkZW50MSAmIFYzRF9IVUJfSURFTlQx X1dJVEhfTDNDKSA/ICJ5ZXMiIDogIm5vIiwKPiArCQkgICBWM0RfR0VUX0ZJRUxEKGlkZW50Miwg VjNEX0hVQl9JREVOVDJfTDNDX05LQikpOwo+ICsKPiArCWZvciAoY29yZSA9IDA7IGNvcmUgPCBj b3JlczsgY29yZSsrKSB7Cj4gKwkJdTMyIG1pc2NjZmc7Cj4gKwkJdTMyIG5zbGMsIG50bXUsIHF1 cHM7Cj4gKwo+ICsJCWlkZW50MCA9IFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0NUTF9JREVOVDAp Owo+ICsJCWlkZW50MSA9IFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0NUTF9JREVOVDEpOwo+ICsJ CWlkZW50MiA9IFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0NUTF9JREVOVDIpOwo+ICsJCW1pc2Nj ZmcgPSBWM0RfQ09SRV9SRUFEKGNvcmUsIFYzRF9DVExfTUlTQ0NGRyk7Cj4gKwo+ICsJCW5zbGMg PSBWM0RfR0VUX0ZJRUxEKGlkZW50MSwgVjNEX0lERU5UMV9OU0xDKTsKPiArCQludG11ID0gVjNE X0dFVF9GSUVMRChpZGVudDEsIFYzRF9JREVOVDFfTlRNVSk7Cj4gKwkJcXVwcyA9IFYzRF9HRVRf RklFTEQoaWRlbnQxLCBWM0RfSURFTlQxX1FVUFMpOwo+ICsKPiArCQlzZXFfcHJpbnRmKG0sICJD b3JlICVkOlxuIiwgY29yZSk7Cj4gKwkJc2VxX3ByaW50ZihtLCAiICBSZXZpc2lvbjogICAgICVk LiVkXG4iLAo+ICsJCQkgICBWM0RfR0VUX0ZJRUxEKGlkZW50MCwgVjNEX0lERU5UMF9WRVIpLAo+ ICsJCQkgICBWM0RfR0VUX0ZJRUxEKGlkZW50MSwgVjNEX0lERU5UMV9SRVYpKTsKPiArCQlzZXFf cHJpbnRmKG0sICIgIFNsaWNlczogICAgICAgJWRcbiIsIG5zbGMpOwo+ICsJCXNlcV9wcmludGYo bSwgIiAgVE1VczogICAgICAgICAlZFxuIiwgbnNsYyAqIG50bXUpOwo+ICsJCXNlcV9wcmludGYo bSwgIiAgUVBVczogICAgICAgICAlZFxuIiwgbnNsYyAqIHF1cHMpOwo+ICsJCXNlcV9wcmludGYo bSwgIiAgU2VtYXBob3JlczogICAlZFxuIiwKPiArCQkJICAgVjNEX0dFVF9GSUVMRChpZGVudDEs IFYzRF9JREVOVDFfTlNFTSkpOwo+ICsJCXNlcV9wcmludGYobSwgIiAgQkNHIGludDogICAgICAl ZFxuIiwKPiArCQkJICAgKGlkZW50MiAmIFYzRF9JREVOVDJfQkNHX0lOVCkgIT0gMCk7Cj4gKwkJ c2VxX3ByaW50ZihtLCAiICBPdmVycmlkZSBUTVU6ICVkXG4iLAo+ICsJCQkgICAobWlzY2NmZyAm IFYzRF9NSVNDQ0ZHX09WUlRNVU9VVCkgIT0gMCk7Cj4gKwl9Cj4gKwo+ICsJcG1fcnVudGltZV9t YXJrX2xhc3RfYnVzeSh2M2QtPmRldik7Cj4gKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCh2 M2QtPmRldik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdjNkX2Rl YnVnZnNfYm9fc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gK3sKPiAr CXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopbS0+ cHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2Owo+ ICsJc3RydWN0IHYzZF9kZXYgKnYzZCA9IHRvX3YzZF9kZXYoZGV2KTsKPiArCj4gKwltdXRleF9s b2NrKCZ2M2QtPmJvX2xvY2spOwo+ICsJc2VxX3ByaW50ZihtLCAiYWxsb2NhdGVkIGJvczogICAg ICAgICAgJWRcbiIsCj4gKwkJICAgdjNkLT5ib19zdGF0cy5udW1fYWxsb2NhdGVkKTsKPiArCXNl cV9wcmludGYobSwgImFsbG9jYXRlZCBibyBzaXplIChrYik6ICVsZFxuIiwKPiArCQkgICAobG9u Zyl2M2QtPmJvX3N0YXRzLnBhZ2VzX2FsbG9jYXRlZCA8PCAoUEFHRV9TSElGVCAtIDEwKSk7Cj4g KwltdXRleF91bmxvY2soJnYzZC0+Ym9fbG9jayk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2luZm9fbGlzdCB2M2RfZGVidWdmc19saXN0W10g PSB7Cj4gKwl7InYzZF9pZGVudCIsIHYzZF92M2RfZGVidWdmc19pZGVudCwgMH0sCj4gKwl7InYz ZF9yZWdzIiwgdjNkX3YzZF9kZWJ1Z2ZzX3JlZ3MsIDB9LAo+ICsJeyJib19zdGF0cyIsIHYzZF9k ZWJ1Z2ZzX2JvX3N0YXRzLCAwfSwKPiArfTsKPiArCj4gK2ludAo+ICt2M2RfZGVidWdmc19pbml0 KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQo+ICt7Cj4gKwlyZXR1cm4gZHJtX2RlYnVnZnNfY3Jl YXRlX2ZpbGVzKHYzZF9kZWJ1Z2ZzX2xpc3QsCj4gKwkJCQkJQVJSQVlfU0laRSh2M2RfZGVidWdm c19saXN0KSwKPiArCQkJCQltaW5vci0+ZGVidWdmc19yb290LCBtaW5vcik7Cj4gK30KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9kcnYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAw Li4wMmEzZDI4OTVmOTUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Yz ZC92M2RfZHJ2LmMKPiBAQCAtMCwwICsxLDM3MSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCsKPiArLyogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQnJvYWRjb20gKi8K PiArCj4gKy8qKgo+ICsgKiBET0M6IEJyb2FkY29tIFYzRCBHcmFwaGljcyBEcml2ZXIKPiArICoK PiArICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEJyb2FkY29tIFYzRCAzLjMgYW5kIDQuMSBP cGVuR0wgRVMgR1BVcy4KPiArICogRm9yIFYzRCAyLnggc3VwcG9ydCwgc2VlIHRoZSBWQzQgZHJp dmVyLgo+ICsgKgo+ICsgKiBDdXJyZW50bHkgb25seSBzaW5nbGUtY29yZSByZW5kZXJpbmcgdXNp bmcgdGhlIGJpbm5lciBhbmQgcmVuZGVyZXIKPiArICogaXMgc3VwcG9ydGVkLiAgVGhlIFRGVSAo dGV4dHVyZSBmb3JtYXR0aW5nIHVuaXQpIGFuZCBWM0QgNC54J3MgQ1NECj4gKyAqIChjb21wdXRl IHNoYWRlciBkaXNwYXRjaCkgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLgo+ICsgKi8KPiArCj4gKyNp bmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsjaW5j bHVkZSA8bGludXgvaW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rldmlj ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9mYl9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ICsK PiArI2luY2x1ZGUgInVhcGkvZHJtL3YzZF9kcm0uaCIKPiArI2luY2x1ZGUgInYzZF9kcnYuaCIK PiArI2luY2x1ZGUgInYzZF9yZWdzLmgiCj4gKwo+ICsjZGVmaW5lIERSSVZFUl9OQU1FICJ2M2Qi Cj4gKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkJyb2FkY29tIFYzRCBncmFwaGljcyIKPiArI2RlZmlu ZSBEUklWRVJfREFURSAiMjAxODA0MTkiCj4gKyNkZWZpbmUgRFJJVkVSX01BSk9SIDEKPiArI2Rl ZmluZSBEUklWRVJfTUlOT1IgMAo+ICsjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMIDAKPiArCj4g KyNpZmRlZiBDT05GSUdfUE0KPiArc3RhdGljIGludCB2M2RfcnVudGltZV9zdXNwZW5kKHN0cnVj dCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOwo+ICsJc3RydWN0IHYzZF9kZXYgKnYzZCA9IHRvX3YzZF9kZXYoZHJtKTsK PiArCj4gKwl2M2RfaXJxX2Rpc2FibGUodjNkKTsKPiArCj4gKwljbGtfZGlzYWJsZV91bnByZXBh cmUodjNkLT5jbGspOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHYz ZF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXN0cnVjdCB2M2RfZGV2ICp2 M2QgPSB0b192M2RfZGV2KGRybSk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZSh2M2QtPmNsayk7Cj4gKwlpZiAocmV0ICE9IDApCj4gKwkJcmV0dXJuIHJldDsK PiArCj4gKwkvKiBYWFg6IFZQTSBiYXNlICovCj4gKwo+ICsJdjNkX21tdV9zZXRfcGFnZV90YWJs ZSh2M2QpOwo+ICsJdjNkX2lycV9lbmFibGUodjNkKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsjZW5kaWYKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB2M2RfdjNkX3Bt X29wcyA9IHsKPiArCVNFVF9SVU5USU1FX1BNX09QUyh2M2RfcnVudGltZV9zdXNwZW5kLCB2M2Rf cnVudGltZV9yZXN1bWUsIE5VTEwpCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHYzZF9nZXRfcGFy YW1faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiArCQkJICAgICAg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgdjNkX2RldiAqdjNk ID0gdG9fdjNkX2RldihkZXYpOwo+ICsJc3RydWN0IGRybV92M2RfZ2V0X3BhcmFtICphcmdzID0g ZGF0YTsKPiArCWludCByZXQ7Cj4gKwlzdGF0aWMgY29uc3QgdTMyIHJlZ19tYXBbXSA9IHsKPiAr CQlbRFJNX1YzRF9QQVJBTV9WM0RfVUlGQ0ZHXSA9IFYzRF9IVUJfVUlGQ0ZHLAo+ICsJCVtEUk1f VjNEX1BBUkFNX1YzRF9IVUJfSURFTlQxXSA9IFYzRF9IVUJfSURFTlQxLAo+ICsJCVtEUk1fVjNE X1BBUkFNX1YzRF9IVUJfSURFTlQyXSA9IFYzRF9IVUJfSURFTlQyLAo+ICsJCVtEUk1fVjNEX1BB UkFNX1YzRF9IVUJfSURFTlQzXSA9IFYzRF9IVUJfSURFTlQzLAo+ICsJCVtEUk1fVjNEX1BBUkFN X1YzRF9DT1JFMF9JREVOVDBdID0gVjNEX0NUTF9JREVOVDAsCj4gKwkJW0RSTV9WM0RfUEFSQU1f VjNEX0NPUkUwX0lERU5UMV0gPSBWM0RfQ1RMX0lERU5UMSwKPiArCQlbRFJNX1YzRF9QQVJBTV9W M0RfQ09SRTBfSURFTlQyXSA9IFYzRF9DVExfSURFTlQyLAo+ICsJfTsKPiArCj4gKwlpZiAoYXJn cy0+cGFkICE9IDApCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJLyogTm90ZSB0aGF0IERS TV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMCBpcyAwLCBzbyB3ZSBuZWVkCj4gKwkgKiB0byBl eHBsaWNpdGx5IGFsbG93IGl0IGluIHRoZSAidGhlIHJlZ2lzdGVyIGluIG91cgo+ICsJICogcGFy YW1ldGVyIG1hcCIgY2hlY2suCj4gKwkgKi8KPiArCWlmIChhcmdzLT5wYXJhbSA8IEFSUkFZX1NJ WkUocmVnX21hcCkgJiYKPiArCSAgICAocmVnX21hcFthcmdzLT5wYXJhbV0gfHwKPiArCSAgICAg YXJncy0+cGFyYW0gPT0gRFJNX1YzRF9QQVJBTV9WM0RfQ09SRTBfSURFTlQwKSkgewo+ICsJCXUz MiBvZmZzZXQgPSByZWdfbWFwW2FyZ3MtPnBhcmFtXTsKPiArCj4gKwkJaWYgKGFyZ3MtPnZhbHVl ICE9IDApCj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCQlyZXQgPSBwbV9ydW50aW1lX2dl dF9zeW5jKHYzZC0+ZGV2KTsKPiArCQlpZiAoYXJncy0+cGFyYW0gPj0gRFJNX1YzRF9QQVJBTV9W M0RfQ09SRTBfSURFTlQwICYmCj4gKwkJICAgIGFyZ3MtPnBhcmFtIDw9IERSTV9WM0RfUEFSQU1f VjNEX0NPUkUwX0lERU5UMikgewo+ICsJCQlhcmdzLT52YWx1ZSA9IFYzRF9DT1JFX1JFQUQoMCwg b2Zmc2V0KTsKPiArCQl9IGVsc2Ugewo+ICsJCQlhcmdzLT52YWx1ZSA9IFYzRF9SRUFEKG9mZnNl dCk7Cj4gKwkJfQo+ICsJCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3kodjNkLT5kZXYpOwo+ICsJ CXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKHYzZC0+ZGV2KTsKPiArCQlyZXR1cm4gMDsKPiAr CX0KPiArCj4gKwkvKiBBbnkgcGFyYW1zIHRoYXQgYXJlbid0IGp1c3QgcmVnaXN0ZXIgcmVhZHMg d291bGQgZ28gaGVyZS4gKi8KPiArCj4gKwlEUk1fREVCVUcoIlVua25vd24gcGFyYW1ldGVyICVk XG4iLCBhcmdzLT5wYXJhbSk7Cj4gKwlyZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArc3RhdGlj IGludAo+ICt2M2Rfb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUpCj4gK3sKPiArCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRldik7Cj4g KwlzdHJ1Y3QgdjNkX2ZpbGVfcHJpdiAqdjNkX3ByaXY7Cj4gKwlpbnQgaTsKPiArCj4gKwl2M2Rf cHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCp2M2RfcHJpdiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF2 M2RfcHJpdikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwl2M2RfcHJpdi0+djNkID0gdjNk Owo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBWM0RfTUFYX1FVRVVFUzsgaSsrKSB7Cj4gKwkJZHJt X3NjaGVkX2VudGl0eV9pbml0KCZ2M2QtPnF1ZXVlW2ldLnNjaGVkLAo+ICsJCQkJICAgICAgJnYz ZF9wcml2LT5zY2hlZF9lbnRpdHlbaV0sCj4gKwkJCQkgICAgICAmdjNkLT5xdWV1ZVtpXS5zY2hl ZC5zY2hlZF9ycVtEUk1fU0NIRURfUFJJT1JJVFlfTk9STUFMXSwKPiArCQkJCSAgICAgIDMyLCBO VUxMKTsKPiArCX0KPiArCj4gKwlmaWxlLT5kcml2ZXJfcHJpdiA9IHYzZF9wcml2Owo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt2M2RfcG9zdGNsb3NlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiArewo+ICsJc3RydWN0 IHYzZF9kZXYgKnYzZCA9IHRvX3YzZF9kZXYoZGV2KTsKPiArCXN0cnVjdCB2M2RfZmlsZV9wcml2 ICp2M2RfcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2Owo+ICsJZW51bSB2M2RfcXVldWUgcTsKPiAr Cj4gKwlmb3IgKHEgPSAwOyBxIDwgVjNEX01BWF9RVUVVRVM7IHErKykgewo+ICsJCWRybV9zY2hl ZF9lbnRpdHlfZmluaSgmdjNkLT5xdWV1ZVtxXS5zY2hlZCwKPiArCQkJCSAgICAgICZ2M2RfcHJp di0+c2NoZWRfZW50aXR5W3FdKTsKPiArCX0KPiArCj4gKwlrZnJlZSh2M2RfcHJpdik7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHYzZF9kcm1fZm9wcyA9 IHsKPiArCS5vd25lciA9IFRISVNfTU9EVUxFLAo+ICsJLm9wZW4gPSBkcm1fb3BlbiwKPiArCS5y ZWxlYXNlID0gZHJtX3JlbGVhc2UsCj4gKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCj4g KwkubW1hcCA9IHYzZF9tbWFwLAo+ICsJLnBvbGwgPSBkcm1fcG9sbCwKPiArCS5yZWFkID0gZHJt X3JlYWQsCj4gKwkuY29tcGF0X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKPiArCS5sbHNlZWsg PSBub29wX2xsc2VlaywKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lvY3Rs X2Rlc2MgdjNkX2RybV9pb2N0bHNbXSA9IHsKPiArCURSTV9JT0NUTF9ERUZfRFJWKFYzRF9TVUJN SVRfQ0wsIHYzZF9zdWJtaXRfY2xfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJNX0lP Q1RMX0RFRl9EUlYoVjNEX1dBSVRfQk8sIHYzZF93YWl0X2JvX2lvY3RsLCBEUk1fUkVOREVSX0FM TE9XKSwKPiArCURSTV9JT0NUTF9ERUZfRFJWKFYzRF9DUkVBVEVfQk8sIHYzZF9jcmVhdGVfYm9f aW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoVjNEX01NQVBf Qk8sIHYzZF9tbWFwX2JvX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiArCURSTV9JT0NUTF9E RUZfRFJWKFYzRF9HRVRfUEFSQU0sIHYzZF9nZXRfcGFyYW1faW9jdGwsIERSTV9SRU5ERVJfQUxM T1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoVjNEX0dFVF9CT19PRkZTRVQsIHYzZF9nZXRfYm9f b2Zmc2V0X2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiArfTsKClNvIG9uIHlvdXIgIkRvIEkg bmVlZCBEUk1fQVVUSCIgcXVlc3Rpb24gLi4uIGhlY2sgZG8gSSBrbm93IDotKQoKV2hhdCBzZWVt cyB0byBiZSBzdGFuZGFyZCBwcmFjdGljZSBpcyB0byBzcHJpbmtsZSBhIERSTV9BVVRIIG92ZXIg YWxsCkRSTV9SRU5ERVJfQUxMT1cgaW9jdGxzIHdoaWNoIGNoYW5nZSBzdHVmZiAoaS5lLiBhbGwg ZXhjZXB0IEdFVF9QQVJBTSkuCk5vdGUgdGhhdCBEUk1fQVVUSCBoYXMgc29tZSB2ZXJ5IHdlYWsg Z3VhcmFudGVlczogT25jZSBhdXRoZW50aWNhdGVkLAphbHdheXMgYXV0aGVudGljYXRlZC4gVGhl IGF1dGhlbnRpY2F0aW9uIGRvZXNuJ3QgZm9sbG93IHRoZSBkcm0gbWFzdGVyCmFyb3VuZCwgc28g aWYgeW91IFZUIHN3aXRjaCB5b3UgY2FuIGhhcHBpbHkgcmVhZCBhbnkgb3RoZXIgdXNlcnMgbWVt b3J5CmFscmVhZHksIGV2ZW4gd2l0aCBEUk1fQVVUSC4KClRoZSBzYW1lIGFwcGxpZXMgZm9yIHJl bmRlciBub2RlcywgZXhjZXB0IG5vIGF1dGhlbnRpY2F0aW9uIHN0ZXAgdG8ganVtcApvdmVyIGZp cnN0LgoKV2UgYWxzbyBhbHJlYWR5IGhhdmUgZHJpdmVycyB3aXRoIHJlbmRlciBub2RlcyB3aGlj aCBkb24ndCBoYXZlIGZ1bGwKcHBndHQsIHNvIGRvZXNuJ3Qgc2VlbSB0byBob3JyaWJsZSBpZGVh IGVpdGhlciB0byBzdGFydCBvdXQgd2l0aG91dCB0aGF0CmZvciB2M2QuCgp0bGRyOyBJJ2Qgc3Vn Z2VzdCB5b3Ugc3ByaW5rbGUgRFJNX0FVVEggb3ZlciBldmVyeXRoaW5nIGV4Y2VwdCBHRVRfUEFS QU0sCmlmIG9ubHkgZm9yIGNhcmdvIGN1bHQgY29uc2lzdGVuY3kgOi0pCgo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2M2Rfdm1fb3BzID0gewo+ICsJLmZh dWx0ID0gdjNkX2dlbV9mYXVsdCwKPiArCS5vcGVuID0gZHJtX2dlbV92bV9vcGVuLAo+ICsJLmNs b3NlID0gZHJtX2dlbV92bV9jbG9zZSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2Ry aXZlciB2M2RfZHJtX2RyaXZlciA9IHsKPiArCS5kcml2ZXJfZmVhdHVyZXMgPSAoRFJJVkVSX0dF TSB8Cj4gKwkJCSAgICBEUklWRVJfUkVOREVSIHwKPiArCQkJICAgIERSSVZFUl9QUklNRSB8Cj4g KwkJCSAgICBEUklWRVJfU1lOQ09CSiksCj4gKwo+ICsJLm9wZW4gPSB2M2Rfb3BlbiwKPiArCS5w b3N0Y2xvc2UgPSB2M2RfcG9zdGNsb3NlLAo+ICsKPiArI2lmIGRlZmluZWQoQ09ORklHX0RFQlVH X0ZTKQo+ICsJLmRlYnVnZnNfaW5pdCA9IHYzZF9kZWJ1Z2ZzX2luaXQsCj4gKyNlbmRpZgo+ICsK PiArCS5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQgPSB2M2RfZnJlZV9vYmplY3QsCj4gKwkuZ2Vt X3ZtX29wcyA9ICZ2M2Rfdm1fb3BzLAo+ICsKPiArCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1f Z2VtX3ByaW1lX2hhbmRsZV90b19mZCwKPiArCS5wcmltZV9mZF90b19oYW5kbGUgPSBkcm1fZ2Vt X3ByaW1lX2ZkX3RvX2hhbmRsZSwKPiArCS5nZW1fcHJpbWVfaW1wb3J0ID0gZHJtX2dlbV9wcmlt ZV9pbXBvcnQsCj4gKwkuZ2VtX3ByaW1lX2V4cG9ydCA9IGRybV9nZW1fcHJpbWVfZXhwb3J0LAo+ ICsJLmdlbV9wcmltZV9yZXNfb2JqID0gdjNkX3ByaW1lX3Jlc19vYmosCj4gKwkuZ2VtX3ByaW1l X2dldF9zZ190YWJsZQk9IHYzZF9wcmltZV9nZXRfc2dfdGFibGUsCj4gKwkuZ2VtX3ByaW1lX2lt cG9ydF9zZ190YWJsZSA9IHYzZF9wcmltZV9pbXBvcnRfc2dfdGFibGUsCj4gKwkuZ2VtX3ByaW1l X3ZtYXAgPSB2M2RfcHJpbWVfdm1hcCwKPiArCS5nZW1fcHJpbWVfdnVubWFwID0gdjNkX3ByaW1l X3Z1bm1hcCwKPiArCS5nZW1fcHJpbWVfbW1hcCA9IHYzZF9wcmltZV9tbWFwLAo+ICsKPiArCS5p b2N0bHMgPSB2M2RfZHJtX2lvY3RscywKPiArCS5udW1faW9jdGxzID0gQVJSQVlfU0laRSh2M2Rf ZHJtX2lvY3RscyksCj4gKwkuZm9wcyA9ICZ2M2RfZHJtX2ZvcHMsCj4gKwo+ICsJLm5hbWUgPSBE UklWRVJfTkFNRSwKPiArCS5kZXNjID0gRFJJVkVSX0RFU0MsCj4gKwkuZGF0ZSA9IERSSVZFUl9E QVRFLAo+ICsJLm1ham9yID0gRFJJVkVSX01BSk9SLAo+ICsJLm1pbm9yID0gRFJJVkVSX01JTk9S LAo+ICsJLnBhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTCwKPiArfTsKPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHYzZF9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29t cGF0aWJsZSA9ICJicmNtLDcyNjgtdjNkIiB9LAo+ICsJeyAuY29tcGF0aWJsZSA9ICJicmNtLDcy NzgtdjNkIiB9LAo+ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHYzZF9v Zl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK21hcF9yZWdzKHN0cnVjdCB2M2RfZGV2ICp2 M2QsIHZvaWQgX19pb21lbSAqKnJlZ3MsIGNvbnN0IGNoYXIgKm5hbWUpCj4gK3sKPiArCXN0cnVj dCByZXNvdXJjZSAqcmVzID0KPiArCQlwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHYzZC0+ cGRldiwgSU9SRVNPVVJDRV9NRU0sIG5hbWUpOwo+ICsKPiArCSpyZWdzID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKHYzZC0+ZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUigqcmVncykpCj4gKwkJcmV0 dXJuIFBUUl9FUlIoKnJlZ3MpOwo+ICsJZWxzZQo+ICsJCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHYzZF9wbGF0Zm9ybV9kcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkcm07Cj4gKwlzdHJ1Y3QgdjNkX2RldiAqdjNkOwo+ICsJaW50IHJldDsK PiArCXUzMiBpZGVudDE7Cj4gKwo+ICsJZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRf TUFTSygzNik7Cj4gKwo+ICsJdjNkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp2M2QpLCBH RlBfS0VSTkVMKTsKPiArCWlmICghdjNkKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJdjNkLT5k ZXYgPSBkZXY7Cj4gKwl2M2QtPnBkZXYgPSBwZGV2Owo+ICsKPiArCXJldCA9IG1hcF9yZWdzKHYz ZCwgJnYzZC0+YnJpZGdlX3JlZ3MsICJicmlkZ2UiKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJu IHJldDsKPiArCj4gKwlyZXQgPSBtYXBfcmVncyh2M2QsICZ2M2QtPmh1Yl9yZWdzLCAiaHViIik7 Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gbWFwX3JlZ3ModjNk LCAmdjNkLT5jb3JlX3JlZ3NbMF0sICJjb3JlMCIpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g cmV0Owo+ICsKPiArCWlkZW50MSA9IFYzRF9SRUFEKFYzRF9IVUJfSURFTlQxKTsKPiArCXYzZC0+ dmVyID0gKFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSFVCX0lERU5UMV9UVkVSKSAqIDEwICsK PiArCQkgICAgVjNEX0dFVF9GSUVMRChpZGVudDEsIFYzRF9IVUJfSURFTlQxX1JFVikpOwo+ICsJ djNkLT5jb3JlcyA9IFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSFVCX0lERU5UMV9OQ09SRVMp Owo+ICsJV0FSTl9PTih2M2QtPmNvcmVzID4gMSk7IC8qIG11bHRpY29yZSBub3QgeWV0IGltcGxl bWVudGVkICovCj4gKwo+ICsJaWYgKHYzZC0+dmVyIDwgNDEpIHsKPiArCQlyZXQgPSBtYXBfcmVn cyh2M2QsICZ2M2QtPmdjYV9yZWdzLCAiZ2NhIik7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwl2M2QtPm1tdV9zY3JhdGNoID0gZG1hX2FsbG9jX3djKGRldiwg NDA5NiwgJnYzZC0+bW11X3NjcmF0Y2hfcGFkZHIsCj4gKwkJCQkJR0ZQX0tFUk5FTCB8IF9fR0ZQ X05PV0FSTiB8IF9fR0ZQX1pFUk8pOwo+ICsJaWYgKCF2M2QtPm1tdV9zY3JhdGNoKSB7Cj4gKwkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgTU1VIHNjcmF0Y2ggcGFnZVxuIik7Cj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJcG1fcnVudGltZV91c2VfYXV0b3N1c3Bl bmQoZGV2KTsKPiArCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KGRldiwgNTApOwo+ ICsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKPiArCj4gKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZ2 M2RfZHJtX2RyaXZlciwgZGV2KTsKPiArCWlmIChJU19FUlIoZHJtKSkgewo+ICsJCXJldCA9IFBU Ul9FUlIoZHJtKTsKPiArCQlnb3RvIGRtYV9mcmVlOwo+ICsJfQo+ICsKPiArCXBsYXRmb3JtX3Nl dF9kcnZkYXRhKHBkZXYsIGRybSk7Cj4gKwl2M2QtPmRybSA9IGRybTsKPiArCWRybS0+ZGV2X3By aXZhdGUgPSB2M2Q7Cgpkcm1fZGV2X2luaXQgcGx1cyBqdXN0IGVtYmVkIGRybSBpbiB2M2QgaXMg bXkgcmVjb21tZW5kYXRpb24uCgo+ICsKPiArCXJldCA9IHYzZF9nZW1faW5pdChkcm0pOwo+ICsJ aWYgKHJldCkKPiArCQlnb3RvIGRldl9kZXN0cm95Owo+ICsKPiArCXYzZF9pcnFfaW5pdCh2M2Qp Owo+ICsKPiArCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZHJtLCAwKTsKPiArCWlmIChyZXQpCj4g KwkJZ290byBnZW1fZGVzdHJveTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2dlbV9kZXN0cm95 Ogo+ICsJdjNkX2dlbV9kZXN0cm95KGRybSk7Cj4gK2Rldl9kZXN0cm95Ogo+ICsJZHJtX2Rldl9w dXQoZHJtKTsKPiArZG1hX2ZyZWU6Cj4gKwlkbWFfZnJlZV93YyhkZXYsIDQwOTYsIHYzZC0+bW11 X3NjcmF0Y2gsIHYzZC0+bW11X3NjcmF0Y2hfcGFkZHIpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgdjNkX3BsYXRmb3JtX2RybV9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsJc3RydWN0IHYzZF9kZXYgKnYzZCA9IHRvX3YzZF9k ZXYoZHJtKTsKPiArCj4gKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKPiArCj4gKwl2M2RfZ2Vt X2Rlc3Ryb3koZHJtKTsKPiArCj4gKwlkcm1fZGV2X3B1dChkcm0pOwo+ICsKPiArCWRtYV9mcmVl X3djKHYzZC0+ZGV2LCA0MDk2LCB2M2QtPm1tdV9zY3JhdGNoLCB2M2QtPm1tdV9zY3JhdGNoX3Bh ZGRyKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgdjNkX3BsYXRmb3JtX2RyaXZlciA9IHsKPiArCS5wcm9iZQkJPSB2M2RfcGxhdGZv cm1fZHJtX3Byb2JlLAo+ICsJLnJlbW92ZQkJPSB2M2RfcGxhdGZvcm1fZHJtX3JlbW92ZSwKPiAr CS5kcml2ZXIJCT0gewo+ICsJCS5uYW1lCT0gInYzZCIsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0g djNkX29mX21hdGNoLAo+ICsJfSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgX19pbml0IHYzZF9k cm1fcmVnaXN0ZXIodm9pZCkKPiArewo+ICsJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rl cigmdjNkX3BsYXRmb3JtX2RyaXZlcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCB2 M2RfZHJtX3VucmVnaXN0ZXIodm9pZCkKPiArewo+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0 ZXIoJnYzZF9wbGF0Zm9ybV9kcml2ZXIpOwo+ICt9Cj4gKwo+ICttb2R1bGVfaW5pdCh2M2RfZHJt X3JlZ2lzdGVyKTsKPiArbW9kdWxlX2V4aXQodjNkX2RybV91bnJlZ2lzdGVyKTsKPiArCj4gK01P RFVMRV9BTElBUygicGxhdGZvcm06djNkLWRybSIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkJy b2FkY29tIFYzRCBEUk0gRHJpdmVyIik7Cj4gK01PRFVMRV9BVVRIT1IoIkVyaWMgQW5ob2x0IDxl cmljQGFuaG9sdC5uZXQ+Iik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdjNk L3YzZF9kcnYuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5k MGQzMjNhZmI0M2QKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92 M2RfZHJ2LmgKPiBAQCAtMCwwICsxLDMwNSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCsKPiArLyogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQnJvYWRjb20gKi8KPiAr Cj4gKyNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybVAu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZW5jb2Rlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9n ZW0uaD4KPiArI2luY2x1ZGUgPGRybS9ncHVfc2NoZWR1bGVyLmg+Cj4gKwo+ICsjZGVmaW5lIEdN UF9HUkFOVUxBUklUWSAoMTI4ICogMTAyNCkKPiArCj4gKy8qIEVudW0gZm9yIGVhY2ggb2YgdGhl IFYzRCBxdWV1ZXMuICBXZSBtYWludGFpbiB2YXJpb3VzIHF1ZXVlCj4gKyAqIHRyYWNraW5nIGFz IGFuIGFycmF5IGJlY2F1c2UgYXQgc29tZSBwb2ludCB3ZSdsbCB3YW50IHRvIHN1cHBvcnQKPiAr ICogdGhlIFRGVSAodGV4dHVyZSBmb3JtYXR0aW5nIHVuaXQpIGFzIGFub3RoZXIgcXVldWUuCj4g KyAqLwo+ICtlbnVtIHYzZF9xdWV1ZSB7Cj4gKwlWM0RfQklOLAo+ICsJVjNEX1JFTkRFUiwKPiAr fTsKPiArCj4gKyNkZWZpbmUgVjNEX01BWF9RVUVVRVMgKFYzRF9SRU5ERVIgKyAxKQo+ICsKPiAr c3RydWN0IHYzZF9xdWV1ZV9zdGF0ZSB7Cj4gKwlzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgc2No ZWQ7Cj4gKwo+ICsJdTY0IGZlbmNlX2NvbnRleHQ7Cj4gKwl1NjQgZW1pdF9zZXFubzsKPiArCXU2 NCBmaW5pc2hlZF9zZXFubzsKPiArfTsKPiArCj4gK3N0cnVjdCB2M2RfZGV2IHsKPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkcm07Cj4gKwo+ICsJLyogU2hvcnQgcmVwcmVzZW50YXRpb24gKGUuZy4g MzMsIDQxKSBvZiB0aGUgVjNEIHRlY2ggdmVyc2lvbgo+ICsJICogYW5kIHJldmlzaW9uLgo+ICsJ ICovCj4gKwlpbnQgdmVyOwo+ICsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cj4gKwl2b2lkIF9faW9tZW0gKmh1Yl9yZWdzOwo+ICsJdm9p ZCBfX2lvbWVtICpjb3JlX3JlZ3NbM107Cj4gKwl2b2lkIF9faW9tZW0gKmJyaWRnZV9yZWdzOwo+ ICsJdm9pZCBfX2lvbWVtICpnY2FfcmVnczsKPiArCXN0cnVjdCBjbGsgKmNsazsKPiArCj4gKwkv KiBWaXJ0dWFsIGFuZCBETUEgYWRkcmVzc2VzIG9mIHRoZSBzaW5nbGUgc2hhcmVkIHBhZ2UgdGFi bGUuICovCj4gKwl2b2xhdGlsZSB1MzIgKnB0Owo+ICsJZG1hX2FkZHJfdCBwdF9wYWRkcjsKPiAr Cj4gKwkvKiBWaXJ0dWFsIGFuZCBETUEgYWRkcmVzc2VzIG9mIHRoZSBNTVUncyBzY3JhdGNoIHBh Z2UuICBXaGVuCj4gKwkgKiBhIHJlYWQgb3Igd3JpdGUgaXMgaW52YWxpZCBpbiB0aGUgTU1VLCBp dCB3aWxsIGJlCj4gKwkgKiByZWRpcmVjdGVkIGhlcmUuCj4gKwkgKi8KPiArCXZvaWQgKm1tdV9z Y3JhdGNoOwo+ICsJZG1hX2FkZHJfdCBtbXVfc2NyYXRjaF9wYWRkcjsKPiArCj4gKwkvKiBOdW1i ZXIgb2YgVjNEIGNvcmVzLiAqLwo+ICsJdTMyIGNvcmVzOwo+ICsKPiArCS8qIEFsbG9jYXRvciBt YW5hZ2luZyB0aGUgYWRkcmVzcyBzcGFjZS4gIEFsbCB1bml0cyBhcmUgaW4KPiArCSAqIG51bWJl ciBvZiBwYWdlcy4KPiArCSAqLwo+ICsJc3RydWN0IGRybV9tbSBtbTsKPiArCXNwaW5sb2NrX3Qg bW1fbG9jazsKPiArCj4gKwlzdHJ1Y3QgdjNkX2JvICpvdmVyZmxvd19ibzsKPiArCXN0cnVjdCB3 b3JrX3N0cnVjdCBvdmVyZmxvd19tZW1fd29yazsKPiArCj4gKwlzdHJ1Y3QgdjNkX2V4ZWNfaW5m byAqYmluX2pvYjsKPiArCXN0cnVjdCB2M2RfZXhlY19pbmZvICpyZW5kZXJfam9iOwo+ICsKPiAr CXN0cnVjdCB2M2RfcXVldWVfc3RhdGUgcXVldWVbVjNEX01BWF9RVUVVRVNdOwo+ICsKPiArCS8q IFNwaW5sb2NrIHVzZWQgdG8gc3luY2hyb25pemUgdGhlIG92ZXJmbG93IG1lbW9yeQo+ICsJICog bWFuYWdlbWVudCBhZ2FpbnN0IGJpbiBqb2Igc3VibWlzc2lvbi4KPiArCSAqLwo+ICsJc3Bpbmxv Y2tfdCBqb2JfbG9jazsKPiArCj4gKwkvKiBQcm90ZWN0cyBib19zdGF0cyAqLwo+ICsJc3RydWN0 IG11dGV4IGJvX2xvY2s7Cj4gKwo+ICsJLyogTG9jayB0YWtlbiB3aGVuIHJlc2V0dGluZyB0aGUg R1BVLCB0byBrZWVwIG11bHRpcGxlCj4gKwkgKiBwcm9jZXNzZXMgZnJvbSB0cnlpbmcgdG8gcGFy ayB0aGUgc2NoZWR1bGVyIHRocmVhZHMgYW5kCj4gKwkgKiByZXNldCBhdCBvbmNlLgo+ICsJICov Cj4gKwlzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsKPiArCj4gKwlzdHJ1Y3Qgewo+ICsJCXUzMiBu dW1fYWxsb2NhdGVkOwo+ICsJCXUzMiBwYWdlc19hbGxvY2F0ZWQ7Cj4gKwl9IGJvX3N0YXRzOwo+ ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgdjNkX2RldiAqCj4gK3RvX3YzZF9kZXYo c3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJcmV0dXJuIChzdHJ1Y3QgdjNkX2RldiAq KWRldi0+ZGV2X3ByaXZhdGU7Cj4gK30KPiArCj4gKy8qIFRoZSBwZXItZmQgc3RydWN0LCB3aGlj aCB0cmFja3MgdGhlIE1NVSBtYXBwaW5ncy4gKi8KPiArc3RydWN0IHYzZF9maWxlX3ByaXYgewo+ ICsJc3RydWN0IHYzZF9kZXYgKnYzZDsKPiArCj4gKwlzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSBz Y2hlZF9lbnRpdHlbVjNEX01BWF9RVUVVRVNdOwo+ICt9Owo+ICsKPiArLyogVHJhY2tzIGEgbWFw cGluZyBvZiBhIEJPIGludG8gYSBwZXItZmQgYWRkcmVzcyBzcGFjZSAqLwo+ICtzdHJ1Y3QgdjNk X3ZtYSB7Cj4gKwlzdHJ1Y3QgdjNkX3BhZ2VfdGFibGUgKnB0Owo+ICsJc3RydWN0IGxpc3RfaGVh ZCBsaXN0OyAvKiBlbnRyeSBpbiB2M2RfYm8udm1hcyAqLwo+ICt9Owo+ICsKPiArc3RydWN0IHYz ZF9ibyB7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgYmFzZTsKPiArCj4gKwlzdHJ1Y3QgbXV0 ZXggbG9jazsKPiArCj4gKwlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKPiArCj4gKwl1MzIgcGFn ZXNfcmVmY291bnQ7Cj4gKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwo+ICsJc3RydWN0IHNnX3RhYmxl ICpzZ3Q7Cj4gKwl2b2lkICp2YWRkcjsKPiArCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHZtYXM7ICAg IC8qIGxpc3Qgb2YgdjNkX3ZtYSAqLwo+ICsKPiArCS8qIExpc3QgZW50cnkgZm9yIHRoZSBCTydz IHBvc2l0aW9uIGluCj4gKwkgKiB2M2RfZXhlY19pbmZvLT51bnJlZl9saXN0Cj4gKwkgKi8KPiAr CXN0cnVjdCBsaXN0X2hlYWQgdW5yZWZfaGVhZDsKPiArCj4gKwkvKiBub3JtYWxseSAocmVzdiA9 PSAmX3Jlc3YpIGV4Y2VwdCBmb3IgaW1wb3J0ZWQgYm8ncyAqLwo+ICsJc3RydWN0IHJlc2VydmF0 aW9uX29iamVjdCAqcmVzdjsKPiArCXN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgX3Jlc3Y7Cj4g K307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB2M2RfYm8gKgo+ICt0b192M2RfYm8oc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpibykKPiArewo+ICsJcmV0dXJuIChzdHJ1Y3QgdjNkX2JvICop Ym87Cj4gK30KPiArCj4gK3N0cnVjdCB2M2RfZmVuY2Ugewo+ICsJc3RydWN0IGRtYV9mZW5jZSBi YXNlOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKPiArCS8qIHYzZCBzZXFubyBmb3Igc2ln bmFsZWQoKSB0ZXN0ICovCj4gKwl1NjQgc2Vxbm87Cj4gKwllbnVtIHYzZF9xdWV1ZSBxdWV1ZTsK PiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHYzZF9mZW5jZSAqCj4gK3RvX3YzZF9m ZW5jZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKPiArewo+ICsJcmV0dXJuIChzdHJ1Y3QgdjNk X2ZlbmNlICopZmVuY2U7Cj4gK30KPiArCj4gKyNkZWZpbmUgVjNEX1JFQUQob2Zmc2V0KSByZWFk bCh2M2QtPmh1Yl9yZWdzICsgb2Zmc2V0KQo+ICsjZGVmaW5lIFYzRF9XUklURShvZmZzZXQsIHZh bCkgd3JpdGVsKHZhbCwgdjNkLT5odWJfcmVncyArIG9mZnNldCkKPiArCj4gKyNkZWZpbmUgVjNE X0JSSURHRV9SRUFEKG9mZnNldCkgcmVhZGwodjNkLT5icmlkZ2VfcmVncyArIG9mZnNldCkKPiAr I2RlZmluZSBWM0RfQlJJREdFX1dSSVRFKG9mZnNldCwgdmFsKSB3cml0ZWwodmFsLCB2M2QtPmJy aWRnZV9yZWdzICsgb2Zmc2V0KQo+ICsKPiArI2RlZmluZSBWM0RfR0NBX1JFQUQob2Zmc2V0KSBy ZWFkbCh2M2QtPmdjYV9yZWdzICsgb2Zmc2V0KQo+ICsjZGVmaW5lIFYzRF9HQ0FfV1JJVEUob2Zm c2V0LCB2YWwpIHdyaXRlbCh2YWwsIHYzZC0+Z2NhX3JlZ3MgKyBvZmZzZXQpCj4gKwo+ICsjZGVm aW5lIFYzRF9DT1JFX1JFQUQoY29yZSwgb2Zmc2V0KSByZWFkbCh2M2QtPmNvcmVfcmVnc1tjb3Jl XSArIG9mZnNldCkKPiArI2RlZmluZSBWM0RfQ09SRV9XUklURShjb3JlLCBvZmZzZXQsIHZhbCkg d3JpdGVsKHZhbCwgdjNkLT5jb3JlX3JlZ3NbY29yZV0gKyBvZmZzZXQpCj4gKwo+ICtzdHJ1Y3Qg djNkX2pvYiB7Cj4gKwlzdHJ1Y3QgZHJtX3NjaGVkX2pvYiBiYXNlOwo+ICsKPiArCXN0cnVjdCB2 M2RfZXhlY19pbmZvICpleGVjOwo+ICsKPiArCS8qIEFuIG9wdGlvbmFsIGZlbmNlIHVzZXJzcGFj ZSBjYW4gcGFzcyBpbiBmb3IgdGhlIGpvYiB0byBkZXBlbmQgb24uICovCj4gKwlzdHJ1Y3QgZG1h X2ZlbmNlICppbl9mZW5jZTsKPiArCj4gKwkvKiB2M2QgZmVuY2UgdG8gYmUgc2lnbmFsZWQgYnkg SVJRIGhhbmRsZXIgd2hlbiB0aGUgam9iIGlzIGNvbXBsZXRlLiAqLwo+ICsJc3RydWN0IGRtYV9m ZW5jZSAqZG9uZV9mZW5jZTsKPiArCj4gKwkvKiBHUFUgdmlydHVhbCBhZGRyZXNzZXMgb2YgdGhl IHN0YXJ0L2VuZCBvZiB0aGUgQ0wgam9iLiAqLwo+ICsJdTMyIHN0YXJ0LCBlbmQ7Cj4gK307Cj4g Kwo+ICtzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyB7Cj4gKwlzdHJ1Y3QgdjNkX2RldiAqdjNkOwo+ICsK PiArCXN0cnVjdCB2M2Rfam9iIGJpbiwgcmVuZGVyOwo+ICsKPiArCS8qIEZlbmNlIGZvciB3aGVu IHRoZSBzY2hlZHVsZXIgY29uc2lkZXJzIHRoZSBiaW5uZXIgdG8gYmUKPiArCSAqIGRvbmUsIGZv ciByZW5kZXIgdG8gZGVwZW5kIG9uLgo+ICsJICovCj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICpiaW5f ZG9uZV9mZW5jZTsKPiArCj4gKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKPiArCj4gKwkvKiBUaGlz IGlzIHRoZSBhcnJheSBvZiBCT3MgdGhhdCB3ZXJlIGxvb2tlZCB1cCBhdCB0aGUgc3RhcnQgb2Yg ZXhlYy4gKi8KPiArCXN0cnVjdCB2M2RfYm8gKipibzsKPiArCXUzMiBib19jb3VudDsKPiArCj4g KwkvKiBMaXN0IG9mIG92ZXJmbG93IEJPcyB1c2VkIGluIHRoZSBqb2IgdGhhdCBuZWVkIHRvIGJl Cj4gKwkgKiByZWxlYXNlZCBvbmNlIHRoZSBqb2IgaXMgY29tcGxldGUuICBUaGUgY3VycnJlbnQg b3ZlcmZsb3cKPiArCSAqIEJPIHdpbGwgYWx3YXlzIGdldCBtb3ZlZCB0byB0aGUgbW9zdCByZWNl bnQgdjNkX2V4ZWNfaW5mbwo+ICsJICogYXMgYmluIGpvYnMgZ2V0IHN1Ym1pdHRlZC4KPiArCSAq Lwo+ICsJc3RydWN0IGxpc3RfaGVhZCB1bnJlZl9saXN0Owo+ICsKPiArCS8qIFN1Ym1pdHRlZCB0 aWxlIG1lbW9yeSBhbGxvY2F0aW9uIHN0YXJ0L3NpemUsIHRpbGUgc3RhdGUuICovCj4gKwl1MzIg cW1hLCBxbXMsIHF0czsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBfd2FpdF9mb3IgLSBtYWdpYyAo cmVnaXN0ZXIpIHdhaXQgbWFjcm8KPiArICoKPiArICogRG9lcyB0aGUgcmlnaHQgdGhpbmcgZm9y IG1vZGVzZXQgcGF0aHMgd2hlbiBydW4gdW5kZXIga2RnYiBvciBzaW1pbGFyIGF0b21pYwo+ICsg KiBjb250ZXh0cy4gTm90ZSB0aGF0IGl0J3MgaW1wb3J0YW50IHRoYXQgd2UgY2hlY2sgdGhlIGNv bmRpdGlvbiBhZ2FpbiBhZnRlcgo+ICsgKiBoYXZpbmcgdGltZWQgb3V0LCBzaW5jZSB0aGUgdGlt ZW91dCBjb3VsZCBiZSBkdWUgdG8gcHJlZW1wdGlvbiBvciBzaW1pbGFyIGFuZAo+ICsgKiB3ZSd2 ZSBuZXZlciBoYWQgYSBjaGFuY2UgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbiBiZWZvcmUgdGhlIHRp bWVvdXQuCj4gKyAqLwo+ICsjZGVmaW5lIF93YWl0X2ZvcihDT05ELCBNUywgVykgKHsgXAo+ICsJ dW5zaWduZWQgbG9uZyB0aW1lb3V0X18gPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhNUykg KyAxOwlcCj4gKwlpbnQgcmV0X18gPSAwOwkJCQkJCQlcCj4gKwl3aGlsZSAoIShDT05EKSkgewkJ CQkJCVwKPiArCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0X18pKSB7CQkJXAo+ICsJ CQlpZiAoIShDT05EKSkJCQkJCVwKPiArCQkJCXJldF9fID0gLUVUSU1FRE9VVDsJCQlcCj4gKwkJ CWJyZWFrOwkJCQkJCVwKPiArCQl9CQkJCQkJCVwKPiArCQlpZiAoVyAmJiBkcm1fY2FuX3NsZWVw KCkpICB7CQkJCVwKCmRybV9jYW5fc2xlZXAgY29uc2lkZXJlZCBoYXJtZnVsIC0gaXQgYWxsb3dz IHlvdSB0byBoYXZlIGh1Z2UgYnVzeS1zcGluCndhaXRzIGluIGlycS1vZmYgc2VjdGlvbnMsIHdo aWNoIGlzbid0IGNvb2wuIFNpbmNlIHRoaXMgaXNuJ3QgYSBtb2Rlc2V0CmRyaXZlciBJJ2QgbnVr ZSB0aGlzLiBpOTE1IGhhZCBhIGJ1bmNoIG9mIGJ1Z3Mgd2hlcmUgd2UndmUgYnVzeS1zcHVuIGZv cgp0ZW5zIG9mIG1zZWMgd2hpbGUgZGlzYWJsaW5nIGlycXMsIGFuZCBzaW5jZSB0aGUgbWFnaWMg cHJldmVudCB0aGUgdXN1YWwKbWlnaHRfc2xpcCBzcGxhdCB3ZSBkaWRuJ3Qgbm90aWNlIGZvciBh IGxvbmcgdGltZSA6LS8KCj4gKwkJCW1zbGVlcChXKTsJCQkJCVwKPiArCQl9IGVsc2UgewkJCQkJ CVwKPiArCQkJY3B1X3JlbGF4KCk7CQkJCQlcCj4gKwkJfQkJCQkJCQlcCj4gKwl9CQkJCQkJCQlc Cj4gKwlyZXRfXzsJCQkJCQkJCVwKPiArfSkKPiArCj4gKyNkZWZpbmUgd2FpdF9mb3IoQ09ORCwg TVMpIF93YWl0X2ZvcihDT05ELCBNUywgMSkKPiArCj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQg bG9uZyBuc2Vjc190b19qaWZmaWVzX3RpbWVvdXQoY29uc3QgdTY0IG4pCj4gK3sKPiArCS8qIG5z ZWNzX3RvX2ppZmZpZXM2NCgpIGRvZXMgbm90IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cgKi8KPiAr CWlmIChOU0VDX1BFUl9TRUMgJSBIWiAmJgo+ICsJICAgIGRpdl91NjQobiwgTlNFQ19QRVJfU0VD KSA+PSBNQVhfSklGRllfT0ZGU0VUIC8gSFopCj4gKwkJcmV0dXJuIE1BWF9KSUZGWV9PRkZTRVQ7 Cj4gKwo+ICsJcmV0dXJuIG1pbl90KHU2NCwgTUFYX0pJRkZZX09GRlNFVCwgbnNlY3NfdG9famlm ZmllczY0KG4pICsgMSk7Cj4gK30KPiArCj4gKy8qIHYzZF9iby5jICovCj4gK3ZvaWQgdjNkX2Zy ZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaik7Cj4gK3N0cnVjdCB2M2Rf Ym8gKnYzZF9ib19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCj4gKwkJCSAgICAgc2l6ZV90IHNpemUpOwo+ICtpbnQgdjNkX2NyZWF0ZV9i b19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICsJCQlzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cj4gK2ludCB2M2RfbW1hcF9ib19pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICsJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2KTsKPiAraW50IHYzZF9nZXRfYm9fb2Zmc2V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7 Cj4gK2ludCB2M2RfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKPiAraW50IHYzZF9t bWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gK3N0 cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKnYzZF9wcmltZV9yZXNfb2JqKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKTsKPiAraW50IHYzZF9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gK3N0cnVjdCBzZ190YWJsZSAq djNkX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gK3N0 cnVjdCBkcm1fZ2VtX29iamVjdCAqdjNkX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ICsJCQkJCQkgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNo LAo+ICsJCQkJCQkgc3RydWN0IHNnX3RhYmxlICpzZ3QpOwo+ICt2b2lkICp2M2RfcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gK3ZvaWQgdjNkX3ByaW1lX3Z1bm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICsKPiArLyogdjNkX2Rl YnVnZnMuYyAqLwo+ICtpbnQgdjNkX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5v cik7Cj4gKwo+ICsvKiB2M2RfZmVuY2UuYyAqLwo+ICtleHRlcm4gY29uc3Qgc3RydWN0IGRtYV9m ZW5jZV9vcHMgdjNkX2ZlbmNlX29wczsKPiArc3RydWN0IGRtYV9mZW5jZSAqdjNkX2ZlbmNlX2Ny ZWF0ZShzdHJ1Y3QgdjNkX2RldiAqdjNkLCBlbnVtIHYzZF9xdWV1ZSBxdWV1ZSk7Cj4gKwo+ICsv KiB2M2RfZ2VtLmMgKi8KPiAraW50IHYzZF9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKPiArdm9pZCB2M2RfZ2VtX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gK2lu dCB2M2Rfc3VibWl0X2NsX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs Cj4gKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKPiAraW50IHYzZF93YWl0X2JvX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJICAgICAgc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ICt2b2lkIHYzZF9leGVjX3B1dChzdHJ1Y3QgdjNkX2V4 ZWNfaW5mbyAqZXhlYyk7Cj4gK3ZvaWQgdjNkX3Jlc2V0KHN0cnVjdCB2M2RfZGV2ICp2M2QpOwo+ ICt2b2lkIHYzZF9pbnZhbGlkYXRlX2NhY2hlcyhzdHJ1Y3QgdjNkX2RldiAqdjNkKTsKPiArdm9p ZCB2M2RfZmx1c2hfY2FjaGVzKHN0cnVjdCB2M2RfZGV2ICp2M2QpOwo+ICsKPiArLyogdjNkX2ly cS5jICovCj4gK3ZvaWQgdjNkX2lycV9pbml0KHN0cnVjdCB2M2RfZGV2ICp2M2QpOwo+ICt2b2lk IHYzZF9pcnFfZW5hYmxlKHN0cnVjdCB2M2RfZGV2ICp2M2QpOwo+ICt2b2lkIHYzZF9pcnFfZGlz YWJsZShzdHJ1Y3QgdjNkX2RldiAqdjNkKTsKPiArdm9pZCB2M2RfaXJxX3Jlc2V0KHN0cnVjdCB2 M2RfZGV2ICp2M2QpOwo+ICsKPiArLyogdjNkX21tdS5jICovCj4gK2ludCB2M2RfbW11X2dldF9v ZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCB2M2RfYm8gKmJvLAo+ICsJ CSAgICAgICB1MzIgKm9mZnNldCk7Cj4gK2ludCB2M2RfbW11X3NldF9wYWdlX3RhYmxlKHN0cnVj dCB2M2RfZGV2ICp2M2QpOwo+ICt2b2lkIHYzZF9tbXVfaW5zZXJ0X3B0ZXMoc3RydWN0IHYzZF9i byAqYm8pOwo+ICt2b2lkIHYzZF9tbXVfcmVtb3ZlX3B0ZXMoc3RydWN0IHYzZF9ibyAqYm8pOwo+ ICsKPiArLyogdjNkX3NjaGVkLmMgKi8KPiAraW50IHYzZF9zY2hlZF9pbml0KHN0cnVjdCB2M2Rf ZGV2ICp2M2QpOwo+ICt2b2lkIHYzZF9zY2hlZF9maW5pKHN0cnVjdCB2M2RfZGV2ICp2M2QpOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9mZW5jZS5jIGIvZHJpdmVycy9n cHUvZHJtL3YzZC92M2RfZmVuY2UuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMDAwLi43YTE4OGNkOGQ3MWEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3YzZC92M2RfZmVuY2UuYwo+IEBAIC0wLDAgKzEsNTggQEAKPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCj4gKy8qIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEJy b2FkY29tICovCj4gKwo+ICsjaW5jbHVkZSAidjNkX2Rydi5oIgo+ICsKPiArc3RydWN0IGRtYV9m ZW5jZSAqdjNkX2ZlbmNlX2NyZWF0ZShzdHJ1Y3QgdjNkX2RldiAqdjNkLCBlbnVtIHYzZF9xdWV1 ZSBxdWV1ZSkKPiArewo+ICsJc3RydWN0IHYzZF9mZW5jZSAqZmVuY2U7Cj4gKwo+ICsJZmVuY2Ug PSBremFsbG9jKHNpemVvZigqZmVuY2UpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZmVuY2UpCj4g KwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJZmVuY2UtPmRldiA9IHYzZC0+ZHJt Owo+ICsJZmVuY2UtPnF1ZXVlID0gcXVldWU7Cj4gKwlmZW5jZS0+c2Vxbm8gPSArK3YzZC0+cXVl dWVbcXVldWVdLmVtaXRfc2Vxbm87Cj4gKwlkbWFfZmVuY2VfaW5pdCgmZmVuY2UtPmJhc2UsICZ2 M2RfZmVuY2Vfb3BzLCAmdjNkLT5qb2JfbG9jaywKPiArCQkgICAgICAgdjNkLT5xdWV1ZVtxdWV1 ZV0uZmVuY2VfY29udGV4dCwgZmVuY2UtPnNlcW5vKTsKPiArCj4gKwlyZXR1cm4gJmZlbmNlLT5i YXNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqdjNkX2ZlbmNlX2dldF9kcml2ZXJf bmFtZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKPiArewo+ICsJcmV0dXJuICJ2M2QiOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqdjNkX2ZlbmNlX2dldF90aW1lbGluZV9uYW1lKHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgdjNkX2ZlbmNlICpmID0gdG9f djNkX2ZlbmNlKGZlbmNlKTsKPiArCj4gKwlpZiAoZi0+cXVldWUgPT0gVjNEX0JJTikKPiArCQly ZXR1cm4gInYzZC1iaW4iOwo+ICsJZWxzZQo+ICsJCXJldHVybiAidjNkLXJlbmRlciI7Cj4gK30K PiArCj4gK3N0YXRpYyBib29sIHYzZF9mZW5jZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBkbWFf ZmVuY2UgKmZlbmNlKQo+ICt7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQoKVGhpcyBjYWxsYmFjayBp cyBvcHRpb25hbCBhbmQgbm90IG5lZWRlZCB3aGVuIHNpZ25hbGxpbmcgaXMgYWx3YXlzIGVuYWJs ZWQKZm9yIHlvdXIgZmVuY2VzLgoKPiArCj4gK3N0YXRpYyBib29sIHYzZF9mZW5jZV9zaWduYWxl ZChzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKPiArewo+ICsJc3RydWN0IHYzZF9mZW5jZSAqZiA9 IHRvX3YzZF9mZW5jZShmZW5jZSk7Cj4gKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2Rl dihmLT5kZXYpOwo+ICsKPiArCXJldHVybiB2M2QtPnF1ZXVlW2YtPnF1ZXVlXS5maW5pc2hlZF9z ZXFubyA+PSBmLT5zZXFubzsKPiArfQo+ICsKPiArY29uc3Qgc3RydWN0IGRtYV9mZW5jZV9vcHMg djNkX2ZlbmNlX29wcyA9IHsKPiArCS5nZXRfZHJpdmVyX25hbWUgPSB2M2RfZmVuY2VfZ2V0X2Ry aXZlcl9uYW1lLAo+ICsJLmdldF90aW1lbGluZV9uYW1lID0gdjNkX2ZlbmNlX2dldF90aW1lbGlu ZV9uYW1lLAo+ICsJLmVuYWJsZV9zaWduYWxpbmcgPSB2M2RfZmVuY2VfZW5hYmxlX3NpZ25hbGlu ZywKPiArCS5zaWduYWxlZCA9IHYzZF9mZW5jZV9zaWduYWxlZCwKPiArCS53YWl0ID0gZG1hX2Zl bmNlX2RlZmF1bHRfd2FpdCwKPiArCS5yZWxlYXNlID0gZG1hX2ZlbmNlX2ZyZWUsCj4gK307Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2dlbS5jIGIvZHJpdmVycy9ncHUv ZHJtL3YzZC92M2RfZ2VtLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uNDI0YmQ2M2U0ZWE4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS92M2QvdjNkX2dlbS5jCj4gQEAgLTAsMCArMSw2NzEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjArCj4gKy8qIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEJyb2FkY29t ICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fc3lu Y29iai5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPiArI2luY2x1 ZGUgPGxpbnV4L3NjaGVkL3NpZ25hbC5oPgo+ICsKPiArI2luY2x1ZGUgInVhcGkvZHJtL3YzZF9k cm0uaCIKPiArI2luY2x1ZGUgInYzZF9kcnYuaCIKPiArI2luY2x1ZGUgInYzZF9yZWdzLmgiCj4g KyNpbmNsdWRlICJ2M2RfdHJhY2UuaCIKPiArCj4gK3N0YXRpYyB2b2lkCj4gK3YzZF9pbml0X2Nv cmUoc3RydWN0IHYzZF9kZXYgKnYzZCwgaW50IGNvcmUpCj4gK3sKPiArCS8qIFNldCBPVlJUTVVP VVQsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHRleHR1cmUgc2FtcGxlciB1bmlmb3JtCj4gKwkgKiBj b25maWd1cmF0aW9uJ3MgdG11IG91dHB1dCB0eXBlIGZpZWxkIGlzIHVzZWQsIGluc3RlYWQgb2YK PiArCSAqIHVzaW5nIHRoZSBoYXJkd2FyZSBkZWZhdWx0IGJlaGF2aW9yIGJhc2VkIG9uIHRoZSB0 ZXh0dXJlCj4gKwkgKiB0eXBlLiAgSWYgeW91IHdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHlv dSBjYW4gc3RpbGwgcHV0Cj4gKwkgKiAiMiIgaW4gdGhlIGluZGlyZWN0IHRleHR1cmUgc3RhdGUn cyBvdXRwdXRfdHlwZSBmaWVsZC4KPiArCSAqLwo+ICsJVjNEX0NPUkVfV1JJVEUoY29yZSwgVjNE X0NUTF9NSVNDQ0ZHLCBWM0RfTUlTQ0NGR19PVlJUTVVPVVQpOwo+ICsKPiArCS8qIFdoZW5ldmVy IHdlIGZsdXNoIHRoZSBMMlQgY2FjaGUsIHdlIGFsd2F5cyB3YW50IHRvIGZsdXNoCj4gKwkgKiB0 aGUgd2hvbGUgdGhpbmcuCj4gKwkgKi8KPiArCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9DVExf TDJURkxTVEEsIDApOwo+ICsJVjNEX0NPUkVfV1JJVEUoY29yZSwgVjNEX0NUTF9MMlRGTEVORCwg fjApOwo+ICt9Cj4gKwo+ICsvKiBTZXRzIGludmFyaWFudCBzdGF0ZSBmb3IgdGhlIEhXLiAqLwo+ ICtzdGF0aWMgdm9pZAo+ICt2M2RfaW5pdF9od19zdGF0ZShzdHJ1Y3QgdjNkX2RldiAqdjNkKQo+ ICt7Cj4gKwl2M2RfaW5pdF9jb3JlKHYzZCwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4g K3YzZF9pZGxlX2F4aShzdHJ1Y3QgdjNkX2RldiAqdjNkLCBpbnQgY29yZSkKPiArewo+ICsJVjNE X0NPUkVfV1JJVEUoY29yZSwgVjNEX0dNUF9DRkcsIFYzRF9HTVBfQ0ZHX1NUT1BfUkVRKTsKPiAr Cj4gKwlpZiAod2FpdF9mb3IoKFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0dNUF9TVEFUVVMpICYK PiArCQkgICAgICAoVjNEX0dNUF9TVEFUVVNfUkRfQ09VTlRfTUFTSyB8Cj4gKwkJICAgICAgIFYz RF9HTVBfU1RBVFVTX1dSX0NPVU5UX01BU0sgfAo+ICsJCSAgICAgICBWM0RfR01QX1NUQVRVU19D RkdfQlVTWSkpID09IDAsIDEwMCkpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byB3YWl0IGZv ciBzYWZlIEdNUCBzaHV0ZG93blxuIik7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4g K3YzZF9pZGxlX2djYShzdHJ1Y3QgdjNkX2RldiAqdjNkKQo+ICt7Cj4gKwlpZiAodjNkLT52ZXIg Pj0gNDEpCj4gKwkJcmV0dXJuOwo+ICsKPiArCVYzRF9HQ0FfV1JJVEUoVjNEX0dDQV9TQUZFX1NI VVRET1dOLCBWM0RfR0NBX1NBRkVfU0hVVERPV05fRU4pOwo+ICsKPiArCWlmICh3YWl0X2Zvcigo VjNEX0dDQV9SRUFEKFYzRF9HQ0FfU0FGRV9TSFVURE9XTl9BQ0spICYKPiArCQkgICAgICBWM0Rf R0NBX1NBRkVfU0hVVERPV05fQUNLX0FDS0VEKSA9PQo+ICsJCSAgICAgVjNEX0dDQV9TQUZFX1NI VVRET1dOX0FDS19BQ0tFRCwgMTAwKSkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIHdhaXQg Zm9yIHNhZmUgR0NBIHNodXRkb3duXG4iKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQK PiArdjNkX3Jlc2V0X3YzZChzdHJ1Y3QgdjNkX2RldiAqdjNkKQo+ICt7Cj4gKwlpbnQgdmVyc2lv biA9IFYzRF9CUklER0VfUkVBRChWM0RfVE9QX0dSX0JSSURHRV9SRVZJU0lPTik7Cj4gKwo+ICsJ aWYgKFYzRF9HRVRfRklFTEQodmVyc2lvbiwgVjNEX1RPUF9HUl9CUklER0VfTUFKT1IpID09IDIp IHsKPiArCQlWM0RfQlJJREdFX1dSSVRFKFYzRF9UT1BfR1JfQlJJREdFX1NXX0lOSVRfMCwKPiAr CQkJCSBWM0RfVE9QX0dSX0JSSURHRV9TV19JTklUXzBfVjNEX0NMS18xMDhfU1dfSU5JVCk7Cj4g KwkJVjNEX0JSSURHRV9XUklURShWM0RfVE9QX0dSX0JSSURHRV9TV19JTklUXzAsIDApOwo+ICsK PiArCQkvKiBHRlhILTEzODM6IFRoZSBTV19JTklUIG1heSBjYXVzZSBhIHN0cmF5IHdyaXRlIHRv IGFkZHJlc3MgMAo+ICsJCSAqIG9mIHRoZSB1bml0LCBzbyByZXNldCBpdCB0byBpdHMgcG93ZXIt b24gdmFsdWUgaGVyZS4KPiArCQkgKi8KPiArCQlWM0RfV1JJVEUoVjNEX0hVQl9BWElDRkcsIFYz RF9IVUJfQVhJQ0ZHX01BWF9MRU5fTUFTSyk7Cj4gKwl9IGVsc2Ugewo+ICsJCVdBUk5fT05fT05D RShWM0RfR0VUX0ZJRUxEKHZlcnNpb24sCj4gKwkJCQkJICAgVjNEX1RPUF9HUl9CUklER0VfTUFK T1IpICE9IDcpOwo+ICsJCVYzRF9CUklER0VfV1JJVEUoVjNEX1RPUF9HUl9CUklER0VfU1dfSU5J VF8xLAo+ICsJCQkJIFYzRF9UT1BfR1JfQlJJREdFX1NXX0lOSVRfMV9WM0RfQ0xLXzEwOF9TV19J TklUKTsKPiArCQlWM0RfQlJJREdFX1dSSVRFKFYzRF9UT1BfR1JfQlJJREdFX1NXX0lOSVRfMSwg MCk7Cj4gKwl9Cj4gKwo+ICsJdjNkX2luaXRfaHdfc3RhdGUodjNkKTsKPiArfQo+ICsKPiArdm9p ZAo+ICt2M2RfcmVzZXQoc3RydWN0IHYzZF9kZXYgKnYzZCkKPiArewo+ICsJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IHYzZC0+ZHJtOwo+ICsKPiArCURSTV9FUlJPUigiUmVzZXR0aW5nIEdQVS5c biIpOwo+ICsJdHJhY2VfdjNkX3Jlc2V0X2JlZ2luKGRldik7Cj4gKwo+ICsJLyogWFhYOiBvbmx5 IG5lZWRlZCBmb3Igc2FmZSBwb3dlcmRvd24sIG5vdCByZXNldC4gKi8KPiArCWlmIChmYWxzZSkK PiArCQl2M2RfaWRsZV9heGkodjNkLCAwKTsKPiArCj4gKwl2M2RfaWRsZV9nY2EodjNkKTsKPiAr CXYzZF9yZXNldF92M2QodjNkKTsKPiArCj4gKwl2M2RfbW11X3NldF9wYWdlX3RhYmxlKHYzZCk7 Cj4gKwl2M2RfaXJxX3Jlc2V0KHYzZCk7Cj4gKwo+ICsJdHJhY2VfdjNkX3Jlc2V0X2VuZChkZXYp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt2M2RfZmx1c2hfbDMoc3RydWN0IHYzZF9kZXYg KnYzZCkKPiArewo+ICsJaWYgKHYzZC0+dmVyIDwgNDEpIHsKPiArCQl1MzIgZ2NhX2N0cmwgPSBW M0RfR0NBX1JFQUQoVjNEX0dDQV9DQUNIRV9DVFJMKTsKPiArCj4gKwkJVjNEX0dDQV9XUklURShW M0RfR0NBX0NBQ0hFX0NUUkwsCj4gKwkJCSAgICAgIGdjYV9jdHJsIHwgVjNEX0dDQV9DQUNIRV9D VFJMX0ZMVVNIKTsKPiArCj4gKwkJaWYgKHYzZC0+dmVyIDwgMzMpIHsKPiArCQkJVjNEX0dDQV9X UklURShWM0RfR0NBX0NBQ0hFX0NUUkwsCj4gKwkJCQkgICAgICBnY2FfY3RybCAmIH5WM0RfR0NB X0NBQ0hFX0NUUkxfRkxVU0gpOwo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiArLyogSW52YWxpZGF0 ZXMgdGhlIChyZWFkLW9ubHkpIEwyIGNhY2hlLiAqLwo+ICtzdGF0aWMgdm9pZAo+ICt2M2RfaW52 YWxpZGF0ZV9sMihzdHJ1Y3QgdjNkX2RldiAqdjNkLCBpbnQgY29yZSkKPiArewo+ICsJVjNEX0NP UkVfV1JJVEUoY29yZSwgVjNEX0NUTF9MMkNBQ1RMLAo+ICsJCSAgICAgICBWM0RfTDJDQUNUTF9M MkNDTFIgfAo+ICsJCSAgICAgICBWM0RfTDJDQUNUTF9MMkNFTkEpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZAo+ICt2M2RfaW52YWxpZGF0ZV9sMXRkKHN0cnVjdCB2M2RfZGV2ICp2M2QsIGludCBj b3JlKQo+ICt7Cj4gKwlWM0RfQ09SRV9XUklURShjb3JlLCBWM0RfQ1RMX0wyVENBQ1RMLCBWM0Rf TDJUQ0FDVExfVE1VV0NGKTsKPiArCWlmICh3YWl0X2ZvcighKFYzRF9DT1JFX1JFQUQoY29yZSwg VjNEX0NUTF9MMlRDQUNUTCkgJgo+ICsJCSAgICAgICBWM0RfTDJUQ0FDVExfTDJURkxTKSwgMTAw KSkgewo+ICsJCURSTV9FUlJPUigiVGltZW91dCB3YWl0aW5nIGZvciBMMVQgd3JpdGUgY29tYmlu ZXIgZmx1c2hcbiIpOwo+ICsJfQo+ICt9Cj4gKwo+ICsvKiBJbnZhbGlkYXRlcyB0ZXh0dXJlIEwy IGNhY2hlbGluZXMgKi8KPiArc3RhdGljIHZvaWQKPiArdjNkX2ZsdXNoX2wydChzdHJ1Y3QgdjNk X2RldiAqdjNkLCBpbnQgY29yZSkKPiArewo+ICsJdjNkX2ludmFsaWRhdGVfbDF0ZCh2M2QsIGNv cmUpOwo+ICsKPiArCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9DVExfTDJUQ0FDVEwsCj4gKwkJ ICAgICAgIFYzRF9MMlRDQUNUTF9MMlRGTFMgfAo+ICsJCSAgICAgICBWM0RfU0VUX0ZJRUxEKFYz RF9MMlRDQUNUTF9GTE1fRkxVU0gsIFYzRF9MMlRDQUNUTF9GTE0pKTsKPiArCWlmICh3YWl0X2Zv cighKFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0NUTF9MMlRDQUNUTCkgJgo+ICsJCSAgICAgICBW M0RfTDJUQ0FDVExfTDJURkxTKSwgMTAwKSkgewo+ICsJCURSTV9FUlJPUigiVGltZW91dCB3YWl0 aW5nIGZvciBMMlQgZmx1c2hcbiIpOwo+ICsJfQo+ICt9Cj4gKwo+ICsvKiBJbnZhbGlkYXRlcyB0 aGUgc2xpY2UgY2FjaGVzLiAgVGhlc2UgYXJlIHJlYWQtb25seSBjYWNoZXMuICovCj4gK3N0YXRp YyB2b2lkCj4gK3YzZF9pbnZhbGlkYXRlX3NsaWNlcyhzdHJ1Y3QgdjNkX2RldiAqdjNkLCBpbnQg Y29yZSkKPiArewo+ICsJVjNEX0NPUkVfV1JJVEUoY29yZSwgVjNEX0NUTF9TTENBQ1RMLAo+ICsJ CSAgICAgICBWM0RfU0VUX0ZJRUxEKDB4ZiwgVjNEX1NMQ0FDVExfVFZDQ1MpIHwKPiArCQkgICAg ICAgVjNEX1NFVF9GSUVMRCgweGYsIFYzRF9TTENBQ1RMX1REQ0NTKSB8Cj4gKwkJICAgICAgIFYz RF9TRVRfRklFTEQoMHhmLCBWM0RfU0xDQUNUTF9VQ0MpIHwKPiArCQkgICAgICAgVjNEX1NFVF9G SUVMRCgweGYsIFYzRF9TTENBQ1RMX0lDQykpOwo+ICt9Cj4gKwo+ICsvKiBJbnZhbGlkYXRlcyB0 ZXh0dXJlIEwyIGNhY2hlbGluZXMgKi8KPiArc3RhdGljIHZvaWQKPiArdjNkX2ludmFsaWRhdGVf bDJ0KHN0cnVjdCB2M2RfZGV2ICp2M2QsIGludCBjb3JlKQo+ICt7Cj4gKwlWM0RfQ09SRV9XUklU RShjb3JlLAo+ICsJCSAgICAgICBWM0RfQ1RMX0wyVENBQ1RMLAo+ICsJCSAgICAgICBWM0RfTDJU Q0FDVExfTDJURkxTIHwKPiArCQkgICAgICAgVjNEX1NFVF9GSUVMRChWM0RfTDJUQ0FDVExfRkxN X0NMRUFSLCBWM0RfTDJUQ0FDVExfRkxNKSk7Cj4gKwlpZiAod2FpdF9mb3IoIShWM0RfQ09SRV9S RUFEKGNvcmUsIFYzRF9DVExfTDJUQ0FDVEwpICYKPiArCQkgICAgICAgVjNEX0wyVENBQ1RMX0wy VEZMUyksIDEwMCkpIHsKPiArCQlEUk1fRVJST1IoIlRpbWVvdXQgd2FpdGluZyBmb3IgTDJUIGlu dmFsaWRhdGVcbiIpOwo+ICsJfQo+ICt9Cj4gKwo+ICt2b2lkCj4gK3YzZF9pbnZhbGlkYXRlX2Nh Y2hlcyhzdHJ1Y3QgdjNkX2RldiAqdjNkKQo+ICt7Cj4gKwl2M2RfZmx1c2hfbDModjNkKTsKPiAr Cj4gKwl2M2RfaW52YWxpZGF0ZV9sMih2M2QsIDApOwo+ICsJdjNkX2ludmFsaWRhdGVfc2xpY2Vz KHYzZCwgMCk7Cj4gKwl2M2RfZmx1c2hfbDJ0KHYzZCwgMCk7Cj4gK30KPiArCj4gK3ZvaWQKPiAr djNkX2ZsdXNoX2NhY2hlcyhzdHJ1Y3QgdjNkX2RldiAqdjNkKQo+ICt7Cj4gKwl2M2RfaW52YWxp ZGF0ZV9sMXRkKHYzZCwgMCk7Cj4gKwl2M2RfaW52YWxpZGF0ZV9sMnQodjNkLCAwKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQKPiArdjNkX2F0dGFjaF9vYmplY3RfZmVuY2VzKHN0cnVjdCB2M2Rf ZXhlY19pbmZvICpleGVjKQo+ICt7Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICpvdXRfZmVuY2UgPSAm ZXhlYy0+cmVuZGVyLmJhc2Uuc19mZW5jZS0+ZmluaXNoZWQ7Cj4gKwlzdHJ1Y3QgdjNkX2JvICpi bzsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBleGVjLT5ib19jb3VudDsgaSsr KSB7Cj4gKwkJYm8gPSB0b192M2RfYm8oJmV4ZWMtPmJvW2ldLT5iYXNlKTsKPiArCj4gKwkJLyog WFhYOiBVc2Ugc2hhcmVkIGZlbmNlcyBmb3IgcmVhZC1vbmx5IG9iamVjdHMuICovCj4gKwkJcmVz ZXJ2YXRpb25fb2JqZWN0X2FkZF9leGNsX2ZlbmNlKGJvLT5yZXN2LCBvdXRfZmVuY2UpOwo+ICsJ fQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt2M2RfdW5sb2NrX2JvX3Jlc2VydmF0aW9ucyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkgICBzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqZXhl YywKPiArCQkJICAgc3RydWN0IHd3X2FjcXVpcmVfY3R4ICphY3F1aXJlX2N0eCkKPiArewo+ICsJ aW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGV4ZWMtPmJvX2NvdW50OyBpKyspIHsKPiAr CQlzdHJ1Y3QgdjNkX2JvICpibyA9IHRvX3YzZF9ibygmZXhlYy0+Ym9baV0tPmJhc2UpOwo+ICsK PiArCQl3d19tdXRleF91bmxvY2soJmJvLT5yZXN2LT5sb2NrKTsKPiArCX0KPiArCj4gKwl3d19h Y3F1aXJlX2ZpbmkoYWNxdWlyZV9jdHgpOwo+ICt9Cj4gKwo+ICsvKiBUYWtlcyB0aGUgcmVzZXJ2 YXRpb24gbG9jayBvbiBhbGwgdGhlIEJPcyBiZWluZyByZWZlcmVuY2VkLCBzbyB0aGF0Cj4gKyAq IGF0IHF1ZXVlIHN1Ym1pdCB0aW1lIHdlIGNhbiB1cGRhdGUgdGhlIHJlc2VydmF0aW9ucy4KPiAr ICoKPiArICogV2UgZG9uJ3QgbG9jayB0aGUgUkNMIHRoZSB0aWxlIGFsbG9jL3N0YXRlIEJPcywg b3Igb3ZlcmZsb3cgbWVtb3J5Cj4gKyAqIChhbGwgb2Ygd2hpY2ggYXJlIG9uIGV4ZWMtPnVucmVm X2xpc3QpLiAgVGhleSdyZSBlbnRpcmVseSBwcml2YXRlCj4gKyAqIHRvIHYzZCwgc28gd2UgZG9u J3QgYXR0YWNoIGRtYS1idWYgZmVuY2VzIHRvIHRoZW0uCj4gKyAqLwo+ICtzdGF0aWMgaW50Cj4g K3YzZF9sb2NrX2JvX3Jlc2VydmF0aW9ucyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkg c3RydWN0IHYzZF9leGVjX2luZm8gKmV4ZWMsCj4gKwkJCSBzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHgg KmFjcXVpcmVfY3R4KQo+ICt7Cj4gKwlpbnQgY29udGVuZGVkX2xvY2sgPSAtMTsKPiArCWludCBp LCByZXQ7Cj4gKwlzdHJ1Y3QgdjNkX2JvICpibzsKPiArCj4gKwl3d19hY3F1aXJlX2luaXQoYWNx dWlyZV9jdHgsICZyZXNlcnZhdGlvbl93d19jbGFzcyk7Cj4gKwo+ICtyZXRyeToKPiArCWlmIChj b250ZW5kZWRfbG9jayAhPSAtMSkgewo+ICsJCWJvID0gdG9fdjNkX2JvKCZleGVjLT5ib1tjb250 ZW5kZWRfbG9ja10tPmJhc2UpOwo+ICsJCXJldCA9IHd3X211dGV4X2xvY2tfc2xvd19pbnRlcnJ1 cHRpYmxlKCZiby0+cmVzdi0+bG9jaywKPiArCQkJCQkJICAgICAgIGFjcXVpcmVfY3R4KTsKPiAr CQlpZiAocmV0KSB7Cj4gKwkJCXd3X2FjcXVpcmVfZG9uZShhY3F1aXJlX2N0eCk7Cj4gKwkJCXJl dHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBleGVjLT5ib19j b3VudDsgaSsrKSB7Cj4gKwkJaWYgKGkgPT0gY29udGVuZGVkX2xvY2spCj4gKwkJCWNvbnRpbnVl Owo+ICsKPiArCQlibyA9IHRvX3YzZF9ibygmZXhlYy0+Ym9baV0tPmJhc2UpOwo+ICsKPiArCQly ZXQgPSB3d19tdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmJvLT5yZXN2LT5sb2NrLCBhY3F1aXJl X2N0eCk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlpbnQgajsKPiArCj4gKwkJCWZvciAoaiA9IDA7 IGogPCBpOyBqKyspIHsKPiArCQkJCWJvID0gdG9fdjNkX2JvKCZleGVjLT5ib1tqXS0+YmFzZSk7 Cj4gKwkJCQl3d19tdXRleF91bmxvY2soJmJvLT5yZXN2LT5sb2NrKTsKPiArCQkJfQo+ICsKPiAr CQkJaWYgKGNvbnRlbmRlZF9sb2NrICE9IC0xICYmIGNvbnRlbmRlZF9sb2NrID49IGkpIHsKPiAr CQkJCWJvID0gdG9fdjNkX2JvKCZleGVjLT5ib1tjb250ZW5kZWRfbG9ja10tPmJhc2UpOwo+ICsK PiArCQkJCXd3X211dGV4X3VubG9jaygmYm8tPnJlc3YtPmxvY2spOwo+ICsJCQl9Cj4gKwo+ICsJ CQlpZiAocmV0ID09IC1FREVBRExLKSB7Cj4gKwkJCQljb250ZW5kZWRfbG9jayA9IGk7Cj4gKwkJ CQlnb3RvIHJldHJ5Owo+ICsJCQl9Cj4gKwo+ICsJCQl3d19hY3F1aXJlX2RvbmUoYWNxdWlyZV9j dHgpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0KPiArCj4gKwl3d19hY3F1aXJlX2Rv bmUoYWNxdWlyZV9jdHgpOwo+ICsKPiArCS8qIFJlc2VydmUgc3BhY2UgZm9yIG91ciBzaGFyZWQg KHJlYWQtb25seSkgZmVuY2UgcmVmZXJlbmNlcywKPiArCSAqIGJlZm9yZSB3ZSBjb21taXQgdGhl IENMIHRvIHRoZSBoYXJkd2FyZS4KPiArCSAqLwo+ICsJZm9yIChpID0gMDsgaSA8IGV4ZWMtPmJv X2NvdW50OyBpKyspIHsKPiArCQlibyA9IHRvX3YzZF9ibygmZXhlYy0+Ym9baV0tPmJhc2UpOwo+ ICsKPiArCQlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3RfcmVzZXJ2ZV9zaGFyZWQoYm8tPnJlc3Yp Owo+ICsJCWlmIChyZXQpIHsKPiArCQkJdjNkX3VubG9ja19ib19yZXNlcnZhdGlvbnMoZGV2LCBl eGVjLCBhY3F1aXJlX2N0eCk7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogdjNkX2NsX2xvb2t1cF9ib3MoKSAtIFNl dHMgdXAgZXhlYy0+Ym9bXSB3aXRoIHRoZSBHRU0gb2JqZWN0cwo+ICsgKiByZWZlcmVuY2VkIGJ5 IHRoZSBqb2IuCj4gKyAqIEBkZXY6IERSTSBkZXZpY2UKPiArICogQGZpbGVfcHJpdjogRFJNIGZp bGUgZm9yIHRoaXMgZmQKPiArICogQGV4ZWM6IFYzRCBqb2IgYmVpbmcgc2V0IHVwCj4gKyAqCj4g KyAqIFRoZSBjb21tYW5kIHZhbGlkYXRvciBuZWVkcyB0byByZWZlcmVuY2UgQk9zIGJ5IHRoZWly IGluZGV4IHdpdGhpbgo+ICsgKiB0aGUgc3VibWl0dGVkIGpvYidzIEJPIGxpc3QuICBUaGlzIGRv ZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGpvYidzCj4gKyAqIEJPIGxpc3QgYW5kIHJlZmVyZW5j ZSBjb3VudGluZyBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBqb2IuCj4gKyAqCj4gKyAqIE5vdGUg dGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byB1bnJlZmVyZW5jZSB0aGUgQk9zIG9u Cj4gKyAqIGZhaWx1cmUsIGJlY2F1c2UgdGhhdCB3aWxsIGhhcHBlbiBhdCB2M2RfZXhlY19jbGVh bnVwKCkgdGltZS4KPiArICovCj4gK3N0YXRpYyBpbnQKPiArdjNkX2NsX2xvb2t1cF9ib3Moc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ ICsJCSAgc3RydWN0IGRybV92M2Rfc3VibWl0X2NsICphcmdzLAo+ICsJCSAgc3RydWN0IHYzZF9l eGVjX2luZm8gKmV4ZWMpCj4gK3sKPiArCXUzMiAqaGFuZGxlczsKPiArCWludCByZXQgPSAwOwo+ ICsJaW50IGk7Cj4gKwo+ICsJZXhlYy0+Ym9fY291bnQgPSBhcmdzLT5ib19oYW5kbGVfY291bnQ7 Cj4gKwo+ICsJaWYgKCFleGVjLT5ib19jb3VudCkgewo+ICsJCS8qIFNlZSBjb21tZW50IG9uIGJv X2luZGV4IGZvciB3aHkgd2UgaGF2ZSB0byBjaGVjawo+ICsJCSAqIHRoaXMuCj4gKwkJICovCj4g KwkJRFJNX0RFQlVHKCJSZW5kZXJpbmcgcmVxdWlyZXMgQk9zXG4iKTsKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCX0KPiArCj4gKwlleGVjLT5ibyA9IGt2bWFsbG9jX2FycmF5KGV4ZWMtPmJvX2Nv dW50LAo+ICsJCQkJICBzaXplb2Yoc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqKSwKPiArCQkJ CSAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+ICsJaWYgKCFleGVjLT5ibykgewo+ICsJCURS TV9ERUJVRygiRmFpbGVkIHRvIGFsbG9jYXRlIHZhbGlkYXRlZCBCTyBwb2ludGVyc1xuIik7Cj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJaGFuZGxlcyA9IGt2bWFsbG9jX2FycmF5 KGV4ZWMtPmJvX2NvdW50LCBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWhhbmRs ZXMpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCURSTV9ERUJVRygiRmFpbGVkIHRvIGFsbG9j YXRlIGluY29taW5nIEdFTSBoYW5kbGVzXG4iKTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ ICsJaWYgKGNvcHlfZnJvbV91c2VyKGhhbmRsZXMsCj4gKwkJCSAgICh2b2lkIF9fdXNlciAqKSh1 aW50cHRyX3QpYXJncy0+Ym9faGFuZGxlcywKPiArCQkJICAgZXhlYy0+Ym9fY291bnQgKiBzaXpl b2YodTMyKSkpIHsKPiArCQlyZXQgPSAtRUZBVUxUOwo+ICsJCURSTV9ERUJVRygiRmFpbGVkIHRv IGNvcHkgaW4gR0VNIGhhbmRsZXNcbiIpOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiArCj4gKwlz cGluX2xvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgZXhl Yy0+Ym9fY291bnQ7IGkrKykgewo+ICsJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYm8gPSBpZHJf ZmluZCgmZmlsZV9wcml2LT5vYmplY3RfaWRyLAo+ICsJCQkJCQkgICAgIGhhbmRsZXNbaV0pOwo+ ICsJCWlmICghYm8pIHsKPiArCQkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gbG9vayB1cCBHRU0gQk8g JWQ6ICVkXG4iLAo+ICsJCQkJICBpLCBoYW5kbGVzW2ldKTsKPiArCQkJcmV0ID0gLUVOT0VOVDsK PiArCQkJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7Cj4gKwkJCWdvdG8gZmFp bDsKPiArCQl9Cj4gKwkJZHJtX2dlbV9vYmplY3RfZ2V0KGJvKTsKPiArCQlleGVjLT5ib1tpXSA9 IHRvX3YzZF9ibyhibyk7Cj4gKwl9Cj4gKwlzcGluX3VubG9jaygmZmlsZV9wcml2LT50YWJsZV9s b2NrKTsKPiArCj4gK2ZhaWw6Cj4gKwlrdmZyZWUoaGFuZGxlcyk7Cj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt2M2RfZXhlY19jbGVhbnVwKHN0cnVjdCBrcmVmICpy ZWYpCj4gK3sKPiArCXN0cnVjdCB2M2RfZXhlY19pbmZvICpleGVjID0gY29udGFpbmVyX29mKHJl Ziwgc3RydWN0IHYzZF9leGVjX2luZm8sCj4gKwkJCQkJCSAgcmVmY291bnQpOwo+ICsJc3RydWN0 IHYzZF9kZXYgKnYzZCA9IGV4ZWMtPnYzZDsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsJdW5zaWdu ZWQgbG9uZyBpcnFmbGFnczsKPiArCXN0cnVjdCB2M2RfYm8gKmJvLCAqc2F2ZSwgKm92ZXJmbG93 ID0gTlVMTDsKPiArCj4gKwlkbWFfZmVuY2VfcHV0KGV4ZWMtPmJpbi5pbl9mZW5jZSk7Cj4gKwlk bWFfZmVuY2VfcHV0KGV4ZWMtPnJlbmRlci5pbl9mZW5jZSk7Cj4gKwo+ICsJZG1hX2ZlbmNlX3B1 dChleGVjLT5iaW4uZG9uZV9mZW5jZSk7Cj4gKwlkbWFfZmVuY2VfcHV0KGV4ZWMtPnJlbmRlci5k b25lX2ZlbmNlKTsKPiArCj4gKwlkbWFfZmVuY2VfcHV0KGV4ZWMtPmJpbl9kb25lX2ZlbmNlKTsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZXhlYy0+Ym9fY291bnQ7IGkrKykKPiArCQlkcm1fZ2Vt X29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmZXhlYy0+Ym9baV0tPmJhc2UpOwo+ICsJa3Zm cmVlKGV4ZWMtPmJvKTsKPiArCj4gKwkvKiBSdW5uaW5nIGEgYmluIGpvYiBtYXkgbW92ZSB0aGUg Y3VycmVudCBvdmVyZmxvdyBCTyBmcm9tIG91cgo+ICsJICogdW5yZWZfbGlzdCB0byB0aGUgbmV3 IGJpbiBqb2IncyB1bnJlZl9saXN0LCBzbyB3ZSBuZWVkIHRvCj4gKwkgKiBzb3J0IHRocm91Z2gg b3VyIHVucmVmX2xpc3QgdW5kZXIgdGhlIGpvYiBsb2NrIHRvIHB1bGwgdGhlCj4gKwkgKiBvdmVy ZmxvdyBCTyBvZmYgb2YgaXQuICBXZSBjYW4ndCB1bnJlZmVyZW5jZSB1bmRlciB0aGUKPiArCSAq IGpvYl9sb2NrLCBpdCdzIGlycXNhZmUgYnV0IHVucmVmZXJlbmNpbmcgdGFrZXMgYSBtdXRleC4K PiArCSAqLwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnYzZC0+am9iX2xvY2ssIGlycWZsYWdzKTsK PiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShibywgc2F2ZSwgJmV4ZWMtPnVucmVmX2xpc3Qs IHVucmVmX2hlYWQpIHsKPiArCQlpZiAoYm8gPT0gdjNkLT5vdmVyZmxvd19ibykgewo+ICsJCQlv dmVyZmxvdyA9IGJvOwo+ICsJCQlsaXN0X2RlbF9pbml0KCZiby0+dW5yZWZfaGVhZCk7Cj4gKwkJ fQo+ICsJfQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdjNkLT5qb2JfbG9jaywgaXJxZmxh Z3MpOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShibywgc2F2ZSwgJmV4ZWMtPnVu cmVmX2xpc3QsIHVucmVmX2hlYWQpIHsKPiArCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91 bmxvY2tlZCgmYm8tPmJhc2UpOwo+ICsJfQo+ICsJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Vf dW5sb2NrZWQoJm92ZXJmbG93LT5iYXNlKTsKPiArCj4gKwlwbV9ydW50aW1lX21hcmtfbGFzdF9i dXN5KHYzZC0+ZGV2KTsKPiArCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKHYzZC0+ZGV2KTsK PiArCj4gKwlrZnJlZShleGVjKTsKPiArfQo+ICsKPiArdm9pZCB2M2RfZXhlY19wdXQoc3RydWN0 IHYzZF9leGVjX2luZm8gKmV4ZWMpCj4gK3sKPiArCWtyZWZfcHV0KCZleGVjLT5yZWZjb3VudCwg djNkX2V4ZWNfY2xlYW51cCk7Cj4gK30KPiArCj4gK2ludAo+ICt2M2Rfd2FpdF9ib19pb2N0bChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICsJCSAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpCj4gK3sKPiArCWludCByZXQ7Cj4gKwlzdHJ1Y3QgZHJtX3YzZF93YWl0X2Jv ICphcmdzID0gZGF0YTsKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iajsKPiArCXN0 cnVjdCB2M2RfYm8gKmJvOwo+ICsJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7Cj4gKwl1 bnNpZ25lZCBsb25nIHRpbWVvdXRfamlmZmllcyA9Cj4gKwkJbnNlY3NfdG9famlmZmllc190aW1l b3V0KGFyZ3MtPnRpbWVvdXRfbnMpOwo+ICsKPiArCWlmIChhcmdzLT5wYWQgIT0gMCkKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlnZW1fb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZp bGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKPiArCWlmICghZ2VtX29iaikgewo+ICsJCURSTV9ERUJV RygiRmFpbGVkIHRvIGxvb2sgdXAgR0VNIEJPICVkXG4iLCBhcmdzLT5oYW5kbGUpOwo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsJfQo+ICsJYm8gPSB0b192M2RfYm8oZ2VtX29iaik7Cj4gKwo+ICsJ cmV0ID0gcmVzZXJ2YXRpb25fb2JqZWN0X3dhaXRfdGltZW91dF9yY3UoYm8tPnJlc3YsCj4gKwkJ CQkJCSAgdHJ1ZSwgdHJ1ZSwKPiArCQkJCQkJICB0aW1lb3V0X2ppZmZpZXMpOwo+ICsKPiArCS8q IERlY3JlbWVudCB0aGUgdXNlcidzIHRpbWVvdXQsIGluIGNhc2Ugd2UgZ290IGludGVycnVwdGVk Cj4gKwkgKiBzdWNoIHRoYXQgdGhlIGlvY3RsIHdpbGwgYmUgcmVzdGFydGVkLgo+ICsJICovCj4g KwlhcmdzLT50aW1lb3V0X25zIC09IGppZmZpZXNfdG9fbnNlY3MoamlmZmllcyAtIHN0YXJ0KTsK Ckp1c3QgbGVhcm5lZCB0aGF0IGlmIHlvdSB3YW50IGFjY3VyYWN5IHlvdSBuZWVkIGt0aW1lX2dl dCBiZWZvcmUvYWZ0ZXIKd2FpdGluZywgc2luY2UgdGhlIGVudGlyZSBqaWZmaWVzIHRoaW5nIGlz IHRvbyBpbmFjY3VyYXRlIC0gaWYgdGhlIGlycXMKZ2V0cyBkZWxheWVkLCBqaWZmaWVzIGlzbid0 IHVwZGF0ZS4gVGhlIG90aGVyIGlzc3VlIGlzIHRoYXQgaWYgeW91IGdldAppbnRlcnJ1cHRlZCB0 b28gcXVpY2tseSwgamlmZmllcyBkb2Vzbid0IHVwZGF0ZSBhbmQgeW91IGVuZCB1cCBzbGVlcGlu Zwpmb3Igd2F5IHRvbyBsb25nLgoKTm90IHN1cmUgeW91IGNhcmUgYWJvdXQgdGhhdCBtdWNoIGFj Y3VyYWN5IDotKQoKPiArCj4gKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChn ZW1fb2JqKTsKPiArCj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsJZWxzZSBp ZiAocmV0ID09IDApCj4gKwkJcmV0dXJuIC1FVElNRTsKPiArCWVsc2UKPiArCQlyZXR1cm4gMDsK PiArfQo+ICsKPiArLyoqCj4gKyAqIHYzZF9zdWJtaXRfY2xfaW9jdGwoKSAtIFN1Ym1pdHMgYSBq b2IgKGZyYW1lKSB0byB0aGUgVjNELgo+ICsgKiBAZGV2OiBEUk0gZGV2aWNlCj4gKyAqIEBkYXRh OiBpb2N0bCBhcmd1bWVudAo+ICsgKiBAZmlsZV9wcml2OiBEUk0gZmlsZSBmb3IgdGhpcyBmZAo+ ICsgKgo+ICsgKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5cG9pbnQgZm9yIHVzZXJzcGFjZSB0byBz dWJtaXQgYSAzRCBmcmFtZSB0bwo+ICsgKiB0aGUgR1BVLiAgVXNlcnNwYWNlIHByb3ZpZGVzIHRo ZSBiaW5uZXIgY29tbWFuZCBsaXN0IChpZgo+ICsgKiBhcHBsaWNhYmxlKSwgYW5kIHRoZSBrZXJu ZWwgc2V0cyB1cCB0aGUgcmVuZGVyIGNvbW1hbmQgbGlzdCB0byBkcmF3Cj4gKyAqIHRvIHRoZSBm cmFtZWJ1ZmZlciBkZXNjcmliZWQgaW4gdGhlIGlvY3RsLCB1c2luZyB0aGUgY29tbWFuZCBsaXN0 cwo+ICsgKiB0aGF0IHRoZSAzRCBlbmdpbmUncyBiaW5uZXIgd2lsbCBwcm9kdWNlLgo+ICsgKi8K PiAraW50Cj4gK3YzZF9zdWJtaXRfY2xfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKPiArCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCj4gK3sKPiArCXN0 cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRldik7Cj4gKwlzdHJ1Y3QgdjNkX2ZpbGVf cHJpdiAqdjNkX3ByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2Owo+ICsJc3RydWN0IGRybV92 M2Rfc3VibWl0X2NsICphcmdzID0gZGF0YTsKPiArCXN0cnVjdCB2M2RfZXhlY19pbmZvICpleGVj Owo+ICsJc3RydWN0IHd3X2FjcXVpcmVfY3R4IGFjcXVpcmVfY3R4Owo+ICsJc3RydWN0IGRybV9z eW5jb2JqICpzeW5jX291dDsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWV4ZWMgPSBrY2FsbG9j KDEsIHNpemVvZigqZXhlYyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFleGVjKQo+ICsJCXJldHVy biAtRU5PTUVNOwo+ICsKPiArCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmModjNkLT5kZXYpOwo+ ICsJaWYgKHJldCA8IDApIHsKPiArCQlrZnJlZShleGVjKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJ fQo+ICsKPiArCWtyZWZfaW5pdCgmZXhlYy0+cmVmY291bnQpOwo+ICsKPiArCXJldCA9IGRybV9z eW5jb2JqX2ZpbmRfZmVuY2UoZmlsZV9wcml2LCBhcmdzLT5pbl9zeW5jX2JjbCwKPiArCQkJCSAg ICAgJmV4ZWMtPmJpbi5pbl9mZW5jZSk7Cj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4gKwkJZ290 byBmYWlsOwo+ICsKPiArCXJldCA9IGRybV9zeW5jb2JqX2ZpbmRfZmVuY2UoZmlsZV9wcml2LCBh cmdzLT5pbl9zeW5jX3JjbCwKPiArCQkJCSAgICAgJmV4ZWMtPnJlbmRlci5pbl9mZW5jZSk7Cj4g KwlpZiAocmV0ID09IC1FSU5WQUwpCj4gKwkJZ290byBmYWlsOwo+ICsKPiArCWV4ZWMtPnFtYSA9 IGFyZ3MtPnFtYTsKPiArCWV4ZWMtPnFtcyA9IGFyZ3MtPnFtczsKPiArCWV4ZWMtPnF0cyA9IGFy Z3MtPnF0czsKPiArCWV4ZWMtPmJpbi5leGVjID0gZXhlYzsKPiArCWV4ZWMtPmJpbi5zdGFydCA9 IGFyZ3MtPmJjbF9zdGFydDsKPiArCWV4ZWMtPmJpbi5lbmQgPSBhcmdzLT5iY2xfZW5kOwo+ICsJ ZXhlYy0+cmVuZGVyLmV4ZWMgPSBleGVjOwo+ICsJZXhlYy0+cmVuZGVyLnN0YXJ0ID0gYXJncy0+ cmNsX3N0YXJ0Owo+ICsJZXhlYy0+cmVuZGVyLmVuZCA9IGFyZ3MtPnJjbF9lbmQ7Cj4gKwlleGVj LT52M2QgPSB2M2Q7Cj4gKwlJTklUX0xJU1RfSEVBRCgmZXhlYy0+dW5yZWZfbGlzdCk7Cj4gKwo+ ICsJcmV0ID0gdjNkX2NsX2xvb2t1cF9ib3MoZGV2LCBmaWxlX3ByaXYsIGFyZ3MsIGV4ZWMpOwo+ ICsJaWYgKHJldCkKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJcmV0ID0gdjNkX2xvY2tfYm9fcmVz ZXJ2YXRpb25zKGRldiwgZXhlYywgJmFjcXVpcmVfY3R4KTsKPiArCWlmIChyZXQpCj4gKwkJZ290 byBmYWlsOwo+ICsKPiArCWlmIChleGVjLT5iaW4uc3RhcnQgIT0gZXhlYy0+YmluLmVuZCkgewo+ ICsJCXJldCA9IGRybV9zY2hlZF9qb2JfaW5pdCgmZXhlYy0+YmluLmJhc2UsCj4gKwkJCQkJICZ2 M2QtPnF1ZXVlW1YzRF9CSU5dLnNjaGVkLAo+ICsJCQkJCSAmdjNkX3ByaXYtPnNjaGVkX2VudGl0 eVtWM0RfQklOXSwKPiArCQkJCQkgdjNkX3ByaXYpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8g ZmFpbF91bnJlc2VydmU7Cj4gKwo+ICsJCWV4ZWMtPmJpbl9kb25lX2ZlbmNlID0KPiArCQkJZG1h X2ZlbmNlX2dldCgmZXhlYy0+YmluLmJhc2Uuc19mZW5jZS0+ZmluaXNoZWQpOwo+ICsKPiArCQlr cmVmX2dldCgmZXhlYy0+cmVmY291bnQpOyAvKiBwdXQgYnkgc2NoZWR1bGVyIGpvYiBjb21wbGV0 aW9uICovCj4gKwkJZHJtX3NjaGVkX2VudGl0eV9wdXNoX2pvYigmZXhlYy0+YmluLmJhc2UsCj4g KwkJCQkJICAmdjNkX3ByaXYtPnNjaGVkX2VudGl0eVtWM0RfQklOXSk7Cj4gKwl9Cj4gKwo+ICsJ cmV0ID0gZHJtX3NjaGVkX2pvYl9pbml0KCZleGVjLT5yZW5kZXIuYmFzZSwKPiArCQkJCSAmdjNk LT5xdWV1ZVtWM0RfUkVOREVSXS5zY2hlZCwKPiArCQkJCSAmdjNkX3ByaXYtPnNjaGVkX2VudGl0 eVtWM0RfUkVOREVSXSwKPiArCQkJCSB2M2RfcHJpdik7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8g ZmFpbF91bnJlc2VydmU7Cj4gKwo+ICsJa3JlZl9nZXQoJmV4ZWMtPnJlZmNvdW50KTsgLyogcHV0 IGJ5IHNjaGVkdWxlciBqb2IgY29tcGxldGlvbiAqLwo+ICsJZHJtX3NjaGVkX2VudGl0eV9wdXNo X2pvYigmZXhlYy0+cmVuZGVyLmJhc2UsCj4gKwkJCQkgICZ2M2RfcHJpdi0+c2NoZWRfZW50aXR5 W1YzRF9SRU5ERVJdKTsKPiArCj4gKwl2M2RfYXR0YWNoX29iamVjdF9mZW5jZXMoZXhlYyk7Cj4g Kwo+ICsJdjNkX3VubG9ja19ib19yZXNlcnZhdGlvbnMoZGV2LCBleGVjLCAmYWNxdWlyZV9jdHgp Owo+ICsKPiArCS8qIFVwZGF0ZSB0aGUgcmV0dXJuIHN5bmMgb2JqZWN0IGZvciB0aGUgKi8KPiAr CXN5bmNfb3V0ID0gZHJtX3N5bmNvYmpfZmluZChmaWxlX3ByaXYsIGFyZ3MtPm91dF9zeW5jKTsK PiArCWlmIChzeW5jX291dCkgewo+ICsJCWRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uoc3luY19v dXQsCj4gKwkJCQkJICAmZXhlYy0+cmVuZGVyLmJhc2Uuc19mZW5jZS0+ZmluaXNoZWQpOwo+ICsJ CWRybV9zeW5jb2JqX3B1dChzeW5jX291dCk7Cj4gKwl9Cj4gKwo+ICsJdjNkX2V4ZWNfcHV0KGV4 ZWMpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZmFpbF91bnJlc2VydmU6Cj4gKwl2M2RfdW5s b2NrX2JvX3Jlc2VydmF0aW9ucyhkZXYsIGV4ZWMsICZhY3F1aXJlX2N0eCk7Cj4gK2ZhaWw6Cj4g Kwl2M2RfZXhlY19wdXQoZXhlYyk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50 Cj4gK3YzZF9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qg djNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOwo+ICsJdTMyIHB0X3NpemUgPSA0MDk2ICog MTAyNDsKPiArCWludCByZXQsIGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IFYzRF9NQVhfUVVF VUVTOyBpKyspCj4gKwkJdjNkLT5xdWV1ZVtpXS5mZW5jZV9jb250ZXh0ID0gZG1hX2ZlbmNlX2Nv bnRleHRfYWxsb2MoMSk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2luaXQoJnYzZC0+bW1fbG9jayk7Cj4g KwlzcGluX2xvY2tfaW5pdCgmdjNkLT5qb2JfbG9jayk7Cj4gKwltdXRleF9pbml0KCZ2M2QtPmJv X2xvY2spOwo+ICsJbXV0ZXhfaW5pdCgmdjNkLT5yZXNldF9sb2NrKTsKPiArCj4gKwkvKiBOb3Rl OiBXZSBkb24ndCBhbGxvY2F0ZSBhZGRyZXNzIDAuICBWYXJpb3VzIGJpdHMgb2YgSFcKPiArCSAq IHRyZWF0IDAgYXMgc3BlY2lhbCwgc3VjaCBhcyB0aGUgb2NjbHVzaW9uIHF1ZXJ5IGNvdW50ZXJz Cj4gKwkgKiB3aGVyZSAwIG1lYW5zICJkaXNhYmxlZCIuCj4gKwkgKi8KPiArCWRybV9tbV9pbml0 KCZ2M2QtPm1tLCAxLCBwdF9zaXplIC8gc2l6ZW9mKHUzMikgLSAxKTsKPiArCj4gKwl2M2QtPnB0 ID0gZG1hX2FsbG9jX2NvaGVyZW50KHYzZC0+ZGV2LCBwdF9zaXplLAo+ICsJCQkJICAgICAmdjNk LT5wdF9wYWRkciwKPiArCQkJCSAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQ X1pFUk8pOwo+ICsJaWYgKCF2M2QtPnB0KSB7Cj4gKwkJZHJtX21tX3Rha2Vkb3duKCZ2M2QtPm1t KTsKPiArCQlkZXZfZXJyKHYzZC0+ZGV2LAo+ICsJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2Ug dGFibGVzLiAiCj4gKwkJCSJQbGVhc2UgZW5zdXJlIHlvdSBoYXZlIENNQSBlbmFibGVkLlxuIik7 Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJdjNkX2luaXRfaHdfc3RhdGUodjNk KTsKPiArCXYzZF9tbXVfc2V0X3BhZ2VfdGFibGUodjNkKTsKPiArCj4gKwlyZXQgPSB2M2Rfc2No ZWRfaW5pdCh2M2QpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRybV9tbV90YWtlZG93bigmdjNkLT5t bSk7Cj4gKwkJZG1hX2ZyZWVfY29oZXJlbnQodjNkLT5kZXYsIDQwOTYgKiAxMDI0LCAodm9pZCAq KXYzZC0+cHQsCj4gKwkJCQkgIHYzZC0+cHRfcGFkZHIpOwo+ICsJfQo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICt2b2lkCj4gK3YzZF9nZW1fZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOwo+ICsJ ZW51bSB2M2RfcXVldWUgcTsKPiArCj4gKwl2M2Rfc2NoZWRfZmluaSh2M2QpOwo+ICsKPiArCS8q IFdhaXRpbmcgZm9yIGV4ZWMgdG8gZmluaXNoIHdvdWxkIG5lZWQgdG8gYmUgZG9uZSBiZWZvcmUK PiArCSAqIHVucmVnaXN0ZXJpbmcgVjNELgo+ICsJICovCj4gKwlmb3IgKHEgPSAwOyBxIDwgVjNE X01BWF9RVUVVRVM7IHErKykgewo+ICsJCVdBUk5fT04odjNkLT5xdWV1ZVtxXS5lbWl0X3NlcW5v ICE9Cj4gKwkJCXYzZC0+cXVldWVbcV0uZmluaXNoZWRfc2Vxbm8pOwo+ICsJfQo+ICsKPiArCWRy bV9tbV90YWtlZG93bigmdjNkLT5tbSk7Cj4gKwo+ICsJZG1hX2ZyZWVfY29oZXJlbnQodjNkLT5k ZXYsIDQwOTYgKiAxMDI0LCAodm9pZCAqKXYzZC0+cHQsIHYzZC0+cHRfcGFkZHIpOwo+ICt9Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2lycS5jIGIvZHJpdmVycy9ncHUv ZHJtL3YzZC92M2RfaXJxLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uMGI0OGNkNzBjOTk1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS92M2QvdjNkX2lycS5jCj4gQEAgLTAsMCArMSwyMTEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjArCj4gKy8qIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEJyb2FkY29t ICovCj4gKwo+ICsvKioKPiArICogRE9DOiBJbnRlcnJ1cHQgbWFuYWdlbWVudCBmb3IgdGhlIFYz RCBlbmdpbmUKPiArICoKPiArICogV2hlbiB3ZSB0YWtlIGEgYmlubmluZyBvciByZW5kZXJpbmcg Zmx1c2ggZG9uZSBpbnRlcnJ1cHQsIHdlIG5lZWQKPiArICogdG8gc2lnbmFsIHRoZSBmZW5jZSBm b3IgdGhhdCBqb2Igc28gdGhhdCB0aGUgc2NoZWR1bGVyIGNhbiBxdWV1ZSB1cAo+ICsgKiB0aGUg bmV4dCBvbmUgYW5kIHVuYmxvY2sgYW55IHdhaXRlcnMuCj4gKyAqCj4gKyAqIFdoZW4gd2UgdGFr ZSB0aGUgYmlubmVyIG91dCBvZiBtZW1vcnkgaW50ZXJydXB0LCB3ZSBuZWVkIHRvCj4gKyAqIGFs bG9jYXRlIHNvbWUgbmV3IG1lbW9yeSBhbmQgcGFzcyBpdCB0byB0aGUgYmlubmVyIHNvIHRoYXQg dGhlCj4gKyAqIGN1cnJlbnQgam9iIGNhbiBtYWtlIHByb2dyZXNzLgo+ICsgKi8KPiArCj4gKyNp bmNsdWRlICJ2M2RfZHJ2LmgiCj4gKyNpbmNsdWRlICJ2M2RfcmVncy5oIgo+ICsKPiArI2RlZmlu ZSBWM0RfQ09SRV9JUlFTICgodTMyKShWM0RfSU5UX09VVE9NRU0gfAlcCj4gKwkJCSAgICAgVjNE X0lOVF9GTERPTkUgfAlcCj4gKwkJCSAgICAgVjNEX0lOVF9GUkRPTkUgfAlcCj4gKwkJCSAgICAg VjNEX0lOVF9HTVBWKSkKPiArCj4gKyNkZWZpbmUgVjNEX0hVQl9JUlFTICgodTMyKShWM0RfSFVC X0lOVF9NTVVfV1JWIHwJXAo+ICsJCQkgICAgVjNEX0hVQl9JTlRfTU1VX1BUSSB8CVwKPiArCQkJ ICAgIFYzRF9IVUJfSU5UX01NVV9DQVApKQo+ICsKPiArc3RhdGljIHZvaWQKPiArdjNkX292ZXJm bG93X21lbV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ICsJc3RydWN0IHYz ZF9kZXYgKnYzZCA9Cj4gKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2M2RfZGV2LCBvdmVy Zmxvd19tZW1fd29yayk7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdjNkLT5kcm07Cj4g KwlzdHJ1Y3QgdjNkX2JvICpibyA9IHYzZF9ib19jcmVhdGUoZGV2LCBOVUxMIC8qIFhYWDogR01Q ICovLCAyNTYgKiAxMDI0KTsKPiArCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gKwo+ICsJaWYg KElTX0VSUihibykpIHsKPiArCQlEUk1fRVJST1IoIkNvdWxkbid0IGFsbG9jYXRlIGJpbm5lciBv dmVyZmxvdyBtZW1cbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlzcGluX2xvY2tfaXJx c2F2ZSgmdjNkLT5qb2JfbG9jaywgaXJxZmxhZ3MpOwo+ICsJaWYgKHYzZC0+b3ZlcmZsb3dfYm8p Cj4gKwkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZ2M2QtPm92ZXJmbG93X2JvLT5iYXNl KTsKPiArCXYzZC0+b3ZlcmZsb3dfYm8gPSBibzsKPiArCj4gKwkvKiBBc3NvY2lhdGUgdGhlIG92 ZXJmbG93IEJPIHdpdGggdGhlIGN1cnJlbnQgYmluIGpvYiwgaWYgYW55Lgo+ICsJICogVGhlIEJP IHdvbid0IGJlIGZpbmFsbHkgdW5yZWZlcmVuY2VkIChpbiB0aGUgb2JqZWN0X3B1dAo+ICsJICog YWJvdmUpIHVudGlsIHRoZSBsYXN0IGJpbiBqb2IgdXNpbmcgaXQgaGFzIG1hZGUgaXQgaGFzCj4g KwkgKiBmaW5pc2hlZCByZW5kZXJpbmcuCj4gKwkgKgo+ICsJICogV2UgZmFpbCB0byB1cGRhdGUg aXRzIHJlc2VydmF0aW9uIGZvciB0aGUgam9iJ3MgcmVuZGVyIGRvbmUKPiArCSAqIGZlbmNlLCBi dXQgbm90aGluZyBjYW4gZmluZCB0aGlzIG9iamVjdCB0byB0cnkgdG8gdXNlIGl0cwo+ICsJICog cmVzZXJ2YXRpb24uCj4gKwkgKi8KPiArCWlmICh2M2QtPmJpbl9qb2IpIHsKPiArCQlkcm1fZ2Vt X29iamVjdF9nZXQoJmJvLT5iYXNlKTsKPiArCQlsaXN0X2FkZF90YWlsKCZ2M2QtPm92ZXJmbG93 X2JvLT51bnJlZl9oZWFkLAo+ICsJCQkgICAgICAmdjNkLT5iaW5fam9iLT51bnJlZl9saXN0KTsK PiArCX0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnYzZC0+am9iX2xvY2ssIGlycWZsYWdz KTsKPiArCj4gKwlWM0RfQ09SRV9XUklURSgwLCBWM0RfUFRCX0JQT0EsIGJvLT5ub2RlLnN0YXJ0 IDw8IFBBR0VfU0hJRlQpOwo+ICsJVjNEX0NPUkVfV1JJVEUoMCwgVjNEX1BUQl9CUE9TLCBiby0+ YmFzZS5zaXplKTsKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90Cj4gK3YzZF9pcnEoaW50 IGlycSwgdm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gYXJnOwo+ICsJ dTMyIGludHN0czsKPiArCWlycXJldHVybl90IHN0YXR1cyA9IElSUV9OT05FOwo+ICsKPiArCWlu dHN0cyA9IFYzRF9DT1JFX1JFQUQoMCwgVjNEX0NUTF9JTlRfU1RTKTsKPiArCj4gKwkvKiBBY2tu b3dsZWRnZSB0aGUgaW50ZXJydXB0cyB3ZSdyZSBoYW5kbGluZyBoZXJlLiAqLwo+ICsJVjNEX0NP UkVfV1JJVEUoMCwgVjNEX0NUTF9JTlRfQ0xSLCBpbnRzdHMpOwo+ICsKPiArCWlmIChpbnRzdHMg JiBWM0RfSU5UX09VVE9NRU0pIHsKPiArCQkvKiBOb3RlIHRoYXQgdGhlIE9PTSBzdGF0dXMgaXMg ZWRnZSBzaWduYWxlZCwgc28gdGhlCj4gKwkJICogaW50ZXJydXB0IHdvbid0IGhhcHBlbiBhZ2Fp biB1bnRpbCB0aGUgd2UgYWN0dWFsbHkKPiArCQkgKiBhZGQgbW9yZSBtZW1vcnkuCj4gKwkJICov Cj4gKwkJc2NoZWR1bGVfd29yaygmdjNkLT5vdmVyZmxvd19tZW1fd29yayk7Cj4gKwkJc3RhdHVz ID0gSVJRX0hBTkRMRUQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGludHN0cyAmIFYzRF9JTlRfRkxET05F KSB7Cj4gKwkJdjNkLT5xdWV1ZVtWM0RfQklOXS5maW5pc2hlZF9zZXFubysrOwo+ICsJCWRtYV9m ZW5jZV9zaWduYWwodjNkLT5iaW5fam9iLT5iaW4uZG9uZV9mZW5jZSk7Cj4gKwkJc3RhdHVzID0g SVJRX0hBTkRMRUQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGludHN0cyAmIFYzRF9JTlRfRlJET05FKSB7 Cj4gKwkJdjNkLT5xdWV1ZVtWM0RfUkVOREVSXS5maW5pc2hlZF9zZXFubysrOwo+ICsJCWRtYV9m ZW5jZV9zaWduYWwodjNkLT5yZW5kZXJfam9iLT5yZW5kZXIuZG9uZV9mZW5jZSk7Cj4gKwo+ICsJ CXN0YXR1cyA9IElSUV9IQU5ETEVEOwo+ICsJfQo+ICsKPiArCS8qIFdlIHNob3VsZG4ndCBiZSB0 cmlnZ2VyaW5nIHRoZXNlIGlmIHdlIGhhdmUgR01QIGluCj4gKwkgKiBhbHdheXMtYWxsb3dlZCBt b2RlLgo+ICsJICovCj4gKwlpZiAoaW50c3RzICYgVjNEX0lOVF9HTVBWKQo+ICsJCWRldl9lcnIo djNkLT5kZXYsICJHTVAgdmlvbGF0aW9uXG4iKTsKPiArCj4gKwlyZXR1cm4gc3RhdHVzOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QKPiArdjNkX2h1Yl9pcnEoaW50IGlycSwgdm9pZCAq YXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gYXJnOwo+ICsJdTMyIGludHN0czsK PiArCWlycXJldHVybl90IHN0YXR1cyA9IElSUV9OT05FOwo+ICsKPiArCWludHN0cyA9IFYzRF9S RUFEKFYzRF9IVUJfSU5UX1NUUyk7Cj4gKwo+ICsJLyogQWNrbm93bGVkZ2UgdGhlIGludGVycnVw dHMgd2UncmUgaGFuZGxpbmcgaGVyZS4gKi8KPiArCVYzRF9XUklURShWM0RfSFVCX0lOVF9DTFIs IGludHN0cyk7Cj4gKwo+ICsJaWYgKGludHN0cyAmIChWM0RfSFVCX0lOVF9NTVVfV1JWIHwKPiAr CQkgICAgICBWM0RfSFVCX0lOVF9NTVVfUFRJIHwKPiArCQkgICAgICBWM0RfSFVCX0lOVF9NTVVf Q0FQKSkgewo+ICsJCXUzMiBheGlfaWQgPSBWM0RfUkVBRChWM0RfTU1VX1ZJT19JRCk7Cj4gKwkJ dTY0IHZpb19hZGRyID0gKHU2NClWM0RfUkVBRChWM0RfTU1VX1ZJT19BRERSKSA8PCA4Owo+ICsK PiArCQlkZXZfZXJyKHYzZC0+ZGV2LCAiTU1VIGVycm9yIGZyb20gY2xpZW50ICVkIGF0IDB4JTA4 bGx4JXMlcyVzXG4iLAo+ICsJCQlheGlfaWQsIChsb25nIGxvbmcpdmlvX2FkZHIsCj4gKwkJCSgo aW50c3RzICYgVjNEX0hVQl9JTlRfTU1VX1dSVikgPwo+ICsJCQkgIiwgd3JpdGUgdmlvbGF0aW9u IiA6ICIiKSwKPiArCQkJKChpbnRzdHMgJiBWM0RfSFVCX0lOVF9NTVVfUFRJKSA/Cj4gKwkJCSAi LCBwdGUgaW52YWxpZCIgOiAiIiksCj4gKwkJCSgoaW50c3RzICYgVjNEX0hVQl9JTlRfTU1VX0NB UCkgPwo+ICsJCQkgIiwgY2FwIGV4Y2VlZGVkIiA6ICIiKSk7Cj4gKwkJc3RhdHVzID0gSVJRX0hB TkRMRUQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHN0YXR1czsKPiArfQo+ICsKPiArdm9pZAo+ICt2 M2RfaXJxX2luaXQoc3RydWN0IHYzZF9kZXYgKnYzZCkKPiArewo+ICsJaW50IHJldCwgY29yZTsK PiArCj4gKwlJTklUX1dPUksoJnYzZC0+b3ZlcmZsb3dfbWVtX3dvcmssIHYzZF9vdmVyZmxvd19t ZW1fd29yayk7Cj4gKwo+ICsJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cyBzb21lb25l IG1pZ2h0IGhhdmUgbGVmdCBhcm91bmQKPiArCSAqIGZvciB1cy4KPiArCSAqLwo+ICsJZm9yIChj b3JlID0gMDsgY29yZSA8IHYzZC0+Y29yZXM7IGNvcmUrKykKPiArCQlWM0RfQ09SRV9XUklURShj b3JlLCBWM0RfQ1RMX0lOVF9DTFIsIFYzRF9DT1JFX0lSUVMpOwo+ICsJVjNEX1dSSVRFKFYzRF9I VUJfSU5UX0NMUiwgVjNEX0hVQl9JUlFTKTsKPiArCj4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJx KHYzZC0+ZGV2LCBwbGF0Zm9ybV9nZXRfaXJxKHYzZC0+cGRldiwgMCksCj4gKwkJCSAgICAgICB2 M2RfaHViX2lycSwgSVJRRl9TSEFSRUQsCj4gKwkJCSAgICAgICAidjNkX2h1YiIsIHYzZCk7Cj4g KwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKHYzZC0+ZGV2LCBwbGF0Zm9ybV9nZXRfaXJxKHYzZC0+ cGRldiwgMSksCj4gKwkJCSAgICAgICB2M2RfaXJxLCBJUlFGX1NIQVJFRCwKPiArCQkJICAgICAg ICJ2M2RfY29yZTAiLCB2M2QpOwo+ICsJaWYgKHJldCkKPiArCQlkZXZfZXJyKHYzZC0+ZGV2LCAi SVJRIHNldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7Cj4gKwo+ICsJdjNkX2lycV9lbmFibGUodjNk KTsKPiArfQo+ICsKPiArdm9pZAo+ICt2M2RfaXJxX2VuYWJsZShzdHJ1Y3QgdjNkX2RldiAqdjNk KQo+ICt7Cj4gKwlpbnQgY29yZTsKPiArCj4gKwkvKiBFbmFibGUgb3VyIHNldCBvZiBpbnRlcnJ1 cHRzLCBtYXNraW5nIG91dCBhbnkgb3RoZXJzLiAqLwo+ICsJZm9yIChjb3JlID0gMDsgY29yZSA8 IHYzZC0+Y29yZXM7IGNvcmUrKykgewo+ICsJCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9DVExf SU5UX01TS19TRVQsIH5WM0RfQ09SRV9JUlFTKTsKPiArCQlWM0RfQ09SRV9XUklURShjb3JlLCBW M0RfQ1RMX0lOVF9NU0tfQ0xSLCBWM0RfQ09SRV9JUlFTKTsKPiArCX0KPiArCj4gKwlWM0RfV1JJ VEUoVjNEX0hVQl9JTlRfTVNLX1NFVCwgflYzRF9IVUJfSVJRUyk7Cj4gKwlWM0RfV1JJVEUoVjNE X0hVQl9JTlRfTVNLX0NMUiwgVjNEX0hVQl9JUlFTKTsKPiArfQo+ICsKPiArdm9pZAo+ICt2M2Rf aXJxX2Rpc2FibGUoc3RydWN0IHYzZF9kZXYgKnYzZCkKPiArewo+ICsJaW50IGNvcmU7Cj4gKwo+ ICsJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi8KPiArCWZvciAoY29yZSA9IDA7IGNvcmUg PCB2M2QtPmNvcmVzOyBjb3JlKyspCj4gKwkJVjNEX0NPUkVfV1JJVEUoY29yZSwgVjNEX0NUTF9J TlRfTVNLX1NFVCwgfjApOwo+ICsJVjNEX1dSSVRFKFYzRF9IVUJfSU5UX01TS19TRVQsIH4wKTsK PiArCj4gKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIHdlIG1pZ2h0IGhhdmUgbGVm dC4gKi8KPiArCWZvciAoY29yZSA9IDA7IGNvcmUgPCB2M2QtPmNvcmVzOyBjb3JlKyspCj4gKwkJ VjNEX0NPUkVfV1JJVEUoY29yZSwgVjNEX0NUTF9JTlRfQ0xSLCBWM0RfQ09SRV9JUlFTKTsKPiAr CVYzRF9XUklURShWM0RfSFVCX0lOVF9DTFIsIFYzRF9IVUJfSVJRUyk7Cj4gKwo+ICsJY2FuY2Vs X3dvcmtfc3luYygmdjNkLT5vdmVyZmxvd19tZW1fd29yayk7Cj4gK30KPiArCj4gKy8qKiBSZWlu aXRpYWxpemVzIGludGVycnVwdCByZWdpc3RlcnMgd2hlbiBhIEdQVSByZXNldCBpcyBwZXJmb3Jt ZWQuICovCj4gK3ZvaWQgdjNkX2lycV9yZXNldChzdHJ1Y3QgdjNkX2RldiAqdjNkKQo+ICt7Cj4g KwkvKgo+ICsJICogVHVybiBhbGwgb3VyIGludGVycnVwdHMgb24uICBCaW5uZXIgb3V0IG9mIG1l bW9yeSBpcyB0aGUKPiArCSAqIG9ubHkgb25lIHdlIGV4cGVjdCB0byB0cmlnZ2VyIGF0IHRoaXMg cG9pbnQsIHNpbmNlIHdlJ3ZlCj4gKwkgKiBqdXN0IGNvbWUgZnJvbSBwb3dlcm9uIGFuZCBoYXZl bid0IHN1cHBsaWVkIGFueSBvdmVyZmxvdwo+ICsJICogbWVtb3J5IHlldC4KPiArCSAqLwo+ICsJ djNkX2lycV9lbmFibGUodjNkKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9tbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX21tdS5jCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmIwMGY5N2MzMWI3MAo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9tbXUuYwo+IEBAIC0wLDAgKzEs MTIyIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwo+ICsvKiBDb3B5 cmlnaHQgKEMpIDIwMTctMjAxOCBCcm9hZGNvbSAqLwo+ICsKPiArLyoqCj4gKyAqIERPQzogQnJv YWRjb20gVjNEIE1NVQo+ICsgKgo+ICsgKiBUaGUgVjNEIDMueCBoYXJkd2FyZSAoY29tcGFyZWQg dG8gVkM0KSBub3cgaW5jbHVkZXMgYW4gTU1VLiAgSXQgaGFzCj4gKyAqIGEgc2luZ2xlIGxldmVs IG9mIHBhZ2UgdGFibGVzIGZvciB0aGUgVjNEJ3MgNEdCIGFkZHJlc3Mgc3BhY2UgdG8KPiArICog bWFwIHRvIEFYSSBidXMgYWRkcmVzc2VzLCB0aHVzIGl0IGNvdWxkIG5lZWQgdXAgdG8gNE1CIG9m Cj4gKyAqIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgdG8gc3RvcmUgdGhlIFBURXMuCj4g KyAqCj4gKyAqIEJlY2F1c2UgdGhlIDRNQiBvZiBjb250aWd1b3VzIG1lbW9yeSBmb3IgcGFnZSB0 YWJsZXMgaXMgcHJlY2lvdXMsCj4gKyAqIGFuZCBzd2l0Y2hpbmcgYmV0d2VlbiB0aGVtIGlzIGV4 cGVuc2l2ZSwgd2UgbG9hZCBhbGwgQk9zIGludG8gdGhlCj4gKyAqIHNhbWUgNEdCIGFkZHJlc3Mg c3BhY2UuCj4gKyAqCj4gKyAqIFRvIHByb3RlY3QgY2xpZW50cyBmcm9tIGVhY2ggb3RoZXIsIHdl IHNob3VsZCB1c2UgdGhlIEdNUCB0bwo+ICsgKiBxdWlja2x5IG1hc2sgb3V0IChhdCAxMjhrYiBn cmFudWxhcml0eSkgd2hhdCBwYWdlcyBhcmUgYXZhaWxhYmxlIHRvCj4gKyAqIGVhY2ggY2xpZW50 LiAgVGhpcyBpcyBub3QgeWV0IGltcGxlbWVudGVkLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJ2 M2RfZHJ2LmgiCj4gKyNpbmNsdWRlICJ2M2RfcmVncy5oIgo+ICsKPiArI2RlZmluZSBWM0RfTU1V X1BBR0VfU0hJRlQgMTIKPiArCj4gKy8qIE5vdGU6IEFsbCBQVEVzIGZvciB0aGUgMU1CIHN1cGVy cGFnZSBtdXN0IGJlIGZpbGxlZCB3aXRoIHRoZQo+ICsgKiBzdXBlcnBhZ2UgYml0IHNldC4KPiAr ICovCj4gKyNkZWZpbmUgVjNEX1BURV9TVVBFUlBBR0UgQklUKDMxKQo+ICsjZGVmaW5lIFYzRF9Q VEVfV1JJVEVBQkxFIEJJVCgyOSkKPiArI2RlZmluZSBWM0RfUFRFX1ZBTElEIEJJVCgyOCkKPiAr Cj4gK3N0YXRpYyBpbnQgdjNkX21tdV9mbHVzaF9hbGwoc3RydWN0IHYzZF9kZXYgKnYzZCkKPiAr ewo+ICsJaW50IHJldDsKPiArCj4gKwkvKiBNYWtlIHN1cmUgdGhhdCBhbm90aGVyIGZsdXNoIGlz bid0IGFscmVhZHkgcnVubmluZyB3aGVuIHdlCj4gKwkgKiBzdGFydCB0aGlzIG9uZS4KPiArCSAq Lwo+ICsJcmV0ID0gd2FpdF9mb3IoIShWM0RfUkVBRChWM0RfTU1VX0NUTCkgJgo+ICsJCQkgVjNE X01NVV9DVExfVExCX0NMRUFSSU5HKSwgMTAwKTsKPiArCWlmIChyZXQpCj4gKwkJZGV2X2Vycih2 M2QtPmRldiwgIlRMQiBjbGVhciB3YWl0IGlkbGUgcHJlLXdhaXQgZmFpbGVkXG4iKTsKPiArCj4g KwlWM0RfV1JJVEUoVjNEX01NVV9DVEwsIFYzRF9SRUFEKFYzRF9NTVVfQ1RMKSB8Cj4gKwkJICBW M0RfTU1VX0NUTF9UTEJfQ0xFQVIpOwo+ICsKPiArCVYzRF9XUklURShWM0RfTU1VQ19DT05UUk9M LAo+ICsJCSAgVjNEX01NVUNfQ09OVFJPTF9GTFVTSCB8Cj4gKwkJICBWM0RfTU1VQ19DT05UUk9M X0VOQUJMRSk7Cj4gKwo+ICsJcmV0ID0gd2FpdF9mb3IoIShWM0RfUkVBRChWM0RfTU1VX0NUTCkg Jgo+ICsJCQkgVjNEX01NVV9DVExfVExCX0NMRUFSSU5HKSwgMTAwKTsKPiArCWlmIChyZXQpIHsK PiArCQlkZXZfZXJyKHYzZC0+ZGV2LCAiVExCIGNsZWFyIHdhaXQgaWRsZSBmYWlsZWRcbiIpOwo+ ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gd2FpdF9mb3IoIShWM0RfUkVBRChW M0RfTU1VQ19DT05UUk9MKSAmCj4gKwkJCSBWM0RfTU1VQ19DT05UUk9MX0ZMVVNISU5HKSwgMTAw KTsKPiArCWlmIChyZXQpCj4gKwkJZGV2X2Vycih2M2QtPmRldiwgIk1NVUMgZmx1c2ggd2FpdCBp ZGxlIGZhaWxlZFxuIik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IHYzZF9t bXVfc2V0X3BhZ2VfdGFibGUoc3RydWN0IHYzZF9kZXYgKnYzZCkKPiArewo+ICsJVjNEX1dSSVRF KFYzRF9NTVVfUFRfUEFfQkFTRSwgdjNkLT5wdF9wYWRkciA+PiBWM0RfTU1VX1BBR0VfU0hJRlQp Owo+ICsJVjNEX1dSSVRFKFYzRF9NTVVfQ1RMLAo+ICsJCSAgVjNEX01NVV9DVExfRU5BQkxFIHwK PiArCQkgIFYzRF9NTVVfQ1RMX1BUX0lOVkFMSUQgfAo+ICsJCSAgVjNEX01NVV9DVExfUFRfSU5W QUxJRF9BQk9SVCB8Cj4gKwkJICBWM0RfTU1VX0NUTF9XUklURV9WSU9MQVRJT05fQUJPUlQgfAo+ ICsJCSAgVjNEX01NVV9DVExfQ0FQX0VYQ0VFREVEX0FCT1JUKTsKPiArCVYzRF9XUklURShWM0Rf TU1VX0lMTEVHQUxfQUREUiwKPiArCQkgICh2M2QtPm1tdV9zY3JhdGNoX3BhZGRyID4+IFYzRF9N TVVfUEFHRV9TSElGVCkgfAo+ICsJCSAgVjNEX01NVV9JTExFR0FMX0FERFJfRU5BQkxFKTsKPiAr CVYzRF9XUklURShWM0RfTU1VQ19DT05UUk9MLCBWM0RfTU1VQ19DT05UUk9MX0VOQUJMRSk7Cj4g Kwo+ICsJcmV0dXJuIHYzZF9tbXVfZmx1c2hfYWxsKHYzZCk7Cj4gK30KPiArCj4gK3ZvaWQgdjNk X21tdV9pbnNlcnRfcHRlcyhzdHJ1Y3QgdjNkX2JvICpibykKPiArewo+ICsJc3RydWN0IHYzZF9k ZXYgKnYzZCA9IHRvX3YzZF9kZXYoYm8tPmJhc2UuZGV2KTsKPiArCXUzMiBwYWdlID0gYm8tPm5v ZGUuc3RhcnQ7Cj4gKwl1MzIgcGFnZV9wcm90ID0gVjNEX1BURV9XUklURUFCTEUgfCBWM0RfUFRF X1ZBTElEOwo+ICsJdW5zaWduZWQgaW50IGNvdW50Owo+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpz Z2w7Cj4gKwo+ICsJZm9yX2VhY2hfc2coYm8tPnNndC0+c2dsLCBzZ2wsIGJvLT5zZ3QtPm5lbnRz LCBjb3VudCkgewo+ICsJCXUzMiBwYWdlX2FkZHJlc3MgPSBzZ19kbWFfYWRkcmVzcyhzZ2wpID4+ IFYzRF9NTVVfUEFHRV9TSElGVDsKPiArCQl1MzIgcHRlID0gcGFnZV9wcm90IHwgcGFnZV9hZGRy ZXNzOwo+ICsJCXUzMiBpOwo+ICsKPiArCQlCVUdfT04ocGFnZV9hZGRyZXNzICsgKHNnX2RtYV9s ZW4oc2dsKSA+PiBWM0RfTU1VX1BBR0VfU0hJRlQpID49Cj4gKwkJICAgICAgIEJJVCgyNCkpOwo+ ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbihzZ2wpID4+IFYzRF9NTVVfUEFHRV9T SElGVDsgaSsrKQo+ICsJCQl2M2QtPnB0W3BhZ2UrK10gPSBwdGUgKyBpOwo+ICsJfQo+ICsKPiAr CVdBUk5fT05fT05DRShwYWdlIC0gYm8tPm5vZGUuc3RhcnQgIT0KPiArCQkgICAgIGJvLT5iYXNl LnNpemUgPj4gVjNEX01NVV9QQUdFX1NISUZUKTsKPiArCj4gKwlpZiAodjNkX21tdV9mbHVzaF9h bGwodjNkKSkKPiArCQlkZXZfZXJyKHYzZC0+ZGV2LCAiTU1VIGZsdXNoIHRpbWVvdXRcbiIpOwo+ ICt9Cj4gKwo+ICt2b2lkIHYzZF9tbXVfcmVtb3ZlX3B0ZXMoc3RydWN0IHYzZF9ibyAqYm8pCj4g K3sKPiArCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGJvLT5iYXNlLmRldik7Cj4g Kwl1MzIgbnBhZ2VzID0gYm8tPmJhc2Uuc2l6ZSA+PiBWM0RfTU1VX1BBR0VfU0hJRlQ7Cj4gKwl1 MzIgcGFnZTsKPiArCj4gKwlmb3IgKHBhZ2UgPSBiby0+bm9kZS5zdGFydDsgcGFnZSA8IGJvLT5u b2RlLnN0YXJ0ICsgbnBhZ2VzOyBwYWdlKyspCj4gKwkJdjNkLT5wdFtwYWdlXSA9IDA7Cj4gKwo+ ICsJaWYgKHYzZF9tbXVfZmx1c2hfYWxsKHYzZCkpCj4gKwkJZGV2X2Vycih2M2QtPmRldiwgIk1N VSBmbHVzaCB0aW1lb3V0XG4iKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9yZWdzLmggYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9yZWdzLmgKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZmMxMzI4MmRmYzJmCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3JlZ3MuaAo+IEBAIC0wLDAg KzEsMjk1IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwo+ICsvKiBD b3B5cmlnaHQgKEMpIDIwMTctMjAxOCBCcm9hZGNvbSAqLwo+ICsKPiArI2lmbmRlZiBWM0RfUkVH U19ICj4gKyNkZWZpbmUgVjNEX1JFR1NfSAo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5o Pgo+ICsKPiArI2RlZmluZSBWM0RfTUFTSyhoaWdoLCBsb3cpICgodTMyKUdFTk1BU0soaGlnaCwg bG93KSkKPiArLyogVXNpbmcgdGhlIEdOVSBzdGF0ZW1lbnQgZXhwcmVzc2lvbiBleHRlbnNpb24g Ki8KPiArI2RlZmluZSBWM0RfU0VUX0ZJRUxEKHZhbHVlLCBmaWVsZCkJCQkJCVwKPiArCSh7CQkJ CQkJCQlcCj4gKwkJdTMyIGZpZWxkdmFsID0gKHZhbHVlKSA8PCBmaWVsZCMjX1NISUZUOwkJXAo+ ICsJCVdBUk5fT04oKGZpZWxkdmFsICYgfmZpZWxkIyNfTUFTSykgIT0gMCk7CQlcCj4gKwkJZmll bGR2YWwgJiBmaWVsZCMjX01BU0s7CQkJCVwKPiArCSB9KQo+ICsKPiArI2RlZmluZSBWM0RfR0VU X0ZJRUxEKHdvcmQsIGZpZWxkKSAoKCh3b3JkKSAmIGZpZWxkIyNfTUFTSykgPj4JCVwKPiArCQkJ CSAgICBmaWVsZCMjX1NISUZUKQo+ICsKPiArLyogSHViIHJlZ2lzdGVycyBmb3Igc2hhcmVkIGhh cmR3YXJlIGJldHdlZW4gVjNEIGNvcmVzLiAqLwo+ICsKPiArI2RlZmluZSBWM0RfSFVCX0FYSUNG RyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAKPiArIyBkZWZpbmUgVjNE X0hVQl9BWElDRkdfTUFYX0xFTl9NQVNLICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDMsIDAp Cj4gKyMgZGVmaW5lIFYzRF9IVUJfQVhJQ0ZHX01BWF9MRU5fU0hJRlQgICAgICAgICAgICAgICAg ICAwCj4gKyNkZWZpbmUgVjNEX0hVQl9VSUZDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwMDA0Cj4gKyNkZWZpbmUgVjNEX0hVQl9JREVOVDAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDAwMDA4Cj4gKwo+ICsjZGVmaW5lIFYzRF9IVUJfSURFTlQxICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYwo+ICsjIGRlZmluZSBWM0RfSFVCX0lE RU5UMV9XSVRIX01TTyAgICAgICAgICAgICAgICAgICAgICAgQklUKDE5KQo+ICsjIGRlZmluZSBW M0RfSFVCX0lERU5UMV9XSVRIX1RTWSAgICAgICAgICAgICAgICAgICAgICAgQklUKDE4KQo+ICsj IGRlZmluZSBWM0RfSFVCX0lERU5UMV9XSVRIX1RGVSAgICAgICAgICAgICAgICAgICAgICAgQklU KDE3KQo+ICsjIGRlZmluZSBWM0RfSFVCX0lERU5UMV9XSVRIX0wzQyAgICAgICAgICAgICAgICAg ICAgICAgQklUKDE2KQo+ICsjIGRlZmluZSBWM0RfSFVCX0lERU5UMV9OSE9TVFNfTUFTSyAgICAg ICAgICAgICAgICAgICAgVjNEX01BU0soMTUsIDEyKQo+ICsjIGRlZmluZSBWM0RfSFVCX0lERU5U MV9OSE9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgMTIKPiArIyBkZWZpbmUgVjNEX0hVQl9J REVOVDFfTkNPUkVTX01BU0sgICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDExLCA4KQo+ICsj IGRlZmluZSBWM0RfSFVCX0lERU5UMV9OQ09SRVNfU0hJRlQgICAgICAgICAgICAgICAgICAgOAo+ ICsjIGRlZmluZSBWM0RfSFVCX0lERU5UMV9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAg VjNEX01BU0soNywgNCkKPiArIyBkZWZpbmUgVjNEX0hVQl9JREVOVDFfUkVWX1NISUZUICAgICAg ICAgICAgICAgICAgICAgIDQKPiArIyBkZWZpbmUgVjNEX0hVQl9JREVOVDFfVFZFUl9NQVNLICAg ICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDMsIDApCj4gKyMgZGVmaW5lIFYzRF9IVUJfSURF TlQxX1RWRVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwCj4gKwo+ICsjZGVmaW5lIFYzRF9I VUJfSURFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMAo+ICsjIGRl ZmluZSBWM0RfSFVCX0lERU5UMl9XSVRIX01NVSAgICAgICAgICAgICAgICAgICAgICAgQklUKDgp Cj4gKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQyX0wzQ19OS0JfTUFTSyAgICAgICAgICAgICAgICAg ICBWM0RfTUFTSyg3LCAwKQo+ICsjIGRlZmluZSBWM0RfSFVCX0lERU5UMl9MM0NfTktCX1NISUZU ICAgICAgICAgICAgICAgICAgMAo+ICsKPiArI2RlZmluZSBWM0RfSFVCX0lERU5UMyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQKPiArIyBkZWZpbmUgVjNEX0hVQl9JREVO VDNfSVBSRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDE1LCA4KQo+ICsjIGRl ZmluZSBWM0RfSFVCX0lERU5UM19JUFJFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgOAo+ICsj IGRlZmluZSBWM0RfSFVCX0lERU5UM19JUElEWF9NQVNLICAgICAgICAgICAgICAgICAgICAgVjNE X01BU0soNywgMCkKPiArIyBkZWZpbmUgVjNEX0hVQl9JREVOVDNfSVBJRFhfU0hJRlQgICAgICAg ICAgICAgICAgICAgIDAKPiArCj4gKyNkZWZpbmUgVjNEX0hVQl9JTlRfU1RTICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwMDUwCj4gKyNkZWZpbmUgVjNEX0hVQl9JTlRfU0VUICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDU0Cj4gKyNkZWZpbmUgVjNEX0hVQl9J TlRfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDU4Cj4gKyNkZWZpbmUg VjNEX0hVQl9JTlRfTVNLX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDVjCj4g KyNkZWZpbmUgVjNEX0hVQl9JTlRfTVNLX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eDAwMDYwCj4gKyNkZWZpbmUgVjNEX0hVQl9JTlRfTVNLX0NMUiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAweDAwMDY0Cj4gKyMgZGVmaW5lIFYzRF9IVUJfSU5UX01NVV9XUlYgICAgICAgICAg ICAgICAgICAgICAgICAgICBCSVQoNSkKPiArIyBkZWZpbmUgVjNEX0hVQl9JTlRfTU1VX1BUSSAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg0KQo+ICsjIGRlZmluZSBWM0RfSFVCX0lOVF9N TVVfQ0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDMpCj4gKyMgZGVmaW5lIFYzRF9I VUJfSU5UX01TTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMikKPiArIyBkZWZp bmUgVjNEX0hVQl9JTlRfVEZVQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQo+ ICsjIGRlZmluZSBWM0RfSFVCX0lOVF9URlVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QklUKDApCj4gKwo+ICsjZGVmaW5lIFYzRF9HQ0FfQ0FDSEVfQ1RSTCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDAwYwo+ICsjIGRlZmluZSBWM0RfR0NBX0NBQ0hFX0NUUkxfRkxVU0gg ICAgICAgICAgICAgICAgICAgICAgQklUKDApCj4gKwo+ICsjZGVmaW5lIFYzRF9HQ0FfU0FGRV9T SFVURE9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBiMAo+ICsjIGRlZmluZSBWM0Rf R0NBX1NBRkVfU0hVVERPV05fRU4gICAgICAgICAgICAgICAgICAgICAgQklUKDApCj4gKwo+ICsj ZGVmaW5lIFYzRF9HQ0FfU0FGRV9TSFVURE9XTl9BQ0sgICAgICAgICAgICAgICAgICAgICAgMHgw MDBiNAo+ICsjIGRlZmluZSBWM0RfR0NBX1NBRkVfU0hVVERPV05fQUNLX0FDS0VEICAgICAgICAg ICAgICAgMwo+ICsKPiArIyBkZWZpbmUgVjNEX1RPUF9HUl9CUklER0VfUkVWSVNJT04gICAgICAg ICAgICAgICAgICAgIDB4MDAwMDAKPiArIyBkZWZpbmUgVjNEX1RPUF9HUl9CUklER0VfTUFKT1Jf TUFTSyAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDE1LCA4KQo+ICsjIGRlZmluZSBWM0RfVE9Q X0dSX0JSSURHRV9NQUpPUl9TSElGVCAgICAgICAgICAgICAgICAgOAo+ICsjIGRlZmluZSBWM0Rf VE9QX0dSX0JSSURHRV9NSU5PUl9NQVNLICAgICAgICAgICAgICAgICAgVjNEX01BU0soNywgMCkK PiArIyBkZWZpbmUgVjNEX1RPUF9HUl9CUklER0VfTUlOT1JfU0hJRlQgICAgICAgICAgICAgICAg IDAKPiArCj4gKy8qIDcyNjggcmVzZXQgcmVnICovCj4gKyMgZGVmaW5lIFYzRF9UT1BfR1JfQlJJ REdFX1NXX0lOSVRfMCAgICAgICAgICAgICAgICAgICAweDAwMDA4Cj4gKyMgZGVmaW5lIFYzRF9U T1BfR1JfQlJJREdFX1NXX0lOSVRfMF9WM0RfQ0xLXzEwOF9TV19JTklUIEJJVCgwKQo+ICsvKiA3 Mjc4IHJlc2V0IHJlZyAqLwo+ICsjIGRlZmluZSBWM0RfVE9QX0dSX0JSSURHRV9TV19JTklUXzEg ICAgICAgICAgICAgICAgICAgMHgwMDAwYwo+ICsjIGRlZmluZSBWM0RfVE9QX0dSX0JSSURHRV9T V19JTklUXzFfVjNEX0NMS18xMDhfU1dfSU5JVCBCSVQoMCkKPiArCj4gKy8qIFBlci1NTVUgcmVn aXN0ZXJzLiAqLwo+ICsKPiArI2RlZmluZSBWM0RfTU1VQ19DT05UUk9MICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDEwMDAKPiArIyBkZWZpbmUgVjNEX01NVUNfQ09OVFJPTF9DTEVB UiAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQo+ICsjIGRlZmluZSBWM0RfTU1VQ19DT05U Uk9MX0ZMVVNISU5HICAgICAgICAgICAgICAgICAgICAgQklUKDIpCj4gKyMgZGVmaW5lIFYzRF9N TVVDX0NPTlRST0xfRkxVU0ggICAgICAgICAgICAgICAgICAgICAgICBCSVQoMSkKPiArIyBkZWZp bmUgVjNEX01NVUNfQ09OVFJPTF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQo+ ICsKPiArI2RlZmluZSBWM0RfTU1VX0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDEyMDAKPiArIyBkZWZpbmUgVjNEX01NVV9DVExfQ0FQX0VYQ0VFREVEICAgICAgICAg ICAgICAgICAgICAgIEJJVCgyNykKPiArIyBkZWZpbmUgVjNEX01NVV9DVExfQ0FQX0VYQ0VFREVE X0FCT1JUICAgICAgICAgICAgICAgIEJJVCgyNikKPiArIyBkZWZpbmUgVjNEX01NVV9DVExfQ0FQ X0VYQ0VFREVEX0lOVCAgICAgICAgICAgICAgICAgIEJJVCgyNSkKPiArIyBkZWZpbmUgVjNEX01N VV9DVExfQ0FQX0VYQ0VFREVEX0VYQ0VQVElPTiAgICAgICAgICAgIEJJVCgyNCkKPiArIyBkZWZp bmUgVjNEX01NVV9DVExfUFRfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgyMCkK PiArIyBkZWZpbmUgVjNEX01NVV9DVExfUFRfSU5WQUxJRF9BQk9SVCAgICAgICAgICAgICAgICAg IEJJVCgxOSkKPiArIyBkZWZpbmUgVjNEX01NVV9DVExfUFRfSU5WQUxJRF9JTlQgICAgICAgICAg ICAgICAgICAgIEJJVCgxOCkKPiArIyBkZWZpbmUgVjNEX01NVV9DVExfUFRfSU5WQUxJRF9FWENF UFRJT04gICAgICAgICAgICAgIEJJVCgxNykKPiArIyBkZWZpbmUgVjNEX01NVV9DVExfV1JJVEVf VklPTEFUSU9OICAgICAgICAgICAgICAgICAgIEJJVCgxNikKPiArIyBkZWZpbmUgVjNEX01NVV9D VExfV1JJVEVfVklPTEFUSU9OX0FCT1JUICAgICAgICAgICAgIEJJVCgxMSkKPiArIyBkZWZpbmUg VjNEX01NVV9DVExfV1JJVEVfVklPTEFUSU9OX0lOVCAgICAgICAgICAgICAgIEJJVCgxMCkKPiAr IyBkZWZpbmUgVjNEX01NVV9DVExfV1JJVEVfVklPTEFUSU9OX0VYQ0VQVElPTiAgICAgICAgIEJJ VCg5KQo+ICsjIGRlZmluZSBWM0RfTU1VX0NUTF9UTEJfQ0xFQVJJTkcgICAgICAgICAgICAgICAg ICAgICAgQklUKDcpCj4gKyMgZGVmaW5lIFYzRF9NTVVfQ1RMX1RMQl9TVEFUU19DTEVBUiAgICAg ICAgICAgICAgICAgICBCSVQoMykKPiArIyBkZWZpbmUgVjNEX01NVV9DVExfVExCX0NMRUFSICAg ICAgICAgICAgICAgICAgICAgICAgIEJJVCgyKQo+ICsjIGRlZmluZSBWM0RfTU1VX0NUTF9UTEJf U1RBVFNfRU5BQkxFICAgICAgICAgICAgICAgICAgQklUKDEpCj4gKyMgZGVmaW5lIFYzRF9NTVVf Q1RMX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkKPiArCj4gKyNkZWZp bmUgVjNEX01NVV9QVF9QQV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMjA0 Cj4gKyNkZWZpbmUgVjNEX01NVV9ISVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAxMjA4Cj4gKyNkZWZpbmUgVjNEX01NVV9NSVNTRVMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAxMjBjCj4gKyNkZWZpbmUgVjNEX01NVV9TVEFMTFMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAxMjEwCj4gKwo+ICsjZGVmaW5lIFYzRF9NTVVfQUREUl9D QVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTIxNAo+ICsjIGRlZmluZSBWM0Rf TU1VX0FERFJfQ0FQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgQklUKDMxKQo+ICsjIGRl ZmluZSBWM0RfTU1VX0FERFJfQ0FQX01QQUdFX01BU0sgICAgICAgICAgICAgICAgICAgVjNEX01B U0soMTEsIDApCj4gKyMgZGVmaW5lIFYzRF9NTVVfQUREUl9DQVBfTVBBR0VfU0hJRlQgICAgICAg ICAgICAgICAgICAwCj4gKwo+ICsjZGVmaW5lIFYzRF9NTVVfU0hPT1RfRE9XTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMTIxOAo+ICsjIGRlZmluZSBWM0RfTU1VX1NIT09UX0RPV05f U0hPT1RJTkcgICAgICAgICAgICAgICAgICAgQklUKDI5KQo+ICsjIGRlZmluZSBWM0RfTU1VX1NI T09UX0RPV05fU0hPT1QgICAgICAgICAgICAgICAgICAgICAgQklUKDI4KQo+ICsjIGRlZmluZSBW M0RfTU1VX1NIT09UX0RPV05fUEFHRV9NQVNLICAgICAgICAgICAgICAgICAgVjNEX01BU0soMjcs IDApCj4gKyMgZGVmaW5lIFYzRF9NTVVfU0hPT1RfRE9XTl9QQUdFX1NISUZUICAgICAgICAgICAg ICAgICAwCj4gKwo+ICsjZGVmaW5lIFYzRF9NTVVfQllQQVNTX1NUQVJUICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMTIxYwo+ICsjZGVmaW5lIFYzRF9NTVVfQllQQVNTX0VORCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMTIyMAo+ICsKPiArLyogQVhJIElEIG9mIHRoZSBhY2Nl c3MgdGhhdCBmYXVsdGVkICovCj4gKyNkZWZpbmUgVjNEX01NVV9WSU9fSUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAxMjJjCj4gKwo+ICsvKiBBZGRyZXNzIGZvciBpbGxlZ2Fs IFBURXMgdG8gcmV0dXJuICovCj4gKyNkZWZpbmUgVjNEX01NVV9JTExFR0FMX0FERFIgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAxMjMwCj4gKyMgZGVmaW5lIFYzRF9NTVVfSUxMRUdBTF9B RERSX0VOQUJMRSAgICAgICAgICAgICAgICAgICBCSVQoMzEpCj4gKwo+ICsvKiBBZGRyZXNzIHRo YXQgZmF1bHRlZCAqLwo+ICsjZGVmaW5lIFYzRF9NTVVfVklPX0FERFIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgwMTIzNAo+ICsKPiArLyogUGVyLVYzRC1jb3JlIHJlZ2lzdGVycyAq Lwo+ICsKPiArI2RlZmluZSBWM0RfQ1RMX0lERU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAwMDAKPiArIyBkZWZpbmUgVjNEX0lERU5UMF9WRVJfTUFTSyAgICAgICAgICAg ICAgICAgICAgICAgICAgIFYzRF9NQVNLKDMxLCAyNCkKPiArIyBkZWZpbmUgVjNEX0lERU5UMF9W RVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Cj4gKwo+ICsjZGVmaW5lIFYzRF9D VExfSURFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNAo+ICsvKiBN dWx0aXBsZXMgb2YgMWtiICovCj4gKyMgZGVmaW5lIFYzRF9JREVOVDFfVlBNX1NJWkVfTUFTSyAg ICAgICAgICAgICAgICAgICAgICBWM0RfTUFTSygzMSwgMjgpCj4gKyMgZGVmaW5lIFYzRF9JREVO VDFfVlBNX1NJWkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAyOAo+ICsjIGRlZmluZSBWM0Rf SURFTlQxX05TRU1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgVjNEX01BU0soMjMsIDE2 KQo+ICsjIGRlZmluZSBWM0RfSURFTlQxX05TRU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAg ICAgMTYKPiArIyBkZWZpbmUgVjNEX0lERU5UMV9OVE1VX01BU0sgICAgICAgICAgICAgICAgICAg ICAgICAgIFYzRF9NQVNLKDE1LCAxMikKPiArIyBkZWZpbmUgVjNEX0lERU5UMV9OVE1VX1NISUZU ICAgICAgICAgICAgICAgICAgICAgICAgIDEyCj4gKyMgZGVmaW5lIFYzRF9JREVOVDFfUVVQU19N QVNLICAgICAgICAgICAgICAgICAgICAgICAgICBWM0RfTUFTSygxMSwgOCkKPiArIyBkZWZpbmUg VjNEX0lERU5UMV9RVVBTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDgKPiArIyBkZWZp bmUgVjNEX0lERU5UMV9OU0xDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIFYzRF9NQVNL KDcsIDQpCj4gKyMgZGVmaW5lIFYzRF9JREVOVDFfTlNMQ19TSElGVCAgICAgICAgICAgICAgICAg ICAgICAgICA0Cj4gKyMgZGVmaW5lIFYzRF9JREVOVDFfUkVWX01BU0sgICAgICAgICAgICAgICAg ICAgICAgICAgICBWM0RfTUFTSygzLCAwKQo+ICsjIGRlZmluZSBWM0RfSURFTlQxX1JFVl9TSElG VCAgICAgICAgICAgICAgICAgICAgICAgICAgMAo+ICsKPiArI2RlZmluZSBWM0RfQ1RMX0lERU5U MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgKPiArIyBkZWZpbmUgVjNE X0lERU5UMl9CQ0dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgyOCkKPiArCj4g KyNkZWZpbmUgVjNEX0NUTF9NSVNDQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eDAwMDE4Cj4gKyMgZGVmaW5lIFYzRF9NSVNDQ0ZHX09WUlRNVU9VVCAgICAgICAgICAgICAgICAg ICAgICAgICBCSVQoMCkKPiArCj4gKyNkZWZpbmUgVjNEX0NUTF9MMkNBQ1RMICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwMDIwCj4gKyMgZGVmaW5lIFYzRF9MMkNBQ1RMX0wyQ0NM UiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMikKPiArIyBkZWZpbmUgVjNEX0wyQ0FD VExfTDJDRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQo+ICsjIGRlZmluZSBW M0RfTDJDQUNUTF9MMkNFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCj4gKwo+ ICsjZGVmaW5lIFYzRF9DVExfU0xDQUNUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgwMDAyNAo+ICsjIGRlZmluZSBWM0RfU0xDQUNUTF9UVkNDU19NQVNLICAgICAgICAgICAgICAg ICAgICAgICAgVjNEX01BU0soMjcsIDI0KQo+ICsjIGRlZmluZSBWM0RfU0xDQUNUTF9UVkNDU19T SElGVCAgICAgICAgICAgICAgICAgICAgICAgMjQKPiArIyBkZWZpbmUgVjNEX1NMQ0FDVExfVERD Q1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDE5LCAxNikKPiArIyBkZWZp bmUgVjNEX1NMQ0FDVExfVERDQ1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE2Cj4gKyMg ZGVmaW5lIFYzRF9TTENBQ1RMX1VDQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICBWM0Rf TUFTSygxMSwgOCkKPiArIyBkZWZpbmUgVjNEX1NMQ0FDVExfVUNDX1NISUZUICAgICAgICAgICAg ICAgICAgICAgICAgIDgKPiArIyBkZWZpbmUgVjNEX1NMQ0FDVExfSUNDX01BU0sgICAgICAgICAg ICAgICAgICAgICAgICAgIFYzRF9NQVNLKDMsIDApCj4gKyMgZGVmaW5lIFYzRF9TTENBQ1RMX0lD Q19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCj4gKwo+ICsjZGVmaW5lIFYzRF9DVExf TDJUQ0FDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMAo+ICsjIGRlZmlu ZSBWM0RfTDJUQ0FDVExfVE1VV0NGICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDgpCj4g KyMgZGVmaW5lIFYzRF9MMlRDQUNUTF9MMlRfTk9fV00gICAgICAgICAgICAgICAgICAgICAgICBC SVQoNCkKPiArIyBkZWZpbmUgVjNEX0wyVENBQ1RMX0ZMTV9GTFVTSCAgICAgICAgICAgICAgICAg ICAgICAgIDAKPiArIyBkZWZpbmUgVjNEX0wyVENBQ1RMX0ZMTV9DTEVBUiAgICAgICAgICAgICAg ICAgICAgICAgIDEKPiArIyBkZWZpbmUgVjNEX0wyVENBQ1RMX0ZMTV9DTEVBTiAgICAgICAgICAg ICAgICAgICAgICAgIDIKPiArIyBkZWZpbmUgVjNEX0wyVENBQ1RMX0ZMTV9NQVNLICAgICAgICAg ICAgICAgICAgICAgICAgIFYzRF9NQVNLKDIsIDEpCj4gKyMgZGVmaW5lIFYzRF9MMlRDQUNUTF9G TE1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxCj4gKyMgZGVmaW5lIFYzRF9MMlRDQUNU TF9MMlRGTFMgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkKPiArI2RlZmluZSBWM0Rf Q1RMX0wyVEZMU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzQKPiArI2Rl ZmluZSBWM0RfQ1RMX0wyVEZMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAw MzgKPiArCj4gKyNkZWZpbmUgVjNEX0NUTF9JTlRfU1RTICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAweDAwMDUwCj4gKyNkZWZpbmUgVjNEX0NUTF9JTlRfU0VUICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMDU0Cj4gKyNkZWZpbmUgVjNEX0NUTF9JTlRfQ0xSICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDU4Cj4gKyNkZWZpbmUgVjNEX0NUTF9JTlRf TVNLX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDVjCj4gKyNkZWZpbmUgVjNE X0NUTF9JTlRfTVNLX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDYwCj4gKyNk ZWZpbmUgVjNEX0NUTF9JTlRfTVNLX0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw MDY0Cj4gKyMgZGVmaW5lIFYzRF9JTlRfUVBVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWM0RfTUFTSygyNywgMTYpCj4gKyMgZGVmaW5lIFYzRF9JTlRfUVBVX1NISUZUICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxNgo+ICsjIGRlZmluZSBWM0RfSU5UX0dNUFYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDUpCj4gKyMgZGVmaW5lIFYzRF9JTlRfVFJG QiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoNCkKPiArIyBkZWZpbmUgVjNE X0lOVF9TUElMTFVTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQo+ICsjIGRl ZmluZSBWM0RfSU5UX09VVE9NRU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDIp Cj4gKyMgZGVmaW5lIFYzRF9JTlRfRkxET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBCSVQoMSkKPiArIyBkZWZpbmUgVjNEX0lOVF9GUkRPTkUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEJJVCgwKQo+ICsKPiArI2RlZmluZSBWM0RfQ0xFX0NUMENTICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAKPiArI2RlZmluZSBWM0RfQ0xFX0NUMUNTICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDQKPiArI2RlZmluZSBWM0RfQ0xF X0NUTkNTKG4pIChWM0RfQ0xFX0NUMENTICsgNCAqIG4pCj4gKyNkZWZpbmUgVjNEX0NMRV9DVDBF QSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTA4Cj4gKyNkZWZpbmUgVjNE X0NMRV9DVDFFQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTBjCj4gKyNk ZWZpbmUgVjNEX0NMRV9DVE5FQShuKSAoVjNEX0NMRV9DVDBFQSArIDQgKiBuKQo+ICsjZGVmaW5l IFYzRF9DTEVfQ1QwQ0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDExMAo+ ICsjZGVmaW5lIFYzRF9DTEVfQ1QxQ0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgwMDExNAo+ICsjZGVmaW5lIFYzRF9DTEVfQ1ROQ0EobikgKFYzRF9DTEVfQ1QwQ0EgKyA0ICog bikKPiArI2RlZmluZSBWM0RfQ0xFX0NUMFJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAxMTgKPiArI2RlZmluZSBWM0RfQ0xFX0NUMVJBICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MDAxMWMKPiArI2RlZmluZSBWM0RfQ0xFX0NUMExDICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMjAKPiArI2RlZmluZSBWM0RfQ0xFX0NUMUxDICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMjQKPiArI2RlZmluZSBWM0RfQ0xF X0NUMFBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMjgKPiArI2RlZmlu ZSBWM0RfQ0xFX0NUMVBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMmMK PiArI2RlZmluZSBWM0RfQ0xFX1BDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAxMzAKPiArI2RlZmluZSBWM0RfQ0xFX0JGQyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDAxMzQKPiArI2RlZmluZSBWM0RfQ0xFX1JGQyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAxMzgKPiArI2RlZmluZSBWM0RfQ0xFX1RGQkMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxM2MKPiArI2RlZmluZSBWM0RfQ0xFX1RG SVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNDAKPiArI2RlZmluZSBW M0RfQ0xFX0NUMUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNDQKPiAr I2RlZmluZSBWM0RfQ0xFX0NUMVRJTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAxNDgKPiArI2RlZmluZSBWM0RfQ0xFX0NUMVRTS0lQICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAxNGMKPiArI2RlZmluZSBWM0RfQ0xFX0NUMVBUQ1QgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDAxNTAKPiArI2RlZmluZSBWM0RfQ0xFX0NUMFNZTkMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNTQKPiArI2RlZmluZSBWM0RfQ0xFX0NUMVNZ TkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNTgKPiArI2RlZmluZSBWM0Rf Q0xFX0NUMFFUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNWMKPiArIyBk ZWZpbmUgVjNEX0NMRV9DVDBRVFNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgx KQo+ICsjZGVmaW5lIFYzRF9DTEVfQ1QwUUJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgwMDE2MAo+ICsjZGVmaW5lIFYzRF9DTEVfQ1QxUUJBICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDE2NAo+ICsjZGVmaW5lIFYzRF9DTEVfQ1ROUUJBKG4pIChWM0RfQ0xF X0NUMFFCQSArIDQgKiBuKQo+ICsjZGVmaW5lIFYzRF9DTEVfQ1QwUUVBICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDE2OAo+ICsjZGVmaW5lIFYzRF9DTEVfQ1QxUUVBICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE2Ywo+ICsjZGVmaW5lIFYzRF9DTEVfQ1RO UUVBKG4pIChWM0RfQ0xFX0NUMFFFQSArIDQgKiBuKQo+ICsjZGVmaW5lIFYzRF9DTEVfQ1QwUU1B ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE3MAo+ICsjZGVmaW5lIFYzRF9D TEVfQ1QwUU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE3NAo+ICsjZGVm aW5lIFYzRF9DTEVfQ1QxUUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE3 OAo+ICsvKiBJZiBzZXQgd2l0aG91dCBFVFBST0MsIGVudGlyZWx5IHNraXAgdGlsZXMgd2l0aCBu byBwcmltaXRpdmVzLiAqLwo+ICsjIGRlZmluZSBWM0RfQ0xFX1FDRkdfRVRGSUxUICAgICAgICAg ICAgICAgICAgICAgICAgICAgQklUKDcpCj4gKy8qIElmIHNldCB3aXRoIEVURklMVCwganVzdCB3 cml0ZSB0aGUgY2xlYXIgY29sb3IgdG8gdGlsZXMgd2l0aCBubwo+ICsgKiBwcmltaXRpdmVzLgo+ ICsgKi8KPiArIyBkZWZpbmUgVjNEX0NMRV9RQ0ZHX0VUUFJPQyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJJVCg2KQo+ICsjIGRlZmluZSBWM0RfQ0xFX1FDRkdfRVRTRkxVU0ggICAgICAgICAg ICAgICAgICAgICAgICAgQklUKDEpCj4gKyMgZGVmaW5lIFYzRF9DTEVfUUNGR19NQ0RJUyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkKPiArCj4gKyNkZWZpbmUgVjNEX1BUQl9CUENB ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwCj4gKyNkZWZpbmUgVjNE X1BUQl9CUENTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzA0Cj4gKyNk ZWZpbmUgVjNEX1BUQl9CUE9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw MzA4Cj4gKyNkZWZpbmUgVjNEX1BUQl9CUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwMzBjCj4gKwo+ICsjZGVmaW5lIFYzRF9QVEJfQlhDRiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDMxMAo+ICsjIGRlZmluZSBWM0RfUFRCX0JYQ0ZfUldPUkRF UkRJU0EgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCj4gKyMgZGVmaW5lIFYzRF9QVEJfQlhD Rl9DTElQRElTQSAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkKPiArCj4gKyNkZWZpbmUg VjNEX0dNUF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwCj4g KyMgZGVmaW5lIFYzRF9HTVBfU1RBVFVTX0dNUFJTVCAgICAgICAgICAgICAgICAgICAgICAgICBC SVQoMzEpCj4gKyMgZGVmaW5lIFYzRF9HTVBfU1RBVFVTX1dSX0NPVU5UX01BU0sgICAgICAgICAg ICAgICAgICBWM0RfTUFTSygzMCwgMjQpCj4gKyMgZGVmaW5lIFYzRF9HTVBfU1RBVFVTX1dSX0NP VU5UX1NISUZUICAgICAgICAgICAgICAgICAyNAo+ICsjIGRlZmluZSBWM0RfR01QX1NUQVRVU19S RF9DT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgVjNEX01BU0soMjIsIDE2KQo+ICsjIGRlZmlu ZSBWM0RfR01QX1NUQVRVU19SRF9DT1VOVF9TSElGVCAgICAgICAgICAgICAgICAgMTYKPiArIyBk ZWZpbmUgVjNEX0dNUF9TVEFUVVNfV1JfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgIEJJVCg1 KQo+ICsjIGRlZmluZSBWM0RfR01QX1NUQVRVU19SRF9BQ1RJVkUgICAgICAgICAgICAgICAgICAg ICAgQklUKDQpCj4gKyMgZGVmaW5lIFYzRF9HTVBfU1RBVFVTX0NGR19CVVNZICAgICAgICAgICAg ICAgICAgICAgICBCSVQoMykKPiArIyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNfQ05UT1ZGICAgICAg ICAgICAgICAgICAgICAgICAgIEJJVCgyKQo+ICsjIGRlZmluZSBWM0RfR01QX1NUQVRVU19JTlZQ Uk9UICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCj4gKyMgZGVmaW5lIFYzRF9HTVBfU1RB VFVTX1ZJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkKPiArCj4gKyNkZWZpbmUg VjNEX0dNUF9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODA0Cj4g KyMgZGVmaW5lIFYzRF9HTVBfQ0ZHX0xCVVJTVEVOICAgICAgICAgICAgICAgICAgICAgICAgICBC SVQoMykKPiArIyBkZWZpbmUgVjNEX0dNUF9DRkdfUEdDUlNFTiAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJJVCgpCj4gKyMgZGVmaW5lIFYzRF9HTVBfQ0ZHX1NUT1BfUkVRICAgICAgICAgICAg ICAgICAgICAgICAgICBCSVQoMSkKPiArIyBkZWZpbmUgVjNEX0dNUF9DRkdfUFJPVF9FTkFCTEUg ICAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQo+ICsKPiArI2RlZmluZSBWM0RfR01QX1ZJT19B RERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDgKPiArI2RlZmluZSBWM0Rf R01QX1ZJT19UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MGMKPiArI2Rl ZmluZSBWM0RfR01QX1RBQkxFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4 MTAKPiArI2RlZmluZSBWM0RfR01QX0NMRUFSX0xPQUQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDA4MTQKPiArI2RlZmluZSBWM0RfR01QX1BSRVNFUlZFX0xPQUQgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MDA4MTgKPiArI2RlZmluZSBWM0RfR01QX1ZBTElEX0xJTkVTICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MjAKPiArCj4gKyNlbmRpZiAvKiBWM0RfUkVHU19I ICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3NjaGVkLmMgYi9kcml2 ZXJzL2dwdS9kcm0vdjNkL3YzZF9zY2hlZC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLjZjNjhiM2NlNDViMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vdjNkL3YzZF9zY2hlZC5jCj4gQEAgLTAsMCArMSwyMzAgQEAKPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCj4gKy8qIENvcHlyaWdodCAoQykgMjAxOCBC cm9hZGNvbSAqLwo+ICsKPiArLyoqCj4gKyAqIERPQzogQnJvYWRjb20gVjNEIHNjaGVkdWxpbmcK PiArICoKPiArICogVGhlIHNoYXJlZCBEUk0gR1BVIHNjaGVkdWxlciBpcyB1c2VkIHRvIGNvb3Jk aW5hdGUgc3VibWl0dGluZyBqb2JzCj4gKyAqIHRvIHRoZSBoYXJkd2FyZS4gIEVhY2ggRFJNIGZk IChyb3VnaGx5IGEgY2xpZW50IHByb2Nlc3MpIGdldHMgaXRzCj4gKyAqIG93biBzY2hlZHVsZXIg ZW50aXR5LCB3aGljaCB3aWxsIHByb2Nlc3Mgam9icyBpbiBvcmRlci4gIFRoZSBHUFUKPiArICog c2NoZWR1bGVyIHdpbGwgcm91bmQtcm9iaW4gYmV0d2VlbiBjbGllbnRzIHRvIHN1Ym1pdCB0aGUg bmV4dCBqb2IuCj4gKyAqCj4gKyAqIEZvciBzaW1wbGljaXR5LCBhbmQgaW4gb3JkZXIgdG8ga2Vl cCBsYXRlbmN5IGxvdyBmb3IgaW50ZXJhY3RpdmUKPiArICogam9icyB3aGVuIGJ1bGsgYmFja2dy b3VuZCBqb2JzIGFyZSBxdWV1ZWQgdXAsIHdlIHN1Ym1pdCBhIG5ldyBqb2IKPiArICogdG8gdGhl IEhXIG9ubHkgd2hlbiBpdCBoYXMgY29tcGxldGVkIHRoZSBsYXN0IG9uZSwgaW5zdGVhZCBvZgo+ ICsgKiBmaWxsaW5nIHVwIHRoZSBDVFswMV1RIEZJRk9zIHdpdGggam9icy4gIFNpbWlsYXJseSwg d2UgdXNlCj4gKyAqIHYzZF9qb2JfZGVwZW5kZW5jeSgpIHRvIG1hbmFnZSB0aGUgZGVwZW5kZW5j eSBiZXR3ZWVuIGJpbiBhbmQKPiArICogcmVuZGVyLCBpbnN0ZWFkIG9mIGhhdmluZyB0aGUgY2xp ZW50cyBzdWJtaXQgam9icyB3aXRoIHVzaW5nIHRoZQo+ICsgKiBIVydzIHNlbWFwaG9yZXMgdG8g aW50ZXJsb2NrIGJldHdlZW4gdGhlbS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgva3Ro cmVhZC5oPgo+ICsKPiArI2luY2x1ZGUgInYzZF9kcnYuaCIKPiArI2luY2x1ZGUgInYzZF9yZWdz LmgiCj4gKyNpbmNsdWRlICJ2M2RfdHJhY2UuaCIKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdjNkX2pv YiAqCj4gK3RvX3YzZF9qb2Ioc3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikKPiArewo+ ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihzY2hlZF9qb2IsIHN0cnVjdCB2M2Rfam9iLCBiYXNlKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArdjNkX2pvYl9mcmVlKHN0cnVjdCBkcm1fc2NoZWRf am9iICpzY2hlZF9qb2IpCj4gK3sKPiArCXN0cnVjdCB2M2Rfam9iICpqb2IgPSB0b192M2Rfam9i KHNjaGVkX2pvYik7Cj4gKwo+ICsJdjNkX2V4ZWNfcHV0KGpvYi0+ZXhlYyk7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBSZXR1cm5zIHRoZSBmZW5jZXMgdGhhdCB0aGUgYmluIGpvYiBkZXBlbmRzIG9u LCBvbmUgYnkgb25lLgo+ICsgKiB2M2Rfam9iX3J1bigpIHdvbid0IGJlIGNhbGxlZCB1bnRpbCBh bGwgb2YgdGhlbSBoYXZlIGJlZW4gc2lnbmFsZWQuCj4gKyAqLwo+ICtzdGF0aWMgc3RydWN0IGRt YV9mZW5jZSAqCj4gK3YzZF9qb2JfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2No ZWRfam9iLAo+ICsJCSAgIHN0cnVjdCBkcm1fc2NoZWRfZW50aXR5ICpzX2VudGl0eSkKPiArewo+ ICsJc3RydWN0IHYzZF9qb2IgKmpvYiA9IHRvX3YzZF9qb2Ioc2NoZWRfam9iKTsKPiArCXN0cnVj dCB2M2RfZXhlY19pbmZvICpleGVjID0gam9iLT5leGVjOwo+ICsJZW51bSB2M2RfcXVldWUgcSA9 IGpvYiA9PSAmZXhlYy0+YmluID8gVjNEX0JJTiA6IFYzRF9SRU5ERVI7Cj4gKwlzdHJ1Y3QgZG1h X2ZlbmNlICpmZW5jZTsKPiArCj4gKwlmZW5jZSA9IGpvYi0+aW5fZmVuY2U7Cj4gKwlpZiAoZmVu Y2UpIHsKPiArCQlqb2ItPmluX2ZlbmNlID0gTlVMTDsKPiArCQlyZXR1cm4gZmVuY2U7Cj4gKwl9 Cj4gKwo+ICsJaWYgKHEgPT0gVjNEX1JFTkRFUikgewo+ICsJCS8qIElmIHdlIGhhZCBhIGJpbiBq b2IsIHRoZSByZW5kZXIgam9iIGRlZmluaXRlbHkgZGVwZW5kcyBvbgo+ICsJCSAqIGl0LiBXZSBm aXJzdCBoYXZlIHRvIHdhaXQgZm9yIGJpbiB0byBiZSBzY2hlZHVsZWQsIHNvIHRoYXQKPiArCQkg KiBpdHMgZG9uZV9mZW5jZSBpcyBjcmVhdGVkLgo+ICsJCSAqLwo+ICsJCWZlbmNlID0gZXhlYy0+ YmluX2RvbmVfZmVuY2U7Cj4gKwkJaWYgKGZlbmNlKSB7Cj4gKwkJCWV4ZWMtPmJpbl9kb25lX2Zl bmNlID0gTlVMTDsKPiArCQkJcmV0dXJuIGZlbmNlOwo+ICsJCX0KPiArCX0KPiArCj4gKwkvKiBY WFg6IFdhaXQgb24gYSBmZW5jZSBmb3Igc3dpdGNoaW5nIHRoZSBHTVAgaWYgbmVjZXNzYXJ5LAo+ ICsJICogYW5kIHRoZW4gZG8gc28uCj4gKwkgKi8KPiArCj4gKwlyZXR1cm4gZmVuY2U7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICp2M2Rfam9iX3J1bihzdHJ1Y3QgZHJtX3Nj aGVkX2pvYiAqc2NoZWRfam9iKQo+ICt7Cj4gKwlzdHJ1Y3QgdjNkX2pvYiAqam9iID0gdG9fdjNk X2pvYihzY2hlZF9qb2IpOwo+ICsJc3RydWN0IHYzZF9leGVjX2luZm8gKmV4ZWMgPSBqb2ItPmV4 ZWM7Cj4gKwllbnVtIHYzZF9xdWV1ZSBxID0gam9iID09ICZleGVjLT5iaW4gPyBWM0RfQklOIDog VjNEX1JFTkRFUjsKPiArCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSBleGVjLT52M2Q7Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gdjNkLT5kcm07Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5j ZTsKPiArCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gKwo+ICsJaWYgKHVubGlrZWx5KGpvYi0+ YmFzZS5zX2ZlbmNlLT5maW5pc2hlZC5lcnJvcikpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJ LyogTG9jayByZXF1aXJlZCBhcm91bmQgYmluX2pvYiB1cGRhdGUgdnMgSVJRIGhhbmRsZXIncwo+ ICsJICogdjNkLT5vdmVyZmxvd19tZW0gY2hhbmdlLgo+ICsJICovCj4gKwlzcGluX2xvY2tfaXJx c2F2ZSgmdjNkLT5qb2JfbG9jaywgaXJxZmxhZ3MpOwo+ICsJaWYgKHEgPT0gVjNEX0JJTikgewo+ ICsJCXYzZC0+YmluX2pvYiA9IGpvYi0+ZXhlYzsKPiArCj4gKwkJaWYgKHYzZC0+b3ZlcmZsb3df Ym8pIHsKPiArCQkJaWYgKGxpc3RfZW1wdHkoJnYzZC0+b3ZlcmZsb3dfYm8tPnVucmVmX2hlYWQp KQo+ICsJCQkJZHJtX2dlbV9vYmplY3RfZ2V0KCZ2M2QtPm92ZXJmbG93X2JvLT5iYXNlKTsKPiAr CQkJbGlzdF9tb3ZlX3RhaWwoJnYzZC0+b3ZlcmZsb3dfYm8tPnVucmVmX2hlYWQsCj4gKwkJCQkg ICAgICAgJnYzZC0+YmluX2pvYi0+dW5yZWZfbGlzdCk7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiAr CQl2M2QtPnJlbmRlcl9qb2IgPSBqb2ItPmV4ZWM7Cj4gKwl9Cj4gKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZ2M2QtPmpvYl9sb2NrLCBpcnFmbGFncyk7Cj4gKwo+ICsJLyogQ2FuIHdlIGF2b2lk IHRoaXMgZmx1c2ggd2hlbiBxPT1SRU5ERVI/ICBXZSBuZWVkIHRvIGJlCj4gKwkgKiBjYXJlZnVs IG9mIHNjaGVkdWxpbmcsIHRob3VnaCAtLSBpbWFnaW5lIGpvYjAgcmVuZGVyaW5nIHRvCj4gKwkg KiB0ZXh0dXJlIGFuZCBqb2IxIHJlYWRpbmcsIGFuZCB0aGVtIGJlaW5nIGV4ZWN1dGVkIGFzIGJp bjAsCj4gKwkgKiBiaW4xLCByZW5kZXIwLCByZW5kZXIxLCBzbyB0aGF0IHJlbmRlcjEncyBmbHVz aCBhdCBiaW4gdGltZQo+ICsJICogd2Fzbid0IGVub3VnaC4KPiArCSAqLwo+ICsJdjNkX2ludmFs aWRhdGVfY2FjaGVzKHYzZCk7Cj4gKwo+ICsJZmVuY2UgPSB2M2RfZmVuY2VfY3JlYXRlKHYzZCwg cSk7Cj4gKwlpZiAoIWZlbmNlKQo+ICsJCXJldHVybiBmZW5jZTsKPiArCj4gKwlpZiAoam9iLT5k b25lX2ZlbmNlKQo+ICsJCWRtYV9mZW5jZV9wdXQoam9iLT5kb25lX2ZlbmNlKTsKPiArCWpvYi0+ ZG9uZV9mZW5jZSA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOwo+ICsKPiArCXRyYWNlX3YzZF9zdWJt aXRfY2woZGV2LCBxID09IFYzRF9SRU5ERVIsIHRvX3YzZF9mZW5jZShmZW5jZSktPnNlcW5vLAo+ ICsJCQkgICAgam9iLT5zdGFydCwgam9iLT5lbmQpOwo+ICsKPiArCWlmIChxID09IFYzRF9CSU4p IHsKPiArCQlpZiAoZXhlYy0+cW1hKSB7Cj4gKwkJCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9DTEVf Q1QwUU1BLCBleGVjLT5xbWEpOwo+ICsJCQlWM0RfQ09SRV9XUklURSgwLCBWM0RfQ0xFX0NUMFFN UywgZXhlYy0+cW1zKTsKPiArCQl9Cj4gKwkJaWYgKGV4ZWMtPnF0cykgewo+ICsJCQlWM0RfQ09S RV9XUklURSgwLCBWM0RfQ0xFX0NUMFFUUywKPiArCQkJCSAgICAgICBWM0RfQ0xFX0NUMFFUU19F TkFCTEUgfAo+ICsJCQkJICAgICAgIGV4ZWMtPnF0cyk7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiAr CQkvKiBYWFg6IFNldCB0aGUgUUNGRyAqLwo+ICsJfQo+ICsKPiArCS8qIFNldCB0aGUgY3VycmVu dCBhbmQgZW5kIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgbGlzdC4KPiArCSAqIFdyaXRpbmcgdGhl IGVuZCByZWdpc3RlciBpcyB3aGF0IHN0YXJ0cyB0aGUgam9iLgo+ICsJICovCj4gKwlWM0RfQ09S RV9XUklURSgwLCBWM0RfQ0xFX0NUTlFCQShxKSwgam9iLT5zdGFydCk7Cj4gKwlWM0RfQ09SRV9X UklURSgwLCBWM0RfQ0xFX0NUTlFFQShxKSwgam9iLT5lbmQpOwo+ICsKPiArCXJldHVybiBmZW5j ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArdjNkX2pvYl90aW1lZG91dChzdHJ1Y3QgZHJt X3NjaGVkX2pvYiAqc2NoZWRfam9iKQo+ICt7Cj4gKwlzdHJ1Y3QgdjNkX2pvYiAqam9iID0gdG9f djNkX2pvYihzY2hlZF9qb2IpOwo+ICsJc3RydWN0IHYzZF9leGVjX2luZm8gKmV4ZWMgPSBqb2It PmV4ZWM7Cj4gKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gZXhlYy0+djNkOwo+ICsJZW51bSB2M2Rf cXVldWUgcTsKPiArCj4gKwltdXRleF9sb2NrKCZ2M2QtPnJlc2V0X2xvY2spOwo+ICsKPiArCS8q IGJsb2NrIHNjaGVkdWxlciAqLwo+ICsJZm9yIChxID0gMDsgcSA8IFYzRF9NQVhfUVVFVUVTOyBx KyspIHsKPiArCQlzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVkID0gJnYzZC0+cXVldWVb cV0uc2NoZWQ7Cj4gKwo+ICsJCWt0aHJlYWRfcGFyayhzY2hlZC0+dGhyZWFkKTsKPiArCQlkcm1f c2NoZWRfaHdfam9iX3Jlc2V0KHNjaGVkLCAoc2NoZWRfam9iLT5zY2hlZCA9PSBzY2hlZCA/Cj4g KwkJCQkJICAgICAgIHNjaGVkX2pvYiA6IE5VTEwpKTsKPiArCX0KPiArCj4gKwkvKiBnZXQgdGhl IEdQVSBiYWNrIGludG8gdGhlIGluaXQgc3RhdGUgKi8KPiArCXYzZF9yZXNldCh2M2QpOwo+ICsK PiArCS8qIFVuYmxvY2sgc2NoZWR1bGVycyBhbmQgcmVzdGFydCB0aGVpciBqb2JzLiAqLwo+ICsJ Zm9yIChxID0gMDsgcSA8IFYzRF9NQVhfUVVFVUVTOyBxKyspIHsKPiArCQlkcm1fc2NoZWRfam9i X3JlY292ZXJ5KCZ2M2QtPnF1ZXVlW3FdLnNjaGVkKTsKPiArCQlrdGhyZWFkX3VucGFyayh2M2Qt PnF1ZXVlW3FdLnNjaGVkLnRocmVhZCk7Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZ2M2Qt PnJlc2V0X2xvY2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9zY2hlZF9i YWNrZW5kX29wcyB2M2Rfc2NoZWRfb3BzID0gewo+ICsJLmRlcGVuZGVuY3kgPSB2M2Rfam9iX2Rl cGVuZGVuY3ksCj4gKwkucnVuX2pvYiA9IHYzZF9qb2JfcnVuLAo+ICsJLnRpbWVkb3V0X2pvYiA9 IHYzZF9qb2JfdGltZWRvdXQsCj4gKwkuZnJlZV9qb2IgPSB2M2Rfam9iX2ZyZWUKPiArfTsKPiAr Cj4gK2ludAo+ICt2M2Rfc2NoZWRfaW5pdChzdHJ1Y3QgdjNkX2RldiAqdjNkKQo+ICt7Cj4gKwlp bnQgaHdfam9ic19saW1pdCA9IDE7Cj4gKwlpbnQgam9iX2hhbmdfbGltaXQgPSAwOwo+ICsJaW50 IGhhbmdfbGltaXRfbXMgPSA1MDA7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGRybV9zY2hl ZF9pbml0KCZ2M2QtPnF1ZXVlW1YzRF9CSU5dLnNjaGVkLAo+ICsJCQkgICAgICZ2M2Rfc2NoZWRf b3BzLAo+ICsJCQkgICAgIGh3X2pvYnNfbGltaXQsIGpvYl9oYW5nX2xpbWl0LAo+ICsJCQkgICAg IG1zZWNzX3RvX2ppZmZpZXMoaGFuZ19saW1pdF9tcyksCj4gKwkJCSAgICAgInYzZF9iaW4iKTsK PiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKHYzZC0+ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBi aW4gc2NoZWR1bGVyOiAlZC4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJ cmV0ID0gZHJtX3NjaGVkX2luaXQoJnYzZC0+cXVldWVbVjNEX1JFTkRFUl0uc2NoZWQsCj4gKwkJ CSAgICAgJnYzZF9zY2hlZF9vcHMsCj4gKwkJCSAgICAgaHdfam9ic19saW1pdCwgam9iX2hhbmdf bGltaXQsCj4gKwkJCSAgICAgbXNlY3NfdG9famlmZmllcyhoYW5nX2xpbWl0X21zKSwKPiArCQkJ ICAgICAidjNkX3JlbmRlciIpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIodjNkLT5kZXYs ICJGYWlsZWQgdG8gY3JlYXRlIHJlbmRlciBzY2hlZHVsZXI6ICVkLiIsCj4gKwkJCXJldCk7Cj4g KwkJZHJtX3NjaGVkX2ZpbmkoJnYzZC0+cXVldWVbVjNEX0JJTl0uc2NoZWQpOwo+ICsJCXJldHVy biByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQKPiArdjNkX3Nj aGVkX2Zpbmkoc3RydWN0IHYzZF9kZXYgKnYzZCkKPiArewo+ICsJZW51bSB2M2RfcXVldWUgcTsK PiArCj4gKwlmb3IgKHEgPSAwOyBxIDwgVjNEX01BWF9RVUVVRVM7IHErKykKPiArCQlkcm1fc2No ZWRfZmluaSgmdjNkLT5xdWV1ZVtxXS5zY2hlZCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3YzZC92M2RfdHJhY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3RyYWNl LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uODVkZDM1MWUx ZTA5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3RyYWNl LmgKPiBAQCAtMCwwICsxLDgyIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wKwo+ICsvKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBCcm9hZGNvbSAqLwo+ICsKPiArI2lm ICFkZWZpbmVkKF9WM0RfVFJBQ0VfSF8pIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JF QUQpCj4gKyNkZWZpbmUgX1YzRF9UUkFDRV9IXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3N0cmlu Z2lmeS5oPgo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Ry YWNlcG9pbnQuaD4KPiArCj4gKyN1bmRlZiBUUkFDRV9TWVNURU0KPiArI2RlZmluZSBUUkFDRV9T WVNURU0gdjNkCj4gKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHYzZF90cmFjZQo+ICsKPiAr VFJBQ0VfRVZFTlQodjNkX3N1Ym1pdF9jbCwKPiArCSAgICBUUF9QUk9UTyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBib29sIGlzX3JlbmRlciwKPiArCQkgICAgIHVpbnQ2NF90IHNlcW5vLAo+ICsJ CSAgICAgdTMyIGN0bnFiYSwgdTMyIGN0bnFlYSksCj4gKwkgICAgVFBfQVJHUyhkZXYsIGlzX3Jl bmRlciwgc2Vxbm8sIGN0bnFiYSwgY3RucWVhKSwKPiArCj4gKwkgICAgVFBfU1RSVUNUX19lbnRy eSgKPiArCQkJICAgICBfX2ZpZWxkKHUzMiwgZGV2KQo+ICsJCQkgICAgIF9fZmllbGQoYm9vbCwg aXNfcmVuZGVyKQo+ICsJCQkgICAgIF9fZmllbGQodTY0LCBzZXFubykKPiArCQkJICAgICBfX2Zp ZWxkKHUzMiwgY3RucWJhKQo+ICsJCQkgICAgIF9fZmllbGQodTMyLCBjdG5xZWEpCj4gKwkJCSAg ICAgKSwKPiArCj4gKwkgICAgVFBfZmFzdF9hc3NpZ24oCj4gKwkJCSAgIF9fZW50cnktPmRldiA9 IGRldi0+cHJpbWFyeS0+aW5kZXg7Cj4gKwkJCSAgIF9fZW50cnktPmlzX3JlbmRlciA9IGlzX3Jl bmRlcjsKPiArCQkJICAgX19lbnRyeS0+c2Vxbm8gPSBzZXFubzsKPiArCQkJICAgX19lbnRyeS0+ Y3RucWJhID0gY3RucWJhOwo+ICsJCQkgICBfX2VudHJ5LT5jdG5xZWEgPSBjdG5xZWE7Cj4gKwkJ CSAgICksCj4gKwo+ICsJICAgIFRQX3ByaW50aygiZGV2PSV1LCAlcywgc2Vxbm89JWxsdSwgMHgl MDh4Li4weCUwOHgiLAo+ICsJCSAgICAgIF9fZW50cnktPmRldiwKPiArCQkgICAgICBfX2VudHJ5 LT5pc19yZW5kZXIgPyAiUkNMIiA6ICJCQ0wiLAo+ICsJCSAgICAgIF9fZW50cnktPnNlcW5vLAo+ ICsJCSAgICAgIF9fZW50cnktPmN0bnFiYSwKPiArCQkgICAgICBfX2VudHJ5LT5jdG5xZWEpCj4g Kyk7Cj4gKwo+ICtUUkFDRV9FVkVOVCh2M2RfcmVzZXRfYmVnaW4sCj4gKwkgICAgVFBfUFJPVE8o c3RydWN0IGRybV9kZXZpY2UgKmRldiksCj4gKwkgICAgVFBfQVJHUyhkZXYpLAo+ICsKPiArCSAg ICBUUF9TVFJVQ1RfX2VudHJ5KAo+ICsJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCj4gKwkJCSAg ICAgKSwKPiArCj4gKwkgICAgVFBfZmFzdF9hc3NpZ24oCj4gKwkJCSAgIF9fZW50cnktPmRldiA9 IGRldi0+cHJpbWFyeS0+aW5kZXg7Cj4gKwkJCSAgICksCj4gKwo+ICsJICAgIFRQX3ByaW50aygi ZGV2PSV1IiwKPiArCQkgICAgICBfX2VudHJ5LT5kZXYpCj4gKyk7Cj4gKwo+ICtUUkFDRV9FVkVO VCh2M2RfcmVzZXRfZW5kLAo+ICsJICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp LAo+ICsJICAgIFRQX0FSR1MoZGV2KSwKPiArCj4gKwkgICAgVFBfU1RSVUNUX19lbnRyeSgKPiAr CQkJICAgICBfX2ZpZWxkKHUzMiwgZGV2KQo+ICsJCQkgICAgICksCj4gKwo+ICsJICAgIFRQX2Zh c3RfYXNzaWduKAo+ICsJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4Owo+ ICsJCQkgICApLAo+ICsKPiArCSAgICBUUF9wcmludGsoImRldj0ldSIsCj4gKwkJICAgICAgX19l bnRyeS0+ZGV2KQo+ICspOwo+ICsKPiArI2VuZGlmIC8qIF9WM0RfVFJBQ0VfSF8gKi8KPiArCj4g Ky8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLwo+ICsjdW5kZWYgVFJB Q0VfSU5DTFVERV9QQVRICj4gKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIC4KPiArI2luY2x1 ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v djNkL3YzZF90cmFjZV9wb2ludHMuYyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3RyYWNlX3Bv aW50cy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjQ4Mjky MmQ3YzdlMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF90 cmFjZV9wb2ludHMuYwo+IEBAIC0wLDAgKzEsOSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCsKPiArLyogQ29weXJpZ2h0IChDKSAyMDE1IEJyb2FkY29tICovCj4gKwo+ ICsjaW5jbHVkZSAidjNkX2Rydi5oIgo+ICsKPiArI2lmbmRlZiBfX0NIRUNLRVJfXwo+ICsjZGVm aW5lIENSRUFURV9UUkFDRV9QT0lOVFMKPiArI2luY2x1ZGUgInYzZF90cmFjZS5oIgo+ICsjZW5k aWYKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS92M2RfZHJtLmggYi9pbmNsdWRlL3Vh cGkvZHJtL3YzZF9kcm0uaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAw MDAwLi4yMDFhMDc2NDViZGQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS91YXBpL2Ry bS92M2RfZHJtLmgKPiBAQCAtMCwwICsxLDE5MSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkg MjAxNC0yMDE4IEJyb2FkY29tCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us Cj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4g KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiAr ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsK PiArI2lmbmRlZiBfVjNEX0RSTV9IXwo+ICsjZGVmaW5lIF9WM0RfRFJNX0hfCj4gKwo+ICsjaW5j bHVkZSAiZHJtLmgiCj4gKwo+ICsjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKPiArZXh0ZXJuICJD IiB7Cj4gKyNlbmRpZgo+ICsKPiArI2RlZmluZSBEUk1fVjNEX1NVQk1JVF9DTCAgICAgICAgICAg ICAgICAgICAgICAgICAweDAwCj4gKyNkZWZpbmUgRFJNX1YzRF9XQUlUX0JPICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgwMQo+ICsjZGVmaW5lIERSTV9WM0RfQ1JFQVRFX0JPICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDIKPiArI2RlZmluZSBEUk1fVjNEX01NQVBfQk8gICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAzCj4gKyNkZWZpbmUgRFJNX1YzRF9HRVRfUEFSQU0gICAgICAg ICAgICAgICAgICAgICAgICAgMHgwNAo+ICsjZGVmaW5lIERSTV9WM0RfR0VUX0JPX09GRlNFVCAg ICAgICAgICAgICAgICAgICAgIDB4MDUKPiArCj4gKyNkZWZpbmUgRFJNX0lPQ1RMX1YzRF9TVUJN SVRfQ0wgICAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVjNEX1NVQk1J VF9DTCwgc3RydWN0IGRybV92M2Rfc3VibWl0X2NsKQo+ICsjZGVmaW5lIERSTV9JT0NUTF9WM0Rf V0FJVF9CTyAgICAgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1YzRF9X QUlUX0JPLCBzdHJ1Y3QgZHJtX3YzZF93YWl0X2JvKQo+ICsjZGVmaW5lIERSTV9JT0NUTF9WM0Rf Q1JFQVRFX0JPICAgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1YzRF9D UkVBVEVfQk8sIHN0cnVjdCBkcm1fdjNkX2NyZWF0ZV9ibykKPiArI2RlZmluZSBEUk1fSU9DVExf VjNEX01NQVBfQk8gICAgICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9W M0RfTU1BUF9CTywgc3RydWN0IGRybV92M2RfbW1hcF9ibykKPiArI2RlZmluZSBEUk1fSU9DVExf VjNEX0dFVF9QQVJBTSAgICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9W M0RfR0VUX1BBUkFNLCBzdHJ1Y3QgZHJtX3YzZF9nZXRfcGFyYW0pCj4gKyNkZWZpbmUgRFJNX0lP Q1RMX1YzRF9HRVRfQk9fT0ZGU0VUICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBE Uk1fVjNEX0dFVF9CT19PRkZTRVQsIHN0cnVjdCBkcm1fdjNkX2dldF9ib19vZmZzZXQpCj4gKwo+ ICsvKioKPiArICogc3RydWN0IGRybV92M2Rfc3VibWl0X2NsIC0gaW9jdGwgYXJndW1lbnQgZm9y IHN1Ym1pdHRpbmcgY29tbWFuZHMgdG8gdGhlIDNECj4gKyAqIGVuZ2luZS4KPiArICoKPiArICog VGhpcyBhc2tzIHRoZSBrZXJuZWwgdG8gaGF2ZSB0aGUgR1BVIGV4ZWN1dGUgYW4gb3B0aW9uYWwg YmlubmVyCj4gKyAqIGNvbW1hbmQgbGlzdCwgYW5kIGEgcmVuZGVyIGNvbW1hbmQgbGlzdC4KPiAr ICovCj4gK3N0cnVjdCBkcm1fdjNkX3N1Ym1pdF9jbCB7Cj4gKwkvKiBQb2ludGVyIHRvIHRoZSBi aW5uZXIgY29tbWFuZCBsaXN0Lgo+ICsJICoKPiArCSAqIFRoaXMgaXMgdGhlIGZpcnN0IHNldCBv ZiBjb21tYW5kcyBleGVjdXRlZCwgd2hpY2ggcnVucyB0aGUKPiArCSAqIGNvb3JkaW5hdGUgc2hh ZGVyIHRvIGRldGVybWluZSB3aGVyZSBwcmltaXRpdmVzIGxhbmQgb24gdGhlIHNjcmVlbiwKPiAr CSAqIHRoZW4gd3JpdGVzIG91dCB0aGUgc3RhdGUgdXBkYXRlcyBhbmQgZHJhdyBjYWxscyBuZWNl c3NhcnkgcGVyIHRpbGUKPiArCSAqIHRvIHRoZSB0aWxlIGFsbG9jYXRpb24gQk8uCj4gKwkgKi8K PiArCV9fdTMyIGJjbF9zdGFydDsKPiArCj4gKwkgLyoqIEVuZCBhZGRyZXNzIG9mIHRoZSBCQ0wg KGZpcnN0IGJ5dGUgYWZ0ZXIgdGhlIEJDTCkgKi8KPiArCV9fdTMyIGJjbF9lbmQ7Cj4gKwo+ICsJ LyogT2Zmc2V0IG9mIHRoZSByZW5kZXIgY29tbWFuZCBsaXN0Lgo+ICsJICoKPiArCSAqIFRoaXMg aXMgdGhlIHNlY29uZCBzZXQgb2YgY29tbWFuZHMgZXhlY3V0ZWQsIHdoaWNoIHdpbGwgZWl0aGVy Cj4gKwkgKiBleGVjdXRlIHRoZSB0aWxlcyB0aGF0IGhhdmUgYmVlbiBzZXQgdXAgYnkgdGhlIEJD TCwgb3IgYSBmaXhlZCBzZXQKPiArCSAqIG9mIHRpbGVzIChpbiB0aGUgY2FzZSBvZiBSQ0wtb25s eSBibGl0cykuCj4gKwkgKi8KPiArCV9fdTMyIHJjbF9zdGFydDsKPiArCj4gKwkgLyoqIEVuZCBh ZGRyZXNzIG9mIHRoZSBSQ0wgKGZpcnN0IGJ5dGUgYWZ0ZXIgdGhlIFJDTCkgKi8KPiArCV9fdTMy IHJjbF9lbmQ7Cj4gKwo+ICsJLyoqIEFuIG9wdGlvbmFsIHN5bmMgb2JqZWN0IHRvIHdhaXQgb24g YmVmb3JlIHN0YXJ0aW5nIHRoZSBCQ0wuICovCj4gKwlfX3UzMiBpbl9zeW5jX2JjbDsKPiArCS8q KiBBbiBvcHRpb25hbCBzeW5jIG9iamVjdCB0byB3YWl0IG9uIGJlZm9yZSBzdGFydGluZyB0aGUg UkNMLiAqLwo+ICsJX191MzIgaW5fc3luY19yY2w7Cj4gKwkvKiogQW4gb3B0aW9uYWwgc3luYyBv YmplY3QgdG8gcGxhY2UgdGhlIGNvbXBsZXRpb24gZmVuY2UgaW4uICovCj4gKwlfX3UzMiBvdXRf c3luYzsKPiArCj4gKwkvKiBPZmZzZXQgb2YgdGhlIHRpbGUgYWxsb2MgbWVtb3J5Cj4gKwkgKgo+ ICsJICogVGhpcyBpcyBvcHRpb25hbCBvbiBWM0QgMy4zICh3aGVyZSB0aGUgQ0wgY2FuIHNldCB0 aGUgdmFsdWUpIGJ1dAo+ICsJICogcmVxdWlyZWQgb24gVjNEIDQuMS4KPiArCSAqLwo+ICsJX191 MzIgcW1hOwo+ICsKPiArCS8qKiBTaXplIG9mIHRoZSB0aWxlIGFsbG9jIG1lbW9yeS4gKi8KPiAr CV9fdTMyIHFtczsKPiArCj4gKwkvKiogT2Zmc2V0IG9mIHRoZSB0aWxlIHN0YXRlIGRhdGEgYXJy YXkuICovCj4gKwlfX3UzMiBxdHM7Cj4gKwo+ICsJLyogUG9pbnRlciB0byBhIHUzMiBhcnJheSBv ZiB0aGUgQk9zIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIGpvYi4KPiArCSAqLwo+ICsJX191 NjQgYm9faGFuZGxlczsKPiArCj4gKwkvKiBOdW1iZXIgb2YgQk8gaGFuZGxlcyBwYXNzZWQgaW4g KHNpemUgaXMgdGhhdCB0aW1lcyA0KS4gKi8KPiArCV9fdTMyIGJvX2hhbmRsZV9jb3VudDsKCkkg dGhpbmsgeW91IHdhbnQgYW4gX18zMiByZXN2L2ZsYWdzL3BhZCAoYW5kIGNoZWNrIGl0J3MgMCkg aGVyZSwgdG8gYWxpZ24gd2l0aAo4Ynl0ZXMuIEJ1dCBJIGZyZWVseSBhZG1pdCBteSBpb2N0bCBz dHJ1Y3QgbGF5b3V0IGtub3dsZWRnZSBpcyBzb21lIGdvb2QKY2FyZ28tY3VsdCA6LSkKCj4gK307 Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGRybV92M2Rfd2FpdF9ibyAtIGlvY3RsIGFyZ3VtZW50 IGZvciB3YWl0aW5nIGZvcgo+ICsgKiBjb21wbGV0aW9uIG9mIHRoZSBsYXN0IERSTV9WM0RfU1VC TUlUX0NMIG9uIGEgQk8uCj4gKyAqCj4gKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBjYXNlcyB3aGVy ZSBtdWx0aXBsZSBwcm9jZXNzZXMgbWlnaHQgYmUKPiArICogcmVuZGVyaW5nIHRvIGEgQk8gYW5k IHlvdSB3YW50IHRvIHdhaXQgZm9yIGFsbCByZW5kZXJpbmcgdG8gYmUKPiArICogY29tcGxldGVk Lgo+ICsgKi8KPiArc3RydWN0IGRybV92M2Rfd2FpdF9ibyB7Cj4gKwlfX3UzMiBoYW5kbGU7Cj4g KwlfX3UzMiBwYWQ7CgpZYXkgZm9yIGNoZWNraW5nIGFsbCB5b3VyIHBhZCBmaWVsZHMgZm9yICE9 IDAgOi0pCgo+ICsJX191NjQgdGltZW91dF9uczsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1 Y3QgZHJtX3YzZF9jcmVhdGVfYm8gLSBpb2N0bCBhcmd1bWVudCBmb3IgY3JlYXRpbmcgVjNEIEJP cy4KPiArICoKPiArICogVGhlcmUgYXJlIGN1cnJlbnRseSBubyB2YWx1ZXMgZm9yIHRoZSBmbGFn cyBhcmd1bWVudCwgYnV0IGl0IG1heSBiZQo+ICsgKiB1c2VkIGluIGEgZnV0dXJlIGV4dGVuc2lv bi4KPiArICovCj4gK3N0cnVjdCBkcm1fdjNkX2NyZWF0ZV9ibyB7Cj4gKwlfX3UzMiBzaXplOwo+ ICsJX191MzIgZmxhZ3M7Cj4gKwkvKiogUmV0dXJuZWQgR0VNIGhhbmRsZSBmb3IgdGhlIEJPLiAq Lwo+ICsJX191MzIgaGFuZGxlOwo+ICsJLyoqCj4gKwkgKiBSZXR1cm5lZCBvZmZzZXQgZm9yIHRo ZSBCTyBpbiB0aGUgVjNEIGFkZHJlc3Mgc3BhY2UuICBUaGlzIG9mZnNldAo+ICsJICogaXMgcHJp dmF0ZSB0byB0aGUgRFJNIGZkIGFuZCBpcyB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBH RU0KPiArCSAqIGhhbmRsZS4KPiArCSAqCj4gKwkgKiBUaGlzIG9mZnNldCB2YWx1ZSB3aWxsIGFs d2F5cyBiZSBub256ZXJvLCBzaW5jZSB2YXJpb3VzIEhXCj4gKwkgKiB1bml0cyB0cmVhdCAwIHNw ZWNpYWxseS4KPiArCSAqLwo+ICsJX191MzIgb2Zmc2V0Owo+ICt9Owo+ICsKPiArLyoqCj4gKyAq IHN0cnVjdCBkcm1fdjNkX21tYXBfYm8gLSBpb2N0bCBhcmd1bWVudCBmb3IgbWFwcGluZyBWM0Qg Qk9zLgo+ICsgKgo+ICsgKiBUaGlzIGRvZXNuJ3QgYWN0dWFsbHkgcGVyZm9ybSBhbiBtbWFwLiAg SW5zdGVhZCwgaXQgcmV0dXJucyB0aGUKPiArICogb2Zmc2V0IHlvdSBuZWVkIHRvIHVzZSBpbiBh biBtbWFwIG9uIHRoZSBEUk0gZGV2aWNlIG5vZGUuICBUaGlzCj4gKyAqIG1lYW5zIHRoYXQgdG9v bHMgbGlrZSB2YWxncmluZCBlbmQgdXAga25vd2luZyBhYm91dCB0aGUgbWFwcGVkCj4gKyAqIG1l bW9yeS4KPiArICoKPiArICogVGhlcmUgYXJlIGN1cnJlbnRseSBubyB2YWx1ZXMgZm9yIHRoZSBm bGFncyBhcmd1bWVudCwgYnV0IGl0IG1heSBiZQo+ICsgKiB1c2VkIGluIGEgZnV0dXJlIGV4dGVu c2lvbi4KPiArICovCj4gK3N0cnVjdCBkcm1fdjNkX21tYXBfYm8gewo+ICsJLyoqIEhhbmRsZSBm b3IgdGhlIG9iamVjdCBiZWluZyBtYXBwZWQuICovCj4gKwlfX3UzMiBoYW5kbGU7Cj4gKwlfX3Uz MiBmbGFnczsKPiArCS8qKiBvZmZzZXQgaW50byB0aGUgZHJtIG5vZGUgdG8gdXNlIGZvciBzdWJz ZXF1ZW50IG1tYXAgY2FsbC4gKi8KPiArCV9fdTY0IG9mZnNldDsKPiArfTsKPiArCj4gK2VudW0g ZHJtX3YzZF9wYXJhbSB7Cj4gKwlEUk1fVjNEX1BBUkFNX1YzRF9VSUZDRkcsCj4gKwlEUk1fVjNE X1BBUkFNX1YzRF9IVUJfSURFTlQxLAo+ICsJRFJNX1YzRF9QQVJBTV9WM0RfSFVCX0lERU5UMiwK PiArCURSTV9WM0RfUEFSQU1fVjNEX0hVQl9JREVOVDMsCj4gKwlEUk1fVjNEX1BBUkFNX1YzRF9D T1JFMF9JREVOVDAsCj4gKwlEUk1fVjNEX1BBUkFNX1YzRF9DT1JFMF9JREVOVDEsCj4gKwlEUk1f VjNEX1BBUkFNX1YzRF9DT1JFMF9JREVOVDIsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX3YzZF9n ZXRfcGFyYW0gewo+ICsJX191MzIgcGFyYW07Cj4gKwlfX3UzMiBwYWQ7Cj4gKwlfX3U2NCB2YWx1 ZTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBSZXR1cm5zIHRoZSBvZmZzZXQgZm9yIHRoZSBCTyBp biB0aGUgVjNEIGFkZHJlc3Mgc3BhY2UgZm9yIHRoaXMgRFJNIGZkLgo+ICsgKiBUaGlzIGlzIHRo ZSBzYW1lIHZhbHVlIHJldHVybmVkIGJ5IGRybV92M2RfY3JlYXRlX2JvLCBpZiB0aGF0IHdhcyBj YWxsZWQKPiArICogZnJvbSB0aGlzIERSTSBmZC4KPiArICovCj4gK3N0cnVjdCBkcm1fdjNkX2dl dF9ib19vZmZzZXQgewo+ICsJX191MzIgaGFuZGxlOwo+ICsJX191MzIgb2Zmc2V0Owo+ICt9Owo+ ICsKPiArI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCj4gK30KPiArI2VuZGlmCj4gKwo+ICsjZW5k aWYgLyogX1YzRF9EUk1fSF8gKi8KPiAtLSAKPiAyLjE3LjAKPiAKPiAKPiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0dGVy ClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5j aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK