From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=40762 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PlfG3-0008IH-Us for qemu-devel@nongnu.org; Sat, 05 Feb 2011 05:20:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PlfG1-00036O-Tq for qemu-devel@nongnu.org; Sat, 05 Feb 2011 05:20:47 -0500 Received: from mail-pz0-f45.google.com ([209.85.210.45]:33439) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PlfG1-000366-Fs for qemu-devel@nongnu.org; Sat, 05 Feb 2011 05:20:45 -0500 Received: by pzk2 with SMTP id 2so712669pzk.4 for ; Sat, 05 Feb 2011 02:20:44 -0800 (PST) MIME-Version: 1.0 In-Reply-To: <7ec6f2018811566a4b207c4f5b8d7b8b7342b786.1296321798.git.eduard.munteanu@linux360.ro> References: <7ec6f2018811566a4b207c4f5b8d7b8b7342b786.1296321798.git.eduard.munteanu@linux360.ro> From: Blue Swirl Date: Sat, 5 Feb 2011 10:20:23 +0000 Message-ID: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Subject: [Qemu-devel] Re: [PATCH 01/13] Generic DMA memory access interface List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eduard - Gabriel Munteanu Cc: kvm@vger.kernel.org, mst@redhat.com, joro@8bytes.org, seabios@seabios.org, qemu-devel@nongnu.org, yamahata@valinux.co.jp, kevin@koconnor.net, avi@redhat.com, paul@codesourcery.com T24gVGh1LCBGZWIgMywgMjAxMSBhdCAxMTozMiBQTSwgRWR1YXJkIC0gR2FicmllbCBNdW50ZWFu dQo8ZWR1YXJkLm11bnRlYW51QGxpbnV4MzYwLnJvPiB3cm90ZToKPiBUaGlzIGludHJvZHVjZXMg cmVwbGFjZW1lbnRzIGZvciBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucyBsaWtlCj4gY3B1X3BoeXNp Y2FsX21lbW9yeV9yZWFkKCkuIFRoZSBuZXcgaW50ZXJmYWNlIGNhbiBoYW5kbGUgYWRkcmVzcwo+ IHRyYW5zbGF0aW9uIGFuZCBhY2Nlc3MgY2hlY2tpbmcgdGhyb3VnaCBhbiBJT01NVS4KPgo+IFNp Z25lZC1vZmYtYnk6IEVkdWFyZCAtIEdhYnJpZWwgTXVudGVhbnUgPGVkdWFyZC5tdW50ZWFudUBs aW51eDM2MC5ybz4KPiAtLS0KPiDCoE1ha2VmaWxlLnRhcmdldCB8IMKgIMKgMiArLQo+IMKgaHcv ZG1hX3J3LmMgwqAgwqAgfCDCoDEyNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gwqBody9kbWFfcncuaCDCoCDCoCB8IMKgMTU3ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiDCoDMgZmlsZXMgY2hhbmdl ZCwgMjgyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCj4gwqBjcmVhdGUgbW9kZSAxMDA2 NDQgaHcvZG1hX3J3LmMKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBody9kbWFfcncuaAo+Cj4gZGlm ZiAtLWdpdCBhL01ha2VmaWxlLnRhcmdldCBiL01ha2VmaWxlLnRhcmdldAo+IGluZGV4IGUxNWIx YzQuLmU1ODE3YWIgMTAwNjQ0Cj4gLS0tIGEvTWFrZWZpbGUudGFyZ2V0Cj4gKysrIGIvTWFrZWZp bGUudGFyZ2V0Cj4gQEAgLTIxOCw3ICsyMTgsNyBAQCBvYmotaTM4Ni15ICs9IGNpcnJ1c192Z2Eu byBhcGljLm8gaW9hcGljLm8gcGlpeF9wY2kubwo+IMKgb2JqLWkzODYteSArPSB2bW1vdXNlLm8g dm1wb3J0Lm8gaHBldC5vIGFwcGxlc21jLm8KPiDCoG9iai1pMzg2LXkgKz0gZGV2aWNlLWhvdHBs dWcubyBwY2ktaG90cGx1Zy5vIHNtYmlvcy5vIHdkdF9pYjcwMC5vCj4gwqBvYmotaTM4Ni15ICs9 IGRlYnVnY29uLm8gbXVsdGlib290Lm8KPiAtb2JqLWkzODYteSArPSBwY19waWl4Lm8KPiArb2Jq LWkzODYteSArPSBwY19waWl4Lm8gZG1hX3J3Lm8KPiDCoG9iai1pMzg2LSQoQ09ORklHX1NQSUNF KSArPSBxeGwubyBxeGwtbG9nZ2VyLm8gcXhsLXJlbmRlci5vCj4KPiDCoCMgc2hhcmVkIG9iamVj dHMKPiBkaWZmIC0tZ2l0IGEvaHcvZG1hX3J3LmMgYi9ody9kbWFfcncuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZWY4ZTdmOAo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9ody9kbWFfcncuYwo+IEBAIC0wLDAgKzEsMTI0IEBACj4gKy8qCj4gKyAqIEdlbmVyaWMgRE1B IG1lbW9yeSBhY2Nlc3MgaW50ZXJmYWNlLgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTEg RWR1YXJkIC0gR2FicmllbCBNdW50ZWFudQo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5 Cj4gKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCj4gKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKPiAr ICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLCBhbmQvb3Igc2VsbAo+ICsgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKPiArICogZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF Ugo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCj4gKyAq IFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiZG1hX3J3LmgiCj4gKyNpbmNs dWRlICJyYW5nZS5oIgo+ICsKPiArc3RhdGljIHZvaWQgZG1hX3JlZ2lzdGVyX21lbW9yeV9tYXAo RE1BRGV2aWNlICpkZXYsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoGRtYV9hZGRyX3QgYWRkciwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZG1hX2FkZHJfdCBsZW4sCj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRhcmdldF9w aHlzX2FkZHJfdCBwYWRkciwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgRE1BSW52YWxpZGF0ZU1hcEZ1bmMgKmludmFsaWRhdGUsCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHZvaWQg KmludmFsaWRhdGVfb3BhcXVlKQo+ICt7Cj4gKyDCoCDCoERNQU1lbW9yeU1hcCAqbWFwOwo+ICsK PiArIMKgIMKgbWFwID0gcWVtdV9tYWxsb2Moc2l6ZW9mKERNQU1lbW9yeU1hcCkpOwo+ICsgwqAg wqBtYXAtPmFkZHIgwqAgwqAgwqAgwqAgwqAgwqAgwqAgPSBhZGRyOwo+ICsgwqAgwqBtYXAtPmxl biDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoD0gbGVuOwo+ICsgwqAgwqBtYXAtPnBhZGRyIMKgIMKg IMKgIMKgIMKgIMKgIMKgPSBwYWRkcjsKPiArIMKgIMKgbWFwLT5pbnZhbGlkYXRlIMKgIMKgIMKg IMKgID0gaW52YWxpZGF0ZTsKPiArIMKgIMKgbWFwLT5pbnZhbGlkYXRlX29wYXF1ZSDCoD0gaW52 YWxpZGF0ZV9vcGFxdWU7Cj4gKwo+ICsgwqAgwqBRTElTVF9JTlNFUlRfSEVBRCgmZGV2LT5tbXUt Pm1lbW9yeV9tYXBzLCBtYXAsIGxpc3QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkbWFfdW5y ZWdpc3Rlcl9tZW1vcnlfbWFwKERNQURldmljZSAqZGV2LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0YXJnZXRfcGh5c19hZGRyX3Qg cGFkZHIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGRtYV9hZGRyX3QgbGVuKQo+ICt7Cj4gKyDCoCDCoERNQU1lbW9yeU1hcCAqbWFw Owo+ICsKPiArIMKgIMKgUUxJU1RfRk9SRUFDSChtYXAsICZkZXYtPm1tdS0+bWVtb3J5X21hcHMs IGxpc3QpIHsKPiArIMKgIMKgIMKgIMKgaWYgKG1hcC0+cGFkZHIgPT0gcGFkZHIgJiYgbWFwLT5s ZW4gPT0gbGVuKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoFFMSVNUX1JFTU9WRShtYXAsIGxpc3Qp Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqBmcmVlKG1hcCk7Cj4gKyDCoCDCoCDCoCDCoH0KPiArIMKg IMKgfQo+ICt9Cj4gKwo+ICt2b2lkIGRtYV9pbnZhbGlkYXRlX21lbW9yeV9yYW5nZShETUFEZXZp Y2UgKmRldiwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGRtYV9hZGRyX3QgYWRkciwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGRtYV9hZGRyX3QgbGVuKQo+ICt7Cj4gKyDCoCDCoERNQU1lbW9yeU1h cCAqbWFwOwo+ICsKPiArIMKgIMKgUUxJU1RfRk9SRUFDSChtYXAsICZkZXYtPm1tdS0+bWVtb3J5 X21hcHMsIGxpc3QpIHsKPiArIMKgIMKgIMKgIMKgaWYgKHJhbmdlc19vdmVybGFwKGFkZHIsIGxl biwgbWFwLT5hZGRyLCBtYXAtPmxlbikpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgbWFwLT5pbnZh bGlkYXRlKG1hcC0+aW52YWxpZGF0ZV9vcGFxdWUpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBRTElT VF9SRU1PVkUobWFwLCBsaXN0KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgZnJlZShtYXApOwo+ICsg wqAgwqAgwqAgwqB9Cj4gKyDCoCDCoH0KPiArfQo+ICsKPiArdm9pZCAqZG1hX21lbW9yeV9tYXAo RE1BRGV2aWNlICpkZXYsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBETUFJbnZh bGlkYXRlTWFwRnVuYyAqY2IsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB2b2lk ICpvcGFxdWUsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkbWFfYWRkcl90IGFk ZHIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkbWFfYWRkcl90ICpsZW4sCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbnQgaXNfd3JpdGUpCj4gK3sKPiArIMKg IMKgaW50IGVycjsKPiArIMKgIMKgdGFyZ2V0X3BoeXNfYWRkcl90IHBhZGRyLCBwbGVuOwo+ICsK PiArIMKgIMKgaWYgKCFkZXYgfHwgIWRldi0+bW11KSB7Cj4gKyDCoCDCoCDCoCDCoHJldHVybiBj cHVfcGh5c2ljYWxfbWVtb3J5X21hcChhZGRyLCBsZW4sIGlzX3dyaXRlKTsKPiArIMKgIMKgfQo+ ICsKPiArIMKgIMKgcGxlbiA9ICpsZW47Cj4gKyDCoCDCoGVyciA9IGRldi0+bW11LT50cmFuc2xh dGUoZGV2LCBhZGRyLCAmcGFkZHIsICZwbGVuLCBpc193cml0ZSk7Cj4gKyDCoCDCoGlmIChlcnIp IHsKPiArIMKgIMKgIMKgIMKgcmV0dXJuIE5VTEw7Cj4gKyDCoCDCoH0KPiArCj4gKyDCoCDCoC8q Cj4gKyDCoCDCoCAqIElmIHRoaXMgaXMgdHJ1ZSwgdGhlIHZpcnR1YWwgcmVnaW9uIGlzIGNvbnRp Z3VvdXMsCj4gKyDCoCDCoCAqIGJ1dCB0aGUgdHJhbnNsYXRlZCBwaHlzaWNhbCByZWdpb24gaXNu J3QuIFdlIGp1c3QKPiArIMKgIMKgICogY2xhbXAgKmxlbiwgbXVjaCBsaWtlIGNwdV9waHlzaWNh bF9tZW1vcnlfbWFwKCkgZG9lcy4KPiArIMKgIMKgICovCj4gKyDCoCDCoGlmIChwbGVuIDwgKmxl bikgewo+ICsgwqAgwqAgwqAgwqAqbGVuID0gcGxlbjsKPiArIMKgIMKgfQo+ICsKPiArIMKgIMKg LyogV2UgdHJlYXQgbWFwcyBhcyByZW1vdGUgVExCcyB0byBjb3BlIHdpdGggc3R1ZmYgbGlrZSBB SU8uICovCj4gKyDCoCDCoGlmIChjYikgewo+ICsgwqAgwqAgwqAgwqBkbWFfcmVnaXN0ZXJfbWVt b3J5X21hcChkZXYsIGFkZHIsICpsZW4sIHBhZGRyLCBjYiwgb3BhcXVlKTsKPiArIMKgIMKgfQo+ ICsKPiArIMKgIMKgcmV0dXJuIGNwdV9waHlzaWNhbF9tZW1vcnlfbWFwKHBhZGRyLCBsZW4sIGlz X3dyaXRlKTsKPiArfQo+ICsKPiArdm9pZCBkbWFfbWVtb3J5X3VubWFwKERNQURldmljZSAqZGV2 LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB2b2lkICpidWZmZXIsCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRtYV9hZGRyX3QgbGVuLAo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbnQgaXNfd3JpdGUsCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoGRtYV9hZGRyX3QgYWNjZXNzX2xlbikKPiArewo+ICsgwqAgwqBj cHVfcGh5c2ljYWxfbWVtb3J5X3VubWFwKGJ1ZmZlciwgbGVuLCBpc193cml0ZSwgYWNjZXNzX2xl bik7Cj4gKyDCoCDCoGlmIChkZXYgJiYgZGV2LT5tbXUpIHsKPiArIMKgIMKgIMKgIMKgZG1hX3Vu cmVnaXN0ZXJfbWVtb3J5X21hcChkZXYsICh0YXJnZXRfcGh5c19hZGRyX3QpIGJ1ZmZlciwgbGVu KTsKPiArIMKgIMKgfQo+ICt9Cj4gKwo+IGRpZmYgLS1naXQgYS9ody9kbWFfcncuaCBiL2h3L2Rt YV9ydy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5iYzkzNTExCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2h3L2RtYV9ydy5oCj4gQEAgLTAsMCArMSwxNTcgQEAKPiAr I2lmbmRlZiBETUFfUldfSAo+ICsjZGVmaW5lIERNQV9SV19ICj4gKwo+ICsjaW5jbHVkZSAicWVt dS1jb21tb24uaCIKPiArCj4gK3R5cGVkZWYgdWludDY0X3QgZG1hX2FkZHJfdDsKPiArCj4gK3R5 cGVkZWYgc3RydWN0IERNQU1tdSBETUFNbXU7Cj4gK3R5cGVkZWYgc3RydWN0IERNQURldmljZSBE TUFEZXZpY2U7Cj4gK3R5cGVkZWYgc3RydWN0IERNQU1lbW9yeU1hcCBETUFNZW1vcnlNYXA7Cj4g Kwo+ICt0eXBlZGVmIGludCBETUFUcmFuc2xhdGVGdW5jKERNQURldmljZSAqZGV2LAo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZG1hX2FkZHJfdCBhZGRyLAo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZG1hX2FkZHJfdCAq cGFkZHIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkbWFf YWRkcl90ICpsZW4sCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBpbnQgaXNfd3JpdGUpOwo+ICsKPiArdHlwZWRlZiB2b2lkIERNQUludmFsaWRhdGVNYXBGdW5j KHZvaWQgKik7Cj4gKwo+ICtzdHJ1Y3QgRE1BTW11IHsKPiArIMKgIMKgRGV2aWNlU3RhdGUgKmlv bW11Owo+ICsgwqAgwqBETUFUcmFuc2xhdGVGdW5jICp0cmFuc2xhdGU7Cj4gKyDCoCDCoFFMSVNU X0hFQUQobWVtb3J5X21hcHMsIERNQU1lbW9yeU1hcCkgbWVtb3J5X21hcHM7Cj4gK307Cj4gKwo+ ICtzdHJ1Y3QgRE1BRGV2aWNlIHsKPiArIMKgIMKgRE1BTW11ICptbXU7Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgRE1BTWVtb3J5TWFwIHsKPiArIMKgIMKgZG1hX2FkZHJfdCDCoCDCoCDCoCDCoCDCoCDC oCDCoGFkZHI7Cj4gKyDCoCDCoGRtYV9hZGRyX3QgwqAgwqAgwqAgwqAgwqAgwqAgwqBsZW47Cj4g KyDCoCDCoHRhcmdldF9waHlzX2FkZHJfdCDCoCDCoCDCoHBhZGRyOwo+ICsgwqAgwqBETUFJbnZh bGlkYXRlTWFwRnVuYyDCoCDCoCppbnZhbGlkYXRlOwo+ICsgwqAgwqB2b2lkIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgKmludmFsaWRhdGVfb3BhcXVlOwo+ICsKPiArIMKgIMKgUUxJU1Rf RU5UUlkoRE1BTWVtb3J5TWFwKSBsaXN0Owo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSB2b2lk IGRtYV9tZW1vcnlfcncoRE1BRGV2aWNlICpkZXYsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkbWFfYWRkcl90IGFkZHIsCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB2b2lkICpidWYsCj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkbWFfYWRkcl90IGxl biwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlu dCBpc193cml0ZSkKPiArewo+ICsgwqAgwqBkbWFfYWRkcl90IHBhZGRyLCBwbGVuOwo+ICsgwqAg wqBpbnQgZXJyOwo+ICsKPiArIMKgIMKgLyoKPiArIMKgIMKgICogRmFzdC1wYXRoIG5vbi1pb21t dS4KPiArIMKgIMKgICogTW9yZSBpbXBvcnRhbnRseSwgbWFrZXMgaXQgb2J2aW91cyB3aGF0IHRo aXMgZnVuY3Rpb24gZG9lcy4KPiArIMKgIMKgICovCj4gKyDCoCDCoGlmICghZGV2IHx8ICFkZXYt Pm1tdSkgewo+ICsgwqAgwqAgwqAgwqBjcHVfcGh5c2ljYWxfbWVtb3J5X3J3KGFkZHIsIGJ1Ziwg cGxlbiwgaXNfd3JpdGUpOwo+ICsgwqAgwqAgwqAgwqByZXR1cm47Cj4gKyDCoCDCoH0KPiArCj4g KyDCoCDCoHdoaWxlIChsZW4pIHsKPiArIMKgIMKgIMKgIMKgZXJyID0gZGV2LT5tbXUtPnRyYW5z bGF0ZShkZXYsIGFkZHIsICZwYWRkciwgJnBsZW4sIGlzX3dyaXRlKTsKPiArIMKgIMKgIMKgIMKg aWYgKGVycikgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm47Cj4gKyDCoCDCoCDCoCDCoH0K PiArCj4gKyDCoCDCoCDCoCDCoC8qIFRoZSB0cmFuc2xhdGlvbiBtaWdodCBiZSB2YWxpZCBmb3Ig bGFyZ2VyIHJlZ2lvbnMuICovCj4gKyDCoCDCoCDCoCDCoGlmIChwbGVuID4gbGVuKSB7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoHBsZW4gPSBsZW47Cj4gKyDCoCDCoCDCoCDCoH0KPiArCj4gKyDCoCDC oCDCoCDCoGNwdV9waHlzaWNhbF9tZW1vcnlfcncocGFkZHIsIGJ1ZiwgcGxlbiwgaXNfd3JpdGUp Owo+ICsKPiArIMKgIMKgIMKgIMKgbGVuIC09IHBsZW47Cj4gKyDCoCDCoCDCoCDCoGFkZHIgKz0g cGxlbjsKPiArIMKgIMKgIMKgIMKgYnVmICs9IHBsZW47Cj4gKyDCoCDCoH0KPiArfQo+ICsKPiAr c3RhdGljIGlubGluZSB2b2lkIGRtYV9tZW1vcnlfcmVhZChETUFEZXZpY2UgKmRldiwKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRtYV9hZGRy X3QgYWRkciwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHZvaWQgKmJ1ZiwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGRtYV9hZGRyX3QgbGVuKQo+ICt7Cj4gKyDCoCDCoGRtYV9tZW1vcnlf cncoZGV2LCBhZGRyLCBidWYsIGxlbiwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9p ZCBkbWFfbWVtb3J5X3dyaXRlKERNQURldmljZSAqZGV2LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBkbWFfYWRkcl90IGFkZHIsCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNvbnN0 IHZvaWQgKmJ1ZiwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgZG1hX2FkZHJfdCBsZW4pCj4gK3sKPiArIMKgIMKgZG1hX21lbW9yeV9ydyhk ZXYsIGFkZHIsICh2b2lkICopIGJ1ZiwgbGVuLCAxKTsKPiArfQo+ICsKPiArdm9pZCAqZG1hX21l bW9yeV9tYXAoRE1BRGV2aWNlICpkZXYsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBETUFJbnZhbGlkYXRlTWFwRnVuYyAqY2IsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCB2b2lkICpvcGFxdWUsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkbWFf YWRkcl90IGFkZHIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkbWFfYWRkcl90 ICpsZW4sCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbnQgaXNfd3JpdGUpOwo+ ICt2b2lkIGRtYV9tZW1vcnlfdW5tYXAoRE1BRGV2aWNlICpkZXYsCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHZvaWQgKmJ1ZmZlciwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgZG1hX2FkZHJfdCBsZW4sCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoGludCBpc193cml0ZSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg ZG1hX2FkZHJfdCBhY2Nlc3NfbGVuKTsKPiArCj4gKwo+ICt2b2lkIGRtYV9pbnZhbGlkYXRlX21l bW9yeV9yYW5nZShETUFEZXZpY2UgKmRldiwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRtYV9hZGRyX3QgYWRkciwKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRtYV9hZGRyX3QgbGVuKTsKPiArCj4g Kwo+ICsjZGVmaW5lIERFRklORV9ETUFfTEQoc3VmZml4LCBzaXplKSDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBcCj4gK3N0YXRpYyBpbmxp bmUgdWludCMjc2l6ZSMjX3QgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBcCj4gK2RtYV9sZCMjc3VmZml4KERNQURldmlj ZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIpIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIFwKPiAreyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBcCj4gKyDCoCDCoGludCBlcnI7IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgXAo+ICsgwqAgwqBkbWFfYWRkcl90IHBhZGRyLCBwbGVuOyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBcCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFwK PiArIMKgIMKgaWYgKCFkZXYgfHwgIWRldi0+bW11KSB7IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgXAo+ICsgwqAgwqAg wqAgwqByZXR1cm4gbGQjI3N1ZmZpeCMjX3BoeXMoYWRkcik7IMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFwKPiArIMKgIMKgfSDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBcCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFwKPiArIMKgIMKgZXJyID0gZGV2LT5t bXUtPnRyYW5zbGF0ZShkZXYsIGFkZHIsICZwYWRkciwgJnBsZW4sIDApOyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBcCj4gKyDCoCDCoGlmIChlcnIgfHwgKHBsZW4gPCBzaXplIC8gOCkpIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFwKCklm IHRoZSBhY2Nlc3MgaXMgdW5hbGlnbmVkIGFuZCB0aGUgdHJhbnNsYXRpb24gc3BsaXRzIGl0IHRv IHR3byAoZm9yCmV4YW1wbGUsIGJlY2F1c2Ugb2YgcGFnZSBib3VuZGFyeSksIHRoZSBhY2Nlc3Mg aXMgaWdub3JlZCwgd2hpY2ggY2FuJ3QKYmUgY29ycmVjdC4KCkRvIHdlIGhhdmUgc3VjaCBjYXNl cz8gSWYgeWVzLCBzaG91bGQgdGhpcyBiZSBoYW5kbGVkIGJ5IHRoZSBjYWxsZXIKaW5zdGVhZCAo bWF5YmUgbm90KT8K