From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v16 3/8] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Fri, 6 May 2016 15:16:48 +0200 Message-ID: <20160506131648.GB27098@phenom.ffwll.local> References: <1462539954-26158-1-git-send-email-p.zabel@pengutronix.de> <1462539954-26158-4-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1462539954-26158-4-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Philipp Zabel Cc: Mark Rutland , Stephen Boyd , Michael Turquette , dri-devel@lists.freedesktop.org, Jie Qiu , Cawa Cheng , Mao Huang , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala List-Id: devicetree@vger.kernel.org T24gRnJpLCBNYXkgMDYsIDIwMTYgYXQgMDM6MDU6NDlQTSArMDIwMCwgUGhpbGlwcCBaYWJlbCB3 cm90ZToKPiBGcm9tOiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgo+IAo+IFRoaXMgcGF0Y2gg YWRkcyBhbiBpbml0aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUAo+ IHN1YnN5c3RlbS4gSXQgY3VycmVudGx5IHN1cHBvcnRzIHR3byBmaXhlZCBvdXRwdXQgc3RyZWFt cyBmcm9tIHRoZQo+IE9WTDAvT1ZMMSBzb3VyY2VzIHRvIHRoZSBEU0kwL0RQSTAgc2lua3MsIHJl c3BlY3RpdmVseS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29t Pgo+IFNpZ25lZC1vZmYtYnk6IFlUIFNoZW4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgo+IFNpZ25l ZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8ZGprdXJ0ekBjaHJvbWl1bS5vcmc+Cj4gU2lnbmVkLW9m Zi1ieTogQmliYnkgSHNpZWggPGJpYmJ5LmhzaWVoQG1lZGlhdGVrLmNvbT4KPiBTaWduZWQtb2Zm LWJ5OiBNYW8gSHVhbmcgPGxpdHRsZWN2ckBjaHJvbWl1bS5vcmc+Cj4gU2lnbmVkLW9mZi1ieTog UGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRyb25peC5kZT4KClNwb3R0ZWQgdHdvIHRpbnkg dGhpbmdzIGJlbG93LgoKPiAtLS0KPiBDaGFuZ2VzIHNpbmNlIHYxNToKPiAgLSBSZWJhc2VkIG9u dG8gZHJtLW5leHQKPiAgLSBVc2UgZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoKSBpbnN0ZWFk IG9mIGRybV9zZW5kX3ZibGFua19ldmVudCgpCj4gIC0gT3JkZXIgbXRrX2RybV9kcml2ZXJzIGFs cGhhYmV0aWNhbGx5Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAg ICAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAg ICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgICAgICAg ICAgICB8ICAxNCArCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSAgICAgICAg ICAgfCAgMTEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMgICAg IHwgMzAyICsrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rp c3BfcmRtYS5jICAgIHwgMjQwICsrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9jcnRjLmMgICAgIHwgNTgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysK PiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oICAgICB8ICAzMiArKwo+ ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYyAgICAgIHwgMzUzICsrKysr KysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oICAg ICAgfCAgNDEgKysKPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAu YyB8IDIyNSArKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k ZHBfY29tcC5oIHwgMTUwICsrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZHJ2LmMgICAgICB8IDU1OCArKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCAgICAgIHwgIDU3ICsrKwo+ICBkcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTY1ICsrKysrKysrCj4gIGRy aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmggICAgICAgfCAgMjMgKysKPiAgZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmMgICAgICB8IDI2OSArKysrKysrKysr KysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTkg KysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMgICAgfCAyNDAg KysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgg ICAgfCAgNTkgKysrCj4gIDIwIGZpbGVzIGNoYW5nZWQsIDMzODMgaW5zZXJ0aW9ucygrKQo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRt YS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9jcnRjLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2NydGMuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fZGRwLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2RkcC5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5j Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9n ZW0uaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fcGxhbmUuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fcGxhbmUuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZp ZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gaW5kZXggMTZlNGMyMS4uZmMzNTczMSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnCj4gQEAgLTI4OCwzICsyODgsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9l dG5hdml2L0tjb25maWciCj4gIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2FyYy9LY29uZmlnIgo+ ICAKPiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL0tjb25maWciCj4gKwo+ICtz b3VyY2UgImRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnIgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBpbmRl eCA0M2MyYWJmLi4yYmQzZTVhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IEBAIC03NCw2ICs3NCw3IEBAIG9i ai0kKENPTkZJR19EUk1fTVNNKSArPSBtc20vCj4gIG9iai0kKENPTkZJR19EUk1fVEVHUkEpICs9 IHRlZ3JhLwo+ICBvYmotJChDT05GSUdfRFJNX1NUSSkgKz0gc3RpLwo+ICBvYmotJChDT05GSUdf RFJNX0lNWCkgKz0gaW14Lwo+ICtvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRl ay8KPiAgb2JqLXkJCQkrPSBpMmMvCj4gIG9iai15CQkJKz0gcGFuZWwvCj4gIG9iai15CQkJKz0g YnJpZGdlLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi4zMGU1MzcxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9LY29uZmlnCj4gQEAgLTAsMCArMSwxNCBAQAo+ICtjb25maWcgRFJN X01FRElBVEVLCj4gKwl0cmlzdGF0ZSAiRFJNIFN1cHBvcnQgZm9yIE1lZGlhdGVrIFNvQ3MiCj4g KwlkZXBlbmRzIG9uIERSTQo+ICsJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IChBUk0gJiYg Q09NUElMRV9URVNUKQo+ICsJc2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUgo+ICsJc2VsZWN0IERS TV9LTVNfSEVMUEVSCj4gKwlzZWxlY3QgSU9NTVVfRE1BCj4gKwlzZWxlY3QgTUVNT1JZCj4gKwlz ZWxlY3QgTVRLX1NNSQo+ICsJaGVscAo+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhh dmUgYSBNZWRpYXRlayBTb0NzLgo+ICsJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1lZGlh dGVrLWRybQo+ICsJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFu ZAo+ICsJICBidWZmZXIgbWFuYWdlbWVudCB0byB1c2Vyc3BhY2UuCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDRiZGU3 Ywo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZp bGUKPiBAQCAtMCwwICsxLDExIEBACj4gK21lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5v IFwKPiArCQkgIG10a19kaXNwX3JkbWEubyBcCj4gKwkJICBtdGtfZHJtX2NydGMubyBcCj4gKwkJ ICBtdGtfZHJtX2RkcC5vIFwKPiArCQkgIG10a19kcm1fZGRwX2NvbXAubyBcCj4gKwkJICBtdGtf ZHJtX2Rydi5vIFwKPiArCQkgIG10a19kcm1fZmIubyBcCj4gKwkJICBtdGtfZHJtX2dlbS5vIFwK PiArCQkgIG10a19kcm1fcGxhbmUubwo+ICsKPiArb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykg Kz0gbWVkaWF0ZWstZHJtLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kaXNwX292bC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5j Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi44ZjYyNjcxZgo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMK PiBAQCAtMCwwICsxLDMwMiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFU ZWsgSW5jLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Cj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2lycS5o Pgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKwo+ICsjaW5jbHVkZSAi bXRrX2RybV9jcnRjLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCj4gKwo+ICsj ZGVmaW5lIERJU1BfUkVHX09WTF9JTlRFTgkJCTB4MDAwNAo+ICsjZGVmaW5lIE9WTF9GTUVfQ1BM X0lOVAkJCQkJQklUKDEpCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0lOVFNUQQkJCTB4MDAwOAo+ ICsjZGVmaW5lIERJU1BfUkVHX09WTF9FTgkJCQkweDAwMGMKPiArI2RlZmluZSBESVNQX1JFR19P VkxfUlNUCQkJMHgwMDE0Cj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JPSV9TSVpFCQkJMHgwMDIw Cj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JPSV9CR0NMUgkJCTB4MDAyOAo+ICsjZGVmaW5lIERJ U1BfUkVHX09WTF9TUkNfQ09OCQkJMHgwMDJjCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0NPTihu KQkJCSgweDAwMzAgKyAweDIwICogKG4pKQo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfU0la RShuKQkJKDB4MDAzOCArIDB4MjAgKiAobikpCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX09GRlNF VChuKQkJCSgweDAwM2MgKyAweDIwICogKG4pKQo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9QSVRD SChuKQkJCSgweDAwNDQgKyAweDIwICogKG4pKQo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1B X0NUUkwobikJCSgweDAwYzAgKyAweDIwICogKG4pKQo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9S RE1BX0dNQyhuKQkJKDB4MDBjOCArIDB4MjAgKiAobikpCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZM X0FERFIobikJCQkoMHgwZjQwICsgMHgyMCAqIChuKSkKPiArCj4gKyNkZWZpbmUJT1ZMX1JETUFf TUVNX0dNQwkweDQwNDAyMDIwCj4gKwo+ICsjZGVmaW5lIE9WTF9DT05fQllURV9TV0FQCUJJVCgy NCkKPiArI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9SR0I1NjUJKDAgPDwgMTIpCj4gKyNkZWZpbmUg T1ZMX0NPTl9DTFJGTVRfUkdCODg4CSgxIDw8IDEyKQo+ICsjZGVmaW5lIE9WTF9DT05fQ0xSRk1U X1JHQkE4ODg4CSgyIDw8IDEyKQo+ICsjZGVmaW5lIE9WTF9DT05fQ0xSRk1UX0FSR0I4ODg4CSgz IDw8IDEyKQo+ICsjZGVmaW5lCU9WTF9DT05fQUVOCQlCSVQoOCkKPiArI2RlZmluZQlPVkxfQ09O X0FMUEhBCQkweGZmCj4gKwo+ICsvKioKPiArICogc3RydWN0IG10a19kaXNwX292bCAtIERJU1Bf T1ZMIGRyaXZlciBzdHJ1Y3R1cmUKPiArICogQGRkcF9jb21wIC0gc3RydWN0dXJlIGNvbnRhaW5p bmcgdHlwZSBlbnVtIGFuZCBoYXJkd2FyZSByZXNvdXJjZXMKPiArICogQGNydGMgLSBhc3NvY2lh dGVkIGNydGMgdG8gcmVwb3J0IHZibGFuayBldmVudHMgdG8KPiArICovCj4gK3N0cnVjdCBtdGtf ZGlzcF9vdmwgewo+ICsJc3RydWN0IG10a19kZHBfY29tcAkJZGRwX2NvbXA7Cj4gKwlzdHJ1Y3Qg ZHJtX2NydGMJCQkqY3J0YzsKPiArfTsKPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlz cF9vdmxfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQo+ICt7Cj4gKwlzdHJ1Y3Qg bXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2lkOwo+ICsJc3RydWN0IG10a19kZHBfY29tcCAqb3Zs ID0gJnByaXYtPmRkcF9jb21wOwo+ICsKPiArCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50 ZXJydXB0ICovCj4gKwl3cml0ZWwoMHgwLCBvdmwtPnJlZ3MgKyBESVNQX1JFR19PVkxfSU5UU1RB KTsKPiArCj4gKwlpZiAoIXByaXYtPmNydGMpCj4gKwkJcmV0dXJuIElSUV9OT05FOwo+ICsKPiAr CW10a19jcnRjX2RkcF9pcnEocHJpdi0+Y3J0Yywgb3ZsKTsKPiArCj4gKwlyZXR1cm4gSVJRX0hB TkRMRUQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19vdmxfZW5hYmxlX3ZibGFuayhzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wLAo+ICsJCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4g K3sKPiArCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBjb250YWluZXJfb2YoY29tcCwgc3Ry dWN0IG10a19kaXNwX292bCwKPiArCQkJCQkJIGRkcF9jb21wKTsKPiArCj4gKwlwcml2LT5jcnRj ID0gY3J0YzsKPiArCXdyaXRlbF9yZWxheGVkKE9WTF9GTUVfQ1BMX0lOVCwgY29tcC0+cmVncyAr IERJU1BfUkVHX09WTF9JTlRFTik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19vdmxfZGlz YWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKPiArewo+ICsJc3RydWN0IG10 a19kaXNwX292bCAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3Bfb3Zs LAo+ICsJCQkJCQkgZGRwX2NvbXApOwo+ICsKPiArCXByaXYtPmNydGMgPSBOVUxMOwo+ICsJd3Jp dGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgbXRrX292bF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w KQo+ICt7Cj4gKwl3cml0ZWxfcmVsYXhlZCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxf RU4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfb3ZsX3N0b3Aoc3RydWN0IG10a19kZHBf Y29tcCAqY29tcCkKPiArewo+ICsJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsgRElT UF9SRUdfT1ZMX0VOKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX292bF9jb25maWcoc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCj4gKwkJCSAgIHVuc2lnbmVk IGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCj4gK3sKPiArCWlmICh3ICE9IDAgJiYgaCAh PSAwKQo+ICsJCXdyaXRlbF9yZWxheGVkKGggPDwgMTYgfCB3LCBjb21wLT5yZWdzICsgRElTUF9S RUdfT1ZMX1JPSV9TSVpFKTsKPiArCXdyaXRlbF9yZWxheGVkKDB4MCwgY29tcC0+cmVncyArIERJ U1BfUkVHX09WTF9ST0lfQkdDTFIpOwo+ICsKPiArCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBE SVNQX1JFR19PVkxfUlNUKTsKPiArCXdyaXRlbCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P VkxfUlNUKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9vbihzdHJ1Y3Qg bXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQo+ICt7Cj4gKwl1bnNpZ25lZCBp bnQgcmVnOwo+ICsKPiArCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUkRN QV9DVFJMKGlkeCkpOwo+ICsJd3JpdGVsKE9WTF9SRE1BX01FTV9HTUMsIGNvbXAtPnJlZ3MgKyBE SVNQX1JFR19PVkxfUkRNQV9HTUMoaWR4KSk7Cj4gKwo+ICsJcmVnID0gcmVhZGwoY29tcC0+cmVn cyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKPiArCXJlZyA9IHJlZyB8IEJJVChpZHgpOwo+ICsJ d3JpdGVsKHJlZywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29t cCwgdW5zaWduZWQgaW50IGlkeCkKPiArewo+ICsJdW5zaWduZWQgaW50IHJlZzsKPiArCj4gKwly ZWcgPSByZWFkbChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOwo+ICsJcmVnID0g cmVnICYgfkJJVChpZHgpOwo+ICsJd3JpdGVsKHJlZywgY29tcC0+cmVncyArIERJU1BfUkVHX09W TF9TUkNfQ09OKTsKPiArCj4gKwl3cml0ZWwoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZM X1JETUFfQ1RSTChpZHgpKTsKPiArfQo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGludCBvdmxfZm10 X2NvbnZlcnQodW5zaWduZWQgaW50IGZtdCkKPiArewo+ICsJc3dpdGNoIChmbXQpIHsKPiArCWRl ZmF1bHQ6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ICsJCXJldHVybiBPVkxfQ09OX0NM UkZNVF9SR0I1NjU7Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1Ogo+ICsJCXJldHVybiBPVkxf Q09OX0NMUkZNVF9SR0I1NjUgfCBPVkxfQ09OX0JZVEVfU1dBUDsKPiArCWNhc2UgRFJNX0ZPUk1B VF9SR0I4ODg6Cj4gKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjg4ODsKPiArCWNhc2UgRFJN X0ZPUk1BVF9CR1I4ODg6Cj4gKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjg4OCB8IE9WTF9D T05fQllURV9TV0FQOwo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4Ogo+ICsJY2FzZSBEUk1f Rk9STUFUX1JHQkE4ODg4Ogo+ICsJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9BUkdCODg4ODsKPiAr CWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoK PiArCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfQVJHQjg4ODggfCBPVkxfQ09OX0JZVEVfU1dBUDsK PiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4 ODoKPiArCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCQTg4ODg7Cj4gKwljYXNlIERSTV9GT1JN QVRfWEJHUjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Cj4gKwkJcmV0dXJuIE9W TF9DT05fQ0xSRk1UX1JHQkE4ODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7Cj4gKwl9Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAg KmNvbXAsIHVuc2lnbmVkIGludCBpZHgsCj4gKwkJCQkgc3RydWN0IG10a19wbGFuZV9zdGF0ZSAq c3RhdGUpCj4gK3sKPiArCXN0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSAqcGVuZGluZyA9 ICZzdGF0ZS0+cGVuZGluZzsKPiArCXVuc2lnbmVkIGludCBhZGRyID0gcGVuZGluZy0+YWRkcjsK PiArCXVuc2lnbmVkIGludCBwaXRjaCA9IHBlbmRpbmctPnBpdGNoICYgMHhmZmZmOwo+ICsJdW5z aWduZWQgaW50IGZtdCA9IHBlbmRpbmctPmZvcm1hdDsKPiArCXVuc2lnbmVkIGludCBvZmZzZXQg PSAocGVuZGluZy0+eSA8PCAxNikgfCBwZW5kaW5nLT54Owo+ICsJdW5zaWduZWQgaW50IHNyY19z aXplID0gKHBlbmRpbmctPmhlaWdodCA8PCAxNikgfCBwZW5kaW5nLT53aWR0aDsKPiArCXVuc2ln bmVkIGludCBjb247Cj4gKwo+ICsJaWYgKCFwZW5kaW5nLT5lbmFibGUpCj4gKwkJbXRrX292bF9s YXllcl9vZmYoY29tcCwgaWR4KTsKPiArCj4gKwljb24gPSBvdmxfZm10X2NvbnZlcnQoZm10KTsK PiArCWlmIChpZHggIT0gMCkKPiArCQljb24gfD0gT1ZMX0NPTl9BRU4gfCBPVkxfQ09OX0FMUEhB Owo+ICsKPiArCXdyaXRlbF9yZWxheGVkKGNvbiwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9D T04oaWR4KSk7Cj4gKwl3cml0ZWxfcmVsYXhlZChwaXRjaCwgY29tcC0+cmVncyArIERJU1BfUkVH X09WTF9QSVRDSChpZHgpKTsKPiArCXdyaXRlbF9yZWxheGVkKHNyY19zaXplLCBjb21wLT5yZWdz ICsgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKGlkeCkpOwo+ICsJd3JpdGVsX3JlbGF4ZWQob2Zmc2V0 LCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX09GRlNFVChpZHgpKTsKPiArCXdyaXRlbF9yZWxh eGVkKGFkZHIsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfQUREUihpZHgpKTsKPiArCj4gKwlp ZiAocGVuZGluZy0+ZW5hYmxlKQo+ICsJCW10a19vdmxfbGF5ZXJfb24oY29tcCwgaWR4KTsKPiAr fQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgbXRrX2Rpc3Bf b3ZsX2Z1bmNzID0gewo+ICsJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAo+ICsJLnN0YXJ0ID0g bXRrX292bF9zdGFydCwKPiArCS5zdG9wID0gbXRrX292bF9zdG9wLAo+ICsJLmVuYWJsZV92Ymxh bmsgPSBtdGtfb3ZsX2VuYWJsZV92YmxhbmssCj4gKwkuZGlzYWJsZV92YmxhbmsgPSBtdGtfb3Zs X2Rpc2FibGVfdmJsYW5rLAo+ICsJLmxheWVyX29uID0gbXRrX292bF9sYXllcl9vbiwKPiArCS5s YXllcl9vZmYgPSBtdGtfb3ZsX2xheWVyX29mZiwKPiArCS5sYXllcl9jb25maWcgPSBtdGtfb3Zs X2xheWVyX2NvbmZpZywKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX2JpbmQo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4gKwkJCSAgICAgdm9p ZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOwo+ICsJaW50 IHJldDsKPiArCj4gKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2RldiwgJnByaXYt PmRkcF9jb21wKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKPiArCQkJZGV2LT5vZl9ub2RlLT5mdWxs X25hbWUsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQkJCXZvaWQgKmRhdGEpCj4gK3sKPiArCXN0 cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKPiArCj4gKwltdGtfZGRwX2NvbXBfdW5yZWdp c3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGNvbXBvbmVudF9vcHMgbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMgPSB7Cj4gKwku YmluZAk9IG10a19kaXNwX292bF9iaW5kLAo+ICsJLnVuYmluZCA9IG10a19kaXNwX292bF91bmJp bmQsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IG10a19kaXNwX292bF9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ ZGV2Owo+ICsJc3RydWN0IG10a19kaXNwX292bCAqcHJpdjsKPiArCWludCBjb21wX2lkOwo+ICsJ aW50IGlycTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNp emVvZigqcHJpdiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFwcml2KQo+ICsJCXJldHVybiAtRU5P TUVNOwo+ICsKPiArCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4gKwlpZiAoaXJx IDwgMCkKPiArCQlyZXR1cm4gaXJxOwo+ICsKPiArCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2 LCBpcnEsIG10a19kaXNwX292bF9pcnFfaGFuZGxlciwKPiArCQkJICAgICAgIElSUUZfVFJJR0dF Ul9OT05FLCBkZXZfbmFtZShkZXYpLCBwcml2KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2 X2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7Cj4g KwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9p ZChkZXYtPm9mX25vZGUsIE1US19ESVNQX09WTCk7Cj4gKwlpZiAoY29tcF9pZCA8IDApIHsKPiAr CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBf aWQpOwo+ICsJCXJldHVybiBjb21wX2lkOwo+ICsJfQo+ICsKPiArCXJldCA9IG10a19kZHBfY29t cF9pbml0KGRldiwgZGV2LT5vZl9ub2RlLCAmcHJpdi0+ZGRwX2NvbXAsIGNvbXBfaWQsCj4gKwkJ CQkmbXRrX2Rpc3Bfb3ZsX2Z1bmNzKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBpbml0aWFsaXplIGNvbXBvbmVudDogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKPiAr Cj4gKwlyZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJm10a19kaXNwX292bF9jb21wb25lbnRfb3Bz KTsKPiArCWlmIChyZXQpCj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNvbXBvbmVu dDogJWRcbiIsIHJldCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBtdGtfZGlzcF9vdmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sK PiArCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kaXNwX292bF9jb21wb25lbnRfb3Bz KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0 aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vdmwiLCB9LAo+ICsJe30sCj4gK307Cj4gK01P RFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2gpOwo+ICsK PiArc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyID0gewo+ICsJLnBy b2JlCQk9IG10a19kaXNwX292bF9wcm9iZSwKPiArCS5yZW1vdmUJCT0gbXRrX2Rpc3Bfb3ZsX3Jl bW92ZSwKPiArCS5kcml2ZXIJCT0gewo+ICsJCS5uYW1lCT0gIm1lZGlhdGVrLWRpc3Atb3ZsIiwK PiArCQkub3duZXIJPSBUSElTX01PRFVMRSwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZGlz cF9vdmxfZHJpdmVyX2R0X21hdGNoLAo+ICsJfSwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZGlzcF9yZG1hLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAuLjVmYjgwY2IKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kaXNwX3JkbWEuYwo+IEBAIC0wLDAgKzEsMjQwIEBACj4gKy8qCj4gKyAqIENvcHly aWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u Lgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpbmNs dWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9jb21wb25lbnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsjaW5j bHVkZSA8bGludXgvb2ZfaXJxLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KPiArCj4gKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKPiArI2luY2x1ZGUgIm10a19kcm1f ZGRwX2NvbXAuaCIKPiArCj4gKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFCQkweDAw MDAKPiArI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMJCTB4MDAwNAo+ICsjZGVmaW5l IFJETUFfVEFSR0VUX0xJTkVfSU5UCQkJCUJJVCg1KQo+ICsjZGVmaW5lIFJETUFfRklGT19VTkRF UkZMT1dfSU5UCQkJCUJJVCg0KQo+ICsjZGVmaW5lIFJETUFfRU9GX0FCTk9STUFMX0lOVAkJCQlC SVQoMykKPiArI2RlZmluZSBSRE1BX0ZSQU1FX0VORF9JTlQJCQkJQklUKDIpCj4gKyNkZWZpbmUg UkRNQV9GUkFNRV9TVEFSVF9JTlQJCQkJQklUKDEpCj4gKyNkZWZpbmUgUkRNQV9SRUdfVVBEQVRF X0lOVAkJCQlCSVQoMCkKPiArI2RlZmluZSBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04JCTB4MDAx MAo+ICsjZGVmaW5lIFJETUFfRU5HSU5FX0VOCQkJCQlCSVQoMCkKPiArI2RlZmluZSBESVNQX1JF R19SRE1BX1NJWkVfQ09OXzAJCTB4MDAxNAo+ICsjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9D T05fMQkJMHgwMDE4Cj4gKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9UQVJHRVRfTElORQkJMHgwMDFj Cj4gKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9GSUZPX0NPTgkJCTB4MDA0MAo+ICsjZGVmaW5lIFJE TUFfRklGT19VTkRFUkZMT1dfRU4JCQkJQklUKDMxKQo+ICsjZGVmaW5lIFJETUFfRklGT19QU0VV RE9fU0laRShieXRlcykJCQkoKChieXRlcykgLyAxNikgPDwgMTYpCj4gKyNkZWZpbmUgUkRNQV9P VVRQVVRfVkFMSURfRklGT19USFJFU0hPTEQoYnl0ZXMpCQkoKGJ5dGVzKSAvIDE2KQo+ICsKPiAr LyoqCj4gKyAqIHN0cnVjdCBtdGtfZGlzcF9yZG1hIC0gRElTUF9SRE1BIGRyaXZlciBzdHJ1Y3R1 cmUKPiArICogQGRkcF9jb21wIC0gc3RydWN0dXJlIGNvbnRhaW5pbmcgdHlwZSBlbnVtIGFuZCBo YXJkd2FyZSByZXNvdXJjZXMKPiArICogQGNydGMgLSBhc3NvY2lhdGVkIGNydGMgdG8gcmVwb3J0 IGlycSBldmVudHMgdG8KPiArICovCj4gK3N0cnVjdCBtdGtfZGlzcF9yZG1hIHsKPiArCXN0cnVj dCBtdGtfZGRwX2NvbXAJCWRkcF9jb21wOwo+ICsJc3RydWN0IGRybV9jcnRjCQkJKmNydGM7Cj4g K307Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2Rpc3BfcmRtYV9pcnFfaGFuZGxlcihp bnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gK3sKPiArCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2 ID0gZGV2X2lkOwo+ICsJc3RydWN0IG10a19kZHBfY29tcCAqcmRtYSA9ICZwcml2LT5kZHBfY29t cDsKPiArCj4gKwkvKiBDbGVhciBmcmFtZSBjb21wbGV0aW9uIGludGVycnVwdCAqLwo+ICsJd3Jp dGVsKDB4MCwgcmRtYS0+cmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7Cj4gKwo+ICsJ aWYgKCFwcml2LT5jcnRjKQo+ICsJCXJldHVybiBJUlFfTk9ORTsKPiArCj4gKwltdGtfY3J0Y19k ZHBfaXJxKHByaXYtPmNydGMsIHJkbWEpOwo+ICsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgcmRtYV91cGRhdGVfYml0cyhzdHJ1Y3QgbXRrX2RkcF9jb21w ICpjb21wLCB1bnNpZ25lZCBpbnQgcmVnLAo+ICsJCQkgICAgIHVuc2lnbmVkIGludCBtYXNrLCB1 bnNpZ25lZCBpbnQgdmFsKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgdG1wID0gcmVhZGwoY29tcC0+ cmVncyArIHJlZyk7Cj4gKwo+ICsJdG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsK PiArCXdyaXRlbCh0bXAsIGNvbXAtPnJlZ3MgKyByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBtdGtfcmRtYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCj4gKwkJ CQkgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBtdGtfZGlzcF9yZG1h ICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9yZG1hLAo+ICsJCQkJ CQkgIGRkcF9jb21wKTsKPiArCj4gKwlwcml2LT5jcnRjID0gY3J0YzsKPiArCXJkbWFfdXBkYXRl X2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFLCBSRE1BX0ZSQU1FX0VORF9JTlQs Cj4gKwkJCSBSRE1BX0ZSQU1FX0VORF9JTlQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtf cmRtYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQo+ICt7Cj4gKwlz dHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRr X2Rpc3BfcmRtYSwKPiArCQkJCQkJICBkZHBfY29tcCk7Cj4gKwo+ICsJcHJpdi0+Y3J0YyA9IE5V TEw7Cj4gKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSwg UkRNQV9GUkFNRV9FTkRfSU5ULCAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX3JkbWFf c3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKPiArewo+ICsJcmRtYV91cGRhdGVfYml0 cyhjb21wLCBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04sIFJETUFfRU5HSU5FX0VOLAo+ICsJCQkg UkRNQV9FTkdJTkVfRU4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfcmRtYV9zdG9wKHN0 cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCj4gK3sKPiArCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwg RElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OLCBSRE1BX0VOR0lORV9FTiwgMCk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIG10a19yZG1hX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1 bnNpZ25lZCBpbnQgd2lkdGgsCj4gKwkJCSAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25l ZCBpbnQgdnJlZnJlc2gpCj4gK3sKPiArCXVuc2lnbmVkIGludCB0aHJlc2hvbGQ7Cj4gKwl1bnNp Z25lZCBpbnQgcmVnOwo+ICsKPiArCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRN QV9TSVpFX0NPTl8wLCAweGZmZiwgd2lkdGgpOwo+ICsJcmRtYV91cGRhdGVfYml0cyhjb21wLCBE SVNQX1JFR19SRE1BX1NJWkVfQ09OXzEsIDB4ZmZmZmYsIGhlaWdodCk7Cj4gKwo+ICsJLyoKPiAr CSAqIEVuYWJsZSBGSUZPIHVuZGVyZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBibG9j a2VkLgo+ICsJICogS2VlcCB0aGUgRklGTyBwc2V1ZG8gc2l6ZSByZXNldCBkZWZhdWx0IG9mIDgg S2lCLiBTZXQgdGhlCj4gKwkgKiBvdXRwdXQgdGhyZXNob2xkIHRvIDYgbWljcm9zZWNvbmRzIHdp dGggNy82IG92ZXJoZWFkIHRvCj4gKwkgKiBhY2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGgg YSBwaXhlbCBkZXB0aCBvZiA0IGJ5dGVzOgo+ICsJICovCj4gKwl0aHJlc2hvbGQgPSB3aWR0aCAq IGhlaWdodCAqIHZyZWZyZXNoICogNCAqIDcgLyAxMDAwMDAwOwo+ICsJcmVnID0gUkRNQV9GSUZP X1VOREVSRkxPV19FTiB8Cj4gKwkgICAgICBSRE1BX0ZJRk9fUFNFVURPX1NJWkUoU1pfOEspIHwK PiArCSAgICAgIFJETUFfT1VUUFVUX1ZBTElEX0ZJRk9fVEhSRVNIT0xEKHRocmVzaG9sZCk7Cj4g Kwl3cml0ZWwocmVnLCBjb21wLT5yZWdzICsgRElTUF9SRUdfUkRNQV9GSUZPX0NPTik7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIG10a19kaXNwX3Jk bWFfZnVuY3MgPSB7Cj4gKwkuY29uZmlnID0gbXRrX3JkbWFfY29uZmlnLAo+ICsJLnN0YXJ0ID0g bXRrX3JkbWFfc3RhcnQsCj4gKwkuc3RvcCA9IG10a19yZG1hX3N0b3AsCj4gKwkuZW5hYmxlX3Zi bGFuayA9IG10a19yZG1hX2VuYWJsZV92YmxhbmssCj4gKwkuZGlzYWJsZV92YmxhbmsgPSBtdGtf cmRtYV9kaXNhYmxlX3ZibGFuaywKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbXRrX2Rpc3BfcmRt YV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ICsJCQkg ICAgICB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRh Owo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2Rl diwgJnByaXYtPmRkcF9jb21wKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKPiArCQkJZGV2LT5vZl9u b2RlLT5mdWxsX25hbWUsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1 cm4gMDsKPiArCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kaXNwX3JkbWFfdW5iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ICsJCQkJIHZvaWQgKmRh dGEpCj4gK3sKPiArCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0gZGV2X2dldF9kcnZkYXRh KGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7Cj4gKwo+ICsJbXRr X2RkcF9jb21wX3VucmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIG10a19kaXNwX3JkbWFfY29tcG9u ZW50X29wcyA9IHsKPiArCS5iaW5kCT0gbXRrX2Rpc3BfcmRtYV9iaW5kLAo+ICsJLnVuYmluZCA9 IG10a19kaXNwX3JkbWFfdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBtdGtfZGlzcF9y ZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdjsK PiArCWludCBjb21wX2lkOwo+ICsJaW50IGlycTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcHJpdiA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFw cml2KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWlycSA9IHBsYXRmb3JtX2dldF9pcnEo cGRldiwgMCk7Cj4gKwlpZiAoaXJxIDwgMCkKPiArCQlyZXR1cm4gaXJxOwo+ICsKPiArCWNvbXBf aWQgPSBtdGtfZGRwX2NvbXBfZ2V0X2lkKGRldi0+b2Zfbm9kZSwgTVRLX0RJU1BfUkRNQSk7Cj4g KwlpZiAoY29tcF9pZCA8IDApIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVudGlm eSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOwo+ICsJCXJldHVybiBjb21wX2lkOwo+ICsJfQo+ ICsKPiArCXJldCA9IG10a19kZHBfY29tcF9pbml0KGRldiwgZGV2LT5vZl9ub2RlLCAmcHJpdi0+ ZGRwX2NvbXAsIGNvbXBfaWQsCj4gKwkJCQkmbXRrX2Rpc3BfcmRtYV9mdW5jcyk7Cj4gKwlpZiAo cmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6 ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogRGlzYWJsZSBh bmQgY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCj4gKwl3cml0ZWwoMHgwLCBwcml2LT5kZHBf Y29tcC5yZWdzICsgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFKTsKPiArCXdyaXRlbCgweDAsIHBy aXYtPmRkcF9jb21wLnJlZ3MgKyBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMpOwo+ICsKPiArCXJl dCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIG10a19kaXNwX3JkbWFfaXJxX2hhbmRsZXIs Cj4gKwkJCSAgICAgICBJUlFGX1RSSUdHRVJfTk9ORSwgZGV2X25hbWUoZGV2KSwgcHJpdik7Cj4g KwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJx ICVkOiAlZFxuIiwgaXJxLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7Cj4gKwo+ICsJcmV0ID0gY29tcG9uZW50X2Fk ZChkZXYsICZtdGtfZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMpOwo+ICsJaWYgKHJldCkKPiArCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKPiArCj4g KwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19kaXNwX3JkbWFfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWNvbXBvbmVudF9kZWwoJnBk ZXYtPmRldiwgJm10a19kaXNwX3JkbWFfY29tcG9uZW50X29wcyk7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kaXNwX3Jk bWFfZHJpdmVyX2R0X21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10 ODE3My1kaXNwLXJkbWEiLCB9LAo+ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoKTsKPiArCj4gK3N0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUJCT0gbXRrX2Rpc3Bf cmRtYV9wcm9iZSwKPiArCS5yZW1vdmUJCT0gbXRrX2Rpc3BfcmRtYV9yZW1vdmUsCj4gKwkuZHJp dmVyCQk9IHsKPiArCQkubmFtZQk9ICJtZWRpYXRlay1kaXNwLXJkbWEiLAo+ICsJCS5vd25lcgk9 IFRISVNfTU9EVUxFLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kaXNwX3JkbWFfZHJpdmVy X2R0X21hdGNoLAo+ICsJfSwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f Y3J0Yy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4zMDk1ZmMxCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ny dGMuYwo+IEBAIC0wLDAgKzEsNTgyIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBN ZWRpYVRlayBJbmMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAq IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxhc20vYmFycmll ci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj X2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICsjaW5jbHVkZSA8c29jL21lZGlhdGVrL3Nt aS5oPgo+ICsKPiArI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCj4gKyNpbmNsdWRlICJtdGtfZHJt X2NydGMuaCIKPiArI2luY2x1ZGUgIm10a19kcm1fZGRwLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJt X2RkcF9jb21wLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgo+ICsjaW5jbHVkZSAibXRr X2RybV9wbGFuZS5oIgo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBtdGtfZHJtX2NydGMgLSBNZWRp YVRlayBzcGVjaWZpYyBjcnRjIHN0cnVjdHVyZS4KPiArICogQGJhc2U6IGNydGMgb2JqZWN0Lgo+ ICsgKiBAZW5hYmxlZDogcmVjb3JkcyB3aGV0aGVyIGNydGNfZW5hYmxlIHN1Y2NlZWRlZAo+ICsg KiBAcGxhbmVzOiBhcnJheSBvZiA0IG10a19kcm1fcGxhbmUgc3RydWN0dXJlcywgb25lIGZvciBl YWNoIG92ZXJsYXkgcGxhbmUKPiArICogQHBlbmRpbmdfcGxhbmVzOiB3aGV0aGVyIGFueSBwbGFu ZSBoYXMgcGVuZGluZyBjaGFuZ2VzIHRvIGJlIGFwcGxpZWQKPiArICogQGNvbmZpZ19yZWdzOiBt ZW1vcnkgbWFwcGVkIG1tc3lzIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BhY2UKPiArICogQG11 dGV4OiBoYW5kbGUgdG8gb25lIG9mIHRoZSB0ZW4gZGlzcF9tdXRleCBzdHJlYW1zCj4gKyAqIEBk ZHBfY29tcF9ucjogbnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gZGRwX2NvbXAKPiArICogQGRkcF9j b21wOiBhcnJheSBvZiBwb2ludGVycyB0aGUgbXRrX2RkcF9jb21wIHN0cnVjdHVyZXMgdXNlZCBi eSB0aGlzIGNydGMKPiArICovCj4gK3N0cnVjdCBtdGtfZHJtX2NydGMgewo+ICsJc3RydWN0IGRy bV9jcnRjCQkJYmFzZTsKPiArCWJvb2wJCQkJZW5hYmxlZDsKPiArCj4gKwlib29sCQkJCXBlbmRp bmdfbmVlZHNfdmJsYW5rOwo+ICsJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkqZXZl bnQ7Cj4gKwo+ICsJc3RydWN0IG10a19kcm1fcGxhbmUJCXBsYW5lc1tPVkxfTEFZRVJfTlJdOwo+ ICsJYm9vbAkJCQlwZW5kaW5nX3BsYW5lczsKPiArCj4gKwl2b2lkIF9faW9tZW0JCQkqY29uZmln X3JlZ3M7Cj4gKwlzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgJCSptdXRleDsKPiArCXVuc2lnbmVkIGlu dAkJCWRkcF9jb21wX25yOwo+ICsJc3RydWN0IG10a19kZHBfY29tcAkJKipkZHBfY29tcDsKPiAr fTsKPiArCj4gK3N0cnVjdCBtdGtfY3J0Y19zdGF0ZSB7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUJCWJhc2U7Cj4gKwo+ICsJYm9vbAkJCQlwZW5kaW5nX2NvbmZpZzsKPiArCXVuc2lnbmVkIGlu dAkJCXBlbmRpbmdfd2lkdGg7Cj4gKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX2hlaWdodDsKPiAr CXVuc2lnbmVkIGludAkJCXBlbmRpbmdfdnJlZnJlc2g7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIHN0cnVjdCBtdGtfZHJtX2NydGMgKnRvX210a19jcnRjKHN0cnVjdCBkcm1fY3J0YyAqYykK PiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2RybV9jcnRjLCBiYXNl KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnRvX210 a19jcnRjX3N0YXRlKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqcykKPiArewo+ICsJcmV0dXJuIGNv bnRhaW5lcl9vZihzLCBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUsIGJhc2UpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRrX2RybV9j cnRjICptdGtfY3J0YykKPiArewo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRj LT5iYXNlOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2 ZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gKwlkcm1fY3J0Y19zZW5kX3ZibGFu a19ldmVudChjcnRjLCBtdGtfY3J0Yy0+ZXZlbnQpOwo+ICsJZHJtX2NydGNfdmJsYW5rX3B1dChj cnRjKTsKPiArCW10a19jcnRjLT5ldmVudCA9IE5VTEw7Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgbXRrX2RybV9maW5pc2hfcGFnZV9mbGlwKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRj KQo+ICt7Cj4gKwlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZtdGtfY3J0Yy0+YmFzZSk7Cj4gKwlp ZiAobXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJsYW5rKSB7Cj4gKwkJbXRrX2RybV9jcnRjX2Zp bmlzaF9wYWdlX2ZsaXAobXRrX2NydGMpOwo+ICsJCW10a19jcnRjLT5wZW5kaW5nX25lZWRzX3Zi bGFuayA9IGZhbHNlOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNf ZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBtdGtfZHJtX2Ny dGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3Ig KGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspCj4gKwkJY2xrX3VucHJlcGFy ZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7Cj4gKwo+ICsJbXRrX2Rpc3BfbXV0ZXhfcHV0 KG10a19jcnRjLT5tdXRleCk7Cj4gKwo+ICsJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKPiArewo+ICsJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKPiArCj4gKwlpZiAoY3J0 Yy0+c3RhdGUpIHsKPiArCQlpZiAoY3J0Yy0+c3RhdGUtPm1vZGVfYmxvYikKPiArCQkJZHJtX3By b3BlcnR5X3VucmVmZXJlbmNlX2Jsb2IoY3J0Yy0+c3RhdGUtPm1vZGVfYmxvYik7Cj4gKwo+ICsJ CXN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+ICsJCW1lbXNldChzdGF0 ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOwo+ICsJfSBlbHNlIHsKPiArCQlzdGF0ZSA9IGt6YWxsb2Mo c2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwo+ICsJCWlmICghc3RhdGUpCj4gKwkJCXJldHVy bjsKPiArCQljcnRjLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKPiArCX0KPiArCj4gKwlzdGF0ZS0+ YmFzZS5jcnRjID0gY3J0YzsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4g K3sKPiArCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7Cj4gKwo+ICsJc3RhdGUgPSBremFs bG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghc3RhdGUpCj4gKwkJcmV0 dXJuIE5VTEw7Cj4gKwo+ICsJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0 ZShjcnRjLCAmc3RhdGUtPmJhc2UpOwo+ICsKPiArCVdBUk5fT04oc3RhdGUtPmJhc2UuY3J0YyAh PSBjcnRjKTsKPiArCXN0YXRlLT5iYXNlLmNydGMgPSBjcnRjOwo+ICsKPiArCXJldHVybiAmc3Rh dGUtPmJhc2U7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19kZXN0cm95X3N0 YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9z dGF0ZShjcnRjLCBzdGF0ZSk7Cj4gKwlrZnJlZSh0b19tdGtfY3J0Y19zdGF0ZShzdGF0ZSkpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBtdGtfZHJtX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCj4gKwkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUsCj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCj4g K3sKPiArCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSwgYnV0IHRoaXMgY2FsbGJhY2sgaXMgbWFuZGF0 b3J5LiAqLwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kcm1f Y3J0Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0 IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsK PiArCj4gKwlzdGF0ZS0+cGVuZGluZ193aWR0aCA9IGNydGMtPm1vZGUuaGRpc3BsYXk7Cj4gKwlz dGF0ZS0+cGVuZGluZ19oZWlnaHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5Owo+ICsJc3RhdGUtPnBl bmRpbmdfdnJlZnJlc2ggPSBjcnRjLT5tb2RlLnZyZWZyZXNoOwo+ICsJd21iKCk7CS8qIE1ha2Ug c3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVycyBhcmUgc2V0IGJlZm9yZSB1cGRhdGUgKi8KPiArCXN0 YXRlLT5wZW5kaW5nX2NvbmZpZyA9IHRydWU7Cj4gK30KPiArCj4gK2ludCBtdGtfZHJtX2NydGNf ZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSkK PiArewo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7 Cj4gKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKHByaXYtPmNy dGNbcGlwZV0pOwo+ICsJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9j b21wWzBdOwo+ICsKPiArCW10a19kZHBfY29tcF9lbmFibGVfdmJsYW5rKG92bCwgJm10a19jcnRj LT5iYXNlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArdm9pZCBtdGtfZHJtX2NydGNf ZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUp Cj4gK3sKPiArCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRl Owo+ICsJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0Yyhwcml2LT5j cnRjW3BpcGVdKTsKPiArCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBf Y29tcFswXTsKPiArCj4gKwltdGtfZGRwX2NvbXBfZGlzYWJsZV92Ymxhbmsob3ZsKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBtdGtfY3J0Y19kZHBfY2xrX2VuYWJsZShzdHJ1Y3QgbXRrX2RybV9j cnRjICptdGtfY3J0YykKPiArewo+ICsJaW50IHJldDsKPiArCWludCBpOwo+ICsKPiArCURSTV9E RUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2Ny dGMtPmRkcF9jb21wX25yOyBpKyspIHsKPiArCQlyZXQgPSBjbGtfZW5hYmxlKG10a19jcnRjLT5k ZHBfY29tcFtpXS0+Y2xrKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCURSTV9FUlJPUigiRmFpbGVk IHRvIGVuYWJsZSBjbG9jayAlZDogJWRcbiIsIGksIHJldCk7Cj4gKwkJCWdvdG8gZXJyOwo+ICsJ CX0KPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArZXJyOgo+ICsJd2hpbGUgKC0taSA+PSAwKQo+ ICsJCWNsa19kaXNhYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShzdHJ1 Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJRFJNX0RF QlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKPiArCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0 Yy0+ZGRwX2NvbXBfbnI7IGkrKykKPiArCQljbGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBb aV0tPmNsayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX2NydGNfZGRwX2h3X2luaXQoc3Ry dWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCj4gK3sKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YyA9ICZtdGtfY3J0Yy0+YmFzZTsKPiArCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0LCB2cmVm cmVzaDsKPiArCWludCByZXQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCIl c1xuIiwgX19mdW5jX18pOwo+ICsJaWYgKFdBUk5fT04oIWNydGMtPnN0YXRlKSkKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCj4gKwl3aWR0aCA9IGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLmhk aXNwbGF5Owo+ICsJaGVpZ2h0ID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUudmRpc3BsYXk7 Cj4gKwl2cmVmcmVzaCA9IGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLnZyZWZyZXNoOwo+ICsK PiArCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoY3J0Yy0+ZGV2LT5kZXYpOwo+ICsJaWYgKHJl dCA8IDApIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgcG93ZXIgZG9tYWluOiAl ZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IG10a19kaXNw X211dGV4X3ByZXBhcmUobXRrX2NydGMtPm11dGV4KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIG11dGV4IGNsb2NrOiAlZFxuIiwgcmV0KTsKPiAr CQlnb3RvIGVycl9wbV9ydW50aW1lX3B1dDsKPiArCX0KPiArCj4gKwlyZXQgPSBtdGtfY3J0Y19k ZHBfY2xrX2VuYWJsZShtdGtfY3J0Yyk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9FUlJP UigiRmFpbGVkIHRvIGVuYWJsZSBjb21wb25lbnQgY2xvY2tzOiAlZFxuIiwgcmV0KTsKPiArCQln b3RvIGVycl9tdXRleF91bnByZXBhcmU7Cj4gKwl9Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigi bWVkaWF0ZWtfZGRwX2RkcF9wYXRoX3NldHVwXG4iKTsKPiArCWZvciAoaSA9IDA7IGkgPCBtdGtf Y3J0Yy0+ZGRwX2NvbXBfbnIgLSAxOyBpKyspIHsKPiArCQltdGtfZGRwX2FkZF9jb21wX3RvX3Bh dGgobXRrX2NydGMtPmNvbmZpZ19yZWdzLAo+ICsJCQkJCSBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0t PmlkLAo+ICsJCQkJCSBtdGtfY3J0Yy0+ZGRwX2NvbXBbaSArIDFdLT5pZCk7Cj4gKwkJbXRrX2Rp c3BfbXV0ZXhfYWRkX2NvbXAobXRrX2NydGMtPm11dGV4LAo+ICsJCQkJCW10a19jcnRjLT5kZHBf Y29tcFtpXS0+aWQpOwo+ICsJfQo+ICsJbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAobXRrX2NydGMt Pm11dGV4LCBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKPiArCW10a19kaXNwX211dGV4X2Vu YWJsZShtdGtfY3J0Yy0+bXV0ZXgpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ ZGRwX2NvbXBfbnI7IGkrKykgewo+ICsJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAgPSBtdGtf Y3J0Yy0+ZGRwX2NvbXBbaV07Cj4gKwo+ICsJCW10a19kZHBfY29tcF9jb25maWcoY29tcCwgd2lk dGgsIGhlaWdodCwgdnJlZnJlc2gpOwo+ICsJCW10a19kZHBfY29tcF9zdGFydChjb21wKTsKPiAr CX0KPiArCj4gKwkvKiBJbml0aWFsbHkgY29uZmlndXJlIGFsbCBwbGFuZXMgKi8KPiArCWZvciAo aSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgewo+ICsJCXN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKPiArCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZTsKPiArCj4gKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3Rh dGUocGxhbmUtPnN0YXRlKTsKPiArCQltdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKG10a19jcnRj LT5kZHBfY29tcFswXSwgaSwKPiArCQkJCQkgIHBsYW5lX3N0YXRlKTsKPiArCX0KPiArCj4gKwly ZXR1cm4gMDsKPiArCj4gK2Vycl9tdXRleF91bnByZXBhcmU6Cj4gKwltdGtfZGlzcF9tdXRleF91 bnByZXBhcmUobXRrX2NydGMtPm11dGV4KTsKPiArZXJyX3BtX3J1bnRpbWVfcHV0Ogo+ICsJcG1f cnVudGltZV9wdXQoY3J0Yy0+ZGV2LT5kZXYpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2h3X2Zpbmkoc3RydWN0IG10a19kcm1fY3J0YyAqbXRr X2NydGMpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBtdGtfY3J0Yy0+YmFzZS5k ZXY7Cj4gKwlpbnQgaTsKPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18p Owo+ICsJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQo+ICsJCW10 a19kZHBfY29tcF9zdG9wKG10a19jcnRjLT5kZHBfY29tcFtpXSk7Cj4gKwlmb3IgKGkgPSAwOyBp IDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspCj4gKwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3Zl X2NvbXAobXRrX2NydGMtPm11dGV4LAo+ICsJCQkJCSAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+ aWQpOwo+ICsJbXRrX2Rpc3BfbXV0ZXhfZGlzYWJsZShtdGtfY3J0Yy0+bXV0ZXgpOwo+ICsJZm9y IChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7IGkrKykgewo+ICsJCW10a19k ZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywKPiArCQkJCQkg ICAgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkLAo+ICsJCQkJCSAgICAgIG10a19jcnRjLT5k ZHBfY29tcFtpICsgMV0tPmlkKTsKPiArCQltdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtf Y3J0Yy0+bXV0ZXgsCj4gKwkJCQkJICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7Cj4gKwl9 Cj4gKwltdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRj LT5kZHBfY29tcFtpXS0+aWQpOwo+ICsJbXRrX2NydGNfZGRwX2Nsa19kaXNhYmxlKG10a19jcnRj KTsKPiArCW10a19kaXNwX211dGV4X3VucHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOwo+ICsKPiAr CXBtX3J1bnRpbWVfcHV0KGRybS0+ZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2Ry bV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBtdGtf ZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7Cj4gKwlzdHJ1Y3QgbXRrX2Rk cF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CURSTV9ERUJVR19EUklWRVIoIiVzICVkXG4iLCBfX2Z1bmNfXywgY3J0Yy0+YmFzZS5pZCk7Cj4g Kwo+ICsJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChvdmwtPmxhcmJfZGV2KTsKPiArCWlmIChyZXQp IHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgbGFyYjogJWRcbiIsIHJldCk7Cj4gKwkJ cmV0dXJuOwo+ICsJfQo+ICsKPiArCXJldCA9IG10a19jcnRjX2RkcF9od19pbml0KG10a19jcnRj KTsKPiArCWlmIChyZXQpIHsKPiArCQltdGtfc21pX2xhcmJfcHV0KG92bC0+bGFyYl9kZXYpOwo+ ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7Cj4gKwlt dGtfY3J0Yy0+ZW5hYmxlZCA9IHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kcm1f Y3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IG10a19k cm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKPiArCXN0cnVjdCBtdGtfZGRw X2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKPiArCWludCBpOwo+ICsKPiArCURS TV9ERUJVR19EUklWRVIoIiVzICVkXG4iLCBfX2Z1bmNfXywgY3J0Yy0+YmFzZS5pZCk7Cj4gKwlp ZiAoIW10a19jcnRjLT5lbmFibGVkKQo+ICsJCXJldHVybjsKPiArCj4gKwkvKiBTZXQgYWxsIHBl bmRpbmcgcGxhbmUgc3RhdGUgdG8gZGlzYWJsZWQgKi8KPiArCWZvciAoaSA9IDA7IGkgPCBPVkxf TEFZRVJfTlI7IGkrKykgewo+ICsJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRj LT5wbGFuZXNbaV0uYmFzZTsKPiArCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZTsKPiArCj4gKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRl KTsKPiArCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBmYWxzZTsKPiArCQlwbGFuZV9z dGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOwo+ICsJfQo+ICsJbXRrX2NydGMtPnBlbmRpbmdf cGxhbmVzID0gdHJ1ZTsKPiArCj4gKwkvKiBXYWl0IGZvciBwbGFuZXMgdG8gYmUgZGlzYWJsZWQg Ki8KPiArCWRybV9jcnRjX3dhaXRfb25lX3ZibGFuayhjcnRjKTsKPiArCj4gKwlkcm1fY3J0Y192 Ymxhbmtfb2ZmKGNydGMpOwo+ICsJbXRrX2NydGNfZGRwX2h3X2ZpbmkobXRrX2NydGMpOwo+ICsJ bXRrX3NtaV9sYXJiX3B1dChvdmwtPmxhcmJfZGV2KTsKPiArCj4gKwltdGtfY3J0Yy0+ZW5hYmxl ZCA9IGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2Jl Z2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqb2xkX2NydGNfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3Rh dGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9j cnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOwo+ICsKPiArCWlmIChtdGtfY3J0Yy0+ ZXZlbnQgJiYgc3RhdGUtPmJhc2UuZXZlbnQpCj4gKwkJRFJNX0VSUk9SKCJuZXcgZXZlbnQgd2hp bGUgdGhlcmUgaXMgc3RpbGwgYSBwZW5kaW5nIGV2ZW50XG4iKTsKPiArCj4gKwlpZiAoc3RhdGUt PmJhc2UuZXZlbnQpIHsKPiArCQlzdGF0ZS0+YmFzZS5ldmVudC0+cGlwZSA9IGRybV9jcnRjX2lu ZGV4KGNydGMpOwo+ICsJCVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSAhPSAwKTsK PiArCQltdGtfY3J0Yy0+ZXZlbnQgPSBzdGF0ZS0+YmFzZS5ldmVudDsKPiArCQlzdGF0ZS0+YmFz ZS5ldmVudCA9IE5VTEw7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0 Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCQkJICAgICAgc3RydWN0 IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKPiArewo+ICsJc3RydWN0IG10a19kcm1f Y3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKPiArCXVuc2lnbmVkIGludCBwZW5k aW5nX3BsYW5lcyA9IDA7Cj4gKwlpbnQgaTsKPiArCj4gKwlpZiAobXRrX2NydGMtPmV2ZW50KQo+ ICsJCW10a19jcnRjLT5wZW5kaW5nX25lZWRzX3ZibGFuayA9IHRydWU7Cj4gKwlmb3IgKGkgPSAw OyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9 ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7Cj4gKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGU7Cj4gKwo+ICsJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBs YW5lLT5zdGF0ZSk7Cj4gKwkJaWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5KSB7Cj4gKwkJ CXBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZyA9IHRydWU7Cj4gKwkJCXBsYW5lX3N0YXRlLT5w ZW5kaW5nLmRpcnR5ID0gZmFsc2U7Cj4gKwkJCXBlbmRpbmdfcGxhbmVzIHw9IEJJVChpKTsKPiAr CQl9Cj4gKwl9Cj4gKwlpZiAocGVuZGluZ19wbGFuZXMpCj4gKwkJbXRrX2NydGMtPnBlbmRpbmdf cGxhbmVzID0gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19m dW5jcyBtdGtfY3J0Y19mdW5jcyA9IHsKPiArCS5zZXRfY29uZmlnCQk9IGRybV9hdG9taWNfaGVs cGVyX3NldF9jb25maWcsCj4gKwkucGFnZV9mbGlwCQk9IGRybV9hdG9taWNfaGVscGVyX3BhZ2Vf ZmxpcCwKPiArCS5kZXN0cm95CQk9IG10a19kcm1fY3J0Y19kZXN0cm95LAo+ICsJLnJlc2V0CQkJ PSBtdGtfZHJtX2NydGNfcmVzZXQsCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZQk9IG10a19k cm1fY3J0Y19kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJPSBtdGtf ZHJtX2NydGNfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2NydGNfaGVscGVyX2Z1bmNzIG10a19jcnRjX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5tb2Rl X2ZpeHVwCT0gbXRrX2RybV9jcnRjX21vZGVfZml4dXAsCj4gKwkubW9kZV9zZXRfbm9mYgk9IG10 a19kcm1fY3J0Y19tb2RlX3NldF9ub2ZiLAo+ICsJLmVuYWJsZQkJPSBtdGtfZHJtX2NydGNfZW5h YmxlLAo+ICsJLmRpc2FibGUJPSBtdGtfZHJtX2NydGNfZGlzYWJsZSwKPiArCS5hdG9taWNfYmVn aW4JPSBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luLAo+ICsJLmF0b21pY19mbHVzaAk9IG10a19k cm1fY3J0Y19hdG9taWNfZmx1c2gsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IG10a19kcm1fY3J0 Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gKwkJCSAgICAgc3RydWN0IG10a19kcm1f Y3J0YyAqbXRrX2NydGMsCj4gKwkJCSAgICAgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKPiAr CQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpjdXJzb3IsIHVuc2lnbmVkIGludCBwaXBlKQo+ICt7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZHJt LCAmbXRrX2NydGMtPmJhc2UsIHByaW1hcnksIGN1cnNvciwKPiArCQkJCQkmbXRrX2NydGNfZnVu Y3MsIE5VTEwpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9jbGVhbnVwX2NydGM7Cj4gKwo+ ICsJZHJtX2NydGNfaGVscGVyX2FkZCgmbXRrX2NydGMtPmJhc2UsICZtdGtfY3J0Y19oZWxwZXJf ZnVuY3MpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX2NsZWFudXBfY3J0YzoKPiArCWRy bV9jcnRjX2NsZWFudXAoJm10a19jcnRjLT5iYXNlKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3ZvaWQgbXRrX2NydGNfZGRwX2lycShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBt dGtfZGRwX2NvbXAgKm92bCkKPiArewo+ICsJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMg PSB0b19tdGtfY3J0YyhjcnRjKTsKPiArCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0 b19tdGtfY3J0Y19zdGF0ZShtdGtfY3J0Yy0+YmFzZS5zdGF0ZSk7Cj4gKwl1bnNpZ25lZCBpbnQg aTsKPiArCj4gKwkvKgo+ICsJICogVE9ETzogaW5zdGVhZCBvZiB1cGRhdGluZyB0aGUgcmVnaXN0 ZXJzIGhlcmUsIHdlIHNob3VsZCBwcmVwYXJlCj4gKwkgKiB3b3JraW5nIHJlZ2lzdGVycyBpbiBh dG9taWNfY29tbWl0IGFuZCBsZXQgdGhlIGhhcmR3YXJlIGNvbW1hbmQKPiArCSAqIHF1ZXVlIHVw ZGF0ZSBtb2R1bGUgcmVnaXN0ZXJzIG9uIHZibGFuay4KPiArCSAqLwo+ICsJaWYgKHN0YXRlLT5w ZW5kaW5nX2NvbmZpZykgewo+ICsJCW10a19kZHBfY29tcF9jb25maWcob3ZsLCBzdGF0ZS0+cGVu ZGluZ193aWR0aCwKPiArCQkJCSAgICBzdGF0ZS0+cGVuZGluZ19oZWlnaHQsCj4gKwkJCQkgICAg c3RhdGUtPnBlbmRpbmdfdnJlZnJlc2gpOwo+ICsKPiArCQlzdGF0ZS0+cGVuZGluZ19jb25maWcg PSBmYWxzZTsKPiArCX0KPiArCj4gKwlpZiAobXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzKSB7Cj4g KwkJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7Cj4gKwkJCXN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKPiArCQkJc3RydWN0IG10 a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7Cj4gKwo+ICsJCQlwbGFuZV9zdGF0ZSA9IHRvX210 a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwo+ICsKPiArCQkJaWYgKHBsYW5lX3N0YXRlLT5w ZW5kaW5nLmNvbmZpZykgewo+ICsJCQkJbXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhvdmwsIGks IHBsYW5lX3N0YXRlKTsKPiArCQkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZyA9IGZhbHNl Owo+ICsJCQl9Cj4gKwkJfQo+ICsJCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IGZhbHNlOwo+ ICsJfQo+ICsKPiArCW10a19kcm1fZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7Cj4gK30KPiAr Cj4gK2ludCBtdGtfZHJtX2NydGNfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2LAo+ ICsJCQljb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCAqcGF0aCwgdW5zaWduZWQgaW50IHBhdGhf bGVuKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtX2Rldi0+ZGV2 X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkcm1fZGV2LT5kZXY7Cj4gKwlzdHJ1 Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YzsKPiArCWVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZTsK PiArCXVuc2lnbmVkIGludCB6cG9zOwo+ICsJaW50IHBpcGUgPSBwcml2LT5udW1fcGlwZXM7Cj4g KwlpbnQgcmV0Owo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHBhdGhfbGVuOyBp KyspIHsKPiArCQllbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkID0gcGF0aFtpXTsKPiArCQlz dHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Cj4gKwo+ICsJCW5vZGUgPSBwcml2LT5jb21wX25vZGVb Y29tcF9pZF07Cj4gKwkJaWYgKCFub2RlKSB7Cj4gKwkJCWRldl9pbmZvKGRldiwKPiArCQkJCSAi Tm90IGNyZWF0aW5nIGNydGMgJWQgYmVjYXVzZSBjb21wb25lbnQgJWQgaXMgZGlzYWJsZWQgb3Ig bWlzc2luZ1xuIiwKPiArCQkJCSBwaXBlLCBjb21wX2lkKTsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJ fQo+ICsJfQo+ICsKPiArCW10a19jcnRjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptdGtf Y3J0YyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFtdGtfY3J0YykKPiArCQlyZXR1cm4gLUVOT01F TTsKPiArCj4gKwltdGtfY3J0Yy0+Y29uZmlnX3JlZ3MgPSBwcml2LT5jb25maWdfcmVnczsKPiAr CW10a19jcnRjLT5kZHBfY29tcF9uciA9IHBhdGhfbGVuOwo+ICsJbXRrX2NydGMtPmRkcF9jb21w ID0gZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgbXRrX2NydGMtPmRkcF9jb21wX25yLAo+ICsJCQkJ CQlzaXplb2YoKm10a19jcnRjLT5kZHBfY29tcCksCj4gKwkJCQkJCUdGUF9LRVJORUwpOwo+ICsK PiArCW10a19jcnRjLT5tdXRleCA9IG10a19kaXNwX211dGV4X2dldChwcml2LT5tdXRleF9kZXYs IHBpcGUpOwo+ICsJaWYgKElTX0VSUihtdGtfY3J0Yy0+bXV0ZXgpKSB7Cj4gKwkJcmV0ID0gUFRS X0VSUihtdGtfY3J0Yy0+bXV0ZXgpOwo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBt dXRleDogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKPiArCQllbnVtIG10a19kZHBf Y29tcF9pZCBjb21wX2lkID0gcGF0aFtpXTsKPiArCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w Owo+ICsJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKPiArCj4gKwkJbm9kZSA9IHByaXYtPmNv bXBfbm9kZVtjb21wX2lkXTsKPiArCQljb21wID0gcHJpdi0+ZGRwX2NvbXBbY29tcF9pZF07Cj4g KwkJaWYgKCFjb21wKSB7Cj4gKwkJCWRldl9lcnIoZGV2LCAiQ29tcG9uZW50ICVzIG5vdCBpbml0 aWFsaXplZFxuIiwKPiArCQkJCW5vZGUtPmZ1bGxfbmFtZSk7Cj4gKwkJCXJldCA9IC1FTk9ERVY7 Cj4gKwkJCWdvdG8gdW5wcmVwYXJlOwo+ICsJCX0KPiArCj4gKwkJcmV0ID0gY2xrX3ByZXBhcmUo Y29tcC0+Y2xrKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCWRldl9lcnIoZGV2LAo+ICsJCQkJIkZh aWxlZCB0byBwcmVwYXJlIGNsb2NrIGZvciBjb21wb25lbnQgJXM6ICVkXG4iLAo+ICsJCQkJbm9k ZS0+ZnVsbF9uYW1lLCByZXQpOwo+ICsJCQlnb3RvIHVucHJlcGFyZTsKPiArCQl9Cj4gKwo+ICsJ CW10a19jcnRjLT5kZHBfY29tcFtpXSA9IGNvbXA7Cj4gKwl9Cj4gKwo+ICsJZm9yICh6cG9zID0g MDsgenBvcyA8IE9WTF9MQVlFUl9OUjsgenBvcysrKSB7Cj4gKwkJdHlwZSA9ICh6cG9zID09IDAp ID8gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSA6Cj4gKwkJCQkoenBvcyA9PSAxKSA/IERSTV9QTEFO RV9UWVBFX0NVUlNPUiA6Cj4gKwkJCQkJCURSTV9QTEFORV9UWVBFX09WRVJMQVk7Cj4gKwkJcmV0 ID0gbXRrX3BsYW5lX2luaXQoZHJtX2RldiwgJm10a19jcnRjLT5wbGFuZXNbenBvc10sCj4gKwkJ CQkgICAgIEJJVChwaXBlKSwgdHlwZSwgenBvcyk7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byB1 bnByZXBhcmU7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gbXRrX2RybV9jcnRjX2luaXQoZHJtX2Rldiwg bXRrX2NydGMsICZtdGtfY3J0Yy0+cGxhbmVzWzBdLmJhc2UsCj4gKwkJCQkmbXRrX2NydGMtPnBs YW5lc1sxXS5iYXNlLCBwaXBlKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gdW5wcmVwYXJl Owo+ICsKPiArCXByaXYtPmNydGNbcGlwZV0gPSAmbXRrX2NydGMtPmJhc2U7Cj4gKwlwcml2LT5u dW1fcGlwZXMrKzsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK3VucHJlcGFyZToKPiArCXdoaWxl ICgtLWkgPj0gMCkKPiArCQljbGtfdW5wcmVwYXJlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xr KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2NydGMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uODFlNTU2 Ngo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9jcnRjLmgKPiBAQCAtMCwwICsxLDMyIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAx NSBNZWRpYVRlayBJbmMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4g KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgTVRLX0RSTV9D UlRDX0gKPiArI2RlZmluZSBNVEtfRFJNX0NSVENfSAo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1f Y3J0Yy5oPgo+ICsjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgo+ICsjaW5jbHVkZSAibXRr X2RybV9wbGFuZS5oIgo+ICsKPiArI2RlZmluZSBPVkxfTEFZRVJfTlIJNAo+ICsKPiAraW50IG10 a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVk IGludCBwaXBlKTsKPiArdm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRy bV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwo+ICt2b2lkIG10a19kcm1fY3J0Y19j aGVja19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICt2b2lkIG10a19kcm1fY3J0Y19j b21taXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiArdm9pZCBtdGtfY3J0Y19kZHBfaXJxKHN0 cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IG10a19kZHBfY29tcCAqb3ZsKTsKPiAraW50IG10 a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCj4gKwkJCWNvbnN0 IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLAo+ICsJCQl1bnNpZ25lZCBpbnQgcGF0aF9sZW4p Owo+ICsKPiArI2VuZGlmIC8qIE1US19EUk1fQ1JUQ19IICovCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fZGRwLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAu LjE3YmE5MzU1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2RkcC5jCj4gQEAgLTAsMCArMSwzNTMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4g KyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg PGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9vZl9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gKwo+ICsjaW5jbHVkZSAibXRrX2RybV9kZHAu aCIKPiArI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKPiArCj4gKyNkZWZpbmUgRElTUF9S RUdfQ09ORklHX0RJU1BfT1ZMMF9NT1VUX0VOCTB4MDQwCj4gKyNkZWZpbmUgRElTUF9SRUdfQ09O RklHX0RJU1BfT1ZMMV9NT1VUX0VOCTB4MDQ0Cj4gKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJ U1BfT0RfTU9VVF9FTgkJMHgwNDgKPiArI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9HQU1N QV9NT1VUX0VOCTB4MDRjCj4gKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VU X0VOCTB4MDUwCj4gKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IwX1NFTF9JTgkw eDA4NAo+ICsjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMV9TRUxfSU4JMHgwODgK PiArI2RlZmluZSBESVNQX1JFR19DT05GSUdfRFBJX1NFTF9JTgkJMHgwYWMKPiArI2RlZmluZSBE SVNQX1JFR19DT05GSUdfRElTUF9SRE1BMV9NT1VUX0VOCTB4MGM4Cj4gKyNkZWZpbmUgRElTUF9S RUdfQ09ORklHX01NU1lTX0NHX0NPTjAJCTB4MTAwCj4gKwo+ICsjZGVmaW5lIERJU1BfUkVHX01V VEVYX0VOKG4pCSgweDIwICsgMHgyMCAqIChuKSkKPiArI2RlZmluZSBESVNQX1JFR19NVVRFWF9S U1QobikJKDB4MjggKyAweDIwICogKG4pKQo+ICsjZGVmaW5lIERJU1BfUkVHX01VVEVYX01PRChu KQkoMHgyYyArIDB4MjAgKiAobikpCj4gKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfU09GKG4pCSgw eDMwICsgMHgyMCAqIChuKSkKPiArCj4gKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT1ZMMAkJQklU KDExKQo+ICsjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09WTDEJCUJJVCgxMikKPiArI2RlZmluZSBN VVRFWF9NT0RfRElTUF9SRE1BMAkJQklUKDEzKQo+ICsjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JE TUExCQlCSVQoMTQpCj4gKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTIJCUJJVCgxNSkKPiAr I2RlZmluZSBNVVRFWF9NT0RfRElTUF9XRE1BMAkJQklUKDE2KQo+ICsjZGVmaW5lIE1VVEVYX01P RF9ESVNQX1dETUExCQlCSVQoMTcpCj4gKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQ09MT1IwCQlC SVQoMTgpCj4gKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQ09MT1IxCQlCSVQoMTkpCj4gKyNkZWZp bmUgTVVURVhfTU9EX0RJU1BfQUFMCQlCSVQoMjApCj4gKyNkZWZpbmUgTVVURVhfTU9EX0RJU1Bf R0FNTUEJCUJJVCgyMSkKPiArI2RlZmluZSBNVVRFWF9NT0RfRElTUF9VRk9FCQlCSVQoMjIpCj4g KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUFdNMAkJQklUKDIzKQo+ICsjZGVmaW5lIE1VVEVYX01P RF9ESVNQX1BXTTEJCUJJVCgyNCkKPiArI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PRAkJQklUKDI1 KQo+ICsKPiArI2RlZmluZSBNVVRFWF9TT0ZfU0lOR0xFX01PREUJCTAKPiArI2RlZmluZSBNVVRF WF9TT0ZfRFNJMAkJCTEKPiArI2RlZmluZSBNVVRFWF9TT0ZfRFNJMQkJCTIKPiArI2RlZmluZSBN VVRFWF9TT0ZfRFBJMAkJCTMKPiArCj4gKyNkZWZpbmUgT1ZMMF9NT1VUX0VOX0NPTE9SMAkJMHgx Cj4gKyNkZWZpbmUgT0RfTU9VVF9FTl9SRE1BMAkJMHgxCj4gKyNkZWZpbmUgVUZPRV9NT1VUX0VO X0RTSTAJCTB4MQo+ICsjZGVmaW5lIENPTE9SMF9TRUxfSU5fT1ZMMAkJMHgxCj4gKyNkZWZpbmUg T1ZMMV9NT1VUX0VOX0NPTE9SMQkJMHgxCj4gKyNkZWZpbmUgR0FNTUFfTU9VVF9FTl9SRE1BMQkJ MHgxCj4gKyNkZWZpbmUgUkRNQTFfTU9VVF9EUEkwCQkJMHgyCj4gKyNkZWZpbmUgRFBJMF9TRUxf SU5fUkRNQTEJCTB4MQo+ICsjZGVmaW5lIENPTE9SMV9TRUxfSU5fT1ZMMQkJMHgxCj4gKwo+ICtz dHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggewo+ICsJaW50IGlkOwo+ICsJYm9vbCBjbGFpbWVkOwo+ICt9 Owo+ICsKPiArc3RydWN0IG10a19kZHAgewo+ICsJc3RydWN0IGRldmljZQkJCSpkZXY7Cj4gKwlz dHJ1Y3QgY2xrCQkJKmNsazsKPiArCXZvaWQgX19pb21lbQkJCSpyZWdzOwo+ICsJc3RydWN0IG10 a19kaXNwX211dGV4CQltdXRleFsxMF07Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgdW5zaWdu ZWQgaW50IG11dGV4X21vZFtERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7Cj4gKwlbRERQX0NPTVBP TkVOVF9BQUxdID0gTVVURVhfTU9EX0RJU1BfQUFMLAo+ICsJW0REUF9DT01QT05FTlRfQ09MT1Iw XSA9IE1VVEVYX01PRF9ESVNQX0NPTE9SMCwKPiArCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0gPSBN VVRFWF9NT0RfRElTUF9DT0xPUjEsCj4gKwlbRERQX0NPTVBPTkVOVF9HQU1NQV0gPSBNVVRFWF9N T0RfRElTUF9HQU1NQSwKPiArCVtERFBfQ09NUE9ORU5UX09EXSA9IE1VVEVYX01PRF9ESVNQX09E LAo+ICsJW0REUF9DT01QT05FTlRfT1ZMMF0gPSBNVVRFWF9NT0RfRElTUF9PVkwwLAo+ICsJW0RE UF9DT01QT05FTlRfT1ZMMV0gPSBNVVRFWF9NT0RfRElTUF9PVkwxLAo+ICsJW0REUF9DT01QT05F TlRfUFdNMF0gPSBNVVRFWF9NT0RfRElTUF9QV00wLAo+ICsJW0REUF9DT01QT05FTlRfUFdNMV0g PSBNVVRFWF9NT0RfRElTUF9QV00xLAo+ICsJW0REUF9DT01QT05FTlRfUkRNQTBdID0gTVVURVhf TU9EX0RJU1BfUkRNQTAsCj4gKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0gPSBNVVRFWF9NT0RfRElT UF9SRE1BMSwKPiArCVtERFBfQ09NUE9ORU5UX1JETUEyXSA9IE1VVEVYX01PRF9ESVNQX1JETUEy LAo+ICsJW0REUF9DT01QT05FTlRfVUZPRV0gPSBNVVRFWF9NT0RfRElTUF9VRk9FLAo+ICsJW0RE UF9DT01QT05FTlRfV0RNQTBdID0gTVVURVhfTU9EX0RJU1BfV0RNQTAsCj4gKwlbRERQX0NPTVBP TkVOVF9XRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9XRE1BMSwKPiArfTsKPiArCj4gK3N0YXRpYyB1 bnNpZ25lZCBpbnQgbXRrX2RkcF9tb3V0X2VuKGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKPiAr CQkJCSAgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0LAo+ICsJCQkJICAgIHVuc2lnbmVkIGlu dCAqYWRkcikKPiArewo+ICsJdW5zaWduZWQgaW50IHZhbHVlOwo+ICsKPiArCWlmIChjdXIgPT0g RERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjApIHsKPiAr CQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDBfTU9VVF9FTjsKPiArCQl2YWx1ZSA9 IE9WTDBfTU9VVF9FTl9DT0xPUjA7Cj4gKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5U X09EICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMCkgewo+ICsJCSphZGRyID0gRElTUF9S RUdfQ09ORklHX0RJU1BfT0RfTU9VVF9FTjsKPiArCQl2YWx1ZSA9IE9EX01PVVRfRU5fUkRNQTA7 Cj4gKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1VGT0UgJiYgbmV4dCA9PSBERFBf Q09NUE9ORU5UX0RTSTApIHsKPiArCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX1VGT0Vf TU9VVF9FTjsKPiArCQl2YWx1ZSA9IFVGT0VfTU9VVF9FTl9EU0kwOwo+ICsJfSBlbHNlIGlmIChj dXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEp IHsKPiArCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDFfTU9VVF9FTjsKPiArCQl2 YWx1ZSA9IE9WTDFfTU9VVF9FTl9DT0xPUjE7Cj4gKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09N UE9ORU5UX0dBTU1BICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMSkgewo+ICsJCSphZGRy ID0gRElTUF9SRUdfQ09ORklHX0RJU1BfR0FNTUFfTU9VVF9FTjsKPiArCQl2YWx1ZSA9IEdBTU1B X01PVVRfRU5fUkRNQTE7Cj4gKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1JETUEx ICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7Cj4gKwkJKmFkZHIgPSBESVNQX1JFR19D T05GSUdfRElTUF9SRE1BMV9NT1VUX0VOOwo+ICsJCXZhbHVlID0gUkRNQTFfTU9VVF9EUEkwOwo+ ICsJfSBlbHNlIHsKPiArCQl2YWx1ZSA9IDA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHZhbHVlOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfc2VsX2luKGVudW0gbXRrX2Rk cF9jb21wX2lkIGN1ciwKPiArCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCj4gKwkJ CQkgICB1bnNpZ25lZCBpbnQgKmFkZHIpCj4gK3sKPiArCXVuc2lnbmVkIGludCB2YWx1ZTsKPiAr Cj4gKwlpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05F TlRfQ09MT1IwKSB7Cj4gKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjBfU0VM X0lOOwo+ICsJCXZhbHVlID0gQ09MT1IwX1NFTF9JTl9PVkwwOwo+ICsJfSBlbHNlIGlmIChjdXIg PT0gRERQX0NPTVBPTkVOVF9SRE1BMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfRFBJMCkgewo+ ICsJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RQSV9TRUxfSU47Cj4gKwkJdmFsdWUgPSBEUEkw X1NFTF9JTl9SRE1BMTsKPiArCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMSAm JiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IxKSB7Cj4gKwkJKmFkZHIgPSBESVNQX1JFR19D T05GSUdfRElTUF9DT0xPUjFfU0VMX0lOOwo+ICsJCXZhbHVlID0gQ09MT1IxX1NFTF9JTl9PVkwx Owo+ICsJfSBlbHNlIHsKPiArCQl2YWx1ZSA9IDA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHZhbHVl Owo+ICt9Cj4gKwo+ICt2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0g KmNvbmZpZ19yZWdzLAo+ICsJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCj4gKwkJ CSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCj4gK3sKPiArCXVuc2lnbmVkIGludCBh ZGRyLCB2YWx1ZSwgcmVnOwo+ICsKPiArCXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4 dCwgJmFkZHIpOwo+ICsJaWYgKHZhbHVlKSB7Cj4gKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25m aWdfcmVncyArIGFkZHIpIHwgdmFsdWU7Cj4gKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdf cmVncyArIGFkZHIpOwo+ICsJfQo+ICsKPiArCXZhbHVlID0gbXRrX2RkcF9zZWxfaW4oY3VyLCBu ZXh0LCAmYWRkcik7Cj4gKwlpZiAodmFsdWUpIHsKPiArCQlyZWcgPSByZWFkbF9yZWxheGVkKGNv bmZpZ19yZWdzICsgYWRkcikgfCB2YWx1ZTsKPiArCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZp Z19yZWdzICsgYWRkcik7Cj4gKwl9Cj4gK30KPiArCj4gK3ZvaWQgbXRrX2RkcF9yZW1vdmVfY29t cF9mcm9tX3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdfcmVncywKPiArCQkJCSAgIGVudW0gbXRr X2RkcF9jb21wX2lkIGN1ciwKPiArCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCj4g K3sKPiArCXVuc2lnbmVkIGludCBhZGRyLCB2YWx1ZSwgcmVnOwo+ICsKPiArCXZhbHVlID0gbXRr X2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFkZHIpOwo+ICsJaWYgKHZhbHVlKSB7Cj4gKwkJcmVn ID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOwo+ICsJCXdyaXRl bF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKPiArCX0KPiArCj4gKwl2YWx1ZSA9 IG10a19kZHBfc2VsX2luKGN1ciwgbmV4dCwgJmFkZHIpOwo+ICsJaWYgKHZhbHVlKSB7Cj4gKwkJ cmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOwo+ICsJCXdy aXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKPiArCX0KPiArfQo+ICsKPiAr c3RydWN0IG10a19kaXNwX211dGV4ICptdGtfZGlzcF9tdXRleF9nZXQoc3RydWN0IGRldmljZSAq ZGV2LCB1bnNpZ25lZCBpbnQgaWQpCj4gK3sKPiArCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKPiArCj4gKwlpZiAoaWQgPj0gMTApCj4gKwkJcmV0dXJuIEVSUl9Q VFIoLUVJTlZBTCk7Cj4gKwlpZiAoZGRwLT5tdXRleFtpZF0uY2xhaW1lZCkKPiArCQlyZXR1cm4g RVJSX1BUUigtRUJVU1kpOwo+ICsKPiArCWRkcC0+bXV0ZXhbaWRdLmNsYWltZWQgPSB0cnVlOwo+ ICsKPiArCXJldHVybiAmZGRwLT5tdXRleFtpZF07Cj4gK30KPiArCj4gK3ZvaWQgbXRrX2Rpc3Bf bXV0ZXhfcHV0KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCj4gK3sKPiArCXN0cnVjdCBt dGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAo+ICsJCQkJ CSAgIG11dGV4W211dGV4LT5pZF0pOwo+ICsKPiArCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgt PmlkXSAhPSBtdXRleCk7Cj4gKwo+ICsJbXV0ZXgtPmNsYWltZWQgPSBmYWxzZTsKPiArfQo+ICsK PiAraW50IG10a19kaXNwX211dGV4X3ByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRl eCkKPiArewo+ICsJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3Ry dWN0IG10a19kZHAsCj4gKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7Cj4gKwlyZXR1cm4gY2xr X3ByZXBhcmVfZW5hYmxlKGRkcC0+Y2xrKTsKPiArfQo+ICsKPiArdm9pZCBtdGtfZGlzcF9tdXRl eF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCkKPiArewo+ICsJc3RydWN0 IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCj4gKwkJ CQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRwLT5j bGspOwo+ICt9Cj4gKwo+ICt2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtf ZGlzcF9tdXRleCAqbXV0ZXgsCj4gKwkJCSAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpCj4g K3sKPiArCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBt dGtfZGRwLAo+ICsJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOwo+ICsJdW5zaWduZWQgaW50IHJl ZzsKPiArCj4gKwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0gbXV0ZXgpOwo+ICsK PiArCXN3aXRjaCAoaWQpIHsKPiArCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kwOgo+ICsJCXJlZyA9 IE1VVEVYX1NPRl9EU0kwOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTE6 Cj4gKwkJcmVnID0gTVVURVhfU09GX0RTSTA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEREUF9DT01Q T05FTlRfRFBJMDoKPiArCQlyZWcgPSBNVVRFWF9TT0ZfRFBJMDsKPiArCQlicmVhazsKPiArCWRl ZmF1bHQ6Cj4gKwkJcmVnID0gcmVhZGxfcmVsYXhlZChkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRF WF9NT0QobXV0ZXgtPmlkKSk7Cj4gKwkJcmVnIHw9IG11dGV4X21vZFtpZF07Cj4gKwkJd3JpdGVs X3JlbGF4ZWQocmVnLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9NT0QobXV0ZXgtPmlkKSk7 Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdz ICsgRElTUF9SRUdfTVVURVhfU09GKG11dGV4LT5pZCkpOwo+ICt9Cj4gKwo+ICt2b2lkIG10a19k aXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCj4gKwkJ CQllbnVtIG10a19kZHBfY29tcF9pZCBpZCkKPiArewo+ICsJc3RydWN0IG10a19kZHAgKmRkcCA9 IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCj4gKwkJCQkJICAgbXV0ZXhbbXV0 ZXgtPmlkXSk7Cj4gKwl1bnNpZ25lZCBpbnQgcmVnOwo+ICsKPiArCVdBUk5fT04oJmRkcC0+bXV0 ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7Cj4gKwo+ICsJc3dpdGNoIChpZCkgewo+ICsJY2FzZSBE RFBfQ09NUE9ORU5UX0RTSTA6Cj4gKwljYXNlIEREUF9DT01QT05FTlRfRFNJMToKPiArCWNhc2Ug RERQX0NPTVBPTkVOVF9EUEkwOgo+ICsJCXdyaXRlbF9yZWxheGVkKE1VVEVYX1NPRl9TSU5HTEVf TU9ERSwKPiArCQkJICAgICAgIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX1NPRihtdXRleC0+ aWQpKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmVnID0gcmVhZGxfcmVsYXhlZChk ZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9NT0QobXV0ZXgtPmlkKSk7Cj4gKwkJcmVnICY9IH5t dXRleF9tb2RbaWRdOwo+ICsJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9S RUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICt9Cj4gKwo+ICt2 b2lkIG10a19kaXNwX211dGV4X2VuYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQo+ ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3Qg bXRrX2RkcCwKPiArCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKPiArCj4gKwlXQVJOX09OKCZk ZHAtPm11dGV4W211dGV4LT5pZF0gIT0gbXV0ZXgpOwo+ICsKPiArCXdyaXRlbCgxLCBkZHAtPnJl Z3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKPiArfQo+ICsKPiArdm9pZCBtdGtf ZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCj4gK3sKPiAr CXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRw LAo+ICsJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOwo+ICsKPiArCVdBUk5fT04oJmRkcC0+bXV0 ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7Cj4gKwo+ICsJd3JpdGVsKDAsIGRkcC0+cmVncyArIERJ U1BfUkVHX01VVEVYX0VOKG11dGV4LT5pZCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19k ZHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVjdCBtdGtfZGRwICpkZHA7Cj4gKwlzdHJ1 Y3QgcmVzb3VyY2UgKnJlZ3M7Cj4gKwlpbnQgaTsKPiArCj4gKwlkZHAgPSBkZXZtX2t6YWxsb2Mo ZGV2LCBzaXplb2YoKmRkcCksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFkZHApCj4gKwkJcmV0dXJu IC1FTk9NRU07Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCj4gKwkJZGRwLT5tdXRl eFtpXS5pZCA9IGk7Cj4gKwo+ICsJZGRwLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsK PiArCWlmIChJU19FUlIoZGRwLT5jbGspKSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g Z2V0IGNsb2NrXG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihkZHAtPmNsayk7Cj4gKwl9Cj4gKwo+ ICsJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7 Cj4gKwlkZHAtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZWdzKTsKPiArCWlm IChJU19FUlIoZGRwLT5yZWdzKSkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIG1hcCBt dXRleCByZWdpc3RlcnNcbiIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGRkcC0+cmVncyk7Cj4gKwl9 Cj4gKwo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGRwKTsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfZGRwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgZGRwX2RyaXZlcl9kdF9tYXRjaFtdID0gewo+ICsJeyAuY29t cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIgfSwKPiArCXt9LAo+ICt9Owo+ ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkZHBfZHJpdmVyX2R0X21hdGNoKTsKPiArCj4gK3N0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXIgPSB7Cj4gKwkucHJvYmUJCT0gbXRr X2RkcF9wcm9iZSwKPiArCS5yZW1vdmUJCT0gbXRrX2RkcF9yZW1vdmUsCj4gKwkuZHJpdmVyCQk9 IHsKPiArCQkubmFtZQk9ICJtZWRpYXRlay1kZHAiLAo+ICsJCS5vd25lcgk9IFRISVNfTU9EVUxF LAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGRkcF9kcml2ZXJfZHRfbWF0Y2gsCj4gKwl9LAo+ICt9 Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaCBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwLi45MmMxMTc1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCj4gQEAgLTAsMCArMSw0MSBAQAo+ ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgo+ICsgKgo+ICsgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAr ICovCj4gKwo+ICsjaWZuZGVmIE1US19EUk1fRERQX0gKPiArI2RlZmluZSBNVEtfRFJNX0REUF9I Cj4gKwo+ICsjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgo+ICsKPiArc3RydWN0IHJlZ21h cDsKPiArc3RydWN0IGRldmljZTsKPiArc3RydWN0IG10a19kaXNwX211dGV4Owo+ICsKPiArdm9p ZCBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdfcmVncywKPiAr CQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAo+ICsJCQkgICAgICBlbnVtIG10a19k ZHBfY29tcF9pZCBuZXh0KTsKPiArdm9pZCBtdGtfZGRwX3JlbW92ZV9jb21wX2Zyb21fcGF0aCh2 b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAo+ICsJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQg Y3VyLAo+ICsJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCk7Cj4gKwo+ICtzdHJ1Y3Qg bXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVu c2lnbmVkIGludCBpZCk7Cj4gK2ludCBtdGtfZGlzcF9tdXRleF9wcmVwYXJlKHN0cnVjdCBtdGtf ZGlzcF9tdXRleCAqbXV0ZXgpOwo+ICt2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVj dCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCj4gKwkJCSAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQg aWQpOwo+ICt2b2lkIG10a19kaXNwX211dGV4X2VuYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgg Km11dGV4KTsKPiArdm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9t dXRleCAqbXV0ZXgpOwo+ICt2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBt dGtfZGlzcF9tdXRleCAqbXV0ZXgsCj4gKwkJCQllbnVtIG10a19kZHBfY29tcF9pZCBpZCk7Cj4g K3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0 ZXgpOwo+ICt2b2lkIG10a19kaXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11 dGV4KTsKPiArCj4gKyNlbmRpZiAvKiBNVEtfRFJNX0REUF9IICovCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwLi4zOTcwZmNmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMKPiBAQCAtMCwwICsxLDIyNSBAQAo+ICsv Kgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgo+ICsgKiBBdXRob3JzOgo+ ICsgKglZVCBTaGVuIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4KPiArICoJQ0sgSHUgPGNrLmh1QG1l ZGlhdGVrLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5o Pgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3Mu aD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxh dGZvcm0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCj4gKyNpbmNsdWRlICJt dGtfZHJtX3BsYW5lLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCj4gKwo+ICsj ZGVmaW5lIERJU1BfT0RfRU4JCQkJMHgwMDAwCj4gKyNkZWZpbmUgRElTUF9PRF9JTlRFTgkJCQkw eDAwMDgKPiArI2RlZmluZSBESVNQX09EX0lOVFNUQQkJCQkweDAwMGMKPiArI2RlZmluZSBESVNQ X09EX0NGRwkJCQkweDAwMjAKPiArI2RlZmluZSBESVNQX09EX1NJWkUJCQkJMHgwMDMwCj4gKwo+ ICsjZGVmaW5lIERJU1BfUkVHX1VGT19TVEFSVAkJCTB4MDAwMAo+ICsKPiArI2RlZmluZSBESVNQ X0NPTE9SX0NGR19NQUlOCQkJMHgwNDAwCj4gKyNkZWZpbmUgRElTUF9DT0xPUl9TVEFSVAkJCTB4 MGMwMAo+ICsjZGVmaW5lIERJU1BfQ09MT1JfV0lEVEgJCQkweDBjNTAKPiArI2RlZmluZSBESVNQ X0NPTE9SX0hFSUdIVAkJCTB4MGM1NAo+ICsKPiArI2RlZmluZQlPRF9SRUxBWV9NT0RFCQlCSVQo MCkKPiArCj4gKyNkZWZpbmUJVUZPX0JZUEFTUwkJQklUKDIpCj4gKwo+ICsjZGVmaW5lCUNPTE9S X0JZUEFTU19BTEwJQklUKDcpCj4gKyNkZWZpbmUJQ09MT1JfU0VRX1NFTAkJQklUKDEzKQo+ICsK PiArc3RhdGljIHZvaWQgbXRrX2NvbG9yX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w LCB1bnNpZ25lZCBpbnQgdywKPiArCQkJICAgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50 IHZyZWZyZXNoKQo+ICt7Cj4gKwl3cml0ZWwodywgY29tcC0+cmVncyArIERJU1BfQ09MT1JfV0lE VEgpOwo+ICsJd3JpdGVsKGgsIGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX0hFSUdIVCk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIG10a19jb2xvcl9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpj b21wKQo+ICt7Cj4gKwl3cml0ZWwoQ09MT1JfQllQQVNTX0FMTCB8IENPTE9SX1NFUV9TRUwsCj4g KwkgICAgICAgY29tcC0+cmVncyArIERJU1BfQ09MT1JfQ0ZHX01BSU4pOwo+ICsJd3JpdGVsKDB4 MSwgY29tcC0+cmVncyArIERJU1BfQ09MT1JfU1RBUlQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBtdGtfb2RfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3 LAo+ICsJCQkgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCj4gK3sKPiAr CXdyaXRlbCh3IDw8IDE2IHwgaCwgY29tcC0+cmVncyArIERJU1BfT0RfU0laRSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIG10a19vZF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQo+ ICt7Cj4gKwl3cml0ZWwoT0RfUkVMQVlfTU9ERSwgY29tcC0+cmVncyArIERJU1BfT0RfQ0ZHKTsK PiArCXdyaXRlbCgxLCBjb21wLT5yZWdzICsgRElTUF9PRF9FTik7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIG10a191Zm9lX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCj4gK3sKPiAr CXdyaXRlbChVRk9fQllQQVNTLCBjb21wLT5yZWdzICsgRElTUF9SRUdfVUZPX1NUQVJUKTsKPiAr fQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX2NvbG9y ID0gewo+ICsJLmNvbmZpZyA9IG10a19jb2xvcl9jb25maWcsCj4gKwkuc3RhcnQgPSBtdGtfY29s b3Jfc3RhcnQsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m dW5jcyBkZHBfb2QgPSB7Cj4gKwkuY29uZmlnID0gbXRrX29kX2NvbmZpZywKPiArCS5zdGFydCA9 IG10a19vZF9zdGFydCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9j b21wX2Z1bmNzIGRkcF91Zm9lID0gewo+ICsJLnN0YXJ0ID0gbXRrX3Vmb2Vfc3RhcnQsCj4gK307 Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19kZHBfY29tcF9zdGVtW01US19E RFBfQ09NUF9UWVBFX01BWF0gPSB7Cj4gKwlbTVRLX0RJU1BfT1ZMXSA9ICJvdmwiLAo+ICsJW01U S19ESVNQX1JETUFdID0gInJkbWEiLAo+ICsJW01US19ESVNQX1dETUFdID0gIndkbWEiLAo+ICsJ W01US19ESVNQX0NPTE9SXSA9ICJjb2xvciIsCj4gKwlbTVRLX0RJU1BfQUFMXSA9ICJhYWwiLAo+ ICsJW01US19ESVNQX0dBTU1BXSA9ICJnYW1tYSIsCj4gKwlbTVRLX0RJU1BfVUZPRV0gPSAidWZv ZSIsCj4gKwlbTVRLX0RTSV0gPSAiZHNpIiwKPiArCVtNVEtfRFBJXSA9ICJkcGkiLAo+ICsJW01U S19ESVNQX1BXTV0gPSAicHdtIiwKPiArCVtNVEtfRElTUF9NVVRFWF0gPSAibXV0ZXgiLAo+ICsJ W01US19ESVNQX09EXSA9ICJvZCIsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgbXRrX2RkcF9jb21wX21h dGNoIHsKPiArCWVudW0gbXRrX2RkcF9jb21wX3R5cGUgdHlwZTsKPiArCWludCBhbGlhc19pZDsK PiArCWNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzOwo+ICt9Owo+ICsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfbWF0Y2ggbXRrX2RkcF9tYXRjaGVzW0RE UF9DT01QT05FTlRfSURfTUFYXSA9IHsKPiArCVtERFBfQ09NUE9ORU5UX0FBTF0JPSB7IE1US19E SVNQX0FBTCwJMCwgTlVMTCB9LAo+ICsJW0REUF9DT01QT05FTlRfQ09MT1IwXQk9IHsgTVRLX0RJ U1BfQ09MT1IsCTAsICZkZHBfY29sb3IgfSwKPiArCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0JPSB7 IE1US19ESVNQX0NPTE9SLAkxLCAmZGRwX2NvbG9yIH0sCj4gKwlbRERQX0NPTVBPTkVOVF9EUEkw XQk9IHsgTVRLX0RQSSwJCTAsIE5VTEwgfSwKPiArCVtERFBfQ09NUE9ORU5UX0RTSTBdCT0geyBN VEtfRFNJLAkJMCwgTlVMTCB9LAo+ICsJW0REUF9DT01QT05FTlRfRFNJMV0JPSB7IE1US19EU0ks CQkxLCBOVUxMIH0sCj4gKwlbRERQX0NPTVBPTkVOVF9HQU1NQV0JPSB7IE1US19ESVNQX0dBTU1B LAkwLCBOVUxMIH0sCj4gKwlbRERQX0NPTVBPTkVOVF9PRF0JPSB7IE1US19ESVNQX09ELAkwLCAm ZGRwX29kIH0sCj4gKwlbRERQX0NPTVBPTkVOVF9PVkwwXQk9IHsgTVRLX0RJU1BfT1ZMLAkwLCBO VUxMIH0sCj4gKwlbRERQX0NPTVBPTkVOVF9PVkwxXQk9IHsgTVRLX0RJU1BfT1ZMLAkxLCBOVUxM IH0sCj4gKwlbRERQX0NPTVBPTkVOVF9QV00wXQk9IHsgTVRLX0RJU1BfUFdNLAkwLCBOVUxMIH0s Cj4gKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0JPSB7IE1US19ESVNQX1JETUEsCTAsIE5VTEwgfSwK PiArCVtERFBfQ09NUE9ORU5UX1JETUExXQk9IHsgTVRLX0RJU1BfUkRNQSwJMSwgTlVMTCB9LAo+ ICsJW0REUF9DT01QT05FTlRfUkRNQTJdCT0geyBNVEtfRElTUF9SRE1BLAkyLCBOVUxMIH0sCj4g KwlbRERQX0NPTVBPTkVOVF9VRk9FXQk9IHsgTVRLX0RJU1BfVUZPRSwJMCwgJmRkcF91Zm9lIH0s Cj4gKwlbRERQX0NPTVBPTkVOVF9XRE1BMF0JPSB7IE1US19ESVNQX1dETUEsCTAsIE5VTEwgfSwK PiArCVtERFBfQ09NUE9ORU5UX1dETUExXQk9IHsgTVRLX0RJU1BfV0RNQSwJMSwgTlVMTCB9LAo+ ICt9Owo+ICsKPiAraW50IG10a19kZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9ub2RlICpu b2RlLAo+ICsJCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZSkKPiArewo+ICsJaW50 IGlkID0gb2ZfYWxpYXNfZ2V0X2lkKG5vZGUsIG10a19kZHBfY29tcF9zdGVtW2NvbXBfdHlwZV0p Owo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXRrX2RkcF9t YXRjaGVzKTsgaSsrKSB7Cj4gKwkJaWYgKGNvbXBfdHlwZSA9PSBtdGtfZGRwX21hdGNoZXNbaV0u dHlwZSAmJgo+ICsJCSAgICAoaWQgPCAwIHx8IGlkID09IG10a19kZHBfbWF0Y2hlc1tpXS5hbGlh c19pZCkpCj4gKwkJCXJldHVybiBpOwo+ICsJfQo+ICsKPiArCXJldHVybiAtRUlOVkFMOwo+ICt9 Cj4gKwo+ICtpbnQgbXRrX2RkcF9jb21wX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5vZGUsCj4gKwkJICAgICAgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwg ZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKPiArCQkgICAgICBjb25zdCBzdHJ1Y3QgbXRr X2RkcF9jb21wX2Z1bmNzICpmdW5jcykKPiArewo+ICsJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB0 eXBlOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpsYXJiX25vZGU7Cj4gKwlzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpsYXJiX3BkZXY7Cj4gKwo+ICsJaWYgKGNvbXBfaWQgPCAwIHx8IGNvbXBfaWQg Pj0gRERQX0NPTVBPTkVOVF9JRF9NQVgpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJY29t cC0+aWQgPSBjb21wX2lkOwo+ICsJY29tcC0+ZnVuY3MgPSBmdW5jcyA/OiBtdGtfZGRwX21hdGNo ZXNbY29tcF9pZF0uZnVuY3M7Cj4gKwo+ICsJaWYgKGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9E UEkwIHx8Cj4gKwkgICAgY29tcF9pZCA9PSBERFBfQ09NUE9ORU5UX0RTSTAgfHwKPiArCSAgICBj b21wX2lkID09IEREUF9DT01QT05FTlRfUFdNMCkgewo+ICsJCWNvbXAtPnJlZ3MgPSBOVUxMOwo+ ICsJCWNvbXAtPmNsayA9IE5VTEw7Cj4gKwkJY29tcC0+aXJxID0gMDsKPiArCQlyZXR1cm4gMDsK PiArCX0KPiArCj4gKwljb21wLT5yZWdzID0gb2ZfaW9tYXAobm9kZSwgMCk7Cj4gKwljb21wLT5p cnEgPSBvZl9pcnFfZ2V0KG5vZGUsIDApOwo+ICsJY29tcC0+Y2xrID0gb2ZfY2xrX2dldChub2Rl LCAwKTsKPiArCWlmIChJU19FUlIoY29tcC0+Y2xrKSkKPiArCQljb21wLT5jbGsgPSBOVUxMOwo+ ICsKPiArCXR5cGUgPSBtdGtfZGRwX21hdGNoZXNbY29tcF9pZF0udHlwZTsKPiArCj4gKwkvKiBP bmx5IERNQSBjYXBhYmxlIGNvbXBvbmVudHMgbmVlZCB0aGUgTEFSQiBwcm9wZXJ0eSAqLwo+ICsJ Y29tcC0+bGFyYl9kZXYgPSBOVUxMOwo+ICsJaWYgKHR5cGUgIT0gTVRLX0RJU1BfT1ZMICYmCj4g KwkgICAgdHlwZSAhPSBNVEtfRElTUF9SRE1BICYmCj4gKwkgICAgdHlwZSAhPSBNVEtfRElTUF9X RE1BKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWxhcmJfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUo bm9kZSwgIm1lZGlhdGVrLGxhcmIiLCAwKTsKPiArCWlmICghbGFyYl9ub2RlKSB7Cj4gKwkJZGV2 X2VycihkZXYsCj4gKwkJCSJNaXNzaW5nIG1lZGlhZGVrLGxhcmIgcGhhbmRsZSBpbiAlcyBub2Rl XG4iLAo+ICsJCQlub2RlLT5mdWxsX25hbWUpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ ICsKPiArCWxhcmJfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobGFyYl9ub2RlKTsKPiAr CWlmICghbGFyYl9wZGV2KSB7Cj4gKwkJZGV2X3dhcm4oZGV2LCAiV2FpdGluZyBmb3IgbGFyYiBk ZXZpY2UgJXNcbiIsCj4gKwkJCSBsYXJiX25vZGUtPmZ1bGxfbmFtZSk7Cj4gKwkJb2Zfbm9kZV9w dXQobGFyYl9ub2RlKTsKPiArCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiArCX0KPiArCW9mX25v ZGVfcHV0KGxhcmJfbm9kZSk7Cj4gKwo+ICsJY29tcC0+bGFyYl9kZXYgPSAmbGFyYl9wZGV2LT5k ZXY7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0 ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKPiAr ewo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRybS0+ZGV2X3ByaXZhdGU7 Cj4gKwo+ICsJaWYgKHByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSkKPiArCQlyZXR1cm4gLUVC VVNZOwo+ICsKPiArCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IGNvbXA7Cj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArdm9pZCBtdGtfZGRwX2NvbXBfdW5yZWdpc3RlcihzdHJ1Y3QgZHJt X2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQo+ICt7Cj4gKwlzdHJ1Y3Qg bXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlwcml2 YXRlLT5kZHBfY29tcFtjb21wLT5pZF0gPSBOVUxMOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmggYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi42YjEzYmE5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKPiBAQCAtMCwwICsxLDE1MCBAQAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgo+ICsgKgo+ICsgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiAr ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4g Kwo+ICsjaWZuZGVmIE1US19EUk1fRERQX0NPTVBfSAo+ICsjZGVmaW5lIE1US19EUk1fRERQX0NP TVBfSAo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKwo+ICtzdHJ1Y3QgZGV2aWNlOwo+ ICtzdHJ1Y3QgZGV2aWNlX25vZGU7Cj4gK3N0cnVjdCBkcm1fY3J0YzsKPiArc3RydWN0IGRybV9k ZXZpY2U7Cj4gK3N0cnVjdCBtdGtfcGxhbmVfc3RhdGU7Cj4gKwo+ICtlbnVtIG10a19kZHBfY29t cF90eXBlIHsKPiArCU1US19ESVNQX09WTCwKPiArCU1US19ESVNQX1JETUEsCj4gKwlNVEtfRElT UF9XRE1BLAo+ICsJTVRLX0RJU1BfQ09MT1IsCj4gKwlNVEtfRElTUF9BQUwsCj4gKwlNVEtfRElT UF9HQU1NQSwKPiArCU1US19ESVNQX1VGT0UsCj4gKwlNVEtfRFNJLAo+ICsJTVRLX0RQSSwKPiAr CU1US19ESVNQX1BXTSwKPiArCU1US19ESVNQX01VVEVYLAo+ICsJTVRLX0RJU1BfT0QsCj4gKwlN VEtfRERQX0NPTVBfVFlQRV9NQVgsCj4gK307Cj4gKwo+ICtlbnVtIG10a19kZHBfY29tcF9pZCB7 Cj4gKwlERFBfQ09NUE9ORU5UX0FBTCwKPiArCUREUF9DT01QT05FTlRfQ09MT1IwLAo+ICsJRERQ X0NPTVBPTkVOVF9DT0xPUjEsCj4gKwlERFBfQ09NUE9ORU5UX0RQSTAsCj4gKwlERFBfQ09NUE9O RU5UX0RTSTAsCj4gKwlERFBfQ09NUE9ORU5UX0RTSTEsCj4gKwlERFBfQ09NUE9ORU5UX0dBTU1B LAo+ICsJRERQX0NPTVBPTkVOVF9PRCwKPiArCUREUF9DT01QT05FTlRfT1ZMMCwKPiArCUREUF9D T01QT05FTlRfT1ZMMSwKPiArCUREUF9DT01QT05FTlRfUFdNMCwKPiArCUREUF9DT01QT05FTlRf UFdNMSwKPiArCUREUF9DT01QT05FTlRfUkRNQTAsCj4gKwlERFBfQ09NUE9ORU5UX1JETUExLAo+ ICsJRERQX0NPTVBPTkVOVF9SRE1BMiwKPiArCUREUF9DT01QT05FTlRfVUZPRSwKPiArCUREUF9D T01QT05FTlRfV0RNQTAsCj4gKwlERFBfQ09NUE9ORU5UX1dETUExLAo+ICsJRERQX0NPTVBPTkVO VF9JRF9NQVgsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgbXRrX2RkcF9jb21wOwo+ICsKPiArc3RydWN0 IG10a19kZHBfY29tcF9mdW5jcyB7Cj4gKwl2b2lkICgqY29uZmlnKShzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKPiArCQkgICAgICAgdW5zaWduZWQgaW50IGgsIHVu c2lnbmVkIGludCB2cmVmcmVzaCk7Cj4gKwl2b2lkICgqc3RhcnQpKHN0cnVjdCBtdGtfZGRwX2Nv bXAgKmNvbXApOwo+ICsJdm9pZCAoKnN0b3ApKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOwo+ ICsJdm9pZCAoKmVuYWJsZV92YmxhbmspKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHN0cnVj dCBkcm1fY3J0YyAqY3J0Yyk7Cj4gKwl2b2lkICgqZGlzYWJsZV92YmxhbmspKHN0cnVjdCBtdGtf ZGRwX2NvbXAgKmNvbXApOwo+ICsJdm9pZCAoKmxheWVyX29uKShzdHJ1Y3QgbXRrX2RkcF9jb21w ICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KTsKPiArCXZvaWQgKCpsYXllcl9vZmYpKHN0cnVjdCBt dGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpOwo+ICsJdm9pZCAoKmxheWVyX2Nv bmZpZykoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCwKPiArCQkJ ICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cj4gK307Cj4gKwo+ICtzdHJ1Y3Qg bXRrX2RkcF9jb21wIHsKPiArCXN0cnVjdCBjbGsgKmNsazsKPiArCXZvaWQgX19pb21lbSAqcmVn czsKPiArCWludCBpcnE7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpsYXJiX2RldjsKPiArCWVudW0gbXRr X2RkcF9jb21wX2lkIGlkOwo+ICsJY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVu Y3M7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2NvbmZpZyhz dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAo+ICsJCQkJICAgICAgIHVuc2lnbmVkIGludCB3LCB1 bnNpZ25lZCBpbnQgaCwKPiArCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCj4gK3sK PiArCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+Y29uZmlnKQo+ICsJCWNvbXAtPmZ1 bmNzLT5jb25maWcoY29tcCwgdywgaCwgdnJlZnJlc2gpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIHZvaWQgbXRrX2RkcF9jb21wX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCj4g K3sKPiArCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+c3RhcnQpCj4gKwkJY29tcC0+ ZnVuY3MtPnN0YXJ0KGNvbXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2Rk cF9jb21wX3N0b3Aoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKPiArewo+ICsJaWYgKGNvbXAt PmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5zdG9wKQo+ICsJCWNvbXAtPmZ1bmNzLT5zdG9wKGNvbXAp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2VuYWJsZV92Ymxh bmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKPiArCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gK3sKPiArCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ZW5hYmxl X3ZibGFuaykKPiArCQljb21wLT5mdW5jcy0+ZW5hYmxlX3ZibGFuayhjb21wLCBjcnRjKTsKPiAr fQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9kaXNhYmxlX3ZibGFuayhz dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQo+ICt7Cj4gKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29t cC0+ZnVuY3MtPmRpc2FibGVfdmJsYW5rKQo+ICsJCWNvbXAtPmZ1bmNzLT5kaXNhYmxlX3ZibGFu ayhjb21wKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXll cl9vbihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAo+ICsJCQkJCSB1bnNpZ25lZCBpbnQgaWR4 KQo+ICt7Cj4gKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX29uKQo+ICsJ CWNvbXAtPmZ1bmNzLT5sYXllcl9vbihjb21wLCBpZHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIHZvaWQgbXRrX2RkcF9jb21wX2xheWVyX29mZihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w LAo+ICsJCQkJCSAgdW5zaWduZWQgaW50IGlkeCkKPiArewo+ICsJaWYgKGNvbXAtPmZ1bmNzICYm IGNvbXAtPmZ1bmNzLT5sYXllcl9vZmYpCj4gKwkJY29tcC0+ZnVuY3MtPmxheWVyX29mZihjb21w LCBpZHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2xheWVy X2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAo+ICsJCQkJCSAgICAgdW5zaWduZWQg aW50IGlkeCwKPiArCQkJCQkgICAgIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICt7 Cj4gKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZpZykKPiArCQlj b21wLT5mdW5jcy0+bGF5ZXJfY29uZmlnKGNvbXAsIGlkeCwgc3RhdGUpOwo+ICt9Cj4gKwo+ICtp bnQgbXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCj4gKwkJCWVu dW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBlKTsKPiAraW50IG10a19kZHBfY29tcF9pbml0 KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpjb21wX25vZGUsCj4gKwkJ ICAgICAgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgZW51bSBtdGtfZGRwX2NvbXBfaWQgY29t cF9pZCwKPiArCQkgICAgICBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzICpmdW5jcyk7 Cj4gK2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCk7Cj4gK3ZvaWQgbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIo c3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7Cj4gKwo+ ICsjZW5kaWYgLyogTVRLX0RSTV9ERFBfQ09NUF9IICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZHJ2LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmU2 ZTU2NTQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZHJ2LmMKPiBAQCAtMCwwICsxLDU1OCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMp IDIwMTUgTWVkaWFUZWsgSW5jLgo+ICsgKiBBdXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0 ZWsuY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Cj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiAr I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19o ZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fZ2VtLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9w bGF0Zm9ybS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICsKPiArI2luY2x1 ZGUgIm10a19kcm1fY3J0Yy5oIgo+ICsjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKPiArI2luY2x1 ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKPiArI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCj4gKyNp bmNsdWRlICJtdGtfZHJtX2ZiLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgo+ICsKPiAr I2RlZmluZSBEUklWRVJfTkFNRSAibWVkaWF0ZWsiCj4gKyNkZWZpbmUgRFJJVkVSX0RFU0MgIk1l ZGlhdGVrIFNvQyBEUk0iCj4gKyNkZWZpbmUgRFJJVkVSX0RBVEUgIjIwMTUwNTEzIgo+ICsjZGVm aW5lIERSSVZFUl9NQUpPUiAxCj4gKyNkZWZpbmUgRFJJVkVSX01JTk9SIDAKPiArCj4gK3N0YXRp YyB2b2lkIG10a19hdG9taWNfc2NoZWR1bGUoc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0 ZSwKPiArCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJcHJpdmF0 ZS0+Y29tbWl0LnN0YXRlID0gc3RhdGU7Cj4gKwlzY2hlZHVsZV93b3JrKCZwcml2YXRlLT5jb21t aXQud29yayk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19hdG9taWNfd2FpdF9mb3JfZmVu Y2VzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9w bGFuZSAqcGxhbmU7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKPiAr CWludCBpOwo+ICsKPiArCWZvcl9lYWNoX3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgcGxh bmVfc3RhdGUsIGkpCj4gKwkJbXRrX2ZiX3dhaXQocGxhbmUtPnN0YXRlLT5mYik7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIG10a19hdG9taWNfY29tcGxldGUoc3RydWN0IG10a19kcm1fcHJpdmF0 ZSAqcHJpdmF0ZSwKPiArCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKPiArCj4gKwltdGtfYXRv bWljX3dhaXRfZm9yX2ZlbmNlcyhzdGF0ZSk7Cj4gKwo+ICsJZHJtX2F0b21pY19oZWxwZXJfY29t bWl0X21vZGVzZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2hlbHBlcl9j b21taXRfcGxhbmVzKGRybSwgc3RhdGUsIGZhbHNlKTsKPiArCWRybV9hdG9taWNfaGVscGVyX2Nv bW1pdF9tb2Rlc2V0X2VuYWJsZXMoZHJtLCBzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2hlbHBlcl93 YWl0X2Zvcl92YmxhbmtzKGRybSwgc3RhdGUpOwo+ICsJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51 cF9wbGFuZXMoZHJtLCBzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX3N0YXRlX2ZyZWUoc3RhdGUpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfYXRvbWljX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gY29udGFp bmVyX29mKHdvcmssCj4gKwkJCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUsIGNvbW1pdC53b3JrKTsK PiArCj4gKwltdGtfYXRvbWljX2NvbXBsZXRlKHByaXZhdGUsIHByaXZhdGUtPmNvbW1pdC5zdGF0 ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX2F0b21pY19jb21taXQoc3RydWN0IGRybV9k ZXZpY2UgKmRybSwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4g KwkJCSAgICAgYm9vbCBhc3luYykKPiArewo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJp dmF0ZSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGRybV9h dG9taWNfaGVscGVyX3ByZXBhcmVfcGxhbmVzKGRybSwgc3RhdGUpOwo+ICsJaWYgKHJldCkKPiAr CQlyZXR1cm4gcmV0Owo+ICsKPiArCW11dGV4X2xvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsK PiArCWZsdXNoX3dvcmsoJnByaXZhdGUtPmNvbW1pdC53b3JrKTsKPiArCj4gKwlkcm1fYXRvbWlj X2hlbHBlcl9zd2FwX3N0YXRlKGRybSwgc3RhdGUpOwo+ICsKPiArCWlmIChhc3luYykKPiArCQlt dGtfYXRvbWljX3NjaGVkdWxlKHByaXZhdGUsIHN0YXRlKTsKPiArCWVsc2UKPiArCQltdGtfYXRv bWljX2NvbXBsZXRlKHByaXZhdGUsIHN0YXRlKTsKPiArCj4gKwltdXRleF91bmxvY2soJnByaXZh dGUtPmNvbW1pdC5sb2NrKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbXRrX2RybV9tb2RlX2NvbmZpZ19mdW5j cyA9IHsKPiArCS5mYl9jcmVhdGUgPSBtdGtfZHJtX21vZGVfZmJfY3JlYXRlLAo+ICsJLmF0b21p Y19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAo+ICsJLmF0b21pY19jb21taXQgPSBt dGtfYXRvbWljX2NvbW1pdCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBlbnVtIG10a19kZHBf Y29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKPiArCUREUF9DT01QT05FTlRfT1ZMMCwKPiArCURE UF9DT01QT05FTlRfQ09MT1IwLAo+ICsJRERQX0NPTVBPTkVOVF9BQUwsCj4gKwlERFBfQ09NUE9O RU5UX09ELAo+ICsJRERQX0NPTVBPTkVOVF9SRE1BMCwKPiArCUREUF9DT01QT05FTlRfVUZPRSwK PiArCUREUF9DT01QT05FTlRfRFNJMCwKPiArCUREUF9DT01QT05FTlRfUFdNMCwKPiArfTsKPiAr Cj4gK3N0YXRpYyBjb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCBtdGtfZGRwX2V4dFtdID0gewo+ ICsJRERQX0NPTVBPTkVOVF9PVkwxLAo+ICsJRERQX0NPTVBPTkVOVF9DT0xPUjEsCj4gKwlERFBf Q09NUE9ORU5UX0dBTU1BLAo+ICsJRERQX0NPTVBPTkVOVF9SRE1BMSwKPiArCUREUF9DT01QT05F TlRfRFBJMCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbXRrX2RybV9rbXNfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cj4g KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIWlvbW11 X3ByZXNlbnQoJnBsYXRmb3JtX2J1c190eXBlKSkKPiArCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsK PiArCj4gKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwcml2YXRlLT5tdXRleF9ub2Rl KTsKPiArCWlmICghcGRldikgewo+ICsJCWRldl9lcnIoZHJtLT5kZXYsICJXYWl0aW5nIGZvciBk aXNwLW11dGV4IGRldmljZSAlc1xuIiwKPiArCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZS0+ZnVsbF9u YW1lKTsKPiArCQlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKPiArCQlyZXR1cm4g LUVQUk9CRV9ERUZFUjsKPiArCX0KPiArCXByaXZhdGUtPm11dGV4X2RldiA9ICZwZGV2LT5kZXY7 Cj4gKwo+ICsJZHJtX21vZGVfY29uZmlnX2luaXQoZHJtKTsKPiArCj4gKwlkcm0tPm1vZGVfY29u ZmlnLm1pbl93aWR0aCA9IDY0Owo+ICsJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gNjQ7 Cj4gKwo+ICsJLyoKPiArCSAqIHNldCBtYXggd2lkdGggYW5kIGhlaWdodCBhcyBkZWZhdWx0IHZh bHVlKDQwOTZ4NDA5NikuCj4gKwkgKiB0aGlzIHZhbHVlIHdvdWxkIGJlIHVzZWQgdG8gY2hlY2sg ZnJhbWVidWZmZXIgc2l6ZSBsaW1pdGF0aW9uCj4gKwkgKiBhdCBkcm1fbW9kZV9hZGRmYigpLgo+ ICsJICovCj4gKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDQwOTY7Cj4gKwlkcm0tPm1v ZGVfY29uZmlnLm1heF9oZWlnaHQgPSA0MDk2Owo+ICsJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9 ICZtdGtfZHJtX21vZGVfY29uZmlnX2Z1bmNzOwo+ICsKPiArCXJldCA9IGNvbXBvbmVudF9iaW5k X2FsbChkcm0tPmRldiwgZHJtKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfY29uZmlnX2Ns ZWFudXA7Cj4gKwo+ICsJLyoKPiArCSAqIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byBmaXhlZCBk YXRhIHN0cmVhbXMsIGVhY2ggb3B0aW9uYWwsCj4gKwkgKiBhbmQgZWFjaCBzdGF0aWNhbGx5IGFz c2lnbmVkIHRvIGEgY3J0YzoKPiArCSAqIE9WTDAgLT4gQ09MT1IwIC0+IEFBTCAtPiBPRCAtPiBS RE1BMCAtPiBVRk9FIC0+IERTSTAgLi4uCj4gKwkgKi8KPiArCXJldCA9IG10a19kcm1fY3J0Y19j cmVhdGUoZHJtLCBtdGtfZGRwX21haW4sIEFSUkFZX1NJWkUobXRrX2RkcF9tYWluKSk7Cj4gKwlp ZiAocmV0IDwgMCkKPiArCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOwo+ICsJLyogLi4uIGFu ZCBPVkwxIC0+IENPTE9SMSAtPiBHQU1NQSAtPiBSRE1BMSAtPiBEUEkwLiAqLwo+ICsJcmV0ID0g bXRrX2RybV9jcnRjX2NyZWF0ZShkcm0sIG10a19kZHBfZXh0LCBBUlJBWV9TSVpFKG10a19kZHBf ZXh0KSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOwo+ ICsKPiArCS8qIFVzZSBPVkwgZGV2aWNlIGZvciBhbGwgRE1BIG1lbW9yeSBhbGxvY2F0aW9ucyAq Lwo+ICsJbnAgPSBwcml2YXRlLT5jb21wX25vZGVbbXRrX2RkcF9tYWluWzBdXSA/Ogo+ICsJICAg ICBwcml2YXRlLT5jb21wX25vZGVbbXRrX2RkcF9leHRbMF1dOwo+ICsJcGRldiA9IG9mX2ZpbmRf ZGV2aWNlX2J5X25vZGUobnApOwo+ICsJaWYgKCFwZGV2KSB7Cj4gKwkJcmV0ID0gLUVOT0RFVjsK PiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiTmVlZCBhdCBsZWFzdCBvbmUgT1ZMIGRldmljZVxuIik7 Cj4gKwkJZ290byBlcnJfY29tcG9uZW50X3VuYmluZDsKPiArCX0KPiArCj4gKwlwcml2YXRlLT5k bWFfZGV2ID0gJnBkZXYtPmRldjsKPiArCj4gKwkvKgo+ICsJICogV2UgZG9uJ3QgdXNlIHRoZSBk cm1faXJxX2luc3RhbGwoKSBoZWxwZXJzIHByb3ZpZGVkIGJ5IHRoZSBEUk0KPiArCSAqIGNvcmUs IHNvIHdlIG5lZWQgdG8gc2V0IHRoaXMgbWFudWFsbHkgaW4gb3JkZXIgdG8gYWxsb3cgdGhlCj4g KwkgKiBEUk1fSU9DVExfV0FJVF9WQkxBTksgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCj4gKwkgKi8K PiArCWRybS0+aXJxX2VuYWJsZWQgPSB0cnVlOwo+ICsJcmV0ID0gZHJtX3ZibGFua19pbml0KGRy bSwgTUFYX0NSVEMpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byBlcnJfY29tcG9uZW50X3Vu YmluZDsKPiArCj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsKPiArCWRybV9tb2Rl X2NvbmZpZ19yZXNldChkcm0pOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX2NvbXBvbmVu dF91bmJpbmQ6Cj4gKwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKPiArZXJy X2NvbmZpZ19jbGVhbnVwOgo+ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKPiArCj4g KwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfZHJtX2ttc19kZWluaXQo c3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5p KGRybSk7Cj4gKwo+ICsJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7Cj4gKwljb21wb25lbnRfdW5i aW5kX2FsbChkcm0tPmRldiwgZHJtKTsKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG10a19kcm1f Zm9wcyA9IHsKPiArCS5vd25lciA9IFRISVNfTU9EVUxFLAo+ICsJLm9wZW4gPSBkcm1fb3BlbiwK PiArCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCj4gKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9j dGwsCj4gKwkubW1hcCA9IG10a19kcm1fZ2VtX21tYXAsCj4gKwkucG9sbCA9IGRybV9wb2xsLAo+ ICsJLnJlYWQgPSBkcm1fcmVhZCwKPiArI2lmZGVmIENPTkZJR19DT01QQVQKPiArCS5jb21wYXRf aW9jdGwgPSBkcm1fY29tcGF0X2lvY3RsLAo+ICsjZW5kaWYKPiArfTsKPiArCj4gK3N0YXRpYyBz dHJ1Y3QgZHJtX2RyaXZlciBtdGtfZHJtX2RyaXZlciA9IHsKPiArCS5kcml2ZXJfZmVhdHVyZXMg PSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUgfAo+ICsJCQkgICBE UklWRVJfQVRPTUlDLAo+ICsKPiArCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBkcm1fdmJsYW5rX2Nv dW50LAo+ICsJLmVuYWJsZV92YmxhbmsgPSBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuaywKPiAr CS5kaXNhYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuaywKPiArCj4gKwku Z2VtX2ZyZWVfb2JqZWN0ID0gbXRrX2RybV9nZW1fZnJlZV9vYmplY3QsCgpQbGVhc2UgdXNlIGdl bV9mcmVlX29iamVjdF91bmxvY2tlZCwgeW91J3JlIGRyaXZlciBpcyBzdHJ1Y3QgbXV0ZXggZnJl ZS4KCj4gKwkuZ2VtX3ZtX29wcyA9ICZkcm1fZ2VtX2NtYV92bV9vcHMsCj4gKwkuZHVtYl9jcmVh dGUgPSBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZSwKPiArCS5kdW1iX21hcF9vZmZzZXQgPSBtdGtf ZHJtX2dlbV9kdW1iX21hcF9vZmZzZXQsCj4gKwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1i X2Rlc3Ryb3ksCj4gKwo+ICsJLnByaW1lX2hhbmRsZV90b19mZCA9IGRybV9nZW1fcHJpbWVfaGFu ZGxlX3RvX2ZkLAo+ICsJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9f aGFuZGxlLAo+ICsJLmdlbV9wcmltZV9leHBvcnQgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKPiAr CS5nZW1fcHJpbWVfaW1wb3J0ID0gZHJtX2dlbV9wcmltZV9pbXBvcnQsCj4gKwkuZ2VtX3ByaW1l X2dldF9zZ190YWJsZSA9IG10a19nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlLAo+ICsJLmdlbV9wcmlt ZV9pbXBvcnRfc2dfdGFibGUgPSBtdGtfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwKPiArCS5n ZW1fcHJpbWVfbW1hcCA9IG10a19kcm1fZ2VtX21tYXBfYnVmLAo+ICsJLmZvcHMgPSAmbXRrX2Ry bV9mb3BzLAo+ICsKPiArCS5uYW1lID0gRFJJVkVSX05BTUUsCj4gKwkuZGVzYyA9IERSSVZFUl9E RVNDLAo+ICsJLmRhdGUgPSBEUklWRVJfREFURSwKPiArCS5tYWpvciA9IERSSVZFUl9NQUpPUiwK PiArCS5taW5vciA9IERSSVZFUl9NSU5PUiwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgY29tcGFy ZV9vZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXJldHVybiBkZXYt Pm9mX25vZGUgPT0gZGF0YTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfZHJtX2JpbmQoc3Ry dWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOwo+ICsJ aW50IHJldDsKPiArCj4gKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZtdGtfZHJtX2RyaXZlciwgZGV2 KTsKPiArCWlmICghZHJtKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRybV9kZXZfc2V0 X3VuaXF1ZShkcm0sIGRldl9uYW1lKGRldikpOwo+ICsKPiArCXJldCA9IGRybV9kZXZfcmVnaXN0 ZXIoZHJtLCAwKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gKwo+ICsJ ZHJtLT5kZXZfcHJpdmF0ZSA9IHByaXZhdGU7Cj4gKwlwcml2YXRlLT5kcm0gPSBkcm07Cj4gKwo+ ICsJcmV0ID0gbXRrX2RybV9rbXNfaW5pdChkcm0pOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290 byBlcnJfdW5yZWdpc3RlcjsKCldyb25nIHdheSByb3VuZCwgZHJtX2Rldl9yZWdpc3RlciBzaG91 bGQgYmUgbGFzdC4gQW5kIHlvdSdyZSBtaXNzaW5nCmRybV9jb25uZWN0b3JfcmVnaXN0ZXJfYWxs IGhlcmUuCi1EYW5pZWwKCj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfdW5yZWdpc3RlcjoK PiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ICtlcnJfZnJlZToKPiArCWRybV9kZXZfdW5y ZWYoZHJtKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kcm1f dW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0 ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCWRybV9wdXRfZGV2KHBy aXZhdGUtPmRybSk7Cj4gKwlwcml2YXRlLT5kcm0gPSBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0ZXJfb3BzIG10a19kcm1fb3BzID0gewo+ICsJLmJp bmQJCT0gbXRrX2RybV9iaW5kLAo+ICsJLnVuYmluZAkJPSBtdGtfZHJtX3VuYmluZCwKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kZHBfY29tcF9kdF9p ZHNbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3Atb3ZsIiwg ICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfT1ZMIH0sCj4gKwl7IC5jb21wYXRpYmxlID0gIm1l ZGlhdGVrLG10ODE3My1kaXNwLXJkbWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1JETUEg fSwKPiArCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3Atd2RtYSIsICAuZGF0 YSA9ICh2b2lkICopTVRLX0RJU1BfV0RNQSB9LAo+ICsJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl ayxtdDgxNzMtZGlzcC1jb2xvciIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9DT0xPUiB9LAo+ ICsJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1hYWwiLCAgIC5kYXRhID0g KHZvaWQgKilNVEtfRElTUF9BQUx9LAo+ICsJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgx NzMtZGlzcC1nYW1tYSIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9HQU1NQSwgfSwKPiArCXsg LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtdWZvZSIsICAuZGF0YSA9ICh2b2lk ICopTVRLX0RJU1BfVUZPRSB9LAo+ICsJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt ZHNpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRFNJIH0sCj4gKwl7IC5jb21wYXRpYmxl ID0gIm1lZGlhdGVrLG10ODE3My1kcGkiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19EUEkg fSwKPiArCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtbXV0ZXgiLCAuZGF0 YSA9ICh2b2lkICopTVRLX0RJU1BfTVVURVggfSwKPiArCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0 ZWssbXQ4MTczLWRpc3AtcHdtIiwgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfUFdNIH0sCj4g Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW9kIiwgICAgLmRhdGEgPSAo dm9pZCAqKU1US19ESVNQX09EIH0sCj4gKwl7IH0KPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbXRr X2RybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJp dmF0ZTsKPiArCXN0cnVjdCByZXNvdXJjZSAqbWVtOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpu b2RlOwo+ICsJc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2ggPSBOVUxMOwo+ICsJaW50IHJl dDsKPiArCWludCBpOwo+ICsKPiArCXByaXZhdGUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo KnByaXZhdGUpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcHJpdmF0ZSkKPiArCQlyZXR1cm4gLUVO T01FTTsKPiArCj4gKwltdXRleF9pbml0KCZwcml2YXRlLT5jb21taXQubG9jayk7Cj4gKwlJTklU X1dPUksoJnByaXZhdGUtPmNvbW1pdC53b3JrLCBtdGtfYXRvbWljX3dvcmspOwo+ICsKPiArCW1l bSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gKwlw cml2YXRlLT5jb25maWdfcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7Cj4g KwlpZiAoSVNfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKSkgewo+ICsJCXJldCA9IFBUUl9FUlIo cHJpdmF0ZS0+Y29uZmlnX3JlZ3MpOwo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlvcmVt YXAgbW1zeXMtY29uZmlnIHJlc291cmNlOiAlZFxuIiwKPiArCQkJcmV0KTsKPiArCQlyZXR1cm4g cmV0Owo+ICsJfQo+ICsKPiArCS8qIEl0ZXJhdGUgb3ZlciBzaWJsaW5nIERJU1AgZnVuY3Rpb24g YmxvY2tzICovCj4gKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGRldi0+b2Zfbm9kZS0+cGFyZW50 LCBub2RlKSB7Cj4gKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7Cj4gKwkJZW51 bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGU7Cj4gKwkJaW50IGNvbXBfaWQ7Cj4gKwo+ICsJ CW9mX2lkID0gb2ZfbWF0Y2hfbm9kZShtdGtfZGRwX2NvbXBfZHRfaWRzLCBub2RlKTsKPiArCQlp ZiAoIW9mX2lkKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZh aWxhYmxlKG5vZGUpKSB7Cj4gKwkJCWRldl9kYmcoZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29t cG9uZW50ICVzXG4iLAo+ICsJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKPiArCQkJY29udGludWU7Cj4g KwkJfQo+ICsKPiArCQljb21wX3R5cGUgPSAoZW51bSBtdGtfZGRwX2NvbXBfdHlwZSlvZl9pZC0+ ZGF0YTsKPiArCj4gKwkJaWYgKGNvbXBfdHlwZSA9PSBNVEtfRElTUF9NVVRFWCkgewo+ICsJCQlw cml2YXRlLT5tdXRleF9ub2RlID0gb2Zfbm9kZV9nZXQobm9kZSk7Cj4gKwkJCWNvbnRpbnVlOwo+ ICsJCX0KPiArCj4gKwkJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQobm9kZSwgY29tcF90 eXBlKTsKPiArCQlpZiAoY29tcF9pZCA8IDApIHsKPiArCQkJZGV2X3dhcm4oZGV2LCAiU2tpcHBp bmcgdW5rbm93biBjb21wb25lbnQgJXNcbiIsCj4gKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKPiAr CQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlwcml2YXRlLT5jb21wX25vZGVbY29tcF9pZF0g PSBvZl9ub2RlX2dldChub2RlKTsKPiArCj4gKwkJLyoKPiArCQkgKiBDdXJyZW50bHkgb25seSB0 aGUgT1ZMLCBSRE1BLCBEU0ksIGFuZCBEUEkgYmxvY2tzIGhhdmUKPiArCQkgKiBzZXBhcmF0ZSBj b21wb25lbnQgcGxhdGZvcm0gZHJpdmVycyBhbmQgaW5pdGlhbGl6ZSB0aGVpciBvd24KPiArCQkg KiBERFAgY29tcG9uZW50IHN0cnVjdHVyZS4gVGhlIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVy ZS4KPiArCQkgKi8KPiArCQlpZiAoY29tcF90eXBlID09IE1US19ESVNQX09WTCB8fAo+ICsJCSAg ICBjb21wX3R5cGUgPT0gTVRLX0RJU1BfUkRNQSB8fAo+ICsJCSAgICBjb21wX3R5cGUgPT0gTVRL X0RTSSB8fAo+ICsJCSAgICBjb21wX3R5cGUgPT0gTVRLX0RQSSkgewo+ICsJCQlkZXZfaW5mbyhk ZXYsICJBZGRpbmcgY29tcG9uZW50IG1hdGNoIGZvciAlc1xuIiwKPiArCQkJCSBub2RlLT5mdWxs X25hbWUpOwo+ICsJCQljb21wb25lbnRfbWF0Y2hfYWRkKGRldiwgJm1hdGNoLCBjb21wYXJlX29m LCBub2RlKTsKPiArCQl9IGVsc2Ugewo+ICsJCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wOwo+ ICsKPiArCQkJY29tcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY29tcCksIEdGUF9LRVJO RUwpOwo+ICsJCQlpZiAoIWNvbXApIHsKPiArCQkJCXJldCA9IC1FTk9NRU07Cj4gKwkJCQlnb3Rv IGVycl9ub2RlOwo+ICsJCQl9Cj4gKwo+ICsJCQlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYs IG5vZGUsIGNvbXAsIGNvbXBfaWQsIE5VTEwpOwo+ICsJCQlpZiAocmV0KQo+ICsJCQkJZ290byBl cnJfbm9kZTsKPiArCj4gKwkJCXByaXZhdGUtPmRkcF9jb21wW2NvbXBfaWRdID0gY29tcDsKPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKCFwcml2YXRlLT5tdXRleF9ub2RlKSB7Cj4gKwkJZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gZmluZCBkaXNwLW11dGV4IG5vZGVcbiIpOwo+ICsJCXJldCA9IC1F Tk9ERVY7Cj4gKwkJZ290byBlcnJfbm9kZTsKPiArCX0KPiArCj4gKwlwbV9ydW50aW1lX2VuYWJs ZShkZXYpOwo+ICsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXZhdGUpOwo+ICsK PiArCXJldCA9IGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2goZGV2LCAmbXRrX2RybV9v cHMsIG1hdGNoKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfcG07Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gKwo+ICtlcnJfcG06Cj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKPiArZXJyX25v ZGU6Cj4gKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKPiArCWZvciAoaSA9IDA7 IGkgPCBERFBfQ09NUE9ORU5UX0lEX01BWDsgaSsrKQo+ICsJCW9mX25vZGVfcHV0KHByaXZhdGUt PmNvbXBfbm9kZVtpXSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10 a19kcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVj dCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsK PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07Cj4gKwlpbnQgaTsKPiAr Cj4gKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXJfYWxsKGRybSk7Cj4gKwlkcm1fZGV2X3VucmVn aXN0ZXIoZHJtKTsKPiArCW10a19kcm1fa21zX2RlaW5pdChkcm0pOwo+ICsJZHJtX2Rldl91bnJl Zihkcm0pOwo+ICsKPiArCWNvbXBvbmVudF9tYXN0ZXJfZGVsKCZwZGV2LT5kZXYsICZtdGtfZHJt X29wcyk7Cj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7Cj4gKwlvZl9ub2RlX3B1 dChwcml2YXRlLT5tdXRleF9ub2RlKTsKPiArCWZvciAoaSA9IDA7IGkgPCBERFBfQ09NUE9ORU5U X0lEX01BWDsgaSsrKQo+ICsJCW9mX25vZGVfcHV0KHByaXZhdGUtPmNvbXBfbm9kZVtpXSk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKPiArc3Rh dGljIGludCBtdGtfZHJtX3N5c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJ c3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKPiArCj4gKwlkcm1fa21z X2hlbHBlcl9wb2xsX2Rpc2FibGUoZHJtKTsKPiArCj4gKwlwcml2YXRlLT5zdXNwZW5kX3N0YXRl ID0gZHJtX2F0b21pY19oZWxwZXJfc3VzcGVuZChkcm0pOwo+ICsJaWYgKElTX0VSUihwcml2YXRl LT5zdXNwZW5kX3N0YXRlKSkgewo+ICsJCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKGRybSk7 Cj4gKwkJcmV0dXJuIFBUUl9FUlIocHJpdmF0ZS0+c3VzcGVuZF9zdGF0ZSk7Cj4gKwl9Cj4gKwo+ ICsJRFJNX0RFQlVHX0RSSVZFUigibXRrX2RybV9zeXNfc3VzcGVuZFxuIik7Cj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfZHJtX3N5c19yZXN1bWUoc3RydWN0IGRldmlj ZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dl dF9kcnZkYXRhKGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJt Owo+ICsKPiArCWRybV9hdG9taWNfaGVscGVyX3Jlc3VtZShkcm0sIHByaXZhdGUtPnN1c3BlbmRf c3RhdGUpOwo+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZHJtKTsKPiArCj4gKwlEUk1f REVCVUdfRFJJVkVSKCJtdGtfZHJtX3N5c19yZXN1bWVcbiIpOwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArI2VuZGlmCj4gKwo+ICtzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobXRrX2RybV9wbV9vcHMs IG10a19kcm1fc3lzX3N1c3BlbmQsCj4gKwkJCSBtdGtfZHJtX3N5c19yZXN1bWUpOwo+ICsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2RybV9vZl9pZHNbXSA9IHsKPiAr CXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLW1tc3lzIiwgfSwKPiArCXsgfQo+ICt9 Owo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RybV9wbGF0Zm9ybV9k cml2ZXIgPSB7Cj4gKwkucHJvYmUJPSBtdGtfZHJtX3Byb2JlLAo+ICsJLnJlbW92ZQk9IG10a19k cm1fcmVtb3ZlLAo+ICsJLmRyaXZlcgk9IHsKPiArCQkubmFtZQk9ICJtZWRpYXRlay1kcm0iLAo+ ICsJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kcm1fb2ZfaWRzLAo+ICsJCS5wbSAgICAgPSAmbXRr X2RybV9wbV9vcHMsCj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9IHsKPiArCSZtdGtfZGRwX2RyaXZlciwK PiArCSZtdGtfZGlzcF9vdmxfZHJpdmVyLAo+ICsJJm10a19kaXNwX3JkbWFfZHJpdmVyLAo+ICsJ Jm10a19kcm1fcGxhdGZvcm1fZHJpdmVyLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBfX2luaXQg bXRrX2RybV9pbml0KHZvaWQpCj4gK3sKPiArCWludCByZXQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZHJtX2RyaXZlcnMpOyBpKyspIHsKPiArCQly ZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIobXRrX2RybV9kcml2ZXJzW2ldKTsKPiArCQlp ZiAocmV0IDwgMCkgewo+ICsJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciAlcyBkcml2ZXI6 ICVkXG4iLAo+ICsJCQkgICAgICAgbXRrX2RybV9kcml2ZXJzW2ldLT5kcml2ZXIubmFtZSwgcmV0 KTsKPiArCQkJZ290byBlcnI7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiAr ZXJyOgo+ICsJd2hpbGUgKC0taSA+PSAwKQo+ICsJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVy KG10a19kcm1fZHJpdmVyc1tpXSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgX19leGl0IG10a19kcm1fZXhpdCh2b2lkKQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4g Kwlmb3IgKGkgPSBBUlJBWV9TSVpFKG10a19kcm1fZHJpdmVycykgLSAxOyBpID49IDA7IGktLSkK PiArCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfZHJtX2RyaXZlcnNbaV0pOwo+ICt9 Cj4gKwo+ICttb2R1bGVfaW5pdChtdGtfZHJtX2luaXQpOwo+ICttb2R1bGVfZXhpdChtdGtfZHJt X2V4aXQpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiWVQgU0hFTiA8eXQuc2hlbkBtZWRpYXRlay5j b20+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWsgU29DIERSTSBkcml2ZXIiKTsK PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2Rydi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4yN2RjOGZh Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2Rydi5oCj4gQEAgLTAsMCArMSw1NyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUg TWVkaWFUZWsgSW5jLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsjaWZuZGVmIE1US19EUk1fRFJW X0gKPiArI2RlZmluZSBNVEtfRFJNX0RSVl9ICj4gKwo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4K PiArI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKPiArCj4gKyNkZWZpbmUgTUFYX0NSVEMJ Mgo+ICsjZGVmaW5lIE1BWF9DT05ORUNUT1IJMgo+ICsKPiArc3RydWN0IGRldmljZTsKPiArc3Ry dWN0IGRldmljZV9ub2RlOwo+ICtzdHJ1Y3QgZHJtX2NydGM7Cj4gK3N0cnVjdCBkcm1fZGV2aWNl Owo+ICtzdHJ1Y3QgZHJtX2ZiX2hlbHBlcjsKPiArc3RydWN0IGRybV9wcm9wZXJ0eTsKPiArc3Ry dWN0IHJlZ21hcDsKPiArCj4gK3N0cnVjdCBtdGtfZHJtX3ByaXZhdGUgewo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRybTsKPiArCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXY7Cj4gKwo+ICsJc3RydWN0 IGRybV9jcnRjICpjcnRjW01BWF9DUlRDXTsKPiArCXVuc2lnbmVkIGludCBudW1fcGlwZXM7Cj4g Kwo+ICsJc3RydWN0IGRldmljZV9ub2RlICptdXRleF9ub2RlOwo+ICsJc3RydWN0IGRldmljZSAq bXV0ZXhfZGV2Owo+ICsJdm9pZCBfX2lvbWVtICpjb25maWdfcmVnczsKPiArCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqY29tcF9ub2RlW0REUF9DT01QT05FTlRfSURfTUFYXTsKPiArCXN0cnVjdCBtdGtf ZGRwX2NvbXAgKmRkcF9jb21wW0REUF9DT01QT05FTlRfSURfTUFYXTsKPiArCj4gKwlzdHJ1Y3Qg ewo+ICsJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKPiArCQlzdHJ1Y3Qgd29ya19z dHJ1Y3Qgd29yazsKPiArCQlzdHJ1Y3QgbXV0ZXggbG9jazsKPiArCX0gY29tbWl0Owo+ICsKPiAr CXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdXNwZW5kX3N0YXRlOwo+ICt9Owo+ICsKPiArZXh0 ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXI7Cj4gK2V4dGVybiBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXI7Cj4gK2V4dGVybiBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX3JkbWFfZHJpdmVyOwo+ICsKPiArI2VuZGlmIC8qIE1U S19EUk1fRFJWX0ggKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjMzZDMwYzEKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwo+IEBAIC0wLDAg KzEsMTY1IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCj4g KyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgo+ICsKPiArI2luY2x1ZGUgIm10a19k cm1fZHJ2LmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2ZiLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJt X2dlbS5oIgo+ICsKPiArLyoKPiArICogbXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVy ZS4KPiArICoKPiArICogQGZiOiBkcm0gZnJhbWVidWZmZXIgb2JqZWN0Lgo+ICsgKiBAZ2VtX29i ajogYXJyYXkgb2YgZ2VtIG9iamVjdHMuCj4gKyAqLwo+ICtzdHJ1Y3QgbXRrX2RybV9mYiB7Cj4g KwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyCWJhc2U7Cj4gKwkvKiBGb3Igbm93IHdlIG9ubHkgc3Vw cG9ydCBhIHNpbmdsZSBwbGFuZSAqLwo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0CSpnZW1fb2Jq Owo+ICt9Owo+ICsKPiArI2RlZmluZSB0b19tdGtfZmIoeCkgY29udGFpbmVyX29mKHgsIHN0cnVj dCBtdGtfZHJtX2ZiLCBiYXNlKQo+ICsKPiArc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZmJf Z2V0X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4gK3sKPiArCXN0cnVjdCBt dGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOwo+ICsKPiArCXJldHVybiBtdGtfZmIt PmdlbV9vYmo7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxl KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICsJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2LAo+ICsJCQkJICAgIHVuc2lnbmVkIGludCAqaGFuZGxlKQo+ICt7Cj4gKwlzdHJ1 Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKPiArCj4gKwlyZXR1cm4gZHJt X2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgbXRrX2ZiLT5nZW1fb2JqLCBoYW5kbGUpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfZHJtX2ZiX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIpCj4gK3sKPiArCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtf ZmIoZmIpOwo+ICsKPiArCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKPiArCj4gKwlkcm1f Z2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChtdGtfZmItPmdlbV9vYmopOwo+ICsKPiAr CWtmcmVlKG10a19mYik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyX2Z1bmNzIG10a19kcm1fZmJfZnVuY3MgPSB7Cj4gKwkuY3JlYXRlX2hhbmRsZSA9IG10 a19kcm1fZmJfY3JlYXRlX2hhbmRsZSwKPiArCS5kZXN0cm95ID0gbXRrX2RybV9mYl9kZXN0cm95 LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZHJtX2ZyYW1lYnVm ZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCQljb25zdCBzdHJ1Y3QgZHJt X21vZGVfZmJfY21kMiAqbW9kZSwKPiArCQkJCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikK PiArewo+ICsJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKPiArCWludCByZXQ7Cj4gKwo+ICsJ aWYgKGRybV9mb3JtYXRfbnVtX3BsYW5lcyhtb2RlLT5waXhlbF9mb3JtYXQpICE9IDEpCj4gKwkJ cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwo+ICsJbXRrX2ZiID0ga3phbGxvYyhzaXplb2Yo Km10a19mYiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFtdGtfZmIpCj4gKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7Cj4gKwo+ICsJZHJtX2hlbHBlcl9tb2RlX2ZpbGxfZmJfc3RydWN0KCZtdGtf ZmItPmJhc2UsIG1vZGUpOwo+ICsKPiArCW10a19mYi0+Z2VtX29iaiA9IG9iajsKPiArCj4gKwly ZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2Zi X2Z1bmNzKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFs aXplIGZyYW1lYnVmZmVyXG4iKTsKPiArCQlrZnJlZShtdGtfZmIpOwo+ICsJCXJldHVybiBFUlJf UFRSKHJldCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIG10a19mYjsKPiArfQo+ICsKPiArLyoKPiAr ICogV2FpdCBmb3IgYW55IGV4Y2x1c2l2ZSBmZW5jZSBpbiBmYidzIGdlbSBvYmplY3QncyByZXNl cnZhdGlvbiBvYmplY3QuCj4gKyAqCj4gKyAqIFJldHVybnMgLUVSRVNUQVJUU1lTIGlmIGludGVy cnVwdGVkLCBlbHNlIDAuCj4gKyAqLwo+ICtpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIpCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwo+ICsJc3Ry dWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKPiArCWxvbmcgcmV0Owo+ICsKPiArCWlmICgh ZmIpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZ2VtID0gbXRrX2ZiX2dldF9nZW1fb2JqKGZiKTsK PiArCWlmICghZ2VtIHx8ICFnZW0tPmRtYV9idWYgfHwgIWdlbS0+ZG1hX2J1Zi0+cmVzdikKPiAr CQlyZXR1cm4gMDsKPiArCj4gKwlyZXN2ID0gZ2VtLT5kbWFfYnVmLT5yZXN2Owo+ICsJcmV0ID0g cmVzZXJ2YXRpb25fb2JqZWN0X3dhaXRfdGltZW91dF9yY3UocmVzdiwgZmFsc2UsIHRydWUsCj4g KwkJCQkJCSAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ICsJLyogTUFYX1NDSEVEVUxFX1RJTUVP VVQgb24gc3VjY2VzcywgLUVSRVNUQVJUU1lTIGlmIGludGVycnVwdGVkICovCj4gKwlpZiAoV0FS Tl9PTihyZXQgPCAwKSkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICptdGtfZHJtX21vZGVfZmJfY3JlYXRlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwK PiArCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCkKPiArewo+ ICsJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAq Z2VtOwo+ICsJdW5zaWduZWQgaW50IHdpZHRoID0gY21kLT53aWR0aDsKPiArCXVuc2lnbmVkIGlu dCBoZWlnaHQgPSBjbWQtPmhlaWdodDsKPiArCXVuc2lnbmVkIGludCBzaXplLCBicHA7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMoY21kLT5waXhlbF9mb3Jt YXQpICE9IDEpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwo+ICsJZ2VtID0gZHJt X2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgY21kLT5oYW5kbGVzWzBdKTsKPiArCWlmICgh Z2VtKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwo+ICsKPiArCWJwcCA9IGRybV9mb3Jt YXRfcGxhbmVfY3BwKGNtZC0+cGl4ZWxfZm9ybWF0LCAwKTsKPiArCXNpemUgPSAoaGVpZ2h0IC0g MSkgKiBjbWQtPnBpdGNoZXNbMF0gKyB3aWR0aCAqIGJwcDsKPiArCXNpemUgKz0gY21kLT5vZmZz ZXRzWzBdOwo+ICsKPiArCWlmIChnZW0tPnNpemUgPCBzaXplKSB7Cj4gKwkJcmV0ID0gLUVJTlZB TDsKPiArCQlnb3RvIHVucmVmZXJlbmNlOwo+ICsJfQo+ICsKPiArCW10a19mYiA9IG10a19kcm1f ZnJhbWVidWZmZXJfaW5pdChkZXYsIGNtZCwgZ2VtKTsKPiArCWlmIChJU19FUlIobXRrX2ZiKSkg ewo+ICsJCXJldCA9IFBUUl9FUlIobXRrX2ZiKTsKPiArCQlnb3RvIHVucmVmZXJlbmNlOwo+ICsJ fQo+ICsKPiArCXJldHVybiAmbXRrX2ZiLT5iYXNlOwo+ICsKPiArdW5yZWZlcmVuY2U6Cj4gKwlk cm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnZW0pOwo+ICsJcmV0dXJuIEVSUl9Q VFIocmV0KTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9mYi5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuaAo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOWIyYWUzNAo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCj4gQEAgLTAsMCAr MSwyMyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgo+ICsg Kgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KPiArICovCj4gKwo+ICsjaWZuZGVmIE1US19EUk1fRkJfSAo+ICsjZGVmaW5lIE1US19E Uk1fRkJfSAo+ICsKPiArc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZmJfZ2V0X2dlbV9vYmoo c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOwo+ICtpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIpOwo+ICtzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICptdGtfZHJtX21v ZGVfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgICAgIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSwKPiArCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2Zi X2NtZDIgKmNtZCk7Cj4gKwo+ICsjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLmE3NzNiZmEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fZ2VtLmMKPiBAQCAtMCwwICsxLDI2OSBAQAo+ICsvKgo+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsj aW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9kbWEtYnVmLmg+Cj4gKwo+ICsjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKPiAr I2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCj4gKwo+ICtzdGF0aWMgc3RydWN0IG10a19kcm1fZ2Vt X29iaiAqbXRrX2RybV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJCQl1 bnNpZ25lZCBsb25nIHNpemUpCj4gK3sKPiArCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19n ZW1fb2JqOwo+ICsJaW50IHJldDsKPiArCj4gKwlzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9T SVpFKTsKPiArCj4gKwltdGtfZ2VtX29iaiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtfZ2VtX29iaiks IEdGUF9LRVJORUwpOwo+ICsJaWYgKCFtdGtfZ2VtX29iaikKPiArCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPiArCj4gKwlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgJm10a19nZW1f b2JqLT5iYXNlLCBzaXplKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gaW5pdGlhbGl6ZSBnZW0gb2JqZWN0XG4iKTsKPiArCQlrZnJlZShtdGtfZ2VtX29iaik7 Cj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gbXRrX2dlbV9v Ymo7Cj4gK30KPiArCj4gK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJCSAgIHNpemVfdCBzaXplLCBib29sIGFs bG9jX2ttYXApCj4gK3sKPiArCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwo+ICsJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKPiArCXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqOwo+ICsJaW50IHJldDsKPiArCj4gKwltdGtfZ2VtID0gbXRr X2RybV9nZW1faW5pdChkZXYsIHNpemUpOwo+ICsJaWYgKElTX0VSUihtdGtfZ2VtKSkKPiArCQly ZXR1cm4gRVJSX0NBU1QobXRrX2dlbSk7Cj4gKwo+ICsJb2JqID0gJm10a19nZW0tPmJhc2U7Cj4g Kwo+ICsJaW5pdF9kbWFfYXR0cnMoJm10a19nZW0tPmRtYV9hdHRycyk7Cj4gKwlkbWFfc2V0X2F0 dHIoRE1BX0FUVFJfV1JJVEVfQ09NQklORSwgJm10a19nZW0tPmRtYV9hdHRycyk7Cj4gKwo+ICsJ aWYgKCFhbGxvY19rbWFwKQo+ICsJCWRtYV9zZXRfYXR0cihETUFfQVRUUl9OT19LRVJORUxfTUFQ UElORywgJm10a19nZW0tPmRtYV9hdHRycyk7Cj4gKwo+ICsJbXRrX2dlbS0+Y29va2llID0gZG1h X2FsbG9jX2F0dHJzKHByaXYtPmRtYV9kZXYsIG9iai0+c2l6ZSwKPiArCQkJCQkgICZtdGtfZ2Vt LT5kbWFfYWRkciwgR0ZQX0tFUk5FTCwKPiArCQkJCQkgICZtdGtfZ2VtLT5kbWFfYXR0cnMpOwo+ ICsJaWYgKCFtdGtfZ2VtLT5jb29raWUpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxv Y2F0ZSAlenggYnl0ZSBkbWEgYnVmZmVyIiwgb2JqLT5zaXplKTsKPiArCQlyZXQgPSAtRU5PTUVN Owo+ICsJCWdvdG8gZXJyX2dlbV9mcmVlOwo+ICsJfQo+ICsKPiArCWlmIChhbGxvY19rbWFwKQo+ ICsJCW10a19nZW0tPmt2YWRkciA9IG10a19nZW0tPmNvb2tpZTsKPiArCj4gKwlEUk1fREVCVUdf RFJJVkVSKCJjb29raWUgPSAlcCBkbWFfYWRkciA9ICVwYWQgc2l6ZSA9ICV6dVxuIiwKPiArCQkJ IG10a19nZW0tPmNvb2tpZSwgJm10a19nZW0tPmRtYV9hZGRyLAo+ICsJCQkgc2l6ZSk7Cj4gKwo+ ICsJcmV0dXJuIG10a19nZW07Cj4gKwo+ICtlcnJfZ2VtX2ZyZWU6Cj4gKwlkcm1fZ2VtX29iamVj dF9yZWxlYXNlKG9iaik7Cj4gKwlrZnJlZShtdGtfZ2VtKTsKPiArCXJldHVybiBFUlJfUFRSKHJl dCk7Cj4gK30KPiArCj4gK3ZvaWQgbXRrX2RybV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0g PSB0b19tdGtfZ2VtX29iaihvYmopOwo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9 IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlpZiAobXRrX2dlbS0+c2cpCj4gKwkJZHJt X3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgbXRrX2dlbS0+c2cpOwo+ICsJZWxzZQo+ICsJCWRtYV9m cmVlX2F0dHJzKHByaXYtPmRtYV9kZXYsIG9iai0+c2l6ZSwgbXRrX2dlbS0+Y29va2llLAo+ICsJ CQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOwo+ICsKPiAr CS8qIHJlbGVhc2UgZmlsZSBwb2ludGVyIHRvIGdlbSBvYmplY3QuICovCj4gKwlkcm1fZ2VtX29i amVjdF9yZWxlYXNlKG9iaik7Cj4gKwo+ICsJa2ZyZWUobXRrX2dlbSk7Cj4gK30KPiArCj4gK2lu dCBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVt YiAqYXJncykKPiArewo+ICsJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJYXJncy0+cGl0Y2ggPSBESVZfUk9VTkRfVVAoYXJncy0+d2lkdGggKiBh cmdzLT5icHAsIDgpOwo+ICsJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0 Owo+ICsKPiArCW10a19nZW0gPSBtdGtfZHJtX2dlbV9jcmVhdGUoZGV2LCBhcmdzLT5zaXplLCBm YWxzZSk7Cj4gKwlpZiAoSVNfRVJSKG10a19nZW0pKQo+ICsJCXJldHVybiBQVFJfRVJSKG10a19n ZW0pOwo+ICsKPiArCS8qCj4gKwkgKiBhbGxvY2F0ZSBhIGlkIG9mIGlkciB0YWJsZSB3aGVyZSB0 aGUgb2JqIGlzIHJlZ2lzdGVyZWQKPiArCSAqIGFuZCBoYW5kbGUgaGFzIHRoZSBpZCB3aGF0IHVz ZXIgY2FuIHNlZS4KPiArCSAqLwo+ICsJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVf cHJpdiwgJm10a19nZW0tPmJhc2UsICZhcmdzLT5oYW5kbGUpOwo+ICsJaWYgKHJldCkKPiArCQln b3RvIGVycl9oYW5kbGVfY3JlYXRlOwo+ICsKPiArCS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxs b2NhdGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93LiAqLwo+ICsJZHJtX2dlbV9vYmplY3RfdW5yZWZl cmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiAr ZXJyX2hhbmRsZV9jcmVhdGU6Cj4gKwltdGtfZHJtX2dlbV9mcmVlX29iamVjdCgmbXRrX2dlbS0+ YmFzZSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgbXRrX2RybV9nZW1fZHVtYl9t YXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ICsJCQkJc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdWludDMyX3QgaGFuZGxlLAo+ICsJCQkJdWludDY0X3QgKm9mZnNldCkKPiAr ewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCW9i aiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgaGFuZGxlKTsKPiArCWlm ICghb2JqKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbG9va3VwIGdlbSBvYmplY3QuXG4i KTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXQgPSBkcm1fZ2VtX2NyZWF0 ZV9tbWFwX29mZnNldChvYmopOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIG91dDsKPiArCj4gKwkq b2Zmc2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZvYmotPnZtYV9ub2RlKTsKPiArCURS TV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9mZnNldCk7Cj4gKwo+ICtvdXQ6Cj4g Kwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwKPiArCQkJCSAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h KQo+ICsKPiArewo+ICsJaW50IHJldDsKPiArCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19n ZW0gPSB0b19tdGtfZ2VtX29iaihvYmopOwo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJp diA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwkvKgo+ICsJICogZG1hX2FsbG9jX2F0 dHJzKCkgYWxsb2NhdGVkIGEgc3RydWN0IHBhZ2UgdGFibGUgZm9yIG10a19nZW0sIHNvIGNsZWFy Cj4gKwkgKiBWTV9QRk5NQVAgZmxhZyB0aGF0IHdhcyBzZXQgYnkgZHJtX2dlbV9tbWFwX29iaigp L2RybV9nZW1fbW1hcCgpLgo+ICsJICovCj4gKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7 Cj4gKwl2bWEtPnZtX3Bnb2ZmID0gMDsKPiArCj4gKwlyZXQgPSBkbWFfbW1hcF9hdHRycyhwcml2 LT5kbWFfZGV2LCB2bWEsIG10a19nZW0tPmNvb2tpZSwKPiArCQkJICAgICBtdGtfZ2VtLT5kbWFf YWRkciwgb2JqLT5zaXplLCAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKPiArCWlmIChyZXQpCj4gKwkJ ZHJtX2dlbV92bV9jbG9zZSh2bWEpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK2lu dCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZHJt X2dlbV9tbWFwX29iaihvYmosIG9iai0+c2l6ZSwgdm1hKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0 dXJuIHJldDsKPiArCj4gKwlyZXR1cm4gbXRrX2RybV9nZW1fb2JqZWN0X21tYXAob2JqLCB2bWEp Owo+ICt9Cj4gKwo+ICtpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsK PiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlvYmogPSB2bWEtPnZtX3ByaXZh dGVfZGF0YTsKPiArCj4gKwlyZXR1cm4gbXRrX2RybV9nZW1fb2JqZWN0X21tYXAob2JqLCB2bWEp Owo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBBbGxvY2F0ZSBhIHNnX3RhYmxlIGZvciB0aGlzIEdFTSBv YmplY3QuCj4gKyAqIE5vdGU6IEJvdGggdGhlIHRhYmxlJ3MgY29udGVudHMsIGFuZCB0aGUgc2df dGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQgYnkKPiArICogICAgICAgdGhlIGNhbGxlci4KPiAr ICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzZ190YWJsZSwgb3Ig YW4gRVJSX1BUUigpIGVycm9yLgo+ICsgKi8KPiArc3RydWN0IHNnX3RhYmxlICptdGtfZ2VtX3By aW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsJc3Ry dWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7Cj4gKwlz dHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gb2JqLT5kZXYtPmRldl9wcml2YXRlOwo+ICsJ c3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXNndCA9IGt6YWxsb2Mo c2l6ZW9mKCpzZ3QpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghc2d0KQo+ICsJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwo+ICsKPiArCXJldCA9IGRtYV9nZXRfc2d0YWJsZV9hdHRycyhwcml2LT5k bWFfZGV2LCBzZ3QsIG10a19nZW0tPmNvb2tpZSwKPiArCQkJCSAgICBtdGtfZ2VtLT5kbWFfYWRk ciwgb2JqLT5zaXplLAo+ICsJCQkJICAgICZtdGtfZ2VtLT5kbWFfYXR0cnMpOwo+ICsJaWYgKHJl dCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHNndCwgJWRcbiIsIHJldCk7 Cj4gKwkJa2ZyZWUoc2d0KTsKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJfQo+ICsKPiAr CXJldHVybiBzZ3Q7Cj4gK30KPiArCj4gK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2dlbV9w cmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKQo+ICt7Cj4g KwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOwo+ICsJaW50IHJldDsKPiArCXN0cnVj dCBzY2F0dGVybGlzdCAqczsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsJZG1hX2FkZHJfdCBleHBl Y3RlZDsKPiArCj4gKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIGF0dGFjaC0+ZG1h YnVmLT5zaXplKTsKPiArCj4gKwlpZiAoSVNfRVJSKG10a19nZW0pKQo+ICsJCXJldHVybiBFUlJf UFRSKFBUUl9FUlIobXRrX2dlbSkpOwo+ICsKPiArCWV4cGVjdGVkID0gc2dfZG1hX2FkZHJlc3Mo c2ctPnNnbCk7Cj4gKwlmb3JfZWFjaF9zZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsKPiAr CQlpZiAoc2dfZG1hX2FkZHJlc3MocykgIT0gZXhwZWN0ZWQpIHsKPiArCQkJRFJNX0VSUk9SKCJz Z190YWJsZSBpcyBub3QgY29udGlndW91cyIpOwo+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ICsJCQln b3RvIGVycl9nZW1fZnJlZTsKPiArCQl9Cj4gKwkJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhz KSArIHNnX2RtYV9sZW4ocyk7Cj4gKwl9Cj4gKwo+ICsJbXRrX2dlbS0+ZG1hX2FkZHIgPSBzZ19k bWFfYWRkcmVzcyhzZy0+c2dsKTsKPiArCW10a19nZW0tPnNnID0gc2c7Cj4gKwo+ICsJcmV0dXJu ICZtdGtfZ2VtLT5iYXNlOwo+ICsKPiArZXJyX2dlbV9mcmVlOgo+ICsJa2ZyZWUobXRrX2dlbSk7 Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZ2VtLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjNhMmE1 NjIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZ2VtLmgKPiBAQCAtMCwwICsxLDU5IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAx NSBNZWRpYVRlayBJbmMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4g KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX01US19EUk1f R0VNX0hfCj4gKyNkZWZpbmUgX01US19EUk1fR0VNX0hfCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9nZW0uaD4KPiArCj4gKy8qCj4gKyAqIG10ayBkcm0gYnVmZmVyIHN0cnVjdHVyZS4KPiArICoK PiArICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KPiArICoJLSBhIG5ldyBoYW5kbGUgdG8gdGhpcyBn ZW0gb2JqZWN0IHdvdWxkIGJlIGNyZWF0ZWQKPiArICoJYnkgZHJtX2dlbV9oYW5kbGVfY3JlYXRl KCkuCj4gKyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2YgZG1hX2FsbG9jX2F0dHJzKCks IGtlZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKPiArICogQGt2YWRkcjoga2VybmVsIHZpcnR1 YWwgYWRkcmVzcyBvZiBnZW0gYnVmZmVyLgo+ICsgKiBAZG1hX2FkZHI6IGRtYSBhZGRyZXNzIG9m IGdlbSBidWZmZXIuCj4gKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVzIG9mIGdlbSBidWZm ZXIuCj4gKyAqCj4gKyAqIFAuUy4gdGhpcyBvYmplY3Qgd291bGQgYmUgdHJhbnNmZXJyZWQgdG8g dXNlciBhcyBrbXNfYm8uaGFuZGxlIHNvCj4gKyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUgYnVmZmVy IHRocm91Z2gga21zX2JvLmhhbmRsZS4KPiArICovCj4gK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmog ewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0CWJhc2U7Cj4gKwl2b2lkCQkJKmNvb2tpZTsKPiAr CXZvaWQJCQkqa3ZhZGRyOwo+ICsJZG1hX2FkZHJfdAkJZG1hX2FkZHI7Cj4gKwlzdHJ1Y3QgZG1h X2F0dHJzCWRtYV9hdHRyczsKPiArCXN0cnVjdCBzZ190YWJsZQkJKnNnOwo+ICt9Owo+ICsKPiAr I2RlZmluZSB0b19tdGtfZ2VtX29iaih4KQljb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1f Z2VtX29iaiwgYmFzZSkKPiArCj4gK3ZvaWQgbXRrX2RybV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpnZW0pOwo+ICtzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJt X2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCj4gKwkJCQkJ ICAgYm9vbCBhbGxvY19rbWFwKTsKPiAraW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkgICAg c3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKPiAraW50IG10a19kcm1fZ2VtX2R1 bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiArCQkJCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKPiArCQkJCXVpbnQ2NF90ICpvZmZzZXQp Owo+ICtpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpOwo+ICtpbnQgbXRrX2RybV9nZW1fbW1hcF9idWYoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosCj4gKwkJCSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gK3N0 cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmopOwo+ICtzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm10a19nZW1fcHJpbWVfaW1w b3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCXN0cnVjdCBkbWFfYnVm X2F0dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxlICpzZyk7Cj4gKwo+ICsjZW5kaWYK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYyBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmM4OTg3ODgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwo+IEBAIC0wLDAgKzEsMjQw IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCj4gKyAqIEF1 dGhvcjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiAr I2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3Bs YW5lX2hlbHBlci5oPgo+ICsKPiArI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgo+ICsjaW5jbHVk ZSAibXRrX2RybV9kZHBfY29tcC5oIgo+ICsjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKPiArI2lu Y2x1ZGUgIm10a19kcm1fZmIuaCIKPiArI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCj4gKyNpbmNs dWRlICJtdGtfZHJtX3BsYW5lLmgiCj4gKwo+ICtzdGF0aWMgY29uc3QgdTMyIGZvcm1hdHNbXSA9 IHsKPiArCURSTV9GT1JNQVRfWFJHQjg4ODgsCj4gKwlEUk1fRk9STUFUX0FSR0I4ODg4LAo+ICsJ RFJNX0ZPUk1BVF9SR0I1NjUsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfcGxhbmVfZW5h YmxlKHN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxhbmUsIGJvb2wgZW5hYmxlLAo+ICsJCQkg ICAgIGRtYV9hZGRyX3QgYWRkciwgc3RydWN0IGRybV9yZWN0ICpkZXN0KQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfcGxhbmUtPmJhc2U7Cj4gKwlzdHJ1Y3QgbXRrX3Bs YW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwo+ICsJ dW5zaWduZWQgaW50IHBpdGNoLCBmb3JtYXQ7Cj4gKwlpbnQgeCwgeTsKPiArCj4gKwlpZiAoV0FS Tl9PTighcGxhbmUtPnN0YXRlIHx8IChlbmFibGUgJiYgIXBsYW5lLT5zdGF0ZS0+ZmIpKSkKPiAr CQlyZXR1cm47Cj4gKwo+ICsJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpIHsKPiArCQlwaXRjaCA9IHBs YW5lLT5zdGF0ZS0+ZmItPnBpdGNoZXNbMF07Cj4gKwkJZm9ybWF0ID0gcGxhbmUtPnN0YXRlLT5m Yi0+cGl4ZWxfZm9ybWF0Owo+ICsJfSBlbHNlIHsKPiArCQlwaXRjaCA9IDA7Cj4gKwkJZm9ybWF0 ID0gRFJNX0ZPUk1BVF9SR0JBODg4ODsKPiArCX0KPiArCj4gKwl4ID0gcGxhbmUtPnN0YXRlLT5j cnRjX3g7Cj4gKwl5ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3k7Cj4gKwo+ICsJaWYgKHggPCAwKSB7 Cj4gKwkJYWRkciAtPSB4ICogNDsKPiArCQl4ID0gMDsKPiArCX0KPiArCj4gKwlpZiAoeSA8IDAp IHsKPiArCQlhZGRyIC09IHkgKiBwaXRjaDsKPiArCQl5ID0gMDsKPiArCX0KPiArCj4gKwlzdGF0 ZS0+cGVuZGluZy5lbmFibGUgPSBlbmFibGU7Cj4gKwlzdGF0ZS0+cGVuZGluZy5waXRjaCA9IHBp dGNoOwo+ICsJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gZm9ybWF0Owo+ICsJc3RhdGUtPnBlbmRp bmcuYWRkciA9IGFkZHI7Cj4gKwlzdGF0ZS0+cGVuZGluZy54ID0geDsKPiArCXN0YXRlLT5wZW5k aW5nLnkgPSB5Owo+ICsJc3RhdGUtPnBlbmRpbmcud2lkdGggPSBkZXN0LT54MiAtIGRlc3QtPngx Owo+ICsJc3RhdGUtPnBlbmRpbmcuaGVpZ2h0ID0gZGVzdC0+eTIgLSBkZXN0LT55MTsKPiArCXdt YigpOyAvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlcnMgYXJlIHNldCBiZWZvcmUgdXBk YXRlICovCj4gKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRydWU7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIG10a19wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiArewo+ICsJ c3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGU7Cj4gKwo+ICsJaWYgKHBsYW5lLT5zdGF0ZSkg ewo+ICsJCWlmIChwbGFuZS0+c3RhdGUtPmZiKQo+ICsJCQlkcm1fZnJhbWVidWZmZXJfdW5yZWZl cmVuY2UocGxhbmUtPnN0YXRlLT5mYik7Cj4gKwo+ICsJCXN0YXRlID0gdG9fbXRrX3BsYW5lX3N0 YXRlKHBsYW5lLT5zdGF0ZSk7Cj4gKwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7 Cj4gKwl9IGVsc2Ugewo+ICsJCXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tF Uk5FTCk7Cj4gKwkJaWYgKCFzdGF0ZSkKPiArCQkJcmV0dXJuOwo+ICsJCXBsYW5lLT5zdGF0ZSA9 ICZzdGF0ZS0+YmFzZTsKPiArCX0KPiArCj4gKwlzdGF0ZS0+YmFzZS5wbGFuZSA9IHBsYW5lOwo+ ICsJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gRFJNX0ZPUk1BVF9SR0I1NjU7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICptdGtfcGxhbmVfZHVwbGljYXRlX3N0YXRl KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRl ICpvbGRfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKPiArCXN0cnVj dCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlOwo+ICsKPiArCXN0YXRlID0ga3phbGxvYyhzaXplb2Yo KnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXN0YXRlKQo+ICsJCXJldHVybiBOVUxMOwo+ ICsKPiArCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5lLCAm c3RhdGUtPmJhc2UpOwo+ICsKPiArCVdBUk5fT04oc3RhdGUtPmJhc2UucGxhbmUgIT0gcGxhbmUp Owo+ICsKPiArCXN0YXRlLT5wZW5kaW5nID0gb2xkX3N0YXRlLT5wZW5kaW5nOwo+ICsKPiArCXJl dHVybiAmc3RhdGUtPmJhc2U7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kcm1fcGxhbmVf ZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQkJCQlzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9k ZXN0cm95X3N0YXRlKHBsYW5lLCBzdGF0ZSk7Cj4gKwlrZnJlZSh0b19tdGtfcGxhbmVfc3RhdGUo c3RhdGUpKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mg bXRrX3BsYW5lX2Z1bmNzID0gewo+ICsJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVy X3VwZGF0ZV9wbGFuZSwKPiArCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlz YWJsZV9wbGFuZSwKPiArCS5kZXN0cm95ID0gZHJtX3BsYW5lX2NsZWFudXAsCj4gKwkucmVzZXQg PSBtdGtfcGxhbmVfcmVzZXQsCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IG10a19wbGFu ZV9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBtdGtfZHJtX3Bs YW5lX2Rlc3Ryb3lfc3RhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IG10a19wbGFuZV9hdG9t aWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkgIHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0 YXRlLT5mYjsKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiArCWJvb2wg dmlzaWJsZTsKPiArCXN0cnVjdCBkcm1fcmVjdCBkZXN0ID0gewo+ICsJCS54MSA9IHN0YXRlLT5j cnRjX3gsCj4gKwkJLnkxID0gc3RhdGUtPmNydGNfeSwKPiArCQkueDIgPSBzdGF0ZS0+Y3J0Y194 ICsgc3RhdGUtPmNydGNfdywKPiArCQkueTIgPSBzdGF0ZS0+Y3J0Y195ICsgc3RhdGUtPmNydGNf aCwKPiArCX07Cj4gKwlzdHJ1Y3QgZHJtX3JlY3Qgc3JjID0gewo+ICsJCS8qIDE2LjE2IGZpeGVk IHBvaW50ICovCj4gKwkJLngxID0gc3RhdGUtPnNyY194LAo+ICsJCS55MSA9IHN0YXRlLT5zcmNf eSwKPiArCQkueDIgPSBzdGF0ZS0+c3JjX3ggKyBzdGF0ZS0+c3JjX3csCj4gKwkJLnkyID0gc3Rh dGUtPnNyY195ICsgc3RhdGUtPnNyY19oLAo+ICsJfTsKPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlw ID0geyAwLCB9Owo+ICsKPiArCWlmICghZmIpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKCFt dGtfZmJfZ2V0X2dlbV9vYmooZmIpKSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygiYnVmZmVyIGlzIG51 bGxcbiIpOwo+ICsJCXJldHVybiAtRUZBVUxUOwo+ICsJfQo+ICsKPiArCWlmICghc3RhdGUtPmNy dGMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2Ny dGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7Cj4gKwlpZiAoSVNfRVJSKGNydGNf c3RhdGUpKQo+ICsJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwo+ICsKPiArCWNsaXAueDIg PSBjcnRjX3N0YXRlLT5tb2RlLmhkaXNwbGF5Owo+ICsJY2xpcC55MiA9IGNydGNfc3RhdGUtPm1v ZGUudmRpc3BsYXk7Cj4gKwo+ICsJcmV0dXJuIGRybV9wbGFuZV9oZWxwZXJfY2hlY2tfdXBkYXRl KHBsYW5lLCBzdGF0ZS0+Y3J0YywgZmIsCj4gKwkJCQkJICAgICAmc3JjLCAmZGVzdCwgJmNsaXAs Cj4gKwkJCQkJICAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCj4gKwkJCQkJICAgICBE Uk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCj4gKwkJCQkJICAgICB0cnVlLCB0cnVlLCAmdmlz aWJsZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19wbGFuZV9hdG9taWNfdXBkYXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICsJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg Km9sZF9zdGF0ZSkKPiArewo+ICsJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19t dGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9 IHN0YXRlLT5iYXNlLmNydGM7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKPiArCXN0 cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW07Cj4gKwlzdHJ1Y3QgbXRrX2RybV9wbGFuZSAq bXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5lKTsKPiArCXN0cnVjdCBkcm1fcmVjdCBkZXN0 ID0gewo+ICsJCS54MSA9IHN0YXRlLT5iYXNlLmNydGNfeCwKPiArCQkueTEgPSBzdGF0ZS0+YmFz ZS5jcnRjX3ksCj4gKwkJLngyID0gc3RhdGUtPmJhc2UuY3J0Y194ICsgc3RhdGUtPmJhc2UuY3J0 Y193LAo+ICsJCS55MiA9IHN0YXRlLT5iYXNlLmNydGNfeSArIHN0YXRlLT5iYXNlLmNydGNfaCwK PiArCX07Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKPiArCj4gKwlpZiAoIWNy dGMpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0 ZS0+bW9kZS5oZGlzcGxheTsKPiArCWNsaXAueTIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+ bW9kZS52ZGlzcGxheTsKPiArCWRybV9yZWN0X2ludGVyc2VjdCgmZGVzdCwgJmNsaXApOwo+ICsK PiArCWdlbSA9IG10a19mYl9nZXRfZ2VtX29iaihzdGF0ZS0+YmFzZS5mYik7Cj4gKwltdGtfZ2Vt ID0gdG9fbXRrX2dlbV9vYmooZ2VtKTsKPiArCW10a19wbGFuZV9lbmFibGUobXRrX3BsYW5lLCB0 cnVlLCBtdGtfZ2VtLT5kbWFfYWRkciwgJmRlc3QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBt dGtfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkg ICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKPiArewo+ICsJc3RydWN0IG10 a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsK PiArCj4gKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBmYWxzZTsKPiArCXdtYigpOyAvKiBNYWtl IHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlciBpcyBzZXQgYmVmb3JlIHVwZGF0ZSAqLwo+ICsJc3Rh dGUtPnBlbmRpbmcuZGlydHkgPSB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgbXRrX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5h dG9taWNfY2hlY2sgPSBtdGtfcGxhbmVfYXRvbWljX2NoZWNrLAo+ICsJLmF0b21pY191cGRhdGUg PSBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZSwKPiArCS5hdG9taWNfZGlzYWJsZSA9IG10a19wbGFu ZV9hdG9taWNfZGlzYWJsZSwKPiArfTsKPiArCj4gK2ludCBtdGtfcGxhbmVfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLAo+ICsJCSAg IHVuc2lnbmVkIGxvbmcgcG9zc2libGVfY3J0Y3MsIGVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZSwK PiArCQkgICB1bnNpZ25lZCBpbnQgenBvcykKPiArewo+ICsJaW50IGVycjsKPiArCj4gKwllcnIg PSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZGV2LCAmbXRrX3BsYW5lLT5iYXNlLCBwb3NzaWJs ZV9jcnRjcywKPiArCQkJCSAgICAgICAmbXRrX3BsYW5lX2Z1bmNzLCBmb3JtYXRzLAo+ICsJCQkJ ICAgICAgIEFSUkFZX1NJWkUoZm9ybWF0cyksIHR5cGUsIE5VTEwpOwo+ICsJaWYgKGVycikgewo+ ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgcGxhbmVcbiIpOwo+ICsJCXJldHVy biBlcnI7Cj4gKwl9Cj4gKwo+ICsJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJm10a19wbGFuZS0+YmFz ZSwgJm10a19wbGFuZV9oZWxwZXJfZnVuY3MpOwo+ICsJbXRrX3BsYW5lLT5pZHggPSB6cG9zOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9w bGFuZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi43MmE3YjNlCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3Bs YW5lLmgKPiBAQCAtMCwwICsxLDU5IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBN ZWRpYVRlayBJbmMuCj4gKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KPiAr ICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfTVRLX0RSTV9QTEFORV9IXwo+ICsjZGVmaW5l IF9NVEtfRFJNX1BMQU5FX0hfCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiArc3RydWN0IG10a19kcm1fcGxhbmUgewo+ICsJ c3RydWN0IGRybV9wbGFuZQkJYmFzZTsKPiArCXVuc2lnbmVkIGludAkJCWlkeDsKPiArfTsKPiAr Cj4gK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7Cj4gKwlib29sCQkJCWNvbmZpZzsK PiArCWJvb2wJCQkJZW5hYmxlOwo+ICsJZG1hX2FkZHJfdAkJCWFkZHI7Cj4gKwl1bnNpZ25lZCBp bnQJCQlwaXRjaDsKPiArCXVuc2lnbmVkIGludAkJCWZvcm1hdDsKPiArCXVuc2lnbmVkIGludAkJ CXg7Cj4gKwl1bnNpZ25lZCBpbnQJCQl5Owo+ICsJdW5zaWduZWQgaW50CQkJd2lkdGg7Cj4gKwl1 bnNpZ25lZCBpbnQJCQloZWlnaHQ7Cj4gKwlib29sCQkJCWRpcnR5Owo+ICt9Owo+ICsKPiArc3Ry dWN0IG10a19wbGFuZV9zdGF0ZSB7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlCQliYXNlOwo+ ICsJc3RydWN0IG10a19wbGFuZV9wZW5kaW5nX3N0YXRlCXBlbmRpbmc7Cj4gK307Cj4gKwo+ICtz dGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHJtX3BsYW5lICp0b19tdGtfcGxhbmUoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YocGxhbmUsIHN0cnVj dCBtdGtfZHJtX3BsYW5lLCBiYXNlKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3Qg bXRrX3BsYW5lX3N0YXRlICoKPiArdG9fbXRrX3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKHN0YXRlLCBzdHJ1Y3Qg bXRrX3BsYW5lX3N0YXRlLCBiYXNlKTsKPiArfQo+ICsKPiAraW50IG10a19wbGFuZV9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxhbmUsCj4g KwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0 eXBlLAo+ICsJCSAgIHVuc2lnbmVkIGludCB6cG9zKTsKPiArCj4gKyNlbmRpZgo+IC0tIAo+IDIu OC4wLnJjMwo+IAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENv cnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo=