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 3FFF0A04BC; Sat, 10 Oct 2020 03:49:50 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BE2801D654; Sat, 10 Oct 2020 03:49:47 +0200 (CEST) Received: from m1388.mail.163.com (m1388.mail.163.com [220.181.13.88]) by dpdk.org (Postfix) with ESMTP id 6BD501D63E for ; Sat, 10 Oct 2020 03:49:44 +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=Io3dA yOC6qktZn5LBow6HQzKudvqDxKSMy825+TbWww=; b=dAxwlH/NLjgcZ4is/ZR1T rnBLHNIqcXYfGCO/MdeLxKJxYZfkNWtb56rEhMH4tE1Ms8s72MaimTLGiPF/7L6l 1Xq9OwRFFXJprBwo7y/4F+/tmTIdS60t3Qd+StFVIFcbLarcpa3Fc8pPf5wMKSr8 jTSwpsKQWGfxRdrB54g3dM= Received: from yang_y_yi$163.com ( [111.207.123.58] ) by ajax-webmail-wmsvr88 (Coremail) ; Sat, 10 Oct 2020 09:49:35 +0800 (CST) X-Originating-IP: [111.207.123.58] Date: Sat, 10 Oct 2020 09:49:35 +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: 3 X-Mailer: Coremail Webmail Server Version XT5.0.10 build 20190724(ac680a23) Copyright (c) 2002-2020 www.mailtech.cn 163com In-Reply-To: <20201009115525.GC21395@platinum> References: <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> <76308d9c.2b0b.174ce214814.Coremail.yang_y_yi@163.com> <20201007094821.GP21395@platinum> <95e7dd5.68f2.1750cc5aee0.Coremail.yang_y_yi@163.com> <20201009115525.GC21395@platinum> X-CM-CTRLDATA: kkfkC2Zvb3Rlcl9odG09MzE4ODg6NTY= MIME-Version: 1.0 Message-ID: <6d9c1522.127d.1751032f37a.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: WMGowAAXV8IwE4Ff6d6DAA--.63375W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/xtbBEhC5i16iZboqGQAAsg 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" T2xpdmllciwgdGhhbmsgeW91IHNvIG11Y2ggZm9yIGhlbHBpbmcgZmlndXJlIG91dCB0aGlzLCBp dCBkb2VzIHdvcmsgYXMgdGhlIGNvZGUgeW91IGNoYW5nZWQsIHNvIHdlIGNhbiBmaXggdGhlIGlz c3VlIHdpdGhvdXQgdGhpcyBwYXRjaCBzZXJpZXMuIE15IHF1ZXN0aW9uIGlzIGNhbiBpdCBhbHNv IHdvcmsgZm9yIG5vcm1hbCBtYnVmIG9yIGluZGlyZWN0IG1idWY/IChJIG1lYW4gcGt0IGlzIGRp cmVjdCBtYnVmIG9yIGluZGlyZWN0IG1idWYpCgpBdCAyMDIwLTEwLTA5IDE5OjU1OjI1LCAiT2xp dmllciBNYXR6IiA8b2xpdmllci5tYXR6QDZ3aW5kLmNvbT4gd3JvdGU6Cj5IaSwKPgo+T24gRnJp LCBPY3QgMDksIDIwMjAgYXQgMDU6NTE6MjNQTSArMDgwMCwgeWFuZ195X3lpIHdyb3RlOgo+PiBP bGl2aWVyLCB0aGFuayB5b3Ugc28gbXVjaCBmb3IgeW91ciByZXBseSwgeW91ciBwYXRjaCBwb3N0 IGZvciB2aG9zdCBoZWxwIG1lIHVuZGVyc3RhbmQgeW91ciBjb25jZXJuIGJldHRlciwgSSB0b3Rh bGx5IGFncmVlLiBGb3IgR1NPIGNhc2UsIGxldCBtZSBzaG93IHlvdSBhIHNpbXBsZSBjb2RlIHRv IGV4cGxhaW4gbXkgaXNzdWUuCj4+IAo+PiAKPj4gCj4+IAo+PiAKPj4gc3RydWN0IHJ0ZV9tYnVm ICpwa3QgPSBydGVfcGt0bWJ1Zl9hbGxvYyhtcCk7Cj4+IHZpcnRpb19kZXZfZXh0YnVmX2FsbG9j KHBrdCwgZGF0YV9sZW4pCj4+IHN0cnVjdCBydGVfbWJ1ZiAqIHBrdF9zZWcxID0gcnRlX3BrdG1i dWZfYWxsb2MoaW5kaXJlY3RfcG9vbCk7Cj4+IAo+PiAKPj4gcnRlX3BrdG1idWZfYXR0YWNoKHBr dF9zZWcxLCBwa3QpOwo+PiBydGVfbWJ1Zl9leHRfcmVmY250X3VwZGF0ZShwa3QsIC0xKTsKPj4g Cj4+IHN0cnVjdCBydGVfbWJ1ZiAqIHBrdF9zZWcyID0gcnRlX3BrdG1idWZfYWxsb2MoaW5kaXJl Y3RfcG9vbCk7Cj4+IHJ0ZV9wa3RtYnVmX2F0dGFjaChwa3Rfc2VnMiwgcGt0KTsKPj4gcnRlX21i dWZfZXh0X3JlZmNudF91cGRhdGUocGt0LCAtMSk7Cj4+IHN0cnVjdCBydGVfbWJ1ZiAqcGt0X3Nl Z3NbMl0gPSB7cGt0X3NlZzEsIHBrdF9zZWcyfTsKPj4gCj4+IHJ0ZV9ldGhfdHhfYnVyc3QoZGV2 LT5wb3J0X2lkLCBxaWQsIHBrdF9zZWdzLCAyKTsKPj4gCj4+IAo+PiBJcyBpdCBhIHNpbXBsZSB0 ZXN0IHlvdSBleHBlY3Q/IFRoZSBpc3N1ZSBoZXJlIGlzIG5vYm9keSBleHBsaWNpdGx5IGNhbGxz Cj4+IHJ0ZV9wa3RtYnVmX2ZyZWUocGt0KSwgcnRlX3BrdG1idWZfZnJlZShwa3Rfc2VnWCkgaW4g UE1EIGRyaXZlciB3b24ndCBmcmVlCj4+ICJwa3QiLCBJcyBpdCBjbGVhciB0byB5b3Ugbm93Pwo+ Cj4KPlRoYW5rIHlvdSBmb3IgdGhlIHNtYWxsIGNvZGUuIFllcywgdGhpcyBpcyB3aGF0IEkgZXhw ZWN0ZWQuCj4KPlRoZSBwcm9wZXIgd2F5IHRvIGRvIHRoaXMgaXMgc29tZXRoaW5nIGxpa2UgdGhp czoKPgo+CS8qIGNyZWF0ZSBhIG1idWYsIGFuZCBhdHRhY2ggaXQgdG8gYW4gZXh0ZXJuYWwgYnVm ZmVyICovCj4Jc3RydWN0IHJ0ZV9tYnVmICpwa3QgPSBydGVfcGt0bWJ1Zl9hbGxvYyhtcCk7Cj4J dmlydGlvX2Rldl9leHRidWZfYWxsb2MocGt0LCBkYXRhX2xlbikKPgo+CS8qIGNyZWF0ZSBhIG5l dyBtYnVmLCBhdHRhY2ggaXQgdG8gdGhlIHByZXZpb3VzIG9uZTogdGhlIHJlc3VsdGluZwo+CSAq IG1idWYgaXMgYWxzbyBhbiAiZXh0ZXJuYWwgbWJ1ZiIgKGlzIGhhcyB0aGUgRVhUX0FUVEFDSEVE X01CVUYKPgkgKiBmbGFnLCBhbmQgaXRzIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBleHQgYnVmZmVy Lgo+CSAqIFNlZSBhbiBleGFtcGxlIGhlcmU6IGh0dHBzOi8vd3d3LmRyb2lkcy1jb3JwLm9yZy9+ emVyMC9leHQtbWJ1Zi5zdmcKPgkgKi8KPglzdHJ1Y3QgcnRlX21idWYgKnBrdF9zZWcxID0gcnRl X3BrdG1idWZfYWxsb2MoaW5kaXJlY3RfcG9vbCk7Cj4JcnRlX3BrdG1idWZfYXR0YWNoKHBrdF9z ZWcxLCBwa3QpOwo+Cj4JLyogZG8gdGhlIHNhbWUgYW5vdGhlciB0aW1lICovCj4Jc3RydWN0IHJ0 ZV9tYnVmICpwa3Rfc2VnMiA9IHJ0ZV9wa3RtYnVmX2FsbG9jKGluZGlyZWN0X3Bvb2wpOwo+CXJ0 ZV9wa3RtYnVmX2F0dGFjaChwa3Rfc2VnMiwgcGt0KTsKPgo+CS8qIHJlbGVhc2UgdGhlIG9yaWdp bmFsIHBrdCwgd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlICovCj4JcnRlX3BrdG1idWZfZnJlZShw a3QpOwo+Cj4JLyogc2VuZCB0aGUgbmV3IHNlZ21lbnRzLCB0aGV5IHdpbGwgYmUgZnJlZWQgYnkg dGhlIGRyaXZlciBvbmNlCj4JICogVHggaXMgZG9uZS4gV2hlbiB0aGUgbGFzdCBwYWNrZXQgcmVm ZXJlbmNpbmcgdGhlIGV4dGVybmFsIGJ1ZmZlcgo+CSAqIGlzIGZyZWVkLCB0aGUgZnJlZSBjYWxs YmFjayBvZiB0aGUgYnVmZmVyIHdpbGwgYmUgaW52b2tlZC4gKi8KPglzdHJ1Y3QgcnRlX21idWYg KnBrdF9zZWdzWzJdID0ge3BrdF9zZWcxLCBwa3Rfc2VnMn07Cj4JcnRlX2V0aF90eF9idXJzdChk ZXYtPnBvcnRfaWQsIHFpZCwgcGt0X3NlZ3MsIDIpOwo+Cj5Ib3BlIHRoaXMgaXMgY2xlYXJlciBu b3cuCj4KPlJlZ2FyZHMsCj5PbGl2aWVyCj4KPgo+PiAKPj4gCj4+IAo+PiAKPj4gCj4+IAo+PiAK Pj4gCj4+IAo+PiAKPj4gCj4+IEF0IDIwMjAtMTAtMDcgMTc6NDg6MjEsICJPbGl2aWVyIE1hdHoi IDxvbGl2aWVyLm1hdHpANndpbmQuY29tPiB3cm90ZToKPj4gPkhpLAo+PiA+Cj4+ID5PbiBTdW4s IFNlcCAyNywgMjAyMCBhdCAwMTo1NToyMVBNICswODAwLCB5YW5nX3lfeWkgd3JvdGU6Cj4+ID4+ IFBlciBHU08gcmVxdWlyZW1lbnQsIHRoaXMgaXMgYSBtdXN0LWhhdmUgY2hhbmdlLCBKaWF5dSwg Y2FuIHlvdSBoZWxwIHJldmlldwo+PiA+PiB0aGlzIHNlcmllcz8KPj4gPgo+PiA+SSBjYW4ndCBh Y2sgdGhpcyBwYXRjaCB1bnRpbCBJIGhhdmUgYSBzaW1wbGUgYW5kIGNsZWFyIHRlc3QgY2FzZSAo b25seQo+PiA+d2l0aCBtYnVmIGZ1bmN0aW9ucywgd2l0aG91dCBHU08gb3Igdmhvc3QpIHNob3dp bmcgdGhlIGlzc3VlIHdlIGhhdmUKPj4gPnRvZGF5IHdpdGggY3VycmVudC4KPj4gPgo+PiA+PiBP bGl2aWVyLCBpZiB5b3UgdXNlZCB0aGUgb2xkIGludGVyZmFjZSwgbWF5YmUgeW91IG5lZWQgdG8g Y2hhbmdlIHlvdXIgY29kZSB0bwo+PiA+PiBhZGFwdCB0aGlzLCBJIGRvbid0IHRoaW5rIHdlIGNh biBoYXZlIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgR1NPIGNhc2UuCj4+ID4KPj4gPlNvcnJ5LCBJ IGRvbid0IGdldCB5b3VyIHBvaW50LiBXaGF0IGRvIEkgbmVlZCB0byBjaGFuZ2UgaW4gd2hpY2gg Y29kZT8KPj4gPgo+PiA+KHNvbWUgbW9yZSBjb21tZW50cyBiZWxvdykKPj4gPgo+PiA+PiBBdCAy MDIwLTA4LTA0IDA5OjMxOjE5LCAieWFuZ195X3lpIiA8eWFuZ195X3lpQDE2My5jb20+IHdyb3Rl Ogo+PiA+PiAKPj4gPj4gQXQgMjAyMC0wOC0wMyAyMDozNDoyNSwgIk9saXZpZXIgTWF0eiIgPG9s aXZpZXIubWF0ekA2d2luZC5jb20+IHdyb3RlOgo+PiA+PiA+T24gTW9uLCBBdWcgMDMsIDIwMjAg YXQgMDU6NDI6MTNQTSArMDgwMCwgeWFuZ195X3lpIHdyb3RlOgo+PiA+PiA+PiBBdCAyMDIwLTA4 LTAzIDE2OjExOjM5LCAiT2xpdmllciBNYXR6IiA8b2xpdmllci5tYXR6QDZ3aW5kLmNvbT4gd3Jv dGU6Cj4+ID4+ID4+ID5PbiBNb24sIEF1ZyAwMywgMjAyMCBhdCAwOToyNjo0MEFNICswODAwLCB5 YW5nX3lfeWkgd3JvdGU6Cj4+ID4+ID4+ID4+IEF0IDIwMjAtMDgtMDMgMDQ6Mjk6MDcsICJPbGl2 aWVyIE1hdHoiIDxvbGl2aWVyLm1hdHpANndpbmQuY29tPiB3cm90ZToKPj4gPj4gPj4gPj4gPkhp LAo+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID5PbiBTdW4sIEF1ZyAwMiwgMjAyMCBhdCAwNzox MjozNkFNICswODAwLCB5YW5nX3lfeWkgd3JvdGU6Cj4+ID4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+ PiA+PiAKPj4gPj4gPj4gPj4gPj4gQXQgMjAyMC0wNy0zMSAyMzoxNTo0MywgIk9saXZpZXIgTWF0 eiIgPG9saXZpZXIubWF0ekA2d2luZC5jb20+IHdyb3RlOgo+PiA+PiA+PiA+PiA+PiA+SGksCj4+ ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gPk9uIFRodSwgSnVsIDMwLCAyMDIwIGF0IDA4 OjA4OjU5UE0gKzA4MDAsIHlhbmdfeV95aUAxNjMuY29tIHdyb3RlOgo+PiA+PiA+PiA+PiA+PiA+ PiBGcm9tOiBZaSBZYW5nIDx5YW5neWkwMUBpbnNwdXIuY29tPgo+PiA+PiA+PiA+PiA+PiA+PiAK Pj4gPj4gPj4gPj4gPj4gPj4gSW4gR1NPIGNhc2UsIHNlZ21lbnRlZCBtYnVmcyBhcmUgYXR0YWNo ZWQgdG8gb3JpZ2luYWwKPj4gPj4gPj4gPj4gPj4gPj4gbWJ1ZiB3aGljaCBjYW4ndCBiZSBmcmVl ZCB3aGVuIGl0IGlzIGV4dGVybmFsLiBUaGUgaXNzdWUKPj4gPj4gPj4gPj4gPj4gPj4gaXMgZnJl ZV9jYiBkb2Vzbid0IGtub3cgb3JpZ2luYWwgbWJ1ZiBhbmQgZG9lc24ndCBmcmVlCj4+ID4+ID4+ ID4+ID4+ID4+IGl0IHdoZW4gcmVmY250IG9mIHNoaW5mbyBpcyAwLgo+PiA+PiA+PiA+PiA+PiA+ PiAKPj4gPj4gPj4gPj4gPj4gPj4gT3JpZ2luYWwgbWJ1ZiBjYW4gYmUgZnJlZWQgYnkgcnRlX3Br dG1idWZfZnJlZSBzZWdtZW50ZWQKPj4gPj4gPj4gPj4gPj4gPj4gbWJ1ZnMgb3IgYnkgcnRlX3Br dG1idWZfZnJlZSBvcmlnaW5hbCBtYnVmLiBUd28ga2luZCBvZgo+PiA+PiA+PiA+PiA+PiA+PiBj YXNlcyBzaG91bGQgaGF2ZSBkaWZmZXJlbnQgYmVoYXZpb3JzLiBmcmVlX2NiIHdvbid0Cj4+ID4+ ID4+ID4+ID4+ID4+IGV4cGxpY2l0bHkgY2FsbCBydGVfcGt0bWJ1Zl9mcmVlIHRvIGZyZWUgb3Jp Z2luYWwgbWJ1Zgo+PiA+PiA+PiA+PiA+PiA+PiBpZiBpdCBpcyBmcmVlZCBieSBydGVfcGt0bWJ1 Zl9mcmVlIG9yaWdpbmFsIG1idWYsIGJ1dCBpdAo+PiA+PiA+PiA+PiA+PiA+PiBoYXMgdG8gY2Fs bCBydGVfcGt0bWJ1Zl9mcmVlIHRvIGZyZWUgb3JpZ2luYWwgbWJ1ZiBpZiBpdAo+PiA+PiA+PiA+ PiA+PiA+PiBpcyBmcmVlZCBieSBydGVfcGt0bWJ1Zl9mcmVlIHNlZ21lbnRlZCBtYnVmcy4KPj4g Pj4gPj4gPj4gPj4gPj4gCj4+ID4+ID4+ID4+ID4+ID4+IEluIG9yZGVyIHRvIGZpeCB0aGlzIGlz c3VlLCBmcmVlX2NiIGludGVyZmFjZSBoYXMgdG8gYmVlbgo+PiA+PiA+PiA+PiA+PiA+PiBjaGFu Z2VkLCBfX3J0ZV9wa3RtYnVmX2ZyZWVfZXh0YnVmIG11c3QgZGVsaXZlciBjYWxsZWQKPj4gPj4g Pj4gPj4gPj4gPj4gbWJ1ZiBwb2ludGVyIHRvIGZyZWVfY2IsIGFyZ3VtZW50IG9wYXF1ZSBjYW4g YmUgZGVmaW5lZAo+PiA+PiA+PiA+PiA+PiA+PiBhcyBhIGN1c3RvbSBzdHJ1Y3QgYnkgdXNlciwg aXQgY2FuIGluY2x1ZGVzIG9yaWdpbmFsIG1idWYKPj4gPj4gPj4gPj4gPj4gPj4gcG9pbnRlciwg dXNlci1kZWZpbmVkIGZyZWVfY2IgY2FuIGNvbXBhcmUgY2FsbGVyIG1idWYgd2l0aAo+PiA+PiA+ PiA+PiA+PiA+PiBtYnVmIGluIG9wYXF1ZSBzdHJ1Y3QsIGZyZWVfY2Igc2hvdWxkIGZyZWUgb3Jp Z2luYWwgbWJ1Zgo+PiA+PiA+PiA+PiA+PiA+PiBpZiB0aGV5IGFyZSBub3Qgc2FtZSwgdGhpcyBj b3JyZXNwb25kcyB0byBydGVfcGt0bWJ1Zl9mcmVlCj4+ID4+ID4+ID4+ID4+ID4+IHNlZ21lbnRl ZCBtYnVmcyBjYXNlLCBvdGhlcndpc2UsIGZyZWVfY2Igd29uJ3QgZnJlZSBvcmlnaW5hbAo+PiA+ PiA+PiA+PiA+PiA+PiBtYnVmIGJlY2F1c2UgdGhlIGNhbGxlciBleHBsaWNpdGx5IGNhbGxlZCBy dGVfcGt0bWJ1Zl9mcmVlCj4+ID4+ID4+ID4+ID4+ID4+IHRvIGZyZWUgaXQuCj4+ID4+ID4+ID4+ ID4+ID4+IAo+PiA+PiA+PiA+PiA+PiA+PiBIZXJlIGlzIHBzZWR1byBjb2RlIHRvIHNob3cgdHdv IGtpbmQgb2YgY2FzZXMuCj4+ID4+ID4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiA+PiA+PiBjYXNl IDEuIHJ0ZV9wa3RtYnVmX2ZyZWUgc2VnbWVudGVkIG1idWZzCj4+ID4+ID4+ID4+ID4+ID4+IAo+ PiA+PiA+PiA+PiA+PiA+PiBuYl90eCA9IHJ0ZV9nc29fc2VnbWVudChvcmlnaW5hbF9tYnVmLCAv KiBvcmlnaW5hbCBtYnVmICovCj4+ID4+ID4+ID4+ID4+ID4+ICAgICAgICAgICAgICAgICAgICAg ICAmZ3NvX2N0eCwKPj4gPj4gPj4gPj4gPj4gPj4gICAgICAgICAgICAgICAgICAgICAgIC8qIHNl Z21lbnRlZCBtYnVmICovCj4+ID4+ID4+ID4+ID4+ID4+ICAgICAgICAgICAgICAgICAgICAgICAo c3RydWN0IHJ0ZV9tYnVmICoqKSZnc29fbWJ1ZnMsCj4+ID4+ID4+ID4+ID4+ID4+ICAgICAgICAg ICAgICAgICAgICAgICBNQVhfR1NPX01CVUZTKTsKPj4gPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+ PiA+PiA+SSdtIHNvcnJ5IGJ1dCBpdCBpcyBub3QgdmVyeSBjbGVhciB0byBtZSB3aGF0IG9wZXJh dGlvbnMgYXJlIGRvbmUgYnkKPj4gPj4gPj4gPj4gPj4gPnJ0ZV9nc29fc2VnbWVudCgpLgo+PiA+ PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID4+ID5JbiB0aGUgY3VycmVudCBjb2RlLCBJIG9ubHkg c2VlIGNhbGxzIHRvIHJ0ZV9wa3RtYnVmX2F0dGFjaCgpLAo+PiA+PiA+PiA+PiA+PiA+d2hpY2gg ZG8gbm90IGRlYWwgd2l0aCBleHRlcm5hbCBidWZmZXJzLiBBbSBJIG1pc3Npbmcgc29tZXRoaW5n Pwo+PiA+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID4+ID5BcmUgeW91IGFibGUgdG8gc2hvdyB0 aGUgaXNzdWUgb25seSB3aXRoIG1idWYgZnVuY3Rpb25zPyBJdCB3b3VsZAo+PiA+PiA+PiA+PiA+ PiA+YmUgaGVscGZ1bCB0byB1bmRlcnN0YW5kIHdoYXQgZG9lcyBub3Qgd29yay4KPj4gPj4gPj4g Pj4gPj4gPgo+PiA+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID4+ID5UaGFua3MsCj4+ID4+ID4+ ID4+ID4+ID5PbGl2aWVyCj4+ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gT2xpdmVyLCB0 aGFuayB5b3UgZm9yIGNvbW1lbnQsIGxldCBtZSBzaG93IHlvdSB3aHkgaXQgZG9lc24ndCB3b3Jr IGZvciBteSB1c2UgY2FzZS4gIEluIE9WUyBEUERLLCBWTSB1c2VzIHZob3N0dXNlcmNsaWVudCB0 byBzZW5kIGxhcmdlIHBhY2tldHMgd2hvc2Ugc2l6ZSBpcyBhYm91dCA2NEsgYmVjYXVzZSB3ZSBl bmFibGVkIFRTTyAmIFVGTywgdGhlc2UgbGFyZ2UgcGFja2V0cyB1c2UgcnRlX21idWZzIGFsbG9j YXRlZCBieSBEUERLIHZpcnRpb19uZXQgZnVuY3Rpb24gCj4+ID4+ID4+ID4+ID4+IHZpcnRpb19k ZXZfcGt0bWJ1Zl9hbGxvYygpIChpbiBmaWxlIGxpYi9saWJydGVfdmhvc3QvdmlydGlvX25ldC5j LiBQbGVhc2UgcmVmZXIgdG8gW1BBVENIIFYxIDMvM10sIEkgY2hhbmdlZCBmcmVlX2NiIGFzIGJl bG93LCB0aGVzZSBwYWNrZXRzIHVzZSB0aGUgc2FtZSBhbGxvY2F0ZSBmdW5jdGlvbiBhbmQgdGhl IHNhbWUgZnJlZV9jYiBubyBtYXR0ZXIgdGhleSBhcmUgVENQIHBhY2tldCBvciBVRFAgcGFja2V0 cywgaW4gY2FzZSBvZiBWWExBTiBUU08sIG1vc3QgTklDcyBjYW4ndCBzdXBwb3J0IGlubmVyIFVE UCBmcmFnbWVudCBvZmZsb2FkLCBzbyBPVlMgRFBESyBoYXMgdG8gZG8gaXQgYnkgc29mdHdhcmUs IGZvciBVRFAgY2FzZSwgdGhlIG9yaWdpbmFsIHJ0ZV9tYnVmIG9ubHkgY2FuIGJlIGZyZWVkIGJ5 IHNlZ21lbnRlZCBydGVfbWJ1ZnMgd2hpY2ggYXJlIG91dHB1dCBwYWNrZXRzIG9mIHJ0ZV9nc29f c2VnbWVudCwgaS5lLiB0aGUgb3JpZ2luYWwgcnRlX21idWYgb25seSBjYW4gZnJlZWQgYnkgZnJl ZV9jYiwgeW91IGNhbiBzZWUsIGl0IGV4cGxpY2l0bHkgY2FsbGVkIHJ0ZV9wa3RtYnVmX2ZyZWUo YXJnLT5tYnVmKSwgdGhlIGNvbmRpdGlvbiBzdGF0ZW1lbnQgImlmIChjYWxsZXJfbSAhPSBhcmct Pm1idWYpIiBpcyB0cnVlIGZvciB0aGlzIGNhc2UsIHRoaXMgaGFzIG5vIHByb2JsZW0sIGJ1dCBm b3IgVENQIGNhc2UsIHRoZSBvcmlnaW5hbCBtYnVmIGlzIGRlbGl2ZXJlZCB0byBydGVfZXRoX3R4 X2J1cnN0KCkgYnV0IG5vdCBzZWdtZW50ZWQgcnRlX21idWZzIG91dHB1dCBieSBydGVfZ3NvX3Nl Z21lbnQsIFBNRCBkcml2ZXIgd2lsbCBjYWxsIHJ0ZV9wa3RtYnVmX2ZyZWUob3JpZ2luYWxfcnRl X21idWYpIGJ1dCBub3QgcnRlX3BrdG1idWZfZnJlZShzZWdtZW50ZWRfcnRlX21idWZzKSwgdGhl IHNhbWUgZnJlZV9jYiB3aWxsIGJlIGNhbGxlZCwgdGhhdCBtZWFucyBvcmlnaW5hbF9ydGVfbWJ1 ZiB3aWxsIGJlIGZyZWVkIHR3aWNlLCB5b3Uga25vdyB3aGF0IHdpbGwgaGFwcGVuLCB0aGlzIGlz IGp1c3QgdGhlIGlzc3VlIEknbSBmaXhpbmcuIEkgYnJpbmcgaW4gY2FsbGVyX20gYXJndW1lbnQs IGl0IGNhbiBoZWxwIHdvcmsgYXJvdW5kIHRoaXMgYmVjYXVzZSBjYWxsZXJfbSBpcyBhcmctPm1i dWYgYW5kIHRoZSBjb25kaXRpb24gc3RhdGVtZW50ICJpZiAoY2FsbGVyX20gIT0gYXJnLT5tYnVm KSIgaXMgZmFsc2UsIHlvdSBjYW4ndCBmaXggaXQgd2l0aG91dCB0aGUgY2hhbmdlIHRoaXMgcGF0 Y2ggc2VyaWVzIGRpZC4KPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+SSdtIHNpbGwgbm90IHN1 cmUgdG8gZ2V0IHlvdXIgaXNzdWUuIFBsZWFzZSwgaWYgeW91IGhhdmUgYSBzaW1wbGUgdGVzdAo+ PiA+PiA+PiA+PiA+Y2FzZSB1c2luZyBvbmx5IG1idWZzIGZ1bmN0aW9ucyAod2l0aG91dCB2aXJ0 aW8sIGdzbywgLi4uKSwgaXQgd291bGQgYmUKPj4gPj4gPj4gPj4gPnZlcnkgaGVscGZ1bCBiZWNh dXNlIHdlIHdpbGwgYmUgc3VyZSB0aGF0IHdlIGFyZSB0YWxraW5nIGFib3V0IHRoZSBzYW1lCj4+ ID4+ID4+ID4+ID50aGluZy4gSW4gY2FzZSB0aGVyZSBpcyBhbiBpc3N1ZSwgaXQgY2FuIGVhc2ls eSBiZWNvbWUgYSB1bml0IHRlc3QuCj4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiBPbGl2ZXIsIEkg dGhpbmsgeW91IGRvbid0IGdldCB0aGUgcG9pbnQsIGZyZWUgb3BlcmF0aW9uIGNhbid0IGJlIGNv bnRyb2xsZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGl0c2VsZiwgCj4+ID4+ID4+ID4+IGl0IGlzIGRv bmUgYnkgUE1EIGRyaXZlciBhbmQgdHJpZ2dlcmVkIGJ5IHJ0ZV9ldGhfdHhfYnVyc3QsIEkgaGF2 ZSBzaG93biBwc2V1ZG8gY29kZSwKPj4gPj4gPj4gPj4gcnRlX2dzb19zZWdtZW50IGp1c3Qgc2Vn bWVudHMgYSBsYXJnZSBtYnVmIHRvIG11bHRpcGxlIG1idWZzLCBpdCB3b24ndCBzZW5kIHRoZW0s IHRoZSBhcHBsaWNhdGlvbgo+PiA+PiA+PiA+PiB3aWxsIGNhbGwgcnRlX2V0aF90eF9idXJzdCB0 byBzZW5kIHRoZW0gZmluYWxseS4KPj4gPj4gPj4gPj4KPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+ PiA+VGhhdCBzYWlkLCBJIGxvb2tlZCBhdCB2aG9zdCBtYnVmIGFsbG9jYXRpb24gYW5kIGdzbyBz ZWdtZW50YXRpb24sIGFuZAo+PiA+PiA+PiA+PiA+SSBmb3VuZCBzb21lIHN0cmFuZ2UgdGhpbmdz Ogo+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID4xLyBJbiB2aXJ0aW9fZGV2X2V4dGJ1Zl9hbGxv YygpLCBhbmQgSSB0aGVyZSBhcmUgMiBwYXRocyB0byBjcmVhdGUgdGhlCj4+ID4+ID4+ID4+ID4g ICBleHQgbWJ1Zi4KPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+ICAgYS8gVGhlIGZpcnN0IG9u ZSBzdG9yZXMgdGhlIHNoaW5mbyBzdHJ1Y3QgaW4gdGhlIG1idWYsIGJhc2ljYWxseQo+PiA+PiA+ PiA+PiA+ICAgICAgbGlrZSB0aGlzOgo+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID4JcGt0ID0g cnRlX3BrdG1idWZfYWxsb2MobXApOwo+PiA+PiA+PiA+PiA+CXNoaW5mbyA9IHJ0ZV9wa3RtYnVm X210b2QocGt0LCBzdHJ1Y3QgcnRlX21idWZfZXh0X3NoYXJlZF9pbmZvICopOwo+PiA+PiA+PiA+ PiA+CWJ1ZiA9IHJ0ZV9tYWxsb2MoTlVMTCwgYnVmX2xlbiwgUlRFX0NBQ0hFX0xJTkVfU0laRSk7 Cj4+ID4+ID4+ID4+ID4Jc2hpbmZvLT5mcmVlX2NiID0gdmlydGlvX2Rldl9leHRidWZfZnJlZTsK Pj4gPj4gPj4gPj4gPglzaGluZm8tPmZjYl9vcGFxdWUgPSBidWY7Cj4+ID4+ID4+ID4+ID4JcnRl X21idWZfZXh0X3JlZmNudF9zZXQoc2hpbmZvLCAxKTsKPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+ PiA+ICAgICAgSSBkb24ndCB0aGluayBpdCBpcyBhIGdvb2QgaWRlYSwgYmVjYXVzZSB0aGVyZSBp cyBubyBndWFyYW50ZWUgdGhhdAo+PiA+PiA+PiA+PiA+ICAgICAgdGhlIG1idWYgd29uJ3QgYmUg ZnJlZWQgYmVmb3JlIHRoZSBidWZmZXIuIEZvciBpbnN0YW5jZSwgZG9pbmcKPj4gPj4gPj4gPj4g PiAgICAgIHRoaXMgd2lsbCBwcm9iYWJseSBmYWlsOgo+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ ID4JcGt0MiA9IHJ0ZV9wa3RtYnVmX2FsbG9jKG1wKTsKPj4gPj4gPj4gPj4gPglydGVfcGt0bWJ1 Zl9hdHRhY2gocGt0MiwgcGt0KTsKPj4gPj4gPj4gPj4gPglydGVfcGt0bWJ1Zl9mcmVlKHBrdCk7 ICAvKiBwa3QgaXMgZnJlZWQsIGJ1dCBpdCBjb250YWlucyBzaGluZm8gISAqLwo+PiA+PiA+PiA+ PiAKPj4gPj4gPj4gPj4gcGt0IGlzIGNyZWF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIEkgY2FuIGNv bnRyb2wsIHNvIEkgY2FuIGNvbnRyb2wgaXQgd2hlcmUgaXQgd2lsbCBiZSBmcmVlZCwgcmlnaHQ/ Cj4+ID4+ID4+ID4KPj4gPj4gPj4gPlRoaXMgZXhhbXBsZSBzaG93cyB0aGF0IG1idWZzIGFsbG9j YXRlZCBsaWtlIHRoaXMgYnkgdGhlIHZob3N0Cj4+ID4+ID4+ID5kcml2ZXIgYXJlIG5vdCBjb25z dHJ1Y3RlZCBjb3JyZWN0bHkuIElmIGFuIGFwcGxpY2F0aW9uIGF0dGFjaCBhIG5ldwo+PiA+PiA+ PiA+cGFja2V0IChwa3QyKSB0byBpdCBhbmQgZnJlZXMgdGhlIG9yaWdpbmFsIG9uZSAocGt0KSwg aXQgbWF5IHJlc3VsdCBpbiBhCj4+ID4+ID4+ID5tZW1vcnkgY29ycnVwdGlvbi4KPj4gPj4gPj4g Pgo+PiA+PiA+PiA+T2YgY291cnNlLCB0byBiZSB0ZXN0ZWQgYW5kIGNvbmZpcm1lZC4KPj4gPj4g Pj4gCj4+ID4+ID4+IE5vLCBhdHRhY2ggd2lsbCBpbmNyZWFzZSByZWZjbnQgb2Ygc2hpbmZvLCBm cmVlX2NiIG9ubHkgaXMgY2FsbGVkIHdoZW4gIHJlZmNudCBvZiBzaGluZm8gaXMgZGVjcmVhc2Vk IHRvCj4+ID4+ID4+IDAsIGlzbid0IGl0Pwo+PiA+PiA+Cj4+ID4+ID5XaGVuIHBrdCB3aWxsIGJl IGZyZWVkLCBpdCB3aWxsIGRlY3JlbWVudCB0aGUgc2hpbmZvIHJlZmNudCwgYW5kCj4+ID4+ID5h ZnRlciBpdCB3aWxsIGJlIDEuIFNvIHRoZSBidWZmZXIgd29uJ3QgYmUgZnJlZWQuIEFmdGVyIHRo YXQsIHRoZQo+PiA+PiA+bWJ1ZiBwa3Qgd2lsbCBiZSBkZXRhY2hlZCwgYW5kIHdpbGwgcmV0dXJu IHRvIHRoZSBtYnVmIHBvb2wuIEl0IG1lYW5zCj4+ID4+ID5pdCBjYW4gYmUgcmVhbGxvY2F0ZWQs IGFuZCB0aGUgbmV4dCB1c2VyIGNhbiBvdmVyd3JpdGUgc2hpbmZvIHdoaWNoCj4+ID4+ID5pcyBz dGlsbCBzdG9yZWQgaW4gdGhlIG1idWYgZGF0YS4KPj4gPj4gCj4+ID4+IEkgdGhpbmsgdGhpcyBp cyBhbiBpc3N1ZSBvZiBEUERLIGl0c2VsZiwgaWYgZXh0ZXJuYWwgYnVmZmVyIGluIHNoaW5mbyBp cyBmcmVlZCwgc2hpbmZvIHNob3VsZCBiZSBzZXQgdG8gTlVMTCwgaWYgdXNlciB3aWxsCj4+ID4+ IG92ZXJ3cml0ZSBpdCwgaGUvc2hlIHNob3VsZCB1c2UgdGhlIHNhbWUgd2F5IGFzIGEgbmV3IGV4 dGVybmFsIGJ1ZmZlciBpcyBhdHRhY2hlZC4gCj4+ID4KPj4gPk5vLCB0aGVyZSBpcyBubyBpc3N1 ZSBpbiBEUERLLiBUaGUgbGlmZXRpbWUgb2Ygc2hpbmZvIHNob3VsZCBiZSBhdCBsZWFzdAo+PiA+ dGhlIHNhbWUgdGhlIGxpZmV0aW1lIG9mIHRoZSBidWZmZXIuIElmIHNoaW5mbyBpcyBzdG9yZWQg aW4gaW5pdGlhbCBtYnVmCj4+ID4oY2FsbGVkICJwa3QiIGluIHRoZSBleGFtcGxlIGFib3ZlKSwg dGhlIG1idWYgYW5kIHNoaW5mbyBjYW4gYmUgZnJlZWQgd2hpbGUKPj4gPnRoZSBidWZmZXIgaXMg c3RpbGwgaW4gdXNlIGJ5IGFub3RoZXIgcGFja2V0Lgo+PiA+Cj4+ID4+ID5JIGRpZCBhIHRlc3Qg dG8gc2hvdyBpdCwgc2VlOgo+PiA+PiA+aHR0cDovL2dpdC5kcm9pZHMtY29ycC5vcmcvP3A9ZHBk ay5naXQ7YT1jb21taXRkaWZmO2g9YTYxNzQ5NGVlYjAxZmYKPj4gPj4gPgo+PiA+PiA+SWYgeW91 IHJ1biB0aGUgbWJ1ZiBhdXRvdGVzdCwgaXQgc2VnZmF1bHRzLgo+PiA+PiAKPj4gPj4gSSB0aGlu ayB5b3VyIHRlc3QgaXMgd3JvbmcsIHlvdSdyZSBjaGFuZ2luZyBzaGluZm8gKHdoaWNoIGlzIGJl aW5nIHVzZWQpIGluIHdyb25nIHdheSwgaWYgZnJlZV9iYyBpcyBOVUxMLCBpdCB3aWxsIGJlIGlu dmFsaWQuCj4+ID4KPj4gPkknbSBjaGFuZ2luZyB0aGUgZGF0YSBvZiBhIG5ld2x5IGFsbG9jYXRl ZCBtYnVmLCBpdCBpcyBwZXJmZWN0bHkgbGVnYWwuCj4+ID5JIGhhcHBlbnMgdGhhdCBpdCBwb2lu dHMgdGhlIHRoZSBzaGluZm8gdGhhdCBpcyBzdGlsbCBpbiB1c2UuCj4+ID4KPj4gPgo+PiA+PiAK Pj4gPj4gc3RhdGljIGlubGluZSB2b2lkCj4+ID4+IHJ0ZV9wa3RtYnVmX2F0dGFjaF9leHRidWYo c3RydWN0IHJ0ZV9tYnVmICptLCB2b2lkICpidWZfYWRkciwKPj4gPj4gICAgICAgICBydGVfaW92 YV90IGJ1Zl9pb3ZhLCB1aW50MTZfdCBidWZfbGVuLAo+PiA+PiAgICAgICAgIHN0cnVjdCBydGVf bWJ1Zl9leHRfc2hhcmVkX2luZm8gKnNoaW5mbykKPj4gPj4gewo+PiA+PiAgICAgICAgIC8qIG1i dWYgc2hvdWxkIG5vdCBiZSByZWFkLW9ubHkgKi8KPj4gPj4gICAgICAgICBSVEVfQVNTRVJUKFJU RV9NQlVGX0RJUkVDVChtKSAmJiBydGVfbWJ1Zl9yZWZjbnRfcmVhZChtKSA9PSAxKTsKPj4gPj4g ICAgICAgICBSVEVfQVNTRVJUKHNoaW5mby0+ZnJlZV9jYiAhPSBOVUxMKTsKPj4gPj4gCj4+ID4+ IEZvciBhbnkgc2hpbmZvIG9wZXJhdGlvbiwgeW91IHNob3VsZCBkbyBpdCBieSBydGVfcGt0bWJ1 Zl9hdHRhY2hfZXh0YnVmLCB5b3UgY2FuJ3QgY2hhbmdlIGl0IGF0IHdpbGwgYWZ0ZXIgdGhhdC4K Pj4gPj4gCj4+ID4+ID4KPj4gPj4gPgo+PiA+PiA+PiAKPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiAK Pj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+ICAgICAgVG8gZG8gdGhpcyBwcm9wZXJseSwgdGhl IG1idWYgcmVmY250IHNob3VsZCBiZSBpbmNyZWFzZWQsIGFuZAo+PiA+PiA+PiA+PiA+ICAgICAg dGhlIG1idWYgc2hvdWxkIGJlIGZyZWVkIGluIHRoZSBjYWxsYmFjay4gQnV0IEkgZG9uJ3QgdGhp bmsgaXQncwo+PiA+PiA+PiA+PiA+ICAgICAgd29ydGggZG9pbmcgaXQsIGdpdmVuIHRoZSBzZWNv bmQgcGF0aCAoYi8pIGxvb2tzIGdvb2QgdG8gbWUuCj4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4g PiAgIGIvIFRoZSBzZWNvbmQgcGF0aCBzdG9yZXMgdGhlIHNoaW5mbyBzdHJ1Y3QgYXQgdGhlIGVu ZCBvZiB0aGUKPj4gPj4gPj4gPj4gPiAgICAgIGFsbG9jYXRlZCBidWZmZXIsIGxpa2UgdGhpczoK Pj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+CXBrdCA9IHJ0ZV9wa3RtYnVmX2FsbG9jKG1wKTsK Pj4gPj4gPj4gPj4gPglidWZfbGVuICs9IHNpemVvZigqc2hpbmZvKSArIHNpemVvZih1aW50cHRy X3QpOwo+PiA+PiA+PiA+PiA+CWJ1Zl9sZW4gPSBSVEVfQUxJR05fQ0VJTCh0b3RhbF9sZW4sIHNp emVvZih1aW50cHRyX3QpKTsKPj4gPj4gPj4gPj4gPglidWYgPSBydGVfbWFsbG9jKE5VTEwsIGJ1 Zl9sZW4sIFJURV9DQUNIRV9MSU5FX1NJWkUpOwo+PiA+PiA+PiA+PiA+CXNoaW5mbyA9IHJ0ZV9w a3RtYnVmX2V4dF9zaGluZm9faW5pdF9oZWxwZXIoYnVmLCAmYnVmX2xlbiwKPj4gPj4gPj4gPj4g PgkJCQkJICAgICAgdmlydGlvX2Rldl9leHRidWZfZnJlZSwgYnVmKTsKPj4gPj4gPj4gPj4gPgo+ PiA+PiA+PiA+PiA+ICAgICAgSSB0aGluayB0aGlzIGlzIGNvcnJlY3QsIGJlY2F1c2Ugd2UgaGF2 ZSB0aGUgZ3VhcmFudGVlIHRoYXQgc2hpbmZvCj4+ID4+ID4+ID4+ID4gICAgICBleGlzdHMgYXMg bG9uZyBhcyB0aGUgYnVmZmVyIGV4aXN0cy4KPj4gPj4gPj4gPj4gCj4+ID4+ID4+ID4+IFdoYXQg YnVmZmVyIGRvZXMgdGhlIGFsbG9jYXRlZCBidWZmZXIgeW91J3JlIHNheWluZyBoZXJlPyBUaGUg aXNzdWUgd2UncmUgZGlzY3Vzc2luZyBob3cgd2UgY2FuCj4+ID4+ID4+ID4+IGZyZWUgb3JpZ2lu YWwgbWJ1ZiB3aGljaCBvd25zIHNoaW5mbyBidWZmZXIuCj4+ID4+ID4+ID4KPj4gPj4gPj4gPkkg ZG9uJ3QgZ2V0IHlvdXIgcXVlc3Rpb24uCj4+ID4+ID4+ID4KPj4gPj4gPj4gPkknbSBqdXN0IHNh eWluZyB0aGF0IHRoaXMgY29kZSBwYXRoIGxvb2tzIGNvcnJlY3QsIGNvbXBhcmVkIHRvCj4+ID4+ ID4+ID50aGUgcHJldmlvdXMgb25lLgo+PiA+PiA+PiAKPj4gPj4gPj4gSSB0aGluayB5b3UncmUg Y2hhbGxlbmdpbmcgcHJpbmNpcGxlIG9mIGV4dGVybmFsIG1idWYsIHRoYXQgaXNuJ3QgdGhlIHRo aW5nIEkgYWRkcmVzcy4KPj4gPj4gPgo+PiA+PiA+SSdtIG5vdCBjaGFsbGVuZ2luZyBhbnl0aGlu ZywgSSdtIHNheWluZyB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGlzIGNvZGUsCj4+ID4+ID5hbmQgdGhl IHVuaXQgdGVzdCBhYm92ZSB0ZW5kcyB0byBjb25maXJtIGl0Lgo+PiA+PiAKPj4gPj4gSWYgaXQg aXMgYnVnLCB5b3UgY2FuIHBvc3QgYSBwYXRjaCB0byBmaXggaXQsICBpdCBpc24ndCByZWxhdGVk IHdpdGggbXkgcGF0Y2hlcy4gQnV0IGluIG15IG9waW5pb24sIHlvdSBkb24ndAo+PiA+PiB1c2Ug aXQgaW4gY29ycmVjdCB3YXksIEkgZG9uJ3QgdGhpbmsgaXQgaXMgYSBidWcuCj4+ID4KPj4gPkkn bGwgc3VibWl0IGEgcGF0Y2ggZm9yIHRoaXMuCj4+ID4KPj4gPlRoZSBwb2ludCBpcyB5b3UgYXJl IHRlc3RpbmcgR1NPIG9uIHRvcCBvZiB3cm9uZ2x5LWNvbnN0cnVjdGVkIG1idWZzLCBzbwo+PiA+ aXQgd291bGQgYmUgc2FmZXIgZm9yIHlvdSB0byBmaXggdGhpcyBiZWZvcmUgZG9pbmcgbW9yZSB0 ZXN0cy4KPj4gPgo+PiA+Cj4+ID4+ID4+ID4+ID4yLyBpbiBydGVfZ3NvX3NlZ21lbnQoKSwgdGhl cmUgaXMgYSBsb29wIGxpa2UgdGhpczoKPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+CXdoaWxl IChwa3Rfc2VnKSB7Cj4+ID4+ID4+ID4+ID4JCXJ0ZV9tYnVmX3JlZmNudF91cGRhdGUocGt0X3Nl ZywgLTEpOwo+PiA+PiA+PiA+PiA+CQlwa3Rfc2VnID0gcGt0X3NlZy0+bmV4dDsKPj4gPj4gPj4g Pj4gPgl9Cj4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPiAgIFlvdSBjaGFuZ2UgaXQgdG8gdGFr ZSBpbiBhY2NvdW50IHRoZSByZWZjbnQgZm9yIGV4dCBtYnVmcy4KPj4gPj4gPj4gPj4gPgo+PiA+ PiA+PiA+PiA+ICAgSSBtYXkgaGF2ZSBtaXNzZWQgc29tZXRoaW5nIGJ1dCBJIHdvbmRlciB3aHkg aXQgaXMgbm90IHNpbXBseToKPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+CXJ0ZV9wa3RtYnVm X2ZyZWUocGt0X3NlZyk7Cj4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPiAgIEl0IHdpbGwgZGVj cmVhc2UgdGhlIHByb3BlciByZWZjbnQsIGFuZCBmcmVlIHRoZSBtYnVmcyBpZiB0aGV5Cj4+ID4+ ID4+ID4+ID4gICBhcmUgbm90IHVzZWQuCj4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiBBZ2Fpbiwg cnRlX2dzb19zZWdtZW50IGp1c3QgZGVjcmVhc2VzIHJlZmNudCBieSBvbmUsIHRoaXMgd2lsbCBl bnN1cmUgdGhlIGxhc3Qgc2VnbWVudGVkIAo+PiA+PiA+PiA+PiBtYnVmIGZyZWUgd2lsbCB0cmln Z2VyIGZyZWVpbmcgb3JpZ2luYWwgbWJ1ZiAob25seSBmcmVlX2NiIGNhbiBkbyB0aGlzKS4KPj4g Pj4gPj4gPgo+PiA+PiA+PiA+cnRlX3BrdG1idWZfZnJlZSgpIHdpbGwgYWxzbyBkZWNlcmFzZSB0 aGUgcmVmY250LCBhbmQgZnJlZSB0aGUgcmVzb3VyY2VzCj4+ID4+ID4+ID53aGVuIHRoZSByZWZj bnQgcmVhY2hlcyAwLgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID5JdCBoYXMgc29tZSBhZHZhbnRhZ2Vz IGNvbXBhcmVkIHRvIGRlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnRlciBvZiBhbGwKPj4gPj4g Pj4gPnNlZ21lbnRzOgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID4tIG5vIG5lZWQgdG8gaXRlcmF0ZSB0 aGUgc2VnbWVudHMsIHRoZXJlIGlzIG9ubHkgb25lIGZ1bmN0aW9uIGNhbGwKPj4gPj4gPj4gPi0g bm8gbmVlZCB0byBoYXZlIGEgc3BlY2lhbCBjYXNlIGZvciBleHQgbWJ1ZnMgbGlrZSB5b3UgZGlk IGluIHlvdXIgcGF0Y2gKPj4gPj4gPj4gPi0gaXQgbWF5IGJlIHNhZmVyLCBpbiBjYXNlIHNvbWUg c2VnbWVudHMgaGF2ZSBhIHJlZmNudCA9PSAxLCBiZWNhdXNlCj4+ID4+ID4+ID4gIHJlc291cmNl cyB3aWxsIGJlIGZyZWVkLgo+PiA+PiA+PiAKPj4gPj4gPj4gRm9yIGV4dGVybmFsIG1idWYsIGF0 dGFjaCBvbmx5IGluY3JlYXNlcyByZWZjbnQgb2Ygc2hpbmZvLCByZWZjbnQgb2YgbWJ1ZiB3b24n dCBiZSB0b3VjaGVkLiBGb3Igbm9ybWFsCj4+ID4+ID4+IG1idWYsIGF0dGFjaCBvbmx5IGluY3Jl YXNlIHJlZmNudCBvZiBtYnVmLCBubyBzaGluZm8gdGhlcmUsIG5vIHJlZmNudCBvZiBzaGluZm8g aW5jcmVhc2VkLgo+PiA+PiA+Cj4+ID4+ID5JIHN1cHBvc2UgcnRlX2dzb19zZWdtZW50KCkgY2Fu IHRha2UgYW55IG1idWYgdHlwZSBhcyBpbnB1dDogc3RhbmRhcmQKPj4gPj4gPm1idWYsIGluZGly ZWN0IG1idWYsIGV4dCBtYnVmLCBvciBldmVuIGEgbWJ1ZiBjaGFpbmcgY29udGFpbmluZyBzZWdt ZW50cyBvZgo+PiA+PiA+ZGlmZmVyZW50IHR5cGVzLgo+PiA+PiA+Cj4+ID4+ID5Gb3IgaW5zdGFu Y2UsIGlmIHlvdSBwYXNzIGEgY2hhaW4gb2YgMiBtYnVmczoKPj4gPj4gPi0gdGhlIGZpcnN0IG9u ZSBpcyBhIGRpcmVjdCBtYnVmIGNvbnRhaW5pbmcgdGhlIElQL1RDUCBoZWFkZXJzIChvcmlnX2hk cikKPj4gPj4gPi0gdGhlIHNlY29uZCBvbiBpcyBhIG1idWYgcG9pbnRpbmcgdG8gYW4gZXh0IGJ1 ZmZlciAob3JpZ19wYXlsb2FkKQo+PiA+PiA+Cj4+ID4+ID5JIGV4cGVjdCB0aGF0IHRoZSByZXN1 bHRpbmcgbWJ1ZiBhZnRlciBjYWxsaW5nIGdzbyBjb250YWlucyBhIGxpc3Qgb2YgbWJ1ZnMKPj4g Pj4gPmxpa2UgdGhpczoKPj4gPj4gPi0gYSBmaXJzdCBzZWdtZW50IGNvbnRhaW5pbmcgdGhlIElQ L1RDUCBoZWFkZXJzIChuZXdfaGRyKQo+PiA+PiA+LSBhIHBheWxvYWQgc2VnbWVudCBwb2ludGlu ZyBvbiB0aGUgc2FtZSBleHQgYnVmZmVyCj4+ID4+ID4KPj4gPj4gPkluIHRoZW9yeSwgdGhlcmUg aXMgbm8gcmVhc29uIHRoYXQgb3JpZ19oZHIgc2hvdWxkIGJlIHJlZmVyZW5jZWQgYnkKPj4gPj4g PmFub3RoZXIgbmV3IG1idWYsIGJlY2F1c2UgaXQgb25seSBjb250YWlucyBoZWFkZXJzIChubyBk YXRhKS4gSWYgdGhhdCdzCj4+ID4+ID50aGUgY2FzZSwgaXRzIHJlZmNudCBpcyAxLCBhbmQgZGVj cmVhc2luZyBpdCB0byAwIHdpdGhvdXQgZnJlZWluZyBpdAo+PiA+PiA+aXMgYSBidWcuCj4+ID4+ IAo+PiA+PiBGb3IgdGhpcyB1c2VyIHNjZW5hcmlvLCBvcmlnX20gaXMgb3duZXIgb2YgZXh0ZXJu YWwgYnVmZmVyLCBzbWFsbCBzZWdtZW50ZWQgbWJ1ZnMgcmVmZXJlbmNlCj4+ID4+IGl0LCB5b3Ug c2hvdWxkbid0IGZyZWUgb3JpZ19tIGJlZm9yZSBhbGwgYXR0YWNoZWQgc2VnbWVudGVkIG1idWZz IGFyZSBmcmVlZCwgaXNuJ3QgaXQ/Cj4+ID4KPj4gPkluIHRoaXMgY2FzZSwgb3JpZ19oZHIgaGFz IHRvIGJlIGZyZWVkIGJlY2F1c2UgaXQgaXMgYSBkaXJlY3QgbWJ1ZiAobm90Cj4+ID5zaGFyZWQp Lgo+PiA+VGhlIGJ1ZmZlciBwb2ludGVkIGJ5IG9yaWdfcGF5bG9hZCB3aWxsIGJlIGZyZWVkIHdo ZW4gYWxsIG5ld2x5IGNyZWF0ZWQKPj4gPnNlZ21lbnRzIGFyZSBmcmVlZC4KPj4gPgo+PiA+Cj4+ ID4+ID4KPj4gPj4gPkFueXdheSwgdGhlcmUgaXMgbWF5YmUgbm8gaXNzdWUgaW4gdGhhdCBjYXNl LCBidXQgSSB3YXMganVzdCBzdWdnZXN0aW5nCj4+ID4+ID50aGF0IHVzaW5nIHJ0ZV9wa3RtYnVm X2ZyZWUoKSBpcyBlYXNpZXIgdG8gcmVhZCwgYW5kIHNhZmVyIHRoYW4gbWFudWFsbHkKPj4gPj4g PmRlY3JlYXNpbmcgdGhlIHJlZmNudCBvZiBlYWNoIHNlZ21lbnQuCj4+ID4+ID4KPj4gPj4gPgo+ PiA+PiA+PiA+PiA+QWdhaW4sIHNvcnJ5IGlmIHRoaXMgaXMgbm90IHRoZSBpc3N1ZSB5b3VyIGFy ZSByZWZlcnJpbmcgdG8sIGJ1dAo+PiA+PiA+PiA+PiA+aW4gdGhpcyBjYXNlIEkgcmVhbGx5IHRo aW5rIHRoYXQgaGF2aW5nIGEgc2ltcGxlIGV4YW1wbGUgY29kZSB0aGF0Cj4+ID4+ID4+ID4+ID5z aG93cyB0aGUgaXNzdWUgd291bGQgaGVscC4KPj4gPj4gPj4gPj4gCj4+ID4+ID4+ID4+IE9saXZl ciwgbXkgc3RhdGVtZW50IGluIHRoZSBwYXRjaCBJIHNlbnQgb3V0IGhhcyBwc2V1ZG8gY29kZSB0 byBzaG93IHRoaXMuICBJIGRvbid0IHRoaW5rIGEgc2ltcGxlCj4+ID4+ID4+ID4+IHVuaXQgdGVz dCBjYW4gc2hvdyBpdC4KPj4gPj4gPj4gPgo+PiA+PiA+PiA+SSBkb24ndCBzZWUgd2h5LiBUaGUg UE1EcyBhbmQgdGhlIGxpYnJhcmllcyB1c2UgdGhlIG1idWYgZnVuY3Rpb25zLCB3aHkKPj4gPj4g Pj4gPmEgdW5pdCB0ZXN0IGNvdWxkbid0IGNhbGwgdGhlIHNhbWUgZnVuY3Rpb25zPwo+PiA+PiA+ PiA+Cj4+ID4+ID4+ID4+IExldCBtZSBzdW1tYXJpemUgaXQgaGVyZSBhZ2Fpbi4gRm9yIG9yaWdp bmFsIG1idWYsIHRoZXJlIGFyZSB0d28gY2FzZXMgZnJlZWluZwo+PiA+PiA+PiA+PiBpdCwgY2Fz ZSBvbmUgaXMgUE1EIGRyaXZlciBjYWxscyBmcmVlIGFnYWluc3Qgc2VnbWVudGVkIG1idWZzLCBs YXN0IHNlZ21lbnRlZCBtYnVmIGZyZWUgd2lsbCB0cmlnZ2VyCj4+ID4+ID4+ID4+IGZyZWVfY2Ig Y2FsbCB3aGljaCB3aWxsIGZyZWUgb3JpZ2luYWwgbGFyZ2UgJiBleHRlbmRlZCBtYnVmLgo+PiA+ PiA+PiA+Cj4+ID4+ID4+ID5PSwo+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+IENhc2UgdHdvIGlzIFBN RCBkcml2ZXIgd2lsbCBjYWxsIGZyZWUgYWdhaW5zdAo+PiA+PiA+PiA+PiBvcmlnaW5hbCBtYnVm LCB0aGF0IGFsc28gd2lsbCBjYWxsIGZyZWVfY2IgdG8gZnJlZSBhdHRhY2hlZCBleHRlbmRlZCBi dWZmZXIuCj4+ID4+ID4+ID4KPj4gPj4gPj4gPk9LCj4+ID4+ID4+ID4KPj4gPj4gPj4gPkFuZCB3 aGF0IG1ha2VzIHRoYXQgY2FzZSAxIG9yIGNhc2UgMiBpcyBleGVjdXRlZD8KPj4gPj4gPj4gPgo+ PiA+PiA+PiA+PiBJbiBjYXNlIG9uZSBmcmVlX2NiIG11c3QgY2FsbAo+PiA+PiA+PiA+PiBydGVf cGt0bWJ1Zl9mcmVlIG90aGVyd2lzZSBub2JvZHkgd2lsbCBmcmVlIG9yaWdpbmFsIGxhcmdlICYg ZXh0ZW5kZWQgbWJ1ZiwgaW4gY2FzZSB0d28gZnJlZV9jYiBjYW4ndCAKPj4gPj4gPj4gPj4gY2Fs bCBydGVfcGt0bWJ1Zl9mcmVlIGJlY2F1c2UgdGhlIGNhbGxlciBjYWxsaW5nIGl0IGlzIGp1c3Qg cnRlX3BrdG1idWZfZnJlZSB3ZSBuZWVkLiBUaGF0IGlzIHRvIHNheSwgeW91Cj4+ID4+ID4+ID4+ IG11c3QgdXNlIHRoZSBzYW1lIGZyZWVfY2IgdG8gaGFuZGxlIHRoZXNlIHR3byBjYXNlcywgdGhp cyBpcyBteSBpc3N1ZSBhbmQgdGhlIHBvaW50IHlvdSBkb24ndCBnZXQuCj4+ID4+ID4+ID4KPj4g Pj4gPj4gPkkgdGhpbmsgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGFuZ2UgdGhlIGZyZWVfY2IgQVBJ LiBJdCBzaG91bGQgd29yayBsaWtlCj4+ID4+ID4+ID50aGlzOgo+PiA+PiA+PiA+Cj4+ID4+ID4+ ID4tIHZpcnRpbyBjcmVhdGVzIHRoZSBvcmlnaW5hbCBleHRlcm5hbCBtYnVmIChvcmlnX20pCj4+ ID4+ID4+ID4tIGdzbyB3aWxsIGNyZWF0ZSBhIG5ldyBtYnVmIHJlZmVyZW5jaW5nIHRoZSBleHRl cm5hbCBidWZmZXIgKG5ld19tKQo+PiA+PiA+PiA+Cj4+ID4+ID4+ID5BdCB0aGlzIHBvaW50LCB0 aGUgc2hpbmZvIGhhcyBhIHJlZmNudCBvZiAyLiBUaGUgbGFyZ2UgYnVmZmVyIHdpbGwgYmUKPj4g Pj4gPj4gPmZyZWVkIGFzIHNvb24gYXMgcnRlX3BrdG1idWZfZnJlZSgpIGlzIGNhbGxlZCBvbiBv cmlnX20gYW5kIG5ld19tLAo+PiA+PiA+PiA+d2hhdGV2ZXIgdGhlIG9yZGVyLgo+PiA+PiA+PiA+ Cj4+ID4+ID4+ID5SZWdhcmRzLAo+PiA+PiA+PiA+T2xpdmllcgo+PiA+PiA+PiAKPj4gPj4gPj4g T2xpdmVyLCB0aGUgcmVhc29uIGl0IHdvcmtzIGlzIEkgY2hhbmdlZCBmcmVlX2NiIEFQSSwgY2Fz ZSAxIGRvZXNuJ3Qga25vdyBvcmlnX20sIGhvdyB5b3UgbWFrZSBpdCBmcmVlIG9yaWdfbSBpbiBm cmVlX2NiLgo+PiA+PiA+PiBUaGUgaW50ZW50aW9uIEkgY2hhbmdlIGZyZWVfY2IgaXMgdG8gbGV0 IGl0IGtub3cgb3JpZ19tLCBJIHNhdyBPVlMgRFBESyByYW4gb3V0IG91dCBidWZmZXJzIGFuZCBv cmlnX20gaXNuJ3QgZnJlZWQsIHRoYXQgaXMgd2h5Cj4+ID4+ID4+IEkgd2FudCB0byBicmluZyBp biB0aGlzIHRvIGZpeCB0aGUgaXNzdWUuIEFnYWluLCBpbiBjYXNlIDEsIG5vYm9keSBleHBsaWNp dGx5IGNhbGxzIHJldF9wa3RtYnVmX2ZyZWUob3JpZ19tKSBleGNlcHQgZnJlZV9jYiBJIGNoYW5n ZWQuCj4+ID4+ID4KPj4gPj4gPklmIG5vYm9keSBjYWxscyByZXRfcGt0bWJ1Zl9mcmVlKG9yaWdf bSksIGl0IGlzIGEgcHJvYmxlbS4KPj4gPj4gPlRoZSBmcmVlX2NiIGlzIHRvIGZyZWUgdGhlIGJ1 ZmZlciwgbm90IHRoZSBtYnVmLgo+PiA+PiA+Cj4+ID4+ID5UbyBtZSwgaXQgc2hvdWxkIHdvcmsg bGlrZSB0aGlzOgo+PiA+PiA+Cj4+ID4+ID4xLSB2aXJ0aW8gY3JlYXRlcyBhIG1idWYgYXR0YWNo ZWQgdG8gdGhlIGV4dCBidWZmZXIgKHRoZSBzaGluZm8gcGxhY2VtZW50Cj4+ID4+ID4gICBidWcg c2hvdWxkIGJlIGZpeGVkKQo+PiA+PiA+Mi0gZ3NvIGNyZWF0ZSBtYnVmcyB0aGF0IHJlZmVyZW5j ZSB0aGUgdGhlIHNhbWUgZXh0IGJ1ZiAoYnkgYXR0YWNoaW5nIHRoZQo+PiA+PiA+ICAgbmV3IG1i dWYpCj4+ID4+ID4zLSBnc28gbXVzdCBmcmVlIHRoZSBvcmlnaW5hbCBtYnVmCj4+ID4+IAo+PiA+ PiBUaGlzIGlzIGltcG9zc2libGUsIHNlZ21lbnRlZCBtYnVmcyBhcmUgcmVmZXJlbmNpbmcgZXh0 ZXJuYWwgYnVmZmVyIGluIG9yaWdpbmFsIG1idWYsCj4+ID4+IGhvdyBkbyB5b3UgZnJlZSBpdD8g QXMgSSBzYWlkIHJ0ZV9nc29fc2VnbWVudCBoYXMgbm8gd2F5IHRvIGZyZWUgaXQsIHBsZWFzZSB0 ZWxsIG1lIGEgd2F5IGlmCj4+ID4+IHlvdSBrbm93IGhvdyB0byBkbyB0aGlzLgo+PiA+Cj4+ID5B cyBJIHNhaWQgYWJvdmUsIGNhbGxpbmcgcnRlX21idWZfZnJlZShvcmlnX20pIHdpbGwgZGVjcmVt ZW50IHRoZSByZWZlcmVuY2UKPj4gPmNvdW50ZXJzIG9uIGFsbCBzZWdtZW50cy4gVGhlIHNlZ21l bnRzIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHBvb2wgaWYgdGhlCj4+ID5yZWZjbnQgcmVhY2hl cyAwLgo+PiA+Cj4+ID4+IAo+PiA+PiA+NC0gdGhlIFBNRCB0cmFuc21pdHMgdGhlIG5ldyBtYnVm cywgYW5kIGZyZWVzIHRoZW0KPj4gPj4gPgo+PiA+PiA+V2hhdGV2ZXIgMy0gb3IgNC0gaXMgZXhl Y3V0ZWQgZmlyc3QsIGF0IHRoZSBlbmQgd2UgYXJlIHN1cmUgdGhhdDoKPj4gPj4gPi0gYWxsIG1i dWZzIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHBvb2wKPj4gPj4gPi0gdGhlIGxpbmVhciBidWZm ZXIgd2lsbCBiZSBmcmVlZCB3aGVuIHRoZSByZWZjbnQgcmVhY2hlcyAwLgo+PiA+PiA+Cj4+ID4+ ID5JZiB0aGlzIGlzIHN0aWxsIHVuY2xlYXIsIHBsZWFzZSwgd3JpdGUgYSB1bml0IHRlc3QgbGlr ZSBJIGRpZAo+PiA+PiA+YWJvdmUgdG8gc2hvdyB5b3VyIGlzc3VlLgo+PiA+PiA+Cj4+ID4+ID5S ZWdhcmRzLAo+PiA+PiA+T2xpdmllcgo+PiA+PiA+Cj4+ID4+IAo+PiA+PiBUaGUgaXNzdWUgaXMg aW4gIjMtIGdzbyBtdXN0IGZyZWUgdGhlIG9yaWdpbmFsIG1idWYiLCBydGVfcGt0bWJ1Zl9mcmVl KHNlZ21lbnRlZF9tYnVzKSBjYW4ndCBkbyBpdCwKPj4gPj4gcnRlX2dzb19zZWdtZW50IGlzIGlt cG9zc2libGUgdG8gZG8gaXQsIG9ubHkgZmVhc2libGUgcG9pbnQgaXMgZnJlZV9jYiwgcGxlYXNl IGxldCBtZSBrbm93IGlmIHlvdSBoYXZlCj4+ID4+IGEgYmV0dGVyIHdheSB0byBmcmVlIG9yaWdp bmFsIG1idWYgYW5kIGRvbid0IGltcGFjdCBvbiBzZWdtZW50ZWQgbWJ1ZnMgaW4gUE1ELiBNeSBw b2ludCBpcyB5b3UgbXVzdAo+PiA+PiBoYXZlIGEgcGxhY2UgdG8gY2FsbCBydGVfcGt0bWJ1Zl9m cmVlKHJvZ2luX20pIGV4cGxpY2l0bHksIG90aGVyd2lzZSBpdCBpcyBpbXBvc3NpYmxlICB0byBy ZXR1cm4gaXQgdG8gbWVtb3J5Cj4+ID4+IHBvb2wsIHBsZWFzZSBwb2ludCBvdXQgIHdoZXJlIGl0 IGNhbiBiZSBjYWxsZWQgaW4gbXkgdXNlciBzY2VuYXJpby4gSSBkb24ndCBjYXJlIGhvdyBpdCBp cyBkb25lLCBJIGp1c3QgY2FyZSBpdCBjYW4KPj4gPj4gZml4IG15IGlzc3VlLCBwbGVhc2UgZG9u J3QgaGVzaXRhdGUgYW5kIHNlbmQgbWUgYSBwYXRjaCBpZiB5b3UgY2FuLCB0aGFua3MgYSBsb3Qu Cj4+ID4KPj4gPlNvcnJ5LCBidXQgSSBkb24ndCBzZWUgaG93IEkgY2FuIGJlIGNsZWFyZXIgdG8g d2hhdCBJIGV4cGxhaW5lZAo+PiA+aW4gbXkgcHJldmlvdXMgYW5zd2VyLgo+PiA+Cj4+ID5QbGVh c2UsICpwcm92aWRlIGEgc2ltcGxlIHRlc3QgZXhhbXBsZSogd2l0aG91dCBnc28vdmhvc3QsIGFu ZCBJIGNhbiBoZWxwCj4+ID50byBtYWtlIGl0IHdvcmsuCj4+ID4KPj4gPgo+PiA+UmVnYXJkcywK Pj4gPk9saXZpZXIKPj4gPgo+PiA+Cj4+ID4+ID4KPj4gPj4gPgo+PiA+PiA+PiBmcmVlX2NiIG11 c3QgaGFuZGxlIGNhc2UgMSBhbmQgY2FzZSAyIGluIHRoZSBzYW1lIGNvZGUsIGZvciBjYXNlIDEs IGNhbGxlcl9tIGlzIHNlZ21lbnRlZCBuZXdfbSwgZm9yIGNhc2UgMiwgY2FsbGVyX20gaXMgb3Jp Z19tLgo+PiA+PiA+PiAKPj4gPj4gPj4gbG9vcCBpbiBydGVfZ3NvX3NlZ2VtZW50IGlzIGhhbmRs aW5nIG9yaWdpbmFsIG1idWYgKHRoaXMgbWJ1ZiBpcyBtdWx0aS1tYnVmIGFuZCBpbmNsdWRlcyBt dWx0aXBsZSBtYnVmcyB3aGljaCBhcmUgbGlua2VkIGJ5IG5leHQKPj4gPj4gPj4gcG9pbnRlciks IGl0IGlzbid0IGEgcHJvYmxlbSBhdCBhbGwuCj4+ID4+ID4+IAo+PiA+PiA+PiBQbGVhc2Ugc2hv dyBtZSBjb2RlIGhvdyB5b3UgY2FuIGZpeCBteSBpc3N1ZSBpZiB5b3UgZG9uJ3QgY2hhbmdlIGZy ZWVfY2IsIHRoYW5rIHlvdS4KPj4gPj4gPj4gCj4+ID4+ID4+IHN0cnVjdCBzaGluZm9fYXJnIHsK Pj4gPj4gPj4gICAgICAgIHZvaWQgKmJ1ZjsKPj4gPj4gPj4gICAgICAgIHN0cnVjdCBydGVfbWJ1 ZiAqbWJ1ZjsKPj4gPj4gPj4gfTsKPj4gPj4gPj4gCj4+ID4+ID4+IHZpcnRpb19kZXZfZXh0YnVm X2ZyZWUoc3RydWN0IHJ0ZV9tYnVmICpjYWxsZXJfbSwgdm9pZCAqb3BhcXVlKQo+PiA+PiA+PiB7 Cj4+ID4+ID4+ICAgICAgICBzdHJ1Y3Qgc2hpbmZvX2FyZyAqYXJnID0gKHN0cnVjdCBzaGluZm9f YXJnICopb3BhcXVlOwo+PiA+PiA+PiAKPj4gPj4gPj4gICAgICAgIHJ0ZV9mcmVlKGFyZy0+YnVm KTsKPj4gPj4gPj4gICAgICAgIGlmIChjYWxsZXJfbSAhPSBhcmctPm1idWYpCj4+ID4+ID4+ICAg ICAgICAgICAgICAgIHJ0ZV9wa3RtYnVmX2ZyZWUoYXJnLT5tYnVmKTsKPj4gPj4gPj4gICAgICAg IHJ0ZV9mcmVlKGFyZyk7Cj4+ID4+ID4+IH0K