From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 587C5A04BC; Sun, 27 Sep 2020 07:55:57 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EF6701D91E; Sun, 27 Sep 2020 07:55:54 +0200 (CEST) Received: from m1326.mail.163.com (m1326.mail.163.com [220.181.13.26]) by dpdk.org (Postfix) with ESMTP id C614A1D919 for ; Sun, 27 Sep 2020 07:55:51 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:MIME-Version:Message-ID; bh=Y5yZu idhfhb7rDPqrcA4br8l0UhVEV10yuBJg3px/6k=; b=HcFekS83f1JPIC7icHXjb Tpa5RZm4SUQ6tataV5Zt74L9MlgMv7O5WKLG9UgG3k1q2CE5wASMkapvt78Jipn/ PXqaVVmylgpBHXhU4ffN/hx1QlgXGIdR2zoUSPmuT4tsOvwzSGIqX6n45WLJsHBj iG3huHgEntJ9cDA6WU5a+Y= Received: from yang_y_yi$163.com ( [111.207.123.58] ) by ajax-webmail-wmsvr26 (Coremail) ; Sun, 27 Sep 2020 13:55:21 +0800 (CST) X-Originating-IP: [111.207.123.58] Date: Sun, 27 Sep 2020 13:55:21 +0800 (CST) From: yang_y_yi To: "Olivier Matz" Cc: dev@dpdk.org, jiayu.hu@intel.com, thomas@monjalon.net, yangyi01@inspur.com X-Priority: 1 X-Mailer: Coremail Webmail Server Version XT5.0.10 build 20190724(ac680a23) Copyright (c) 2002-2020 www.mailtech.cn 163com In-Reply-To: <7e80eaff.148a.173b71824b0.Coremail.yang_y_yi@163.com> References: <20200730120900.108232-1-yang_y_yi@163.com> <20200730120900.108232-3-yang_y_yi@163.com> <20200731151543.GH5869@platinum> <2a50e80c.44f.173ac4c6d20.Coremail.yang_y_yi@163.com> <20200802202907.GJ5869@platinum> <3cf82e61.145c.173b1ed87ce.Coremail.yang_y_yi@163.com> <20200803081139.GK5869@platinum> <7584d005.5305.173b3b3389f.Coremail.yang_y_yi@163.com> <20200803123425.GM5869@platinum> <7e80eaff.148a.173b71824b0.Coremail.yang_y_yi@163.com> X-CM-CTRLDATA: 4G/4wWZvb3Rlcl9odG09MjExNDk6NTY= MIME-Version: 1.0 Message-ID: <76308d9c.2b0b.174ce214814.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: GsGowABnqNdJKXBfH2x_AA--.44748W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/1tbiMwCsi1Xl6aTKQgADsi X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== Content-Type: text/plain; charset=GBK Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH V1 2/3] mbuf: change free_cb interface to adapt to GSO case X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGksIGZvbGtzCgoKCgoKUGVyIEdTTyByZXF1aXJlbWVudCwgdGhpcyBpcyBhIG11c3QtaGF2ZSBj aGFuZ2UsIEppYXl1LCBjYW4geW91IGhlbHAgcmV2aWV3IHRoaXMgc2VyaWVzPwoKCk9saXZpZXIs IGlmIHlvdSB1c2VkIHRoZSBvbGQgaW50ZXJmYWNlLCBtYXliZSB5b3UgbmVlZCB0byBjaGFuZ2Ug eW91ciBjb2RlIHRvIGFkYXB0IHRoaXMsIEkgZG9uJ3QgdGhpbmsgd2UgY2FuIGhhdmUgYSBiZXR0 ZXIgd2F5IHRvIGhhbmRsZSBHU08gY2FzZS4KCgoKCgoKCgpBdCAyMDIwLTA4LTA0IDA5OjMxOjE5 LCAieWFuZ195X3lpIiA8eWFuZ195X3lpQDE2My5jb20+IHdyb3RlOgoKQXQgMjAyMC0wOC0wMyAy MDozNDoyNSwgIk9saXZpZXIgTWF0eiIgPG9saXZpZXIubWF0ekA2d2luZC5jb20+IHdyb3RlOgo+ T24gTW9uLCBBdWcgMDMsIDIwMjAgYXQgMDU6NDI6MTNQTSArMDgwMCwgeWFuZ195X3lpIHdyb3Rl Ogo+PiBBdCAyMDIwLTA4LTAzIDE2OjExOjM5LCAiT2xpdmllciBNYXR6IiA8b2xpdmllci5tYXR6 QDZ3aW5kLmNvbT4gd3JvdGU6Cj4+ID5PbiBNb24sIEF1ZyAwMywgMjAyMCBhdCAwOToyNjo0MEFN ICswODAwLCB5YW5nX3lfeWkgd3JvdGU6Cj4+ID4+IEF0IDIwMjAtMDgtMDMgMDQ6Mjk6MDcsICJP bGl2aWVyIE1hdHoiIDxvbGl2aWVyLm1hdHpANndpbmQuY29tPiB3cm90ZToKPj4gPj4gPkhpLAo+ PiA+PiA+Cj4+ID4+ID5PbiBTdW4sIEF1ZyAwMiwgMjAyMCBhdCAwNzoxMjozNkFNICswODAwLCB5 YW5nX3lfeWkgd3JvdGU6Cj4+ID4+ID4+IAo+PiA+PiA+PiAKPj4gPj4gPj4gQXQgMjAyMC0wNy0z MSAyMzoxNTo0MywgIk9saXZpZXIgTWF0eiIgPG9saXZpZXIubWF0ekA2d2luZC5jb20+IHdyb3Rl Ogo+PiA+PiA+PiA+SGksCj4+ID4+ID4+ID4KPj4gPj4gPj4gPk9uIFRodSwgSnVsIDMwLCAyMDIw IGF0IDA4OjA4OjU5UE0gKzA4MDAsIHlhbmdfeV95aUAxNjMuY29tIHdyb3RlOgo+PiA+PiA+PiA+ PiBGcm9tOiBZaSBZYW5nIDx5YW5neWkwMUBpbnNwdXIuY29tPgo+PiA+PiA+PiA+PiAKPj4gPj4g Pj4gPj4gSW4gR1NPIGNhc2UsIHNlZ21lbnRlZCBtYnVmcyBhcmUgYXR0YWNoZWQgdG8gb3JpZ2lu YWwKPj4gPj4gPj4gPj4gbWJ1ZiB3aGljaCBjYW4ndCBiZSBmcmVlZCB3aGVuIGl0IGlzIGV4dGVy bmFsLiBUaGUgaXNzdWUKPj4gPj4gPj4gPj4gaXMgZnJlZV9jYiBkb2Vzbid0IGtub3cgb3JpZ2lu YWwgbWJ1ZiBhbmQgZG9lc24ndCBmcmVlCj4+ID4+ID4+ID4+IGl0IHdoZW4gcmVmY250IG9mIHNo aW5mbyBpcyAwLgo+PiA+PiA+PiA+PiAKPj4gPj4gPj4gPj4gT3JpZ2luYWwgbWJ1ZiBjYW4gYmUg ZnJlZWQgYnkgcnRlX3BrdG1idWZfZnJlZSBzZWdtZW50ZWQKPj4gPj4gPj4gPj4gbWJ1ZnMgb3Ig YnkgcnRlX3BrdG1idWZfZnJlZSBvcmlnaW5hbCBtYnVmLiBUd28ga2luZCBvZgo+PiA+PiA+PiA+ PiBjYXNlcyBzaG91bGQgaGF2ZSBkaWZmZXJlbnQgYmVoYXZpb3JzLiBmcmVlX2NiIHdvbid0Cj4+ ID4+ID4+ID4+IGV4cGxpY2l0bHkgY2FsbCBydGVfcGt0bWJ1Zl9mcmVlIHRvIGZyZWUgb3JpZ2lu YWwgbWJ1Zgo+PiA+PiA+PiA+PiBpZiBpdCBpcyBmcmVlZCBieSBydGVfcGt0bWJ1Zl9mcmVlIG9y aWdpbmFsIG1idWYsIGJ1dCBpdAo+PiA+PiA+PiA+PiBoYXMgdG8gY2FsbCBydGVfcGt0bWJ1Zl9m cmVlIHRvIGZyZWUgb3JpZ2luYWwgbWJ1ZiBpZiBpdAo+PiA+PiA+PiA+PiBpcyBmcmVlZCBieSBy dGVfcGt0bWJ1Zl9mcmVlIHNlZ21lbnRlZCBtYnVmcy4KPj4gPj4gPj4gPj4gCj4+ID4+ID4+ID4+ IEluIG9yZGVyIHRvIGZpeCB0aGlzIGlzc3VlLCBmcmVlX2NiIGludGVyZmFjZSBoYXMgdG8gYmVl bgo+PiA+PiA+PiA+PiBjaGFuZ2VkLCBfX3J0ZV9wa3RtYnVmX2ZyZWVfZXh0YnVmIG11c3QgZGVs aXZlciBjYWxsZWQKPj4gPj4gPj4gPj4gbWJ1ZiBwb2ludGVyIHRvIGZyZWVfY2IsIGFyZ3VtZW50 IG9wYXF1ZSBjYW4gYmUgZGVmaW5lZAo+PiA+PiA+PiA+PiBhcyBhIGN1c3RvbSBzdHJ1Y3QgYnkg dXNlciwgaXQgY2FuIGluY2x1ZGVzIG9yaWdpbmFsIG1idWYKPj4gPj4gPj4gPj4gcG9pbnRlciwg dXNlci1kZWZpbmVkIGZyZWVfY2IgY2FuIGNvbXBhcmUgY2FsbGVyIG1idWYgd2l0aAo+PiA+PiA+ PiA+PiBtYnVmIGluIG9wYXF1ZSBzdHJ1Y3QsIGZyZWVfY2Igc2hvdWxkIGZyZWUgb3JpZ2luYWwg bWJ1Zgo+PiA+PiA+PiA+PiBpZiB0aGV5IGFyZSBub3Qgc2FtZSwgdGhpcyBjb3JyZXNwb25kcyB0 byBydGVfcGt0bWJ1Zl9mcmVlCj4+ID4+ID4+ID4+IHNlZ21lbnRlZCBtYnVmcyBjYXNlLCBvdGhl cndpc2UsIGZyZWVfY2Igd29uJ3QgZnJlZSBvcmlnaW5hbAo+PiA+PiA+PiA+PiBtYnVmIGJlY2F1 c2UgdGhlIGNhbGxlciBleHBsaWNpdGx5IGNhbGxlZCBydGVfcGt0bWJ1Zl9mcmVlCj4+ID4+ID4+ ID4+IHRvIGZyZWUgaXQuCj4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiBIZXJlIGlzIHBzZWR1byBj b2RlIHRvIHNob3cgdHdvIGtpbmQgb2YgY2FzZXMuCj4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiBj YXNlIDEuIHJ0ZV9wa3RtYnVmX2ZyZWUgc2VnbWVudGVkIG1idWZzCj4+ID4+ID4+ID4+IAo+PiA+ PiA+PiA+PiBuYl90eCA9IHJ0ZV9nc29fc2VnbWVudChvcmlnaW5hbF9tYnVmLCAvKiBvcmlnaW5h bCBtYnVmICovCj4+ID4+ID4+ID4+ICAgICAgICAgICAgICAgICAgICAgICAmZ3NvX2N0eCwKPj4g Pj4gPj4gPj4gICAgICAgICAgICAgICAgICAgICAgIC8qIHNlZ21lbnRlZCBtYnVmICovCj4+ID4+ ID4+ID4+ICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHJ0ZV9tYnVmICoqKSZnc29fbWJ1 ZnMsCj4+ID4+ID4+ID4+ICAgICAgICAgICAgICAgICAgICAgICBNQVhfR1NPX01CVUZTKTsKPj4g Pj4gPj4gPgo+PiA+PiA+PiA+SSdtIHNvcnJ5IGJ1dCBpdCBpcyBub3QgdmVyeSBjbGVhciB0byBt ZSB3aGF0IG9wZXJhdGlvbnMgYXJlIGRvbmUgYnkKPj4gPj4gPj4gPnJ0ZV9nc29fc2VnbWVudCgp Lgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID5JbiB0aGUgY3VycmVudCBjb2RlLCBJIG9ubHkgc2VlIGNh bGxzIHRvIHJ0ZV9wa3RtYnVmX2F0dGFjaCgpLAo+PiA+PiA+PiA+d2hpY2ggZG8gbm90IGRlYWwg d2l0aCBleHRlcm5hbCBidWZmZXJzLiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPwo+PiA+PiA+PiA+ Cj4+ID4+ID4+ID5BcmUgeW91IGFibGUgdG8gc2hvdyB0aGUgaXNzdWUgb25seSB3aXRoIG1idWYg ZnVuY3Rpb25zPyBJdCB3b3VsZAo+PiA+PiA+PiA+YmUgaGVscGZ1bCB0byB1bmRlcnN0YW5kIHdo YXQgZG9lcyBub3Qgd29yay4KPj4gPj4gPj4gPgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID5UaGFua3Ms Cj4+ID4+ID4+ID5PbGl2aWVyCj4+ID4+ID4+ID4KPj4gPj4gPj4gT2xpdmVyLCB0aGFuayB5b3Ug Zm9yIGNvbW1lbnQsIGxldCBtZSBzaG93IHlvdSB3aHkgaXQgZG9lc24ndCB3b3JrIGZvciBteSB1 c2UgY2FzZS4gIEluIE9WUyBEUERLLCBWTSB1c2VzIHZob3N0dXNlcmNsaWVudCB0byBzZW5kIGxh cmdlIHBhY2tldHMgd2hvc2Ugc2l6ZSBpcyBhYm91dCA2NEsgYmVjYXVzZSB3ZSBlbmFibGVkIFRT TyAmIFVGTywgdGhlc2UgbGFyZ2UgcGFja2V0cyB1c2UgcnRlX21idWZzIGFsbG9jYXRlZCBieSBE UERLIHZpcnRpb19uZXQgZnVuY3Rpb24gCj4+ID4+ID4+IHZpcnRpb19kZXZfcGt0bWJ1Zl9hbGxv YygpIChpbiBmaWxlIGxpYi9saWJydGVfdmhvc3QvdmlydGlvX25ldC5jLiBQbGVhc2UgcmVmZXIg dG8gW1BBVENIIFYxIDMvM10sIEkgY2hhbmdlZCBmcmVlX2NiIGFzIGJlbG93LCB0aGVzZSBwYWNr ZXRzIHVzZSB0aGUgc2FtZSBhbGxvY2F0ZSBmdW5jdGlvbiBhbmQgdGhlIHNhbWUgZnJlZV9jYiBu byBtYXR0ZXIgdGhleSBhcmUgVENQIHBhY2tldCBvciBVRFAgcGFja2V0cywgaW4gY2FzZSBvZiBW WExBTiBUU08sIG1vc3QgTklDcyBjYW4ndCBzdXBwb3J0IGlubmVyIFVEUCBmcmFnbWVudCBvZmZs b2FkLCBzbyBPVlMgRFBESyBoYXMgdG8gZG8gaXQgYnkgc29mdHdhcmUsIGZvciBVRFAgY2FzZSwg dGhlIG9yaWdpbmFsIHJ0ZV9tYnVmIG9ubHkgY2FuIGJlIGZyZWVkIGJ5IHNlZ21lbnRlZCBydGVf bWJ1ZnMgd2hpY2ggYXJlIG91dHB1dCBwYWNrZXRzIG9mIHJ0ZV9nc29fc2VnbWVudCwgaS5lLiB0 aGUgb3JpZ2luYWwgcnRlX21idWYgb25seSBjYW4gZnJlZWQgYnkgZnJlZV9jYiwgeW91IGNhbiBz ZWUsIGl0IGV4cGxpY2l0bHkgY2FsbGVkIHJ0ZV9wa3RtYnVmX2ZyZWUoYXJnLT5tYnVmKSwgdGhl IGNvbmRpdGlvbiBzdGF0ZW1lbnQgImlmIChjYWxsZXJfbSAhPSBhcmctPm1idWYpIiBpcyB0cnVl IGZvciB0aGlzIGNhc2UsIHRoaXMgaGFzIG5vIHByb2JsZW0sIGJ1dCBmb3IgVENQIGNhc2UsIHRo ZSBvcmlnaW5hbCBtYnVmIGlzIGRlbGl2ZXJlZCB0byBydGVfZXRoX3R4X2J1cnN0KCkgYnV0IG5v dCBzZWdtZW50ZWQgcnRlX21idWZzIG91dHB1dCBieSBydGVfZ3NvX3NlZ21lbnQsIFBNRCBkcml2 ZXIgd2lsbCBjYWxsIHJ0ZV9wa3RtYnVmX2ZyZWUob3JpZ2luYWxfcnRlX21idWYpIGJ1dCBub3Qg cnRlX3BrdG1idWZfZnJlZShzZWdtZW50ZWRfcnRlX21idWZzKSwgdGhlIHNhbWUgZnJlZV9jYiB3 aWxsIGJlIGNhbGxlZCwgdGhhdCBtZWFucyBvcmlnaW5hbF9ydGVfbWJ1ZiB3aWxsIGJlIGZyZWVk IHR3aWNlLCB5b3Uga25vdyB3aGF0IHdpbGwgaGFwcGVuLCB0aGlzIGlzIGp1c3QgdGhlIGlzc3Vl IEknbSBmaXhpbmcuIEkgYnJpbmcgaW4gY2FsbGVyX20gYXJndW1lbnQsIGl0IGNhbiBoZWxwIHdv cmsgYXJvdW5kIHRoaXMgYmVjYXVzZSBjYWxsZXJfbSBpcyBhcmctPm1idWYgYW5kIHRoZSBjb25k aXRpb24gc3RhdGVtZW50ICJpZiAoY2FsbGVyX20gIT0gYXJnLT5tYnVmKSIgaXMgZmFsc2UsIHlv dSBjYW4ndCBmaXggaXQgd2l0aG91dCB0aGUgY2hhbmdlIHRoaXMgcGF0Y2ggc2VyaWVzIGRpZC4K Pj4gPj4gPgo+PiA+PiA+SSdtIHNpbGwgbm90IHN1cmUgdG8gZ2V0IHlvdXIgaXNzdWUuIFBsZWFz ZSwgaWYgeW91IGhhdmUgYSBzaW1wbGUgdGVzdAo+PiA+PiA+Y2FzZSB1c2luZyBvbmx5IG1idWZz IGZ1bmN0aW9ucyAod2l0aG91dCB2aXJ0aW8sIGdzbywgLi4uKSwgaXQgd291bGQgYmUKPj4gPj4g PnZlcnkgaGVscGZ1bCBiZWNhdXNlIHdlIHdpbGwgYmUgc3VyZSB0aGF0IHdlIGFyZSB0YWxraW5n IGFib3V0IHRoZSBzYW1lCj4+ID4+ID50aGluZy4gSW4gY2FzZSB0aGVyZSBpcyBhbiBpc3N1ZSwg aXQgY2FuIGVhc2lseSBiZWNvbWUgYSB1bml0IHRlc3QuCj4+ID4+IAo+PiA+PiBPbGl2ZXIsIEkg dGhpbmsgeW91IGRvbid0IGdldCB0aGUgcG9pbnQsIGZyZWUgb3BlcmF0aW9uIGNhbid0IGJlIGNv bnRyb2xsZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGl0c2VsZiwgCj4+ID4+IGl0IGlzIGRvbmUgYnkg UE1EIGRyaXZlciBhbmQgdHJpZ2dlcmVkIGJ5IHJ0ZV9ldGhfdHhfYnVyc3QsIEkgaGF2ZSBzaG93 biBwc2V1ZG8gY29kZSwKPj4gPj4gcnRlX2dzb19zZWdtZW50IGp1c3Qgc2VnbWVudHMgYSBsYXJn ZSBtYnVmIHRvIG11bHRpcGxlIG1idWZzLCBpdCB3b24ndCBzZW5kIHRoZW0sIHRoZSBhcHBsaWNh dGlvbgo+PiA+PiB3aWxsIGNhbGwgcnRlX2V0aF90eF9idXJzdCB0byBzZW5kIHRoZW0gZmluYWxs eS4KPj4gPj4KPj4gPj4gPgo+PiA+PiA+VGhhdCBzYWlkLCBJIGxvb2tlZCBhdCB2aG9zdCBtYnVm IGFsbG9jYXRpb24gYW5kIGdzbyBzZWdtZW50YXRpb24sIGFuZAo+PiA+PiA+SSBmb3VuZCBzb21l IHN0cmFuZ2UgdGhpbmdzOgo+PiA+PiA+Cj4+ID4+ID4xLyBJbiB2aXJ0aW9fZGV2X2V4dGJ1Zl9h bGxvYygpLCBhbmQgSSB0aGVyZSBhcmUgMiBwYXRocyB0byBjcmVhdGUgdGhlCj4+ID4+ID4gICBl eHQgbWJ1Zi4KPj4gPj4gPgo+PiA+PiA+ICAgYS8gVGhlIGZpcnN0IG9uZSBzdG9yZXMgdGhlIHNo aW5mbyBzdHJ1Y3QgaW4gdGhlIG1idWYsIGJhc2ljYWxseQo+PiA+PiA+ICAgICAgbGlrZSB0aGlz Ogo+PiA+PiA+Cj4+ID4+ID4JcGt0ID0gcnRlX3BrdG1idWZfYWxsb2MobXApOwo+PiA+PiA+CXNo aW5mbyA9IHJ0ZV9wa3RtYnVmX210b2QocGt0LCBzdHJ1Y3QgcnRlX21idWZfZXh0X3NoYXJlZF9p bmZvICopOwo+PiA+PiA+CWJ1ZiA9IHJ0ZV9tYWxsb2MoTlVMTCwgYnVmX2xlbiwgUlRFX0NBQ0hF X0xJTkVfU0laRSk7Cj4+ID4+ID4Jc2hpbmZvLT5mcmVlX2NiID0gdmlydGlvX2Rldl9leHRidWZf ZnJlZTsKPj4gPj4gPglzaGluZm8tPmZjYl9vcGFxdWUgPSBidWY7Cj4+ID4+ID4JcnRlX21idWZf ZXh0X3JlZmNudF9zZXQoc2hpbmZvLCAxKTsKPj4gPj4gPgo+PiA+PiA+ICAgICAgSSBkb24ndCB0 aGluayBpdCBpcyBhIGdvb2QgaWRlYSwgYmVjYXVzZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhh dAo+PiA+PiA+ICAgICAgdGhlIG1idWYgd29uJ3QgYmUgZnJlZWQgYmVmb3JlIHRoZSBidWZmZXIu IEZvciBpbnN0YW5jZSwgZG9pbmcKPj4gPj4gPiAgICAgIHRoaXMgd2lsbCBwcm9iYWJseSBmYWls Ogo+PiA+PiA+Cj4+ID4+ID4JcGt0MiA9IHJ0ZV9wa3RtYnVmX2FsbG9jKG1wKTsKPj4gPj4gPgly dGVfcGt0bWJ1Zl9hdHRhY2gocGt0MiwgcGt0KTsKPj4gPj4gPglydGVfcGt0bWJ1Zl9mcmVlKHBr dCk7ICAvKiBwa3QgaXMgZnJlZWQsIGJ1dCBpdCBjb250YWlucyBzaGluZm8gISAqLwo+PiA+PiAK Pj4gPj4gcGt0IGlzIGNyZWF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIEkgY2FuIGNvbnRyb2wsIHNv IEkgY2FuIGNvbnRyb2wgaXQgd2hlcmUgaXQgd2lsbCBiZSBmcmVlZCwgcmlnaHQ/Cj4+ID4KPj4g PlRoaXMgZXhhbXBsZSBzaG93cyB0aGF0IG1idWZzIGFsbG9jYXRlZCBsaWtlIHRoaXMgYnkgdGhl IHZob3N0Cj4+ID5kcml2ZXIgYXJlIG5vdCBjb25zdHJ1Y3RlZCBjb3JyZWN0bHkuIElmIGFuIGFw cGxpY2F0aW9uIGF0dGFjaCBhIG5ldwo+PiA+cGFja2V0IChwa3QyKSB0byBpdCBhbmQgZnJlZXMg dGhlIG9yaWdpbmFsIG9uZSAocGt0KSwgaXQgbWF5IHJlc3VsdCBpbiBhCj4+ID5tZW1vcnkgY29y cnVwdGlvbi4KPj4gPgo+PiA+T2YgY291cnNlLCB0byBiZSB0ZXN0ZWQgYW5kIGNvbmZpcm1lZC4K Pj4gCj4+IE5vLCBhdHRhY2ggd2lsbCBpbmNyZWFzZSByZWZjbnQgb2Ygc2hpbmZvLCBmcmVlX2Ni IG9ubHkgaXMgY2FsbGVkIHdoZW4gIHJlZmNudCBvZiBzaGluZm8gaXMgZGVjcmVhc2VkIHRvCj4+ IDAsIGlzbid0IGl0Pwo+Cj5XaGVuIHBrdCB3aWxsIGJlIGZyZWVkLCBpdCB3aWxsIGRlY3JlbWVu dCB0aGUgc2hpbmZvIHJlZmNudCwgYW5kCj5hZnRlciBpdCB3aWxsIGJlIDEuIFNvIHRoZSBidWZm ZXIgd29uJ3QgYmUgZnJlZWQuIEFmdGVyIHRoYXQsIHRoZQo+bWJ1ZiBwa3Qgd2lsbCBiZSBkZXRh Y2hlZCwgYW5kIHdpbGwgcmV0dXJuIHRvIHRoZSBtYnVmIHBvb2wuIEl0IG1lYW5zCj5pdCBjYW4g YmUgcmVhbGxvY2F0ZWQsIGFuZCB0aGUgbmV4dCB1c2VyIGNhbiBvdmVyd3JpdGUgc2hpbmZvIHdo aWNoCj5pcyBzdGlsbCBzdG9yZWQgaW4gdGhlIG1idWYgZGF0YS4KCkkgdGhpbmsgdGhpcyBpcyBh biBpc3N1ZSBvZiBEUERLIGl0c2VsZiwgaWYgZXh0ZXJuYWwgYnVmZmVyIGluIHNoaW5mbyBpcyBm cmVlZCwgc2hpbmZvIHNob3VsZCBiZSBzZXQgdG8gTlVMTCwgaWYgdXNlciB3aWxsCm92ZXJ3cml0 ZSBpdCwgaGUvc2hlIHNob3VsZCB1c2UgdGhlIHNhbWUgd2F5IGFzIGEgbmV3IGV4dGVybmFsIGJ1 ZmZlciBpcyBhdHRhY2hlZC4gCgo+Cj5JIGRpZCBhIHRlc3QgdG8gc2hvdyBpdCwgc2VlOgo+aHR0 cDovL2dpdC5kcm9pZHMtY29ycC5vcmcvP3A9ZHBkay5naXQ7YT1jb21taXRkaWZmO2g9YTYxNzQ5 NGVlYjAxZmYKPgo+SWYgeW91IHJ1biB0aGUgbWJ1ZiBhdXRvdGVzdCwgaXQgc2VnZmF1bHRzLgoK SSB0aGluayB5b3VyIHRlc3QgaXMgd3JvbmcsIHlvdSdyZSBjaGFuZ2luZyBzaGluZm8gKHdoaWNo IGlzIGJlaW5nIHVzZWQpIGluIHdyb25nIHdheSwgaWYgZnJlZV9iYyBpcyBOVUxMLCBpdCB3aWxs IGJlIGludmFsaWQuCgpzdGF0aWMgaW5saW5lIHZvaWQKcnRlX3BrdG1idWZfYXR0YWNoX2V4dGJ1 ZihzdHJ1Y3QgcnRlX21idWYgKm0sIHZvaWQgKmJ1Zl9hZGRyLAogICAgICAgIHJ0ZV9pb3ZhX3Qg YnVmX2lvdmEsIHVpbnQxNl90IGJ1Zl9sZW4sCiAgICAgICAgc3RydWN0IHJ0ZV9tYnVmX2V4dF9z aGFyZWRfaW5mbyAqc2hpbmZvKQp7CiAgICAgICAgLyogbWJ1ZiBzaG91bGQgbm90IGJlIHJlYWQt b25seSAqLwogICAgICAgIFJURV9BU1NFUlQoUlRFX01CVUZfRElSRUNUKG0pICYmIHJ0ZV9tYnVm X3JlZmNudF9yZWFkKG0pID09IDEpOwogICAgICAgIFJURV9BU1NFUlQoc2hpbmZvLT5mcmVlX2Ni ICE9IE5VTEwpOwoKRm9yIGFueSBzaGluZm8gb3BlcmF0aW9uLCB5b3Ugc2hvdWxkIGRvIGl0IGJ5 IHJ0ZV9wa3RtYnVmX2F0dGFjaF9leHRidWYsIHlvdSBjYW4ndCBjaGFuZ2UgaXQgYXQgd2lsbCBh ZnRlciB0aGF0LgoKPgo+Cj4+IAo+PiA+Cj4+ID4+IAo+PiA+PiA+Cj4+ID4+ID4gICAgICBUbyBk byB0aGlzIHByb3Blcmx5LCB0aGUgbWJ1ZiByZWZjbnQgc2hvdWxkIGJlIGluY3JlYXNlZCwgYW5k Cj4+ID4+ID4gICAgICB0aGUgbWJ1ZiBzaG91bGQgYmUgZnJlZWQgaW4gdGhlIGNhbGxiYWNrLiBC dXQgSSBkb24ndCB0aGluayBpdCdzCj4+ID4+ID4gICAgICB3b3J0aCBkb2luZyBpdCwgZ2l2ZW4g dGhlIHNlY29uZCBwYXRoIChiLykgbG9va3MgZ29vZCB0byBtZS4KPj4gPj4gPgo+PiA+PiA+ICAg Yi8gVGhlIHNlY29uZCBwYXRoIHN0b3JlcyB0aGUgc2hpbmZvIHN0cnVjdCBhdCB0aGUgZW5kIG9m IHRoZQo+PiA+PiA+ICAgICAgYWxsb2NhdGVkIGJ1ZmZlciwgbGlrZSB0aGlzOgo+PiA+PiA+Cj4+ ID4+ID4JcGt0ID0gcnRlX3BrdG1idWZfYWxsb2MobXApOwo+PiA+PiA+CWJ1Zl9sZW4gKz0gc2l6 ZW9mKCpzaGluZm8pICsgc2l6ZW9mKHVpbnRwdHJfdCk7Cj4+ID4+ID4JYnVmX2xlbiA9IFJURV9B TElHTl9DRUlMKHRvdGFsX2xlbiwgc2l6ZW9mKHVpbnRwdHJfdCkpOwo+PiA+PiA+CWJ1ZiA9IHJ0 ZV9tYWxsb2MoTlVMTCwgYnVmX2xlbiwgUlRFX0NBQ0hFX0xJTkVfU0laRSk7Cj4+ID4+ID4Jc2hp bmZvID0gcnRlX3BrdG1idWZfZXh0X3NoaW5mb19pbml0X2hlbHBlcihidWYsICZidWZfbGVuLAo+ PiA+PiA+CQkJCQkgICAgICB2aXJ0aW9fZGV2X2V4dGJ1Zl9mcmVlLCBidWYpOwo+PiA+PiA+Cj4+ ID4+ID4gICAgICBJIHRoaW5rIHRoaXMgaXMgY29ycmVjdCwgYmVjYXVzZSB3ZSBoYXZlIHRoZSBn dWFyYW50ZWUgdGhhdCBzaGluZm8KPj4gPj4gPiAgICAgIGV4aXN0cyBhcyBsb25nIGFzIHRoZSBi dWZmZXIgZXhpc3RzLgo+PiA+PiAKPj4gPj4gV2hhdCBidWZmZXIgZG9lcyB0aGUgYWxsb2NhdGVk IGJ1ZmZlciB5b3UncmUgc2F5aW5nIGhlcmU/IFRoZSBpc3N1ZSB3ZSdyZSBkaXNjdXNzaW5nIGhv dyB3ZSBjYW4KPj4gPj4gZnJlZSBvcmlnaW5hbCBtYnVmIHdoaWNoIG93bnMgc2hpbmZvIGJ1ZmZl ci4KPj4gPgo+PiA+SSBkb24ndCBnZXQgeW91ciBxdWVzdGlvbi4KPj4gPgo+PiA+SSdtIGp1c3Qg c2F5aW5nIHRoYXQgdGhpcyBjb2RlIHBhdGggbG9va3MgY29ycmVjdCwgY29tcGFyZWQgdG8KPj4g PnRoZSBwcmV2aW91cyBvbmUuCj4+IAo+PiBJIHRoaW5rIHlvdSdyZSBjaGFsbGVuZ2luZyBwcmlu Y2lwbGUgb2YgZXh0ZXJuYWwgbWJ1ZiwgdGhhdCBpc24ndCB0aGUgdGhpbmcgSSBhZGRyZXNzLgo+ Cj5JJ20gbm90IGNoYWxsZW5naW5nIGFueXRoaW5nLCBJJ20gc2F5aW5nIHRoZXJlIGlzIGEgYnVn IGluIHRoaXMgY29kZSwKPmFuZCB0aGUgdW5pdCB0ZXN0IGFib3ZlIHRlbmRzIHRvIGNvbmZpcm0g aXQuCgpJZiBpdCBpcyBidWcsIHlvdSBjYW4gcG9zdCBhIHBhdGNoIHRvIGZpeCBpdCwgIGl0IGlz bid0IHJlbGF0ZWQgd2l0aCBteSBwYXRjaGVzLiBCdXQgaW4gbXkgb3BpbmlvbiwgeW91IGRvbid0 CnVzZSBpdCBpbiBjb3JyZWN0IHdheSwgSSBkb24ndCB0aGluayBpdCBpcyBhIGJ1Zy4KCj4KPgo+ PiAKPj4gPgo+PiA+PiAKPj4gPj4gPgo+PiA+PiA+Mi8gaW4gcnRlX2dzb19zZWdtZW50KCksIHRo ZXJlIGlzIGEgbG9vcCBsaWtlIHRoaXM6Cj4+ID4+ID4KPj4gPj4gPgl3aGlsZSAocGt0X3NlZykg ewo+PiA+PiA+CQlydGVfbWJ1Zl9yZWZjbnRfdXBkYXRlKHBrdF9zZWcsIC0xKTsKPj4gPj4gPgkJ cGt0X3NlZyA9IHBrdF9zZWctPm5leHQ7Cj4+ID4+ID4JfQo+PiA+PiA+Cj4+ID4+ID4gICBZb3Ug Y2hhbmdlIGl0IHRvIHRha2UgaW4gYWNjb3VudCB0aGUgcmVmY250IGZvciBleHQgbWJ1ZnMuCj4+ ID4+ID4KPj4gPj4gPiAgIEkgbWF5IGhhdmUgbWlzc2VkIHNvbWV0aGluZyBidXQgSSB3b25kZXIg d2h5IGl0IGlzIG5vdCBzaW1wbHk6Cj4+ID4+ID4KPj4gPj4gPglydGVfcGt0bWJ1Zl9mcmVlKHBr dF9zZWcpOwo+PiA+PiA+Cj4+ID4+ID4gICBJdCB3aWxsIGRlY3JlYXNlIHRoZSBwcm9wZXIgcmVm Y250LCBhbmQgZnJlZSB0aGUgbWJ1ZnMgaWYgdGhleQo+PiA+PiA+ICAgYXJlIG5vdCB1c2VkLgo+ PiA+PiAKPj4gPj4gQWdhaW4sIHJ0ZV9nc29fc2VnbWVudCBqdXN0IGRlY3JlYXNlcyByZWZjbnQg Ynkgb25lLCB0aGlzIHdpbGwgZW5zdXJlIHRoZSBsYXN0IHNlZ21lbnRlZCAKPj4gPj4gbWJ1ZiBm cmVlIHdpbGwgdHJpZ2dlciBmcmVlaW5nIG9yaWdpbmFsIG1idWYgKG9ubHkgZnJlZV9jYiBjYW4g ZG8gdGhpcykuCj4+ID4KPj4gPnJ0ZV9wa3RtYnVmX2ZyZWUoKSB3aWxsIGFsc28gZGVjZXJhc2Ug dGhlIHJlZmNudCwgYW5kIGZyZWUgdGhlIHJlc291cmNlcwo+PiA+d2hlbiB0aGUgcmVmY250IHJl YWNoZXMgMC4KPj4gPgo+PiA+SXQgaGFzIHNvbWUgYWR2YW50YWdlcyBjb21wYXJlZCB0byBkZWNy ZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50ZXIgb2YgYWxsCj4+ID5zZWdtZW50czoKPj4gPgo+PiA+ LSBubyBuZWVkIHRvIGl0ZXJhdGUgdGhlIHNlZ21lbnRzLCB0aGVyZSBpcyBvbmx5IG9uZSBmdW5j dGlvbiBjYWxsCj4+ID4tIG5vIG5lZWQgdG8gaGF2ZSBhIHNwZWNpYWwgY2FzZSBmb3IgZXh0IG1i dWZzIGxpa2UgeW91IGRpZCBpbiB5b3VyIHBhdGNoCj4+ID4tIGl0IG1heSBiZSBzYWZlciwgaW4g Y2FzZSBzb21lIHNlZ21lbnRzIGhhdmUgYSByZWZjbnQgPT0gMSwgYmVjYXVzZQo+PiA+ICByZXNv dXJjZXMgd2lsbCBiZSBmcmVlZC4KPj4gCj4+IEZvciBleHRlcm5hbCBtYnVmLCBhdHRhY2ggb25s eSBpbmNyZWFzZXMgcmVmY250IG9mIHNoaW5mbywgcmVmY250IG9mIG1idWYgd29uJ3QgYmUgdG91 Y2hlZC4gRm9yIG5vcm1hbAo+PiBtYnVmLCBhdHRhY2ggb25seSBpbmNyZWFzZSByZWZjbnQgb2Yg bWJ1Ziwgbm8gc2hpbmZvIHRoZXJlLCBubyByZWZjbnQgb2Ygc2hpbmZvIGluY3JlYXNlZC4KPgo+ SSBzdXBwb3NlIHJ0ZV9nc29fc2VnbWVudCgpIGNhbiB0YWtlIGFueSBtYnVmIHR5cGUgYXMgaW5w dXQ6IHN0YW5kYXJkCj5tYnVmLCBpbmRpcmVjdCBtYnVmLCBleHQgbWJ1Ziwgb3IgZXZlbiBhIG1i dWYgY2hhaW5nIGNvbnRhaW5pbmcgc2VnbWVudHMgb2YKPmRpZmZlcmVudCB0eXBlcy4KPgo+Rm9y IGluc3RhbmNlLCBpZiB5b3UgcGFzcyBhIGNoYWluIG9mIDIgbWJ1ZnM6Cj4tIHRoZSBmaXJzdCBv bmUgaXMgYSBkaXJlY3QgbWJ1ZiBjb250YWluaW5nIHRoZSBJUC9UQ1AgaGVhZGVycyAob3JpZ19o ZHIpCj4tIHRoZSBzZWNvbmQgb24gaXMgYSBtYnVmIHBvaW50aW5nIHRvIGFuIGV4dCBidWZmZXIg KG9yaWdfcGF5bG9hZCkKPgo+SSBleHBlY3QgdGhhdCB0aGUgcmVzdWx0aW5nIG1idWYgYWZ0ZXIg Y2FsbGluZyBnc28gY29udGFpbnMgYSBsaXN0IG9mIG1idWZzCj5saWtlIHRoaXM6Cj4tIGEgZmly c3Qgc2VnbWVudCBjb250YWluaW5nIHRoZSBJUC9UQ1AgaGVhZGVycyAobmV3X2hkcikKPi0gYSBw YXlsb2FkIHNlZ21lbnQgcG9pbnRpbmcgb24gdGhlIHNhbWUgZXh0IGJ1ZmZlcgo+Cj5JbiB0aGVv cnksIHRoZXJlIGlzIG5vIHJlYXNvbiB0aGF0IG9yaWdfaGRyIHNob3VsZCBiZSByZWZlcmVuY2Vk IGJ5Cj5hbm90aGVyIG5ldyBtYnVmLCBiZWNhdXNlIGl0IG9ubHkgY29udGFpbnMgaGVhZGVycyAo bm8gZGF0YSkuIElmIHRoYXQncwo+dGhlIGNhc2UsIGl0cyByZWZjbnQgaXMgMSwgYW5kIGRlY3Jl YXNpbmcgaXQgdG8gMCB3aXRob3V0IGZyZWVpbmcgaXQKPmlzIGEgYnVnLgoKRm9yIHRoaXMgdXNl ciBzY2VuYXJpbywgb3JpZ19tIGlzIG93bmVyIG9mIGV4dGVybmFsIGJ1ZmZlciwgc21hbGwgc2Vn bWVudGVkIG1idWZzIHJlZmVyZW5jZQppdCwgeW91IHNob3VsZG4ndCBmcmVlIG9yaWdfbSBiZWZv cmUgYWxsIGF0dGFjaGVkIHNlZ21lbnRlZCBtYnVmcyBhcmUgZnJlZWQsIGlzbid0IGl0PwoKPgo+ QW55d2F5LCB0aGVyZSBpcyBtYXliZSBubyBpc3N1ZSBpbiB0aGF0IGNhc2UsIGJ1dCBJIHdhcyBq dXN0IHN1Z2dlc3RpbmcKPnRoYXQgdXNpbmcgcnRlX3BrdG1idWZfZnJlZSgpIGlzIGVhc2llciB0 byByZWFkLCBhbmQgc2FmZXIgdGhhbiBtYW51YWxseQo+ZGVjcmVhc2luZyB0aGUgcmVmY250IG9m IGVhY2ggc2VnbWVudC4KPgo+Cj4+ID4+ID5BZ2Fpbiwgc29ycnkgaWYgdGhpcyBpcyBub3QgdGhl IGlzc3VlIHlvdXIgYXJlIHJlZmVycmluZyB0bywgYnV0Cj4+ID4+ID5pbiB0aGlzIGNhc2UgSSBy ZWFsbHkgdGhpbmsgdGhhdCBoYXZpbmcgYSBzaW1wbGUgZXhhbXBsZSBjb2RlIHRoYXQKPj4gPj4g PnNob3dzIHRoZSBpc3N1ZSB3b3VsZCBoZWxwLgo+PiA+PiAKPj4gPj4gT2xpdmVyLCBteSBzdGF0 ZW1lbnQgaW4gdGhlIHBhdGNoIEkgc2VudCBvdXQgaGFzIHBzZXVkbyBjb2RlIHRvIHNob3cgdGhp cy4gIEkgZG9uJ3QgdGhpbmsgYSBzaW1wbGUKPj4gPj4gdW5pdCB0ZXN0IGNhbiBzaG93IGl0Lgo+ PiA+Cj4+ID5JIGRvbid0IHNlZSB3aHkuIFRoZSBQTURzIGFuZCB0aGUgbGlicmFyaWVzIHVzZSB0 aGUgbWJ1ZiBmdW5jdGlvbnMsIHdoeQo+PiA+YSB1bml0IHRlc3QgY291bGRuJ3QgY2FsbCB0aGUg c2FtZSBmdW5jdGlvbnM/Cj4+ID4KPj4gPj4gTGV0IG1lIHN1bW1hcml6ZSBpdCBoZXJlIGFnYWlu LiBGb3Igb3JpZ2luYWwgbWJ1ZiwgdGhlcmUgYXJlIHR3byBjYXNlcyBmcmVlaW5nCj4+ID4+IGl0 LCBjYXNlIG9uZSBpcyBQTUQgZHJpdmVyIGNhbGxzIGZyZWUgYWdhaW5zdCBzZWdtZW50ZWQgbWJ1 ZnMsIGxhc3Qgc2VnbWVudGVkIG1idWYgZnJlZSB3aWxsIHRyaWdnZXIKPj4gPj4gZnJlZV9jYiBj YWxsIHdoaWNoIHdpbGwgZnJlZSBvcmlnaW5hbCBsYXJnZSAmIGV4dGVuZGVkIG1idWYuCj4+ID4K Pj4gPk9LCj4+ID4KPj4gPj4gQ2FzZSB0d28gaXMgUE1EIGRyaXZlciB3aWxsIGNhbGwgZnJlZSBh Z2FpbnN0Cj4+ID4+IG9yaWdpbmFsIG1idWYsIHRoYXQgYWxzbyB3aWxsIGNhbGwgZnJlZV9jYiB0 byBmcmVlIGF0dGFjaGVkIGV4dGVuZGVkIGJ1ZmZlci4KPj4gPgo+PiA+T0sKPj4gPgo+PiA+QW5k IHdoYXQgbWFrZXMgdGhhdCBjYXNlIDEgb3IgY2FzZSAyIGlzIGV4ZWN1dGVkPwo+PiA+Cj4+ID4+ IEluIGNhc2Ugb25lIGZyZWVfY2IgbXVzdCBjYWxsCj4+ID4+IHJ0ZV9wa3RtYnVmX2ZyZWUgb3Ro ZXJ3aXNlIG5vYm9keSB3aWxsIGZyZWUgb3JpZ2luYWwgbGFyZ2UgJiBleHRlbmRlZCBtYnVmLCBp biBjYXNlIHR3byBmcmVlX2NiIGNhbid0IAo+PiA+PiBjYWxsIHJ0ZV9wa3RtYnVmX2ZyZWUgYmVj YXVzZSB0aGUgY2FsbGVyIGNhbGxpbmcgaXQgaXMganVzdCBydGVfcGt0bWJ1Zl9mcmVlIHdlIG5l ZWQuIFRoYXQgaXMgdG8gc2F5LCB5b3UKPj4gPj4gbXVzdCB1c2UgdGhlIHNhbWUgZnJlZV9jYiB0 byBoYW5kbGUgdGhlc2UgdHdvIGNhc2VzLCB0aGlzIGlzIG15IGlzc3VlIGFuZCB0aGUgcG9pbnQg eW91IGRvbid0IGdldC4KPj4gPgo+PiA+SSB0aGluayB0aGVyZSBpcyBubyBuZWVkIHRvIGNoYW5n ZSB0aGUgZnJlZV9jYiBBUEkuIEl0IHNob3VsZCB3b3JrIGxpa2UKPj4gPnRoaXM6Cj4+ID4KPj4g Pi0gdmlydGlvIGNyZWF0ZXMgdGhlIG9yaWdpbmFsIGV4dGVybmFsIG1idWYgKG9yaWdfbSkKPj4g Pi0gZ3NvIHdpbGwgY3JlYXRlIGEgbmV3IG1idWYgcmVmZXJlbmNpbmcgdGhlIGV4dGVybmFsIGJ1 ZmZlciAobmV3X20pCj4+ID4KPj4gPkF0IHRoaXMgcG9pbnQsIHRoZSBzaGluZm8gaGFzIGEgcmVm Y250IG9mIDIuIFRoZSBsYXJnZSBidWZmZXIgd2lsbCBiZQo+PiA+ZnJlZWQgYXMgc29vbiBhcyBy dGVfcGt0bWJ1Zl9mcmVlKCkgaXMgY2FsbGVkIG9uIG9yaWdfbSBhbmQgbmV3X20sCj4+ID53aGF0 ZXZlciB0aGUgb3JkZXIuCj4+ID4KPj4gPlJlZ2FyZHMsCj4+ID5PbGl2aWVyCj4+IAo+PiBPbGl2 ZXIsIHRoZSByZWFzb24gaXQgd29ya3MgaXMgSSBjaGFuZ2VkIGZyZWVfY2IgQVBJLCBjYXNlIDEg ZG9lc24ndCBrbm93IG9yaWdfbSwgaG93IHlvdSBtYWtlIGl0IGZyZWUgb3JpZ19tIGluIGZyZWVf Y2IuCj4+IFRoZSBpbnRlbnRpb24gSSBjaGFuZ2UgZnJlZV9jYiBpcyB0byBsZXQgaXQga25vdyBv cmlnX20sIEkgc2F3IE9WUyBEUERLIHJhbiBvdXQgb3V0IGJ1ZmZlcnMgYW5kIG9yaWdfbSBpc24n dCBmcmVlZCwgdGhhdCBpcyB3aHkKPj4gSSB3YW50IHRvIGJyaW5nIGluIHRoaXMgdG8gZml4IHRo ZSBpc3N1ZS4gQWdhaW4sIGluIGNhc2UgMSwgbm9ib2R5IGV4cGxpY2l0bHkgY2FsbHMgcmV0X3Br dG1idWZfZnJlZShvcmlnX20pIGV4Y2VwdCBmcmVlX2NiIEkgY2hhbmdlZC4KPgo+SWYgbm9ib2R5 IGNhbGxzIHJldF9wa3RtYnVmX2ZyZWUob3JpZ19tKSwgaXQgaXMgYSBwcm9ibGVtLgo+VGhlIGZy ZWVfY2IgaXMgdG8gZnJlZSB0aGUgYnVmZmVyLCBub3QgdGhlIG1idWYuCj4KPlRvIG1lLCBpdCBz aG91bGQgd29yayBsaWtlIHRoaXM6Cj4KPjEtIHZpcnRpbyBjcmVhdGVzIGEgbWJ1ZiBhdHRhY2hl ZCB0byB0aGUgZXh0IGJ1ZmZlciAodGhlIHNoaW5mbyBwbGFjZW1lbnQKPiAgIGJ1ZyBzaG91bGQg YmUgZml4ZWQpCj4yLSBnc28gY3JlYXRlIG1idWZzIHRoYXQgcmVmZXJlbmNlIHRoZSB0aGUgc2Ft ZSBleHQgYnVmIChieSBhdHRhY2hpbmcgdGhlCj4gICBuZXcgbWJ1ZikKPjMtIGdzbyBtdXN0IGZy ZWUgdGhlIG9yaWdpbmFsIG1idWYKClRoaXMgaXMgaW1wb3NzaWJsZSwgc2VnbWVudGVkIG1idWZz IGFyZSByZWZlcmVuY2luZyBleHRlcm5hbCBidWZmZXIgaW4gb3JpZ2luYWwgbWJ1ZiwKaG93IGRv IHlvdSBmcmVlIGl0PyBBcyBJIHNhaWQgcnRlX2dzb19zZWdtZW50IGhhcyBubyB3YXkgdG8gZnJl ZSBpdCwgcGxlYXNlIHRlbGwgbWUgYSB3YXkgaWYKeW91IGtub3cgaG93IHRvIGRvIHRoaXMuCgo+ NC0gdGhlIFBNRCB0cmFuc21pdHMgdGhlIG5ldyBtYnVmcywgYW5kIGZyZWVzIHRoZW0KPgo+V2hh dGV2ZXIgMy0gb3IgNC0gaXMgZXhlY3V0ZWQgZmlyc3QsIGF0IHRoZSBlbmQgd2UgYXJlIHN1cmUg dGhhdDoKPi0gYWxsIG1idWZzIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHBvb2wKPi0gdGhlIGxp bmVhciBidWZmZXIgd2lsbCBiZSBmcmVlZCB3aGVuIHRoZSByZWZjbnQgcmVhY2hlcyAwLgo+Cj5J ZiB0aGlzIGlzIHN0aWxsIHVuY2xlYXIsIHBsZWFzZSwgd3JpdGUgYSB1bml0IHRlc3QgbGlrZSBJ IGRpZAo+YWJvdmUgdG8gc2hvdyB5b3VyIGlzc3VlLgo+Cj5SZWdhcmRzLAo+T2xpdmllcgo+CgpU aGUgaXNzdWUgaXMgaW4gIjMtIGdzbyBtdXN0IGZyZWUgdGhlIG9yaWdpbmFsIG1idWYiLCBydGVf cGt0bWJ1Zl9mcmVlKHNlZ21lbnRlZF9tYnVzKSBjYW4ndCBkbyBpdCwKcnRlX2dzb19zZWdtZW50 IGlzIGltcG9zc2libGUgdG8gZG8gaXQsIG9ubHkgZmVhc2libGUgcG9pbnQgaXMgZnJlZV9jYiwg cGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSBoYXZlCmEgYmV0dGVyIHdheSB0byBmcmVlIG9yaWdp bmFsIG1idWYgYW5kIGRvbid0IGltcGFjdCBvbiBzZWdtZW50ZWQgbWJ1ZnMgaW4gUE1ELiBNeSBw b2ludCBpcyB5b3UgbXVzdApoYXZlIGEgcGxhY2UgdG8gY2FsbCBydGVfcGt0bWJ1Zl9mcmVlKHJv Z2luX20pIGV4cGxpY2l0bHksIG90aGVyd2lzZSBpdCBpcyBpbXBvc3NpYmxlICB0byByZXR1cm4g aXQgdG8gbWVtb3J5CnBvb2wsIHBsZWFzZSBwb2ludCBvdXQgIHdoZXJlIGl0IGNhbiBiZSBjYWxs ZWQgaW4gbXkgdXNlciBzY2VuYXJpby4gSSBkb24ndCBjYXJlIGhvdyBpdCBpcyBkb25lLCBJIGp1 c3QgY2FyZSBpdCBjYW4KZml4IG15IGlzc3VlLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgYW5kIHNl bmQgbWUgYSBwYXRjaCBpZiB5b3UgY2FuLCB0aGFua3MgYSBsb3QuCgo+Cj4KPj4gZnJlZV9jYiBt dXN0IGhhbmRsZSBjYXNlIDEgYW5kIGNhc2UgMiBpbiB0aGUgc2FtZSBjb2RlLCBmb3IgY2FzZSAx LCBjYWxsZXJfbSBpcyBzZWdtZW50ZWQgbmV3X20sIGZvciBjYXNlIDIsIGNhbGxlcl9tIGlzIG9y aWdfbS4KPj4gCj4+IGxvb3AgaW4gcnRlX2dzb19zZWdlbWVudCBpcyBoYW5kbGluZyBvcmlnaW5h bCBtYnVmICh0aGlzIG1idWYgaXMgbXVsdGktbWJ1ZiBhbmQgaW5jbHVkZXMgbXVsdGlwbGUgbWJ1 ZnMgd2hpY2ggYXJlIGxpbmtlZCBieSBuZXh0Cj4+IHBvaW50ZXIpLCBpdCBpc24ndCBhIHByb2Js ZW0gYXQgYWxsLgo+PiAKPj4gUGxlYXNlIHNob3cgbWUgY29kZSBob3cgeW91IGNhbiBmaXggbXkg aXNzdWUgaWYgeW91IGRvbid0IGNoYW5nZSBmcmVlX2NiLCB0aGFuayB5b3UuCj4+IAo+PiBzdHJ1 Y3Qgc2hpbmZvX2FyZyB7Cj4+ICAgICAgICB2b2lkICpidWY7Cj4+ICAgICAgICBzdHJ1Y3QgcnRl X21idWYgKm1idWY7Cj4+IH07Cj4+IAo+PiB2aXJ0aW9fZGV2X2V4dGJ1Zl9mcmVlKHN0cnVjdCBy dGVfbWJ1ZiAqY2FsbGVyX20sIHZvaWQgKm9wYXF1ZSkKPj4gewo+PiAgICAgICAgc3RydWN0IHNo aW5mb19hcmcgKmFyZyA9IChzdHJ1Y3Qgc2hpbmZvX2FyZyAqKW9wYXF1ZTsKPj4gCj4+ICAgICAg ICBydGVfZnJlZShhcmctPmJ1Zik7Cj4+ICAgICAgICBpZiAoY2FsbGVyX20gIT0gYXJnLT5tYnVm KQo+PiAgICAgICAgICAgICAgICBydGVfcGt0bWJ1Zl9mcmVlKGFyZy0+bWJ1Zik7Cj4+ICAgICAg ICBydGVfZnJlZShhcmcpOwo+PiB9CgoKCgoKCgog