From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: RFC v1: Xen block protocol overhaul - problem statement (with pictures!) Date: Tue, 22 Jan 2013 14:46:40 -0500 Message-ID: <20130122194640.GB10733@phenom.dumpdata.com> References: <20121218143109.GA24471@phenom.dumpdata.com> <50F9718A.4040202@citrix.com> <20130118182028.GB11351@phenom.dumpdata.com> <50FA9545.9090406@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <50FA9545.9090406@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Roger Pau =?iso-8859-1?Q?Monn=E9?= Cc: "axboe@kernel.dk" , "xen-devel@lists.xensource.com" , Felipe Franciosi , "martin.petersen@oracle.com" , "matthew@wil.cx" List-Id: xen-devel@lists.xenproject.org T24gU2F0LCBKYW4gMTksIDIwMTMgYXQgMDE6NDQ6NTNQTSArMDEwMCwgUm9nZXIgUGF1IE1vbm7D qSB3cm90ZToKPiBPbiAxOC8wMS8xMyAxOToyMCwgS29ucmFkIFJ6ZXN6dXRlayBXaWxrIHdyb3Rl Ogo+ID4gT24gRnJpLCBKYW4gMTgsIDIwMTMgYXQgMDU6MDA6MTBQTSArMDEwMCwgUm9nZXIgUGF1 IE1vbm7DqSB3cm90ZToKPiA+PiBPbiAxOC8xMi8xMiAxNTozMSwgS29ucmFkIFJ6ZXN6dXRlayBX aWxrIHdyb3RlOgo+ID4+PiBIZXksCj4gPj4+Cj4gPj4+IEkgYW0gaW5jbHVkaW5nIHNvbWUgZm9s a3MgdGhhdCBhcmUgbm90IGFsd2F5cyBvbiBYZW4tZGV2ZWwgdG8gc2VlIGlmIHRoZXkgaGF2ZQo+ ID4+PiBzb21lIGV4dHJhIGlkZWFzIG9yIGNhbiBjb3JyZWN0IG15IG1pc3VuZGVyc3RhbmRpbmdz Lgo+ID4+Pgo+ID4+PiBUaGlzIGlzIHZlcnkgbXVjaCBSRkMgLSBzbyB0aGVyZSBpcyBib3VuZCB0 byBiZSBzb21lIGJ1Z3MuCj4gPj4+IFRoZSBvcmlnaW5hbCBpcyBoZXJlCj4gPj4+IGh0dHBzOi8v ZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVZoNVQ4WjNUeDNzVUVoVkIwRG5OREtCTmlxQl9a QThaNVlWcUFzQ0lqdUkvZWRpdAo+ID4+PiBpbiBjYXNlIG9uZSB3aXNoZXMgdG8gbW9kaWZ5L3By b3ZpZGUgY29tbWVudCBvbiB0aGF0IG9uZS4KPiA+Pgo+ID4+IEhlbGxvIEtvbnJhZCwKPiA+Pgo+ ID4+IFRoYW5rcyBmb3IgdGhlIHByb2JsZW0gZGVzY3JpcHRpb24gYW5kIHBvc3NpYmxlIHNvbHV0 aW9ucywgSSdtCj4gPj4gZ29pbmcgdG8gdGFrZSBvbiB0aGlzIChwcm92aWRlZCB0aGF0IHlvdSBh cmUgT0sgd2l0aCBpdCkuCj4gPiAKPiA+IFRoZSB3aG9sZSB0aGluZyE/IFlvdSBhcmUgcXVpdGUg YW1iaXRpb3VzIGhlcmUhCj4gCj4gSSB3aWxsIHRyeSB0byBmaXggYXMgbXVjaCBhcyBwb3NzaWJs ZSwgb25lIHRoaW5nIGF0IGEgdGltZSwgZG9uJ3QgZXhwZWN0Cj4gYSBzZXJpZXMgZnJvbSBvbmUg ZGF5IHRvIGFub3RoZXIgZml4aW5nIGFsbCB0aGUgaXNzdWVzIDopCgpIZWguCj4gCj4gPj4KPiA+ Pj4KPiA+Pj4gVGhlcmUgYXJlIG91dHN0YW5kaW5nIGlzc3VlcyB3ZSBoYXZlIG5vdyB3aXRoIHRo ZSBibG9jayBwcm90b2NvbDoKPiA+Pj4gTm90ZTogSSBhbSBhc3N1bWluZyA2NC1iaXQgZ3Vlc3Qv aG9zdCAtIGFzIHRoZSBzaXpl4oCZcyBvZiB0aGUgc3RydWN0dXJlcwo+ID4+PiBjaGFuZ2Ugb24g MzItYml0LiBJIGFtIGFsc28gYXR0YWNoaW5nIHRoZSBoZWFkZXIgZm9yIHRoZSBibGtpZiByaW5n Cj4gPj4+IGFzIG9mIHRvZGF5Lgo+ID4+Pgo+ID4+PiBBKSBTZWdtZW50IHNpemUgaXMgbGltaXRl ZCB0byAxMSBwYWdlcy4gSXQgbWVhbnMgd2UgY2FuIGF0IG1vc3Qgc3F1ZWV6ZQo+ID4+PiBpbiA0 NGtCIHBlciByZXF1ZXN0LiBUaGUgcmluZyBjYW4gaG9sZCAzMiAobmV4dCBwb3dlciBvZiB0d28g YmVsb3cgMzYpCj4gPj4+IHJlcXVlc3RzLCBtZWFuaW5nIHdlIGNhbiBkbyAxLjRNIG9mIG91dHN0 YW5kaW5nIHJlcXVlc3RzLgo+ID4+Cj4gPj4gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGRpZmZl cmVudCBvcHRpb25zIGhlcmUgYW5kIEkgdGhpbmsgdGhlIG1vc3QKPiA+PiBzdWl0YWJsZSBvbmUg d291bGQgYmUgdXNpbmcgYSBtZWNoYW5pc20gc2ltaWxhciB0byBWaXJ0SU8gImluZGlyZWN0Cj4g Pj4gZGVzY3JpcHRvcnMiLCBpdCBpcyB0aGUgb25lIHRoYXQgYWxsb3dzIGZvciBtb3JlIGluLWZs aWdodCByZXF1ZXN0cwo+ID4+IHdoaWxlIGJlaW5nIHF1aXRlIHNpbXBsZSB0byBpbXBsZW1lbnQu Cj4gPiAKPiA+IDxub2RzPiBJIHRoaW5rIHlvdSBhcmUgcmlnaHQgLSBwbHVzIGl0IGxvb2tzIHRv IGJlIHNpbWlsYXIgdG8gaG93IHRoZSBtb3JlCj4gPiBtb2Rlcm4gaGFyZHdhcmUgZG9lcyByZXF1 ZXN0cyAoaGVyZSBJIGFtIHRoaW5raW5nIG9mIE5WTWUgYW5kIGl0cyBjb21tYW5kCj4gPiBkZXNj cmlwdG9yIC0gd2hlcmUgaXQgY2FuIHBvaW50IHRvIGEgcGFnZSBmdWxsIG9mIERNQSBhZGRyZXNz ZXMgKyBMQkFzIGFuZCBzYXkKPiA+ICJHbyBSRUFEIikuCj4gPiAKPiA+Pgo+ID4+PiBCKS4gUHJv ZHVjZXIgYW5kIGNvbnN1bWVyIGluZGV4IGlzIG9uIHRoZSBzYW1lIGNhY2hlIGxpbmUuIEluIHBy ZXNlbnQgaGFyZHdhcmUKPiA+Pj4gdGhhdCBtZWFucyB0aGUgcmVhZGVyIGFuZCB3cml0ZXIgd2ls bCBjb21wZXRlIGZvciB0aGUgc2FtZSBjYWNoZWxpbmUgY2F1c2luZyBhCj4gPj4+IHBpbmctcG9u ZyBiZXR3ZWVuIHNvY2tldHMuCj4gPj4+Cj4gPj4+IEMpLiBUaGUgcmVxdWVzdHMgYW5kIHJlc3Bv bnNlcyBhcmUgb24gdGhlIHNhbWUgcmluZy4gVGhpcyBhZ2FpbiBjYXVzZXMgdGhlCj4gPj4+IHBp bmctcG9uZyBiZXR3ZWVuIHNvY2tldHMgYXMgdGhlIG93bmVyc2hpcCBvZiB0aGUgY2FjaGUgbGlu ZSB3aWxsIHNoaWZ0IGJldHdlZW4KPiA+Pj4gc29ja2V0cy4KPiA+Pj4KPiA+Pj4gRCkuIENhY2hl IGFsaWdubWVudC4gQ3VycmVudGx5IHRoZSBwcm90b2NvbCBpcyAxNi1iaXQgYWxpZ25lZC4gVGhp cyBpcyBhd2t3YXJkCj4gPj4+IGFzIHRoZSByZXF1ZXN0IGFuZCByZXNwb25zZXMgc29tZXRpbWVz IGZpdCB3aXRoaW4gYSBjYWNoZWxpbmUgb3Igc29tZXRpbWVzCj4gPj4+IHN0cmFkZGxlIHRoZW0u Cj4gPj4+Cj4gPj4+IEUpLiBJbnRlcnJ1cHQgbWl0aWdhdGlvbi4gV2UgYXJlIGN1cnJlbnRseSBk b2luZyBhIGtpY2sgd2hlbmV2ZXIgd2UgYXJlCj4gPj4+IGRvbmUg4oCccHJvY2Vzc2luZ+KAnSB0 aGUgcmluZy4gVGhlcmUgYXJlIGJldHRlciB3YXlzIHRvIGRvIHRoaXMgLSBhbmQKPiA+Pj4gd2Ug Y291bGQgdXNlIGV4aXN0aW5nIG5ldHdvcmsgaW50ZXJydXB0IG1pdGlnYXRpb24gdGVjaG5pcXVl cyB0byBtYWtlIHRoZQo+ID4+PiBjb2RlIHBvbGwgd2hlbiB0aGVyZSBpcyBhIGxvdCBvZiBkYXRh Lgo+ID4+Pgo+ID4+PiBGKS4gTGF0ZW5jeS4gVGhlIHByb2Nlc3Npbmcgb2YgdGhlIHJlcXVlc3Qg bGltaXRzIHVzIHRvIG9ubHkgZG8gNDRrQiAtIHdoaWNoIG1lYW5zCj4gPj4+IHRoYXQgYSAxTUIg Y2h1bmsgb2YgZGF0YSAtIHdoaWNoIG9uIGNvbnRlbXBvcmFyeSBkZXZpY2VzIHdvdWxkIG9ubHkg dXNlIEkvTyByZXF1ZXN0Cj4gPj4+IC0gd291bGQgYmUgc3BsaXQgdXAgaW4gbXVsdGlwbGUg4oCY cmVxdWVzdHPigJkgaW5hZHZlcnRlbnRseSBkZWxheWluZyB0aGUgcHJvY2Vzc2luZyBvZgo+ID4+ PiBzYWlkIGJsb2NrLgo+ID4+Pgo+ID4+PiBHKSBGdXR1cmUgZXh0ZW5zaW9ucy4gRElGL0RJWCBm b3IgaW50ZWdyaXR5LiBUaGVyZSBtaWdodAo+ID4+PiBiZSBvdGhlciBpbiB0aGUgZnV0dXJlIGFu ZCBpdCB3b3VsZCBiZSBnb29kIHRvIGxlYXZlIHNwYWNlIGZvciBleHRyYQo+ID4+PiBmbGFncyBU QkQuCj4gPj4+Cj4gPj4+IEgpLiBTZXBhcmF0ZSB0aGUgcmVzcG9uc2UgYW5kIHJlcXVlc3Qgcmlu Z3MuIFRoZSBjdXJyZW50Cj4gPj4+IGltcGxlbWVudGF0aW9uIGhhcyBvbmUgdGhyZWFkIGZvciBv bmUgYmxvY2sgcmluZy4gVGhlcmUgaXMgbm8gcmVhc29uIHdoeQo+ID4+PiB0aGVyZSBjb3VsZCBu b3QgYmUgdHdvIHRocmVhZHMgLSBvbmUgZm9yIHJlc3BvbnNlcyBhbmQgb25lIGZvciByZXF1ZXN0 cyAtCj4gPj4+IGFuZCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIHNjaGVkdWxlZCBvbiBkaWZmZXJl bnQgQ1BVcy4gRnVydGhlcm1vcmUgdGhpcwo+ID4+PiBjb3VsZCBhbHNvIGJlIHNwbGl0IGluIG11 bHRpLXF1ZXVlcyAtIHNvIHR3byBxdWV1ZXMgKHJlc3BvbnNlIGFuZCByZXF1ZXN0KQo+ID4+PiBv biBlYWNoIHZDUFUuCj4gPj4+Cj4gPj4+IEkpLiBXZSB3YXN0ZSBhIGxvdCBvZiBzcGFjZSBvbiB0 aGUgcmluZyAtIGFzIHdlIHVzZSB0aGUKPiA+Pj4gcmluZyBmb3IgYm90aCByZXF1ZXN0cyBhbmQg cmVzcG9uc2VzLiBUaGUgcmVzcG9uc2Ugc3RydWN0dXJlIG5lZWRzIHRvCj4gPj4+IG9jY3VweSB0 aGUgc2FtZSBhbW91bnQgb2Ygc3BhY2UgYXMgdGhlIHJlcXVlc3Qgc3RydWN0dXJlICgxMTIgYnl0 ZXMpLiBJZgo+ID4+PiB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgaXMgZXhwYW5kZWQgdG8gYmUgYWJs ZSB0byBmaXQgbW9yZSBzZWdtZW50cyAoc2F5Cj4gPj4+IHRoZSDigJhzdHJ1Y3QgYmxraWZfc3Jp bmdfZW50cnkgaXMgZXhwYW5kZWQgdG8gfjE1MDAgYnl0ZXMpIHRoYXQgc3RpbGwKPiA+Pj4gcmVx dWlyZXMgdXMgdG8gaGF2ZSBhIG1hdGNoaW5nIHNpemUgcmVzcG9uc2Ugc3RydWN0dXJlLiBXZSBk byBub3QgbmVlZAo+ID4+PiB0byB1c2UgdGhhdCBtdWNoIHNwYWNlIGZvciBvbmUgcmVzcG9uc2Uu IEhhdmluZyBhIHNlcGFyYXRlIHJlc3BvbnNlIHJpbmcKPiA+Pj4gd291bGQgc2ltcGxpZnkgdGhl IHN0cnVjdHVyZXMuCj4gPj4+Cj4gPj4+IEopLiAzMiBiaXQgdnMgNjQgYml0LiBSaWdodCBub3cg dGhlIHNpemUKPiA+Pj4gb2YgdGhlIHJlcXVlc3Qgc3RydWN0dXJlIGlzIDExMiBieXRlcyB1bmRl ciA2NC1iaXQgZ3Vlc3QgYW5kIDEwMiBieXRlcwo+ID4+PiB1bmRlciAzMi1iaXQgZ3Vlc3QuIEl0 IGlzIGNvbmZ1c2luZyBhbmQgZnVydGhlcm1vcmUgcmVxdWlyZXMgdGhlIGhvc3QKPiA+Pj4gdG8g ZG8gZXh0cmEgYWNjb3VudGluZyBhbmQgcHJvY2Vzc2luZy4KPiA+Pj4KPiA+Pj4gVGhlIGNydWRl IGRyYXdpbmcgZGlzcGxheXMgbWVtb3J5IHRoYXQgdGhlIHJpbmcgb2NjdXBpZXMgaW4gb2Zmc2V0 IG9mCj4gPj4+IDY0IGJ5dGVzIChjYWNoZSBsaW5lKS4gT2YgY291cnNlIGZ1dHVyZSBDUFVzIGNv dWxkIGhhdmUgZGlmZmVyZW50IGNhY2hlCj4gPj4+IGxpbmVzIChzYXkgMzIgYnl0ZXM/KS0gd2hp Y2ggd291bGQgc2tldyB0aGlzIGRyYXdpbmcuIEEgMzItYml0IHJpbmcgaXMKPiA+Pj4gYSBiaXQg ZGlmZmVyZW50IGFzIHRoZSDigJhzdHJ1Y3QgYmxraWZfc3JpbmdfZW50cnnigJkgaXMgb2YgMTAy IGJ5dGVzLgo+ID4+Pgo+ID4+Pgo+ID4+PiBUaGUgQSkgaGFzIHR3byBzb2x1dGlvbnMgdG8gdGhp cyAobG9vayBhdAo+ID4+PiBodHRwOi8vY29tbWVudHMuZ21hbmUub3JnL2dtYW5lLmNvbXAuZW11 bGF0b3JzLnhlbi5kZXZlbC8xNDA0MDYgZm9yCj4gPj4+IGRldGFpbHMpLiBPbmUgcHJvcG9zZWQg YnkgSnVzdGluIGZyb20gU3BlY3RyYWxvZ2ljIGhhcyB0byBuZWdvdGlhdGUKPiA+Pj4gdGhlIHNl Z21lbnQgc2l6ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSDigJhzdHJ1Y3QgYmxraWZfc3JpbmdfZW50 cnnigJkKPiA+Pj4gaXMgbm93IGEgdmFyaWFibGUgc2l6ZS4gSXQgY2FuIGV4cGFuZCBmcm9tIDEx MiBieXRlcyAoY292ZXIgMTEgcGFnZXMgb2YKPiA+Pj4gZGF0YSAtIDQ0a0IpIHRvIDE1ODAgYnl0 ZXMgKDI1NiBwYWdlcyBvZiBkYXRhIC0gc28gMU1CKS4gSXQgaXMgYSBzaW1wbGUKPiA+Pj4gZXh0 ZW5zaW9uIGJ5IGp1c3QgbWFraW5nIHRoZSBhcnJheSBpbiB0aGUgcmVxdWVzdCBleHBhbmQgZnJv bSAxMSB0byBhCj4gPj4+IHZhcmlhYmxlIHNpemUgbmVnb3RpYXRlZC4KPiA+Pj4KPiA+Pj4KPiA+ Pj4gVGhlIG1hdGggaXMgYXMgZm9sbG93Lgo+ID4+Pgo+ID4+Pgo+ID4+PiAgICAgICAgIHN0cnVj dCBibGtpZl9yZXF1ZXN0X3NlZ21lbnQgewo+ID4+PiAgICAgICAgICAgICAgICAgdWludDMyIGdy YW50OyAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0IGJ5dGVzIHVpbnQ4X3QKPiA+Pj4gICAg ICAgICAgICAgICAgIGZpcnN0X3NlY3QsIGxhc3Rfc2VjdDsvLyAxLCAxID0gNiBieXRlcwo+ID4+ PiAgICAgICAgIH0KPiA+Pj4gKDYgYnl0ZXMgZm9yIGVhY2ggc2VnbWVudCkgLSB0aGUgYWJvdmUg c3RydWN0dXJlIGlzIGluIGFuIGFycmF5IG9mIHNpemUKPiA+Pj4gMTEgaW4gdGhlIHJlcXVlc3Qu IFRoZSDigJhzdHJ1Y3QgYmxraWZfc3JpbmdfZW50cnnigJkgaXMgMTEyIGJ5dGVzLiBUaGUKPiA+ Pj4gY2hhbmdlIGlzIHRvIGV4cGFuZCB0aGUgYXJyYXkgLSBpbiB0aGlzIGV4YW1wbGUgd2Ugd291 bGQgdGFjayBvbiAyNDUgZXh0cmEKPiA+Pj4g4oCYc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVu dOKAmSAtIDI0NSo2ICsgMTEyID0gMTU4Mi4gSWYgd2Ugd2VyZSB0bwo+ID4+PiB1c2UgMzYgcmVx dWVzdHMgKHNvIDE1ODIqMzYgKyA2NCkgd2Ugd291bGQgdXNlIDU3MDE2IGJ5dGVzICgxNCBwYWdl cykuCj4gPj4+Cj4gPj4+Cj4gPj4+IFRoZSBvdGhlciBzb2x1dGlvbiAoZnJvbSBJbnRlbCAtIFJv bmdodWkpIHdhcyB0byBjcmVhdGUgb25lIGV4dHJhCj4gPj4+IHJpbmcgdGhhdCBvbmx5IGhhcyB0 aGUg4oCYc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudOKAmSBpbiB0aGVtLiBUaGUKPiA+Pj4g 4oCYc3RydWN0IGJsa2lmX3JlcXVlc3TigJkgd291bGQgYmUgY2hhbmdlZCB0byBoYXZlIGFuIGlu ZGV4IGluIHNhaWQKPiA+Pj4g4oCYc2VnbWVudCByaW5n4oCZLiBUaGVyZSBpcyBvbmx5IG9uZSBz ZWdtZW50IHJpbmcuIFRoaXMgbWVhbnMgdGhhdCB0aGUKPiA+Pj4gc2l6ZSBvZiB0aGUgaW5pdGlh bCByaW5nIGlzIHN0aWxsIHRoZSBzYW1lLiBUaGUgcmVxdWVzdHMgd291bGQgcG9pbnQKPiA+Pj4g dG8gdGhlIHNlZ21lbnQgYW5kIGVudW1lcmF0ZSBvdXQgaG93IG1hbnkgb2YgdGhlIGluZGV4ZXMg aXQgd2FudHMgdG8KPiA+Pj4gdXNlLiBUaGUgbGltaXQgaXMgb2YgY291cnNlIHRoZSBzaXplIG9m IHRoZSBzZWdtZW50LiBJZiBvbmUgYXNzdW1lcyBhCj4gPj4+IG9uZS1wYWdlIHNlZ21lbnQgdGhp cyBtZWFucyB3ZSBjYW4gaW4gb25lIHJlcXVlc3QgY292ZXIgfjRNQi4gVGhlIG1hdGgKPiA+Pj4g aXMgYXMgZm9sbG93Ogo+ID4+Pgo+ID4+Pgo+ID4+PiBGaXJzdCByZXF1ZXN0IHVzZXMgdGhlIGhh bGYgb2YgdGhlIHNlZ21lbnQgcmluZyAtIHNvIGluZGV4IDAgdXAKPiA+Pj4gdG8gMzQxIChvdXQg b2YgNjgyKS4gRWFjaCBlbnRyeSBpbiB0aGUgc2VnbWVudCByaW5nIGlzIGEg4oCYc3RydWN0Cj4g Pj4+IGJsa2lmX3JlcXVlc3Rfc2VnbWVudOKAmSBzbyBpdCBvY2N1cGllcyA2IGJ5dGVzLiBUaGUg b3RoZXIgcmVxdWVzdHMgb24KPiA+Pj4gdGhlIHJpbmcgKHNvIHRoZXJlIGFyZSAzNSBsZWZ0KSBj YW4gdXNlIGVpdGhlciB0aGUgcmVtYWluaW5nIDM0MSBpbmRleGVzCj4gPj4+IG9mIHRoZSBzZ2Vt ZW50IHJpbmcgb3IgdXNlIHRoZSBvbGQgc3R5bGUgcmVxdWVzdC4gVGhlIG9sZCBzdHlsZSByZXF1 ZXN0Cj4gPj4+IGNhbiBhZGRyZXNzIHVzZSB1cCB0byA0NGtCLiBGb3IgZXhhbXBsZToKPiA+Pj4K PiA+Pj4KPiA+Pj4gIHNyaW5nWzBdLT5bdXNlcyAwLT4zNDEgaW5kZXhlcyBpbiB0aGUgc2VnbWVu dCByaW5nXSA9IDM0Mio0MDk2ID0gMTQwMDgzMgo+ID4+PiAgc3JpbmdbMV0tPlt1c2Ugc3RoZSBv bGQgc3R5bGUgcmVxdWVzdF0gPSAxMSo0MDk2ID0gNDUwNTYKPiA+Pj4gIHNyaW5nWzJdLT5bdXNl cyAzNDItPjY4MiBpbmRleGVzIGluIHRoZSBzZWdtZW50IHJpbmddID0gMTM5MjY0MAo+ID4+PiAg c3JpbmdbMy4uMzJdIC0+IFt1c2VzIHRoZSBvbGQgc3R5bGUgcmVxdWVzdF0gPSAyOSo0MDk2KjEx ID0gMTMwNjYyNAo+ID4+Pgo+ID4+Pgo+ID4+PiBUb3RhbDogNDE0NTE1MiBieXRlcyBOYXR1cmFs bHkgdGhpcyBjb3VsZCBiZSBleHRlbmRlZCB0byBoYXZlIGEgYmlnZ2VyCj4gPj4+IHNlZ21lbnQg cmluZyB0byBjb3ZlciBtb3JlLgo+ID4+Pgo+ID4+Pgo+ID4+Pgo+ID4+Pgo+ID4+Pgo+ID4+PiBU aGUgcHJvYmxlbSB3aXRoIHRoaXMgZXh0ZW5zaW9uIGlzIHRoYXQgd2UgdXNlIDYgYnl0ZXMgYW5k IGVuZCB1cAo+ID4+PiBzdHJhZGRsaW5nIGEgY2FjaGUgbGluZS4gVXNpbmcgOCBieXRlcyB3aWxs IGZpeCB0aGUgY2FjaGUgc3RyYWRkbGluZy4gVGhpcwo+ID4+PiB3b3VsZCBtZWFuIGZpdHRpbmcg b25seSA1MTIgc2VnbWVudHMgcGVyIHBhZ2UuCj4gPj4+Cj4gPj4+Cj4gPj4+IFRoZXJlIGlzIHll dCBhbm90aGVyIG1lY2hhbmlzbSB0aGF0IGNvdWxkIGJlIGVtcGxveWVkICAtIGFuZCBpdCBib3Jy b3dzCj4gPj4+IGZyb20gVmlydElPIHByb3RvY29sLiBBbmQgdGhhdCBpcyB0aGUg4oCYaW5kaXJl Y3QgZGVzY3JpcHRvcnPigJkuIFRoaXMKPiA+Pj4gdmVyeSBzaW1pbGFyIHRvIHdoYXQgSW50ZWwg c3VnZ2VzdHMsIGJ1dCB3aXRoIGEgdHdpc3QuCj4gPj4+Cj4gPj4+Cj4gPj4+IFdlIGNvdWxkIHBy b3ZpZGUgYSBuZXcgQkxLSUZfT1AgKHNheSBCTEtJRl9PUF9JTkRJUkVDVCksIGFuZCB0aGUg4oCY c3RydWN0Cj4gPj4+IGJsa2lmX3NyaW5n4oCZIChlYWNoIGVudHJ5IGNhbiBiZSB1cCB0byAxMTIg Ynl0ZXMgaWYgbmVlZGVkIC0gc28gdGhlCj4gPj4+IG9sZCBzdHlsZSByZXF1ZXN0IHdvdWxkIGZp dCkuIEl0IHdvdWxkIGxvb2sgbGlrZToKPiA+Pj4KPiA+Pj4KPiA+Pj4gLyogc28gNjQgYnl0ZXMg dW5kZXIgNjQtYml0LiBJZiBuZWNlc3NhcnksIHRoZSBhcnJheSAoc2VnKSBjYW4gYmUKPiA+Pj4g ZXhwYW5kZWQgdG8gZml0IDExIHNlZ21lbnRzIGFzIHRoZSBvbGQgc3R5bGUgcmVxdWVzdCBkaWQg Ki8gc3RydWN0Cj4gPj4+IGJsa2lmX3JlcXVlc3RfaW5kaXJlY3Qgewo+ID4+PiAgICAgICAgIHVp bnQ4X3QgICAgICAgIG9wOyAgICAgICAgICAgLyogQkxLSUZfT1BfKiAodXN1YWxseSBSRUFEIG9y IFdSSVRFICAgICovCj4gPj4+IC8vIDEgYmxraWZfdmRldl90ICAgaGFuZGxlOyAgICAgICAvKiBv bmx5IGZvciByZWFkL3dyaXRlIHJlcXVlc3RzICAgICAgICAgKi8gLy8gMgo+ID4+PiAjaWZkZWYg Q09ORklHX1g4Nl82NAo+ID4+PiAgICAgICAgIHVpbnQzMl90ICAgICAgIF9wYWQxOyAgICAgICAg ICAgICAvKiBvZmZzZXRvZihibGtpZl9yZXF1ZXN0LHUucncuaWQpID09IDggKi8gLy8gMgo+ID4+ PiAjZW5kaWYKPiA+Pj4gICAgICAgICB1aW50NjRfdCAgICAgICBpZDsgICAgICAgICAgIC8qIHBy aXZhdGUgZ3Vlc3QgdmFsdWUsIGVjaG9lZCBpbiByZXNwICAqLwo+ID4+PiAgICAgICAgIGdyYW50 X3JlZl90ICAgIGdyZWY7ICAgICAgICAvKiByZWZlcmVuY2UgdG8gaW5kaXJlY3QgYnVmZmVyIGZy YW1lICBpZiB1c2VkKi8KPiA+Pj4gICAgICAgICAgICAgc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2Vn bWVudF9hbGlnbmVkIHNlZ1s0XTsgLy8gZWFjaCBpcyA4IGJ5dGVzCj4gPj4+Cj4gPj4+IH0gX19h dHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwo+ID4+Pgo+ID4+Pgo+ID4+PiBzdHJ1Y3QgYmxraWZf cmVxdWVzdCB7Cj4gPj4+ICAgICAgICAgdWludDhfdCAgICAgICAgb3BlcmF0aW9uOyAgICAvKiBC TEtJRl9PUF8/Pz8gICovCj4gPj4+ICAgICAgICAgdW5pb24gewo+ID4+PiAgICAgICAgICAgICAg ICAgc3RydWN0IGJsa2lmX3JlcXVlc3Rfcncgcnc7Cj4gPj4+ICAgICAgICAgICAgICAgICBzdHJ1 Y3QgYmxraWZfcmVxdWVzdF9pbmRpcmVjdAo+ID4+PiAgICAgICAgICAgICAgICAgaW5kaXJlY3Q7 IOKApiBvdGhlciAuLgo+ID4+PiAgICAgICAgIH0gdTsKPiA+Pj4gfSBfX2F0dHJpYnV0ZV9fKChf X3BhY2tlZF9fKSk7Cj4gPj4+Cj4gPj4KPiA+PiBEbyB5b3UgdGhpbmsgaXQgd2lsbCBiZSBzdWl0 YWJsZSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgYmxraWZfcmVxdWVzdCwgSQo+ID4+IHdhcyB0aGlu a2luZyB0aGF0IGlmIHdlIGludHJvZHVjZSBpbmRpcmVjdCByZXF1ZXN0IHdlIGNvdWxkIHJlZHVj ZSB0aGUKPiA+PiBtYXhpbXVtIG51bWJlciBvZiBzZWdtZW50cyBwZXIgcmVxdWVzdCB0byAyLCBz byBibGtpZl9yZXF1ZXN0IGlzCj4gPj4gcmVkdWNlZCB0byAzMmJ5dGVzIGFuZCB3ZSBjYW4gZml0 IDEyNiByZXF1ZXN0cyAoNjQgZHVlIHRvIHJvdW5kaW5nKQo+ID4+IGluIGEgc2luZ2xlIHJpbmcu Cj4gPiAKPiA+IEFsdGVyaW5nIGl0IHRvIGJlIDMyLWJ5dGVzIG1lYW5zIHdlIGFyZSBzdGlsbCBj cm9zc2luZyB0d28gY2FjaGVsaW5lcy4KPiAKPiBBcmUgeW91IHN1cmU/IHVzaW5nIDMyYnl0ZXMg b24gYSA2NGJ5dGVzIGNhY2hlIGxpbmUgbWVhbnMgd2UgaGF2ZSB0d28KPiByZXF1ZXN0cyBpbiB0 aGUgc2FtZSBjYWNoZSBsaW5lLCBidXQgaXQncyBpbXBvc3NpYmxlIHRoYXQgYSByZXF1ZXN0IHVz ZXMKPiB0d28gZGlmZmVyZW50IGNhY2hlIGxpbmVzICh3aGljaCBJIGd1ZXNzIGl0J3MgdGhlIG1h aW4gcHJvYmxlbSk6CgpDb3JyZWN0LiBJbiB5b3VyIGNhc2Ugd2UgaGF2ZSBvbmUgY2FjaGVsaW5l IHNoYXJlZCBieSB0d28gcmVxdWVzdHMuCgpUaGlzIG1lYW5zIHdlIHdpbGwgaGF2ZSB0byBiZSBl eHRyYSBjYXJlZnVsIGluIHRoZSBiYWNrZW5kIChBbmQgZnJvbnRlbmQpCnRvIGNhbGwgJ3dtYigp JyBhZnRlciB3ZSBoYXZlIGZpbGxlZCB0d28gZW50cmllcy4gT3RoZXJ3aXNlIHdlIHVwIGRvaW5n CnNvbWV0aGluZyBsaWtlIHRoaXM6CgoJZmlsbCBvdXQgdGhlIHJlcVswXQoJYSkgd21iKCkgICA9 PiB3cml0ZXMgdGhlIGZ1bGwgNjQtYnl0ZXMgY2FjaGVsaW5lIG91dC4KCWZpbGwgb3V0IHRoZSBy ZXFbMV0KCWIpIHdtYigpCTw9PSBoYXMgdG8gdGhyb3cgb3V0IHRoZSBjYWNoZWxpbmUgYW5kIHJl LXdyaXRlIHRoZSBuZXcKCQkgICAgb25lLgoKV2l0aCBhIDY0LWJ5dGVzIG9uZSB3ZSBkbyBub3Qg aGF2ZSB0byB3b3JyeSBhYm91dCB0aGF0LgoKPiAKPiAgICAgICAgICAgICAgICAgNjRieXRlcwo+ ICAgICA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPgo+ICAgICArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKwo+ICAgICB8IHJpbmcgaGVhZGVyICsgcGFkICAgICAgICAgICAg fAo+ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICAgICAgICAzMmJ5dGVz Cj4gICAgIDwtLS0tLS0tLS0tLS0tLS0+Cj4gICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0rCj4gICAgIHwgcmVxWzBdICAgICAgICB8IHJlcVsxXSAgICAgICB8Cj4gICAgICstLS0t LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0rCj4gICAgIHwgcmVxWzJdICAgICAgICB8IHJlcVsz XSAgICAgICB8Cj4gICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCj4gCj4gPiAK PiA+IFRoaXMgaXMgd2hlcmUgSSB0aG91Z2h0IG9mIHB1dHRpbmcgJ3N0cnVjdCBibGtpZl9yZXF1 ZXN0X3J3JyBvbiBhIGRpZXQKPiA+IGFuZCBqdXN0IG1ha2luZyBpdCBoYXZlIDQgb2YgdGhlIGdy YW50cyAtIGluIGNhc2UgdGhlIHJlcXVlc3QgaXMKPiA+IGp1c3QgMTZLLiBBbmQgdGhlbiB0aGUg c2l6ZSBvZiB0aGUgc3RydWN0dXJlIChpZiBJIGdvdCBteSBtYXRoIHJpZ2h0KQo+ID4gd291bGQg YmUgNjQtYnl0ZXMuCj4gCj4gVXNpbmcgNjRieXRlcyBzdGlsbCBsZWF2ZXMgdXMgd2l0aCBvbmx5 IDMyIHJlcXVlc3RzIG9uIHRoZSByaW5nICh1bmxlc3MKPiB3ZSBjaGFuZ2UgdGhlIHJpbmcgcHJv dG9jb2wgdG8gc3VwcG9ydCBhIHJpbmcgc2l6ZSBkaWZmZXJlbnQgdGhhbiBhCj4gcG93ZXIgb2Yg dHdvKS4KCk1vcmUgSSBiZWxpZXZlLiBUaGUgZmlyc3QgNjQgYnl0ZXMgYXJlIGZvciB0aGUgcmlu ZyBoZWFkZXIgKyBwYWQuIEVhY2gKcmVxdWVzdC9yZXNwb25zZSBpcyA2NCBieXRlcywgc28gNDAz MiAvIDY0ID0gNjMuCgpTbyA2MyByZXF1ZXN0cy4gV2Ugc2hvdWxkIGFsc28gc3VwcG9ydCBhIGJp Z2dlciByaW5nIHNpemUgaWYgdGhlCmJhY2tlbmQgaGFzIHNheSB1bHRyYS1mYXN0IFNTRCBzbyB0 aGF0IGNhbiBmaWxsIGFuIGluY3JlZGlibGUgYW1vdW50Cm9mIHJlcXVlc3RzIGFuZCBnZXQgcmVz cG9uc2VzIGFsbW9zdCBhcyBmYXN0IGFzIHdlIGZpbGwgdGhlIHJlcXVlc3RzLgoKVGhlIG5lYXQg dGhpbmcgYWJvdXQgdGhlIHNwbGl0IHJlcXVlc3QvcmVzcG9uc2UgaXMgdGhhdCB0aGUgcmVzcG9u c2UKcmluZyBjYW4gYmUgb2Ygc21hbGxlciBzaXplLiBCdXQgdGhlbiB3ZSBydW4gaW4gdGhlIGNh Y2hlIGlzc3VlCkkgbWVudGlvbmVkIGVhcmxpZXIuCgo+IAo+ID4gTmF0dXJhbGx5IHRoaXMgbWVh bnMgd2UgbmVlZCB0byBuZWdvdGlhdGUgYSAnZmVhdHVyZS1yZXF1ZXN0LXNpemUnCj4gPiB3aGVy ZSB2MSBzYXlzIHRoYXQgdGhlIHJlcXVlc3QgaXMgb2YgNjQtYnl0ZXMgbGVuZ3RoLiB2MiBtaWdo dAo+ID4gYmUgMTI4Ynl0ZXMgb3Igd2hhdGV2ZXIgZWxzZSB3ZSB3b3VsZCBuZWVkIHRvIGZpdCB3 aXRoaW4gYSBjYWNoZWxpbmUKPiA+IGluIGZ1dHVyZSBDUFVzLiBXZSBjb3VsZCBwYWQgdGhlICdz dHJ1Y3QgcmVxdWVzdF92MScgd2l0aCA2NC1ieXRlcwo+ID4gaW4gY2FzZSB0aGUgY2FjaGVsaW5l IGlzIDEyOGJ5dGVzIGFuZCBvdXIgcmVxdWVzdCBpcyA2NC1ieXRlcy4KPiAKPiBJIHdvdWxkIGhh dmUgdG8gYmVuY2htYXJrIGlmIGhhdmluZyB0d28gcmVxdWVzdHMgb24gdGhlIHNhbWUgY2FjaGUg bGluZQo+IG9yIG9ubHkgYSBzaW5nbGUgb25lIGhhcyBhbnkga2luZCBvZiBpbXBhY3Qgb24gcGVy Zm9ybWFuY2UsIGFzIEkKPiB1bmRlcnN0YW5kIGl0IHRoZSBvbmx5IHByb2JsZW0gb2YgdGhpcyBh cHByb2FjaCBtaWdodCBoYXBwZW4gd2hlbgo+IGJsa2JhY2sgaXMgd3JpdGluZyBhIHJlcGx5IGFu ZCBibGtmcm9udCBpcyBhbHNvIHdyaXRpbmcgYSByZXF1ZXN0IGluIHRoZQo+IHNhbWUgY2FjaGUg bGluZSAod2hpY2ggd2lsbCBiZSBzb2x2ZWQgYnkgdXNpbmcgdHdvIGRpZmZlcmVudCByaW5ncywg b25lCj4gZm9yIHJlcGxpZXMgYW5kIG9uZSBmb3IgcmVxdWVzdCkuCgpSaWdodC4gVGhlIGlzc3Vl IHdpdGggc2hhcmluZyB0d28gcmVxdWVzdHMgb24gdGhlIHNhbWUgY2FjaGUtbGluZSBpcwphIGRp ZmZlcmVudCBiZWFzdC4KCj4gCj4gU28gSSB0aGluayBhIGNvbXByb21pc2Ugc29sdXRpb24gaXMg dG8gdXNlIDMyYnl0ZXMgcmVxdWVzdHMsIHRoYXQgd291bGQKPiBhbHdheXMgYmUgY2FjaGUgYWxp Z25lZCBhbmQgdG8gc29sdmUgdGhlIHBpbmctcG9uZyBwcm9ibGVtIGJldHdlZW4KPiBibGtmcm9u dC9ibGtiYWNrIHdyaXRpbmcgb24gdGhlIHNhbWUgY2FjaGUgbGluZSB0d28gcmluZ3Mgc2hvdWxk IGJlIHVzZWQuCgpGb3IgdGhhdCBwcm9ibGVtIG9mIHBpbmctcG9uZyB0aGF0IGlzIGNlcnRhaW5s eSB0aGUgY2FzZS4KCj4gCj4gPiAKPiA+Pgo+ID4+IEV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyBtb3Jl IHRoYW4gdHdvIHNlZ21lbnRzIHdpbGwgc3dpdGNoIHRvIHVzaW5nIHRoZQo+ID4+IG5ldyBpbmRp cmVjdCBvcGVyYXRpb24uIEFsc28sIHRvIG1ha2UgdXNlIG9mIHRoZSBleHRyYSBzcGFjZSBpbgo+ ID4+IGJsa2lmX3JlcXVlc3RfaW5kaXJlY3QgSSB3b3VsZCByZW1vdmUgdGhlIGV4dHJhIHNlZ21l bnRzIGFuZCBpbnN0ZWFkCj4gPj4gcGFzcyBtb3JlIGdyYW50IHJlZmVyZW5jZXMgdG8gZnJhbWVz IGNvbnRhaW5pbmcKPiA+PiBibGtpZl9yZXF1ZXN0X2luZGlyZWN0X2VudHJ5IGVudHJpZXMuCj4g PiAKPiA+IFJpZ2h0LiBUaGUgY29tcGxpY2F0aW9ucyBhcmlzZSB3aGVuIHdlIG5lZWQgdG8gc3Vw cG9ydCB0aGlzIG5ldyBmb3JtYXQKPiA+IGFuZCB0aGUgb2xkIGZvcm1hdCBhbmQgaGF2ZSB0byBz d2l0Y2ggb3ZlciB3aGVuIHdlIG1pZ3JhdGUgdG8gb2xkCj4gPiBiYWNrZW5kcy4KPiA+IAo+ID4+ Cj4gPj4gI2RlZmluZSBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QgMgo+ID4+ICNkZWZp bmUgQkxLSUZfTUFYX0lORElSRUNUX0dSRUZTX1BFUl9SRVFVRVNUIDQKPiA+Pgo+ID4+IHN0cnVj dCBibGtpZl9yZXF1ZXN0X3NlZ21lbnQgewo+ID4+ICAgICBncmFudF9yZWZfdCBncmVmOyAgICAg ICAgLyogcmVmZXJlbmNlIHRvIEkvTyBidWZmZXIgZnJhbWUgICAgICAgICovCj4gPj4gICAgIC8q IEBmaXJzdF9zZWN0OiBmaXJzdCBzZWN0b3IgaW4gZnJhbWUgdG8gdHJhbnNmZXIgKGluY2x1c2l2 ZSkuICAgKi8KPiA+PiAgICAgLyogQGxhc3Rfc2VjdDogbGFzdCBzZWN0b3IgaW4gZnJhbWUgdG8g dHJhbnNmZXIgKGluY2x1c2l2ZSkuICAgICAqLwo+ID4+ICAgICB1aW50OF90ICAgICBmaXJzdF9z ZWN0LCBsYXN0X3NlY3Q7Cj4gPj4gfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4gPj4K PiA+PiBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9pbmRpcmVjdF9lbnRyeSB7Cj4gPj4gICAgIGJsa2lm X3NlY3Rvcl90ICBzZWN0b3JfbnVtYmVyOwo+ID4+ICAgICBzdHJ1Y3QgICAgICAgICAgYmxraWZf cmVxdWVzdF9zZWdtZW50IHNlZzsKPiA+PiAgICAgdWludDhfdCAgICAgICAgIF9wYWRbMl07Cj4g Pj4gfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4gPj4KPiA+PiBzdHJ1Y3QgYmxraWZf cmVxdWVzdF9ydyB7Cj4gPj4gICAgIHVpbnQ4X3QgICAgICAgIG5yX3NlZ21lbnRzOyAgLyogbnVt YmVyIG9mIHNlZ21lbnRzICAgICAgICAgICAgICAgICAgICovCj4gPj4gICAgIGJsa2lmX3ZkZXZf dCAgIGhhbmRsZTsgICAgICAgLyogb25seSBmb3IgcmVhZC93cml0ZSByZXF1ZXN0cyAgICAgICAg ICovCj4gPj4gICAgIHVpbnQ2NF90ICAgICAgIGlkOyAgICAgICAgICAgLyogcHJpdmF0ZSBndWVz dCB2YWx1ZSwgZWNob2VkIGluIHJlc3AgICovCj4gPj4gICAgIGJsa2lmX3NlY3Rvcl90IHNlY3Rv cl9udW1iZXI7Lyogc3RhcnQgc2VjdG9yIGlkeCBvbiBkaXNrIChyL3cgb25seSkgICovCj4gPj4g ICAgIHN0cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnQgc2VnW0JMS0lGX01BWF9TRUdNRU5UU19Q RVJfUkVRVUVTVF07Cj4gPj4gfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4gPj4KPiA+ PiBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9pbmRpcmVjdCB7Cj4gPj4gICAgIHVpbnQ4X3QgICAgICAg IG9wOyAgICAgICAgICAgLyogQkxLSUZfT1BfKiAodXN1YWxseSBSRUFEIG9yIFdSSVRFICAgICov Cj4gPj4gICAgIHVpbnQxNl90ICAgICAgIG5yX2luZGlyZWN0OyAgLyogbnVtYmVyIG9mIGluZGly ZWN0IGVudHJpZXMgaW4gZ3JlZiBmcmFtZXMgKi8KPiA+PiAgICAgYmxraWZfdmRldl90ICAgaGFu ZGxlOyAgICAgICAvKiBvbmx5IGZvciByZWFkL3dyaXRlIHJlcXVlc3RzICAgICAgICAgKi8KPiA+ PiAgICAgdWludDY0X3QgICAgICAgaWQ7ICAgICAgICAgICAvKiBwcml2YXRlIGd1ZXN0IHZhbHVl LCBlY2hvZWQgaW4gcmVzcCAgKi8KPiA+PiAgICAgLyogcmVmZXJlbmNlIHRvIGluZGlyZWN0IGJ1 ZmZlciBmcmFtZSAqLwo+ID4+ICAgICBncmFudF9yZWZfdCAgICBncmVmW0JMS0lGX01BWF9JTkRJ UkVDVF9HUkVGU19QRVJfUkVRVUVTVF07Cj4gPj4gfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9f KSk7Cj4gPj4KPiA+PiBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9kaXNjYXJkIHsKPiA+PiAgICAgdWlu dDhfdCAgICAgICAgZmxhZzsgICAgICAgICAvKiBCTEtJRl9ESVNDQVJEX1NFQ1VSRSBvciB6ZXJv LiAgICAgICAgKi8KPiA+PiAjZGVmaW5lIEJMS0lGX0RJU0NBUkRfU0VDVVJFICgxPDwwKSAgLyog aWdub3JlZCBpZiBkaXNjYXJkLXNlY3VyZT0wICAgICAgICAgICovCj4gPj4gICAgIHVpbnQ2NF90 ICAgICAgIGlkOyAgICAgICAgICAgLyogcHJpdmF0ZSBndWVzdCB2YWx1ZSwgZWNob2VkIGluIHJl c3AgICovCj4gPj4gICAgIGJsa2lmX3NlY3Rvcl90IHNlY3Rvcl9udW1iZXI7Cj4gPj4gICAgIHVp bnQ2NF90ICAgICAgIG5yX3NlY3RvcnM7Cj4gPj4gfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9f KSk7Cj4gPj4KPiA+PiBzdHJ1Y3QgYmxraWZfcmVxdWVzdCB7Cj4gPj4gICAgIHVpbnQ4X3QgICAg ICAgIG9wZXJhdGlvbjsgICAgLyogQkxLSUZfT1BfPz8/ICAgICAgICAgICAgICAgICAgICAgICAg ICovCj4gPj4gICAgIHVuaW9uIHsKPiA+PiAgICAgICAgIHN0cnVjdCBibGtpZl9yZXF1ZXN0X3J3 IHJ3Owo+ID4+ICAgICAgICAgc3RydWN0IGJsa2lmX3JlcXVlc3RfaW5kaXJlY3QgaW5kaXJlY3Q7 Cj4gPj4gICAgICAgICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9kaXNjYXJkIGRpc2NhcmQ7Cj4gPj4g ICAgIH0gdTsKPiA+PiB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKPiA+Pgo+ID4+IEkn dmUgcmVtb3ZlZCBhbGwgdGhlIGV4dHJhIHBhZGRpbmdzLCBiZWNhdXNlIHRoaXMgcHJvdG9jb2wg aXMgbm8gbG9uZ2VyCj4gPj4gY29tcGF0aWJsZSB3aXRoIHRoZSBwcmV2aW91cyBvbmUgKHdlIG1v ZGlmeQo+ID4+IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCksIGFuZCBwYWNrZWQgdGhl IHN0cnVjdHVyZXMuIEknbQo+ID4+IHdvbmRlcmluZyBpZiB1c2luZyBfX2F0dHJpYnV0ZV9fIGlu IGEgcHVibGljIGhlYWRlciBpcyBhbGxvd2VkLCBzaW5jZQo+ID4+IHRoaXMgaXMgYSBHTlUgZXh0 ZW5zaW9uIChBRkFJSyBzdXBwb3J0ZWQgYnkgZ2NjIGFuZCBjbGFuZyBhdCBsZWFzdCkuCj4gPiAK PiA+IEkgZG9uJ3Qga25vdy4gQnV0IEkgdGhpbmsgd2UgY2FuIGJ5cGFzcyB0aGUgbmVlZCBmb3Ig aXQgaWYgd2UgY2FsY3VsYXRlCj4gPiB0aGUgc2l6ZSBvZiBlYWNoIGVudHJ5IHJpZ2h0IGFuZCBp bnNlcnQgcGFkZGluZyB3aGVuZXZlciBuZWNjZXNzYXJ5Lgo+IAo+IFllcywgSSB3b3VsZCBsaWtl IHRvIGF2b2lkIGhhdmluZyBkaWZmZXJlbnQgc2l6ZXMgZGVwZW5kaW5nIG9uIHRoZQo+IGFyY2hp dGVjdHVyZS4KCkdvb2QuCj4gCj4gPiAKPiA+Pgo+ID4+IFRoZSBtYWluIG1vdGl2YXRpb24gYmVo aW5kIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIHNpemUgb2YgdGhlCj4gPj4gcmVxdWVzdCBpcyBi ZWNhdXNlIEkndmUgcmVhbGl6ZWQgdGhhdCBpbiB5b3VyIHByb3Bvc2FsLCB5b3Ugd2hlcmUKPiA+ PiBhZGRpbmcgNCBleHRyYSBzZWdtZW50cyB0byB0aGUgaW5kaXJlY3QgcmVxdWVzdCwgYW5kIEkg d2FzIHdvbmRlcmluZwo+ID4+IGlmIEkgY291bGQgcGFjayBtb3JlIGdyYW50IGZyYW1lcyBjb250 YWluaW5nIGluZGlyZWN0IGVudHJpZXMgaW4gYQo+ID4+IHNpbmdsZSByZXF1ZXN0LiBCeSB1c2lu ZyB0aGUgb2xkIHNpemUgb2YgYmxrZl9yZXF1ZXN0IHdlIHdpbGwgYmUgYWJsZSB0bwo+ID4+IHNl bmQgdXAgdG8gOSBncmFudCBmcmFtZXMgZmlsbGVkIHdpdGggaW5kaXJlY3QgZW50cmllcywgd2hp Y2ggZ2l2ZXMgdXMKPiA+PiA0MDk2ICogMjU2ICogOSA9IDlNQiBvZiBvdXRzdGFuZGluZyBJTyBp biBlYWNoIHJlcXVlc3QuIEkgdGhpbmsgdGhhdAo+ID4+IHRoaXMgaXMgdG9vIGhpZ2gsIGFuZCB3 aWxsIGludHJvZHVjZSBhIGxvdCBvZiBsYXRlbmN5IHRvIHRoZSBwcm90b2NvbC4KPiA+PiBUaGF0 J3MgdGhlIG1haW4gcmVhc29uIEkndmUgZGVjaWRlZCB0byByZWR1Y2UgdGhlIHNpemUgb2YgYmxr aWZfcmVxdWVzdAo+ID4+IGluIG9yZGVyIHRvIGJlIGFibGUgdG8gZml0IG1vcmUgb2YgdGhlbSBp biBhIHJpbmcsIGluc3RlYWQgb2YgbWFraW5nCj4gPj4gZWFjaCBvZiB0aGUgcmVxdWVzdHMgYmln Z2VyLgo+ID4gCj4gPiBPSy4gVGhhdCBpcyBPSyBhcyBsb25nIGFzIHdlIG1ha2Ugc3VyZSB0byBf bm90XyBoYXZlIHR3byByZXF1ZXN0cwo+ID4gc3RyYWRkbGluZyB0aGUgY2FjaGUtbGluZS4gT3Ig bWF5YmUgdGhhdCBpcyBub3QgYSBwcm9ibGVtLgo+ID4gCj4gPiBCdXQgdGhlIG90aGVyIG5pY2Ug YmVuZWZpdCBvZiB5b3VyIGlkZWEgLSB3aGVyZSBpdCBpcyBvbmx5IDMyLWJ5dGVzCj4gPiAtIGlz IHRoYXQgd2UgaGF2ZSBub3cgZXh0cmEgMzItYnl0ZXMgd2hlcmUgd2UgY2FuIGluc2VydCBzdWNo Cj4gPiB0aGluZ3MgYXMgRElGL0RJWCBvciAib3RoZXIiIG5ldyBmZWF0dXJlcy4gQW5kIHRoYXQg d2F5IGhhdmUgdGhlCj4gPiByZXF1ZXN0IGJlIG9mIHNpemUgNjQgYnl0ZXMuCj4gCj4gU28geW91 IHByZWZlciB0byBrZWVwIHRoZSByaW5nIHNpemUgdG8gMzIsIGluc3RlYWQgb2YgaW5jcmVhc2lu ZyBpdCB0bwo+IDY0LCBhbmQgdXNlIHRoZSByZW1haW5pbmcgMzJieXRlcyBpbiB0aGUgcmVxdWVz dCB0byBzdG9yZSByZXF1ZXN0Cj4gcmVsYXRlZCBkYXRhPwoKQ29ycmVjdCAtIGFuZCBpbmNyZWFz ZSB0aGUgcmluZyBzaXplIHRvIHR3byBwYWdlcyBvciBtb3JlIHRvIGNvbXBlbnNhdGUKZm9yIHRo YXQuCj4gCj4gPiAKPiA+Pgo+ID4+IFVzaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gZWFjaCByZXF1 ZXN0IGhhcyBhIHNpemUgb2YgMzJieXRlcyAodG8KPiA+PiBwcmV2ZW50IGNhY2hlIHN0cmFkZGxl KSwgc28gd2UgY291bGQgZml0IDEyNiByZXF1ZXN0cyBpbiBhIHJpbmcsIGJ1dAo+ID4+IGR1ZSB0 byB0aGUgcm91bmRpbmcsIHdlIGVuZCB1cCB3aXRoIDY0LiBBbHNvIGVhY2ggcmVxdWVzdCBjYW4g Y29udGFpbgo+ID4+IDQgZ3JhbnQgcGFnZXMsIGVhY2ggb25lIGZpbGxlZCB3aXRoIDI1NiBibGtp Zl9yZXF1ZXN0X2luZGlyZWN0X2VudHJ5Lgo+ID4+IFRoZSBtYXRoIGZvciB0aGUgbWF4aW11bSBk YXRhIGluIGEgcmVxdWVzdCBpczogNDA5NiAqIDI1NiAqIDQgPSA0TUIsCj4gPj4gYW5kIGluIHRo ZSB3aG9sZSByaW5nIDQgKiA2NCA9IDI1Nk1CIHdvcnRoIG9mIG91dHN0YW5kaW5nIElPLgo+ID4+ Cj4gPiAKPiA+IFdoaWNoIGhhcyBhIG5pY2UgcG93ZXIgb2YgdHdvIHJpbmcgdG8gaXQuIChBaCB0 aGUgcHVucyEpCj4gPiAKPiA+IEkgbGlrZSB0aGUgaWRlYSBvZiBwdXR0aW5nIHRoZSByZXF1ZXN0 IG9uIGEgZGlldCAtIGJ1dCB0b28gbXVjaAo+ID4gY291bGQgY2F1c2UgdXMgdG8gbWlzcyB0aGUg b3Bwb3J0dW5pdHkgdG8gaW5zZXJ0IG90aGVyIGZsYWdzIG9uIGl0Lgo+ID4gSWYgSSByZWNhbGwg Y29ycmVjdGx5LCB0aGUgRElGL0RJWCBvbmx5IG5lZWQgOCBieXRlcyBvZiBkYXRhLgo+ID4gSWYg d2UgbWFrZSB0aGUgYXNzdW1wdGlvbiB0aGF0Ogo+ID4gICAgICAgICBJL08gcmVxdWVzdCA9IG9u ZSByaW5nIGVudHJ5Cj4gCj4gU28gd2Ugb25seSBuZWVkIHRvIHJlc2VydmUgOGJ5dGVzIGZvciBl YWNoIERJRi9JRFgsIGV2ZW4gaWYgdGhlIHJlcXVlc3QKPiBjb250YWlucyBhIHZhcmlhYmxlIG51 bWJlciBvZiBkYXRhPyAoSSBtZWFuLCBibG9jayByZXF1ZXN0cyBjYW4gYXQgYQo+IG1pbmltdW0g Y29udGFpbiA0MDk2Ynl0ZXMsIG9yIG11Y2ggbW9yZSkKCkkgbmVlZCB0byBkb3VibGUgY2hlY2sg d2l0aCBNYXJ0aW4gKENDLWVkIGhlcmUpLiBCdXQgbXkgcmVjb2xsZWN0aW9uCmlzIHRoYXQgaXQg aXMganVzdCBhdHRhY2hlZCB0aGUgdGhlICdiaW8nLiBTbyBpZiB0aGUgQklPIGlzIDRLIG9yIDFN QiAtCml0IHdvdWxkIG9ubHkgaGF2ZSBvbmUgRElGL0RJWCBkYXRhIHR5cGUuCgpIbW0sIGJ1dCB0 aGVuIHdlIG9wZXJhdGUgb24gdGhlICdzdHJ1Y3QgcmVxdWVzdCcgc28gdGhhdCBtaWdodCBub3QK YmUgdGhlIGNhc2UuLgo+IAo+ID4gYW5kIHRoZSAgIm9uZSByaW5nIGVudHJ5IiBjYW4gdXNlIHRo ZSB0aGUgJzQnIGdyYW50cyBpZiB3ZSBqdXN0IGhhdmUgYQo+ID4gMTZLQiBJL08gcmVxdWVzdCwg YnV0IGlmIGl0IGlzIG1vcmUgdGhhbiB0aGF0IC0gd2UgdXNlIHRoZSBpbmRpcmVjdCBwYWdlCj4g Cj4gV2VsbCwgb24gbXkgcHVycG9zZSBJJ3ZlIGxpbWl0ZWQgdGhlIG51bWJlciBvZiBzZWdtZW50 cyBvZiBhICJydyIKPiByZXF1ZXN0cyB0byAyLCBzbyBpdCdzIG9ubHkgOEssIGFueXRoaW5nIGJp Z2dlciBoYXMgdG8gdXNlIGluZGlyZWN0Cj4gZGVzY3JpcHRvcnMsIHdoaWNoIGNhbiBmaXQgNE0g b2YgZGF0YSAoYmVjYXVzZSBJJ20gcGFzc2luZyA0IGdyYW50Cj4gZnJhbWVzIGZ1bGwgb2YgImJs a2lmX3JlcXVlc3RfaW5kaXJlY3RfZW50cnkiIGVudHJpZXMpLgoKPG5vZHM+Cj4gCj4gPiBhbmQg Y2FuIHN0dWZmIDFNQiBvZiBkYXRhIGluIHRoZXJlLgo+ID4gVGhlIGV4dHJhIDMyLWJ5dGVzIG9m IHNwYWNlIGZvciBzdWNoIHRoaW5ncyBhcyAnRElGL0RJWCcuIFRoaXMgYWxzbwo+ID4gbWVhbnMg d2UgY291bGQgdW5pZnkgdGhlICdzdHJ1Y3QgcmVxdWVzdCcgd2l0aCB0aGUgJ2Rpc2NhcmQnIG9w ZXJhdGlvbgo+ID4gYW5kIGl0IGNvdWxkIHV0aWxpemUgdGhlIDMyLWJ5dGVzIG9mIGV4dHJhIHVu dXNlZCBwYXlsb2FkIGRhdGEuCj4gPiAKPiA+Pj4KPiA+Pj4KPiA+Pj4gVGhlIOKAmG9wZXJhdGlv buKAmSB3b3VsZCBiZSBCTEtJRl9PUF9JTkRJUkVDVC4gVGhlIHJlYWQvd3JpdGUvZGlzY2FyZCwK PiA+Pj4gZXRjIG9wZXJhdGlvbiB3b3VsZCBub3cgYmUgaW4gaW5kaXJlY3Qub3AuIFRoZSBpbmRp cmVjdC5ncmVmIHBvaW50cyB0bwo+ID4+PiBhIHBhZ2UgdGhhdCBpcyBmaWxsZWQgd2l0aDoKPiA+ Pj4KPiA+Pj4KPiA+Pj4gc3RydWN0IGJsa2lmX3JlcXVlc3RfaW5kaXJlY3RfZW50cnkgewo+ID4+ PiAgICAgICAgIGJsa2lmX3NlY3Rvcl90IHNlY3Rvcl9udW1iZXI7Cj4gPj4+ICAgICAgICAgc3Ry dWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCBzZWc7Cj4gPj4+IH0gX19hdHRyaWJ1dGVfXygoX19w YWNrZWRfXykpOwo+ID4+PiAvLzE2IGJ5dGVzLCBzbyB3ZSBjYW4gZml0IGluIGEgcGFnZSAyNTYg b2YgdGhlc2Ugc3RydWN0dXJlcy4KPiA+Pj4KPiA+Pj4KPiA+Pj4gVGhpcyBtZWFucyB0aGF0IHdp dGggdGhlIGV4aXN0aW5nIDM2IHNsb3RzIGluIHRoZSByaW5nIChzaW5nbGUgcGFnZSkKPiA+Pj4g d2UgY2FuIGNvdmVyOiAzMiBzbG90cyAqIGVhY2ggYmxraWZfcmVxdWVzdF9pbmRpcmVjdCBjb3Zl cnM6IDI1NiAqIDQwOTYKPiA+Pj4gfj0gMzJNLiBJZiB3ZSBkb27igJl0IHdhbnQgdG8gdXNlIGlu ZGlyZWN0IGRlc2NyaXB0b3Igd2UgY2FuIHN0aWxsIHVzZQo+ID4+PiB1cCB0byA0IHBhZ2VzIG9m IHRoZSByZXF1ZXN0IChhcyBpdCBoYXMgZW5vdWdoIHNwYWNlIHRvIGNvbnRhaW4gZm91cgo+ID4+ PiBzZWdtZW50cyBhbmQgdGhlIHN0cnVjdHVyZSB3aWxsIHN0aWxsIGJlIGNhY2hlLWFsaWduZWQp Lgo+ID4+Pgo+ID4+Pgo+ID4+Pgo+ID4+Pgo+ID4+PiBCKS4gQm90aCB0aGUgcHJvZHVjZXIgKHJl cV8qIGFuZCByc3BfKikgdmFsdWVzIGFyZSBpbiB0aGUgc2FtZQo+ID4+PiBjYWNoZS1saW5lLiBU aGlzIG1lYW5zIHRoYXQgd2UgZW5kIHVwIHdpdGggdGhlIHNhbWUgY2FjaGVsaW5lIGJlaW5nCj4g Pj4+IG1vZGlmaWVkIGJ5IHR3byBkaWZmZXJlbnQgZ3Vlc3RzLiBEZXBlbmRpbmcgb24gdGhlIGFy Y2hpdGVjdHVyZSBhbmQKPiA+Pj4gcGxhY2VtZW50IG9mIHRoZSBndWVzdCB0aGlzIGNvdWxkIGJl IGJhZCAtIGFzIGVhY2ggbG9naWNhbCBDUFUgd291bGQKPiA+Pj4gdHJ5IHRvIHdyaXRlIGFuZCBy ZWFkIGZyb20gdGhlIHNhbWUgY2FjaGUtbGluZS4gQSBtZWNoYW5pc20gd2hlcmUKPiA+Pj4gdGhl IHJlcV8qIGFuZCByc3BfIHZhbHVlcyBhcmUgc2VwYXJhdGVkIGFuZCBvbiBhIGRpZmZlcmVudCBj YWNoZSBsaW5lCj4gPj4+IGNvdWxkIGJlIHVzZWQuIFRoZSB2YWx1ZSBvZiB0aGUgY29ycmVjdCBj YWNoZS1saW5lIGFuZCBhbGlnbm1lbnQgY291bGQKPiA+Pj4gYmUgbmVnb3RpYXRlZCB2aWEgWGVu QnVzIC0gaW4gY2FzZSBmdXR1cmUgdGVjaG5vbG9naWVzIHN0YXJ0IHVzaW5nIDEyOAo+ID4+PiBi eXRlcyBmb3IgY2FjaGUgb3Igc3VjaC4gT3IgdGhlIHRoZSBwcm9kdWNlciBhbmQgY29uc3VtZXIg aW5kZXhlcyBhcmUgaW4KPiA+Pj4gc2VwYXJhdGUgcmluZ3MuIE1lYW5pbmcgd2UgaGF2ZSBhIOKA mHJlcXVlc3QgcmluZ+KAmSBhbmQgYSDigJhyZXNwb25zZQo+ID4+PiByaW5n4oCZIC0gYW5kIG9u bHkgdGhlIOKAmHJlcV9wcm9k4oCZLCDigJhyZXFfZXZlbnTigJkgYXJlIG1vZGlmaWVkIGluCj4g Pj4+IHRoZSDigJhyZXF1ZXN0IHJpbmfigJkuIFRoZSBvcHBvc2l0ZSAocmVzcF8qKSBhcmUgb25s eSBtb2RpZmllZCBpbiB0aGUKPiA+Pj4g4oCYcmVzcG9uc2UgcmluZ+KAmS4KPiA+Pgo+ID4+IFVz aW5nIGRpZmZlcmVudCByaW5ncyBmb3IgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBzb3VuZHMgbGlr ZSBhIGdvb2QgaWRlYSwKPiA+PiB0aGlzIHdpbGwgcmVkdWNlIHRoZSBudW1iZXIgb2YgdmFyaWFi bGVzIG9uIHRoZSByaW5nLCBsZWF2aW5nIG9ubHkKPiA+PiAicHJvZHVjZWQiIGFuZCAiZXZlbnQi ICh3ZSBubyBsb25nZXIgbmVlZCByc3BfIGFuZCByZXFfKS4KPiA+IAo+ID4gPG5vZHM+Cj4gPj4K PiA+PiBTaW5jZSB3ZSB3aWxsIG5vIGxvbmdlciBoYXZlIHR3byBkaWZmZXJlbnQgZG9tYWlucyB3 cml0aW5nIHRvIHRoZSBzYW1lCj4gPj4gY2FjaGUgbGluZSBJIGd1ZXNzIHRoaXMgd2lsbCBnZXQg cmlkIG9mIHRoZSBjYWNoZSBwaW5nLXBvbmcgcHJvYmxlbS4KPiA+IAo+ID4gPG5vZHM+IFRoYXQg aXMgbXkgdGhpbmtpbmcuCj4gPj4KPiA+PiBBbHNvIHdoaWxlIHRoZXJlIHdlIGNvdWxkIHRyeSB0 byB1c2UgYWxsIHRoZSBwYWdlLCBpbnN0ZWFkIG9mIHJvdW5kaW5nCj4gPj4gZG93biB0byB0aGUg Y2xvc2VyIHBvd2VyIG9mIHR3bywgdGhpcyB3aWxsIGFsbG93IHVzIHRvIGdvIGZyb20gNjQKPiA+ PiByZXF1ZXN0cyB0byAxMjYgKGlmIHVzaW5nIHRoZSBpbmRpcmVjdCBkZXNjcmlwdG9ycyBwcm9w b3NhbCBleHBsYWluZWQKPiA+PiBhYm92ZSkuCj4gPiAKPiA+IFJpZ2h0Lgo+ID4gTGV0cyBjYWxs IHRoaXMgJ2ZlYXR1cmUtc2VwZXJhdGUtcmVxLWFuZC1yc3AnID8KPiAKPiBZZXMsIGFuZCBibGtm cm9udCB3aWxsIGFsc28gbmVlZCB0byBwYXNzIHR3byBkaWZmZXJlbnQgZ3JhbnQgZnJhbWVzIGF0 Cj4gaW5pdCwgYmVjYXVzZSB3ZSBuZWVkIHRvIG1hcCB0d28gcmluZ3MuCgo8bm9kcz4KPiAKPiA+ IAo+ID4+Cj4gPj4+IEMpLiBTaW1pbGFyIHRvIEIpIHByb2JsZW0gYnV0IHdpdGggYSBiaWdnZXIg cGF5bG9hZC4gRWFjaAo+ID4+PiDigJhibGtpZl9zcmluZ19lbnRyeeKAmSBvY2N1cGllcyAxMTIg Ynl0ZXMgd2hpY2ggZG9lcyBub3QgbGVuZCBpdHNlbGYKPiA+Pj4gdG8gYSBuaWNlIGNhY2hlIGxp bmUgc2l6ZS4gSWYgdGhlIGluZGlyZWN0IGRlc2NyaXB0b3JzIGFyZSB0byBiZSB1c2VkCj4gPj4+ IGZvciBldmVyeXRoaW5nIHdlIGNvdWxkIOKAmHNsaW0tZG93buKAmSB0aGUgYmxraWZfcmVxdWVz dC9yZXNwb25zZSB0bwo+ID4+PiBiZSB1cC10byA2NCBieXRlcy4gVGhpcyBtZWFucyBtb2RpZnlp bmcgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUCj4gPj4+IHRvIDUgYXMgdGhhdCB3b3Vs ZCBzbGltIHRoZSBsYXJnZXN0IG9mIHRoZSBzdHJ1Y3R1cmVzIHRvIDY0LWJ5dGVzLgo+ID4+PiBO YXR1cmFsbHkgdGhpcyBtZWFucyBuZWdvdGlhdGluZyBhIG5ldyBzaXplIG9mIHRoZSBzdHJ1Y3R1 cmUgdmlhIFhlbkJ1cy4KPiA+IAo+ID4gSGVyZSBJIGFtIHVzaW5nIDUsIGFuZCBJIHRoaW5rIHlv dSB3ZXJlIHVzaW5nIDQgLSBhbmQgeW91IG1lbnRpb25lZCB5b3UKPiA+IGdvdCBpdCBkb3duIHRv IDMyLWJ5dGVzLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlICdzaXplb2YnIHRoZW4gdG8KPiA+ IHNlZSB3aGF0IGl0IHdvdWxkIGJlIGxpa2UuCj4gCj4gTm8sIEkgd2FzIGxpbWl0aW5nIGl0IHRv IDIgc2VnbWVudHMgaW4gdGhlICJydyIgcmVxdWVzdCwgdGhlIDQgY29tZXMKPiBiZWNhdXNlIEkn bSBwYXNzaW5nIDQgZ3JhbnQgZnJhbWVzIGluIHRoZSAiYmxraWZfcmVxdWVzdF9pbmRpcmVjdCIs Cj4gaW5zdGVhZCBvZiBqdXN0IG9uZSAoc2VlIGFib3ZlLCAiZ3JlZiIgaXMgbm93IGFuIGFycmF5 IGluIG15IHByb3Bvc2FsKS4KCjxub2RzPgo+IAo+ID4gCj4gPj4+Cj4gPj4+Cj4gPj4+IEQpLiBU aGUgZmlyc3QgcGljdHVyZSBzaG93cyB0aGUgcHJvYmxlbS4gV2Ugbm93IGFsaWduaW5nIGV2ZXJ5 dGhpbmcKPiA+Pj4gb24gdGhlIHdyb25nIGNhY2hlbGluZXMuIFdvcnN0IGluIOKFkyBvZiB0aGUg Y2FzZXMgd2Ugc3RyYWRkbGUKPiA+Pj4gdGhyZWUgY2FjaGUtbGluZXMuIFdlIGNvdWxkIG5lZ290 aWF0ZSBhIHByb3BlciBhbGlnbm1lbnQgZm9yIGVhY2gKPiA+Pj4gcmVxdWVzdC9yZXNwb25zZSBz dHJ1Y3R1cmUuCj4gPj4+Cj4gPj4+Cj4gPj4+IEUpLiBUaGUgbmV0d29yayBzdGFjayBoYXMgc2hv d2VkIHRoYXQgZ29pbmcgaW4gYSBwb2xsaW5nIG1vZGUgZG9lcyBpbXByb3ZlCj4gPj4+IHBlcmZv cm1hbmNlLiBUaGUgY3VycmVudCBtZWNoYW5pc20gb2Yga2lja2luZyB0aGUgZ3Vlc3QgYW5kIG9y IGJsb2NrCj4gPj4+IGJhY2tlbmQgaXMgbm90IGFsd2F5cyBjbGVhci4gIFtUT0RPOiBLb25yYWQg dG8gZXhwbGFpbiBpdCBpbiBkZXRhaWxzXQo+ID4gCj4gPiBPaCwgSSBuZXZlciBkaWQgZXhwbGFp biB0aGlzIC0gYnV0IEkgdGhpbmsgdGhlIHBhdGNoZXMgdGhhdCBEYW5pZWwgY2FtZQo+ID4gdXAg d2l0aCBhY3R1YWxseSBmaXggYSBwYXJ0IG9mIGl0LiBUaGV5IG1ha2UgdGhlIGtpY2stdGhlLW90 aGVyIGd1ZXN0Cj4gPiBvbmx5IGhhcHBlbiB3aGVuIHRoZSBiYWNrZW5kIGhhcyBwcm9jZXNzZWQg YWxsIG9mIHRoZSByZXF1ZXN0cyBhbmQKPiA+IGNhbm5vdCBmaW5kIGFueXRoaW5nIGVsc2UgdG8g ZG8uIFByZXZpb3VzbHkgaXQgd2FzIG1vcmUgb2YgJ2RvbmUgb25lCj4gPiByZXF1ZXN0LCBsZXRz IGtpY2sgdGhlIGJhY2tlbmQuJy4KPiAKPiBZZXMsIHRoYXQncyB3aGF0IEknbSBzZWVpbmcgaW4g dGhlIGN1cnJlbnQgY29kZS4KPiAKPiA+IEJ1dCBnb2luZyBmb3J3YXJkLCB0aGlzICdraWNrLXRo ZS1vdGhlci1ndWVzdCcgY291bGQgYmUgZnVydGhlciBtb2R1bGF0ZWQuCj4gPiBJZiB3ZSBoYXZl IGEgZnVsbCByaW5nIGFuZCB0aGUgZnJvbnRlbmQga2VlcHMgb24gYWRkaW5nIGVudHJpZXMgd2Ug KGJhY2tlbmQpCj4gPiBzaG91bGQgbmV2ZXIgZ2V0IGFuIGludGVycnVwdC4gQXMgb2YgbWF0dGVy IG9mIGZhY3QgdGhlIGZyb250ZW5kIHNob3VsZCBiZSBqdXN0Cj4gPiBwb2xsaW5nIGFsbCB0aGUg dGltZSBhbmQgcHJvY2VzcyB0aGVtIGFzIGZhc3QgYXMgcG9zc2libGUuCj4gCj4gWWVzLCB3ZSBj b3VsZCBzd2l0Y2ggdG8gcG9sbGluZyBpbiBib3RoIGVuZHMgYW5kIG9ubHkgImtpY2siIHdoZW4g dGhlCj4gcmluZyBpcyBmdWxsICh3aGljaCBzaG91bGQgbm90IGhhcHBlbiB1c3VhbGx5KSwgdGhp cyB3aWxsIHByb2JhYmx5Cj4gcmVkdWNlIENQVSB1dGlsaXphdGlvbiwgYnV0IEkgZG91YnQgaXQn cyBnb2luZyB0byBpbmNyZWFzZSB0aGUgdGhyb3VnaHB1dC4KCkl0IG1pZ2h0IG9uIHRoZSBmcm9u dGVuZCBhcyBpdCB3b24ndCBiZSBpbnRlcnJ1cHRlZCBzbyBvZnRlbi4gQnV0IHRoZW4Kd2l0aCBp bmRpcmVjdCByZXF1ZXN0cyB0aGF0IGlzIGdvaW5nIHRvIGxvd2VyIHRoZSBhbW91bnQgb2Yga2lj a3MgcGVyIEkvTwp3ZSB3aWxsIGRvIHRvby4gU291bmRzIGxpa2UgdGhpcyBpcyBzb21ldGhpbmcg dGhhdCBjYW4gYmUgZG9uZSBpbiB0aGUgZnV0dXJlCmF0IGEgbG93ZXIgcHJpb3JpdHkuCgo+IAo+ ID4gT3Igd2UgY291bGQgYWRkIHR3ZWFrcyBpbiB0aGUgYmFja2VuZCB0byBhZG9wdCBhbiAnYWRh cHRpdmUgaW50ZXJydXB0Cj4gPiBjb2VsZXNjaW5nJyBtZWNoYW5pc20uIFRoaXMgd2F5IHdlIG9u bHkga2ljayB0aGUgZnJvbnRlbmQgaWYgYSBjZXJ0YWluCj4gPiB0aHJlc2hvbGQgb2YgSS9PcyBo YXZlIGJlZW4gcHJvY2Vzc2VkIG9yIGlmIHdlIGFyZSBzbG93aW5nIGRvd24gb24gdGhlCj4gPiB0 aHJlc2hvbGQuIEFnYWluLCB0aGUgaWRlYSBpcyB0aGF0IC0gaWYgd2UgaGF2ZSB0aGUgcmluZ3Mg ZnVsbCB3ZSBzaG91bGQKPiA+IG5vdCBzZW5kICdraWNrcycgYXQgYWxsIGFuZCBqdXN0IGtlZXAg b24gcHJvY2Vzc2luZy4KPiA+IAo+ID4gTm90ZTogSSAqYmVsaWV2ZSogdGhhdCB0aGUgYmFja2Vu ZCBkb2VzIHRoaXMgLSBrZWVwcyBvbiBwcm9jZXNzaW5nIGFuZAo+ID4gd29uJ3Qga2ljayBpZiB0 aGUgcmluZyBpcyBmdWxsLiBCdXQgSSBhbSBub3QgMTAwJSBzdXJlIG9uIHRoZSBmcm9udGVuZCBz aWRlLgo+IAo+IENoYW5naW5nIHRoaXMgaXMgbm90IHJlYWxseSBkaWZmaWN1bHQgKGluIG15IG9w aW5pb24sIGJ1dCBJJ3ZlIG1pZ2h0IGJlCj4gd3JvbmcpLCBzbyBJIHRoaW5rIHdlIGNvdWxkIHRy eSBzZXZlcmFsIGFwcHJvYWNoZXMgYW5kIHNlZSB3aGljaCBvbmUKPiBnaXZlcyBiZXR0ZXIgcGVy Zm9ybWFuY2UgKG9yIHJlZHVjZXMgQ1BVIHV0aWxpemF0aW9uKS4KPiAKPiBBbnl3YXksIEkgd291 bGQgZm9jdXMgbm93IG9uIHRoZSBpbmRpcmVjdCBkZXNjcmlwdG9ycyBhbmQgc2VwYXJhdGUgdGhl Cj4gcmluZ3MsIGFuZCBsZWF2ZSB0aGlzIHdvcmsgZm9yIGFmdGVyd2FyZHMgKGJlY2F1c2Ugd2hh dCB3ZSBjb3VsZAo+IHByb2JhYmx5IHNlZSBub3cgbWlnaHQgbm90IGJlIHRydWUgb25jZSB0aGUg b3RoZXIgaW1wcm92ZW1lbnRzIGFyZSBkb25lKS4KCjxub2RzPgo+IAo+ID4+Pgo+ID4+Pgo+ID4+ PiBGKS4gVGhlIGN1cnJlbnQgYmxvY2sgcHJvdG9jb2wgZm9yIGJpZyBJL09zIHRoYXQgdGhlIGJh Y2tlbmQgZGV2aWNlcyBjYW4KPiA+Pj4gaGFuZGxlIGVuZHMgdXAgZG9pbmcgZXh0cmEgd29yayBi eSBzcGxpdHRpbmcgdGhlIEkvTyBpbiBzbWFsbGVyIGNodW5rcywKPiA+Pj4gYW5kIHRoZW4gcmVh c3NlbWJsaW5nIHRoZW0uIFdpdGggdGhlIHNvbHV0aW9ucyBvdXRsaW5lZCBpbiBBKSB0aGlzIGNh bgo+ID4+PiBiZSBmaXhlZC4gVGhpcyBpcyBlYXNpbHkgc2VlbiB3aXRoIDFNQiBJL09zLiBTaW5j ZSBlYWNoIHJlcXVlc3QgY2FuCj4gPj4+IG9ubHkgaGFuZGxlIDQ0a0IgdGhhdCBtZWFucyB3ZSBo YXZlIHRvIHNwbGl0IGEgMU1CIEkvTyBpbiAyNCByZXF1ZXN0cwo+ID4+PiAoMjMgKiA0MDk2ICog MTEgPSAxMDgxMzQ0KS4gVGhlbiB0aGUgYmFja2VuZCBlbmRzIHVwIHNlbmRpbmcgdGhlbSBpbgo+ ID4+PiBzZWN0b3Itc2l6ZXMtIHdoaWNoIHdpdGggY29udGVtcG9yYXJ5IGRldmljZXMgKHN1Y2gg YXMgU1NEKSBlbmRzIHVwIHdpdGgKPiA+Pj4gbW9yZSBwcm9jZXNzaW5nLiBUaGUgU1NEcyBhcmUg Y29tZm9ydGFibGUgaGFuZGxpbmcgMTI4a0Igb3IgaGlnaGVyIEkvT3MKPiA+Pj4gaW4gb25lIGdv Lgo+ID4+Pgo+ID4+Pgo+ID4+PiBHKS4gRElGL0RJWC4gVGhpcyBhIHByb3RvY29sIHRvIGNhcnJ5 IGV4dHJhIOKAmGNoZWNrc3Vt4oCZIGluZm9ybWF0aW9uCj4gPj4+IGZvciBlYWNoIEkvTy4gVGhl IEkvTyBjYW4gYmUgYSBzZWN0b3Igc2l6ZSwgcGFnZS1zaXplIG9yIGFuIEkvTyBzaXplCj4gPj4+ IChtb3N0IHBvcHVsYXIgYXJlIDFNQikuIFRoZSBESUYvRElYIG5lZWRzIDggYnl0ZXMgb2YgaW5m b3JtYXRpb24gZm9yCj4gPj4+IGVhY2ggSS9PLiBJdCB3b3VsZCBiZSB3b3J0aCBjb25zaWRlcmlu ZyBwdXR0aW5nL3Jlc2VydmluZyB0aGF0IGFtb3VudCBvZgo+ID4+PiBzcGFjZSBpbiBlYWNoIHJl cXVlc3QvcmVzcG9uc2UuIEFsc28gcHV0dGluZyBpbiBleHRyYSBmbGFncyBmb3IgZnV0dXJlCj4g Pj4+IGV4dGVuc2lvbnMgd291bGQgYmUgd29ydGggaXQgLSBob3dldmVyIHRoZSBhdXRob3IgaXMg bm90IGF3YXJlIG9mIGFueQo+ID4+PiByaWdodCBub3cuCj4gPj4+Cj4gPj4+Cj4gPj4+IEgpLiBT ZXBhcmF0ZSByZXNwb25zZS9yZXF1ZXN0LiBQb3RlbnRpYWxseSBldmVuIG11bHRpLXF1ZXVlIHBl ci1WQ1BVCj4gPj4+IHF1ZXVlcy4gQXMgdjIuNi4zNyBkZW1vbnN0cmF0ZWQsIHRoZSBpZGVhIG9m IFdSSVRFX0JBUlJJRVIgd2FzCj4gPj4+IGZsYXdlZC4gVGhlcmUgaXMgbm8gc2ltaWxhciBjb25j ZXB0IGluIHRoZSBzdG9yYWdlIHdvcmxkIHdlcmUgdGhlCj4gPj4+IG9wZXJhdGluZyBzeXN0ZW0g Y2FuIHB1dCBhIGZvb2QgZG93biBhbmQgc2F5OiDigJxldmVyeXRoaW5nIGJlZm9yZSB0aGlzCj4g Pj4+IGhhcyB0byBiZSBvbiB0aGUgZGlzay7igJ0gVGhlcmUgYXJlIGxpZ3RoZXIgdmVyc2lvbnMg b2YgdGhpcyAtIGNhbGxlZAo+ID4+PiDigJhGVUHigJkgYW5kIOKAmEZMVVNI4oCZLiBEZXBlbmRp bmcgb24gdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uCj4gPj4+IG9mIHRoZSBzdG9yYWdlIHRo ZXkgYXJlIGVpdGhlciBpZ25vcmVkIG9yIGRvIHRoZSByaWdodCB0aGluZy4gVGhlCj4gPj4+IGZp bGVzeXN0ZW1zIGRldGVybWluZSB0aGUgdmlhYmlsaXR5IG9mIHRoZXNlIGZsYWdzIGFuZCBjaGFu Z2Ugd3JpdGluZwo+ID4+PiB0YWN0aWNzIGRlcGVuZGluZyBvbiB0aGlzLiBGcm9tIGEgcHJvdG9j b2wgbGV2ZWwsIHRoaXMgbWVhbnMgdGhhdCB0aGUKPiA+Pj4gV1JJVEUvUkVBRC9TWU5DIHJlcXVl c3RzIGNhbiBiZSBpbnRlcm1peGVkIC0gdGhlIHN0b3JhZ2UgYnkgaXRzZWxmCj4gPj4+IGRldGVy bWluZXMgdGhlIG9yZGVyIG9mIHRoZSBvcGVyYXRpb24uIFRoZSBmaWxlc3lzdGVtIGlzIHRoZSBv bmUgdGhhdAo+ID4+PiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIFdSSVRFIHNob3VsZCBiZSB3aXRo IGEgRkxVU0ggdG8gcHJlc2VydmUgc29tZSBmb3JtCj4gPj4+IG9mIGF0b21pY2l0eS4gVGhpcyBt ZWFucyB3ZSBkbyBub3QgaGF2ZSB0byBwcmVzZXJ2ZSBhbiBvcmRlciBvZiBvcGVyYXRpb25zCj4g Pj4+IC0gc28gd2UgY2FuIGhhdmUgbXVsdGlwbGUgcXVldWVzIGZvciByZXF1ZXN0IGFuZCByZXNw b25zZXMuIFRoaXMgaGFzCj4gPj4+IHNob3cgaW4gdGhlIG5ldHdvcmsgd29ybGQgdG8gaW1wcm92 ZSBwZXJmb3JtYW5jZSBjb25zaWRlcmFibHkuCj4gPj4+Cj4gPj4+Cj4gPj4+IEkpLiBXYXN0YWdl IG9mIHJlc3BvbnNlL3JlcXVlc3Qgb24gdGhlIHNhbWUgcmluZy4gQ3VycmVudGx5IGVhY2ggcmVz cG9uc2UKPiA+Pj4gTVVTVCBvY2N1cHkgdGhlIHNhbWUgYW1vdW50IG9mIHNwYWNlIHRoYXQgdGhl IHJlcXVlc3Qgb2NjdXBpZXMgLSBhcyB0aGUKPiA+Pj4gcmluZyBjYW4gaGF2ZSBib3RoIHJlc3Bv bnNlcyBhbmQgcmVxdWVzdHMuIFNlcGFyYXRpbmcgdGhlIHJlcXVlc3QgYW5kCj4gPj4+IHJlc3Bv bnNlIHJpbmcgd291bGQgcmVtb3ZlIHRoZSB3YXN0YWdlLgo+ID4+Pgo+ID4+Pgo+ID4+PiBKKS4g MzItYml0IHZzIDY0LWJpdCAob3IgMTAyIGJ5dGVzIHZzIDExMiBieXRlcykuIFRoZSBzaXplIG9m IHRoZSByaW5nCj4gPj4+IGVudHJpZXMgaXMgZGlmZmVyZW50IGlmIHRoZSBndWVzdCBpcyBpbiAz Mi1iaXQgb3IgNjQtYml0IG1vZGUuIENsZWFuaW5nCj4gPj4+IHRoaXMgdXAgdG8gYmUgdGhlIHNh bWUgc2l6ZSB3b3VsZCBzYXZlIGNvbnNpZGVyYWJsZSBhY2NvdW50aW5nIHRoYXQgdGhlCj4gPj4+ IGhvc3QgaGFzIHRvIGRvIChleHRyYSBtZW1jcHkgZm9yIGVhY2ggcmVzcG9uc2UvcmVxdWVzdCku Cj4gPj4KPiA+PiBTbyBmb3J0aCBJIHRoaW5rIG1vc3Qgb2YgdGhlIHByb2JsZW1zIGNvdWxkIGJl IHNvbHZlZCBieSB1c2luZyBpbmRpcmVjdAo+ID4+IGRlc2NyaXB0b3JzLCBhbGlnbmluZyByZXF1 ZXN0cyB0byBhIGNhY2hlIHNlbnNpYmxlIHZhbHVlICh0byBwcmV2ZW50Cj4gPj4gc3RyYWRkbGlu ZykgYW5kIHVzaW5nIHNlcGFyYXRlIHJpbmdzIGZvciByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzLiBU aGlzCj4gPj4gd291bGQgYmUgbXkgcGxhbiBmb3Igc29sdmluZyB0aGlzIGlzc3VlczoKPiA+IAo+ ID4gVGhhdCB3b3VsZCB0YWtlIGNhcmUgb2YgdGhlIGJ1bGsgb2YgdGhlIGJpZyBpc3N1ZXMuCj4g PiAKPiA+Pgo+ID4+IDEuIEltcGxlbWVudCBMUlUgbWVjaGFuaXNtIGluIGJsa2JhY2sgZm9yIHRo ZSBwZXJzaXN0ZW50IGdyYW50cyBsaXN0LiBJZgo+ID4+IHdlIGFyZSBnb2luZyB0byBpbmNyZW1l bnQgdGhlIG51bWJlciBvZiBpbi1mbGlnaHQgSU8gd2UgbmVlZCB0byBiZSBhYmxlIHRvCj4gPj4g a2VlcCB0aGUgbGlzdCBvZiBwZXJzaXN0ZW50bHkgbWFwcGVkIGdyYW50cyB0byBzb21ldGhpbmcg c2Vuc2libGUsIGFuZAo+ID4+IHdlIGFyZSBubyBsb25nZXIgYWJsZSB0byBwZXJzaXN0ZW50bHkg bWFwIGFsbCB0aGUgZ3JhbnRzIHRoYXQgY291bGQgYmUKPiA+PiB1c2VkLiBJbiBteSBwcm9wb3Nh bCB0aGF0IHdvdWxkIGJlIDY0ICogNCBmb3IgZWFjaCBncmFudCBmcmFtZSB0aGF0Cj4gPiAKPiA+ IENhbiB5b3UgZXhwbGFpbiB0aGUgZm91bmRhdGlvbnMgYmVoaW5kIHRoZSAnNjQnIGFuZCAnNCc/ IEkgdGhpbmsgSSBrbm93Cj4gPiB0aGUgNCAoQkxLSUZfLi5TRUdNRU5UUykgYnV0IEkgYW0gbm90 IHN1cmUgYWJvdXQgJzY0Jy4KPiAKPiBUaGUgNCBjb21lcyBiZWNhdXNlIGluIG15IHByb3Bvc2Fs IEknbSBwYXNzaW5nIDQgaW5kaXJlY3QgZ3JhbnQgZnJhbWVzCj4gZmlsbGVkIHdpdGggYmxraWZf cmVxdWVzdF9zZWdtZW50IChzbyBncmVmIGluIGJsa2lmX3JlcXVlc3RfaW5kaXJlY3QgaXMKPiBu b3cgYW4gYXJyYXkpLgo+IAo+IFRoZSA2NCBjb21lcyBiZWNhdXNlIEkndmUgcmVkdWNlZCB0aGUg c2l6ZSBvZiBibGtpZl9yZXF1ZXN0IHRvIDMyYnl0ZXMsCj4gc28gbm93IHdlIGNhbiBmaXQgNjQg YmxraWZfcmVxdWVzdHMgaW4gYSByaW5nLgoKWW91IGNvdWxkIGZpdCBtb3JlIG9mIHRoZW0gd2l0 aCBhIDMyLWJ5dGVzIHJlcXVlc3QuIFlvdSBoYXZlIDY0IGJ5dGVzIGZvcgp0aGUgaGVhZGVyIGFu ZCB0aGVuIDEyNiAzMi1ieXRlIGNodW5rcyBvZiBzcGFjZSBmcmVlLgoKPiAKPiBQdXR0aW5nIGl0 IGFsbCB0b2dldGhlcjoKPiAKPiA0IChpbmRpcmVjdCBncmFudCBmcmFtZXMpICogMjU2IChlbnRy aWVzIGluIGVhY2ggaW5kaXJlY3QgZ3JhbnQgZnJhbWUpICoKPiA0MDk2IChQQUdFX1NJWkUpID0g NE0gSU8gaW4gYSBzaW5nbGUgcmVxdWVzdAo+IAo+IDY0ICgzMmJ5dGVzIGVudHJpZXMgaW4gYSBy aW5nKSAqIDRNIChtYXggSU8gaW4gZWFjaCBlbnRyeSkgPSAyNTZNIHdvcnRoCj4gb2YgSU8gaW4g YSA0MDk2Ynl0ZXMgcmluZy4KCnMvNjQvMTI2LyBJIGJlbGlldmU/Cgo+IAo+ID4+IGNvbnRhaW5z IGluZGlyZWN0IGVudHJpZXMsIHBsdXMgNjQgKiA0ICogMjU2LCBmb3IgYWxsIHRoZSBwb3NzaWJs ZQo+ID4+IGVudHJpZXMgaW4gdGhlIGluZGlyZWN0IGZyYW1lIDY0ICogNCArIDY0ICogNCAqIDI1 NiA9IDY1NzkyLgo+ID4gCj4gPiBUaGF0IHdvdWxkIGNvdmVyIH4yNTZNQiBvZiBkYXRhIHBlciBn dWVzdC4gV293Lgo+ID4+Cj4gPj4gMi4gSW1wbGVtZW50IGluZGlyZWN0IGRlc2NyaXB0b3JzLgo+ ID4+Cj4gPj4gMy4gSW1wbGVtZW50IG5ldyByaW5nIHByb3RvY29sLCB1c2luZyB0d28gc2VwYXJh dGUgcmluZ3MgZm9yIHJlcXVlc3RzCj4gPj4gYW5kIHJlcGxpZXMuCj4gPiAKPiA+IERvbid0IHdh bnQgdG8gbmVnb3RpYXRlIGVhY2ggb2YgdGhlc2UgcHJvcG9zYWwgYXMgYSBzZXBlcmF0ZSBmZWF0 dXJlPyBTbzoKPiA+ICAgICAgICAgc2VwZXJhdGUtcmVxLWFuZC1yc3AKPiA+ICAgICAgICAgc2xp bS12ZXJzaW9uLW9mLXJlcQo+ID4gICAgICAgICBpbmRpcmV0LWRlc2NyaXB0b3IKPiA+ICAgICAg ICAgbXVsdGktcGFnZS1yaW5nCj4gPiAgICAgICAgIGFsaWdtZW50LTY0LW9yLW90aGVyLXZhbHVl Cj4gCj4gWWVzLCBidXQgSSB3aWxsIHRyeSB0byBjb3VwbGUgdGhlbSBpbiBhIHdheSB0aGF0IG1h a2VzIHNlbnNlLCBmb3IKPiBleGFtcGxlIHJlZHVjaW5nIHRoZSBzaXplIG9mIGJsa2lmX3JlcXVl c3Qgd2l0aG91dCB1c2luZyBpbmRpcmVjdAo+IGRlc2NyaXB0b3JzIGRvZXNuJ3QgbWFrZSBtdWNo IHNlbnNlLCBzbyBJIHdvdWxkIGNvdXBsZQo+IGluZGlyZWN0LWRlc2NyaXB0b3Igd2l0aCBzbGlt LXZlcnNpb24tb2YtcmVxLCB0aGlzIHdpbGwgbGVhdmUgdXMgd2l0aAo+IHRoZSBmb2xsb3dpbmcg bmV3IGV4dGVuc2lvbnM6Cj4gCj4gaW5kaXJlY3QtZGVzY3JpcHRvcnMgKHdoaWNoIGluY2x1ZGVz IGEgc2xpbSB2ZXJzaW9uIG9mIGJsa2lmX3JlcXVlc3QpCj4gc2VwYXJhdGUtcmVxLWFuZC1yc3AK PiAKPiBUaGlzIHdpbGwgYmUgdGhlIHR3byBmaXJzdCBleHRlbnNpb25zIHdlIHNob3VsZCB0cnkg dG8gaW1wbGVtZW50IGZyb20gbXkKPiBQT1YsIGJlY2F1c2UgSSB0aGluayB0aGV5IGFyZSBnb2lu ZyB0byBkZWxpdmVyIHF1aXRlIGEgcGVyZm9ybWFuY2UgYm9vc3QuCgo8bm9kcz4KPiAKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWls aW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVu LWRldmVsCg==