From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH 04/17 v5] xen/arm: vpl011: Add SBSA UART emulation in Xen Date: Fri, 23 Jun 2017 14:10:12 +0100 Message-ID: <125477ed-2e38-d615-7dac-516184d25e69@arm.com> References: <1498117132-27139-1-git-send-email-bhupinder.thakur@linaro.org> <1498117132-27139-5-git-send-email-bhupinder.thakur@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dOOLp-00034n-4u for xen-devel@lists.xenproject.org; Fri, 23 Jun 2017 13:10:17 +0000 In-Reply-To: <1498117132-27139-5-git-send-email-bhupinder.thakur@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Bhupinder Thakur , xen-devel@lists.xenproject.org Cc: Andre Przywara , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org SGkgQmh1cGluZGVyLAoKT24gMjIvMDYvMTcgMDg6MzgsIEJodXBpbmRlciBUaGFrdXIgd3JvdGU6 Cj4gQWRkIGVtdWxhdGlvbiBjb2RlIHRvIGVtdWxhdGUgcmVhZC93cml0ZSBhY2Nlc3MgdG8gcGww MTEgcmVnaXN0ZXJzCj4gYW5kIHBsMDExIGludGVycnVwdHM6Cj4KPiAgICAgLSBFbXVsYXRlIERS IHJlYWQvd3JpdGUgYnkgcmVhZGluZyBhbmQgd3JpdGluZyBmcm9tL3RvIHRoZSBJTgo+ICAgICAg IGFuZCBPVVQgcmluZyBidWZmZXJzIGFuZCByYWlzaW5nIGFuIGV2ZW50IHRvIHRoZSBiYWNrZW5k IHdoZW4KPiAgICAgICB0aGVyZSBpcyBkYXRhIGluIHRoZSBPVVQgcmluZyBidWZmZXIgYW5kIGlu amVjdGluZyBhbiBpbnRlcnJ1cHQKPiAgICAgICB0byB0aGUgZ3Vlc3Qgd2hlbiB0aGVyZSBpcyBk YXRhIGluIHRoZSBJTiByaW5nIGJ1ZmZlcgo+Cj4gICAgIC0gT3RoZXIgcmVnaXN0ZXJzIGFyZSBy ZWxhdGVkIHRvIGludGVycnVwdCBtYW5hZ2VtZW50IGFuZAo+ICAgICAgIGVzc2VudGlhbGx5IGNv bnRyb2wgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkZWxpdmVyZWQgdG8gdGhlIGd1ZXN0Cj4KPiBUaGlz IHBhdGNoIGltcGxlbWVudHMgdGhlIFNCU0EgR2VuZXJpYyBVQVJUIHdoaWNoIGlzIGEgc3Vic2V0 IG9mIEFSTQo+IFBMMDExIFVBUlQuCj4KPiBUaGUgU0JTQSBHZW5lcmljIFVBUlQgaXMgY292ZXJl ZCBpbiBBcHBlbmRpeCBCIG9mCj4gaHR0cHM6Ly9zdGF0aWMuZG9jcy5hcm0uY29tL2RlbjAwMjkv YS9TZXJ2ZXJfQmFzZV9TeXN0ZW1fQXJjaGl0ZWN0dXJlX3YzXzFfQVJNX0RFTl8wMDI5QS5wZGYK Pgo+IFNpZ25lZC1vZmYtYnk6IEJodXBpbmRlciBUaGFrdXIgPGJodXBpbmRlci50aGFrdXJAbGlu YXJvLm9yZz4KPiAtLS0KPiBDQzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJu ZWwub3JnPgo+IENDOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgo+IENDOiBB bmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6eXdhcmFAYXJtLmNvbT4KPgo+IENoYW5nZXMgc2luY2Ug djQ6Cj4gLSBSZW5hbWVkIHZwbDAxMV91cGRhdGUoKSB0byB2cGwwMTFfdXBkYXRlX2ludGVycnVw dF9zdGF0dXMoKSBhbmQgYWRkZWQgbG9naWMgdG8gYXZvaWQKPiAgIHJhaXNpbmcgc3B1cmlvdXMg aW50ZXJydXB0cy4KPiAtIFVzZWQgYmFycmllciBpbnN0cnVjdGlvbnMgY29ycmVjdGx5IHdoaWxl IHJlYWRpbmcvd3JpdGluZyBkYXRhIHRvIHRoZSByaW5nIGJ1ZmZlci4KPiAtIFByb3BlciBsb2Nr IHRha2VuIGJlZm9yZSByZWFkaW5nIHJpbmcgYnVmZmVyIGluZGljZXMuCj4KPiBDaGFuZ2VzIHNp bmNlIHYzOgo+IC0gTW92ZWQgdGhlIGNhbGwgdG8gREVGSU5FX1hFTl9GTEVYX1JJTkcgZnJvbSB2 cGwwMTEuaCB0byBwdWJsaWMvY29uc29sZS5oLiBUaGlzIG1hY3JvIGRlZmluZXMKPiAgIHN0YW5k YXJkIGZ1bmN0aW9ucyB0byBvcGVyYXRlIG9uIHRoZSByaW5nIGJ1ZmZlci4KPiAtIExvY2sgdGFr ZW4gd2hpbGUgdXBkYXRpbmcgdGhlIGludGVycnVwdCBtYXNrIGFuZCBjbGVhciByZWdpc3RlcnMg aW4gbW1pb193cml0ZS4KPiAtIFVzZSBnZm5fdCBpbnN0ZWFkIG9mIHhlbl9wZm5fdC4KPiAtIHZn aWNfZnJlZV92aXJxIGNhbGxlZCBpZiB0aGVyZSBpcyBhbnkgZXJyb3IgaW4gdnBsMDExIGluaXRp YWxpemF0aW9uLgo+IC0gbW1pbyBoYW5kbGVycyBmcmVlZCBpZiB0aGVyZSBpcyBhbnkgZXJyb3Ig aW4gdnBsMDExIGluaXRpYWxpemF0aW9uLgo+IC0gUmVtb3ZlZCB2cGwwMTEtPmluaXRpYWxpemVk IGZsYWcgdXNhZ2UgYXMgdGhlIHNhbWUgY2hlY2sgY291bGQgYmUgZG9uZQo+ICAgdXNpbmcgdnBs MDExLT5yaW5nLXJlZi4KPiAtIFVzZWQgcmV0dXJuIGluc3RlYWQgb2YgYnJlYWsgaW4gdGhlIHN3 aXRjaCBoYW5kbGluZyBvZiBlbXVsYXRpb24gb2YgZGlmZmVyZW50IHBsMDExIHJlZ2lzdGVycy4K PiAtIFJlbmFtZWQgdnBsMDExX3VwZGF0ZV9zcGkoKSB0byB2cGwwMTFfdXBkYXRlKCkuCj4KPiBD aGFuZ2VzIHNpbmNlIHYyOgo+IC0gVXNlIGdlbmVyaWMgdnJlZ19yZWcqIGZvciByZWFkL3dyaXRl IG9mIHJlZ2lzdGVycyBlbXVsYXRpbmcgcGwwMTEuCj4gLSBVc2UgZ2VuZXJpYyByaW5nIGJ1ZmZl ciBmdW5jdGlvbnMgZGVmaW5lZCB1c2luZyBERUZJTkVfWEVOX0ZMRVhfUklORy4KPiAtIFJlbmFt ZWQgdGhlIFNQSSBpbmplY3Rpb24gZnVuY3Rpb24gdG8gdnBsMDExX3VwZGF0ZV9zcGkoKSB0byBy ZWZsZWN0IGxldmVsCj4gICB0cmlnZ2VyZWQgbmF0dXJlIG9mIHBsMDExIGludGVycnVwdHMuCj4g LSBUaGUgcGwwMTEgcmVnaXN0ZXIgYWNjZXNzIGFkZHJlc3Mgc2hvdWxkIGFsd2F5cyBiZSB0aGUg YmFzZSBhZGRyZXNzIG9mIHRoZQo+ICAgY29ycmVzcG9uZGluZyByZWdpc3RlciBhcyBwZXIgc2Vj dGlvbiBCIG9mIHRoZSBTQlNBIGRvY3VtZW50LiBGb3IgdGhpcyByZWFzb24sCj4gICB0aGUgcmVn aXN0ZXIgcmFuZ2UgYWRkcmVzcyBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuCj4KPiBDaGFuZ2VzIHNp bmNlIHYxOgo+IC0gUmVtb3ZlZCB0aGUgb3B0aW1penRpb24gcmVsYXRlZCB0byBzZW5kaWluZyBl dmVudHMgdG8geGVuY29uc29sZQo+IC0gVXNlIGxvY2FsIHZhcmlhYmxlcyBhcyByaW5nIGJ1ZmZl ciBpbmRpY2VzIHdoaWxlIHVzaW5nIHRoZSByaW5nIGJ1ZmZlcgo+Cj4gIHhlbi9hcmNoL2FybS9L Y29uZmlnICAgICAgICAgICAgIHwgICA3ICsKPiAgeGVuL2FyY2gvYXJtL01ha2VmaWxlICAgICAg ICAgICAgfCAgIDEgKwo+ICB4ZW4vYXJjaC9hcm0vdnBsMDExLmMgICAgICAgICAgICB8IDQ0OSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgeGVuL2luY2x1ZGUvYXNt LWFybS9kb21haW4uaCAgICAgfCAgIDYgKwo+ICB4ZW4vaW5jbHVkZS9hc20tYXJtL3BsMDExLXVh cnQuaCB8ICAgMiArCj4gIHhlbi9pbmNsdWRlL2FzbS1hcm0vdnBsMDExLmggICAgIHwgIDczICsr KysrKysKPiAgeGVuL2luY2x1ZGUvcHVibGljL2FyY2gtYXJtLmggICAgfCAgIDYgKwo+ICA3IGZp bGVzIGNoYW5nZWQsIDU0NCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4v YXJjaC9hcm0vdnBsMDExLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL2FzbS1h cm0vdnBsMDExLmgKPgo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vS2NvbmZpZyBiL3hlbi9h cmNoL2FybS9LY29uZmlnCj4gaW5kZXggZDQ2Yjk4Yy4uZjU4MDE5ZCAxMDA2NDQKPiAtLS0gYS94 ZW4vYXJjaC9hcm0vS2NvbmZpZwo+ICsrKyBiL3hlbi9hcmNoL2FybS9LY29uZmlnCj4gQEAgLTUw LDYgKzUwLDEzIEBAIGNvbmZpZyBIQVNfSVRTCj4gICAgICAgICAgcHJvbXB0ICJHSUN2MyBJVFMg TVNJIGNvbnRyb2xsZXIgc3VwcG9ydCIgaWYgRVhQRVJUID0gInkiCj4gICAgICAgICAgZGVwZW5k cyBvbiBIQVNfR0lDVjMKPgo+ICtjb25maWcgU0JTQV9WVUFSVF9DT05TT0xFCj4gKwlib29sICJF bXVsYXRlZCBTQlNBIFVBUlQgY29uc29sZSBzdXBwb3J0Igo+ICsJZGVmYXVsdCB5Cj4gKwktLS1o ZWxwLS0tCj4gKwkgIEFsbG93cyBhIGd1ZXN0IHRvIHVzZSBTQlNBIEdlbmVyaWMgVUFSVCBhcyBh IGNvbnNvbGUuIFRoZQo+ICsJICBTQlNBIEdlbmVyaWMgVUFSVCBpbXBsZW1lbnRzIGEgc3Vic2V0 IG9mIEFSTSBQTDAxMSBVQVJULgo+ICsKPiAgZW5kbWVudQo+Cj4gIG1lbnUgIkFSTSBlcnJhdGEg d29ya2Fyb3VuZCB2aWEgdGhlIGFsdGVybmF0aXZlIGZyYW1ld29yayIKPiBkaWZmIC0tZ2l0IGEv eGVuL2FyY2gvYXJtL01ha2VmaWxlIGIveGVuL2FyY2gvYXJtL01ha2VmaWxlCj4gaW5kZXggNDll MWZiMi4uZDljNmViZiAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiArKysg Yi94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiBAQCAtNTAsNiArNTAsNyBAQCBvYmotJChDT05GSUdf SEFTX0dJQ1YzKSArPSB2Z2ljLXYzLm8KPiAgb2JqLSQoQ09ORklHX0hBU19JVFMpICs9IHZnaWMt djMtaXRzLm8KPiAgb2JqLXkgKz0gdm1fZXZlbnQubwo+ICBvYmoteSArPSB2dGltZXIubwo+ICtv YmotJChDT05GSUdfU0JTQV9WVUFSVF9DT05TT0xFKSArPSB2cGwwMTEubwo+ICBvYmoteSArPSB2 cHNjaS5vCj4gIG9iai15ICs9IHZ1YXJ0Lm8KPgo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0v dnBsMDExLmMgYi94ZW4vYXJjaC9hcm0vdnBsMDExLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAuLmRiODY1MWMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2FyY2gv YXJtL3ZwbDAxMS5jCj4gQEAgLTAsMCArMSw0NDkgQEAKPiArLyoKPiArICogYXJjaC9hcm0vdnBs MDExLmMKPiArICoKPiArICogVmlydHVhbCBQTDAxMSBVQVJUCj4gKyAqCj4gKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0Cj4gKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UsCj4gKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKPiAr ICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVS Q0hBTlRBQklMSVRZIG9yCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKPiArICogbW9yZSBkZXRhaWxz Lgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCj4gKyAqIHRoaXMgcHJvZ3JhbTsgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo+ICsgKi8KPiArCj4gKyNp bmNsdWRlIDx4ZW4vZXJybm8uaD4KPiArI2luY2x1ZGUgPHhlbi9ldmVudC5oPgo+ICsjaW5jbHVk ZSA8eGVuL2d1ZXN0X2FjY2Vzcy5oPgo+ICsjaW5jbHVkZSA8eGVuL2luaXQuaD4KPiArI2luY2x1 ZGUgPHhlbi9saWIuaD4KPiArI2luY2x1ZGUgPHhlbi9tbS5oPgo+ICsjaW5jbHVkZSA8eGVuL3Nj aGVkLmg+Cj4gKyNpbmNsdWRlIDxwdWJsaWMvZG9tY3RsLmg+Cj4gKyNpbmNsdWRlIDxwdWJsaWMv aW8vY29uc29sZS5oPgo+ICsjaW5jbHVkZSA8YXNtLWFybS9wbDAxMS11YXJ0Lmg+Cj4gKyNpbmNs dWRlIDxhc20tYXJtL3ZnaWMtZW11bC5oPgoKRm9yIGJvdGgsIHlvdSBzaG91bGQgdXNlIGFzbS8g YW5kIG5vdCBhc20tYXJtLyBhcyB5b3UgZGlkIGJlbG93LgoKPiArI2luY2x1ZGUgPGFzbS92cGww MTEuaD4KPiArCj4gKy8qCj4gKyAqIFNpbmNlIHBsMDExIHJlZ2lzdGVycyBhcmUgMzItYml0IHJl Z2lzdGVycywgYWxsIHJlZ2lzdGVycwo+ICsgKiBhcmUgaGFuZGxlZCBzaW1pbGFybHkgYWxsb3dp bmcgOC1iaXQsIDE2LWJpdCBhbmQgMzItYml0Cj4gKyAqIGFjY2Vzc2VzIGV4Y2VwdCA2NC1iaXQg YWNjZXNzLgo+ICsgKi8KPiArc3RhdGljIGJvb2wgdnBsMDExX3JlZzMyX2NoZWNrX2FjY2Vzcyhz dHJ1Y3QgaHNyX2RhYnQgZGFidCkKPiArewo+ICsgICAgcmV0dXJuIChkYWJ0LnNpemUgIT0gREFC VF9ET1VCTEVfV09SRCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZwbDAxMV91cGRhdGVfaW50 ZXJydXB0X3N0YXR1cyhzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgdnBsMDEx ICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7Cj4gKyAgICB1aW50MzJfdCBpbnRlcnJ1cHRfc3Rh dHVzID0gdnBsMDExLT51YXJ0cmlzICYgdnBsMDExLT51YXJ0aW1zYzsKClRoaXMgZnVuY3Rpb24g aGFzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSB2dWFydCBsb2NrIHRha2VuLCByaWdodD8gSWYgc28s IApwbGVhc2UgZG9jdW1lbnQgaXQgYW5kIGFkZCBhbiBBU1NFUlQgdG8gY2hlY2sgdGhlIGxvY2sg aGFzIGJlZW4gdGFrZW4uCgo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBUT0RPOiBQTDAxMSBpbnRl cnJ1cHRzIGFyZSBsZXZlbCB0cmlnZ2VyZWQgd2hpY2ggbWVhbnMKPiArICAgICAqIHRoYXQgaW50 ZXJydXB0IG5lZWRzIHRvIGJlIHNldC9jbGVhciBpbnN0ZWFkIG9mIGJlaW5nCj4gKyAgICAgKiBp bmplY3RlZC4gSG93ZXZlciwgY3VycmVudGx5IHZHSUMgZG9lcyBub3QgaGFuZGxlIGxldmVsCj4g KyAgICAgKiB0cmlnZ2VyZWQgaW50ZXJydXB0cyBwcm9wZXJseS4gVGhpcyBmdW5jdGlvbiBuZWVk cyB0byBiZQo+ICsgICAgICogcmV2aXNpdGVkIG9uY2UgdkdJQyBzdGFydHMgaGFuZGxpbmcgbGV2 ZWwgdHJpZ2dlcmVkCj4gKyAgICAgKiBpbnRlcnJ1cHRzLgo+ICsgICAgICovCj4gKwo+ICsgICAg LyoKPiArICAgICAqIFJhaXNlIGFuIGludGVycnVwdCBvbmx5IGlmIGFueSBhZGRpdGlvbmFsIGlu dGVycnVwdAo+ICsgICAgICogc3RhdHVzIGJpdCBoYXMgYmVlbiBzZXQgc2luY2UgdGhlIGxhc3Qg dGltZS4KPiArICAgICAqLwo+ICsgICAgaWYgKCBpbnRlcnJ1cHRfc3RhdHVzICYgfnZwbDAxMS0+ c2hhZG93X3VhcnRyaXMgKQo+ICsgICAgICAgIHZnaWNfdmNwdV9pbmplY3Rfc3BpKGQsIEdVRVNU X1ZQTDAxMV9TUEkpOwo+ICsKPiArICAgIHZwbDAxMS0+c2hhZG93X3VhcnRyaXMgPSBpbnRlcnJ1 cHRfc3RhdHVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDhfdCB2cGwwMTFfcmVhZF9kYXRhKHN0 cnVjdCBkb21haW4gKmQpCj4gK3sKPiArICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKyAgICB1 aW50OF90IGRhdGEgPSAwOwo+ICsgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0gJmQtPmFyY2gu dnBsMDExOwo+ICsgICAgc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gdnBsMDExLT5y aW5nX2J1ZjsKPiArICAgIFhFTkNPTlNfUklOR19JRFggaW5fY29ucywgaW5fcHJvZDsKPiArCj4g KyAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4gKwo+ICsgICAgaW5fY29ucyA9IGludGYtPmlu X2NvbnM7Cj4gKyAgICBpbl9wcm9kID0gaW50Zi0+aW5fcHJvZDsKPiArCj4gKyAgICBzbXBfcm1i KCk7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlcmUgd2ls bCBiZSBkYXRhIGluIHRoZSByaW5nIGJ1ZmZlciB3aGVuIHRoaXMKPiArICAgICAqIGZ1bmN0aW9u IGlzIGNhbGxlZCBzaW5jZSB0aGUgZ3Vlc3QgaXMgZXhwZWN0ZWQgdG8gcmVhZCB0aGUgZGF0YSBy ZWdpc3Rlcgo+ICsgICAgICogb25seSBpZiB0aGUgVFhGRSBmbGFnIGlzIG5vdCBzZXQuCj4gKyAg ICAgKiBJZiB0aGUgZ3Vlc3Qgc3RpbGwgZG9lcyByZWFkIHdoZW4gVFhGRSBiaXQgaXMgc2V0IHRo ZW4gMCB3aWxsIGJlIHJldHVybmVkLgo+ICsgICAgICovCj4gKyAgICBpZiAoIHhlbmNvbnNfcXVl dWVkKGluX3Byb2QsIGluX2NvbnMsIHNpemVvZihpbnRmLT5pbikpID4gMCApCj4gKyAgICB7Cj4g KyAgICAgICAgZGF0YSA9IGludGYtPmluW3hlbmNvbnNfbWFzayhpbl9jb25zLCBzaXplb2YoaW50 Zi0+aW4pKV07Cj4gKyAgICAgICAgaW5fY29ucyArPSAxOwo+ICsgICAgICAgIHNtcF9tYigpOwo+ ICsgICAgICAgIGludGYtPmluX2NvbnMgPSBpbl9jb25zOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ ICsgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogVW5leHBlY3RlZCBJTiByaW5n IGJ1ZmZlciBlbXB0eVxuIik7Cj4gKwo+ICsgICAgaWYgKCB4ZW5jb25zX3F1ZXVlZChpbl9wcm9k LCBpbl9jb25zLCBzaXplb2YoaW50Zi0+aW4pKSA9PSAwICkKPiArICAgIHsKPiArICAgICAgICB2 cGwwMTEtPnVhcnRmciB8PSBSWEZFOwo+ICsgICAgICAgIHZwbDAxMS0+dWFydHJpcyAmPSB+UlhJ Owo+ICsgICAgfQo+ICsKPiArICAgIHZwbDAxMS0+dWFydGZyICY9IH5SWEZGOwo+ICsKPiArICAg IHZwbDAxMV91cGRhdGVfaW50ZXJydXB0X3N0YXR1cyhkKTsKPiArCj4gKyAgICBWUEwwMTFfVU5M T0NLKGQsIGZsYWdzKTsKPiArCj4gKyAgICAvKgo+ICsgICAgICogU2VuZCBhbiBldmVudCB0byBj b25zb2xlIGJhY2tlbmQgdG8gaW5kaWNhdGUgdGhhdCBkYXRhIGhhcyBiZWVuCj4gKyAgICAgKiBy ZWFkIGZyb20gdGhlIElOIHJpbmcgYnVmZmVyLgo+ICsgICAgICovCj4gKyAgICBub3RpZnlfdmlh X3hlbl9ldmVudF9jaGFubmVsKGQsIHZwbDAxMS0+ZXZ0Y2huKTsKPiArCj4gKyAgICByZXR1cm4g ZGF0YTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdnBsMDExX3dyaXRlX2RhdGEoc3RydWN0IGRv bWFpbiAqZCwgdWludDhfdCBkYXRhKQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ ICsgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0gJmQtPmFyY2gudnBsMDExOwo+ICsgICAgc3Ry dWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gdnBsMDExLT5yaW5nX2J1ZjsKPiArICAgIFhF TkNPTlNfUklOR19JRFggb3V0X2NvbnMsIG91dF9wcm9kOwo+ICsKPiArICAgIFZQTDAxMV9MT0NL KGQsIGZsYWdzKTsKPiArCj4gKyAgICBvdXRfY29ucyA9IGludGYtPm91dF9jb25zOwo+ICsgICAg b3V0X3Byb2QgPSBpbnRmLT5vdXRfcHJvZDsKPiArCj4gKyAgICBzbXBfcm1iKCk7Cj4gKwo+ICsg ICAgLyoKPiArICAgICAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIHJpbmcgaXMgbm90IGZ1bGwg d2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAo+ICsgICAgICogYXMgdGhlIGd1ZXN0IGlzIGV4 cGVjdGVkIHRvIHdyaXRlIHRvIHRoZSBkYXRhIHJlZ2lzdGVyIG9ubHkgd2hlbiB0aGUKPiArICAg ICAqIFRYRkYgZmxhZyBpcyBub3Qgc2V0Lgo+ICsgICAgICogSW4gY2FzZSB0aGUgZ3Vlc3QgZG9l cyB3cml0ZSBldmVuIHdoZW4gdGhlIFRYRkYgZmxhZyBpcyBzZXQgdGhlbiB0aGUKPiArICAgICAq IGRhdGEgd2lsbCBiZSBzaWxlbnRseSBkcm9wcGVkLgo+ICsgICAgICovCj4gKyAgICBpZiAoIHhl bmNvbnNfcXVldWVkKG91dF9wcm9kLCBvdXRfY29ucywgc2l6ZW9mKGludGYtPm91dCkpICE9Cj4g KyAgICAgICAgIHNpemVvZiAoaW50Zi0+b3V0KSApCj4gKyAgICB7Cj4gKyAgICAgICAgaW50Zi0+ b3V0W3hlbmNvbnNfbWFzayhvdXRfcHJvZCwgc2l6ZW9mKGludGYtPm91dCkpXSA9IGRhdGE7Cj4g KyAgICAgICAgb3V0X3Byb2QgKz0gMTsKPiArICAgICAgICBzbXBfd21iKCk7Cj4gKyAgICAgICAg aW50Zi0+b3V0X3Byb2QgPSBvdXRfcHJvZDsKPiArICAgIH0KPiArICAgIGVsc2UKPiArICAgICAg ICBncHJpbnRrKFhFTkxPR19FUlIsICJ2cGwwMTE6IFVuZXhwZWN0ZWQgT1VUIHJpbmcgYnVmZmVy IGZ1bGxcbiIpOwo+ICsKPiArICAgIGlmICggeGVuY29uc19xdWV1ZWQob3V0X3Byb2QsIG91dF9j b25zLCBzaXplb2YoaW50Zi0+b3V0KSkgPT0KPiArICAgICAgICAgc2l6ZW9mIChpbnRmLT5vdXQp ICkKPiArICAgIHsKPiArICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBUWEZGOwo+ICsgICAgICAg IHZwbDAxMS0+dWFydHJpcyAmPSB+VFhJOwo+ICsgICAgfQo+ICsKPiArICAgIHZwbDAxMS0+dWFy dGZyIHw9IEJVU1k7Cj4gKwo+ICsgICAgdnBsMDExLT51YXJ0ZnIgJj0gflRYRkU7Cj4gKwo+ICsg ICAgdnBsMDExX3VwZGF0ZV9pbnRlcnJ1cHRfc3RhdHVzKGQpOwo+ICsKPiArICAgIFZQTDAxMV9V TkxPQ0soZCwgZmxhZ3MpOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBTZW5kIGFuIGV2ZW50IHRv IGNvbnNvbGUgYmFja2VuZCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzCj4gKyAgICAgKiBkYXRh IGluIHRoZSBPVVQgcmluZyBidWZmZXIuCj4gKyAgICAgKi8KPiArICAgIG5vdGlmeV92aWFfeGVu X2V2ZW50X2NoYW5uZWwoZCwgdnBsMDExLT5ldnRjaG4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHZwbDAxMV9tbWlvX3JlYWQoc3RydWN0IHZjcHUgKnYsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtbWlvX2luZm9fdCAqaW5mbywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlZ2lzdGVyX3QgKnIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcml2 KQo+ICt7Cj4gKyAgICBzdHJ1Y3QgaHNyX2RhYnQgZGFidCA9IGluZm8tPmRhYnQ7Cj4gKyAgICB1 aW50MzJfdCB2cGwwMTFfcmVnID0gKHVpbnQzMl90KShpbmZvLT5ncGEgLSBHVUVTVF9QTDAxMV9C QVNFKTsKPiArICAgIHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZ2LT5kb21haW4tPmFyY2gudnBs MDExOwo+ICsgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKPiArICAgIHVuc2lnbmVk IGxvbmcgZmxhZ3M7Cj4gKwo+ICsgICAgc3dpdGNoICggdnBsMDExX3JlZyApCj4gKyAgICB7Cj4g KyAgICBjYXNlIERSOgo+ICsgICAgICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3Mo ZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKPiArCj4gKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4 dHJhY3QodnBsMDExX3JlYWRfZGF0YShkKSwgaW5mbyk7Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4g Kwo+ICsgICAgY2FzZSBSU1I6Cj4gKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2Fj Y2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ICsKPiArICAgICAgICAvKiBJdCBhbHdheXMg cmV0dXJucyAwIGFzIHRoZXJlIGFyZSBubyBwaHlzaWNhbCBlcnJvcnMuICovCj4gKyAgICAgICAg KnIgPSAwOwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIGNhc2UgRlI6Cj4gKyAgICAg ICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRo Owo+ICsKPiArICAgICAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4gKyAgICAgICAgKnIgPSB2 cmVnX3JlZzMyX2V4dHJhY3QodnBsMDExLT51YXJ0ZnIsIGluZm8pOwo+ICsgICAgICAgIFZQTDAx MV9VTkxPQ0soZCwgZmxhZ3MpOwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIGNhc2Ug UklTOgo+ICsgICAgICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBn b3RvIGJhZF93aWR0aDsKPiArCj4gKyAgICAgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOwo+ICsg ICAgICAgICpyID0gdnJlZ19yZWczMl9leHRyYWN0KHZwbDAxMS0+dWFydHJpcywgaW5mbyk7Cj4g KyAgICAgICAgVlBMMDExX1VOTE9DSyhkLCBmbGFncyk7Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4g Kwo+ICsgICAgY2FzZSBNSVM6Cj4gKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2Fj Y2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ICsKPiArICAgICAgICBWUEwwMTFfTE9DSyhk LCBmbGFncyk7Cj4gKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3QodnBsMDExLT51YXJ0 cmlzICYgdnBsMDExLT51YXJ0aW1zYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbmZvKTsKPiArICAgICAgICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKPiArICAgICAgICBy ZXR1cm4gMTsKPiArCj4gKyAgICBjYXNlIElNU0M6Cj4gKyAgICAgICAgaWYgKCAhdnBsMDExX3Jl ZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ICsKPiArICAgICAgICBW UEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4gKyAgICAgICAgKnIgPSB2cmVnX3JlZzMyX2V4dHJhY3Qo dnBsMDExLT51YXJ0aW1zYywgaW5mbyk7Cj4gKyAgICAgICAgVlBMMDExX1VOTE9DSyhkLCBmbGFn cyk7Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgY2FzZSBJQ1I6Cj4gKyAgICAgICAg aWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ ICsKPiArICAgICAgICAvKiBPbmx5IHdyaXRlIGlzIHZhbGlkLiAqLwo+ICsgICAgICAgIHJldHVy biAwOwo+ICsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAi dnBsMDExOiB1bmhhbmRsZWQgcmVhZCByJWQgb2Zmc2V0ICUjMDh4XG4iLAo+ICsgICAgICAgICAg ICAgICAgZGFidC5yZWcsIHZwbDAxMV9yZWcpOwo+ICsgICAgICAgIHJldHVybiAwOwo+ICsgICAg fQo+ICsKPiArICAgIHJldHVybiAxOwo+ICsKPiArYmFkX3dpZHRoOgo+ICsgICAgZ3ByaW50ayhY RU5MT0dfRVJSLCAidnBsMDExOiBiYWQgcmVhZCB3aWR0aCAlZCByJWQgb2Zmc2V0ICUjMDh4XG4i LAo+ICsgICAgICAgICAgICBkYWJ0LnNpemUsIGRhYnQucmVnLCB2cGwwMTFfcmVnKTsKPiArICAg IGRvbWFpbl9jcmFzaF9zeW5jaHJvbm91cygpOwo+ICsgICAgcmV0dXJuIDA7Cj4gKwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHZwbDAxMV9tbWlvX3dyaXRlKHN0cnVjdCB2Y3B1ICp2LAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1taW9faW5mb190ICppbmZvLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3QgciwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpwcml2KQo+ICt7Cj4gKyAgICBzdHJ1Y3QgaHNyX2RhYnQgZGFidCA9IGlu Zm8tPmRhYnQ7Cj4gKyAgICB1aW50MzJfdCB2cGwwMTFfcmVnID0gKHVpbnQzMl90KShpbmZvLT5n cGEgLSBHVUVTVF9QTDAxMV9CQVNFKTsKPiArICAgIHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZ2 LT5kb21haW4tPmFyY2gudnBsMDExOwo+ICsgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFp bjsKPiArICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsgICAgc3dpdGNoICggdnBsMDEx X3JlZyApCj4gKyAgICB7Cj4gKyAgICBjYXNlIERSOgo+ICsgICAgewo+ICsgICAgICAgIHVpbnQz Ml90IGRhdGEgPSAwOwo+ICsKPiArICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNj ZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7Cj4gKwo+ICsgICAgICAgIHZyZWdfcmVnMzJfdXBk YXRlKCZkYXRhLCByLCBpbmZvKTsKCkkgZGlzbGlrZSB0aGUgaWRlYSBvZiByZWx5aW5nIG9uIGlt cGxpY2l0IGNhc3QgYmV0d2VlbiBmdW5jdGlvbi4gVGhpcyBpcyAKYSBjYWxsIGZvciBlcnJvci4g UGxlYXNlIHJldGFpbiB0aGUgZGF0YSAmPSAweEZGIGhlcmUuCgo+ICsgICAgICAgIHZwbDAxMV93 cml0ZV9kYXRhKHYtPmRvbWFpbiwgZGF0YSk7Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKyAgICB9 CgpOSVQ6IG5ld2xpbmUgaGVyZS4KCj4gKyAgICBjYXNlIFJTUjogLyogTm90aGluZyB0byBjbGVh ci4gKi8KPiArICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkg Z290byBiYWRfd2lkdGg7Cj4gKwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIGNhc2Ug RlI6Cj4gKyAgICBjYXNlIFJJUzoKPiArICAgIGNhc2UgTUlTOgo+ICsgICAgICAgIGdvdG8gd3Jp dGVfaWdub3JlOwo+ICsKPiArICAgIGNhc2UgSU1TQzoKPiArICAgICAgICBpZiAoICF2cGwwMTFf cmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7Cj4gKwo+ICsgICAgICAg IFZQTDAxMV9MT0NLKGQsIGZsYWdzKTsKPiArICAgICAgICB2cmVnX3JlZzMyX3VwZGF0ZSgmdnBs MDExLT51YXJ0aW1zYywgciwgaW5mbyk7Cj4gKyAgICAgICAgdnBsMDExX3VwZGF0ZV9pbnRlcnJ1 cHRfc3RhdHVzKHYtPmRvbWFpbik7Cj4gKyAgICAgICAgVlBMMDExX1VOTE9DSyhkLCBmbGFncyk7 Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgY2FzZSBJQ1I6Cj4gKyAgICAgICAgaWYg KCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ICsK PiArICAgICAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4gKyAgICAgICAgdnJlZ19yZWczMl9j bGVhcmJpdHMoJnZwbDAxMS0+dWFydHJpcywgciwgaW5mbyk7Cj4gKyAgICAgICAgdnBsMDExX3Vw ZGF0ZV9pbnRlcnJ1cHRfc3RhdHVzKGQpOwo+ICsgICAgICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxh Z3MpOwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAg Z3ByaW50ayhYRU5MT0dfRVJSLCAidnBsMDExOiB1bmhhbmRsZWQgd3JpdGUgciVkIG9mZnNldCAl IzA4eFxuIiwKPiArICAgICAgICAgICAgICAgIGRhYnQucmVnLCB2cGwwMTFfcmVnKTsKPiArICAg ICAgICByZXR1cm4gMDsKPiArICAgIH0KPiArCj4gK3dyaXRlX2lnbm9yZToKPiArICAgIHJldHVy biAxOwo+ICsKPiArYmFkX3dpZHRoOgo+ICsgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAidnBsMDEx OiBiYWQgd3JpdGUgd2lkdGggJWQgciVkIG9mZnNldCAlIzA4eFxuIiwKPiArICAgICAgICAgICAg ZGFidC5zaXplLCBkYWJ0LnJlZywgdnBsMDExX3JlZyk7Cj4gKyAgICBkb21haW5fY3Jhc2hfc3lu Y2hyb25vdXMoKTsKPiArICAgIHJldHVybiAwOwo+ICsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBtbWlvX2hhbmRsZXJfb3BzIHZwbDAxMV9tbWlvX2hhbmRsZXIgPSB7Cj4gKyAgICAu cmVhZCA9IHZwbDAxMV9tbWlvX3JlYWQsCj4gKyAgICAud3JpdGUgPSB2cGwwMTFfbW1pb193cml0 ZSwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHZwbDAxMV9kYXRhX2F2YWlsKHN0cnVjdCBkb21h aW4gKmQpCj4gK3sKPiArICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKyAgICBzdHJ1Y3QgdnBs MDExICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7Cj4gKyAgICBzdHJ1Y3QgeGVuY29uc19pbnRl cmZhY2UgKmludGYgPSB2cGwwMTEtPnJpbmdfYnVmOwo+ICsgICAgWEVOQ09OU19SSU5HX0lEWCBp bl9jb25zLCBpbl9wcm9kLCBvdXRfY29ucywgb3V0X3Byb2Q7Cj4gKyAgICBYRU5DT05TX1JJTkdf SURYIGluX3JpbmdfcXNpemUsIG91dF9yaW5nX3FzaXplOwo+ICsKPiArICAgIFZQTDAxMV9MT0NL KGQsIGZsYWdzKTsKPiArCj4gKyAgICBpbl9jb25zID0gaW50Zi0+aW5fY29uczsKPiArICAgIGlu X3Byb2QgPSBpbnRmLT5pbl9wcm9kOwo+ICsgICAgb3V0X2NvbnMgPSBpbnRmLT5vdXRfY29uczsK PiArICAgIG91dF9wcm9kID0gaW50Zi0+b3V0X3Byb2Q7Cj4gKwo+ICsgICAgc21wX3JtYigpOwo+ ICsKPiArICAgIGluX3JpbmdfcXNpemUgPSB4ZW5jb25zX3F1ZXVlZChpbl9wcm9kLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2NvbnMsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGludGYtPmluKSk7Cj4gKwo+ICsgICAgb3V0X3Jp bmdfcXNpemUgPSB4ZW5jb25zX3F1ZXVlZChvdXRfcHJvZCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb3V0X2NvbnMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVvZihpbnRmLT5vdXQpKTsKPiArCj4gKyAgICAvKiBVcGRhdGUgdGhlIHVh cnQgcnggc3RhdGUgaWYgdGhlIGJ1ZmZlciBpcyBub3QgZW1wdHkuICovCj4gKyAgICBpZiAoIGlu X3JpbmdfcXNpemUgIT0gMCApCj4gKyAgICB7Cj4gKyAgICAgICAgdnBsMDExLT51YXJ0ZnIgJj0g flJYRkU7Cj4gKyAgICAgICAgaWYgKCBpbl9yaW5nX3FzaXplID09IHNpemVvZihpbnRmLT5pbikg KQo+ICsgICAgICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBSWEZGOwo+ICsgICAgICAgIHZwbDAx MS0+dWFydHJpcyB8PSBSWEk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogVXBkYXRlIHRoZSB1YXJ0 IHR4IHN0YXRlIGlmIHRoZSBidWZmZXIgaXMgbm90IGZ1bGwuICovCj4gKyAgICBpZiAoIG91dF9y aW5nX3FzaXplICE9IHNpemVvZihpbnRmLT5vdXQpICkKPiArICAgIHsKPiArICAgICAgICB2cGww MTEtPnVhcnRmciAmPSB+VFhGRjsKPiArICAgICAgICB2cGwwMTEtPnVhcnRyaXMgfD0gVFhJOwo+ ICsgICAgICAgIGlmICggb3V0X3JpbmdfcXNpemUgPT0gMCApCj4gKyAgICAgICAgewo+ICsgICAg ICAgICAgICB2cGwwMTEtPnVhcnRmciAmPSB+QlVTWTsKPiArICAgICAgICAgICAgdnBsMDExLT51 YXJ0ZnIgfD0gVFhGRTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgdnBsMDExX3Vw ZGF0ZV9pbnRlcnJ1cHRfc3RhdHVzKGQpOwo+ICsKPiArICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxh Z3MpOwo+ICt9Cj4gKwo+ICsKCk5JVDogT25lIG5ld2xpbmUgaXMgZW5vdWdoLiBQbGVhc2UgZHJv cCBvbmUuCgo+ICtzdGF0aWMgdm9pZCB2cGwwMTFfbm90aWZpY2F0aW9uKHN0cnVjdCB2Y3B1ICp2 LCB1bnNpZ25lZCBpbnQgcG9ydCkKPiArewo+ICsgICAgdnBsMDExX2RhdGFfYXZhaWwodi0+ZG9t YWluKTsKPiArfQo+ICsKPiAraW50IGRvbWFpbl92cGwwMTFfaW5pdChzdHJ1Y3QgZG9tYWluICpk LCBzdHJ1Y3QgdnBsMDExX2luaXRfaW5mbyAqaW5mbykKPiArewo+ICsgICAgaW50IHJjOwo+ICsg ICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0gJmQtPmFyY2gudnBsMDExOwo+ICsKPiArICAgIGlm ICggdnBsMDExLT5yaW5nX2J1ZiApCj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsg ICAgLyogTWFwIHRoZSBndWVzdCBQRk4gdG8gWGVuIGFkZHJlc3Mgc3BhY2UuICovCj4gKyAgICBy YyA9ICBwcmVwYXJlX3JpbmdfZm9yX2hlbHBlcihkLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2ZuX3goaW5mby0+Z2ZuKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZ2cGwwMTEtPnJpbmdfcGFnZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZ2cGwwMTEtPnJpbmdfYnVmKTsKPiArICAgIGlmICggcmMgPCAwICkKPiArICAg ICAgICBnb3RvIG91dDsKPiArCj4gKyAgICByYyA9IHZnaWNfcmVzZXJ2ZV92aXJxKGQsIEdVRVNU X1ZQTDAxMV9TUEkpOwo+ICsgICAgaWYgKCAhcmMgKQo+ICsgICAgewo+ICsgICAgICAgIHJjID0g LUVJTlZBTDsKPiArICAgICAgICBnb3RvIG91dDE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmMgPSBh bGxvY191bmJvdW5kX3hlbl9ldmVudF9jaGFubmVsKGQsIDAsIGluZm8tPmNvbnNvbGVfZG9taWQs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnBsMDExX25vdGlm aWNhdGlvbik7Cj4gKyAgICBpZiAoIHJjIDwgMCApCj4gKyAgICAgICAgZ290byBvdXQyOwo+ICsK PiArICAgIHZwbDAxMS0+ZXZ0Y2huID0gaW5mby0+ZXZ0Y2huID0gcmM7Cj4gKwo+ICsgICAgc3Bp bl9sb2NrX2luaXQoJnZwbDAxMS0+bG9jayk7Cj4gKwo+ICsgICAgcmVnaXN0ZXJfbW1pb19oYW5k bGVyKGQsICZ2cGwwMTFfbW1pb19oYW5kbGVyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IEdVRVNUX1BMMDExX0JBU0UsIEdVRVNUX1BMMDExX1NJWkUsIE5VTEwpOwo+ICsKPiArICAgIHJl dHVybiAwOwo+ICsKPiArb3V0MjoKPiArICAgIHZnaWNfZnJlZV92aXJxKGQsIEdVRVNUX1ZQTDAx MV9TUEkpOwo+ICsKPiArb3V0MToKPiArICAgIGRlc3Ryb3lfcmluZ19mb3JfaGVscGVyKCZ2cGww MTEtPnJpbmdfYnVmLCB2cGwwMTEtPnJpbmdfcGFnZSk7Cj4gKwo+ICtvdXQ6Cj4gKyAgICByZXR1 cm4gcmM7Cj4gK30KPiArCj4gK3ZvaWQgZG9tYWluX3ZwbDAxMV9kZWluaXQoc3RydWN0IGRvbWFp biAqZCkKPiArewo+ICsgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0gJmQtPmFyY2gudnBsMDEx Owo+ICsKPiArICAgIGlmICggIXZwbDAxMS0+cmluZ19idWYgKQo+ICsgICAgICAgIHJldHVybjsK PiArCj4gKyAgICBmcmVlX3hlbl9ldmVudF9jaGFubmVsKGQsIHZwbDAxMS0+ZXZ0Y2huKTsKPiAr ICAgIGRlc3Ryb3lfcmluZ19mb3JfaGVscGVyKCZ2cGwwMTEtPnJpbmdfYnVmLCB2cGwwMTEtPnJp bmdfcGFnZSk7Cj4gKyAgICB4ZnJlZShkLT5hcmNoLnZtbWlvLmhhbmRsZXJzKTsKPiArfQo+ICsK PiArLyoKPiArICogTG9jYWwgdmFyaWFibGVzOgo+ICsgKiBtb2RlOiBDCj4gKyAqIGMtZmlsZS1z dHlsZTogIkJTRCIKPiArICogYy1iYXNpYy1vZmZzZXQ6IDQKPiArICogaW5kZW50LXRhYnMtbW9k ZTogbmlsCj4gKyAqIEVuZDoKPiArICovCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1h cm0vZG9tYWluLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oCj4gaW5kZXggOGRmYzFk MS4uMWExMTQ1ZCAxMDA2NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oCj4g KysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS9kb21haW4uaAo+IEBAIC0xMSw2ICsxMSw3IEBACj4g ICNpbmNsdWRlIDxwdWJsaWMvaHZtL3BhcmFtcy5oPgo+ICAjaW5jbHVkZSA8eGVuL3NlcmlhbC5o Pgo+ICAjaW5jbHVkZSA8eGVuL3JidHJlZS5oPgo+ICsjaW5jbHVkZSA8YXNtLWFybS92cGwwMTEu aD4KPgo+ICBzdHJ1Y3QgaHZtX2RvbWFpbgo+ICB7Cj4gQEAgLTE0NSw2ICsxNDYsMTEgQEAgc3Ry dWN0IGFyY2hfZG9tYWluCj4gICAgICBzdHJ1Y3Qgewo+ICAgICAgICAgIHVpbnQ4X3QgcHJpdmls ZWdlZF9jYWxsX2VuYWJsZWQgOiAxOwo+ICAgICAgfSBtb25pdG9yOwo+ICsKPiArI2lmZGVmIENP TkZJR19TQlNBX1ZVQVJUX0NPTlNPTEUKPiArICAgIHN0cnVjdCB2cGwwMTEgdnBsMDExOwo+ICsj ZW5kaWYKPiArCj4gIH0gIF9fY2FjaGVsaW5lX2FsaWduZWQ7Cj4KPiAgc3RydWN0IGFyY2hfdmNw dQo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL3BsMDExLXVhcnQuaCBiL3hlbi9p bmNsdWRlL2FzbS1hcm0vcGwwMTEtdWFydC5oCj4gaW5kZXggMTIzZjQ3Ny4uNTdlOWVjNyAxMDA2 NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL3BsMDExLXVhcnQuaAo+ICsrKyBiL3hlbi9p bmNsdWRlL2FzbS1hcm0vcGwwMTEtdWFydC5oCj4gQEAgLTQ5LDYgKzQ5LDggQEAKPiAgLyogRlIg Yml0cyAqLwo+ICAjZGVmaW5lIFRYRkUgICAoMTw8NykgLyogVFggRklGTyBlbXB0eSAqLwo+ICAj ZGVmaW5lIFJYRkUgICAoMTw8NCkgLyogUlggRklGTyBlbXB0eSAqLwo+ICsjZGVmaW5lIFRYRkYg ICAoMTw8NSkgLyogVFggRklGTyBmdWxsICovCj4gKyNkZWZpbmUgUlhGRiAgICgxPDw2KSAvKiBS WCBGSUZPIGZ1bGwgKi8KPiAgI2RlZmluZSBCVVNZICAgKDE8PDMpIC8qIFRyYW5zbWl0IGlzIG5v dCBjb21wbGV0ZSAqLwo+Cj4gIC8qIExDUl9IIGJpdHMgKi8KPiBkaWZmIC0tZ2l0IGEveGVuL2lu Y2x1ZGUvYXNtLWFybS92cGwwMTEuaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vdnBsMDExLmgKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmYxYzY3MTYKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS92cGwwMTEuaAo+IEBAIC0wLDAgKzEsNzMg QEAKPiArLyoKPiArICogaW5jbHVkZS94ZW4vdnBsMDExLmgKPiArICoKPiArICogVmlydHVhbCBQ TDAxMSBVQVJUCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4gKyAqIHVuZGVyIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCj4gKyAq IHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKPiArICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCj4gKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IKPiArICogbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9u ZyB3aXRoCj4gKyAqIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+Lgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX1ZQTDAxMV9IXwo+ICsjZGVmaW5l IF9WUEwwMTFfSF8KPiArCj4gKyNpbmNsdWRlIDxwdWJsaWMvZG9tY3RsLmg+Cj4gKyNpbmNsdWRl IDxwdWJsaWMvaW8vcmluZy5oPgo+ICsjaW5jbHVkZSA8YXNtLWFybS92cmVnLmg+CgojaW5jbHVk ZSA8YXNtL3ZyZWcuaD4KCj4gKyNpbmNsdWRlIDx4ZW4vbW0uaD4KPiArCj4gKy8qIGhlbHBlciBt YWNyb3MgKi8KPiArI2RlZmluZSBWUEwwMTFfTE9DSyhkLGZsYWdzKSBzcGluX2xvY2tfaXJxc2F2 ZSgmKGQpLT5hcmNoLnZwbDAxMS5sb2NrLCBmbGFncykKPiArI2RlZmluZSBWUEwwMTFfVU5MT0NL KGQsZmxhZ3MpIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihkKS0+YXJjaC52cGwwMTEubG9jaywg ZmxhZ3MpCj4gKwo+ICtzdHJ1Y3QgdnBsMDExIHsKPiArICAgIHZvaWQgKnJpbmdfYnVmOwo+ICsg ICAgc3RydWN0IHBhZ2VfaW5mbyAqcmluZ19wYWdlOwo+ICsgICAgdWludDMyX3QgICAgdWFydGZy OyAgICAgICAgIC8qIEZsYWcgcmVnaXN0ZXIgKi8KPiArICAgIHVpbnQzMl90ICAgIHVhcnRjcjsg ICAgICAgICAvKiBDb250cm9sIHJlZ2lzdGVyICovCj4gKyAgICB1aW50MzJfdCAgICB1YXJ0aW1z YzsgICAgICAgLyogSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIqLwo+ICsgICAgdWludDMyX3QgICAg dWFydGljcjsgICAgICAgIC8qIEludGVycnVwdCBjbGVhciByZWdpc3RlciAqLwo+ICsgICAgdWlu dDMyX3QgICAgdWFydHJpczsgICAgICAgIC8qIFJhdyBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVy ICovCj4gKyAgICB1aW50MzJfdCAgICBzaGFkb3dfdWFydHJpczsgLyogc2hhZG93ZWQgUmF3IGlu dGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KCkkgdGhpbmsgdGhpcyBjb21tZW50IGlzIHdyb25n IGFuZCB0aGUgbmFtZS4gWW91IGRvbid0IHN0b3JlIHVhcnRyaXMgYnV0IAp1YXJ0aXMgJiB1YXJ0 aW1zYy4KCj4gKyAgICB1aW50MzJfdCAgICB1YXJ0bWlzOyAgICAgICAgLyogTWFza2VkIGludGVy cnVwdCByZWdpc3RlciAqLwoKPiArICAgIHNwaW5sb2NrX3QgIGxvY2s7Cj4gKyAgICBldnRjaG5f cG9ydF90IGV2dGNobjsKPiArfTsKPiArCj4gK3N0cnVjdCB2cGwwMTFfaW5pdF9pbmZvIHsKPiAr ICAgIHVpbnQzMl90IGNvbnNvbGVfZG9taWQ7Cj4gKyAgICBnZm5fdCBnZm47Cj4gKyAgICBldnRj aG5fcG9ydF90IGV2dGNobjsKPiArfTsKPiArCj4gKyNpZmRlZiBDT05GSUdfU0JTQV9WVUFSVF9D T05TT0xFCj4gK2ludCBkb21haW5fdnBsMDExX2luaXQoc3RydWN0IGRvbWFpbiAqZCwKPiArICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnBsMDExX2luaXRfaW5mbyAqaW5mbyk7Cj4gK3Zv aWQgZG9tYWluX3ZwbDAxMV9kZWluaXQoc3RydWN0IGRvbWFpbiAqZCk7Cj4gKyNlbHNlCj4gK3N0 YXRpYyBpbmxpbmUgaW50IGRvbWFpbl92cGwwMTFfaW5pdChzdHJ1Y3QgZG9tYWluICpkLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwbDAxMV9pbml0X2lu Zm8gKmluZm8pCj4gK3sKPiArICAgIHJldHVybiAtRU5PU1lTOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW5saW5lIHZvaWQgZG9tYWluX3ZwbDAxMV9kZWluaXQoc3RydWN0IGRvbWFpbiAqZCkgeyB9Cj4g KyNlbmRpZgo+ICsjZW5kaWYKCk5JVDogI2VuZGlmIC8qIF9WUEwwMTFfSF8gKi8KCj4gKwo+ICsv Kgo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6Cj4gKyAqIG1vZGU6IEMKPiArICogYy1maWxlLXN0eWxl OiAiQlNEIgo+ICsgKiBjLWJhc2ljLW9mZnNldDogNAo+ICsgKiBpbmRlbnQtdGFicy1tb2RlOiBu aWwKPiArICogRW5kOgo+ICsgKi8KPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvcHVibGljL2Fy Y2gtYXJtLmggYi94ZW4vaW5jbHVkZS9wdWJsaWMvYXJjaC1hcm0uaAo+IGluZGV4IGJkOTc0ZmIu Ljg1YWI2NjUgMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUvcHVibGljL2FyY2gtYXJtLmgKPiAr KysgYi94ZW4vaW5jbHVkZS9wdWJsaWMvYXJjaC1hcm0uaAo+IEBAIC00MTAsNiArNDEwLDEwIEBA IHR5cGVkZWYgdWludDY0X3QgeGVuX2NhbGxiYWNrX3Q7Cj4gICNkZWZpbmUgR1VFU1RfQUNQSV9C QVNFIDB4MjAwMDAwMDBVTEwKPiAgI2RlZmluZSBHVUVTVF9BQ1BJX1NJWkUgMHgwMjAwMDAwMFVM TAo+Cj4gKy8qIFBMMDExIG1hcHBpbmdzICovCj4gKyNkZWZpbmUgR1VFU1RfUEwwMTFfQkFTRSAg ICAweDIyMDAwMDAwVUxMCj4gKyNkZWZpbmUgR1VFU1RfUEwwMTFfU0laRSAgICAweDAwMDAxMDAw VUxMCj4gKwo+ICAvKgo+ICAgKiAxNk1CID09IDQwOTYgcGFnZXMgcmVzZXJ2ZWQgZm9yIGd1ZXN0 IHRvIHVzZSBhcyBhIHJlZ2lvbiB0byBtYXAgaXRzCj4gICAqIGdyYW50IHRhYmxlIGluLgo+IEBA IC00NDQsNiArNDQ4LDggQEAgdHlwZWRlZiB1aW50NjRfdCB4ZW5fY2FsbGJhY2tfdDsKPiAgI2Rl ZmluZSBHVUVTVF9USU1FUl9QSFlTX05TX1BQSSAzMAo+ICAjZGVmaW5lIEdVRVNUX0VWVENITl9Q UEkgICAgICAgIDMxCj4KPiArI2RlZmluZSBHVUVTVF9WUEwwMTFfU1BJICAgICAgICAzMgo+ICsK PiAgLyogUFNDSSBmdW5jdGlvbnMgKi8KPiAgI2RlZmluZSBQU0NJX2NwdV9zdXNwZW5kIDAKPiAg I2RlZmluZSBQU0NJX2NwdV9vZmYgICAgIDEKPgoKQ2hlZXJzLAoKLS0gCkp1bGllbiBHcmFsbAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg==