From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v1] dma: imx-sdma: add virt-dma support From: Robin Gong Message-Id: <1527099973.3990.37.camel@nxp.com> Date: Wed, 23 May 2018 10:26:23 +0000 To: "s.hauer@pengutronix.de" Cc: "dan.j.williams@intel.com" , "dmaengine@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "vinod.koul@intel.com" , dl-linux-imx List-ID: T24g5LqMLCAyMDE4LTA1LTIyIGF0IDEyOjA5ICswMjAwLCBTYXNjaGEgSGF1ZXIgd3JvdGU6DQo+ IEhpIFJvYmluLA0KPiANCj4gU2V2ZXJhbCBjb21tZW50cyBpbnNpZGUuDQo+IA0KPiBTYXNjaGEN Cj4gDQo+IE9uIEZyaSwgTWFyIDIzLCAyMDE4IGF0IDEyOjE4OjE5QU0gKzA4MDAsIFJvYmluIEdv bmcgd3JvdGU6DQo+ID4gDQo+ID4gVGhlIGxlZ2FjeSBzZG1hIGRyaXZlciBoYXMgYmVsb3cgbGlt aXRhdGlvbnMgb3IgZHJhd2JhY2tzOg0KPiA+IMKgIDEuIEhhcmRjb2RlIHRoZSBtYXggQkRzIG51 bWJlciBhcyAiUEFHRV9TSVpFIC8gc2l6ZW9mKCopIiwgYW5kDQo+ID4gYWxsb2MNCj4gPiDCoMKg wqDCoMKgb25lIHBhZ2Ugc2l6ZSBmb3Igb25lIGNoYW5uZWwgcmVnYXJkbGVzcyBvZiBvbmx5IGZl dyBCRHMNCj4gPiBuZWVkZWQNCj4gPiDCoMKgwqDCoMKgbW9zdCB0aW1lLiBCdXQgaW4gZmV3IGNh c2VzLCB0aGUgbWF4IFBBR0VfU0laRSBtYXliZSBub3QNCj4gPiBlbm91Z2guDQo+ID4gwqAgMi4g T25lIFNETUEgY2hhbm5lbCBjYW4ndCBzdG9wIGltbWVkaWF0bGV5IG9uY2UgY2hhbm5lbCBkaXNh YmxlZA0KPiA+IHdoaWNoDQo+ID4gwqDCoMKgwqDCoG1lYW5zIFNETUEgaW50ZXJydXB0IG1heSBj b21lIGluIGFmdGVyIHRoaXMgY2hhbm5lbA0KPiA+IHRlcm1pbmF0ZWQuVGhlcmUNCj4gPiDCoMKg wqDCoMKgYXJlIHNvbWUgcGF0Y2hlcyBmb3IgdGhpcyBjb3JuZXIgY2FzZSBzdWNoIGFzIGNvbW1p dA0KPiA+ICIyNzQ2ZTJjMzg5ZjkiLA0KPiA+IMKgwqDCoMKgwqBidXQgbm90IGNvdmVyIG5vbi1j eWNsaWMuDQo+ID4gDQo+ID4gVGhlIGNvbW1vbiB2aXJ0LWRtYSBvdmVyY29tZXMgdGhlIGFib3Zl IGxpbWl0YXRpb25zLiBJdCBjYW4gYWxsb2MNCj4gPiBiZA0KPiA+IGR5bmFtaWNhbGx5IGFuZCBm cmVlIGJkIG9uY2UgdGhpcyB0eCB0cmFuc2ZlciBkb25lLiBObyBtZW1vcnkNCj4gPiB3YXN0ZWQg b3INCj4gPiBtYXhpbXVtIGxpbWl0aXRhdGlvbiBoZXJlLCBvbmx5IGRlcGVuZHMgb24gaG93IG1h bnkgbWVtb3J5IGNhbiBiZQ0KPiA+IHJlcXVlc3RlZA0KPiA+IGZyb20ga2VybmVsLiBGb3IgTm8u Miwgc3VjaCBpc3N1ZSBjYW4gYmUgd29ya2Fyb3VuZCBieSBjaGVja2luZyBpZg0KPiA+IHRoZXJl DQo+ID4gaXMgYXZhaWxhYmxlIGRlc2NyaXB0KCJzZG1hYy0+ZGVzYyIpIG5vdyBvbmNlIHRoZSB1 bndhbnRlZA0KPiA+IGludGVycnVwdA0KPiA+IGNvbWluZy4gQXQgbGFzdCB0aGUgY29tbW9uIHZp cnQtZG1hIGlzIGVhc2llciBmb3Igc2RtYSBkcml2ZXINCj4gPiBtYWludGFpbi4NCj4gPiANCj4g PiBTaWduZWQtb2ZmLWJ5OiBSb2JpbiBHb25nIDx5aWJpbi5nb25nQG54cC5jb20+DQo+ID4gLS0t DQo+ID4gwqBkcml2ZXJzL2RtYS9LY29uZmlnwqDCoMKgwqB8wqDCoMKgMSArDQo+ID4gwqBkcml2 ZXJzL2RtYS9pbXgtc2RtYS5jIHwgMzk1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tDQo+ID4gLS0tLS0tLS0tLS0tLS0NCj4gPiDCoDIgZmlsZXMgY2hhbmdlZCwgMjUzIGluc2Vy dGlvbnMoKyksIDE0MyBkZWxldGlvbnMoLSkNCj4gPiANCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9kbWEvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL0tjb25maWcNCj4gPiBpbmRleCAyN2RmM2UyLi5j NGNlNDNjIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvZG1hL0tjb25maWcNCj4gPiArKysgYi9k cml2ZXJzL2RtYS9LY29uZmlnDQo+ID4gQEAgLTI0Nyw2ICsyNDcsNyBAQCBjb25maWcgSU1YX1NE TUENCj4gPiDCoAl0cmlzdGF0ZSAiaS5NWCBTRE1BIHN1cHBvcnQiDQo+ID4gwqAJZGVwZW5kcyBv biBBUkNIX01YQw0KPiA+IMKgCXNlbGVjdCBETUFfRU5HSU5FDQo+ID4gKwlzZWxlY3QgRE1BX1ZJ UlRVQUxfQ0hBTk5FTFMNCj4gPiDCoAloZWxwDQo+ID4gwqAJwqDCoFN1cHBvcnQgdGhlIGkuTVgg U0RNQSBlbmdpbmUuIFRoaXMgZW5naW5lIGlzIGludGVncmF0ZWQNCj4gPiBpbnRvDQo+ID4gwqAJ wqDCoEZyZWVzY2FsZSBpLk1YMjUvMzEvMzUvNTEvNTMvNiBjaGlwcy4NCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9kbWEvaW14LXNkbWEuYyBiL2RyaXZlcnMvZG1hL2lteC1zZG1hLmMNCj4gPiBp bmRleCBjY2QwM2MzLi5kZjc5ZTczIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvZG1hL2lteC1z ZG1hLmMNCj4gPiArKysgYi9kcml2ZXJzL2RtYS9pbXgtc2RtYS5jDQo+ID4gQEAgLTQ4LDYgKzQ4 LDcgQEANCj4gPiDCoCNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIu aD4NCj4gPiDCoA0KPiA+IMKgI2luY2x1ZGUgImRtYWVuZ2luZS5oIg0KPiA+ICsjaW5jbHVkZSAi dmlydC1kbWEuaCINCj4gPiDCoA0KPiA+IMKgLyogU0RNQSByZWdpc3RlcnMgKi8NCj4gPiDCoCNk ZWZpbmUgU0RNQV9IX0MwUFRSCQkweDAwMA0KPiA+IEBAIC0yOTEsMTAgKzI5MiwxOSBAQCBzdHJ1 Y3Qgc2RtYV9jb250ZXh0X2RhdGEgew0KPiA+IMKgCXUzMsKgwqBzY3JhdGNoNzsNCj4gPiDCoH0g X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOw0KPiA+IMKgDQo+ID4gLSNkZWZpbmUgTlVNX0JEIChp bnQpKFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QNCj4gPiBzZG1hX2J1ZmZlcl9kZXNjcmlwdG9y KSkNCj4gPiAtDQo+ID4gwqBzdHJ1Y3Qgc2RtYV9lbmdpbmU7DQo+ID4gwqANCj4gPiArc3RydWN0 IHNkbWFfZGVzYyB7DQo+ID4gKwlzdHJ1Y3QgdmlydF9kbWFfZGVzYwl2ZDsNCj4gPiArCXN0cnVj dCBsaXN0X2hlYWQJbm9kZTsNCj4gPiArCXVuc2lnbmVkIGludAkJbnVtX2JkOw0KPiA+ICsJZG1h X2FkZHJfdAkJYmRfcGh5czsNCj4gPiArCXVuc2lnbmVkIGludAkJYnVmX3RhaWw7DQo+ID4gKwl1 bnNpZ25lZCBpbnQJCWJ1Zl9wdGFpbDsNCj4gPiArCXN0cnVjdCBzZG1hX2NoYW5uZWwJKnNkbWFj Ow0KPiA+ICsJc3RydWN0IHNkbWFfYnVmZmVyX2Rlc2NyaXB0b3IgKmJkOw0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiDCoC8qKg0KPiA+IMKgICogc3RydWN0IHNkbWFfY2hhbm5lbCAtIGhvdXNla2VlcGlu ZyBmb3IgYSBTRE1BIGNoYW5uZWwNCj4gPiDCoCAqDQo+ID4gQEAgLTMxMCwxOSArMzIwLDE3IEBA IHN0cnVjdCBzZG1hX2VuZ2luZTsNCj4gPiDCoCAqIEBudW1fYmQJCW1heCBOVU1fQkQuIG51bWJl ciBvZiBkZXNjcmlwdG9ycw0KPiA+IGN1cnJlbnRseSBoYW5kbGluZw0KPiA+IMKgICovDQo+ID4g wqBzdHJ1Y3Qgc2RtYV9jaGFubmVsIHsNCj4gPiArCXN0cnVjdCB2aXJ0X2RtYV9jaGFuCQl2YzsN Cj4gPiArCXN0cnVjdCBsaXN0X2hlYWQJCXBlbmRpbmc7DQo+ID4gwqAJc3RydWN0IHNkbWFfZW5n aW5lCQkqc2RtYTsNCj4gPiArCXN0cnVjdCBzZG1hX2Rlc2MJCSpkZXNjOw0KPiA+IMKgCXVuc2ln bmVkIGludAkJCWNoYW5uZWw7DQo+ID4gwqAJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uCQlk aXJlY3Rpb247DQo+ID4gwqAJZW51bSBzZG1hX3BlcmlwaGVyYWxfdHlwZQlwZXJpcGhlcmFsX3R5 cGU7DQo+ID4gwqAJdW5zaWduZWQgaW50CQkJZXZlbnRfaWQwOw0KPiA+IMKgCXVuc2lnbmVkIGlu dAkJCWV2ZW50X2lkMTsNCj4gPiDCoAllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aAkJd29yZF9zaXpl Ow0KPiA+IC0JdW5zaWduZWQgaW50CQkJYnVmX3RhaWw7DQo+ID4gLQl1bnNpZ25lZCBpbnQJCQli dWZfcHRhaWw7DQo+ID4gLQl1bnNpZ25lZCBpbnQJCQludW1fYmQ7DQo+ID4gwqAJdW5zaWduZWQg aW50CQkJcGVyaW9kX2xlbjsNCj4gPiAtCXN0cnVjdCBzZG1hX2J1ZmZlcl9kZXNjcmlwdG9yCSpi ZDsNCj4gPiAtCWRtYV9hZGRyX3QJCQliZF9waHlzOw0KPiA+IMKgCXVuc2lnbmVkIGludAkJCXBj X2Zyb21fZGV2aWNlLA0KPiA+IHBjX3RvX2RldmljZTsNCj4gPiDCoAl1bnNpZ25lZCBpbnQJCQlk ZXZpY2VfdG9fZGV2aWNlOw0KPiA+IMKgCXVuc2lnbmVkIGxvbmcJCQlmbGFnczsNCj4gPiBAQCAt MzMwLDE1ICszMzgsMTIgQEAgc3RydWN0IHNkbWFfY2hhbm5lbCB7DQo+ID4gwqAJdW5zaWduZWQg bG9uZwkJCWV2ZW50X21hc2tbMl07DQo+ID4gwqAJdW5zaWduZWQgbG9uZwkJCXdhdGVybWFya19s ZXZlbDsNCj4gPiDCoAl1MzIJCQkJc2hwX2FkZHIsIHBlcl9hZGRyOw0KPiA+IC0Jc3RydWN0IGRt YV9jaGFuCQkJY2hhbjsNCj4gPiAtCXNwaW5sb2NrX3QJCQlsb2NrOw0KPiA+IC0Jc3RydWN0IGRt YV9hc3luY190eF9kZXNjcmlwdG9yCWRlc2M7DQo+ID4gwqAJZW51bSBkbWFfc3RhdHVzCQkJc3Rh dHVzOw0KPiA+IMKgCXVuc2lnbmVkIGludAkJCWNobl9jb3VudDsNCj4gPiDCoAl1bnNpZ25lZCBp bnQJCQljaG5fcmVhbF9jb3VudDsNCj4gPiAtCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAkJdGFza2xl dDsNCj4gPiDCoAlzdHJ1Y3QgaW14X2RtYV9kYXRhCQlkYXRhOw0KPiA+IMKgCWJvb2wJCQkJZW5h YmxlZDsNCj4gVXNhZ2Ugb2YgdGhpcyB2YXJpYWJsZSBpcyByZW1vdmVkIGluIHRoaXMgcGF0Y2gs IGJ1dCBub3QgdGhlIHZhcmlhYmxlDQo+IGl0c2VsZi4NClllcywgd2lsbCByZW1vdmUgdGhlIHVz bGVzcyAnZW5hYmxlZCcgaW4gdjIuDQo+IA0KPiA+IA0KPiA+ICsJdTMyCQkJCWJkX3NpemVfc3Vt Ow0KPiBUaGlzIHZhcmlhYmxlIGlzIG5ldmVyIHVzZWQgZm9yIGFueXRoaW5nLg0KWWVzLCBpdCdz IG5vdCBmb3Igc2lnbmlmaWNhdGl2ZSB1c2UgYnV0IGRlYnVnIHRvIHNlZSBob3cgbWFueSBjdXJy ZW50DQpiZHMgdXNlZC4NCj4gDQo+ID4gDQo+ID4gwqB9Ow0KPiA+IMKgDQo+ID4gwqAjZGVmaW5l IElNWF9ETUFfU0dfTE9PUAkJQklUKDApDQo+ID4gQEAgLTM5OCw2ICs0MDMsOSBAQCBzdHJ1Y3Qg c2RtYV9lbmdpbmUgew0KPiA+IMKgCXUzMgkJCQlzcGJhX3N0YXJ0X2FkZHI7DQo+ID4gwqAJdTMy CQkJCXNwYmFfZW5kX2FkZHI7DQo+ID4gwqAJdW5zaWduZWQgaW50CQkJaXJxOw0KPiA+ICsJLyog Y2hhbm5lbDAgYmQgKi8NCj4gPiArCWRtYV9hZGRyX3QJCQliZDBfcGh5czsNCj4gPiArCXN0cnVj dCBzZG1hX2J1ZmZlcl9kZXNjcmlwdG9yCSpiZDA7DQo+ID4gwqB9Ow0KPiA+IMKgDQo+ID4gwqBz dGF0aWMgc3RydWN0IHNkbWFfZHJpdmVyX2RhdGEgc2RtYV9pbXgzMSA9IHsNCj4gPiBAQCAtNTUz LDYgKzU2MSw4IEBAIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNkbWFfZHRfaWRzKTsNCj4gPiDC oCNkZWZpbmUgU0RNQV9IX0NPTkZJR19BQ1IJQklUKDQpwqDCoC8qIGluZGljYXRlcyBpZiBBSEIg ZnJlcQ0KPiA+IC9jb3JlIGZyZXEgPSAyIG9yIDEgKi8NCj4gPiDCoCNkZWZpbmUgU0RNQV9IX0NP TkZJR19DU00JKDMpwqDCoMKgwqDCoMKgwqAvKiBpbmRpY2F0ZXMgd2hpY2gNCj4gPiBjb250ZXh0 IHN3aXRjaCBtb2RlIGlzIHNlbGVjdGVkKi8NCj4gPiDCoA0KPiA+ICtzdGF0aWMgdm9pZCBzZG1h X3N0YXJ0X2Rlc2Moc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMpOw0KPiA+ICsNCj4gPiDCoHN0 YXRpYyBpbmxpbmUgdTMyIGNobmVuYmxfb2ZzKHN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSwgdW5z aWduZWQNCj4gPiBpbnQgZXZlbnQpDQo+ID4gwqB7DQo+ID4gwqAJdTMyIGNobmVuYmwwID0gc2Rt YS0+ZHJ2ZGF0YS0+Y2huZW5ibDA7DQo+ID4gQEAgLTU5NywxNCArNjA3LDcgQEAgc3RhdGljIGlu dCBzZG1hX2NvbmZpZ19vd25lcnNoaXAoc3RydWN0DQo+ID4gc2RtYV9jaGFubmVsICpzZG1hYywN Cj4gPiDCoA0KPiA+IMKgc3RhdGljIHZvaWQgc2RtYV9lbmFibGVfY2hhbm5lbChzdHJ1Y3Qgc2Rt YV9lbmdpbmUgKnNkbWEsIGludA0KPiA+IGNoYW5uZWwpDQo+ID4gwqB7DQo+ID4gLQl1bnNpZ25l ZCBsb25nIGZsYWdzOw0KPiA+IC0Jc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMgPSAmc2RtYS0+ Y2hhbm5lbFtjaGFubmVsXTsNCj4gPiAtDQo+ID4gwqAJd3JpdGVsKEJJVChjaGFubmVsKSwgc2Rt YS0+cmVncyArIFNETUFfSF9TVEFSVCk7DQo+ID4gLQ0KPiA+IC0Jc3Bpbl9sb2NrX2lycXNhdmUo JnNkbWFjLT5sb2NrLCBmbGFncyk7DQo+ID4gLQlzZG1hYy0+ZW5hYmxlZCA9IHRydWU7DQo+ID4g LQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZG1hYy0+bG9jaywgZmxhZ3MpOw0KPiA+IMKgfQ0K PiA+IMKgDQo+ID4gwqAvKg0KPiA+IEBAIC02MzIsNyArNjM1LDcgQEAgc3RhdGljIGludCBzZG1h X3J1bl9jaGFubmVsMChzdHJ1Y3Qgc2RtYV9lbmdpbmUNCj4gPiAqc2RtYSkNCj4gPiDCoHN0YXRp YyBpbnQgc2RtYV9sb2FkX3NjcmlwdChzdHJ1Y3Qgc2RtYV9lbmdpbmUgKnNkbWEsIHZvaWQgKmJ1 ZiwNCj4gPiBpbnQgc2l6ZSwNCj4gPiDCoAkJdTMyIGFkZHJlc3MpDQo+ID4gwqB7DQo+ID4gLQlz dHJ1Y3Qgc2RtYV9idWZmZXJfZGVzY3JpcHRvciAqYmQwID0gc2RtYS0+Y2hhbm5lbFswXS5iZDsN Cj4gPiArCXN0cnVjdCBzZG1hX2J1ZmZlcl9kZXNjcmlwdG9yICpiZDAgPSBzZG1hLT5iZDA7DQo+ IFRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFuIG9ydGhvZ29uYWwgY2hhbmdlLiBQbGVhc2UgbWFr ZSB0aGlzIGENCj4gc2VwYXJhdGUgcGF0Y2guDQpJdCdzIHNvbWV0aGluZyByZWxhdGVkIHdpdGgg dmlydHVhbCBkbWEgc3VwcG9ydCwgYmVjYXVzZSBpbiB2aXJ0dWFsDQpkbWEgZnJhbWV3b3JrLCBh bGwgYmRzIHNob3VsZCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgaWYgdGhleSB1c2VkLg0KYnV0 IGJkMCBpcyBhIHNwZWNhaWwgY2FzZSBzaW5jZSBpdCdzIG11c3QgYW5kIGJhc2ljIGZvciBsb2Fk IHNkbWENCmZpcm13YXJlIGFuZCBjb250ZXh0IGZvciBvdGhlciBjaGFubmVscy4gU28gaGVyZSBh bGxvYyAnYmQwJyBmb3Igb3RoZXINCmNoYW5uZWxzLg0KPiANCj4gPiANCj4gPiDCoAl2b2lkICpi dWZfdmlydDsNCj4gPiDCoAlkbWFfYWRkcl90IGJ1Zl9waHlzOw0KPiA+IMKgCWludCByZXQ7DQo+ ID4gQEAgLTY5MSwyMyArNjk0LDE2IEBAIHN0YXRpYyB2b2lkIHNkbWFfZXZlbnRfZGlzYWJsZShz dHJ1Y3QNCj4gPiBzZG1hX2NoYW5uZWwgKnNkbWFjLCB1bnNpZ25lZCBpbnQgZXZlbnQpDQo+ID4g wqBzdGF0aWMgdm9pZCBzZG1hX3VwZGF0ZV9jaGFubmVsX2xvb3Aoc3RydWN0IHNkbWFfY2hhbm5l bCAqc2RtYWMpDQo+ID4gwqB7DQo+ID4gwqAJc3RydWN0IHNkbWFfYnVmZmVyX2Rlc2NyaXB0b3Ig KmJkOw0KPiA+ICsJc3RydWN0IHNkbWFfZGVzYyAqZGVzYyA9IHNkbWFjLT5kZXNjOw0KPiA+IMKg CWludCBlcnJvciA9IDA7DQo+ID4gwqAJZW51bSBkbWFfc3RhdHVzCW9sZF9zdGF0dXMgPSBzZG1h Yy0+c3RhdHVzOw0KPiA+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiAtDQo+ID4gLQlzcGlu X2xvY2tfaXJxc2F2ZSgmc2RtYWMtPmxvY2ssIGZsYWdzKTsNCj4gPiAtCWlmICghc2RtYWMtPmVu YWJsZWQpIHsNCj4gPiAtCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZG1hYy0+bG9jaywgZmxh Z3MpOw0KPiA+IC0JCXJldHVybjsNCj4gPiAtCX0NCj4gPiAtCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnNkbWFjLT5sb2NrLCBmbGFncyk7DQo+ID4gwqANCj4gPiDCoAkvKg0KPiA+IMKgCcKgKiBs b29wIG1vZGUuIEl0ZXJhdGUgb3ZlciBkZXNjcmlwdG9ycywgcmUtc2V0dXAgdGhlbSBhbmQNCj4g PiDCoAnCoCogY2FsbCBjYWxsYmFjayBmdW5jdGlvbi4NCj4gPiDCoAnCoCovDQo+ID4gLQl3aGls ZSAoMSkgew0KPiA+IC0JCWJkID0gJnNkbWFjLT5iZFtzZG1hYy0+YnVmX3RhaWxdOw0KPiA+ICsJ d2hpbGUgKGRlc2MpIHsNCj4gJ2Rlc2MnIHNlZW1zIHRvIGJlIHVzZWQgYXMgYSBsb29wIGNvdW50 ZXIgaGVyZSwgYnV0IHRoaXMgdmFyaWFibGUgaXMNCj4gbmV2ZXIgYXNzaWduZWQgYW5vdGhlciB2 YWx1ZSwgc28gSSBhc3N1bWUgaXQncyBqdXN0IGFub3RoZXIgd2F5IHRvDQo+IHNheQ0KPiAic2tp cCB0aGUgbG9vcCBpZiBkZXNjIGlzIE5VTEwiLiBXaGVuICdkZXNjJyBOVUxMIHlvdSB3b24ndCBn ZXQgaW50bw0KPiB0aGlzIGZ1bmN0aW9uIGF0IGFsbCB0aG91Z2gsIHNvIHRoaXMgY2hlY2sgZm9y IGRlc2Mgc2VlbXMgcmF0aGVyDQo+IHBvaW50bGVzcy4NCkdvb2QgY2F0Y2gsIHNob3VsZCBjaGVj ayAnc2RtYWMtPmRlc2MnIGhlcmUgaW5zdGVhZCBvZiAnZGVzYycgc2luY2UgaW4NCnRoZSBmb2xs b3dpbmcgJ3NkbWFjLT5kZXNjJyBtYXkgYmUgc2V0IHRvIE5VTEwgYnkgc2RtYV90ZXJtaW5hdGVf YWxsDQpkdXJpbmcgZm9sbGxvd2luZyBzcGluX3VubG9jayBhbmQgc3Bpbl9sb2NrIG5hcnJvdyB3 aW5kb3cuIFdpbGwgaW1wcm92ZQ0KaXQgaW4gVjIuDQo+IA0KPiA+IA0KPiA+ICsJCWJkID0gJmRl c2MtPmJkW2Rlc2MtPmJ1Zl90YWlsXTsNCj4gPiDCoA0KPiA+IMKgCQlpZiAoYmQtPm1vZGUuc3Rh dHVzICYgQkRfRE9ORSkNCj4gPiDCoAkJCWJyZWFrOw0KPiA+IEBAIC03MjYsOCArNzIyLDggQEAg c3RhdGljIHZvaWQgc2RtYV91cGRhdGVfY2hhbm5lbF9sb29wKHN0cnVjdA0KPiA+IHNkbWFfY2hh bm5lbCAqc2RtYWMpDQo+ID4gwqAJCXNkbWFjLT5jaG5fcmVhbF9jb3VudCA9IGJkLT5tb2RlLmNv dW50Ow0KPiA+IMKgCQliZC0+bW9kZS5zdGF0dXMgfD0gQkRfRE9ORTsNCj4gPiDCoAkJYmQtPm1v ZGUuY291bnQgPSBzZG1hYy0+cGVyaW9kX2xlbjsNCj4gPiAtCQlzZG1hYy0+YnVmX3B0YWlsID0g c2RtYWMtPmJ1Zl90YWlsOw0KPiA+IC0JCXNkbWFjLT5idWZfdGFpbCA9IChzZG1hYy0+YnVmX3Rh aWwgKyAxKSAlIHNkbWFjLQ0KPiA+ID5udW1fYmQ7DQo+ID4gKwkJZGVzYy0+YnVmX3B0YWlsID0g ZGVzYy0+YnVmX3RhaWw7DQo+ID4gKwkJZGVzYy0+YnVmX3RhaWwgPSAoZGVzYy0+YnVmX3RhaWwg KyAxKSAlIGRlc2MtDQo+ID4gPm51bV9iZDsNCj4gPiDCoA0KPiA+IMKgCQkvKg0KPiA+IMKgCQnC oCogVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQNCj4gPiBjb250ZXh0 IGluIG9yZGVyDQo+ID4gQEAgLTczNSwxNSArNzMxLDE2IEBAIHN0YXRpYyB2b2lkIHNkbWFfdXBk YXRlX2NoYW5uZWxfbG9vcChzdHJ1Y3QNCj4gPiBzZG1hX2NoYW5uZWwgKnNkbWFjKQ0KPiA+IMKg CQnCoCogU0RNQSB0cmFuc2FjdGlvbiBzdGF0dXMgYnkgdGhlIHRpbWUgdGhlIGNsaWVudA0KPiA+ IHRhc2tsZXQgaXMNCj4gPiDCoAkJwqAqIGV4ZWN1dGVkLg0KPiA+IMKgCQnCoCovDQo+ID4gLQ0K PiA+IC0JCWRtYWVuZ2luZV9kZXNjX2dldF9jYWxsYmFja19pbnZva2UoJnNkbWFjLT5kZXNjLA0K PiA+IE5VTEwpOw0KPiA+ICsJCXNwaW5fdW5sb2NrKCZzZG1hYy0+dmMubG9jayk7DQo+ID4gKwkJ ZG1hZW5naW5lX2Rlc2NfZ2V0X2NhbGxiYWNrX2ludm9rZSgmZGVzYy0+dmQudHgsDQo+ID4gTlVM TCk7DQo+ID4gKwkJc3Bpbl9sb2NrKCZzZG1hYy0+dmMubG9jayk7DQo+ID4gwqANCj4gPiDCoAkJ aWYgKGVycm9yKQ0KPiA+IMKgCQkJc2RtYWMtPnN0YXR1cyA9IG9sZF9zdGF0dXM7DQo+ID4gwqAJ fQ0KPiA+IMKgfQ0KPiA+IMKgDQo+ID4gLXN0YXRpYyB2b2lkIG14Y19zZG1hX2hhbmRsZV9jaGFu bmVsX25vcm1hbCh1bnNpZ25lZCBsb25nIGRhdGEpDQo+ID4gK3N0YXRpYyB2b2lkIG14Y19zZG1h X2hhbmRsZV9jaGFubmVsX25vcm1hbChzdHJ1Y3Qgc2RtYV9jaGFubmVsDQo+ID4gKmRhdGEpDQo+ ID4gwqB7DQo+ID4gwqAJc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMgPSAoc3RydWN0IHNkbWFf Y2hhbm5lbCAqKSBkYXRhOw0KPiA+IMKgCXN0cnVjdCBzZG1hX2J1ZmZlcl9kZXNjcmlwdG9yICpi ZDsNCj4gPiBAQCAtNzU0LDggKzc1MSw4IEBAIHN0YXRpYyB2b2lkDQo+ID4gbXhjX3NkbWFfaGFu ZGxlX2NoYW5uZWxfbm9ybWFsKHVuc2lnbmVkIGxvbmcgZGF0YSkNCj4gPiDCoAnCoCogbm9uIGxv b3AgbW9kZS4gSXRlcmF0ZSBvdmVyIGFsbCBkZXNjcmlwdG9ycywgY29sbGVjdA0KPiA+IMKgCcKg KiBlcnJvcnMgYW5kIGNhbGwgY2FsbGJhY2sgZnVuY3Rpb24NCj4gPiDCoAnCoCovDQo+ID4gLQlm b3IgKGkgPSAwOyBpIDwgc2RtYWMtPm51bV9iZDsgaSsrKSB7DQo+ID4gLQkJYmQgPSAmc2RtYWMt PmJkW2ldOw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IHNkbWFjLT5kZXNjLT5udW1fYmQ7IGkrKykg ew0KPiA+ICsJCWJkID0gJnNkbWFjLT5kZXNjLT5iZFtpXTsNCj4gPiDCoA0KPiA+IMKgCQnCoGlm IChiZC0+bW9kZS5zdGF0dXMgJiAoQkRfRE9ORSB8IEJEX1JST1IpKQ0KPiA+IMKgCQkJZXJyb3Ig PSAtRUlPOw0KPiA+IEBAIC03NjYsMTAgKzc2Myw2IEBAIHN0YXRpYyB2b2lkDQo+ID4gbXhjX3Nk bWFfaGFuZGxlX2NoYW5uZWxfbm9ybWFsKHVuc2lnbmVkIGxvbmcgZGF0YSkNCj4gPiDCoAkJc2Rt YWMtPnN0YXR1cyA9IERNQV9FUlJPUjsNCj4gPiDCoAllbHNlDQo+ID4gwqAJCXNkbWFjLT5zdGF0 dXMgPSBETUFfQ09NUExFVEU7DQo+ID4gLQ0KPiA+IC0JZG1hX2Nvb2tpZV9jb21wbGV0ZSgmc2Rt YWMtPmRlc2MpOw0KPiA+IC0NCj4gPiAtCWRtYWVuZ2luZV9kZXNjX2dldF9jYWxsYmFja19pbnZv a2UoJnNkbWFjLT5kZXNjLCBOVUxMKTsNCj4gPiDCoH0NCj4gPiDCoA0KPiA+IMKgc3RhdGljIGly cXJldHVybl90IHNkbWFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0KPiA+IEBA IC03ODUsMTMgKzc3OCwyNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qgc2RtYV9pbnRfaGFuZGxlcihp bnQgaXJxLA0KPiA+IHZvaWQgKmRldl9pZCkNCj4gPiDCoAl3aGlsZSAoc3RhdCkgew0KPiA+IMKg CQlpbnQgY2hhbm5lbCA9IGZscyhzdGF0KSAtIDE7DQo+ID4gwqAJCXN0cnVjdCBzZG1hX2NoYW5u ZWwgKnNkbWFjID0gJnNkbWEtDQo+ID4gPmNoYW5uZWxbY2hhbm5lbF07DQo+ID4gLQ0KPiA+IC0J CWlmIChzZG1hYy0+ZmxhZ3MgJiBJTVhfRE1BX1NHX0xPT1ApDQo+ID4gLQkJCXNkbWFfdXBkYXRl X2NoYW5uZWxfbG9vcChzZG1hYyk7DQo+ID4gLQkJZWxzZQ0KPiA+IC0JCQl0YXNrbGV0X3NjaGVk dWxlKCZzZG1hYy0+dGFza2xldCk7DQo+ID4gKwkJc3RydWN0IHNkbWFfZGVzYyAqZGVzYzsNCj4g PiArDQo+ID4gKwkJc3Bpbl9sb2NrKCZzZG1hYy0+dmMubG9jayk7DQo+ID4gKwkJZGVzYyA9IHNk bWFjLT5kZXNjOw0KPiA+ICsJCWlmIChkZXNjKSB7DQo+ID4gKwkJCWlmIChzZG1hYy0+ZmxhZ3Mg JiBJTVhfRE1BX1NHX0xPT1ApIHsNCj4gPiArCQkJCXNkbWFfdXBkYXRlX2NoYW5uZWxfbG9vcChz ZG1hYyk7DQo+ID4gKwkJCX0gZWxzZSB7DQo+ID4gKwkJCQlteGNfc2RtYV9oYW5kbGVfY2hhbm5l bF9ub3JtYWwoc2RtDQo+ID4gYWMpOw0KPiA+ICsJCQkJdmNoYW5fY29va2llX2NvbXBsZXRlKCZk ZXNjLT52ZCk7DQo+ID4gKwkJCQlpZiAoIWxpc3RfZW1wdHkoJnNkbWFjLT5wZW5kaW5nKSkNCj4g PiArCQkJCQlsaXN0X2RlbCgmZGVzYy0+bm9kZSk7DQo+IFdoYXQgZG9lcyB0aGlzIGxpc3RfZW1w dHkgY2hlY2sgcHJvdGVjdCB5b3UgZnJvbT8gSXQgbG9va3MgbGlrZSB3aGVuDQo+IHRoZQ0KPiBs aXN0IHJlYWxseSBpcyBlbXB0eSB0aGVuIGl0J3MgYSBidWcgaW4geW91ciBpbnRlcm5hbCBkcml2 ZXIgbG9naWMuDQpZZXMsIG5vIG5lZWQgaGVyZSBjaGVjayBsb2NhbCBzZG1hYy0+cGVuZGluZyBz aW5jZSBJIGRpcmVjdGx5IHN0YXJ0DQpzZXR1cCBuZXh0IGRlc2MgZmxvd2luZyBpbiBpc3IgaW5z dGVhZCBvZiBsb2NhbCB0YXNrbGV0IGFuZCB2aXJ0X2RtYQ0KZnJhbWV3b3JrIHdpbGwgaGFuZGxl IGFsbCBsaXN0cyBzdWNoIGFzIGRlc2NfaXNzdWVkL2Rlc2NfY29tcGxldGVkIGV0Yy4NCldpbGwg cmVtb3ZlIHNkbWFjLT5wZW5kaW5nIGluIFYyLg0KPiANCj4gPiANCj4gPiArCQkJCcKgc2RtYV9z dGFydF9kZXNjKHNkbWFjKTsNCj4gV2hpdGVzcGFjZSBkYW1hZ2UgaGVyZS4NCldpbGwgZml4IGlu IFYyLg0KPiANCj4gPiANCj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4gPiDCoA0KPiA+IMKgCQlfX2Ns ZWFyX2JpdChjaGFubmVsLCAmc3RhdCk7DQo+ID4gKwkJc3Bpbl91bmxvY2soJnNkbWFjLT52Yy5s b2NrKTsNCj4gPiDCoAl9DQo+ID4gwqANCj4gPiDCoAlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ID4g QEAgLTg5Nyw3ICs5MDEsNyBAQCBzdGF0aWMgaW50IHNkbWFfbG9hZF9jb250ZXh0KHN0cnVjdA0K PiA+IHNkbWFfY2hhbm5lbCAqc2RtYWMpDQo+ID4gwqAJaW50IGNoYW5uZWwgPSBzZG1hYy0+Y2hh bm5lbDsNCj4gPiDCoAlpbnQgbG9hZF9hZGRyZXNzOw0KPiA+IMKgCXN0cnVjdCBzZG1hX2NvbnRl eHRfZGF0YSAqY29udGV4dCA9IHNkbWEtPmNvbnRleHQ7DQo+ID4gLQlzdHJ1Y3Qgc2RtYV9idWZm ZXJfZGVzY3JpcHRvciAqYmQwID0gc2RtYS0+Y2hhbm5lbFswXS5iZDsNCj4gPiArCXN0cnVjdCBz ZG1hX2J1ZmZlcl9kZXNjcmlwdG9yICpiZDAgPSBzZG1hLT5iZDA7DQo+ID4gwqAJaW50IHJldDsN Cj4gPiDCoAl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+IMKgDQo+ID4gQEAgLTk0Niw3ICs5NTAs NyBAQCBzdGF0aWMgaW50IHNkbWFfbG9hZF9jb250ZXh0KHN0cnVjdA0KPiA+IHNkbWFfY2hhbm5l bCAqc2RtYWMpDQo+ID4gwqANCj4gPiDCoHN0YXRpYyBzdHJ1Y3Qgc2RtYV9jaGFubmVsICp0b19z ZG1hX2NoYW4oc3RydWN0IGRtYV9jaGFuICpjaGFuKQ0KPiA+IMKgew0KPiA+IC0JcmV0dXJuIGNv bnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3Qgc2RtYV9jaGFubmVsLCBjaGFuKTsNCj4gPiArCXJldHVy biBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IHNkbWFfY2hhbm5lbCwgdmMuY2hhbik7DQo+ID4g wqB9DQo+ID4gwqANCj4gPiDCoHN0YXRpYyBpbnQgc2RtYV9kaXNhYmxlX2NoYW5uZWwoc3RydWN0 IGRtYV9jaGFuICpjaGFuKQ0KPiA+IEBAIC05NTQsMTUgKzk1OCwxMCBAQCBzdGF0aWMgaW50IHNk bWFfZGlzYWJsZV9jaGFubmVsKHN0cnVjdA0KPiA+IGRtYV9jaGFuICpjaGFuKQ0KPiA+IMKgCXN0 cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWFjID0gdG9fc2RtYV9jaGFuKGNoYW4pOw0KPiA+IMKgCXN0 cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSA9IHNkbWFjLT5zZG1hOw0KPiA+IMKgCWludCBjaGFubmVs ID0gc2RtYWMtPmNoYW5uZWw7DQo+ID4gLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+IMKgDQo+ ID4gwqAJd3JpdGVsX3JlbGF4ZWQoQklUKGNoYW5uZWwpLCBzZG1hLT5yZWdzICsNCj4gPiBTRE1B X0hfU1RBVFNUT1ApOw0KPiA+IMKgCXNkbWFjLT5zdGF0dXMgPSBETUFfRVJST1I7DQo+ID4gwqAN Cj4gPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZzZG1hYy0+bG9jaywgZmxhZ3MpOw0KPiA+IC0Jc2Rt YWMtPmVuYWJsZWQgPSBmYWxzZTsNCj4gPiAtCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkbWFj LT5sb2NrLCBmbGFncyk7DQo+ID4gLQ0KPiA+IMKgCXJldHVybiAwOw0KPiA+IMKgfQ0KPiA+IMKg DQo+ID4gQEAgLTEwOTcsNDIgKzEwOTYsMTAxIEBAIHN0YXRpYyBpbnQNCj4gPiBzZG1hX3NldF9j aGFubmVsX3ByaW9yaXR5KHN0cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWFjLA0KPiA+IMKgCXJldHVy biAwOw0KPiA+IMKgfQ0KPiA+IMKgDQo+ID4gLXN0YXRpYyBpbnQgc2RtYV9yZXF1ZXN0X2NoYW5u ZWwoc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMpDQo+ID4gK3N0YXRpYyBpbnQgc2RtYV9hbGxv Y19iZChzdHJ1Y3Qgc2RtYV9kZXNjICpkZXNjKQ0KPiA+IMKgew0KPiA+IC0Jc3RydWN0IHNkbWFf ZW5naW5lICpzZG1hID0gc2RtYWMtPnNkbWE7DQo+ID4gLQlpbnQgY2hhbm5lbCA9IHNkbWFjLT5j aGFubmVsOw0KPiA+IC0JaW50IHJldCA9IC1FQlVTWTsNCj4gPiArCXUzMiBiZF9zaXplID0gZGVz Yy0+bnVtX2JkICogc2l6ZW9mKHN0cnVjdA0KPiA+IHNkbWFfYnVmZmVyX2Rlc2NyaXB0b3IpOw0K PiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+IMKgDQo+ ID4gLQlzZG1hYy0+YmQgPSBkbWFfemFsbG9jX2NvaGVyZW50KE5VTEwsIFBBR0VfU0laRSwgJnNk bWFjLQ0KPiA+ID5iZF9waHlzLA0KPiA+ICsJZGVzYy0+YmQgPSBkbWFfemFsbG9jX2NvaGVyZW50 KE5VTEwsIGJkX3NpemUsICZkZXNjLQ0KPiA+ID5iZF9waHlzLA0KPiA+IMKgCQkJCQlHRlBfS0VS TkVMKTsNCj4gPiAtCWlmICghc2RtYWMtPmJkKSB7DQo+ID4gKwlpZiAoIWRlc2MtPmJkKSB7DQo+ ID4gwqAJCXJldCA9IC1FTk9NRU07DQo+ID4gwqAJCWdvdG8gb3V0Ow0KPiA+IMKgCX0NCj4gPiDC oA0KPiA+IC0Jc2RtYS0+Y2hhbm5lbF9jb250cm9sW2NoYW5uZWxdLmJhc2VfYmRfcHRyID0gc2Rt YWMtDQo+ID4gPmJkX3BoeXM7DQo+ID4gLQlzZG1hLT5jaGFubmVsX2NvbnRyb2xbY2hhbm5lbF0u Y3VycmVudF9iZF9wdHIgPSBzZG1hYy0NCj4gPiA+YmRfcGh5czsNCj4gPiArCXNwaW5fbG9ja19p cnFzYXZlKCZkZXNjLT5zZG1hYy0+dmMubG9jaywgZmxhZ3MpOw0KPiA+ICsJZGVzYy0+c2RtYWMt PmJkX3NpemVfc3VtICs9IGJkX3NpemU7DQo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk ZXNjLT5zZG1hYy0+dmMubG9jaywgZmxhZ3MpOw0KPiA+IMKgDQo+ID4gLQlzZG1hX3NldF9jaGFu bmVsX3ByaW9yaXR5KHNkbWFjLA0KPiA+IE1YQ19TRE1BX0RFRkFVTFRfUFJJT1JJVFkpOw0KPiA+ IC0JcmV0dXJuIDA7DQo+ID4gwqBvdXQ6DQo+ID4gLQ0KPiA+IMKgCXJldHVybiByZXQ7DQo+ID4g wqB9DQo+ID4gwqANCj4gPiAtc3RhdGljIGRtYV9jb29raWVfdCBzZG1hX3R4X3N1Ym1pdChzdHJ1 Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3INCj4gPiAqdHgpDQo+ID4gK3N0YXRpYyB2b2lkIHNk bWFfZnJlZV9iZChzdHJ1Y3Qgc2RtYV9kZXNjICpkZXNjKQ0KPiA+IMKgew0KPiA+ICsJdTMyIGJk X3NpemUgPSBkZXNjLT5udW1fYmQgKiBzaXplb2Yoc3RydWN0DQo+ID4gc2RtYV9idWZmZXJfZGVz Y3JpcHRvcik7DQo+ID4gwqAJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiAtCXN0cnVjdCBzZG1h X2NoYW5uZWwgKnNkbWFjID0gdG9fc2RtYV9jaGFuKHR4LT5jaGFuKTsNCj4gPiAtCWRtYV9jb29r aWVfdCBjb29raWU7DQo+ID4gwqANCj4gPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZzZG1hYy0+bG9j aywgZmxhZ3MpOw0KPiA+ICsJaWYgKGRlc2MtPmJkKSB7DQo+ID4gKwkJZG1hX2ZyZWVfY29oZXJl bnQoTlVMTCwgYmRfc2l6ZSwgZGVzYy0+YmQsIGRlc2MtDQo+ID4gPmJkX3BoeXMpOw0KPiA+ICsN Cj4gPiArCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+c2RtYWMtPnZjLmxvY2ssIGZsYWdzKTsN Cj4gPiArCQlkZXNjLT5zZG1hYy0+YmRfc2l6ZV9zdW0gLT0gYmRfc2l6ZTsNCj4gPiArCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5zZG1hYy0+dmMubG9jaywNCj4gPiBmbGFncyk7DQo+ ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgc2RtYV9yZXF1ZXN0X2NoYW5u ZWwwKHN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSkNCj4gPiArew0KPiA+ICsJaW50IHJldCA9IDA7 DQo+ID4gKw0KPiA+ICsJc2RtYS0+YmQwID0gZG1hX3phbGxvY19jb2hlcmVudChOVUxMLCBQQUdF X1NJWkUsICZzZG1hLQ0KPiA+ID5iZDBfcGh5cywNCj4gPiArCQkJCQlHRlBfS0VSTkVMKTsNCj4g PiArCWlmICghc2RtYS0+YmQwKSB7DQo+ID4gKwkJcmV0ID0gLUVOT01FTTsNCj4gPiArCQlnb3Rv IG91dDsNCj4gPiArCX0NCj4gPiDCoA0KPiA+IC0JY29va2llID0gZG1hX2Nvb2tpZV9hc3NpZ24o dHgpOw0KPiA+ICsJc2RtYS0+Y2hhbm5lbF9jb250cm9sWzBdLmJhc2VfYmRfcHRyID0gc2RtYS0+ YmQwX3BoeXM7DQo+ID4gKwlzZG1hLT5jaGFubmVsX2NvbnRyb2xbMF0uY3VycmVudF9iZF9wdHIg PSBzZG1hLT5iZDBfcGh5czsNCj4gPiDCoA0KPiA+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm c2RtYWMtPmxvY2ssIGZsYWdzKTsNCj4gPiArCXNkbWFfc2V0X2NoYW5uZWxfcHJpb3JpdHkoJnNk bWEtPmNoYW5uZWxbMF0sDQo+ID4gTVhDX1NETUFfREVGQVVMVF9QUklPUklUWSk7DQo+ID4gK291 dDoNCj4gPiDCoA0KPiA+IC0JcmV0dXJuIGNvb2tpZTsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3Qgc2RtYV9kZXNjICp0b19zZG1hX2Rlc2Moc3Ry dWN0DQo+ID4gZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnQpDQo+ID4gK3sNCj4gPiArCXJldHVy biBjb250YWluZXJfb2YodCwgc3RydWN0IHNkbWFfZGVzYywgdmQudHgpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCBzZG1hX2Rlc2NfZnJlZShzdHJ1Y3QgdmlydF9kbWFfZGVzYyAq dmQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBzZG1hX2Rlc2MgKmRlc2MgPSBjb250YWluZXJfb2Yo dmQsIHN0cnVjdA0KPiA+IHNkbWFfZGVzYywgdmQpOw0KPiA+ICsNCj4gPiArCWlmIChkZXNjKSB7 DQo+IERlcGVuZGluZyBvbiB0aGUgcG9zaXRpb24gb2YgJ3ZkJyBpbiBzdHJ1Y3Qgc2RtYV9kZXNj ICdkZXNjJyB3aWxsDQo+IGFsd2F5cw0KPiBiZSBub24tTlVMTCwgZXZlbiBpZiAndmQnIGlzIE5V TEwuDQo+IA0KPiBJIHRoaW5rIHRoaXMgdGVzdCBpcyB1bm5lY2Vzc2FyeSBzaW5jZSB0aGlzIGZ1 bmN0aW9uIHNob3VsZCBuZXZlciBiZQ0KPiBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIHBvaW50ZXIu IElmIGl0IGlzLCB0aGVuIHRoZSBjYWxsZXIgcmVhbGx5DQo+IGRlc2VydmVkIHRoZSByZXN1bHRp bmcgY3Jhc2guDQpZZXMsIHdpbGwgcmVtb3ZlIGl0Lg0KPiANCj4gPiANCj4gPiArCQlzZG1hX2Zy ZWVfYmQoZGVzYyk7DQo+ID4gKwkJa2ZyZWUoZGVzYyk7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgc2RtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hh bikNCj4gPiArew0KPiA+ICsJc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMgPSB0b19zZG1hX2No YW4oY2hhbik7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+ICsJTElTVF9IRUFEKGhl YWQpOw0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZzZG1hYy0+dmMubG9jaywgZmxh Z3MpOw0KPiA+ICsJdmNoYW5fZ2V0X2FsbF9kZXNjcmlwdG9ycygmc2RtYWMtPnZjLCAmaGVhZCk7 DQo+ID4gKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnNkbWFjLT5wZW5kaW5nKSkgew0KPiA+ICsJCXN0 cnVjdCBzZG1hX2Rlc2MgKmRlc2MgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzZG1hYy0NCj4gPiA+cGVu ZGluZywNCj4gPiArCQkJc3RydWN0IHNkbWFfZGVzYywgbm9kZSk7DQo+ID4gKw0KPiA+ICsJCcKg bGlzdF9kZWwoJmRlc2MtPm5vZGUpOw0KPiA+ICsJCcKgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm c2RtYWMtPnZjLmxvY2ssIGZsYWdzKTsNCj4gPiArCQnCoHNkbWFjLT52Yy5kZXNjX2ZyZWUoJmRl c2MtPnZkKTsNCj4gPiArCQnCoHNwaW5fbG9ja19pcnFzYXZlKCZzZG1hYy0+dmMubG9jaywgZmxh Z3MpOw0KPiA+ICsJfQ0KPiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmU/DQpXaWxsIHJlbW92ZSBo ZXJlIGFsbCB3aGlsZShzZG1hYy0+cGVuZGluZykgY2hlY2tpbmcuTm8gbmVlZCBoZXJlLsKgDQo+ IA0KPiA+IA0KPiA+ICsNCj4gPiArCWlmIChzZG1hYy0+ZGVzYykNCj4gPiArCQlzZG1hYy0+ZGVz YyA9IE5VTEw7DQo+IFRoZSB0ZXN0IGlzIHVubmVjZXNhcnkuDQpUaGlzICdOVUxMJyBpcyBtZWFu aW5nZnVsIGluIGNhc2UgdGhhdCBkbWEgZG9uZSBpbnRlcnJ1cHQgY29tZSBhZnRlcg0KdGVybWlu YXRlIGFzIHlvdSBrbm93IHNkbWEgd2lsbCBhY3R1YWxseSBzdG9wIGFmdGVyIGN1cnJlbnQgdHJh bnNmZXINCmRvbmUuDQo+ID4gDQo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZG1hYy0+ dmMubG9jaywgZmxhZ3MpOw0KPiA+ICsJdmNoYW5fZG1hX2Rlc2NfZnJlZV9saXN0KCZzZG1hYy0+ dmMsICZoZWFkKTsNCj4gPiArCXNkbWFfZGlzYWJsZV9jaGFubmVsX3dpdGhfZGVsYXkoY2hhbik7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gwqB9DQo+ID4gwqANCj4gPiDCoHN0YXRpYyBp bnQgc2RtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pDQo+ID4g QEAgLTExNjgsMTggKzEyMjYsMTEgQEAgc3RhdGljIGludCBzZG1hX2FsbG9jX2NoYW5fcmVzb3Vy Y2VzKHN0cnVjdA0KPiA+IGRtYV9jaGFuICpjaGFuKQ0KPiA+IMKgCWlmIChyZXQpDQo+ID4gwqAJ CWdvdG8gZGlzYWJsZV9jbGtfaXBnOw0KPiA+IMKgDQo+ID4gLQlyZXQgPSBzZG1hX3JlcXVlc3Rf Y2hhbm5lbChzZG1hYyk7DQo+ID4gLQlpZiAocmV0KQ0KPiA+IC0JCWdvdG8gZGlzYWJsZV9jbGtf YWhiOw0KPiA+IC0NCj4gPiDCoAlyZXQgPSBzZG1hX3NldF9jaGFubmVsX3ByaW9yaXR5KHNkbWFj LCBwcmlvKTsNCj4gPiDCoAlpZiAocmV0KQ0KPiA+IMKgCQlnb3RvIGRpc2FibGVfY2xrX2FoYjsN Cj4gPiDCoA0KPiA+IC0JZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmc2RtYWMtPmRlc2Ms IGNoYW4pOw0KPiA+IC0Jc2RtYWMtPmRlc2MudHhfc3VibWl0ID0gc2RtYV90eF9zdWJtaXQ7DQo+ ID4gLQkvKiB0eGQuZmxhZ3Mgd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBwcmVwIGZ1bmNzICovDQo+ ID4gLQlzZG1hYy0+ZGVzYy5mbGFncyA9IERNQV9DVFJMX0FDSzsNCj4gPiArCXNkbWFjLT5iZF9z aXplX3N1bSA9IDA7DQo+ID4gwqANCj4gPiDCoAlyZXR1cm4gMDsNCj4gPiDCoA0KPiA+IEBAIC0x MTk1LDcgKzEyNDYsNyBAQCBzdGF0aWMgdm9pZCBzZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoc3Ry dWN0DQo+ID4gZG1hX2NoYW4gKmNoYW4pDQo+ID4gwqAJc3RydWN0IHNkbWFfY2hhbm5lbCAqc2Rt YWMgPSB0b19zZG1hX2NoYW4oY2hhbik7DQo+ID4gwqAJc3RydWN0IHNkbWFfZW5naW5lICpzZG1h ID0gc2RtYWMtPnNkbWE7DQo+ID4gwqANCj4gPiAtCXNkbWFfZGlzYWJsZV9jaGFubmVsKGNoYW4p Ow0KPiA+ICsJc2RtYV90ZXJtaW5hdGVfYWxsKGNoYW4pOw0KPiA+IMKgDQo+ID4gwqAJaWYgKHNk bWFjLT5ldmVudF9pZDApDQo+ID4gwqAJCXNkbWFfZXZlbnRfZGlzYWJsZShzZG1hYywgc2RtYWMt PmV2ZW50X2lkMCk7DQo+ID4gQEAgLTEyMDcsMTIgKzEyNTgsNDMgQEAgc3RhdGljIHZvaWQgc2Rt YV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdA0KPiA+IGRtYV9jaGFuICpjaGFuKQ0KPiA+IMKg DQo+ID4gwqAJc2RtYV9zZXRfY2hhbm5lbF9wcmlvcml0eShzZG1hYywgMCk7DQo+ID4gwqANCj4g PiAtCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFBBR0VfU0laRSwgc2RtYWMtPmJkLCBzZG1hYy0N Cj4gPiA+YmRfcGh5cyk7DQo+ID4gLQ0KPiA+IMKgCWNsa19kaXNhYmxlKHNkbWEtPmNsa19pcGcp Ow0KPiA+IMKgCWNsa19kaXNhYmxlKHNkbWEtPmNsa19haGIpOw0KPiA+IMKgfQ0KPiA+IMKgDQo+ ID4gK3N0YXRpYyBzdHJ1Y3Qgc2RtYV9kZXNjICpzZG1hX3RyYW5zZmVyX2luaXQoc3RydWN0IHNk bWFfY2hhbm5lbA0KPiA+ICpzZG1hYywNCj4gPiArCQkJCWVudW0gZG1hX3RyYW5zZmVyX2RpcmVj dGlvbg0KPiA+IGRpcmVjdGlvbiwgdTMyIGJkcykNCj4gPiArew0KPiA+ICsJc3RydWN0IHNkbWFf ZGVzYyAqZGVzYzsNCj4gPiArDQo+ID4gKwlkZXNjID0ga3phbGxvYygoc2l6ZW9mKCpkZXNjKSks IEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFkZXNjKQ0KPiA+ICsJCWdvdG8gZXJyX291dDsNCj4g PiArDQo+ID4gKwlzZG1hYy0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOw0KPiA+ICsJc2RtYWMt PmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsNCj4gPiArCXNkbWFjLT5mbGFncyA9IDA7DQo+ID4gKwlz ZG1hYy0+Y2huX2NvdW50ID0gMDsNCj4gPiArCXNkbWFjLT5jaG5fcmVhbF9jb3VudCA9IDA7DQo+ ID4gKw0KPiA+ICsJZGVzYy0+c2RtYWMgPSBzZG1hYzsNCj4gPiArCWRlc2MtPm51bV9iZCA9IGJk czsNCj4gPiArCUlOSVRfTElTVF9IRUFEKCZkZXNjLT5ub2RlKTsNCj4gPiArDQo+ID4gKwlpZiAo c2RtYV9hbGxvY19iZChkZXNjKSkNCj4gPiArCQlnb3RvIGVycl9kZXNjX291dDsNCj4gPiArDQo+ ID4gKwlpZiAoc2RtYV9sb2FkX2NvbnRleHQoc2RtYWMpKQ0KPiA+ICsJCWdvdG8gZXJyX2Rlc2Nf b3V0Ow0KPiA+ICsNCj4gPiArCXJldHVybiBkZXNjOw0KPiA+ICsNCj4gPiArZXJyX2Rlc2Nfb3V0 Og0KPiA+ICsJa2ZyZWUoZGVzYyk7DQo+ID4gK2Vycl9vdXQ6DQo+ID4gKwlyZXR1cm4gTlVMTDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiDCoHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0 b3IgKnNkbWFfcHJlcF9zbGF2ZV9zZygNCj4gPiDCoAkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwNCj4gPiDCoAkJdW5zaWduZWQgaW50IHNnX2xlbiwgZW51 bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uDQo+ID4gZGlyZWN0aW9uLA0KPiA+IEBAIC0xMjIzLDM1 ICsxMzA1LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3INCj4gPiAq c2RtYV9wcmVwX3NsYXZlX3NnKA0KPiA+IMKgCWludCByZXQsIGksIGNvdW50Ow0KPiA+IMKgCWlu dCBjaGFubmVsID0gc2RtYWMtPmNoYW5uZWw7DQo+ID4gwqAJc3RydWN0IHNjYXR0ZXJsaXN0ICpz ZzsNCj4gPiArCXN0cnVjdCBzZG1hX2Rlc2MgKmRlc2M7DQo+ID4gwqANCj4gPiAtCWlmIChzZG1h Yy0+c3RhdHVzID09IERNQV9JTl9QUk9HUkVTUykNCj4gPiArCWlmICghY2hhbikNCj4gPiDCoAkJ cmV0dXJuIE5VTEw7DQo+ID4gLQlzZG1hYy0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOw0KPiA+ IC0NCj4gPiAtCXNkbWFjLT5mbGFncyA9IDA7DQo+ID4gwqANCj4gPiAtCXNkbWFjLT5idWZfdGFp bCA9IDA7DQo+ID4gLQlzZG1hYy0+YnVmX3B0YWlsID0gMDsNCj4gPiAtCXNkbWFjLT5jaG5fcmVh bF9jb3VudCA9IDA7DQo+ID4gKwlkZXNjID0gc2RtYV90cmFuc2Zlcl9pbml0KHNkbWFjLCBkaXJl Y3Rpb24sIHNnX2xlbik7DQo+ID4gKwlpZiAoIWRlc2MpDQo+ID4gKwkJZ290byBlcnJfb3V0Ow0K PiA+IMKgDQo+ID4gwqAJZGV2X2RiZyhzZG1hLT5kZXYsICJzZXR0aW5nIHVwICVkIGVudHJpZXMg Zm9yIGNoYW5uZWwNCj4gPiAlZC5cbiIsDQo+ID4gwqAJCQlzZ19sZW4sIGNoYW5uZWwpOw0KPiA+ IMKgDQo+ID4gLQlzZG1hYy0+ZGlyZWN0aW9uID0gZGlyZWN0aW9uOw0KPiA+IMKgCXJldCA9IHNk bWFfbG9hZF9jb250ZXh0KHNkbWFjKTsNCj4gPiDCoAlpZiAocmV0KQ0KPiA+IMKgCQlnb3RvIGVy cl9vdXQ7DQo+ID4gwqANCj4gPiAtCWlmIChzZ19sZW4gPiBOVU1fQkQpIHsNCj4gPiAtCQlkZXZf ZXJyKHNkbWEtPmRldiwgIlNETUEgY2hhbm5lbCAlZDogbWF4aW11bQ0KPiA+IG51bWJlciBvZiBz ZyBleGNlZWRlZDogJWQgPiAlZFxuIiwNCj4gPiAtCQkJCWNoYW5uZWwsIHNnX2xlbiwgTlVNX0JE KTsNCj4gPiAtCQlyZXQgPSAtRUlOVkFMOw0KPiA+IC0JCWdvdG8gZXJyX291dDsNCj4gPiAtCX0N Cj4gPiAtDQo+ID4gLQlzZG1hYy0+Y2huX2NvdW50ID0gMDsNCj4gPiDCoAlmb3JfZWFjaF9zZyhz Z2wsIHNnLCBzZ19sZW4sIGkpIHsNCj4gPiAtCQlzdHJ1Y3Qgc2RtYV9idWZmZXJfZGVzY3JpcHRv ciAqYmQgPSAmc2RtYWMtPmJkW2ldOw0KPiA+ICsJCXN0cnVjdCBzZG1hX2J1ZmZlcl9kZXNjcmlw dG9yICpiZCA9ICZkZXNjLT5iZFtpXTsNCj4gPiDCoAkJaW50IHBhcmFtOw0KPiA+IMKgDQo+ID4g wqAJCWJkLT5idWZmZXJfYWRkciA9IHNnLT5kbWFfYWRkcmVzczsNCj4gPiBAQCAtMTI2Miw3ICsx MzMzLDcgQEAgc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcg0KPiA+ICpzZG1h X3ByZXBfc2xhdmVfc2coDQo+ID4gwqAJCQlkZXZfZXJyKHNkbWEtPmRldiwgIlNETUEgY2hhbm5l bCAlZDoNCj4gPiBtYXhpbXVtIGJ5dGVzIGZvciBzZyBlbnRyeSBleGNlZWRlZDogJWQgPiAlZFxu IiwNCj4gPiDCoAkJCQkJY2hhbm5lbCwgY291bnQsIDB4ZmZmZik7DQo+ID4gwqAJCQlyZXQgPSAt RUlOVkFMOw0KPiA+IC0JCQlnb3RvIGVycl9vdXQ7DQo+ID4gKwkJCWdvdG8gZXJyX2JkX291dDsN Cj4gPiDCoAkJfQ0KPiA+IMKgDQo+ID4gwqAJCWJkLT5tb2RlLmNvdW50ID0gY291bnQ7DQo+ID4g QEAgLTEzMDcsMTAgKzEzNzgsMTEgQEAgc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3Jp cHRvcg0KPiA+ICpzZG1hX3ByZXBfc2xhdmVfc2coDQo+ID4gwqAJCWJkLT5tb2RlLnN0YXR1cyA9 IHBhcmFtOw0KPiA+IMKgCX0NCj4gPiDCoA0KPiA+IC0Jc2RtYWMtPm51bV9iZCA9IHNnX2xlbjsN Cj4gPiAtCXNkbWEtPmNoYW5uZWxfY29udHJvbFtjaGFubmVsXS5jdXJyZW50X2JkX3B0ciA9IHNk bWFjLQ0KPiA+ID5iZF9waHlzOw0KPiA+ICsJcmV0dXJuIHZjaGFuX3R4X3ByZXAoJnNkbWFjLT52 YywgJmRlc2MtPnZkLCBmbGFncyk7DQo+ID4gwqANCj4gPiAtCXJldHVybiAmc2RtYWMtPmRlc2M7 DQo+ID4gK2Vycl9iZF9vdXQ6DQo+ID4gKwlzZG1hX2ZyZWVfYmQoZGVzYyk7DQo+ID4gKwlrZnJl ZShkZXNjKTsNCj4gPiDCoGVycl9vdXQ6DQo+ID4gwqAJc2RtYWMtPnN0YXR1cyA9IERNQV9FUlJP UjsNCj4gPiDCoAlyZXR1cm4gTlVMTDsNCj4gPiBAQCAtMTMyNiwzOSArMTM5OCwzMiBAQCBzdGF0 aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yDQo+ID4gKnNkbWFfcHJlcF9kbWFfY3lj bGljKA0KPiA+IMKgCWludCBudW1fcGVyaW9kcyA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOw0KPiA+ IMKgCWludCBjaGFubmVsID0gc2RtYWMtPmNoYW5uZWw7DQo+ID4gwqAJaW50IHJldCwgaSA9IDAs IGJ1ZiA9IDA7DQo+ID4gKwlzdHJ1Y3Qgc2RtYV9kZXNjICpkZXNjOw0KPiA+IMKgDQo+ID4gwqAJ ZGV2X2RiZyhzZG1hLT5kZXYsICIlcyBjaGFubmVsOiAlZFxuIiwgX19mdW5jX18sIGNoYW5uZWwp Ow0KPiA+IMKgDQo+ID4gLQlpZiAoc2RtYWMtPnN0YXR1cyA9PSBETUFfSU5fUFJPR1JFU1MpDQo+ ID4gLQkJcmV0dXJuIE5VTEw7DQo+ID4gLQ0KPiA+IC0Jc2RtYWMtPnN0YXR1cyA9IERNQV9JTl9Q Uk9HUkVTUzsNCj4gPiArCS8qIE5vdyBhbGxvY2F0ZSBhbmQgc2V0dXAgdGhlIGRlc2NyaXB0b3Iu ICovDQo+ID4gKwlkZXNjID0gc2RtYV90cmFuc2Zlcl9pbml0KHNkbWFjLCBkaXJlY3Rpb24sIG51 bV9wZXJpb2RzKTsNCj4gPiArCWlmICghZGVzYykNCj4gPiArCQlnb3RvIGVycl9vdXQ7DQo+ID4g wqANCj4gPiAtCXNkbWFjLT5idWZfdGFpbCA9IDA7DQo+ID4gLQlzZG1hYy0+YnVmX3B0YWlsID0g MDsNCj4gPiAtCXNkbWFjLT5jaG5fcmVhbF9jb3VudCA9IDA7DQo+ID4gKwlkZXNjLT5idWZfdGFp bCA9IDA7DQo+ID4gKwlkZXNjLT5idWZfcHRhaWwgPSAwOw0KPiA+IMKgCXNkbWFjLT5wZXJpb2Rf bGVuID0gcGVyaW9kX2xlbjsNCj4gPiAtDQo+ID4gwqAJc2RtYWMtPmZsYWdzIHw9IElNWF9ETUFf U0dfTE9PUDsNCj4gPiAtCXNkbWFjLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247DQo+ID4gKw0KPiA+ IMKgCXJldCA9IHNkbWFfbG9hZF9jb250ZXh0KHNkbWFjKTsNCj4gPiDCoAlpZiAocmV0KQ0KPiA+ IMKgCQlnb3RvIGVycl9vdXQ7DQo+ID4gwqANCj4gPiAtCWlmIChudW1fcGVyaW9kcyA+IE5VTV9C RCkgew0KPiA+IC0JCWRldl9lcnIoc2RtYS0+ZGV2LCAiU0RNQSBjaGFubmVsICVkOiBtYXhpbXVt DQo+ID4gbnVtYmVyIG9mIHNnIGV4Y2VlZGVkOiAlZCA+ICVkXG4iLA0KPiA+IC0JCQkJY2hhbm5l bCwgbnVtX3BlcmlvZHMsIE5VTV9CRCk7DQo+ID4gLQkJZ290byBlcnJfb3V0Ow0KPiA+IC0JfQ0K PiA+IC0NCj4gPiDCoAlpZiAocGVyaW9kX2xlbiA+IDB4ZmZmZikgew0KPiA+IMKgCQlkZXZfZXJy KHNkbWEtPmRldiwgIlNETUEgY2hhbm5lbCAlZDogbWF4aW11bQ0KPiA+IHBlcmlvZCBzaXplIGV4 Y2VlZGVkOiAlenUgPiAlZFxuIiwNCj4gPiDCoAkJCQljaGFubmVsLCBwZXJpb2RfbGVuLCAweGZm ZmYpOw0KPiA+IC0JCWdvdG8gZXJyX291dDsNCj4gPiArCQlnb3RvIGVycl9iZF9vdXQ7DQo+ID4g wqAJfQ0KPiA+IMKgDQo+ID4gwqAJd2hpbGUgKGJ1ZiA8IGJ1Zl9sZW4pIHsNCj4gPiAtCQlzdHJ1 Y3Qgc2RtYV9idWZmZXJfZGVzY3JpcHRvciAqYmQgPSAmc2RtYWMtPmJkW2ldOw0KPiA+ICsJCXN0 cnVjdCBzZG1hX2J1ZmZlcl9kZXNjcmlwdG9yICpiZCA9ICZkZXNjLT5iZFtpXTsNCj4gPiDCoAkJ aW50IHBhcmFtOw0KPiA+IMKgDQo+ID4gwqAJCWJkLT5idWZmZXJfYWRkciA9IGRtYV9hZGRyOw0K PiA+IEBAIC0xMzY2LDcgKzE0MzEsNyBAQCBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNj cmlwdG9yDQo+ID4gKnNkbWFfcHJlcF9kbWFfY3ljbGljKA0KPiA+IMKgCQliZC0+bW9kZS5jb3Vu dCA9IHBlcmlvZF9sZW47DQo+ID4gwqANCj4gPiDCoAkJaWYgKHNkbWFjLT53b3JkX3NpemUgPiBE TUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUykNCj4gPiAtCQkJZ290byBlcnJfb3V0Ow0KPiA+ICsJ CQlnb3RvIGVycl9iZF9vdXQ7DQo+ID4gwqAJCWlmIChzZG1hYy0+d29yZF9zaXplID09DQo+ID4g RE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVMpDQo+ID4gwqAJCQliZC0+bW9kZS5jb21tYW5kID0g MDsNCj4gPiDCoAkJZWxzZQ0KPiA+IEBAIC0xMzg5LDEwICsxNDU0LDEwIEBAIHN0YXRpYyBzdHJ1 Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3INCj4gPiAqc2RtYV9wcmVwX2RtYV9jeWNsaWMoDQo+ ID4gwqAJCWkrKzsNCj4gPiDCoAl9DQo+ID4gwqANCj4gPiAtCXNkbWFjLT5udW1fYmQgPSBudW1f cGVyaW9kczsNCj4gPiAtCXNkbWEtPmNoYW5uZWxfY29udHJvbFtjaGFubmVsXS5jdXJyZW50X2Jk X3B0ciA9IHNkbWFjLQ0KPiA+ID5iZF9waHlzOw0KPiA+IC0NCj4gPiAtCXJldHVybiAmc2RtYWMt PmRlc2M7DQo+ID4gKwlyZXR1cm4gdmNoYW5fdHhfcHJlcCgmc2RtYWMtPnZjLCAmZGVzYy0+dmQs IGZsYWdzKTsNCj4gPiArZXJyX2JkX291dDoNCj4gPiArCXNkbWFfZnJlZV9iZChkZXNjKTsNCj4g PiArCWtmcmVlKGRlc2MpOw0KPiA+IMKgZXJyX291dDoNCj4gPiDCoAlzZG1hYy0+c3RhdHVzID0g RE1BX0VSUk9SOw0KPiA+IMKgCXJldHVybiBOVUxMOw0KPiA+IEBAIC0xNDMyLDI2ICsxNDk3LDc0 IEBAIHN0YXRpYyBlbnVtIGRtYV9zdGF0dXMNCj4gPiBzZG1hX3R4X3N0YXR1cyhzdHJ1Y3QgZG1h X2NoYW4gKmNoYW4sDQo+ID4gwqB7DQo+ID4gwqAJc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMg PSB0b19zZG1hX2NoYW4oY2hhbik7DQo+ID4gwqAJdTMyIHJlc2lkdWU7DQo+ID4gKwlzdHJ1Y3Qg dmlydF9kbWFfZGVzYyAqdmQ7DQo+ID4gKwlzdHJ1Y3Qgc2RtYV9kZXNjICpkZXNjOw0KPiA+ICsJ ZW51bSBkbWFfc3RhdHVzIHJldDsNCj4gPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gwqAN Cj4gPiAtCWlmIChzZG1hYy0+ZmxhZ3MgJiBJTVhfRE1BX1NHX0xPT1ApDQo+ID4gLQkJcmVzaWR1 ZSA9IChzZG1hYy0+bnVtX2JkIC0gc2RtYWMtPmJ1Zl9wdGFpbCkgKg0KPiA+ICsJcmV0ID0gZG1h X2Nvb2tpZV9zdGF0dXMoY2hhbiwgY29va2llLCB0eHN0YXRlKTsNCj4gPiArCWlmIChyZXQgPT0g RE1BX0NPTVBMRVRFICYmIHR4c3RhdGUpIHsNCj4gPiArCQlyZXNpZHVlID0gc2RtYWMtPmNobl9j b3VudCAtIHNkbWFjLQ0KPiA+ID5jaG5fcmVhbF9jb3VudDsNCj4gPiArCQlyZXR1cm4gcmV0Ow0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZzZG1hYy0+dmMubG9jaywg ZmxhZ3MpOw0KPiA+ICsJdmQgPSB2Y2hhbl9maW5kX2Rlc2MoJnNkbWFjLT52YywgY29va2llKTsN Cj4gPiArCWRlc2MgPSB0b19zZG1hX2Rlc2MoJnZkLT50eCk7DQo+IFlvdSBzaG91bGQgdXNlICd2 ZCcgb25seSBhZnRlciB5b3UgaGF2ZSBtYWRlIHN1cmUgaXQgaXMgdmFsaWQgKHRob3VnaA0KPiBJ DQo+IHNlZSBpdCBjYXVzZXMgbm8gaGFybSBpbiB0aGlzIGNhc2UsIGJ1dCBsZXQncyBiZSBuaWNl IHRvIHRoZSByZWFkZXJzDQo+IG9mDQo+IHRoaXMgY29kZSkNCk9rLCB3aWxsIG1vdmUgZGVzYyA9 IHRvX3NkbWFfZGVzYygmdmQtPnR4KSBpbnRvIHRoZSBiZWxvdyBpZih2ZCkuLi7CoA0KPiANCj4g PiANCj4gPiArCWlmICh2ZCkgew0KPiA+ICsJCWlmIChzZG1hYy0+ZmxhZ3MgJiBJTVhfRE1BX1NH X0xPT1ApDQo+ID4gKwkJCXJlc2lkdWUgPSAoZGVzYy0+bnVtX2JkIC0gZGVzYy0+YnVmX3B0YWls KSANCj4gPiAqDQo+ID4gwqAJCQnCoMKgwqBzZG1hYy0+cGVyaW9kX2xlbiAtIHNkbWFjLQ0KPiA+ ID5jaG5fcmVhbF9jb3VudDsNCj4gPiAtCWVsc2UNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJlc2lk dWUgPSBzZG1hYy0+Y2huX2NvdW50IC0gc2RtYWMtDQo+ID4gPmNobl9yZWFsX2NvdW50Ow0KPiA+ ICsJfSBlbHNlIGlmIChzZG1hYy0+ZGVzYyAmJiBzZG1hYy0+ZGVzYy0+dmQudHguY29va2llID09 DQo+ID4gY29va2llKSB7DQo+ID4gwqAJCXJlc2lkdWUgPSBzZG1hYy0+Y2huX2NvdW50IC0gc2Rt YWMtDQo+ID4gPmNobl9yZWFsX2NvdW50Ow0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlyZXNpZHVl ID0gMDsNCj4gPiArCX0NCj4gPiArCXJldCA9IHNkbWFjLT5zdGF0dXM7DQo+ID4gKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZzZG1hYy0+dmMubG9jaywgZmxhZ3MpOw0KPiA+IMKgDQo+ID4gwqAJ ZG1hX3NldF90eF9zdGF0ZSh0eHN0YXRlLCBjaGFuLT5jb21wbGV0ZWRfY29va2llLCBjaGFuLQ0K PiA+ID5jb29raWUsDQo+ID4gwqAJCQnCoHJlc2lkdWUpOw0KPiA+IMKgDQo+ID4gLQlyZXR1cm4g c2RtYWMtPnN0YXR1czsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB2b2lkIHNkbWFfc3RhcnRfZGVzYyhzdHJ1Y3Qgc2RtYV9jaGFubmVsICpzZG1hYykNCj4g PiArew0KPiA+ICsJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkID0gdmNoYW5fbmV4dF9kZXNjKCZz ZG1hYy0+dmMpOw0KPiA+ICsJc3RydWN0IHNkbWFfZGVzYyAqZGVzYzsNCj4gPiArCXN0cnVjdCBz ZG1hX2VuZ2luZSAqc2RtYSA9IHNkbWFjLT5zZG1hOw0KPiA+ICsJaW50IGNoYW5uZWwgPSBzZG1h Yy0+Y2hhbm5lbDsNCj4gPiArDQo+ID4gKwlpZiAoIXZkKSB7DQo+ID4gKwkJc2RtYWMtPmRlc2Mg PSBOVUxMOw0KPiA+ICsJCXJldHVybjsNCj4gPiArCX0NCj4gPiArCXNkbWFjLT5kZXNjID0gZGVz YyA9IHRvX3NkbWFfZGVzYygmdmQtPnR4KTsNCj4gPiArCS8qDQo+ID4gKwnCoCogRG8gbm90IGRl bGV0ZSB0aGUgbm9kZSBpbiBkZXNjX2lzc3VlZCBsaXN0IGluIGN5Y2xpYw0KPiA+IG1vZGUsIG90 aGVyd2lzZQ0KPiA+ICsJwqAqIHRoZSBkZXNjIGFsbG9jZWQgd2lsbCBuZXZlciBiZSBmcmVlZCBp bg0KPiA+IHZjaGFuX2RtYV9kZXNjX2ZyZWVfbGlzdA0KPiA+ICsJwqAqLw0KPiA+ICsJaWYgKCEo c2RtYWMtPmZsYWdzICYgSU1YX0RNQV9TR19MT09QKSkgew0KPiA+ICsJCWxpc3RfYWRkX3RhaWwo JnNkbWFjLT5kZXNjLT5ub2RlLCAmc2RtYWMtDQo+ID4gPnBlbmRpbmcpOw0KPiA+ICsJCWxpc3Rf ZGVsKCZ2ZC0+bm9kZSk7DQo+ID4gKwl9DQo+ID4gKwlzZG1hLT5jaGFubmVsX2NvbnRyb2xbY2hh bm5lbF0uYmFzZV9iZF9wdHIgPSBkZXNjLQ0KPiA+ID5iZF9waHlzOw0KPiA+ICsJc2RtYS0+Y2hh bm5lbF9jb250cm9sW2NoYW5uZWxdLmN1cnJlbnRfYmRfcHRyID0gZGVzYy0NCj4gPiA+YmRfcGh5 czsNCj4gPiArCXNkbWFfZW5hYmxlX2NoYW5uZWwoc2RtYSwgc2RtYWMtPmNoYW5uZWwpOw0KPiA+ IMKgfQ0KPiA+IMKgDQo+ID4gwqBzdGF0aWMgdm9pZCBzZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0 IGRtYV9jaGFuICpjaGFuKQ0KPiA+IMKgew0KPiA+IMKgCXN0cnVjdCBzZG1hX2NoYW5uZWwgKnNk bWFjID0gdG9fc2RtYV9jaGFuKGNoYW4pOw0KPiA+IC0Jc3RydWN0IHNkbWFfZW5naW5lICpzZG1h ID0gc2RtYWMtPnNkbWE7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+IMKgDQo+ID4g LQlpZiAoc2RtYWMtPnN0YXR1cyA9PSBETUFfSU5fUFJPR1JFU1MpDQo+ID4gLQkJc2RtYV9lbmFi bGVfY2hhbm5lbChzZG1hLCBzZG1hYy0+Y2hhbm5lbCk7DQo+ID4gKwlzcGluX2xvY2tfaXJxc2F2 ZSgmc2RtYWMtPnZjLmxvY2ssIGZsYWdzKTsNCj4gPiArCWlmICh2Y2hhbl9pc3N1ZV9wZW5kaW5n KCZzZG1hYy0+dmMpICYmICFzZG1hYy0+ZGVzYykNCj4gPiArCQlzZG1hX3N0YXJ0X2Rlc2Moc2Rt YWMpOw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RtYWMtPnZjLmxvY2ssIGZsYWdz KTsNCj4gPiDCoH0NCj4gPiDCoA0KPiA+IMKgI2RlZmluZSBTRE1BX1NDUklQVF9BRERSU19BUlJB WV9TSVpFX1YxCTM0DQo+ID4gQEAgLTE2NTcsNyArMTc3MCw3IEBAIHN0YXRpYyBpbnQgc2RtYV9p bml0KHN0cnVjdCBzZG1hX2VuZ2luZQ0KPiA+ICpzZG1hKQ0KPiA+IMKgCWZvciAoaSA9IDA7IGkg PCBNQVhfRE1BX0NIQU5ORUxTOyBpKyspDQo+ID4gwqAJCXdyaXRlbF9yZWxheGVkKDAsIHNkbWEt PnJlZ3MgKyBTRE1BX0NITlBSSV8wICsgaSAqDQo+ID4gNCk7DQo+ID4gwqANCj4gPiAtCXJldCA9 IHNkbWFfcmVxdWVzdF9jaGFubmVsKCZzZG1hLT5jaGFubmVsWzBdKTsNCj4gPiArCXJldCA9IHNk bWFfcmVxdWVzdF9jaGFubmVsMChzZG1hKTsNCj4gPiDCoAlpZiAocmV0KQ0KPiA+IMKgCQlnb3Rv IGVycl9kbWFfYWxsb2M7DQo+ID4gwqANCj4gPiBAQCAtMTgxOSwyMiArMTkzMiwxNyBAQCBzdGF0 aWMgaW50IHNkbWFfcHJvYmUoc3RydWN0DQo+ID4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ IMKgCQlzdHJ1Y3Qgc2RtYV9jaGFubmVsICpzZG1hYyA9ICZzZG1hLT5jaGFubmVsW2ldOw0KPiA+ IMKgDQo+ID4gwqAJCXNkbWFjLT5zZG1hID0gc2RtYTsNCj4gPiAtCQlzcGluX2xvY2tfaW5pdCgm c2RtYWMtPmxvY2spOw0KPiA+IC0NCj4gPiAtCQlzZG1hYy0+Y2hhbi5kZXZpY2UgPSAmc2RtYS0+ ZG1hX2RldmljZTsNCj4gPiAtCQlkbWFfY29va2llX2luaXQoJnNkbWFjLT5jaGFuKTsNCj4gPiDC oAkJc2RtYWMtPmNoYW5uZWwgPSBpOw0KPiA+IC0NCj4gPiAtCQl0YXNrbGV0X2luaXQoJnNkbWFj LT50YXNrbGV0LA0KPiA+IG14Y19zZG1hX2hhbmRsZV9jaGFubmVsX25vcm1hbCwNCj4gPiAtCQkJ wqDCoMKgwqDCoCh1bnNpZ25lZCBsb25nKSBzZG1hYyk7DQo+ID4gKwkJc2RtYWMtPnN0YXR1cyA9 IERNQV9JTl9QUk9HUkVTUzsNCj4gPiArCQlzZG1hYy0+dmMuZGVzY19mcmVlID0gc2RtYV9kZXNj X2ZyZWU7DQo+ID4gKwkJSU5JVF9MSVNUX0hFQUQoJnNkbWFjLT5wZW5kaW5nKTsNCj4gPiDCoAkJ LyoNCj4gPiDCoAkJwqAqIEFkZCB0aGUgY2hhbm5lbCB0byB0aGUgRE1BQyBsaXN0LiBEbyBub3Qg YWRkDQo+ID4gY2hhbm5lbCAwIHRob3VnaA0KPiA+IMKgCQnCoCogYmVjYXVzZSB3ZSBuZWVkIGl0 IGludGVybmFsbHkgaW4gdGhlIFNETUENCj4gPiBkcml2ZXIuIFRoaXMgYWxzbyBtZWFucw0KPiA+ IMKgCQnCoCogdGhhdCBjaGFubmVsIDAgaW4gZG1hZW5naW5lIGNvdW50aW5nIG1hdGNoZXMNCj4g PiBzZG1hIGNoYW5uZWwgMS4NCj4gPiDCoAkJwqAqLw0KPiA+IMKgCQlpZiAoaSkNCj4gPiAtCQkJ bGlzdF9hZGRfdGFpbCgmc2RtYWMtPmNoYW4uZGV2aWNlX25vZGUsDQo+ID4gLQkJCQkJJnNkbWEt DQo+ID4gPmRtYV9kZXZpY2UuY2hhbm5lbHMpOw0KPiA+ICsJCQl2Y2hhbl9pbml0KCZzZG1hYy0+ dmMsICZzZG1hLT5kbWFfZGV2aWNlKTsNCj4gPiDCoAl9DQo+ID4gwqANCj4gPiDCoAlyZXQgPSBz ZG1hX2luaXQoc2RtYSk7DQo+ID4gQEAgLTE4NzksNyArMTk4Nyw3IEBAIHN0YXRpYyBpbnQgc2Rt YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlDQo+ID4gKnBkZXYpDQo+ID4gwqAJc2RtYS0+ ZG1hX2RldmljZS5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9DQo+ID4gc2RtYV9wcmVwX3NsYXZlX3Nn Ow0KPiA+IMKgCXNkbWEtPmRtYV9kZXZpY2UuZGV2aWNlX3ByZXBfZG1hX2N5Y2xpYyA9DQo+ID4g c2RtYV9wcmVwX2RtYV9jeWNsaWM7DQo+ID4gwqAJc2RtYS0+ZG1hX2RldmljZS5kZXZpY2VfY29u ZmlnID0gc2RtYV9jb25maWc7DQo+ID4gLQlzZG1hLT5kbWFfZGV2aWNlLmRldmljZV90ZXJtaW5h dGVfYWxsID0NCj4gPiBzZG1hX2Rpc2FibGVfY2hhbm5lbF93aXRoX2RlbGF5Ow0KPiA+ICsJc2Rt YS0+ZG1hX2RldmljZS5kZXZpY2VfdGVybWluYXRlX2FsbCA9DQo+ID4gc2RtYV90ZXJtaW5hdGVf YWxsOw0KPiA+IMKgCXNkbWEtPmRtYV9kZXZpY2Uuc3JjX2FkZHJfd2lkdGhzID0gU0RNQV9ETUFf QlVTV0lEVEhTOw0KPiA+IMKgCXNkbWEtPmRtYV9kZXZpY2UuZHN0X2FkZHJfd2lkdGhzID0gU0RN QV9ETUFfQlVTV0lEVEhTOw0KPiA+IMKgCXNkbWEtPmRtYV9kZXZpY2UuZGlyZWN0aW9ucyA9IFNE TUFfRE1BX0RJUkVDVElPTlM7DQo+ID4gQEAgLTE5MzksNyArMjA0Nyw4IEBAIHN0YXRpYyBpbnQg c2RtYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZQ0KPiA+ICpwZGV2KQ0KPiA+IMKgCWZv ciAoaSA9IDA7IGkgPCBNQVhfRE1BX0NIQU5ORUxTOyBpKyspIHsNCj4gPiDCoAkJc3RydWN0IHNk bWFfY2hhbm5lbCAqc2RtYWMgPSAmc2RtYS0+Y2hhbm5lbFtpXTsNCj4gPiDCoA0KPiA+IC0JCXRh c2tsZXRfa2lsbCgmc2RtYWMtPnRhc2tsZXQpOw0KPiA+ICsJCXRhc2tsZXRfa2lsbCgmc2RtYWMt PnZjLnRhc2spOw0KPiA+ICsJCXNkbWFfZnJlZV9jaGFuX3Jlc291cmNlcygmc2RtYWMtPnZjLmNo YW4pOw0KPiA+IMKgCX0NCj4gPiDCoA0KPiA+IMKgCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs IE5VTEwpOw0KPiA+IC0twqANCj4gPiAyLjcuNA0KPiA+IA0KPiA+IA0KPiA+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ID4gbGludXgtYXJtLWtlcm5l bCBtYWlsaW5nIGxpc3QNCj4gPiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcN Cj4gPiBodHRwczovL2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJs PWh0dHAlM0ElMkYlMkZsDQo+ID4gaXN0cy5pbmZyYWRlYWQub3JnJTJGbWFpbG1hbiUyRmxpc3Rp bmZvJTJGbGludXgtYXJtLQ0KPiA+IGtlcm5lbCZkYXRhPTAyJTdDMDElN0N5aWJpbi5nb25nJTQw bnhwLmNvbSU3QzMzMjNmNmFhZTc1ZTQ1YTMxNTVmMDgNCj4gPiBkNWJmY2MzMTRmJTdDNjg2ZWEx ZDNiYzJiNGM2ZmE5MmNkOTljNWMzMDE2MzUlN0MwJTdDMCU3QzYzNjYyNTgwNjA4DQo+ID4gMjM0 NzY2MCZzZGF0YT01ZURpclRnNGJvSmZ3MHp1MzIwZDlHWlRlZUR3bmZDUGZIRlk4SFh0MW5JJTNE JnJlc2Vydg0KPiA+IGVkPTANCj4gPgo=