From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH i-g-t] tools: Add intel_dp_compliance for DisplayPort 1.2 compliance automation Date: Thu, 19 May 2016 14:30:36 -0700 Message-ID: <20160519213036.GD12746@intel.com> References: <1463446240-19967-1-git-send-email-manasi.d.navare@intel.com> <20160519154043.GA18710@mcvlad-wk.rb.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id DBB606E2F6 for ; Thu, 19 May 2016 21:19:55 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20160519154043.GA18710@mcvlad-wk.rb.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhhbmtzIGZvciByZXZpZXdpbmcsIEkgaGF2ZSBhIGZldyBjb21tZW50cy9xdWVyaWVzIGFzIGJl bG93OgoKTWFuYXNpCgpPbiBUaHUsIE1heSAxOSwgMjAxNiBhdCAwNjo0MDo0NVBNICswMzAwLCBN YXJpdXMgVmxhZCB3cm90ZToKPiBPbiBNb24sIE1heSAxNiwgMjAxNiBhdCAwNTo1MDo0MFBNIC0w NzAwLCBNYW5hc2kgTmF2YXJlIHdyb3RlOgo+ID4gVGhpcyBpcyB0aGUgdXNlcnNwYWNlIGNvbXBv bmVudCBvZiB0aGUgRGlzcGxheXBvcnQgQ29tcGxpYW5jZQo+ID4gdGVzdGluZyBzb2Z0d2FyZSBy ZXF1aXJlZCBmb3IgY29tcGxpYW5jZSB0ZXN0aW5nIG9mIHRoZSBJOTE1Cj4gPiBEaXNwbGF5IFBv cnQgZHJpdmVyLiBUaGlzIG11c3QgYmUgcnVubmluZyBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkK PiA+IGNvbXBsZXRlIERpc3BsYXkgUG9ydCBjb21wbGlhbmNlIHRlc3RpbmcuIFRoaXMgYXBwIGFu ZCB0aGUga2VybmVsCj4gPiBjb2RlIHRoYXQgYWNjb21wYW5pZXMgaXQgaGFzIGJlZW4gd3JpdHRl biB0byBzYXRpZnkgdGhlIHJlcXVpcmVtZW50cwo+ID4gb2YgdGhlIERpc3BsYXlwb3J0IExpbmsg Q1RTIDEuMiByZXYxLjEgc3BlY2lmaWNhdGlvbiBmcm9tIFZFU0EuCj4gPiBOb3RlIHRoYXQgdGhp cyBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGVEUCBjb21wbGlhbmNlIHRlc3RpbmcuCj4g PiBUaGlzIHV0aWxpdHkgYWhzIGFuIGF1dG9tYXRpb24gc3VwcG9ydCBmb3IgdGhlIEVESUQgdGVz dHMgKDQuMi4yLjMKPiA+IC0gNC4yLjIuNikgYW5kIFZpZGVvIFBhdHRlcm4gZ2VuZXJhdGlvbiB0 ZXN0cyAoNDAwLjMuMy4xKSBmcm9tIENUUwo+ID4gc3BlY2lmaWNhdGlvbiAxLjIgUmV2IDEuMS4g Q3VycmVudGx5IHRoZSB2aWRlbyBwYXR0ZXJuIGF1dG9tYXRpb24KPiA+IGhhcyBiZWVuIGV4cGxp Y2l0bHkgZGlzYWJsZWQgdW50aWwgdGhlIGxpbmsgdHJhaW5pbmcgYXV0b21hdGlvbiBpcwo+ID4g ZnVsbHkgc3VwcG9ydGVkIGluIHRoZSBrZXJuZWwuCj4gPiAKPiA+IFRoZSBMaW51eCBEVVQgcnVu bmluZyB0aGlzIHV0aWxpdHkgbXVzdCBiZSBpbiB0ZXh0IChjb25zb2xlKSBtb2RlCj4gPiBhbmQg Y2Fubm90IGhhdmUgYW55IG90aGVyIGRpc3BsYXkgbWFuYWdlciBydW5uaW5nLiBTaW5jZSB0aGlz IHVzZXMKPiA+IHN5c2ZzIG5vZGVzIGZvciBrZXJuZWwgaW50ZXJhY3Rpb24sIHRoaXMgdXRpbGl0 eSBzaG91bGQgYmUgcnVuIGFzCj4gPiBSb290LiBPbmNlIHRoaXMgdXNlciBhcHBsaWNhdGlvbiBp cyB1cCBhbmQgcnVubmluZywgd2FpdGluZyBmb3IKPiA+IHRlc3QgcmVxdWVzdHMsIHRoZSB0ZXN0 IGFwcGxpYW5jZSBzb2Z0d2FyZSBvbiB0aGUgd2luZG93cyBob3N0Cj4gPiBjYW4gbm93IGJlIHVz ZWQgdG8gZXhlY3V0ZSB0aGUgY29tcGxpYW5jZSB0ZXN0cy4KPiA+IAo+ID4gVGhpcyBhcHAgaXMg YmFzZWQgb24gc29tZSBwcmlvciB3b3JrIGRvbmUgaW4gQXByaWwgMjAxNSAoYnkKPiA+IFRvZGQg UHJldml0ZSA8dHByZXZpdGVAZ21haWwuY29tPikKPiA+IAo+ID4gdjE6Cj4gPiAqIFJld29ya2Vk IGdlbV9tbWFwL3VubWFwIGxvZ2ljIHNvIHRoZXNlIGNhbGxzIGdvCj4gPiB0b2dldGhlciAoYnkg TWFyaXVzIFZsYWQpCj4gPiAqIENsZWFuZWQgdXAgdGhlIHNldHVwX2RybS9yZXN0b3JlL2Nsb3Nl IGNhbGxzIHNvIHRoYXQKPiA+IGl0IGhhcHBlbnMgYmVmb3JlIHRoZSB0ZXN0cywgYWZ0ZXIgZXZl cnkgdGVzdCBhbmQgYXQgZXhpdAo+ID4gKGJ5IE1hcml1cyBWbGFkKQo+ID4gCj4gPiBTaWduZWQt b2ZmLWJ5OiBNYXJpdXMgVmxhZCA8bWFyaXVzLmMudmxhZEBpbnRlbC5jb20+Cj4gPiBTaWduZWQt b2ZmLWJ5OiBUb2RkIFByZXZpdGUgPHRwcmV2aXRlQGdtYWlsLmNvbT4KPiA+IFNpZ25lZC1vZmYt Ynk6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiAtLS0KPiA+ ICB0b29scy9NYWtlZmlsZS5zb3VyY2VzICAgICAgfCAgICAxICsKPiA+ICB0b29scy9pbnRlbF9k cF9jb21wbGlhbmNlLmMgfCAxMDg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDEwOTAgaW5zZXJ0aW9ucygrKQo+ID4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9pbnRlbF9kcF9jb21wbGlhbmNlLmMKPiA+IAo+ID4gZGlm ZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMgYi90b29scy9NYWtlZmlsZS5zb3VyY2Vz Cj4gPiBpbmRleCA1ZDU5NThkLi4zMDU0ODU2IDEwMDY0NAo+ID4gLS0tIGEvdG9vbHMvTWFrZWZp bGUuc291cmNlcwo+ID4gKysrIGIvdG9vbHMvTWFrZWZpbGUuc291cmNlcwo+ID4gQEAgLTEzLDYg KzEzLDcgQEAgYmluX1BST0dSQU1TID0gCQkJCVwKPiA+ICAJaW50ZWxfYmlvc19yZWFkZXIgCQlc Cj4gPiAgCWludGVsX2Rpc3BsYXlfY3JjCQlcCj4gPiAgCWludGVsX2Rpc3BsYXlfcG9sbGVyCQlc Cj4gPiArCWludGVsX2RwX2NvbXBsaWFuY2UJCVwKPiA+ICAJaW50ZWxfZHVtcF9kZWNvZGUgCQlc Cj4gPiAgCWludGVsX2Vycm9yX2RlY29kZSAJCVwKPiA+ICAJaW50ZWxfZm9yY2V3YWtlZAkJXAo+ ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2UuYyBiL3Rvb2xzL2ludGVs X2RwX2NvbXBsaWFuY2UuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAw MDAuLjMxOTk2YmEKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL3Rvb2xzL2ludGVsX2RwX2Nv bXBsaWFuY2UuYwo+ID4gQEAgLTAsMCArMSwxMDg5IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmln aHQgPyAyMDE0LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCj4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiA+ICsgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u Cj4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gPiArICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiA+ICsgKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCj4gPiArICogU29mdHdhcmUuCj4gPiArICoKPiA+ICsgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT UyBPUgo+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ID4g KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiA+ICsgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCj4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gKyAqCj4gPiArICog RGlzcGxheXBvcnQgQ29tcGxpYW5jZSBUZXN0aW5nIEFwcGxpY2F0aW9uCj4gPiArICoKPiA+ICsg KiBUaGlzIGlzIHRoZSB1c2Vyc3BhY2UgY29tcG9uZW50IG9mIHRoZSBEaXNwbGF5cG9ydCBDb21w bGlhbmNlIHRlc3RpbmcKPiA+ICsgKiBzb2Z0d2FyZSByZXF1aXJlZCBmb3IgY29tcGxpYW5jZSB0 ZXN0aW5nIG9mIHRoZSBJOTE1IERpc3BsYXkgUG9ydCBkcml2ZXIuCj4gPiArICogVGhpcyBtdXN0 IGJlIHJ1bm5pbmcgaW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIERpc3BsYXkgUG9y dAo+ID4gKyAqIGNvbXBsaWFuY2UgdGVzdGluZy4gVGhpcyBhcHAgYW5kIHRoZSBrZXJuZWwgY29k ZSB0aGF0IGFjY29tcGFuaWVzIGl0IGhhcyBiZWVuCj4gPiArICogd3JpdHRlbiB0byBzYXRpZnkg dGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgRGlzcGxheXBvcnQgTGluayBDVFMgMS4yIHJldjEuMQo+ ID4gKyAqIHNwZWNpZmljYXRpb24gZnJvbSBWRVNBLiBOb3RlIHRoYXQgdGhpcyBhcHBsaWNhdGlv biBkb2VzIG5vdCBzdXBwb3J0IGVEUAo+ID4gKyAqIGNvbXBsaWFuY2UgdGVzdGluZy4KPiA+ICsg Kgo+ID4gKyAqIENvbXBsaWFuY2UgVGVzdGluZyByZXF1aXJlcyBzZXZlcmFsIGNvbXBvbmVudHM6 Cj4gPiArICogICAtIEEga2VybmVsIGJ1aWxkIHRoYXQgY29udGFpbnMgdGhlIHBhdGNoIHNldCBm b3IgRFAgY29tcGxpYW5jZSBzdXBwb3J0Cj4gPiArICogICAgIE1ha2Ugc3VyZSBpdCBoYXMgdGhl IEVESUQgY29tcGxpYW5jZSBhdXRvbWF0aW9uIHBhdGNoCj4gPiArICogICAtIEEgRGlzcGxheXBv cnQgQ29tcGxpYW5jZSBUZXN0aW5nIGFwcGxpYW5jZSBzdWNoIGFzIFVuaWdyYWYtRFBSMTIwCj4g PiArICogICAtIFRoaXMgdXNlciBhcHBsaWNhdGlvbgo+ID4gKyAqICAgLSBBIHdpbmRvd3MgaG9z dCBtYWNoaW5lIHRvIHJ1biB0aGUgRFBSIHRlc3Qgc29mdHdhcmUKPiA+ICsgKiAgIC0gUm9vdCBh Y2Nlc3Mgb24gdGhlIERVVCBkdWUgdG8gdGhlIHVzZSBvZiBzeXNmcyB1dGlsaXR5Cj4gPiArICoK PiA+ICsgKiBUZXN0IFNldHVwOgo+ID4gKyAqIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRo YXQgdGhlIHdpbmRvd3MgaG9zdCwgdGVzdCBhcHBsaWFuY2UgYW5kIERVVAo+ID4gKyAqIGJlIGZy ZXNobHkgcmVzdGFydGVkIGJlZm9yZSBhbnkgdGVzdGluZyBiZWdpbnMgdG8gZW5zdXJlIHRoYXQg YW55IHByZXZpb3VzCj4gPiArICogY29uZmlndXJhdGlvbnMgYW5kIHNldHRpbmdzIHdpbGwgbm90 IGludGVyZmVyZSB3aXRoIHRlc3QgcHJvY2Vzcy4gUmVmZXIgdG8KPiA+ICsgKiB0aGUgdGVzdCBh cHBsaWFuY2UgZG9jdW1lbnRhdGlvbiBmb3Igc2V0dXAsIHNvZnR3YXJlIGluc3RhbGxhdGlvbiBh bmQKPiA+ICsgKiBvcGVyYXRpb24gc3BlY2lmaWMgdG8gdGhhdCBkZXZpY2UuCj4gPiArICoKPiA+ ICsgKiBUaGUgTGludXggRFVUIG11c3QgYmUgaW4gdGV4dCAoY29uc29sZSkgbW9kZSBhbmQgY2Fu bm90IGhhdmUgYW55IG90aGVyCj4gPiArICogZGlzcGxheSBtYW5hZ2VyIHJ1bm5pbmcuIFlvdSBt dXN0IGJlIGxvZ2dlZCBpbiBhcyByb290IHRvIHJ1biB0aGlzIHVzZXIgYXBwLgo+ID4gKyAqIE9u Y2UgdGhlIHVzZXIgYXBwbGljYXRpb24gaXMgdXAgYW5kIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIHRl c3QgcmVxdWVzdHMsIHRoZQo+ID4gKyAqIHNvZnR3YXJlIG9uIHRoZSB3aW5kb3dzIGhvc3QgY2Fu IG5vdyBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhlIGNvbXBsaWFuY2UgdGVzdHMuCj4gPiArICoKPiA+ ICsgKiBUaGlzIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBzdXBwb3J0cyBmb2xsb3dpbmcgdGVzdHMg ZnJvbSB0aGUgRFAgQ1RTIFNwZWMKPiA+ICsgKiBSZXYgMS4xOgo+ID4gKyAqICAgLSBFRElEIFRl c3RzOiBTdXBwb3J0cyBFRElEIHJlYWQgKDQuMi4yLjMpLEVESUQgUmVhZCBmYWlsdXJlIGFuZCBj b3JydXB0aW9uCj4gPiArICogICAgIGRldGVjdGlvbiB0ZXN0cyAoNC4yLjIuNCwgNC4yLjIuNSwg NC4yLjIuNikKPiA+ICsgKiAgIC0gVmlkZW8gUGF0dGVybiBnZW5lcmF0aW9uIHRlc3RzOiBUaGlz IHN1cHBvcnRzIG9ubHkgdGhlIDI0IGFuZCAxOGJwcCBjb2xvcgo+ID4gKyAqICAgICByYW1wIHRl c3QgcGF0dGVybiAoNDAwLjMuMy4xKS4KPiA+ICsgKgo+ID4gKyAqIENvbm5lY3Rpb25zIChyZXF1 aXJlZCk6Cj4gPiArICogICAtIFRlc3QgQXBwbGlhbmNlIGNvbm5lY3RlZCB0byB0aGUgZXh0ZXJu YWwgRGlzcGxheXBvcnQgY29ubmVjdG9yIG9uIHRoZSBEVVQKPiA+ICsgKiAgIC0gVGVzdCBBcHBs aWFuY2UgTW9uaXRvciBPdXQgY29ubmVjdGVkIHRvIERpc3BsYXlwb3J0IGNvbm5lY3RvciBvbiB0 aGUKPiA+ICsgKiBtb25pdG9yCj4gPiArICogICAtIFRlc3QgYXBwbGlhbmNlIGNvbm5lY3RlZCB0 byB0aGUgV2luZG93cyBIb3N0IHZpYSBVU0IKPiA+ICsgKgo+ID4gKyAqIERlYnVnZnMgRmlsZXM6 Cj4gPiArICogVGhlIGZpbGUgcm9vdCBmb3IgYWxsICB0aGUgZGVidWdmcyBmaWxlOgo+ID4gKyAq IC9zeXMva2VybmVsL2RlYnVnL2RyaS8wLwo+ID4gKyAqCj4gPiArICogVGhlIHNwZWNpZmljIGZp bGVzIGFyZSBhcyBmb2xsb3dzOgo+ID4gKyAqCj4gPiArICogaTkxNV9kcF90ZXN0X2FjdGl2ZQo+ ID4gKyAqIEEgc2ltcGxlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgY29tcGxp YW5jZSB0ZXN0aW5nIGlzIGN1cnJlbnRseQo+ID4gKyAqIGFjdGl2ZSBpbiB0aGUga2VybmVsLiBU aGlzIGZsYWcgaXMgcG9sbGVkIGJ5IHVzZXJzcGFjZSBhbmQgb25jZSBzZXQsIGludm9rZXMKPiA+ ICsgKiB0aGUgdGVzdCBoYW5kbGVyIGluIHRoZSB1c2VyIGFwcC4gVGhpcyBmbGFnIGlzIHNldCBi eSB0aGUgdGVzdCBoYW5kbGVyIGluIHRoZQo+ID4gKyAqIGtlcm5lbCBhZnRlciByZWFkaW5nIHRo ZSByZWdpc3RlcnMgcmVxdWVzdGVkIGJ5IHRoZSB0ZXN0IGFwcGxpYW5jZS4KPiA+ICsgKgo+ID4g KyAqIGk5MTVfZHBfdGVzdF9kYXRhCj4gPiArICogVGVzdCBkYXRhIGlzIHVzZWQgYnkgdGhlIGtl cm5lbCB0byBwYXNzIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXIgYXBwLiBFZzogSW4KPiA+ICsgKiBj YXNlIG9mIEVESUQgdGVzdHMsIHRoZSBkYXRhIHRoYXQgaXMgZGVsaXZlcmVkIHRvIHRoZSB1c2Vy c3BhY2UgaXMgdGhlIHZpZGVvCj4gPiArICogbW9kZSB0byBiZSBzZXQgZm9yIHRoZSB0ZXN0Lgo+ ID4gKyAqIEluIGNhc2Ugb2YgdmlkZW8gcGF0dGVybiB0ZXN0LCB0aGUgZGF0YSB0aGF0IGlzIGRl bGl2ZXJlZCB0byB0aGUgdXNlcnNwYWNlIGlzCj4gPiArICogdGhlIHdpZHRoIGFuZCBoZWlnaHQg b2YgdGhlIHRlc3QgcGF0dGVybiBhbmQgdGhlIGJpdHMgcGVyIGNvbG9yIHZhbHVlLgo+ID4gKyAq Cj4gPiArICogaTkxNV9kcF90ZXN0X3R5cGUKPiA+ICsgKiBUaGUgdGVzdCB0eXBlIHZhcmlhYmxl IGluc3RydWN0cyB0aGUgdXNlciBhcHAgYXMgdG8gd2hhdCB0aGUgcmVxdWVzdGVkIHRlc3QKPiA+ ICsgKiB3YXMgZnJvbSB0aGUgc2luayBkZXZpY2UuIFRoZXNlIHZhbHVlcyBkZWZpbmVkIGF0IHRo ZSB0b3Agb2YgdGhlIGFwcGxpY2F0aW9uJ3MKPiA+ICsgKiBtYWluIGltcGxlbWVudGF0aW9uIGZp bGUgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgdmFsdWVzIGRlZmluZWQgaW4gdGhlCj4g PiArICoga2VybmVsJ3MgZHJtX2RwX2hlbHBlci5oIGZpbGUuCj4gPiArICogVGhpcyBhcHAgaXMg YmFzZWQgb24gc29tZSBwcmlvciB3b3JrIHN1Ym1pdHRlZCBpbiBBcHJpbCAyMDE1IGJ5IFRvZGQg UHJldml0ZQo+ID4gKyAqICg8dHByZXZpdGVAZ21haWwuY29tPikKPiA+ICsgKgo+ID4gKyAqIEF1 dGhvcnM6Cj4gPiArICogICAgVG9kZCBQcmV2aXRlIDx0cHJldml0ZUBnbWFpbC5jb20+Cj4gPiAr ICogICAgTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGludGVsLmNvbT4KPiA+ICsgKgo+ ID4gKyAqIEVsZW1lbnRzIG9mIHRoZSBtb2Rlc2V0IGNvZGUgYWRhcHRlZCBmcm9tIERhdmlkIEhl cnJtYW5uJ3MKPiA+ICsgKiBEUk0gbW9kZXNldCBleGFtcGxlCj4gPiArICoKPiA+ICsqLwo+ID4g KyNpbmNsdWRlICJpZ3QuaCIKPiA+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiA+ICsjaW5jbHVkZSA8 c3RkbGliLmg+Cj4gPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ID4gKyNpbmNsdWRlIDxzdHJpbmcu aD4KPiA+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiA+ICsjaW5jbHVkZSA8bGltaXRzLmg+Cj4gPiAr I2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiA+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiA+ICsjaW5jbHVk ZSA8c3RyaW5nLmg+Cj4gPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gPiArI2luY2x1ZGUgPG1hdGgu aD4KPiA+ICsjaW5jbHVkZSAiZHJtX2ZvdXJjYy5oIgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxzeXMv c2VsZWN0Lmg+Cj4gPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiA+ICsjaW5jbHVkZSA8YXNzZXJ0 Lmg+Cj4gPiArI2luY2x1ZGUgPHhmODZkcm0uaD4KPiA+ICsjaW5jbHVkZSA8eGY4NmRybU1vZGUu aD4KPiA+ICsjaW5jbHVkZSA8aTkxNV9kcm0uaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8c3lzL3N0 YXQuaD4KPiA+ICsjaW5jbHVkZSA8c2lnbmFsLmg+Cj4gPiArI2luY2x1ZGUgPHRlcm1pb3MuaD4K PiA+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiA+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiA+ICsjaW5j bHVkZSA8cG9sbC5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgo+ID4gKyNpbmNs dWRlIDx0aW1lLmg+Cj4gPiArCj4gPiArI2RlZmluZSBJOTE1X0RSSVZFUl9OT0RFCQkiL2Rldi9k cmkvY2FyZDAiCj4gPiArI2RlZmluZSBJTlRFTF9EUF9URVNUX1RZUEVfRklMRQkJImk5MTVfZHBf dGVzdF90eXBlIgo+ID4gKyNkZWZpbmUgSU5URUxfRFBfVEVTVF9BQ1RJVkVfRklMRQkiaTkxNV9k cF90ZXN0X2FjdGl2ZSIKPiA+ICsjZGVmaW5lIElOVEVMX0RQX1RFU1RfREFUQV9GSUxFCQkiaTkx NV9kcF90ZXN0X2RhdGEiCj4gPiArCj4gPiArLyogRFJNIGRlZmluaXRpb25zIC0gbXVzdCBiZSBr ZXB0IGluIHN5bmMgd2l0aCB0aGUgRFJNIGhlYWRlciAqLwo+ID4gKyNkZWZpbmUgRFBfVEVTVF9M SU5LX1RSQUlOSU5HCQkoMSA8PCAwKQo+ID4gKyNkZWZpbmUgRFBfVEVTVF9MSU5LX1ZJREVPX1BB VFRFUk4JKDEgPDwgMSkKPiA+ICsjZGVmaW5lIERQX1RFU1RfTElOS19FRElEX1JFQUQJCSgxIDw8 IDIpCj4gPiArI2RlZmluZSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTgkoMSA8PCAzKSAv KiBEUENEID49IDEuMSAqLwo+ID4gKwo+ID4gKyNkZWZpbmUgRFBfQ09NUExJQU5DRV9URVNUX1RZ UEVfTUFTSwkoRFBfVEVTVF9MSU5LX1RSQUlOSU5HICAgICAgfAlcCj4gPiArCQkJCQkgRFBfVEVT VF9MSU5LX1ZJREVPX1BBVFRFUk4gfAlcCj4gPiArCQkJCQkgRFBfVEVTVF9MSU5LX0VESURfUkVB RCAgICAgfAlcCj4gPiArCQkJCQkgRFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk4pCj4gPiAr Cj4gPiArLyogTk9URTogVGhlc2UgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgZGVmaW5p dGlvbnMgaW4gaW50ZWxfZHAuYyAqLwo+ID4gKyNkZWZpbmUgSU5URUxfRFBfRURJRF9TSElGVF9N QVNLCTAKPiA+ICsjZGVmaW5lIElOVEVMX0RQX0VESURfT0sJCSgwIDw8IElOVEVMX0RQX0VESURf U0hJRlRfTUFTSykKPiA+ICsjZGVmaW5lIElOVEVMX0RQX0VESURfQ09SUlVQVAkJKDEgPDwgSU5U RUxfRFBfRURJRF9TSElGVF9NQVNLKQo+ID4gKyNkZWZpbmUgSU5URUxfRFBfUkVTT0xVVElPTl9T SElGVF9NQVNLCTAKPiA+ICsjZGVmaW5lIElOVEVMX0RQX1JFU09MVVRJT05fUFJFRkVSUkVECSgx IDw8IElOVEVMX0RQX1JFU09MVVRJT05fU0hJRlRfTUFTSykKPiA+ICsjZGVmaW5lIElOVEVMX0RQ X1JFU09MVVRJT05fU1RBTkRBUkQJKDIgPDwgSU5URUxfRFBfUkVTT0xVVElPTl9TSElGVF9NQVNL KQo+ID4gKyNkZWZpbmUgSU5URUxfRFBfUkVTT0xVVElPTl9GQUlMU0FGRQkoMyA8PCBJTlRFTF9E UF9SRVNPTFVUSU9OX1NISUZUX01BU0spCj4gPiArI2RlZmluZSBEUF9DT01QTElBTkNFX1ZJREVP X01PREVfTUFTSwkoSU5URUxfRFBfUkVTT0xVVElPTl9QUkVGRVJSRUQJfFwKPiA+ICsJCQkJCSBJ TlRFTF9EUF9SRVNPTFVUSU9OX1NUQU5EQVJECXxcCj4gPiArCQkJCQkgSU5URUxfRFBfUkVTT0xV VElPTl9GQUlMU0FGRSkKPiA+ICsKPiA+ICsKPiA+ICsvKiBHbG9iYWwgVmFyaWFibGVzICovCj4g PiArZW51bSB7Cj4gPiArCUlOVEVMX01PREVfSU5WQUxJRCA9IC0xLAo+ID4gKwlJTlRFTF9NT0RF X05PTkUgPSAwLAo+ID4gKwlJTlRFTF9NT0RFX1BSRUZFUlJFRCwKPiA+ICsJSU5URUxfTU9ERV9T VEFOREFSRCwKPiA+ICsJSU5URUxfTU9ERV9GQUlMU0FGRSwKPiA+ICsJSU5URUxfTU9ERV9WSURF T19QQVRURVJOX1RFU1QKPiA+ICt9IGludGVsX2Rpc3BsYXlfbW9kZTsKPiA+ICsKPiA+ICtzdHJ1 Y3QgdGVzdF92aWRlb19wYXR0ZXJuIHsKPiA+ICsJdWludDE2X3QgaGRpc3BsYXk7Cj4gPiArCXVp bnQxNl90IHZkaXNwbGF5Owo+ID4gKwl1aW50OF90IGJpdGRlcHRoOwo+ID4gKwl1aW50MzJfdCBm YjsKPiA+ICsJdWludDMyX3Qgc2l6ZTsKPiA+ICsJc3RydWN0IGlndF9mYiBmYl9wYXR0ZXJuOwo+ ID4gKwlkcm1Nb2RlTW9kZUluZm8gbW9kZTsKPiA+ICsJdWludDMyX3QgKnBpeG1hcDsKPiA+ICt9 Owo+ID4gKwo+ID4gKwo+ID4gK3N0cnVjdCBkcF9jb25uZWN0b3Igewo+ID4gKwlkcm1Nb2RlTW9k ZUluZm8gbW9kZV9zdGFuZGFyZCwgbW9kZV9wcmVmZXJyZWQsIG1vZGVfZmFpbHNhZmU7Cj4gPiAr CWRybU1vZGVFbmNvZGVyICplbmNvZGVyOwo+ID4gKwkvKiBTdGFuZGFyZCBhbmQgcHJlZmVycmVk IGZyYW1lIGJ1ZmZlciovCj4gPiArCXVpbnQzMl90IGZiLCBmYl93aWR0aCwgZmJfaGVpZ2h0LCBm Yl9zaXplOwo+ID4gKwl1aW50OF90ICpwaXhtYXA7Cj4gPiArCXN0cnVjdCBpZ3RfZmIgZmJfdmlk ZW9fcGF0dGVybjsKPiA+ICsJLyogRmFpbHNhZmUgZnJhbWVidWZmZXIgLSBub3RlIHRoaXMgaXMg YSAxNi1iaXQgYnVmZmVyICovCj4gPiArCXVpbnQzMl90IGZhaWxzYWZlX2ZiLCBmYWlsc2FmZV93 aWR0aCwgZmFpbHNhZmVfaGVpZ2h0Owo+ID4gKwl1aW50MzJfdCBmYWlsc2FmZV9zaXplOwo+ID4g Kwl1aW50OF90ICpmYWlsc2FmZV9waXhtYXA7Cj4gPiArCXN0cnVjdCBpZ3RfZmIgZmJfZmFpbHNh ZmVfcGF0dGVybjsKPiA+ICsJc3RydWN0IHRlc3RfdmlkZW9fcGF0dGVybiB0ZXN0X3BhdHRlcm47 Cj4gPiArCXVpbnQzMl90IGNvbm47Cj4gPiArCXVpbnQzMl90IGNydGM7Cj4gPiArCXN0cnVjdCBk cF9jb25uZWN0b3IgKm5leHQ7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKiBDUlRDIHRvIHJlc3RvcmUg dGhlIGRlZmF1bHQgbW9kZSAqLwo+ID4gK2RybU1vZGVDcnRjICpkZWZhdWx0X2NydGM7Cj4gPiAr LyogSEVBRCBvZiB0aGUgRFAgQ29ubmVjdG9ycyBMaW5rZWQgTGlzdCAqLwo+ID4gK3N0cnVjdCBk cF9jb25uZWN0b3IgKmRwX2Nvbm5lY3Rvcl9saXN0Owo+ID4gKy8qIE51bWJlciBvZiBEUCBjb25u ZWN0b3Igbm9kZXMgaW4gbGlua2VkIGxpc3QgKi8KPiA+ICt1bnNpZ25lZCBzaG9ydCBkcF9jb25u ZWN0b3JfY291bnQ7Cj4gPiArc3RydWN0IHRlcm1pb3Mgb3JpZ190ZXJtaW9zOwo+ID4gKy8qIEds b2JhbCBmaWxlIHBvaW50ZXJzIGZvciB0aGUgc3lzZnMgZmlsZXMgKi8KPiA+ICtGSUxFICp0ZXN0 X2FjdGl2ZV9mcCwgKnRlc3RfZGF0YV9mcCwgKnRlc3RfdHlwZV9mcDsKPiA+ICsvKiBGbGFnIG5l ZWRlZCB0byBtbWFwIGZvciBWaWRlbyBwYXR0ZXJuIHRlc3QgKi8KPiA+ICtib29sIHZpZGVvX3Bh dHRlcm5fZmxhZyA9IGZhbHNlOwo+ID4gKwo+ID4gKy8qSW5wdXQgaGFuZGxpbmcqLwo+ID4gK3N0 YXRpYyB2b2lkIHJlc2V0X3Rlcm1pbmFsX21vZGUodm9pZCk7Cj4gPiArc3RhdGljIHZvaWQgc2V0 X2NvbmlvX3Rlcm1pbmFsX21vZGUodm9pZCk7Cj4gPiArc3RhdGljIGludCBrYmhpdCh2b2lkKTsK PiA+ICsKPiA+ICsvKiBUZXN0IEV4ZWN1dGlvbiBmdW5jdGlvbiBkZWNsZWFyYXRpb25zICovCj4g PiArc3RhdGljIHZvaWQgc2V0dXBfZGVidWdmc19maWxlcyh2b2lkKTsKPiA+ICtzdGF0aWMgaW50 IHNldHVwX2NydGNfZm9yX2Nvbm5lY3RvcihpbnQgZmQsIGRybU1vZGVSZXMgKm1yLCBkcm1Nb2Rl Q29ubmVjdG9yICpjLAo+ID4gKwkJCQkgICAgc3RydWN0IGRwX2Nvbm5lY3RvciAqZHBfY29ubik7 Cj4gPiArc3RhdGljIGludCBzZXR1cF9mcmFtZWJ1ZmZlcnMoaW50IGRydl9mZCwgc3RydWN0IGRw X2Nvbm5lY3RvciAqZHBfY29ubik7Cj4gPiArc3RhdGljIGludCBzZXR1cF9mYWlsc2FmZV9mcmFt ZWJ1ZmZlcihpbnQgZHJ2X2ZkLCBzdHJ1Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uKTsKPiA+ICtz dGF0aWMgaW50IHNldHVwX3ZpZGVvX3BhdHRlcm5fZnJhbWVidWZmZXIoaW50IGRydl9mZCwKPiA+ ICsJCQkJCSAgIHN0cnVjdCBkcF9jb25uZWN0b3IgKmRwX2Nvbm4pOwo+ID4gK3N0YXRpYyBpbnQg ZmlsbF9mcmFtZWJ1ZmZlcihpbnQgZHJ2X2ZkLCBzdHJ1Y3QgZHBfY29ubmVjdG9yICpkcF9jb25u KTsKPiA+ICtzdGF0aWMgaW50IHNldHVwX2RwX2Nvbm5lY3RvcihpbnQgZHJ2X2ZkLCBkcm1Nb2Rl UmVzICptciwgZHJtTW9kZUNvbm5lY3RvciAqYywKPiA+ICsJCQkgICAgICBzdHJ1Y3QgZHBfY29u bmVjdG9yICpkcF9jb25uKTsKPiA+ICtzdGF0aWMgaW50IHNldHVwX2Nvbm5lY3RvcnMoaW50IGRy dl9mZCwgZHJtTW9kZVJlc1B0ciBwbXIpOwo+ID4gK3N0YXRpYyBpbnQgc2V0dXBfZHJtKGludCAq ZHJ2X2ZkKTsKPiA+ICtzdGF0aWMgdm9pZCBzaHV0ZG93bihpbnQgZHJ2X2ZkKTsKPiA+ICtzdGF0 aWMgdm9pZCBjbGVhbnVwX2RlYnVnZnModm9pZCk7Cj4gPiArc3RhdGljIGludCBzZXRfdmlkZW9f bW9kZShpbnQgZHJ2X2ZkLCBpbnQgbW9kZSwKPiA+ICsJCQkgIHN0cnVjdCBkcF9jb25uZWN0b3Ig KnRlc3RfY29ubmVjdG9yKTsKPiA+ICtzdGF0aWMgYm9vbCBjaGVja190ZXN0X2FjdGl2ZSh2b2lk KTsKPiA+ICtzdGF0aWMgdm9pZCBjbGVhcl90ZXN0X2FjdGl2ZSh2b2lkKTsKPiA+ICtzdGF0aWMg dW5zaWduZWQgbG9uZyBnZXRfdGVzdF9lZGlkX2RhdGEodm9pZCk7Cj4gPiArc3RhdGljIHVuc2ln bmVkIGxvbmcgZ2V0X3Rlc3RfdHlwZSh2b2lkKTsKPiA+ICtzdGF0aWMgdm9pZCBnZXRfdGVzdF92 aWRlb1BhdHRlcm5fZGF0YShzdHJ1Y3QgZHBfY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ID4gK3N0 YXRpYyBpbnQgc2F2ZV9kZWZhdWx0X21vZGUoaW50IGRydl9mZCk7Cj4gPiArc3RhdGljIGludCBy ZXN0b3JlX2RlZmF1bHRfbW9kZShpbnQgZHJ2X2ZkKTsKPiA+ICtzdGF0aWMgaW50IHByb2Nlc3Nf dGVzdF9yZXF1ZXN0KGludCBkcnZfZmQsIGludCB0ZXN0X3R5cGUsCj4gPiArCQkJCWRybU1vZGVS ZXNQdHIgcG1yKTsKPiA+ICsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCByZXNldF90ZXJtaW5hbF9t b2RlKHZvaWQpCj4gPiArewo+ID4gKwl0Y3NldGF0dHIoMCwgVENTQU5PVywgJm9yaWdfdGVybWlv cyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHNldF9jb25pb190ZXJtaW5hbF9tb2Rl KHZvaWQpCj4gPiArewo+ID4gKwlzdHJ1Y3QgdGVybWlvcyBuZXdfdGVybWlvczsKPiA+ICsJLyog dGFrZSB0d28gY29waWVzIC0gb25lIGZvciBub3cgb3Igb25lIGZvciBsYXRlciovCj4gPiArCXRj Z2V0YXR0cigwLCAmb3JpZ190ZXJtaW9zKTsKPiA+ICsJbWVtY3B5KCZuZXdfdGVybWlvcywgJm9y aWdfdGVybWlvcywgc2l6ZW9mKG5ld190ZXJtaW9zKSk7Cj4gPiArCj4gPiArCS8qIHJlZ2lzdGVy IGNsZWFudXAgaGFuZGxlciwgYW5kIHNldCB0aGUgbmV3IHRlcm1pbmFsIG1vZGUgKi8KPiA+ICsJ YXRleGl0KHJlc2V0X3Rlcm1pbmFsX21vZGUpOwo+ID4gKwljZm1ha2VyYXcoJm5ld190ZXJtaW9z KTsKPiA+ICsJdGNzZXRhdHRyKDAsIFRDU0FOT1csICZuZXdfdGVybWlvcyk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQga2JoaXQodm9pZCkKPiA+ICt7Cj4gPiArCXN0cnVjdCB0aW1ldmFs IHR2ID0geyAwTCwgMEwgfTsKPiA+ICsJZmRfc2V0IGZkczsKPiA+ICsKPiA+ICsJRkRfWkVSTygm ZmRzKTsKPiA+ICsJRkRfU0VUKDAsICZmZHMpOwo+ID4gKwo+ID4gKwlyZXR1cm4gc2VsZWN0KDEs ICZmZHMsIE5VTEwsIE5VTEwsICZ0dik7Cj4gTm8gcG9pbnQgaW4gcGFzc2luZyAmdHYuCgpJIGFn cmVlLCBzaW5jZSB0diB3b3VsZCBob2xkIHRoZSBzdHJ1Y3QgdGltZXZhbCAqIGFueXdheQo+IAo+ ID4gK30KPiA+ICsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHNhdmVfZGVmYXVsdF9tb2RlKGludCBk cnZfZmQpCj4gPiArewo+ID4gKwlkcm1Nb2RlQ29ubmVjdG9yICpjOwo+ID4gKwlpbnQgaSwgajsK PiA+ICsJZHJtTW9kZVJlcyAqbW9kZV9yZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRy dl9mZCk7Cj4gPiArCWRybU1vZGVFbmNvZGVyICpkcm1fZW5jb2RlciA9IE5VTEw7Cj4gPiArCWlu dDMyX3QgY3J0YzsKPiA+ICsKPiA+ICsJaWYgKCFtb2RlX3Jlc291cmNlcykgewo+ID4gKwkJaWd0 X3dhcm4oImRybU1vZGVHZXRSZXNvdXJjZXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8p KTsKPiA+ICsJCXJldHVybiAtMTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwg bW9kZV9yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gKwo+ID4gKwkJYyA9 IGRybU1vZGVHZXRDb25uZWN0b3IoZHJ2X2ZkLCBtb2RlX3Jlc291cmNlcy0+Y29ubmVjdG9yc1tp XSk7Cj4gPiArCQlpZiAoIWMpIHsKPiA+ICsJCQlwcmludGYoIkZhaWxlZCB0byByZXRyaWV2ZSBj b25uZWN0b3IgJXU6JXVcclxuIiwKPiA+ICsJCQkgICAgICAgaSwgbW9kZV9yZXNvdXJjZXMtPmNv bm5lY3RvcnNbaV0pOwo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJaWYg KGMtPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkKPiA+ ICsJCQljb250aW51ZTsKPiA+ICsJCXByaW50ZigiU3VwcG9ydGVkIG1vZGVzIGZvciBDb25uZWN0 b3IgJWQgYXJlOiBcclxuIiwKPiA+ICsJCSAgICAgICBjLT5jb25uZWN0b3JfaWQpOwo+ID4gKwkJ cHJpbnRmKCJuYW1lIHJlZnJlc2ggKEh6KSBoZGlzcCBoc3MgaHNlIGh0b3QgdmRpc3AiCj4gPiAr CQkgICAgICAgInZzcyB2c2UgdnRvdCBmbGFncyB0eXBlIGNsb2NrXHJcbiIpOwo+ID4gKwkJZm9y IChqID0gMDsgaiA8IGMtPmNvdW50X21vZGVzOyBqKyspIHsKPiA+ICsJCQlwcmludGYoIlslZF0g Iiwgaik7Cj4gPiArCQkJcHJpbnRmKCIlcyAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAweCV4 IDB4JXggJWRcclxuIiwKPiA+ICsJCQkgICAgICAgYy0+bW9kZXNbal0ubmFtZSwgYy0+bW9kZXNb al0udnJlZnJlc2gsCj4gPiArCQkJICAgICAgIGMtPm1vZGVzW2pdLmhkaXNwbGF5LCBjLT5tb2Rl c1tqXS5oc3luY19zdGFydCwKPiA+ICsJCQkgICAgICAgYy0+bW9kZXNbal0uaHN5bmNfZW5kLCBj LT5tb2Rlc1tqXS5odG90YWwsCj4gPiArCQkJICAgICAgIGMtPm1vZGVzW2pdLnZkaXNwbGF5LCBj LT5tb2Rlc1tqXS52c3luY19zdGFydCwKPiA+ICsJCQkgICAgICAgYy0+bW9kZXNbal0udnN5bmNf ZW5kLCBjLT5tb2Rlc1tqXS52dG90YWwsCj4gPiArCQkJICAgICAgIGMtPm1vZGVzW2pdLmZsYWdz LCBjLT5tb2Rlc1tqXS50eXBlLAo+ID4gKwkJCSAgICAgICBjLT5tb2Rlc1tqXS5jbG9jayk7Cj4g PiArCQl9Cj4gPiArCQkvKiBVc2UgYXR0YWNoZWQgZW5jb2RlciBpZiBwb3NzaWJsZSAqLwo+ID4g KwkJaWYgKGMtPmVuY29kZXJfaWQpCj4gPiArCQkJZHJtX2VuY29kZXIgPSBkcm1Nb2RlR2V0RW5j b2RlcihkcnZfZmQsIGMtPmVuY29kZXJfaWQpOwo+ID4gKwkJaWYgKGRybV9lbmNvZGVyKSB7Cj4g PiArCQkJaWYgKGRybV9lbmNvZGVyLT5jcnRjX2lkKSB7Cj4gPiArCQkJCWNydGMgPSBkcm1fZW5j b2Rlci0+Y3J0Y19pZDsKPiA+ICsJCQl9Cj4gPiArCQl9Cj4gPiArCQlkZWZhdWx0X2NydGMgPSBk cm1Nb2RlR2V0Q3J0YyhkcnZfZmQsIGNydGMpOwo+ID4gKwkJZHJtTW9kZUZyZWVFbmNvZGVyKGRy bV9lbmNvZGVyKTsKPiA+ICsJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGMpOwo+ID4gKwo+ID4gKwl9 Cj4gPiArCWRybU1vZGVGcmVlUmVzb3VyY2VzKG1vZGVfcmVzb3VyY2VzKTsKPiA+ICsJcHJpbnRm KCJEZWZhdWx0IE1vZGUgaXM6XHJcbiIpOwo+ID4gKwlwcmludGYoIiVzICVkICVkICVkICVkICVk ICVkICVkICVkICVkIDB4JXggMHgleCAlZFxyXG4iLAo+ID4gKwkgICAgICAgZGVmYXVsdF9jcnRj LT5tb2RlLm5hbWUsIGRlZmF1bHRfY3J0Yy0+bW9kZS52cmVmcmVzaCwKPiA+ICsJICAgICAgIGRl ZmF1bHRfY3J0Yy0+bW9kZS5oZGlzcGxheSwgZGVmYXVsdF9jcnRjLT5tb2RlLmhzeW5jX3N0YXJ0 LAo+ID4gKwkgICAgICAgZGVmYXVsdF9jcnRjLT5tb2RlLmhzeW5jX2VuZCwgZGVmYXVsdF9jcnRj LT5tb2RlLmh0b3RhbCwKPiA+ICsJICAgICAgIGRlZmF1bHRfY3J0Yy0+bW9kZS52ZGlzcGxheSwg ZGVmYXVsdF9jcnRjLT5tb2RlLnZzeW5jX3N0YXJ0LAo+ID4gKwkgICAgICAgZGVmYXVsdF9jcnRj LT5tb2RlLnZzeW5jX2VuZCwgZGVmYXVsdF9jcnRjLT5tb2RlLnZ0b3RhbCwKPiA+ICsJICAgICAg IGRlZmF1bHRfY3J0Yy0+bW9kZS5mbGFncywgZGVmYXVsdF9jcnRjLT5tb2RlLnR5cGUsCj4gPiAr CSAgICAgICBkZWZhdWx0X2NydGMtPm1vZGUuY2xvY2spOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCByZXN0b3JlX2RlZmF1bHRfbW9kZShpbnQgZHJ2 X2ZkKQo+ID4gK3sKPiA+ICsJZHJtTW9kZUNvbm5lY3RvciAqYzsKPiA+ICsJaW50IGksIGo7Cj4g PiArCWRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcnZf ZmQpOwo+ID4gKwlkcm1Nb2RlRW5jb2RlciAqZHJtX2VuY29kZXIgPSBOVUxMOwo+ID4gKwlpbnQz Ml90IGNydGM7Cj4gPiArCj4gPiArCWlmICghbW9kZV9yZXNvdXJjZXMpIHsKPiA+ICsJCWlndF93 YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7 Cj4gPiArCQlyZXR1cm4gLTE7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IG1v ZGVfcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKPiA+ICsKPiA+ICsJCWMgPSBk cm1Nb2RlR2V0Q29ubmVjdG9yKGRydl9mZCwgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0p Owo+ID4gKwkJaWYgKCFjKSB7Cj4gPiArCQkJcHJpbnRmKCJGYWlsZWQgdG8gcmV0cmlldmUgY29u bmVjdG9yICV1OiV1XHJcbiIsCj4gPiArCQkJICAgICAgIGksIG1vZGVfcmVzb3VyY2VzLT5jb25u ZWN0b3JzW2ldKTsKPiA+ICsJCQljb250aW51ZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWlmIChj LT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpCj4gPiAr CQkJY29udGludWU7Cj4gPiArCQlwcmludGYoIlN1cHBvcnRlZCBtb2RlcyBmb3IgQ29ubmVjdG9y ICVkIGFyZTogXHJcbiIsCj4gPiArCQkgICAgICAgYy0+Y29ubmVjdG9yX2lkKTsKPiA+ICsJCXBy aW50ZigibmFtZSByZWZyZXNoIChIeikgaGRpc3AgaHNzIGhzZSBodG90IHZkaXNwICIKPiA+ICsJ CSAgICAgICAidnNzIHZzZSB2dG90IGZsYWdzIHR5cGUgY2xvY2tcclxuIik7Cj4gPiArCQlmb3Ig KGogPSAwOyBqIDwgYy0+Y291bnRfbW9kZXM7IGorKykgewo+ID4gKwkJCXByaW50ZigiWyVkXSAi LCBqKTsKPiA+ICsJCQlwcmludGYoIiVzICVkICVkICVkICVkICVkICVkICVkICVkICVkIDB4JXgg MHgleCAlZFxyXG4iLAo+ID4gKwkJCSAgICAgICBjLT5tb2Rlc1tqXS5uYW1lLCBjLT5tb2Rlc1tq XS52cmVmcmVzaCwKPiA+ICsJCQkgICAgICAgYy0+bW9kZXNbal0uaGRpc3BsYXksIGMtPm1vZGVz W2pdLmhzeW5jX3N0YXJ0LAo+ID4gKwkJCSAgICAgICBjLT5tb2Rlc1tqXS5oc3luY19lbmQsIGMt Pm1vZGVzW2pdLmh0b3RhbCwKPiA+ICsJCQkgICAgICAgYy0+bW9kZXNbal0udmRpc3BsYXksIGMt Pm1vZGVzW2pdLnZzeW5jX3N0YXJ0LAo+ID4gKwkJCSAgICAgICBjLT5tb2Rlc1tqXS52c3luY19l bmQsIGMtPm1vZGVzW2pdLnZ0b3RhbCwKPiA+ICsJCQkgICAgICAgYy0+bW9kZXNbal0uZmxhZ3Ms IGMtPm1vZGVzW2pdLnR5cGUsCj4gPiArCQkJICAgICAgIGMtPm1vZGVzW2pdLmNsb2NrKTsKPiA+ ICsJCX0KPiA+ICsJCS8qIFVzZSBhdHRhY2hlZCBlbmNvZGVyIGlmIHBvc3NpYmxlICovCj4gPiAr CQlpZiAoYy0+ZW5jb2Rlcl9pZCkKPiA+ICsJCQlkcm1fZW5jb2RlciA9IGRybU1vZGVHZXRFbmNv ZGVyKGRydl9mZCwgYy0+ZW5jb2Rlcl9pZCk7Cj4gPiArCQlpZiAoZHJtX2VuY29kZXIpIHsKPiA+ ICsJCQlpZiAoZHJtX2VuY29kZXItPmNydGNfaWQpIHsKPiA+ICsJCQkJY3J0YyA9IGRybV9lbmNv ZGVyLT5jcnRjX2lkOwo+ID4gKwkJCX0KPiA+ICsJCX0KPiA+ICsJCWRybU1vZGVTZXRDcnRjKGRy dl9mZCwgZGVmYXVsdF9jcnRjLT5jcnRjX2lkLAo+ID4gKwkJCQkgICAgICAgZGVmYXVsdF9jcnRj LT5idWZmZXJfaWQsCj4gPiArCQkJCSAgICAgICBkZWZhdWx0X2NydGMtPngsCj4gPiArCQkJCSAg ICAgICBkZWZhdWx0X2NydGMtPnksICZjLT5jb25uZWN0b3JfaWQsIDEsCj4gPiArCQkJCSAgICAg ICAmZGVmYXVsdF9jcnRjLT5tb2RlKTsKPiA+ICsJCWRybU1vZGVGcmVlRW5jb2Rlcihkcm1fZW5j b2Rlcik7Cj4gPiArCQlkcm1Nb2RlRnJlZUNvbm5lY3RvcihjKTsKPiA+ICsKPiA+ICsJfQo+ID4g Kwlkcm1Nb2RlRnJlZVJlc291cmNlcyhtb2RlX3Jlc291cmNlcyk7Cj4gPiArCXByaW50ZigiRGVm YXVsdCBNb2RlIGlzOiBcclxuIik7Cj4gPiArCXByaW50ZigiJXMgJWQgJWQgJWQgJWQgJWQgJWQg JWQgJWQgJWQgMHgleCAweCV4ICVkXHJcbiIsCj4gPiArCSAgICAgICBkZWZhdWx0X2NydGMtPm1v ZGUubmFtZSwgZGVmYXVsdF9jcnRjLT5tb2RlLnZyZWZyZXNoLAo+ID4gKwkgICAgICAgZGVmYXVs dF9jcnRjLT5tb2RlLmhkaXNwbGF5LCBkZWZhdWx0X2NydGMtPm1vZGUuaHN5bmNfc3RhcnQsCj4g PiArCSAgICAgICBkZWZhdWx0X2NydGMtPm1vZGUuaHN5bmNfZW5kLCBkZWZhdWx0X2NydGMtPm1v ZGUuaHRvdGFsLAo+ID4gKwkgICAgICAgZGVmYXVsdF9jcnRjLT5tb2RlLnZkaXNwbGF5LCBkZWZh dWx0X2NydGMtPm1vZGUudnN5bmNfc3RhcnQsCj4gPiArCSAgICAgICBkZWZhdWx0X2NydGMtPm1v ZGUudnN5bmNfZW5kLCBkZWZhdWx0X2NydGMtPm1vZGUudnRvdGFsLAo+ID4gKwkgICAgICAgZGVm YXVsdF9jcnRjLT5tb2RlLmZsYWdzLCBkZWZhdWx0X2NydGMtPm1vZGUudHlwZSwKPiA+ICsJICAg ICAgIGRlZmF1bHRfY3J0Yy0+bW9kZS5jbG9jayk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfdGVzdF9lZGlkX2RhdGEodm9p ZCkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGxvbmcgdGVzdF9kYXRhOwo+ID4gKwo+ID4gKwlpZiAo IXRlc3RfZGF0YV9mcCkKPiA+ICsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBUZXN0IGRhdGEg RmlsZSBQb2ludGVyXHJcbiIpOwo+ID4gKwo+ID4gKwlyZXdpbmQodGVzdF9kYXRhX2ZwKTsKPiA+ ICsJZnNjYW5mKHRlc3RfZGF0YV9mcCwgIiVseCIsICZ0ZXN0X2RhdGEpOwo+ID4gKwlpZiAodGVz dF9kYXRhIDw9IDApIHsKPiA+ICsJCXByaW50ZigiVGVzdCBkYXRhIHJlYWQgZmFpbGVkIC0gJWx4 XHJcbiIsIHRlc3RfZGF0YSk7Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsJfQo+ID4gKwo+ID4gKwly ZXR1cm4gdGVzdF9kYXRhOwo+ID4gK30KPiA+ICsKPiBsb3dlci1jYXNlLgo+ID4gK3N0YXRpYyB2 b2lkIGdldF90ZXN0X3ZpZGVvUGF0dGVybl9kYXRhKHN0cnVjdCBkcF9jb25uZWN0b3IgKmNvbm5l Y3RvcikKPiA+ICt7Cj4gPiArCWludCBjb3VudCA9IDA7Cj4gPiArCXVpbnQxNl90IHZpZGVvX3Bh dHRlcm5fdmFsdWVbM107Cj4gPiArCWNoYXIgdmlkZW9fcGF0dGVybl9hdHRyaWJ1dGVbMTVdOwo+ ID4gKwo+ID4gKwlpZiAoIXRlc3RfZGF0YV9mcCkKPiA+ICsJCWZwcmludGYoc3RkZXJyLCAiSW52 YWxpZCBUZXN0IGRhdGEgRmlsZSBwb2ludGVyXHJcbiIpOwo+ID4gKwo+ID4gKwlyZXdpbmQodGVz dF9kYXRhX2ZwKTsKPiA+ICsJd2hpbGUgKCFmZW9mKHRlc3RfZGF0YV9mcCkgJiYgY291bnQgPCAz KQo+ID4gKwkJZnNjYW5mKHRlc3RfZGF0YV9mcCwgIiVzICV1XG4iLCB2aWRlb19wYXR0ZXJuX2F0 dHJpYnV0ZSwKPiA+ICsJCSAgICAgICAmdmlkZW9fcGF0dGVybl92YWx1ZVtjb3VudCsrXSk7Cj4g PiArCj4gPiArCWNvbm5lY3Rvci0+dGVzdF9wYXR0ZXJuLmhkaXNwbGF5ID0gdmlkZW9fcGF0dGVy bl92YWx1ZVswXTsKPiA+ICsJY29ubmVjdG9yLT50ZXN0X3BhdHRlcm4udmRpc3BsYXkgPSB2aWRl b19wYXR0ZXJuX3ZhbHVlWzFdOwo+ID4gKwljb25uZWN0b3ItPnRlc3RfcGF0dGVybi5iaXRkZXB0 aCA9IHZpZGVvX3BhdHRlcm5fdmFsdWVbMl07Cj4gPiArCXByaW50ZigiSGRpc3BsYXkgPSAldVxy XG4iLCBjb25uZWN0b3ItPnRlc3RfcGF0dGVybi5oZGlzcGxheSk7Cj4gPiArCXByaW50ZigiVmRp c3BsYXkgPSAldVxyXG4iLCBjb25uZWN0b3ItPnRlc3RfcGF0dGVybi52ZGlzcGxheSk7Cj4gPiAr CXByaW50ZigiQml0RGVwdGggPSAldVxyXG4iLCBjb25uZWN0b3ItPnRlc3RfcGF0dGVybi5iaXRk ZXB0aCk7Cj4gPiArCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF90 ZXN0X3R5cGUodm9pZCkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGxvbmcgdGVzdF90eXBlOwo+ID4g Kwo+ID4gKwlpZiAoIXRlc3RfdHlwZV9mcCkKPiA+ICsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxp ZCBUZXN0IFR5cGUgRmlsZSBwb2ludHJcclxuIik7Cj4gPiArCXJld2luZCh0ZXN0X3R5cGVfZnAp Owo+ID4gKwlmc2NhbmYodGVzdF90eXBlX2ZwLCAiJTAybHgiLCAmdGVzdF90eXBlKTsKPiA+ICsJ aWYgKHRlc3RfdHlwZSA8PSAwKSB7Cj4gPiArCQlwcmludGYoIlRlc3QgdHlwZSByZWFkIGZhaWxl ZCAtICUwMmx4XHJcbiIsIHRlc3RfdHlwZSk7Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlyZXR1cm4gdGVzdF90eXBlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHBy b2Nlc3NfdGVzdF9yZXF1ZXN0KGludCBkcnZfZmQsIGludCB0ZXN0X3R5cGUsCj4gPiArCQkJCWRy bU1vZGVSZXNQdHIgcG1yKQo+ID4gK3sKPiA+ICsJaW50IHN0YXR1cyA9IC0xOwo+ID4gKwlpbnQg bW9kZTsKPiA+ICsJdW5zaWduZWQgbG9uZyB0ZXN0X2RhdGFfZWRpZDsKPiA+ICsJc3RydWN0IGRw X2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ID4gKwo+ID4gKwkvKiBEaXNhYmxlIHRoZSBtYWluIGxp bmsgYmVmb3JlIHN0YXJ0aW5nIHRoZSB0ZXN0Cj4gPiArCSAqIE5vdGUgdGhhdCB0aGlzIHNob3Vs ZCBwcm9iYWJseSBiZSBzaWduYWxlZCB0aHJvdWdoIGEgZGVidWdmcyBmaWxlCj4gPiArCSAqIGZy b20gdGhlIGtlcm5lbCBhdCB0aGUgc3RhcnQgb2YgdGVzdGluZy4KPiA+ICsJICovCj4gPiArCXN3 aXRjaCAodGVzdF90eXBlKSB7Cj4gPiArCWNhc2UgRFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk46 Cj4gPiArCQl2aWRlb19wYXR0ZXJuX2ZsYWcgPSB0cnVlOwo+ID4gKwkJc2V0dXBfY29ubmVjdG9y cyhkcnZfZmQsIHBtcik7Cj4gc2V0dXBfY29ubmVjdG9ycygpIHJldHVybnMgMCBldmVuIGlmIGl0 IGZhaWxlZCB0byBmaW5kIGEgc3VpdGFibGUKPiBjb25uZWN0b3IgaXMgIURSTV9NT0RFX0NPTk5F Q1RPUl9EaXNwbGF5UG9ydCBvciBzZXR1cF9kcF9jb25uZWN0b3IoKQo+IGZhaWxlZCAtPiBkcF9j b25uZWN0b3JfbGlzdCB3aWxsIGJlIE5VTEwgc28gaXMgdGhlIGNvbm5lY3Rvci4KCkkgd2lsbCBj aGFuZ2UgdGhlIGxvZ2ljIHRvIHJldHVybiAtMSBpZiB0aGUgY29ubmVjdG9yIGlzIG5vdCBEUCBv ciAKaWYgc2V0dXBfZHBfY29ubmVjdG9yIGZhaWxlZCBhbmQgY2hlY2sgdGhlIHJldHVybiB2YWx1 ZSBoZXJlCj4gPiArCQljb25uZWN0b3IgPSAmZHBfY29ubmVjdG9yX2xpc3RbMF07Cj4gCj4gV2h5 IGFyZSB5b3UgaW5kZXhpbmcgaXQ/IChjb25uZWN0b3IgPSAmZHBfY29ubmVjdG9yX2xpc3QpLiBJ dCBqdXN0IHNlZW1zCj4geW91J3JlIHRyeWluZyBpdCB0byBhY2Nlc3MgaXQgYXMgYW4gYXJyYXku IE9uIHRoZSBvdGhlciBoYW5kIHlvdQo+IHNlZW0gdG8gYWxzbyBoYXZlIGEgdmFyIHRvIGNvdW50 IHRoZSBudW1iZXIgb2YgY29ubmVjdG9ycy4gTWF5YmUKPiBpdCBtYWtlcyBtb3JlIHNlbnNlIHRv IHVzZSBhcyBpdC90cmVhdCBpdCBhcnJheSwgdGhhdCBpcywgdG8KPiByZW1vdmUgdGhlIG5leHQg cHRyIGFuZCB1c2UgdGhlIGNudHIgdmFyaWFibGUuCgpUaGlzIGlzIGJlaW5nIGluZGV4ZWQgaGVy ZSB0byBmaW5kIHRoZSBhY3RpdmUgY29ubmVjdG9yIHdoaWNoIHdpbGwgYmUgCnRoZSBmaXJzdCBu b2RlIGluIHRoZSBsaW5rZWQgbGlzdC4gU28gaW5zdGVhZCBvZiBpbmRleGluZyBpdCBoZXJlIEkg Y2FuIHVzZQpjb25uZWN0b3IgPSBkcF9jb25uZWN0b3JfbGlzdApJbiBjYXNlIG9mIGNvbXBsaWFu Y2UgdGVzdGluZywgdGhlIERQUiBkZXZpY2Ugd2lsbCBiZSB1c2VkIGZvciBlYWNoIERQIHNlcGFy YXRlbHkgc28KZm9yIHRoaXMgdG9vbCwgaXQgd2lsbCBvbmx5IGhhdmUgMSBkcCBjb25uZWN0b3Ig c28gb25seSAxIG5vZGUgaW4gdGhlIGxpc3QgYWx3YXlzLgpUaGlzIHdhcyBpbmhlcml0ZWQgZnJv bSBwcmV2aW91cyB3b3JrIGJ5IFRvZGQgYW5kIHNvIEkga2VwdCB0aGUgZGVzaWduIHRvIHVzZSB0 aGUKc2FtZSBsaW5rZWQgbGlzdC4gQnV0IGlkZWFsbHkgd2Ugd2lsbCBiZSBkZWFsaW5nIHdpdGgg b25seSAxIGRwIGNvbm5lY3RvciBpbiB0aGlzIGNhc2UuCgo+IAo+ID4gKwkJZ2V0X3Rlc3Rfdmlk ZW9QYXR0ZXJuX2RhdGEoY29ubmVjdG9yKTsKPiA+ICsJCWZpbGxfZnJhbWVidWZmZXIoZHJ2X2Zk LCBjb25uZWN0b3IpOwo+ID4gKwkJbW9kZSA9IElOVEVMX01PREVfVklERU9fUEFUVEVSTl9URVNU Owo+ID4gKwkJc2V0X3ZpZGVvX21vZGUoZHJ2X2ZkLCBJTlRFTF9NT0RFX05PTkUsIGNvbm5lY3Rv cik7Cj4gPiArCQlzdGF0dXMgPSBzZXRfdmlkZW9fbW9kZShkcnZfZmQsIG1vZGUsIGNvbm5lY3Rv cik7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSBEUF9URVNUX0xJTktfRURJRF9SRUFEOgo+ID4g KwkJc2V0dXBfY29ubmVjdG9ycyhkcnZfZmQsIHBtcik7Cj4gPiArCQljb25uZWN0b3IgPSAmZHBf Y29ubmVjdG9yX2xpc3RbMF07Cj4gPiArCQl0ZXN0X2RhdGFfZWRpZCA9IGdldF90ZXN0X2VkaWRf ZGF0YSgpOwo+ID4gKwkJbW9kZSA9ICh0ZXN0X2RhdGFfZWRpZCAmIERQX0NPTVBMSUFOQ0VfVklE RU9fTU9ERV9NQVNLKSA+Pgo+ID4gKwkJCUlOVEVMX0RQX1JFU09MVVRJT05fU0hJRlRfTUFTSzsK PiA+ICsJCXNldF92aWRlb19tb2RlKGRydl9mZCwgSU5URUxfTU9ERV9OT05FLCBjb25uZWN0b3Ip Owo+ID4gKwkJc3RhdHVzID0gc2V0X3ZpZGVvX21vZGUoZHJ2X2ZkLCBtb2RlLCBjb25uZWN0b3Ip Owo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgRFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk46 Cj4gPiArCQkvKiBQSFkgVGVzdCBQYXR0ZXJuID0gZnV0dXJlIGltcGxlbWVudGF0aW9uICovCj4g PiArCQlicmVhazsKPiA+ICsJZGVmYXVsdDoKPiA+ICsJCS8qIFVua25vd24gdGVzdCB0eXBlICov Cj4gPiArCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgdGVzdCByZXF1ZXN0LiBJZ25vcmVkLlxy XG4iKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCWNsZWFyX3Rlc3RfYWN0aXZlKCk7Cj4g PiArCj4gPiArCS8qIFJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUgKi8KPiA+ ICsJcmV0dXJuIHN0YXR1czsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgY2xlYW51cF9k ZWJ1Z2ZzKHZvaWQpCj4gPiArewo+ID4gKwlmY2xvc2UodGVzdF9hY3RpdmVfZnApOwo+ID4gKwlm Y2xvc2UodGVzdF9kYXRhX2ZwKTsKPiA+ICsJZmNsb3NlKHRlc3RfdHlwZV9mcCk7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBib29sIGNoZWNrX3Rlc3RfYWN0aXZlKHZvaWQpCj4gPiArewo+ID4g Kwl1bnNpZ25lZCBsb25nIHRlc3RfYWN0aXZlOwo+ID4gKwo+ID4gKwlpZiAoIXRlc3RfdHlwZV9m cCkKPiA+ICsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCB0ZXN0IHR5cGUgZmlsZSBwb2ludGVy XHJcbiIpOwo+ID4gKwlyZXdpbmQodGVzdF9hY3RpdmVfZnApOwo+ID4gKwlmc2NhbmYodGVzdF9h Y3RpdmVfZnAsICIlbHgiLCAmdGVzdF9hY3RpdmUpOwo+ID4gKwlpZiAodGVzdF9hY3RpdmUgPT0g MSkKPiA+ICsJCXJldHVybiAxOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQgY2xlYXJfdGVzdF9hY3RpdmUodm9pZCkKPiA+ICt7Cj4gPiArCXJld2lu ZCh0ZXN0X2FjdGl2ZV9mcCk7Cj4gPiArCWZwcmludGYodGVzdF9hY3RpdmVfZnAsICIlZCIsIDAp Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBzZXR1cF9kZWJ1Z2ZzX2ZpbGVzKHZvaWQp Cj4gPiArewo+ID4gKwl0ZXN0X3R5cGVfZnAgPSBpZ3RfZGVidWdmc19mb3BlbihJTlRFTF9EUF9U RVNUX1RZUEVfRklMRSwgInIiKTsKPiA+ICsJaWd0X3JlcXVpcmUodGVzdF90eXBlX2ZwKTsKPiA+ ICsKPiA+ICsJdGVzdF9kYXRhX2ZwID0gaWd0X2RlYnVnZnNfZm9wZW4oSU5URUxfRFBfVEVTVF9E QVRBX0ZJTEUsICJyIik7Cj4gPiArCWlndF9yZXF1aXJlKHRlc3RfZGF0YV9mcCk7Cj4gPiArCj4g PiArCXRlc3RfYWN0aXZlX2ZwID0gaWd0X2RlYnVnZnNfZm9wZW4oSU5URUxfRFBfVEVTVF9BQ1RJ VkVfRklMRSwgIncrIik7Cj4gPiArCWlndF9yZXF1aXJlKHRlc3RfYWN0aXZlX2ZwKTsKPiA+ICsK PiA+ICsJLyogUmVzZXQgdGhlIGFjdGl2ZSBmbGFnIGZvciBzYWZldHkgKi8KPiA+ICsJY2xlYXJf dGVzdF9hY3RpdmUoKTsKPiA+ICt9Cj4gPiArCj4gPiArCj4gPiArc3RhdGljIGludCBzZXR1cF9k cm0oaW50ICpkcnZfZmQpCj4gPiArewo+ID4gKwlpbnQgZHJtX2ZkOwo+ID4gKwo+ID4gKwlpZiAo IWRybUF2YWlsYWJsZSgpKSB7Cj4gPiArCQlwcmludGYoIkVycm9yOiBEUk0gbm90IGF2YWlsYWJs ZVxyXG4iKTsKPiA+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlk cm1fZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiA+ICsJaWYgKGRybV9mZCA9 PSAtMSkgewo+ID4gKwkJZnByaW50ZihzdGRlcnIsICJDYW5ub3QgT3BlbiBEUk0gRGV2aWNlXHJc biIpOwo+ID4gKwkJcmV0dXJuIC0xOwo+ID4gKwl9Cj4gPiArCSpkcnZfZmQgPSBkcm1fZmQ7Cj4g PiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHNl dHVwX2Nvbm5lY3RvcnMoaW50IGRydl9mZCwgZHJtTW9kZVJlc1B0ciBwbXIpCj4gPiArewo+ID4g KwlpbnQgcmV0LCBpOwo+ID4gKwlkcm1Nb2RlQ29ubmVjdG9yICpjOwo+ID4gKwlzdHJ1Y3QgZHBf Y29ubmVjdG9yICpkcF9jb25uOwo+ID4gKwo+ID4gKwlwbXIgPSBkcm1Nb2RlR2V0UmVzb3VyY2Vz KGRydl9mZCk7Cj4gPiArCWlmICghcG1yKSB7Cj4gPiArCQlwcmludGYoIkVSUk9SOiBGYWlsZWQg dG8gcmV0cmlldmUgRFJNIHJlc291cmNlc1xyXG4iKTsKPiA+ICsJCXJldHVybiAtMTsKPiA+ICsJ fQo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgcG1yLT5jb3VudF9jb25uZWN0b3JzOyBpKysp IHsKPiA+ICsKPiA+ICsJCWMgPSBkcm1Nb2RlR2V0Q29ubmVjdG9yKGRydl9mZCwgcG1yLT5jb25u ZWN0b3JzW2ldKTsKPiA+ICsJCWlmICghYykgewo+ID4gKwkJCXByaW50ZigiRmFpbGVkIHRvIHJl dHJpZXZlIGNvbm5lY3RvciAldToldVxyXG4iLAo+ID4gKwkJCSAgICAgICBpLCBwbXItPmNvbm5l Y3RvcnNbaV0pOwo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJaWYgKGMt PmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkKPiA+ICsJ CQljb250aW51ZTsKPiA+ICsKPiA+ICsJCWRwX2Nvbm4gPSBtYWxsb2Moc2l6ZW9mKCpkcF9jb25u KSk7Cj4gPiArCQltZW1zZXQoZHBfY29ubiwgMCwgc2l6ZW9mKCpkcF9jb25uKSk7Cj4gPiArCQlk cF9jb25uLT5jb25uID0gYy0+Y29ubmVjdG9yX2lkOwo+ID4gKwkJZHBfY29ubi0+bmV4dCA9IGRw X2Nvbm5lY3Rvcl9saXN0Owo+ID4gKwkJZHBfY29ubmVjdG9yX2xpc3QgPSBkcF9jb25uOwo+IFRo ZSBoZWFkIG9mIHRoZSBsaXN0IHdpbGwgYmUgTlVMTCBpZiB0aGlzIGlzIG5vdCBhCj4gRFJNX01P REVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0LiBTZWUgY29tbWVudCB3aGVyZSB5b3UgY2FsbCB0aGlz Cj4gZnVuY3Rpb24gd2l0aG91dCBjaGVja2luZyBpdHMgcmV0dXJuIHZhbHVlLgo+ID4gKwo+ID4g KwkJLyogU2V0dXAgdGhlIERQIGNvbm5lY3RvciovCj4gPiArCQlyZXQgPSBzZXR1cF9kcF9jb25u ZWN0b3IoZHJ2X2ZkLCBwbXIsIGMsIGRwX2Nvbm4pOwo+ID4gKwkJaWYgKHJldCA9PSAtMSkgewo+ ID4gKwkJCXByaW50ZigiRmFpbGVkIHRvIHNldHVwIERQIGNvbm5lY3RvciAldToldVxyXG4iLAo+ ID4gKwkJCSAgICAgICBpLAo+ID4gKwkJCSAgICAgICBwbXItPmNvbm5lY3RvcnNbaV0pOwo+ID4g KwkJCWZyZWUoZHBfY29ubik7Cj4gPiArCQkJZHJtTW9kZUZyZWVDb25uZWN0b3IoYyk7Cj4gPiAr CQkJY29udGludWU7Cj4gPiArCQl9IGVsc2UKPiA+ICsJCQlkcF9jb25uZWN0b3JfY291bnQrKzsK PiBLZWVwIHRoZSBzYW1lIHN0eWxlIChpLmUuLCBpZiAoKSB7fSBlbHNlIHt9ICkuCj4gPiArCj4g PiArCQkvKiBmcmVlIGNvbm5lY3RvciBkYXRhIGFuZCBsaW5rIGRldmljZSBpbnRvIGdsb2JhbCBs aXN0ICovCj4gPiArCQlkcm1Nb2RlRnJlZUNvbm5lY3RvcihjKTsKPiA+ICsJfQo+ID4gKwlkcm1N b2RlRnJlZVJlc291cmNlcyhwbXIpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGludCBzZXR1cF9kcF9jb25uZWN0b3IoaW50IGRydl9mZCwgZHJtTW9kZVJl cyAqbXIsIGRybU1vZGVDb25uZWN0b3IgKmMsCj4gPiArCQkgICAgICAgc3RydWN0IGRwX2Nvbm5l Y3RvciAqZHBfY29ubikKPiA+ICt7Cj4gPiArCWludCByZXQsIGk7Cj4gPiArCWJvb2wgZm91bmRf c3RkID0gZmFsc2UsIGZvdW5kX2ZzID0gZmFsc2U7Cj4gPiArCj4gPiArCS8qIElnbm9yZSBhbnkg ZGlzY29ubmVjdGVkIGRldmljZXMgKi8KPiA+ICsJaWYgKGMtPmNvbm5lY3Rpb24gIT0gRFJNX01P REVfQ09OTkVDVEVEKSB7Cj4gPiArCQlwcmludGYoIkNvbm5lY3RvciAldSBkaXNjb25uZWN0ZWRc clxuIiwgYy0+Y29ubmVjdG9yX2lkKTsKPiA+ICsJCXJldHVybiAtRU5PRU5UOwo+ID4gKwl9Cj4g PiArCXByaW50ZigiQ29ubmVjdG9yIFNldHVwOlxyXG4iKTsKPiA+ICsJLyogU2V0dXAgcHJlZmVy cmVkIG1vZGUgLSBzaG91bGQgYmUgbW9kZVswXSBpbiB0aGUgbGlzdCAqLwo+ID4gKwlkcF9jb25u LT5tb2RlX3ByZWZlcnJlZCA9IGMtPm1vZGVzWzBdOwo+ID4gKwlkcF9jb25uLT5mYl93aWR0aCA9 IGMtPm1vZGVzWzBdLmhkaXNwbGF5Owo+ID4gKwlkcF9jb25uLT5mYl9oZWlnaHQgPSBjLT5tb2Rl c1swXS52ZGlzcGxheTsKPiA+ICsKPiA+ICsJZHBfY29ubi0+dGVzdF9wYXR0ZXJuLm1vZGUgPSBj LT5tb2Rlc1swXTsKPiA+ICsJZHBfY29ubi0+dGVzdF9wYXR0ZXJuLm1vZGUuaGRpc3BsYXkgPSBj LT5tb2Rlc1swXS5oZGlzcGxheTsKPiA+ICsJZHBfY29ubi0+dGVzdF9wYXR0ZXJuLm1vZGUudmRp c3BsYXkgPSBjLT5tb2Rlc1swXS52ZGlzcGxheTsKPiA+ICsKPiA+ICsJcHJpbnRmKCJQcmVmZXJy ZWQgbW9kZSAobW9kZSAwKSBmb3IgY29ubmVjdG9yICV1IGlzICV1eCV1XHJcbiIsCj4gPiArCSAg ICAgICBjLT5jb25uZWN0b3JfaWQsIGMtPm1vZGVzWzBdLmhkaXNwbGF5LCBjLT5tb2Rlc1swXS52 ZGlzcGxheSk7Cj4gPiArCWZmbHVzaChzdGRpbik7Cj4gPiArCj4gPiArCWZvciAoaSA9IDE7IGkg PCBjLT5jb3VudF9tb2RlczsgaSsrKSB7Cj4gPiArCQkvKiBTdGFuZGFyZCBtb2RlIGlzIDgwMHg2 MDBANjAgKi8KPiA+ICsJCWlmIChjLT5tb2Rlc1tpXS5oZGlzcGxheSA9PSA4MDAgJiYKPiA+ICsJ CSAgICBjLT5tb2Rlc1tpXS52ZGlzcGxheSA9PSA2MDAgJiYKPiA+ICsJCSAgICBjLT5tb2Rlc1tp XS52cmVmcmVzaCA9PSA2MCAmJgo+ID4gKwkJICAgIGZvdW5kX3N0ZCA9PSBmYWxzZSkgewo+ID4g KwkJCWRwX2Nvbm4tPm1vZGVfc3RhbmRhcmQgPSBjLT5tb2Rlc1tpXTsKPiA+ICsJCQlwcmludGYo IlN0YW5kYXJkIG1vZGUgKCVkKSBmb3IgY29ubmVjdG9yICV1IGlzICV1eCV1XHJcbiIsCj4gPiAr CQkJICAgICAgIGksCj4gPiArCQkJICAgICAgIGMtPmNvbm5lY3Rvcl9pZCwKPiA+ICsJCQkgICAg ICAgYy0+bW9kZXNbaV0uaGRpc3BsYXksCj4gPiArCQkJICAgICAgIGMtPm1vZGVzW2ldLnZkaXNw bGF5KTsKPiA+ICsJCQlmb3VuZF9zdGQgPSB0cnVlOwo+ID4gKwkJfQo+ID4gKwkJLyogRmFpbHNh ZmUgbW9kZSBpcyA2NDB4NDgwQDYwICovCj4gPiArCQlpZiAoYy0+bW9kZXNbaV0uaGRpc3BsYXkg PT0gNjQwICYmCj4gPiArCQkgICAgYy0+bW9kZXNbaV0udmRpc3BsYXkgPT0gNDgwICYmCj4gPiAr CQkgICAgYy0+bW9kZXNbaV0udnJlZnJlc2ggPT0gNjAgJiYKPiA+ICsJCSAgICBmb3VuZF9mcyA9 PSBmYWxzZSkgewo+ID4gKwkJCWRwX2Nvbm4tPm1vZGVfZmFpbHNhZmUgPSBjLT5tb2Rlc1tpXTsK PiA+ICsJCQlkcF9jb25uLT5mYWlsc2FmZV93aWR0aCA9IGMtPm1vZGVzW2ldLmhkaXNwbGF5Owo+ ID4gKwkJCWRwX2Nvbm4tPmZhaWxzYWZlX2hlaWdodCA9IGMtPm1vZGVzW2ldLnZkaXNwbGF5Owo+ ID4gKwkJCXByaW50ZigiRmFpbHNhZmUgbW9kZSAoJWQpIGZvciBjb25uZWN0b3IgJXUgaXMgJXV4 JXVcclxuIiwKPiA+ICsJCQkgICAgICAgaSwKPiA+ICsJCQkgICAgICAgYy0+Y29ubmVjdG9yX2lk LAo+ID4gKwkJCSAgICAgICBjLT5tb2Rlc1tpXS5oZGlzcGxheSwKPiA+ICsJCQkgICAgICAgYy0+ bW9kZXNbaV0udmRpc3BsYXkpOwo+ID4gKwkJCWZvdW5kX2ZzID0gdHJ1ZTsKPiA+ICsJCX0KPiA+ ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBzZXR1cF9jcnRjX2Zvcl9jb25uZWN0b3IoZHJ2X2ZkLCBt ciwgYywgZHBfY29ubik7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCXByaW50ZigiU2V0IENSVEMg Zm9yIGNvbm5lY3RvciAldSBmYWlsZWQgKCVkKVxyXG4iLAo+ID4gKwkJICAgICAgIGMtPmNvbm5l Y3Rvcl9pZCwgcmV0KTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0 ID0gc2V0dXBfZnJhbWVidWZmZXJzKGRydl9mZCwgZHBfY29ubik7Cj4gPiArCWlmIChyZXQpIHsK PiA+ICsJCXByaW50ZigiQ3JlYXRlIGZyYW1lYnVmZmVyIGZvciBjb25uZWN0b3IgJXUgZmFpbGVk ICglZClcclxuIiwKPiA+ICsJCSAgICAgICBjLT5jb25uZWN0b3JfaWQsIHJldCk7Cj4gPiArCQly ZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChmb3VuZF9mcykgewo+ID4gKwkJcmV0 ID0gc2V0dXBfZmFpbHNhZmVfZnJhbWVidWZmZXIoZHJ2X2ZkLCBkcF9jb25uKTsKPiA+ICsJCWlm IChyZXQpIHsKPiA+ICsJCQlwcmludGYoIkNyZWF0ZSBmYWlsc2FmZSBmcmFtZWJ1ZmZlciBmb3Ig Y29ubmVjdG9yICV1Igo+ID4gKwkJCSAgICAgICAiZmFpbGVkICglZClcclxuIiwKPiA+ICsJCQkg ICAgICAgYy0+Y29ubmVjdG9yX2lkLCByZXQpOwo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCQl9 Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKHZpZGVvX3BhdHRlcm5fZmxhZykgewo+ID4gKwkJcmV0 ID0gc2V0dXBfdmlkZW9fcGF0dGVybl9mcmFtZWJ1ZmZlcihkcnZfZmQsIGRwX2Nvbm4pOwo+ID4g KwkJaWYgKHJldCkgewo+ID4gKwkJCXByaW50ZigiQ3JlYXRlIGZyYW1lYnVmZmVyIGZvciBjb25u ZWN0b3IgJXUgZmFpbGVkICglZClcclxuIiwKPiA+ICsJCQkgICAgICAgYy0+Y29ubmVjdG9yX2lk LCByZXQpOwo+ID4gKwkJCXJldHVybiByZXQ7Cj4gTWF5YmUgaXQgbWFrZXMgc2Vuc2UgdG8gY2Fs bCBpZ3RfcmVtb3ZlX2ZiKCkuLi4uCj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJu IHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBzZXR1cF9jcnRjX2Zvcl9jb25uZWN0 b3IoaW50IGZkLCBkcm1Nb2RlUmVzICptciwgZHJtTW9kZUNvbm5lY3RvciAqYywKPiA+ICsJCQkg ICAgIHN0cnVjdCBkcF9jb25uZWN0b3IgKmRwX2Nvbm4pCj4gPiArewo+ID4gKwlkcm1Nb2RlRW5j b2RlciAqZHJtX2VuY29kZXIgPSBOVUxMOwo+ID4gKwlzdHJ1Y3QgZHBfY29ubmVjdG9yICpkcGM7 Cj4gPiArCWludCBpLCBqOwo+ID4gKwlpbnQzMl90IGNydGM7Cj4gPiArCj4gPiArCS8qIFVzZSBh dHRhY2hlZCBlbmNvZGVyIGlmIHBvc3NpYmxlICovCj4gPiArCWlmIChjLT5lbmNvZGVyX2lkKQo+ ID4gKwkJZHJtX2VuY29kZXIgPSBkcm1Nb2RlR2V0RW5jb2RlcihmZCwgYy0+ZW5jb2Rlcl9pZCk7 Cj4gPiArCj4gPiArCWlmIChkcm1fZW5jb2RlciAmJiBkcm1fZW5jb2Rlci0+Y3J0Y19pZCkgewo+ ID4gKwo+ID4gKwkJY3J0YyA9IGRybV9lbmNvZGVyLT5jcnRjX2lkOwo+ID4gKwkJcHJpbnRmKCJF bmNvZGVyIENSVEMgPSAlZFxyXG4iLCBjcnRjKTsKPiA+ICsJCWZvciAoZHBjID0gZHBfY29ubmVj dG9yX2xpc3Q7IGRwYzsgZHBjID0gZHBjLT5uZXh0KSB7Cj4gPiArCQkJaWYgKGRwYy0+Y3J0YyA9 PSBjcnRjKSB7Cj4gPiArCQkJCWNydGMgPSAtMTsKPiA+ICsJCQkJYnJlYWs7Cj4gPiArCQkJfQo+ ID4gKwkJfQo+ID4gKwkJaWYgKGNydGMgPj0gMCkgewo+ID4gKwkJCWRybU1vZGVGcmVlRW5jb2Rl cihkcm1fZW5jb2Rlcik7Cj4gPiArCQkJZHBfY29ubi0+Y3J0YyA9IGNydGM7Cj4gPiArCQkJcmV0 dXJuIDA7Cj4gPiArCQl9Cj4gPiArCQlkcm1Nb2RlRnJlZUVuY29kZXIoZHJtX2VuY29kZXIpOwo+ ID4gKwl9Cj4gPiArCj4gPiArCS8qIENoZWNrIGFsbCBlbmNvZGVyL2NydGMgY29tYmluYXRpb25z ICovCj4gPiArCWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudF9lbmNvZGVyczsgaSsrKSB7Cj4gPiAr CQlkcm1fZW5jb2RlciA9IGRybU1vZGVHZXRFbmNvZGVyKGZkLCBjLT5lbmNvZGVyc1tpXSk7Cj4g PiArCQlpZiAoIWRybV9lbmNvZGVyKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJZm9yIChqID0g MDsgaiA8IG1yLT5jb3VudF9jcnRjczsgaisrKSB7Cj4gPiArCQkJaWYgKCEoZHJtX2VuY29kZXIt PnBvc3NpYmxlX2NydGNzICYgKDEgPDwgaikpKQo+ID4gKwkJCQljb250aW51ZTsKPiA+ICsJCQlj cnRjID0gbXItPmNydGNzW2pdOwo+ID4gKwkJCWZvciAoZHBjID0gZHBfY29ubmVjdG9yX2xpc3Q7 IGRwYzsgZHBjID0gZHBjLT5uZXh0KSB7Cj4gPiArCQkJCWlmIChkcGMtPmNydGMgPT0gY3J0Yykg ewo+ID4gKwkJCQkJY3J0YyA9IC0xOwo+ID4gKwkJCQkJYnJlYWs7Cj4gPiArCQkJCX0KPiA+ICsJ CQl9Cj4gPiArCQkJaWYgKGNydGMgPj0gMCkgewo+ID4gKwkJCQlkcm1Nb2RlRnJlZUVuY29kZXIo ZHJtX2VuY29kZXIpOwo+ID4gKwkJCQlkcF9jb25uLT5jcnRjID0gY3J0YzsKPiA+ICsJCQkJcmV0 dXJuIDA7Cj4gPiArCQkJfQo+ID4gKwkJfQo+ID4gKwkJZHJtTW9kZUZyZWVFbmNvZGVyKGRybV9l bmNvZGVyKTsKPiA+ICsJfQo+ID4gKwlwcmludGYoIk5vIENSVEMgYXZhaWxhYmxlIGZvciBjb25u ZWN0b3IgJXVcclxuIiwgYy0+Y29ubmVjdG9yX2lkKTsKPiA+ICsJcmV0dXJuIC0xOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW50IHNldHVwX2ZyYW1lYnVmZmVycyhpbnQgZHJ2X2ZkLCBzdHJ1 Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uKQo+ID4gK3sKPiA+ICsKPiA+ICsJZHBfY29ubi0+ZmIg PSBpZ3RfY3JlYXRlX2ZiKGRydl9mZCwKPiA+ICsJCQkJICAgIGRwX2Nvbm4tPmZiX3dpZHRoLCBk cF9jb25uLT5mYl9oZWlnaHQsCj4gPiArCQkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ID4g KwkJCQkgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKPiA+ICsJCQkJICAgICZkcF9jb25u LT5mYl92aWRlb19wYXR0ZXJuKTsKPiA+ICsJaWd0X2Fzc2VydChkcF9jb25uLT5mYik7Cj4gPiAr Cj4gPiArCS8qIE1hcCB0aGUgbWFwcGluZyBvZiBHRU0gb2JqZWN0IGludG8gdGhlIHZpcnR1YWwg YWRkcmVzcyBzcGFjZSAqLwo+ID4gKwlkcF9jb25uLT5waXhtYXAgPSBnZW1fbW1hcF9fZ3R0KGRy dl9mZCwKPiA+ICsJCQkJCWRwX2Nvbm4tPmZiX3ZpZGVvX3BhdHRlcm4uZ2VtX2hhbmRsZSwKPiA+ ICsJCQkJCWRwX2Nvbm4tPmZiX3ZpZGVvX3BhdHRlcm4uc2l6ZSwKPiA+ICsJCQkJCVBST1RfUkVB RCB8IFBST1RfV1JJVEUpOwo+ID4gKwlnZW1fc2V0X2RvbWFpbihkcnZfZmQsIGRwX2Nvbm4tPmZi X3ZpZGVvX3BhdHRlcm4uZ2VtX2hhbmRsZSwKPiA+ICsJCSAgICAgICBJOTE1X0dFTV9ET01BSU5f R1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKPiA+ICsJZHBfY29ubi0+ZmJfc2l6ZSA9IGRwX2Nv bm4tPmZiX3ZpZGVvX3BhdHRlcm4uc2l6ZTsKPiA+ICsKPiA+ICsJLyogQWZ0ZXIgZmlsbGluZyB0 aGUgZGV2aWNlIG1lbW9yeSB3aXRoIDBzIGl0IG5lZWRzIHRvIGJlIHVubWFwcGVkICovCj4gPiAr CW1lbXNldChkcF9jb25uLT5waXhtYXAsIDAsIGRwX2Nvbm4tPmZiX3NpemUpOwo+ID4gKwltdW5t YXAoZHBfY29ubi0+cGl4bWFwLCBkcF9jb25uLT5mYl9zaXplKTsKPiBObyBpZ3RfcmVtb3ZlX2Zi KCk/CgpUaGlzIGZyYW1lYnVmZmVyIGdldHMgdXNlZCBpbiB0aGUgc2V0X3ZpZGVvX21vZGUgY2Fs bCBhbmQgZ2V0cyByZW5kZXJlZC4KSSBjYW4gYWRkIGlndF9yZW1vdmVfZmIoKSBjYWxsIGF0IHRo ZSBlbmQgb2YgdGhlIHRlc3QuCj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IHNldHVwX2ZhaWxzYWZlX2ZyYW1lYnVmZmVyKGludCBkcnZfZmQsIHN0cnVj dCBkcF9jb25uZWN0b3IgKmRwX2Nvbm4pCj4gPiArewo+ID4gKwo+ID4gKwlkcF9jb25uLT5mYWls c2FmZV9mYiA9IGlndF9jcmVhdGVfZmIoZHJ2X2ZkLAo+ID4gKwkJCQkJICAgICBkcF9jb25uLT5m YWlsc2FmZV93aWR0aCwKPiA+ICsJCQkJCSAgICAgZHBfY29ubi0+ZmFpbHNhZmVfaGVpZ2h0LAo+ ID4gKwkJCQkJICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ID4gKwkJCQkJICAgICBMT0NBTF9E Uk1fRk9STUFUX01PRF9OT05FLAo+ID4gKwkJCQkJICAgICAmZHBfY29ubi0+ZmJfZmFpbHNhZmVf cGF0dGVybik7Cj4gPiArCWlndF9hc3NlcnQoZHBfY29ubi0+ZmFpbHNhZmVfZmIpOwo+ID4gKwo+ ID4gKwkvKiBNYXAgdGhlIG1hcHBpbmcgb2YgR0VNIG9iamVjdCBpbnRvIHRoZSB2aXJ0dWFsIGFk ZHJlc3Mgc3BhY2UgKi8KPiA+ICsJZHBfY29ubi0+ZmFpbHNhZmVfcGl4bWFwID0gZ2VtX21tYXBf X2d0dChkcnZfZmQsCj4gPiArCQkJCQkJIGRwX2Nvbm4tPmZiX2ZhaWxzYWZlX3BhdHRlcm4uZ2Vt X2hhbmRsZSwKPiA+ICsJCQkJCQkgZHBfY29ubi0+ZmJfZmFpbHNhZmVfcGF0dGVybi5zaXplLAo+ ID4gKwkJCQkJCSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPiA+ICsJZ2VtX3NldF9kb21haW4o ZHJ2X2ZkLCBkcF9jb25uLT5mYl9mYWlsc2FmZV9wYXR0ZXJuLmdlbV9oYW5kbGUsCj4gPiArCQkg ICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Cj4gPiArCWRw X2Nvbm4tPmZhaWxzYWZlX3NpemUgPSBkcF9jb25uLT5mYl9mYWlsc2FmZV9wYXR0ZXJuLnNpemU7 Cj4gPiArCj4gPiArCS8qIEFmdGVyIGZpbGxpbmcgdGhlIGRldmljZSBmcmFtZWJ1ZmZlciB0aGUg bWFwcGVkIG1lbW9yeSBuZWVkcyB0byBiZSBmcmVlZCAqLwo+ID4gKwltZW1zZXQoZHBfY29ubi0+ ZmFpbHNhZmVfcGl4bWFwLCAwLCBkcF9jb25uLT5mYWlsc2FmZV9zaXplKTsKPiA+ICsJbXVubWFw KGRwX2Nvbm4tPmZhaWxzYWZlX3BpeG1hcCwgZHBfY29ubi0+ZmFpbHNhZmVfc2l6ZSk7Cj4gPiAr Cj4gPiArCXJldHVybiAwOwo+ID4gKwo+ID4gK30KPiA+ICsKPiA+ICsKPiA+ICtzdGF0aWMgaW50 IHNldHVwX3ZpZGVvX3BhdHRlcm5fZnJhbWVidWZmZXIoaW50IGRydl9mZCwgc3RydWN0IGRwX2Nv bm5lY3RvciAqZHBfY29ubikKPiA+ICt7Cj4gPiArCXVpbnQzMl90ICB3aWR0aCwgaGVpZ2h0Owo+ ID4gKwo+ID4gKwl3aWR0aCA9IGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5tb2RlLmhkaXNwbGF5Owo+ ID4gKwloZWlnaHQgPSBkcF9jb25uLT50ZXN0X3BhdHRlcm4ubW9kZS52ZGlzcGxheTsKPiA+ICsJ ZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiID0gaWd0X2NyZWF0ZV9mYihkcnZfZmQsCj4gPiArCQkJ CQkJIHdpZHRoLCBoZWlnaHQsCj4gPiArCQkJCQkJIERSTV9GT1JNQVRfWFJHQjg4ODgsCj4gPiAr CQkJCQkJIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gPiArCQkJCQkJICZkcF9jb25uLT50 ZXN0X3BhdHRlcm4uZmJfcGF0dGVybik7Cj4gU29tZWhvdyB0aGlzIHdpbGwgbGVhay4KCkl0cyBu b3QgY2xlYXIgd2h5IHRoaXMgd2lsbCBsZWFrLiBBbGwgdGhlIGV4aXN0aW5nIGlndCB0ZXN0cyB1 c2UgdGhpcyBpZ3RfYXNzZXJ0IHRvIG1ha2Ugc3VyZSAKZmJfaWQgcmV0dXJuZWQgaXMgdmFsaWQg YWZ0ZXIgY2FsbGluZyBpZ3RfY3JlYXRlX2ZiCgo+ID4gKwlpZ3RfYXNzZXJ0KGRwX2Nvbm4tPnRl c3RfcGF0dGVybi5mYik7Cj4gPiArCj4gPiArCS8qIE1hcCB0aGUgbWFwcGluZyBvZiBHRU0gb2Jq ZWN0IGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLwo+ID4gKwlkcF9jb25uLT50ZXN0 X3BhdHRlcm4ucGl4bWFwID0gZ2VtX21tYXBfX2d0dChkcnZfZmQsCj4gPiArCQkJCQkJICAgICBk cF9jb25uLT50ZXN0X3BhdHRlcm4uZmJfcGF0dGVybi5nZW1faGFuZGxlLAo+ID4gKwkJCQkJCSAg ICAgZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRlcm4uc2l6ZSwKPiA+ICsJCQkJCQkgICAg IFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwo+ID4gKwlnZW1fc2V0X2RvbWFpbihkcnZfZmQsIGRw X2Nvbm4tPnRlc3RfcGF0dGVybi5mYl9wYXR0ZXJuLmdlbV9oYW5kbGUsCj4gPiArCQkgICAgICAg STkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Cj4gPiArCj4gPiArCWRw X2Nvbm4tPnRlc3RfcGF0dGVybi5zaXplID0gZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRl cm4uc2l6ZTsKPiA+ICsKPiA+ICsJbWVtc2V0KGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5waXhtYXAs IDAsIGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5zaXplKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4g PiArfQo+ID4gKwo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZmlsbF9mcmFtZWJ1ZmZlcihpbnQgZHJ2 X2ZkLCBzdHJ1Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uKQo+ID4gK3sKPiA+ICsJaW50IHJldDsK PiA+ICsJdWludDMyX3QgdGlsZV9oZWlnaHQsIHRpbGVfd2lkdGgsIHdpZHRoLCBoZWlnaHQ7Cj4g PiArCXVpbnQzMl90ICpyZWRfcHRyLCAqZ3JlZW5fcHRyLCAqYmx1ZV9wdHIsICp3aGl0ZV9wdHIs ICpzcmNfcHRyLCAqZHN0X3B0cjsKPiA+ICsJaW50IHgsIHk7Cj4gPiArCWludDMyX3QgcGl4ZWxf dmFsOwo+ID4gKwo+ID4gKwl3aWR0aCA9IGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5tb2RlLmhkaXNw bGF5Owo+ID4gKwloZWlnaHQgPSBkcF9jb25uLT50ZXN0X3BhdHRlcm4ubW9kZS52ZGlzcGxheTsK PiA+ICsKPiA+ICsJdGlsZV9oZWlnaHQgPSA2NDsKPiA+ICsJdGlsZV93aWR0aCA9IHBvdygyLCBk cF9jb25uLT50ZXN0X3BhdHRlcm4uYml0ZGVwdGgpOwo+IFRoZXNlIGFyZSBhbGwgaW50cywgc28g d2h5IG5vdCAoMSA8PCBkcF9jb25uLT50ZXN0X3BhdHRlcm4uYml0ZGVwdGgpPwo+ID4gKwo+ID4g KwlyZWRfcHRyID0gZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnBpeG1hcDsKPiA+ICsJZ3JlZW5fcHRy ID0gcmVkX3B0ciArICh3aWR0aCAqIHRpbGVfaGVpZ2h0KTsKPiA+ICsJYmx1ZV9wdHIgPSBncmVl bl9wdHIgKyAod2lkdGggKiB0aWxlX2hlaWdodCk7Cj4gPiArCXdoaXRlX3B0ciA9IGJsdWVfcHRy ICsgKHdpZHRoICogdGlsZV9oZWlnaHQpOwo+ID4gKwl4ID0gMDsKPiA+ICsKPiA+ICsJLyogRmls bCB0aGUgZnJhbWUgYnVmZmVyIHdpdGggdmlkZW8gcGF0dGVybiBmcm9tIENUUyAzLjEuNSAqLwo+ ID4gKwl3aGlsZSAoeCA8IHdpZHRoKSB7Cj4gPiArCQlmb3IgKHBpeGVsX3ZhbCA9IDA7IHBpeGVs X3ZhbCA8IDI1NjsKPiA+ICsJCSAgICAgcGl4ZWxfdmFsID0gcGl4ZWxfdmFsICsgKDI1NiAvIHRp bGVfd2lkdGgpKSB7Cj4gPiArCQkJcmVkX3B0clt4XSA9IHBpeGVsX3ZhbCA8PCAxNjsKPiA+ICsJ CQlncmVlbl9wdHJbeF0gPSBwaXhlbF92YWwgPDwgODsKPiA+ICsJCQlibHVlX3B0clt4XSA9IHBp eGVsX3ZhbCA8PCAwOwo+ID4gKwkJCXdoaXRlX3B0clt4XSA9IHJlZF9wdHJbeF0gfCBncmVlbl9w dHJbeF0gfCBibHVlX3B0clt4XTsKPiA+ICsJCQlpZiAoKyt4ID49IHdpZHRoKQo+ID4gKwkJCQli cmVhazsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp IHsKPiA+ICsJCWlmICh5ID09IDAgfHwgeSA9PSA2NCB8fCB5ID09IDEyOCB8fCB5ID09IDE5MikK PiA+ICsJCQljb250aW51ZTsKPiA+ICsJCXN3aXRjaCAoKHkgLyB0aWxlX2hlaWdodCkgJSA0KSB7 Cj4gPiArCQljYXNlIDA6Cj4gPiArCQkJc3JjX3B0ciA9IHJlZF9wdHI7Cj4gPiArCQkJYnJlYWs7 Cj4gPiArCQljYXNlIDE6Cj4gPiArCQkJc3JjX3B0ciA9IGdyZWVuX3B0cjsKPiA+ICsJCQlicmVh azsKPiA+ICsJCWNhc2UgMjoKPiA+ICsJCQlzcmNfcHRyID0gYmx1ZV9wdHI7Cj4gPiArCQkJYnJl YWs7Cj4gPiArCQljYXNlIDM6Cj4gPiArCQkJc3JjX3B0ciA9IHdoaXRlX3B0cjsKPiA+ICsJCQli cmVhazsKPiA+ICsJCX0KPiA+ICsJCWRzdF9wdHIgPSBkcF9jb25uLT50ZXN0X3BhdHRlcm4ucGl4 bWFwICsgKHkgKiB3aWR0aCk7Cj4gPiArCQltZW1jcHkoZHN0X3B0ciwgc3JjX3B0ciwgKHdpZHRo ICogNCkpOwo+ID4gKwl9Cj4gPiArCW11bm1hcChkcF9jb25uLT50ZXN0X3BhdHRlcm4ucGl4bWFw LAo+ID4gKwkgICAgICAgZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnNpemUpOwo+ID4gKwlyZXR1cm4g MDsKPiA+ICt9Cj4gPiArCj4gPiArCj4gPiArc3RhdGljIGludCBzZXRfdmlkZW9fbW9kZShpbnQg ZHJ2X2ZkLCBpbnQgbW9kZSwgc3RydWN0IGRwX2Nvbm5lY3RvciAqdGVzdF9jb25uZWN0b3IpCj4g PiArewo+ID4gKwlkcm1Nb2RlTW9kZUluZm8gKnJlcXVlc3RlZF9tb2RlOwo+ID4gKwl1aW50MzJf dCByZXF1aXJlZF9mYjsKPiA+ICsJaW50IHJldCA9IDA7Cj4gPiArCj4gPiArCXN3aXRjaCAobW9k ZSkgewo+ID4gKwljYXNlIElOVEVMX01PREVfTk9ORToKPiA+ICsJCXByaW50ZigiTk9ORVxyXG4i KTsKPiA+ICsJCXJldCA9IGRybU1vZGVTZXRDcnRjKGRydl9mZCwgdGVzdF9jb25uZWN0b3ItPmNy dGMsCj4gPiArCQkJCSAgICAgLTEsIDAsIDAsIE5VTEwsIDAsIE5VTEwpOwo+ID4gKwkJZ290byBv dXQ7Cj4gPiArCWNhc2UgSU5URUxfTU9ERV9QUkVGRVJSRUQ6Cj4gPiArCQlwcmludGYoIlBSRUZF UlJFRFxyXG4iKTsKPiA+ICsJCXJlcXVlc3RlZF9tb2RlID0gICZ0ZXN0X2Nvbm5lY3Rvci0+bW9k ZV9wcmVmZXJyZWQ7Cj4gPiArCQlyZXF1aXJlZF9mYiA9IHRlc3RfY29ubmVjdG9yLT5mYjsKPiA+ ICsJCWJyZWFrOwo+ID4gKwljYXNlIElOVEVMX01PREVfU1RBTkRBUkQ6Cj4gPiArCQlwcmludGYo IlNUQU5EQVJEXHJcbiIpOwo+ID4gKwkJcmVxdWVzdGVkX21vZGUgPSAgJnRlc3RfY29ubmVjdG9y LT5tb2RlX3N0YW5kYXJkOwo+ID4gKwkJcmVxdWlyZWRfZmIgPSB0ZXN0X2Nvbm5lY3Rvci0+ZmI7 Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSBJTlRFTF9NT0RFX0ZBSUxTQUZFOgo+ID4gKwkJcHJp bnRmKCJGQUlMU0FGRVxyXG4iKTsKPiA+ICsJCXJlcXVlc3RlZF9tb2RlID0gICZ0ZXN0X2Nvbm5l Y3Rvci0+bW9kZV9mYWlsc2FmZTsKPiA+ICsJCXJlcXVpcmVkX2ZiID0gdGVzdF9jb25uZWN0b3It PmZhaWxzYWZlX2ZiOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgSU5URUxfTU9ERV9WSURFT19Q QVRURVJOX1RFU1Q6Cj4gPiArCQlwcmludGYoIlZJREVPIFBBVFRFUk4gVEVTVFxyXG4iKTsKPiA+ ICsJCXJlcXVlc3RlZF9tb2RlID0gJnRlc3RfY29ubmVjdG9yLT50ZXN0X3BhdHRlcm4ubW9kZTsK PiA+ICsJCXJlcXVpcmVkX2ZiID0gdGVzdF9jb25uZWN0b3ItPnRlc3RfcGF0dGVybi5mYjsKPiA+ ICsJCWJyZWFrOwo+ID4gKwljYXNlIElOVEVMX01PREVfSU5WQUxJRDoKPiA+ICsJZGVmYXVsdDoK PiA+ICsJCXByaW50ZigiSU5WQUxJRCEgKCUwOHgpIE1vZGUgc2V0IGFib3J0ZWQhXHJcbiIsIG1v ZGUpOwo+ID4gKwkJcmV0dXJuIC0xOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IGRybU1vZGVT ZXRDcnRjKGRydl9mZCwgdGVzdF9jb25uZWN0b3ItPmNydGMsIHJlcXVpcmVkX2ZiLCAwLCAwLAo+ ID4gKwkJCSAgICAgJnRlc3RfY29ubmVjdG9yLT5jb25uLCAxLCByZXF1ZXN0ZWRfbW9kZSk7Cj4g PiArCj4gPiArb3V0Ogo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlwcmludGYoIkZhaWxlZCB0byBz ZXQgQ1JUQyBmb3IgY29ubmVjdG9yICV1XHJcbiIsCj4gPiArCQkgICAgICAgdGVzdF9jb25uZWN0 b3ItPmNvbm4pOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkIHNodXRkb3duKGludCBkcnZfZmQpCj4gPiArewo+ID4gKwlpbnQgaTsK PiA+ICsJc3RydWN0IGRwX2Nvbm5lY3RvciAqaW5kZXggPSBkcF9jb25uZWN0b3JfbGlzdCwgKnBy ZXY7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBkcF9jb25uZWN0b3JfY291bnQ7IGkrKykg ewo+ID4gKwo+ID4gKwkJa21zdGVzdF9kdW1wX21vZGUoJmRlZmF1bHRfY3J0Yy0+bW9kZSk7Cj4g PiArCj4gPiArCQlwcmV2ID0gaW5kZXg7Cj4gPiArCQlpbmRleCA9IGluZGV4LT5uZXh0Owo+ID4g KwkJZnJlZShwcmV2KTsKPiA+ICsJCXByZXYgPSBOVUxMOwo+ID4gKwl9Cj4gPiArCWRwX2Nvbm5l Y3Rvcl9saXN0ID0gTlVMTDsKPiA+ICsJZHBfY29ubmVjdG9yX2NvdW50ID0gMDsKPiA+ICsKPiA+ ICt9Cj4gPiArCj4gPiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiA+ICt7Cj4g PiArCWludCBzdGF0dXMgPSAwOwo+ID4gKwlpbnQgZHJ2X2ZkID0gMDsKPiA+ICsJZHJtTW9kZVJl c1B0ciBtb2RlX3Jlc291cmNlcyA9IE5VTEw7Cj4gPiArCWludCBkb25lID0gMDsKPiA+ICsJY2hh ciBpbnB1dDsKPiA+ICsJdW5zaWduZWQgbG9uZyB0ZXN0X3R5cGU7Cj4gPiArCj4gPiArCWRwX2Nv bm5lY3Rvcl9saXN0ID0gTlVMTDsKPiBCZWluZyBnbG9iYWwgaXQncyBhbHJlYWR5IGluaXRpYWxp emVkIHRvIE5VTEwuCj4gPiArCWRwX2Nvbm5lY3Rvcl9jb3VudCA9IDA7Cj4gU2FtZSBoZXJlLgo+ ID4gKwo+ID4gKwkvKiBTZXR1cCBpbnB1dCBmb3Iga2V5Ym9hcmQgaGFuZGxpbmcgLSBmcm9tIGlu cHV0LmMgKi8KPiA+ICsJc2V0X2NvbmlvX3Rlcm1pbmFsX21vZGUoKTsKPiA+ICsKPiA+ICsJcHJp bnRmKCJBVFRFTlRJT046XHJcbiIKPiA+ICsJICAgICAgICIgICBFbnN1cmUgdGhhdCBubyBkaXNw bGF5IG1hbmFnZXIgaXMgcnVubmluZ1xyXG4iCj4gPiArCSAgICAgICAiICAgQXBwIG11c3QgYmUg cnVuIGFzIHJvb3QgaW4gY29uc29sZS90ZXh0IG1vZGVcclxuIgo+ID4gKwkgICAgICAgIiAgIENv bnRpbnVlPyAoWS9OKVxyXG4iCj4gPiArCSAgICAgICApOwo+ID4gKwlpbnB1dCA9IGdldGNoYXIo KTsKPiA+ICsKPiA+ICsJaWYgKGlucHV0ICE9ICdZJyAmJiBpbnB1dCAhPSAneScpCj4gPiArCQln b3RvIGV4aXQ7Cj4gPiArCj4gPiArCS8qIFNldCB1cCBEUk0gZGV2aWNlIGJlZm9yZSBzdGFydGlu ZyBhbnkgdGVzdHMgKi8KPiA+ICsJc3RhdHVzID0gc2V0dXBfZHJtKCZkcnZfZmQpOwo+ID4gKwlp ZiAoc3RhdHVzID09IC0xKQo+ID4gKwkJZ290byBleGl0Owo+ID4gKwkvKiBTYXZlIHRoZSBkZWFm dWx0IG1vZGUgdGhhdCBuZWVkcyB0byBiZSByZXN0b3JlZCBhZnRlciBldmVyeSB0ZXN0ICovCj4g PiArCXNhdmVfZGVmYXVsdF9tb2RlKGRydl9mZCk7Cj4gPiArCS8qIENsb3NlIHRoZSBEUk0gZGV2 aWNlIHNvIGl0IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIExpbmsgdHJhaW5pbmcgKi8KPiA+ICsJ c3RhdHVzID0gY2xvc2UoZHJ2X2ZkKTsKPiA+ICsJaWYgKHN0YXR1cykKPiA+ICsJCXByaW50Zigi RXJyb3I6IEZhaWxlZCB0byBjbG9zZSBpOTE1IGRyaXZlclxyXG4iKTsKPiA+ICsJc2V0dXBfZGVi dWdmc19maWxlcygpOwo+ID4gKwo+ID4gKwlwcmludGYoIldhaXRpbmcgZm9yIHRlc3QgcmVxdWVz dHMuICdYJyBvciAnUScgZXhpdHNcclxuIik7Cj4gPiArCj4gPiArCXdoaWxlICghZG9uZSkgewo+ IEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBnZXRjaGFyKCkgaXMgYmxvY2tlZCBzbyBrYmhpdCgpIGlz IHVzZWxlc3MuLi4KCm9ubHkgaWYgYW55IGtleSBwcmVzcyBpcyBkZXRlY3RlZCB0aHJvdWdoIGti aGl0KCksIHRoZW4gaXQgY2FsbHMgZ2V0Y2hhciB0byBjYXRjaCAgdGhlCmtleSBwcmVzc2VkIGFu ZCB1c2VzIHRoYXQgdG8gcXVpdCBmcm9tIHRoZSB0b29sLgpVbnRpbCB0aGVuIGl0IHdpbGwganVz dCBzcGluIHRocm91Z2ggdGhlIHdoaWxlIGxvb3Agd2FpdGluZyBmb3IgdGVzdF9hY3RpdmUgdG8g YmVjb21lIDEKd2hpY2ggaGFwcGVucyBhZnRlciB0aGUga2VybmVsIHNldHMgdGVzdCBhY3RpdmUg dGhyb3VnaCBkZWJ1Z2ZzIG5vZGUuCkkgaGF2ZSB2ZXJpZmllZCB0aGlzIGJlaGFpdm91ciBhbmQg c2VlbXMgdG8gYmUgd29ya2luZy4KPiA+ICsJCWlmIChrYmhpdCgpKSB7Cj4gPiArCQkJaW5wdXQg PSBnZXRjaGFyKCk7Cj4gPiArCQkJc3dpdGNoIChpbnB1dCkgewo+ID4gKwkJCWNhc2UgJ3EnOgo+ ID4gKwkJCWNhc2UgJ1EnOgo+ID4gKwkJCWNhc2UgJ3gnOgo+ID4gKwkJCWNhc2UgJ1gnOgo+ID4g KwkJCQlkb25lID0gMTsKPiA+ICsJCQkJYnJlYWs7Cj4gPiArCQkJfQo+ID4gKwkJfQo+ID4gKwo+ ID4gKwkJdXNsZWVwKDEwMDApOwo+ID4gKwo+ID4gKwkJaWYgKGNoZWNrX3Rlc3RfYWN0aXZlKCkp IHsKPiA+ICsKPiA+ICsJCQkvKiBPcGVuIHRoZSBEUk0gZGV2aWNlIGFuZCByZXN0b3JlIGRlZmF1 bHQgbW9kZSBiZWZvcmUKPiA+ICsJCQkgKiBlYWNoIHRlc3QKPiA+ICsJCQkgKi8KPiA+ICsJCQlz dGF0dXMgPSBzZXR1cF9kcm0oJmRydl9mZCk7Cj4gPiArCQkJaWYgKHN0YXR1cyA9PSAtMSkKPiA+ ICsJCQkJZ290byBleGl0Owo+ID4gKwkJCXJlc3RvcmVfZGVmYXVsdF9tb2RlKGRydl9mZCk7Cj4g PiArCj4gPiArCQkJdGVzdF90eXBlID0gZ2V0X3Rlc3RfdHlwZSgpOwo+ID4gKwkJCWlmICgvKnRl c3RfdHlwZSA9PSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTiB8fCAqLwo+ID4gKwkJCSAgICB0 ZXN0X3R5cGUgPT0gRFBfVEVTVF9MSU5LX0VESURfUkVBRCkgewo+ID4gKwkJCQlwcm9jZXNzX3Rl c3RfcmVxdWVzdChkcnZfZmQsIHRlc3RfdHlwZSwKPiA+ICsJCQkJCQkgICAgIG1vZGVfcmVzb3Vy Y2VzKTsKPiA+ICsJCQkJc2h1dGRvd24oZHJ2X2ZkKTsKPiA+ICsJCQkJZHJtTW9kZUZyZWVSZXNv dXJjZXMobW9kZV9yZXNvdXJjZXMpOwo+ID4gKwkJCQltb2RlX3Jlc291cmNlcyA9IE5VTEw7Cj4g PiArCQkJCXZpZGVvX3BhdHRlcm5fZmxhZyA9IGZhbHNlOwo+IEkgZG8gbm90IGxpa2UgZ2xvYmFs IHZhcmlhYmxlIHRoYXQgZ2V0cyBtb2RpZmllZCBzb21lcGxhY2UgZWxzZS4uLgoKSSBjYW4gZ2V0 IHJpZCBvZiB0aGlzIGdsb2JhbCBmbGFnIGFuZCBwYXNzIHRoaXMgYXMgYW4gYXJndW1lbnQgdG8g CnNldHVwX2Nvbm5lY3RvciBmdW5jdGlvbiBzbyB0aGF0IGl0IGNhbiBzZXQgdGhlbSB1cCBkaWZm ZXJlbnRseSBpZiBpdAppcyB2aWRlbyBwYXR0ZXJuIHRlc3QuIAo+ID4gKwkJCX0gZWxzZSB7Cj4g PiArCQkJCXByaW50ZigiVGVzdCB0eXBlIHJlY2VpdmVkIGlzIG5vdCBFRElEIG9yIgo+ID4gKwkJ CQkJIlZpZGVvIFBhdHRlcm5cclxuIik7Cj4gPiArCQkJCWNsZWFyX3Rlc3RfYWN0aXZlKCk7Cj4g PiArCQkJfQo+ID4gKwkJCS8qIENsb3NlIGRybSBkZXZpY2UgYWZ0ZXIgZWFjaCB0ZXN0ICovCj4g PiArCQkJY2xvc2UoZHJ2X2ZkKTsKPiA+ICsJCQl1c2xlZXAoMTAwMDApOwo+IFdoeSB3YWl0IGZv ciAxMHM/CgpUaGlzIGlzIHRvIHBvbGwgdGhlIHRlc3QgYWN0aXZlIGZsYWcgZXZlcnkgMTAgc2Vj cywgYXMgdGhlIENvbXBsaWFuY2UgdGVzdAp0aW1lcyBvdXQgYWZ0ZXIgMTAgc2VjcyBhbmQgc2Vu ZHMgdGhlIG5ldyB0ZXN0IHJlcXVlc3QgYXMgcGVyIENUUyBzcGVjLgo+ID4gKwkJfQo+ID4gKwo+ ID4gKwl9Cj4gPiArCj4gPiArZXhpdDoKPiA+ICsJY2xlYW51cF9kZWJ1Z2ZzKCk7Cj4gPiArCS8q IFNldCBVcCBEUk0gZGV2aWNlIGFuZCByZXN0b3JlIGRlZmF1bHQgbW9kZSBiZWZvcmUgZXhpdCAq Lwo+ID4gKwlzZXR1cF9kcm0oJmRydl9mZCk7Cj4gPiArCXJlc3RvcmVfZGVmYXVsdF9tb2RlKGRy dl9mZCk7Cj4gPiArCXN0YXR1cyA9IGNsb3NlKGRydl9mZCk7Cj4gPiArCWlmIChzdGF0dXMpCj4g PiArCQlwcmludGYoIkVycm9yOiBGYWlsZWQgdG8gY2xvc2UgaTkxNSBkcml2ZXJcclxuIik7Cj4g PiArCWRybU1vZGVGcmVlQ3J0YyhkZWZhdWx0X2NydGMpOwo+ID4gKwo+ID4gKwlwcmludGYoIkNv bXBsaWFuY2UgdGVzdGluZyBhcHBsaWNhdGlvbiBleGl0aW5nLlxyXG4iCj4gPiArCSAgICAgICAi SWYgdGVzdGluZyBoYXMgYmVlbiBwZXJmb3JtZWQsIHlvdSBtYXkgd2FudCB0byByZXN0YXJ0XHJc biIKPiA+ICsJICAgICAgICJ0aGUgc3lzdGVtIHRvIGVuc3VyZSBpdCByZXR1cm5zIHRvIG5vcm1h bCBvcGVyYXRpb24uXHJcbiIpOwo+ID4gKwlpZ3RfZXhpdCgpOwo+ID4gKwo+ID4gKwlyZXR1cm4g c3RhdHVzOwo+ID4gKwo+ID4gK30KPiA+IC0tIAo+ID4gMS45LjEKPiA+IAoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=