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: [v8,1/3] dmaengine: fsl-edma: extract common fsl-edma code (no changes in behavior intended) From: Angelo Dureghello Message-Id: <20180810084327.GA3296@jerusalem> Date: Fri, 10 Aug 2018 10:43:27 +0200 To: Stefan Agner Cc: Krzysztof Kozlowski , vinod.koul@linaro.org, dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-m68k@vger.kernel.org List-ID: SGkgU3RlZmFuLAoKT24gRnJpLCBBdWcgMTAsIDIwMTggYXQgMTA6MDU6MDZBTSArMDIwMCwgU3Rl ZmFuIEFnbmVyIHdyb3RlOgo+IE9uIDEwLjA4LjIwMTggMDA6MzcsIEFuZ2VsbyBEdXJlZ2hlbGxv IHdyb3RlOgo+ID4gSGkgU3RlZmFuLAo+ID4gCj4gPiBpIGFtIGFib3V0IHRvIHBvc3QgYSB2OSBp biBzaG9ydC4KPiA+IAo+ID4gT24gVHVlLCBBdWcgMDcsIDIwMTggYXQgMDc6NDc6MTlQTSArMDIw MCwgU3RlZmFuIEFnbmVyIHdyb3RlOgo+ID4+IE9uIDA3LjA4LjIwMTggMTQ6MTQsIEtyenlzenRv ZiBLb3psb3dza2kgd3JvdGU6Cj4gPj4gPiBPbiA3IEF1Z3VzdCAyMDE4IGF0IDEwOjA4LCBTdGVm YW4gQWduZXIgPHN0ZWZhbkBhZ25lci5jaD4gd3JvdGU6Cj4gPj4gPj4gT24gMDMuMDguMjAxOCAy MTozMiwgQW5nZWxvIER1cmVnaGVsbG8gd3JvdGU6Cj4gPj4gPj4+IFRoaXMgcGF0Y2ggYWRkcyBh IG5ldyBmc2wtZWRtYS1jb21tb24gbW9kdWxlIHRvIGFsbG93IG5ldwo+ID4+ID4+PiBtY2YtZWRt YSBtb2R1bGUgY29kZSB0byB1c2UgbW9zdCBvZiB0aGUgZnNsLWVkbWEgY29kZS4KPiA+PiA+Pj4K PiA+PiA+Pj4gU2lnbmVkLW9mZi1ieTogQW5nZWxvIER1cmVnaGVsbG8gPGFuZ2Vsb0BzeXNhbS5p dD4KPiA+PiA+Pj4gLS0tCj4gPj4gPj4+IENoYW5nZXMgZm9yIHYyOgo+ID4+ID4+PiAtIHBhdGNo IHNwbGl0dGVkIGludG8gNAo+ID4+ID4+PiAtIGFkZCBtY2YtZWRtYSBhcyBtaW5pbWFsIGRpZmZl cmVudCBwYXJ0cyBmcm9tIGZzbC1lZG1hCj4gPj4gPj4+Cj4gPj4gPj4+IENoYW5nZXMgZm9yIHYz Ogo+ID4+ID4+PiBub25lCj4gPj4gPj4+Cj4gPj4gPj4+IENoYW5nZXMgZm9yIHY0Ogo+ID4+ID4+ PiAtIHBhdGNoIHNpbXBsaWZpZWQgZnJvbSA0LzQgaW50byAyLzIKPiA+PiA+Pj4gLSBjb2xsZWN0 aW5nIGFsbCB0aGUgbWNmLWVkbWEtcmVsYXRlZCBjaGFuZ2VzCj4gPj4gPj4+Cj4gPj4gPj4+IENo YW5nZXMgZm9yIHY1Ogo+ID4+ID4+PiBub25lCj4gPj4gPj4+Cj4gPj4gPj4+IENoYW5nZXMgZm9y IHY2Ogo+ID4+ID4+PiAtIGFkanVzdGVkIGNvbW1lbnQgaGVhZGVyCj4gPj4gPj4+IC0gZml4ZWQg Yml0IHNoaWZ0IHdpdGggQklUKCkKPiA+PiA+Pj4gLSB3ZSBuZWVkIHRvIGZyZWUgdGhlIGludGVy cnVwdHMgYXQgcmVtb3ZlKCksIHNvIHJlbW92ZWQgYWxsIGRldm1fCj4gPj4gPj4+ICAgaW50ZXJy dXB0IHJlbGF0ZWQgY2FsbHMKPiA+PiA+Pj4KPiA+PiA+Pj4gQ2hhbmdlcyBmb3Igdjc6Cj4gPj4g Pj4+IG5vbmUKPiA+PiA+Pj4KPiA+PiA+Pj4gQ2hhbmdlcyBmb3Igdjg6Cj4gPj4gPj4+IC0gcGF0 Y2ggcmV3cml0dGVuIGZyb20gc2NyYXRjaCwgc3BsaXR0ZWQgaW50byAzLCBjb21tb24gY29kZSBp c29sYXRlZCwKPiA+PiA+Pj4gICBtaW5pbWFsIGNoYW5nZXMgZnJvbSB0aGUgb3JpZ2luYWwgRnJl ZXNjYWxlIGNvZGUgaGF2ZSBiZWVuIGRvbmUuCj4gPj4gPj4+ICAgVGhlIHBhdGNoIGhhcyBiZWVu IHRlc3RlZCB3aXRoIGJvdGggSXJpcyArIENvbGlicmkgVnlicmlkIFZGNTAgYW5kCj4gPj4gPj4+ ICAgc3RtYXJrMi9tY2Y1NDQxNSBDb2xkZmlyZSBib2FyZHMuCj4gPj4gPj4+IC0tLQo+ID4+ID4+ PiAgZHJpdmVycy9kbWEvTWFrZWZpbGUgICAgICAgICAgfCAgIDIgKy0KPiA+PiA+Pj4gIGRyaXZl cnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5jIHwgNTc2ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiA+PiA+Pj4gIGRyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5oIHwgMTk2ICsrKysrKysr KysKPiA+PiA+Pj4gIGRyaXZlcnMvZG1hL2ZzbC1lZG1hLmMgICAgICAgIHwgNjk3ICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+PiA+Pj4gIDQgZmlsZXMgY2hhbmdlZCwgNzc0 IGluc2VydGlvbnMoKyksIDY5NyBkZWxldGlvbnMoLSkKPiA+PiA+Pj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYwo+ID4+ID4+PiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5oCj4gPj4gPj4+Cj4gPj4gPj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL01ha2VmaWxlCj4g Pj4gPj4+IGluZGV4IDIwM2E5OWQ2ODMxNS4uNjYwMjJmNTlmY2E0IDEwMDY0NAo+ID4+ID4+PiAt LS0gYS9kcml2ZXJzL2RtYS9NYWtlZmlsZQo+ID4+ID4+PiArKysgYi9kcml2ZXJzL2RtYS9NYWtl ZmlsZQo+ID4+ID4+PiBAQCAtMzEsNyArMzEsNyBAQCBvYmotJChDT05GSUdfRFdfQVhJX0RNQUMp ICs9IGR3LWF4aS1kbWFjLwo+ID4+ID4+PiAgb2JqLSQoQ09ORklHX0RXX0RNQUNfQ09SRSkgKz0g ZHcvCj4gPj4gPj4+ICBvYmotJChDT05GSUdfRVA5M1hYX0RNQSkgKz0gZXA5M3h4X2RtYS5vCj4g Pj4gPj4+ICBvYmotJChDT05GSUdfRlNMX0RNQSkgKz0gZnNsZG1hLm8KPiA+PiA+Pj4gLW9iai0k KENPTkZJR19GU0xfRURNQSkgKz0gZnNsLWVkbWEubwo+ID4+ID4+PiArb2JqLSQoQ09ORklHX0ZT TF9FRE1BKSArPSBmc2wtZWRtYS5vIGZzbC1lZG1hLWNvbW1vbi5vCj4gPj4gPj4+ICBvYmotJChD T05GSUdfRlNMX1JBSUQpICs9IGZzbF9yYWlkLm8KPiA+PiA+Pj4gIG9iai0kKENPTkZJR19IU1Vf RE1BKSArPSBoc3UvCj4gPj4gPj4+ICBvYmotJChDT05GSUdfSU1HX01EQ19ETUEpICs9IGltZy1t ZGMtZG1hLm8KPiA+PiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1v bi5jIGIvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMKPiA+PiA+Pj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiA+PiA+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wYWU3MDk0ZjQ3N2EKPiA+PiA+ Pj4gLS0tIC9kZXYvbnVsbAo+ID4+ID4+PiArKysgYi9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21t b24uYwo+ID4+ID4+PiBAQCAtMCwwICsxLDU3NiBAQAo+ID4+ID4+PiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKPiA+PiA+Pj4gKy8vCj4gPj4gPj4+ICsvLyBDb3B5cmlnaHQg KGMpIDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCj4gPj4gPj4+ICsvLyBD b3B5cmlnaHQgKGMpIDIwMTcgU3lzYW0sIEFuZ2VsbyBEdXJlZ2hlbGxvICA8YW5nZWxvQHN5c2Ft Lml0Pgo+ID4+ID4+PiArCj4gPj4gPj4+ICsjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgo+ID4+ ID4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4+ID4+PiArI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KPiA+PiA+Pj4gKwo+ID4+ID4+PiArI2luY2x1ZGUgImZzbC1lZG1hLWNvbW1vbi5o Igo+ID4+ID4+PiArCj4gPj4gPj4+ICsvKgo+ID4+ID4+PiArICogUi9XIGZ1bmN0aW9ucyBmb3Ig YmlnLSBvciBsaXR0bGUtZW5kaWFuIHJlZ2lzdGVyczoKPiA+PiA+Pj4gKyAqIFRoZSBlRE1BIGNv bnRyb2xsZXIncyBlbmRpYW4gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIENQVSBjb3JlJ3MgZW5kaWFu Lgo+ID4+ID4+PiArICogRm9yIHRoZSBiaWctZW5kaWFuIElQIG1vZHVsZSwgdGhlIG9mZnNldCBm b3IgOC1iaXQgb3IgMTYtYml0IHJlZ2lzdGVycwo+ID4+ID4+PiArICogc2hvdWxkIGFsc28gYmUg c3dhcHBlZCBvcHBvc2l0ZSB0byB0aGF0IGluIGxpdHRsZS1lbmRpYW4gSVAuCj4gPj4gPj4+ICsg Ki8KPiA+PiA+Pj4gK3UzMiBlZG1hX3JlYWRsKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEs IHZvaWQgX19pb21lbSAqYWRkcikKPiA+PiA+Pj4gK3sKPiA+PiA+Pj4gKyAgICAgaWYgKGVkbWEt PmJpZ19lbmRpYW4pCj4gPj4gPj4+ICsgICAgICAgICAgICAgcmV0dXJuIGlvcmVhZDMyYmUoYWRk cik7Cj4gPj4gPj4+ICsgICAgIGVsc2UKPiA+PiA+Pj4gKyAgICAgICAgICAgICByZXR1cm4gaW9y ZWFkMzIoYWRkcik7Cj4gPj4gPj4+ICt9Cj4gPj4gPj4+ICtFWFBPUlRfU1lNQk9MX0dQTChlZG1h X3JlYWRsKTsKPiA+PiA+Pgo+ID4+ID4+IEluIDMvMyB5b3UgbGluayB0aGUgY29tbW9uIG9iamVj dCBpbnRvIHRoZSB0d28gbW9kdWxlcyBpbmRpdmlkdWFsbHk6Cj4gPj4gPj4KPiA+PiA+PiBvYmot JChDT05GSUdfRlNMX0VETUEpICs9IGZzbC1lZG1hLm8gZnNsLWVkbWEtY29tbW9uLm8KPiA+PiA+ PiBvYmotJChDT05GSUdfTUNGX0VETUEpICs9IG1jZi1lZG1hLm8gZnNsLWVkbWEtY29tbW9uLm8K PiA+PiA+Pgo+ID4+ID4+IFRoZXJlZm9yIHlvdSBkbyBub3QgYWNjZXNzIHRob3NlIGZ1bmN0aW9u cyBmcm9tIGFub3RoZXIgbW9kdWxlICh0aGV5IGFyZQo+ID4+ID4+IHdpdGhpbiB0aGUgbW9kdWxl KS4gTm8gZXhwb3J0aW5nIHNob3VsZCBiZSBuZWNlc3NhcnkuIERyb3AgYWxsIHRob3NlCj4gPj4g Pj4gZXhwb3J0cy4KPiA+PiA+Cj4gPj4gPiBUaGUgZnNsLWVkbWEtY29tbW9uIHdpbGwgYmUgaXRz IG93biBtb2R1bGUgc28gdGhlIGV4cG9ydHMgYXJlCj4gPj4gPiBuZWNlc3NhcnkgZm9yIHByb3Bl ciBsaW5raW5nL21vZHBvc3QuCj4gPj4KPiA+PiBIbSwgb2ggSSBzZWUsIEkgZ290IHRoYXQgd3Jv bmcuCj4gPj4KPiA+PiBXZSBjb3VsZCB1c2UKPiA+PiBmc2wtZWRtYS1hbGwteSA9IGZzbC1lZG1h Lm8gZnNsLWVkbWEtY29tbW9uLm8KPiA+PiBvYmotJChDT05GSUdfRlNMX0VETUEpICs9IGZzbC1l ZG1hLWFsbC5vCj4gPj4gbWNmLWVkbWEtYWxsLXkgPSBtY2YtZWRtYS5vIGZzbC1lZG1hLWNvbW1v bi5vCj4gPj4gb2JqLSQoQ09ORklHX01DRl9FRE1BKSArPSBtY2YtZWRtYS1hbGwubwo+ID4+Cj4g Pj4gdG8gY3JlYXRlIHR3byBtb2R1bGVzIGJ1dCB0aGF0IGR1cGxpY2F0ZXMgc29tZSBjb2RlLiBJ dCBwcm9iYWJseQo+ID4+IHdvdWxkbid0IG1hdHRlciBpbiBwcmFjdGlzZSBzaW5jZSB0aGUgdHdv IElQcyBhcmUgdXNlZCBvbiBkaWZmZXJlbnQKPiA+PiBhcmNoaXRlY3R1cmUuLi4KPiA+Pgo+ID4+ IEhvd2V2ZXIsIGlmIHdlIHN0YXkgd2l0aCB0aGUgdGhyZWUgbW9kdWxlcyBhcHByb2FjaCwgd2Ug c2hvdWxkIGludHJvZHVjZQo+ID4+IGEgaGlkZGVuIGNvbmZpZyBzeW1ib2wsIGUuZy4KPiA+Pgo+ ID4+IGNvbmZpZyBGU0xfRURNQV9DT01NT04KPiA+PiAJdHJpc3RhdGUKPiA+Pgo+ID4+IEluIEZT TF9FRE1BL01DRl9FRE1BIHVzZQo+ID4+IAlzZWxlY3QgRlNMX0VETUFfQ09NTU9OCj4gPj4KPiA+ PiBBbmQgaW4gdGhlIE1ha2VmaWxlCj4gPj4gb2JqLSQoQ09ORklHX0ZTTF9FRE1BX0NPTU1PTikg Kz0gZnNsLWVkbWEtY29tbW9uLm8KPiA+PiBvYmotJChDT05GSUdfRlNMX0VETUEpICs9IGZzbC1l ZG1hLm8KPiA+PiBvYmotJChDT05GSUdfTUNGX0VETUEpICs9IG1jZi1lZG1hLm8KPiA+Pgo+ID4+ Cj4gPiBUaGVyZSB3YXMgYWxyZWFkeSBhIGRpc2N1c3Npb24gd2l0aCBWaW5vZCBhbmQgR2VlcnQg b24gdGhpcywgYW5kIGkgCj4gPiBmaW5hbGx5IHByZXZpb3VzbHkgY2hhbmdlZCB0aGluZ3MgaW4g dGhpcyB3YXkgCj4gPiAKPiA+IG9iai0kKENPTkZJR19GU0xfRURNQSkgKz0gZnNsLWVkbWEubyBm c2wtZWRtYS1jb21tb24ubwo+ID4gCj4gPiBUaGUgaWRlYSB3YXMgdG8gc2ltcGxpZnkgdGhpbmdz IGF2b2lkaW5nIHRvIHVzZSBhbiBhZGRpdGlvbmFsCj4gPiBjb25maWcgc3ltYm9sLCBhcyBpIGRp ZCBpbml0aWFsbHkuIEl0J3MgYSBjb21tb24gcGF0dGVybiBpbiAKPiA+IHNldmVyYWwgTWFrZWZp bGVzIChlLmcuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9NYWtlZmlsZSBhbmQgCj4gPiBkcml2 ZXJzL3Njc2kvTWFrZWZpbGUpLgo+ID4gQWxzbyB3ZSBoYXZlIGEgc2luZ2xlIGNvbW1vbiBjb2Rl IHBhcnQgc2luY2Ugb2JqLXkgaXMgYSBsaXN0LCAKPiA+IGFuZCBJSVJDIGl0J3MgZmlsdGVyZWQg Zm9yIGR1cGxpY2F0ZXMuCj4gPiBTbyBpZiBjYW4gYmUgb2sgZm9yIHlvdSB0b28sIGkgd291bGQg bm90IHJvbGwgYmFjayBhZ2Fpbi4KPiA+IAo+IAo+IEkgc2VlLCB5b3UgcmVmZXIgdG8gdGhpcyBk aXNjdXNzaW9uOgo+IGh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2RtYWVuZ2luZS9tc2cx NTg2My5odG1sCj4gCj4gU2hvdWxkIGhhdmUgZm9sbG93ZWQgdXAgb24gdGhvc2UgZGlzY3Vzc2lv bnMsIHNvcnJ5LiBMZWF2ZSBpdCBhcyBpcwo+IHRoZW4uCj4gCj4gPj4gSG93ZXZlciwgSSBkbyBu b3QgbGlrZSB0aGF0IHRoZSBjb21waWxlciBjYW4gbm8gbG9uZ2VyIGlubGluZSBzaW1wbGUKPiA+ PiBhY2Vzb3JzIGxpa2UgZWRtYV8ocmVhZGx8d3JpdGVsKS4gU28gaWYgd2Ugc3RheSB3aXRoIHRo ZSB0aHJlZSBtb2R1bGVzCj4gPj4gYXBwcm9hY2ggdGhlbiBtb3ZlIGF0IGxlYXN0IHRoZSBhY2Nl c29ycyBhbmQKPiA+PiB0b19mc2xfZWRtYV9jaGFuL3RvX2ZzbF9lZG1hX2Rlc2MgYXMgaW5saW5l IGZ1bmN0aW9ucyB0byB0aGUgaGVhZGVyCj4gPj4gZmlsZS4KPiA+Pgo+ID4gSSBhZ3JlZSB0b28s IG15IGluaXRpYWwgcGF0Y2ggd2FzIGEgc2luZ2xlIHNlcGFyYXRlIGRyaXZlci4gQnV0IGl0Cj4g PiByZXN1bHRlZCBpbiB0b28gbXVjaCBkdXBsaWNhdGVkIGNvZGUsIHNvIGEgY29tbW9uIG1vZHVs ZSBoYXMgYmVlbgo+ID4gcmVxdWlyZWQuIEJ0dywgc2VlbXMgaSBjYW5ub3QgaW5saW5lIHRob3Nl IGZ1bmN0aW9ucy4gZnNsLWVkbWEtY29tbW9uLmggCj4gPiBpcyBpbmNsdWRlZCBmcm9tIGJvdGgg ZnNsLWVkbWEtY29tbW9uLmMgYW5kIG1jZi9mc2wtZWRtYS5jIHJlc3VsdGluZwo+ID4gaW4gbXVs dGlwbGUgZGVmaW5pdGlvbnMgbGlua2luZyBlcnJvci4KPiAKPiBJIGFncmVlLCB3ZSBzaG91bGQg aW50cm9kdWNlIHRoZSBjb21tb24gbW9kdWxlIGFuZCBzaGFyZSBhcyBtdWNoIGFzCj4gcG9zc2li bGUuCj4gCj4gSnVzdCB0aG9zZSBzbWFsbCBhY2Nlc3NvcnMgdHlwaWNhbGx5IGdldCBpbmxpbmVk IGJ5IHRoZSBjb21waWxlciwgYW5kCj4gb2Z0ZW4gY29sbGFwc2UgY29tcGxldGVseSBpbiBvcHRp bWl6YXRpb24gcGhhc2VzIChlLmcuIGEgZnVuY3Rpb24gY2FsbAo+IGhhcyBtb3JlIG92ZXJoZWFk IHRoYW4ganVzdCBpbmxpbmluZyB0aGVtLCBtYWtpbmcgcmVzdWx0aW5nIGNvZGUgc21hbGxlcgo+ IGFuZCBmYXN0ZXIpLgo+IAo+IEp1c3QgZGVmaW5lIHRoZW0gYXMgc3RhdGljIGlubGluZSwgdGhl biBpdCB3b24ndCBsZWFkIHRvIGxpbmtpbmcgZXJyb3JzLgo+IAo+IEkgdHJpZWQgd2l0aCB0aGlz IGNoYW5nZSBpbiBmc2wtZWRtYS1jb21tb24uaCAoYW5kIHJlbW92ZSB0aGVtIGZyb20KPiBmc2wt ZWRtYS1jb21tb24uYyk6Cj4gCj4gLXUzMiBlZG1hX3JlYWRsKHN0cnVjdCBmc2xfZWRtYV9lbmdp bmUgKmVkbWEsIHZvaWQgX19pb21lbSAqYWRkcik7Cj4gLXZvaWQgZWRtYV93cml0ZWIoc3RydWN0 IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTggdmFsLCB2b2lkIF9faW9tZW0KPiAqYWRkcik7Cj4g LXZvaWQgZWRtYV93cml0ZXcoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTE2IHZhbCwg dm9pZCBfX2lvbWVtCj4gKmFkZHIpOwo+IC12b2lkIGVkbWFfd3JpdGVsKHN0cnVjdCBmc2xfZWRt YV9lbmdpbmUgKmVkbWEsIHUzMiB2YWwsIHZvaWQgX19pb21lbQo+ICphZGRyKTsKPiAtCj4gLXN0 cnVjdCBmc2xfZWRtYV9jaGFuICp0b19mc2xfZWRtYV9jaGFuKHN0cnVjdCBkbWFfY2hhbiAqY2hh bik7Cj4gLXN0cnVjdCBmc2xfZWRtYV9kZXNjICp0b19mc2xfZWRtYV9kZXNjKHN0cnVjdCB2aXJ0 X2RtYV9kZXNjICp2ZCk7Cj4gKy8qCj4gKyAqIFIvVyBmdW5jdGlvbnMgZm9yIGJpZy0gb3IgbGl0 dGxlLWVuZGlhbiByZWdpc3RlcnM6Cj4gKyAqIFRoZSBlRE1BIGNvbnRyb2xsZXIncyBlbmRpYW4g aXMgaW5kZXBlbmRlbnQgb2YgdGhlIENQVSBjb3JlJ3MKPiBlbmRpYW4uCj4gKyAqIEZvciB0aGUg YmlnLWVuZGlhbiBJUCBtb2R1bGUsIHRoZSBvZmZzZXQgZm9yIDgtYml0IG9yIDE2LWJpdAo+IHJl Z2lzdGVycwo+ICsgKiBzaG91bGQgYWxzbyBiZSBzd2FwcGVkIG9wcG9zaXRlIHRvIHRoYXQgaW4g bGl0dGxlLWVuZGlhbiBJUC4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGVkbWFfcmVhZGwo c3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdm9pZCBfX2lvbWVtCj4gKmFkZHIpCj4gK3sK PiArICAgICAgIGlmIChlZG1hLT5iaWdfZW5kaWFuKQo+ICsgICAgICAgICAgICAgICByZXR1cm4g aW9yZWFkMzJiZShhZGRyKTsKPiArICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgcmV0dXJu IGlvcmVhZDMyKGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZWRtYV93cml0 ZWIoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTggdmFsLAo+IHZvaWQgX19pb21lbSAq YWRkcikKPiArewo+ICsgICAgICAgLyogc3dhcCB0aGUgcmVnIG9mZnNldCBmb3IgdGhlc2UgaW4g YmlnLWVuZGlhbiBtb2RlICovCj4gKyAgICAgICBpZiAoZWRtYS0+YmlnX2VuZGlhbikKPiArICAg ICAgICAgICAgICAgaW93cml0ZTgodmFsLCAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25n KWFkZHIgXgo+IDB4MykpOwo+ICsgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICBpb3dyaXRl OCh2YWwsIGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZWRtYV93cml0ZXco c3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTE2IHZhbCwKPiB2b2lkIF9faW9tZW0gKmFk ZHIpCj4gK3sKPiArICAgICAgIC8qIHN3YXAgdGhlIHJlZyBvZmZzZXQgZm9yIHRoZXNlIGluIGJp Zy1lbmRpYW4gbW9kZSAqLwo+ICsgICAgICAgaWYgKGVkbWEtPmJpZ19lbmRpYW4pCj4gKyAgICAg ICAgICAgICAgIGlvd3JpdGUxNmJlKHZhbCwgKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9u ZylhZGRyIF4KPiAweDIpKTsKPiArICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgaW93cml0 ZTE2KHZhbCwgYWRkcik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBlZG1hX3dyaXRl bChzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1MzIgdmFsLAo+IHZvaWQgX19pb21lbSAq YWRkcikKPiArewo+ICsgICAgICAgaWYgKGVkbWEtPmJpZ19lbmRpYW4pCj4gKyAgICAgICAgICAg ICAgIGlvd3JpdGUzMmJlKHZhbCwgYWRkcik7Cj4gKyAgICAgICBlbHNlCj4gKyAgICAgICAgICAg ICAgIGlvd3JpdGUzMih2YWwsIGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVj dCBmc2xfZWRtYV9jaGFuICp0b19mc2xfZWRtYV9jaGFuKHN0cnVjdCBkbWFfY2hhbgo+ICpjaGFu KQo+ICt7Cj4gKyAgICAgICByZXR1cm4gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBmc2xfZWRt YV9jaGFuLCB2Y2hhbi5jaGFuKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZnNs X2VkbWFfZGVzYyAqdG9fZnNsX2VkbWFfZGVzYyhzdHJ1Y3QKPiB2aXJ0X2RtYV9kZXNjICp2ZCkK PiArewo+ICsgICAgICAgcmV0dXJuIGNvbnRhaW5lcl9vZih2ZCwgc3RydWN0IGZzbF9lZG1hX2Rl c2MsIHZkZXNjKTsKPiArfQo+IAo+IAo+IEFsbCB0aHJlZSBrZXJuZWwgbW9kdWxlcyBlbmQgdXAg YmVpbmcgc21hbGxlciAob3ZlcmFsbCBtb3JlIHRoYW4gMWtCKSwKPiBzbyB0aGUgY29tcGlsZXIg cmVhbGx5IGRvZXMgaXRzIG1hZ2ljLgo+CkdyZWF0LCB3aWxsIGNoYW5nZSBhcyBhYm92ZS4KIAo+ ID4gCj4gPiBNYWlubHkgdW50aWwgdjcgdGhlcmUgd2FzIHNldmVyYWwgZGlzY3Vzc2lvbnMgYW5k IGEgZmlyc3QgYXBwcm92YWwsIAo+ID4gaWYgcG9zc2libGUgaSB3b3VsZCBub3QgY2hhbmdlIGFn YWluIGhlYXZpbHkgdGhlIHBhdGNoIHN0cnVjdHVyZSBmb3IKPiA+IGEgYnVnIHRoYXQgc2VlbXNz IGFscmVhZHkgYmVlbiBmaXhlZC4KPiA+IAo+ID4gU28gaSBmaXhlZCBhbGwgdGhlIHBvc3NpYmxl IHBvaW50cyBvZiB0aGlzIHRocmVhZCBhbmQgb3JnYW5pemVkIG5leHQgCj4gPiBwYXRjaCBhcyAK PiA+IAo+ID4gMS80IGRtYWVuZ2luZTogZnNsLWVkbWE6IGV4dHJhY3QgY29tbW9uIGZzbC1lZG1h IGNvZGUgKG5vIGNoYW5nZXMgLi4KPiA+IDIvNCBkbWFlbmdpbmU6IGZzbC1lZG1hOiBhZGQgZWRt YSB2ZXJzaW9uIGFuZCBjb25maWd1cmFibGUgcmVnaXN0ZXJzCj4gPiAzLzQgZG1hZW5naW5lOiBm c2wtZWRtYTogZml4IG1hY3Jvcwo+ID4gNC80IGRtYWVuZ2luZTogZnNsLWVkbWE6IGFkZCBDb2xk RmlyZSBtY2Y1NDQxeCBlZG1hIHN1cHBvcnQKPiAKPiBUaGF0IHNlZW1zIHNlbnNpYmxlLiBPbmUg bWlub3Igbml0IGluIEtjb25maWcgc3RpbGw6Cj4gCj4gLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZp Zwo+ICsrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKPiBAQCAtMzIwLDYgKzMyMCwxNyBAQCBjb25m aWcgTFBDMThYWF9ETUFNVVgKPiAgICAgICAgRW5hYmxlIHN1cHBvcnQgZm9yIERNQSBvbiBOWFAg TFBDMTh4eC80M3h4IHBsYXRmb3Jtcwo+ICAgICAgICB3aXRoIFBMMDgwIGFuZCBtdWx0aXBsZXhl ZCBETUEgcmVxdWVzdCBsaW5lcy4KPiAgCj4gK2NvbmZpZyBNQ0ZfRURNQQo+ICsgICAgdHJpc3Rh dGUgIkZyZWVzY2FsZSBlRE1BIGVuZ2luZSBzdXBwb3J0LCBDb2xkRmlyZSBtY2Y1NDQxeCBTb0Nz Igo+ICsgICAgZGVwZW5kcyBvbiBNNTQ0MXgKPiAKPiBDYW4geW91IGFkZCAiIHx8IENPTVBJTEVf VEVTVCIgaGVyZSwgdGhpcyBoZWxwcyBmb3IgYXV0b21hdGVkIHRlc3RpbmcuCj4gCgpUaGUgY29t cGlsZSB0ZXN0IHJvYm90IGlzIGFscmVhZHkgYmVpbmcgcnVuLCBub3Qgc3VyZSB3aHkuIApJIGNh biBhZGQgaXQgYW55d2F5LgoKT2ssIHNvIGlmIG5vIG90aGVyIHBvaW50cywgaSB3aWxsIHByb2Nl ZWQgb24gYSB2OSBhZnRlciB0aGVzZSAyIGNoYW5nZXMuCgo+IC0tCj4gU3RlZmFuCj4gCj4gPiAK PiA+IExldCBtZSBrbm93IGlmIHlvdSBoYXZlIGFueSBvdGhlciBwb2ludCBvciBpZiBjYW4gcHJv Y2VlZC4KPiA+IAo+ID4gQmVzdCByZWdhcmRzLAo+ID4gQW5nZWxvIER1cmVnaGVsbG8KPiA+IAo+ ID4+IC0tCj4gPj4gU3RlZmFuCj4gPj4KPiA+PiA+Cj4gPj4gPiBCZXN0IHJlZ2FyZHMsCj4gPj4g PiBLcnp5c3p0b2YKPiA+PiA+Cj4gPj4gPj4gSWYgcG9zc2libGUgSSB3b3VsZCBwcmVmZXIgaWYg eW91IHN0YXJ0IHdpdGggY2xlYW51cC9jb252ZXJzaW9ucywgdGhlbgo+ID4+ID4+IHNwbGl0LXVw IGFuZCBmaW5hbGx5IGFkZCBmdW5jdGlvbmFsaXR5Lgo+ID4+ID4+Cj4gPj4gPj4gU28gaWRlYWxs eToKPiA+PiA+PiAxLiBVc2UgbWFjcm9zIGZvciBwcmVwcm9jZXNzb3IgZGVmaW5lcyAod2hlcmUg eW91IG1vdmUgdG8gQklUL0dFTk1BU0spCj4gPj4gPj4gMi4gU3BsaXQKPiA+PiA+PiAzLiBBZGQg RURNQSBtYWNyb3MgZXRjLgo+ID4+ID4+IDQuIEFkZCBDb2xkRmlyZSBtY2Y1NDQxeCBlZG1hIHN1 cHBvcnQKPiA+PiA+Pgo+ID4+IC0tCj4gPj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6 IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LW02OGsiIGluCj4gPj4gdGhlIGJvZHkg b2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKPiA+PiBNb3JlIG1ham9y ZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK ClJlZ2FyZHMsCkFuZ2VsbyBEdXJlZ2hlbGxvCg==