From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] tests/gem_softpin: New tests for softpin feature Date: Thu, 3 Dec 2015 11:42:58 +0000 Message-ID: <56602AC2.7010107@linux.intel.com> References: <1449059089-23041-1-git-send-email-vinay.belgaumkar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id BCA7F7A142 for ; Thu, 3 Dec 2015 03:43:00 -0800 (PST) In-Reply-To: <1449059089-23041-1-git-send-email-vinay.belgaumkar@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Vinay Belgaumkar , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKT24gMDIvMTIvMTUgMTI6MjQsIFZpbmF5IEJlbGdhdW1rYXIgd3JvdGU6Cj4gVGhlc2Ug dGVzdHMgZXhlcmNpc2UgdGhlIHVzZXJwdHIgaW9jdGwgdG8gY3JlYXRlIHNoYXJlZCBidWZmZXJz Cj4gYmV0d2VlbiBDUFUgYW5kIEdQVS4gVGhleSBjb250YWluIGVycm9yIGFuZCBub3JtYWwgdXNh Z2Ugc2NlbmFyaW9zLgo+IFRoZXkgYWxzbyBjb250YWluIGEgY291cGxlIG9mIHN0cmVzcyB0ZXN0 cyB3aGljaCBjb3B5IGJ1ZmZlcnMgYmV0d2Vlbgo+IENQVSBhbmQgR1BVLiBUaGVzZSB0ZXN0cyBy ZWx5IG9uIHRoZSBzb2Z0cGluIHBhdGNoIGluIG9yZGVyIHRvIHBpbiBidWZmZXJzCj4gdG8gYSBj ZXJ0YWluIFZBLgo+Cj4gQ2F2ZWF0OiBUaGVzZSB0ZXN0cyB3ZXJlIGRlc2lnbmVkIHRvIHJ1biBv biA2NC1iaXQgc3lzdGVtLiBGdXR1cmUgd29yawo+IGluY2x1ZGVzIGFkZGluZyBsb2dpYyB0byBl bnN1cmUgdGhlc2UgdGVzdHMgY2FuIHJ1biBvbiAzMi1iaXQgc3lzdGVtcyB3aXRoCj4gUFBHVFQg c3VwcG9ydC4gU29tZSB0ZXN0cyBhcmUgY3VycmVudGx5IGRpc2FibGVkIGZvciAzMi1iaXQgc3lz dGVtcyBmb3IgdGhhdAo+IHJlYXNvbi4KPgo+IHYyOiBBZGRlZCBjYyBhbmQgc2lnbmVkLW9mZi1i eSBmaWVsZHMKPgo+IHYzOiBGaXhlZCByZXZpZXcgY29tbWVudHMsIGFkZGVkIGhlbHBlciBmdW5j dGlvbnMuIFJlbW92ZWQgdXNlcnB0ciBlcnJvcgo+IHNjZW5hcmlvcyBjb3ZlcmVkIGJ5IGV4aXN0 aW5nIHVzZXJwdHIgdGVzdHMuIE1vZGlmaWVkIHN0cmVzcyB0ZXN0IHRvIGhhdmUKPiAxMDBLIGJ1 ZmZlcnMsIGl0IG5vdyBydW5zIGZvciB+MzAgbWlucywgY2hlY2tzIGV2ZXJ5IGVsZW1lbnQgaGFz IGJlZW4gd3JpdHRlbgo+IHRvIGNvcnJlY3RseSwgYW5kIHBpbnMgYnVmZmVycyBhdCBkaWZmZXJl bnQgVk1Bcy4KPgo+IHY0OiBDaGFuZ2VkIG5hbWUgdG8gZ2VtX3NvZnRwaW4KPgo+IHY1OiBNb3Jl IGZpeGVzLiBSZW1vdmVkIHRoZSBmaWxlIGJhc2VkIHRlc3RzLCB3aWxsIG1vdmUgdGhlbSB0byB1 c2VycHRyIHRlc3RzLgo+IEFkZGVkIGEgZnVuY3Rpb24gdGhhdCB2YWxpZGF0ZXMgYXBwcm9wcmlh dGUgUFBHVFQgc3VwcG9ydCBiZWZvcmUgcnVubmluZyB0ZXN0cy4KPiBPcHRpbWl6ZWQgc3RhY2sg c3BhY2UgYW5kIG1lbW9yeSBmb290cHJpbnQgaW4gc3RyZXNzIHRlc3QuIFJlbW92ZWQgdGhlIGV2 aWN0aW9uCj4gdGVzdCwgd2lsbCBhZGQgaXQgYmFjayBhZnRlciB2ZXJpZnlpbmcgcHJvcGVyIGZ1 bmN0aW9uYWxpdHkuCj4KPiB2NjogU3BsaXQgYmFzaWMgdGVzdCBpbnRvIHVzZXJwdHIgYW5kIGJv Cj4gRml4ZWQgc29tZSBjb2Rpbmcgc3R5bGUgaXNzdWVzLgo+Cj4gdjc6IEVuaGFuY2VkIGludmFs aWQgdm1hIHBpbm5pbmcgdGVzdCB0byB2ZXJpZnkgMzItYml0IFBQR1RUIGZ1bmN0aW9uYWxpdHku Cj4gRW5hYmxlZCB0aGUgdGVzdCBmb3IgMzItYml0IFBQR1RUIHN5c3RlbXMsIGFuZCB2ZXJpZnkg cGlubmluZyBmYWlscyBhYm92ZQo+IDMyLWJpdCBhZGRyZXNzZXMuIEVuaGFuY2VkIHRoZSBoaWdo IGFkcmVzcyBwaW5uaW5nIHRlc3QgdG8gZW5zdXJlIHBpbm5pbmcKPiBmYWlscyB3aGVuIEVYRUNf T0JKRUNUX1BJTk5FRCBmbGFnIGlzIG5vdCB1c2VkLiBTb21lIG1vcmUgY29zbWV0aWMgZml4ZXMg dG8KPiBjbG9zZSBidWZmZXIgaGFuZGxlcy4gQ2hhbmdlZCB1c2VycHRyIGZ1bmN0aW9uIHRvIHVz ZWQgc3luY2hyb25pemVkIG9wZXJhdGlvbnMuCj4KPiB2ODogTWlub3IgY2hhbmdlIHRvIGhpZ2gg YWRkcmVzcyBwaW5uaW5nIHRlc3QgYXMgcGVyIGNvbW1lbnQuCj4KPiB2OTogU2tpcCB0aGUgdGVz dHMgaWYgc29mdHBpbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50Lgo+Cj4gQ2M6IE1pY2hlbCBUaGll cnJ5IDxtaWNoZWwudGhpZXJyeUBpbnRlbC5jb20+Cj4gQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0 a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogVmluYXkgQmVsZ2F1bWthciA8 dmluYXkuYmVsZ2F1bWthckBpbnRlbC5jb20+Cj4gLS0tCj4gICB0ZXN0cy8uZ2l0aWdub3JlICAg ICAgIHwgICAgMSArCj4gICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAgMSArCj4gICB0ZXN0 cy9nZW1fc29mdHBpbi5jICAgIHwgMTA4NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPiAgIDMgZmlsZXMgY2hhbmdlZCwgMTA4OCBpbnNlcnRpb25zKCsp Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2VtX3NvZnRwaW4uYwoKR2l0IGFtIGNvbXBs YWluZWQgKGEgbG90KSBhYm91dCB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gSSBhcHBsaWVkIHRo ZSAKcGF0Y2ggbG9jYWxseS4gSWYgeW91IGZpeCB0aGF0IHlvdSBjYW4gYWRkOgoKUmV2aWV3ZWQt Ynk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CgpSZWdhcmRzLAoK VHZydGtvCgo+Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzLy5naXRpZ25vcmUgYi90ZXN0cy8uZ2l0aWdu b3JlCj4gaW5kZXggODBhZjlhNy4uNDI0ODcwYiAxMDA2NDQKPiAtLS0gYS90ZXN0cy8uZ2l0aWdu b3JlCj4gKysrIGIvdGVzdHMvLmdpdGlnbm9yZQo+IEBAIC0yMSw2ICsyMSw3IEBAIGdlbV9iYWRf YmxpdAo+ICAgZ2VtX2JhZF9sZW5ndGgKPiAgIGdlbV9iYWRfcmVsb2MKPiAgIGdlbV9iYXNpYwo+ ICtnZW1fc29mdHBpbgo+ICAgZ2VtX2NhY2hpbmcKPiAgIGdlbV9jbG9zZV9yYWNlCj4gICBnZW1f Y29uY3VycmVudF9hbGwKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rl c3RzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCA4ZmIyZGU4Li4yMDA4ZDRhIDEwMDY0NAo+IC0t LSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz Cj4gQEAgLTExLDYgKzExLDcgQEAgVEVTVFNfcHJvZ3NfTSA9IFwKPiAgIAlkcnZfaGFuZ21hbiBc Cj4gICAJZ2VtX2JhZF9yZWxvYyBcCj4gICAJZ2VtX2Jhc2ljIFwKPiArCWdlbV9zb2Z0cGluIFwK PiAgIAlnZW1fY2FjaGluZyBcCj4gICAJZ2VtX2Nsb3NlX3JhY2UgXAo+ICAgCWdlbV9jb25jdXJy ZW50X2JsaXQgXAo+IGRpZmYgLS1naXQgYS90ZXN0cy9nZW1fc29mdHBpbi5jIGIvdGVzdHMvZ2Vt X3NvZnRwaW4uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZmFjODNh MQo+IC0tLSAvZGV2L251bGwKPiArKysgYi90ZXN0cy9nZW1fc29mdHBpbi5jCj4gQEAgLTAsMCAr MSwxMDg2IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9u Cj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAg IFZpbmF5IEJlbGdhdW1rYXIgPHZpbmF5LmJlbGdhdW1rYXJAaW50ZWwuY29tPgo+ICsgKiAgICBU aG9tYXMgRGFuaWVsIDx0aG9tYXMuZGFuaWVsQGludGVsLmNvbT4KPiArICoKPiArICovCj4gKwo+ ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUg PHN0ZGludC5oPgo+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNsdWRl IDxlcnJuby5oPgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy9pb2N0 bC5oPgo+ICsjaW5jbHVkZSA8c3lzL3RpbWUuaD4KPiArI2luY2x1ZGUgPG1hbGxvYy5oPgo+ICsj aW5jbHVkZSAiZHJtLmgiCj4gKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgo+ICsjaW5jbHVk ZSAiZHJtdGVzdC5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgo+ICsjaW5jbHVkZSAi aW50ZWxfaW8uaCIKPiArI2luY2x1ZGUgImk5MTVfZHJtLmgiCj4gKyNpbmNsdWRlIDxhc3NlcnQu aD4KPiArI2luY2x1ZGUgPHN5cy93YWl0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvaXBjLmg+Cj4gKyNp bmNsdWRlIDxzeXMvc2htLmg+Cj4gKyNpbmNsdWRlICJpZ3Rfa21zLmgiCj4gKyNpbmNsdWRlIDxp bnR0eXBlcy5oPgo+ICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3Rh dC5oPgo+ICsKPiArI2RlZmluZSBCT19TSVpFIDQwOTYKPiArI2RlZmluZSBNVUxUSVBBR0VfQk9f U0laRSAyICogQk9fU0laRQo+ICsjZGVmaW5lIFNUT1JFX0JBVENIX0JVRkZFUl9TSVpFIDQKPiAr I2RlZmluZSBFWEVDX09CSkVDVF9QSU5ORUQJKDE8PDQpCj4gKyNkZWZpbmUgRVhFQ19PQkpFQ1Rf U1VQUE9SVFNfNDhCX0FERFJFU1MgKDE8PDMpCj4gKyNkZWZpbmUgU0hBUkVEX0JVRkZFUl9TSVpF IDQwOTYKPiArCj4gK3R5cGVkZWYgc3RydWN0IGRybV9pOTE1X2dlbV91c2VycHRyIGk5MTVfZ2Vt X3VzZXJwdHI7Cj4gKwo+ICtzdGF0aWMgdWludDMyX3QgaW5pdF91c2VycHRyKGludCBmZCwgaTkx NV9nZW1fdXNlcnB0ciAqLCB2b2lkICpwdHIsIHVpbnQ2NF90IHNpemUpOwo+ICtzdGF0aWMgdm9p ZCAqY3JlYXRlX21lbV9idWZmZXIodWludDY0X3Qgc2l6ZSk7Cj4gK3N0YXRpYyBpbnQgZ2VtX2Nh bGxfdXNlcnB0cl9pb2N0bChpbnQgZmQsIGk5MTVfZ2VtX3VzZXJwdHIgKnVzZXJwdHIpOwo+ICtz dGF0aWMgdm9pZCBnZW1fcGluX3VzZXJwdHJfdGVzdCh2b2lkKTsKPiArc3RhdGljIHZvaWQgZ2Vt X3Bpbl9ib190ZXN0KHZvaWQpOwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX2ludmFsaWRfdm1hX3Rl c3Qodm9pZCk7Cj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fb3ZlcmxhcF90ZXN0KHZvaWQpOwo+ICtz dGF0aWMgdm9pZCBnZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0KHZvaWQpOwo+ICsKPiArI2RlZmlu ZSBOT19QUEdUVCAwCj4gKyNkZWZpbmUgQUxJQVNJTkdfUFBHVFQgMQo+ICsjZGVmaW5lIEZVTExf MzJfQklUX1BQR1RUIDIKPiArI2RlZmluZSBGVUxMXzQ4X0JJVF9QUEdUVCAzCj4gKy8qIHVzZXNf ZnVsbF9wcGd0dAo+ICsgKiBGaW5kcyBzdXBwb3J0ZWQgUFBHVFQgZGV0YWlscy4KPiArICogQGZk IERSTSBmZAo+ICsgKiBAbWluIGNhbiBiZQo+ICsgKiAwIC0gTm8gUFBHVFQKPiArICogMSAtIEFs aWFzaW5nIFBQR1RUCj4gKyAqIDIgLSBGdWxsIFBQR1RUICgzMmIpCj4gKyAqIDMgLSBGdWxsIFBQ R1RUICg0OGIpCj4gKyAqIFJFVFVSTlMgdHJ1ZS9mYWxzZSBpZiBtaW4gc3VwcG9ydCBpcyBwcmVz ZW50Cj4gKyovCj4gK3N0YXRpYyBib29sIHVzZXNfZnVsbF9wcGd0dChpbnQgZmQsIGludCBtaW4p Cj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSBncDsKPiArCWludCB2YWwgPSAwOwo+ ICsKPiArCW1lbXNldCgmZ3AsIDAsIHNpemVvZihncCkpOwo+ICsJZ3AucGFyYW0gPSAxODsgLyog SEFTX0FMSUFTSU5HX1BQR1RUICovCj4gKwlncC52YWx1ZSA9ICZ2YWw7Cj4gKwo+ICsJaWYgKGRy bUlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKSkKPiArCQlyZXR1cm4gMDsK PiArCj4gKwllcnJubyA9IDA7Cj4gKwlyZXR1cm4gdmFsID49IG1pbjsKPiArfQo+ICsKPiArLyog aGFzX3NvZnRwaW5fc3VwcG9ydAo+ICsgKiBGaW5kcyBpZiBzb2Z0cGluIGZlYXR1cmUgaXMgc3Vw cG9ydGVkCj4gKyAqIEBmZCBEUk0gZmQKPiArKi8KPiArc3RhdGljIGJvb2wgaGFzX3NvZnRwaW5f c3VwcG9ydChpbnQgZmQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSBncDsKPiAr CWludCB2YWwgPSAwOwo+ICsKPiArCW1lbXNldCgmZ3AsIDAsIHNpemVvZihncCkpOwo+ICsJZ3Au cGFyYW0gPSAzNzsgLyogSTkxNV9QQVJBTV9IQVNfRVhFQ19TT0ZUUElOICovCj4gKwlncC52YWx1 ZSA9ICZ2YWw7Cj4gKwo+ICsJaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJB TSwgJmdwKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwllcnJubyA9IDA7Cj4gKwlyZXR1cm4gKHZh bCA9PSAxKTsKPiArfQo+ICsKPiArLyogZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bAo+ICsgKiBIZWxw ZXIgdG8gY2FsbCBpb2N0bCAtIFRPRE86IG1vdmUgdG8gbGliCj4gKyAqIEBmZCAtIGRybSBmZAo+ ICsgKiBAdXNlcnB0ciAtIHBvaW50ZXIgdG8gaW5pdGlhbGlzZWQgdXNlcnB0cgo+ICsgKiBSRVRV Uk5TIHN0YXR1cyBvZiBpb2N0bCBjYWxsCj4gKyovCj4gK3N0YXRpYyBpbnQgZ2VtX2NhbGxfdXNl cnB0cl9pb2N0bChpbnQgZmQsIGk5MTVfZ2VtX3VzZXJwdHIgKnVzZXJwdHIpCj4gK3sKPiArCWlu dCByZXQ7Cj4gKwo+ICsJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9VU0VS UFRSLCB1c2VycHRyKTsKPiArCj4gKwlpZiAocmV0KQo+ICsJCXJldCA9IGVycm5vOwo+ICsKPiAr CXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qIGluaXRfdXNlcnB0cgo+ICsgKiBIZWxwZXIgdGhh dCBpbml0cyB1c2VycHRyIGFuIHJldHVybnMgaGFuZGxlCj4gKyAqIEBmZCAtIGRybSBmZAo+ICsg KiBAdXNlcnB0ciAtIHBvaW50ZXIgdG8gZW1wdHkgdXNlcnB0cgo+ICsgKiBAcHRyIC0gYnVmZmVy IHRvIGJlIHNoYXJlZAo+ICsgKiBAc2l6ZSAtIHNpemUgb2YgYnVmZmVyCj4gKyAqIEBybyAtIHJl YWQgb25seSBmbGFnCj4gKyAqIFJFVFVSTlMgaGFuZGxlIHRvIHNoYXJlZCBidWZmZXIKPiArKi8K PiArc3RhdGljIHVpbnQzMl90IGluaXRfdXNlcnB0cihpbnQgZmQsIGk5MTVfZ2VtX3VzZXJwdHIg KnVzZXJwdHIsIHZvaWQgKnB0ciwKPiArCQkJICAgICB1aW50NjRfdCBzaXplKQo+ICt7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCW1lbXNldCgodm9pZCopdXNlcnB0ciwgMCwgc2l6ZW9mKGk5MTVfZ2Vt X3VzZXJwdHIpKTsKPiArCj4gKwl1c2VycHRyLT51c2VyX3B0ciA9ICh1aW50NjRfdClwdHI7IC8q IE5lZWQgdGhlIGNhc3QgdG8gb3ZlcmNvbWUgY29tcGlsZXIgd2FybmluZyAqLwo+ICsJdXNlcnB0 ci0+dXNlcl9zaXplID0gc2l6ZTsKPiArCXVzZXJwdHItPmZsYWdzID0gMDsgLyogdXNlIHN5bmNo cm9uaXplZCBvcGVyYXRpb24gKi8KPiArCj4gKwlyZXQgPSBnZW1fY2FsbF91c2VycHRyX2lvY3Rs KGZkLCB1c2VycHRyKTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwlyZXR1cm4g dXNlcnB0ci0+aGFuZGxlOwo+ICt9Cj4gKwo+ICsvKiBjcmVhdGVfbWVtX2J1ZmZlcgo+ICsgKiBD cmVhdGVzIGEgNEsgYWxpZ25lZCBDUFUgYnVmZmVyCj4gKyAqIEBzaXplIC0gc2l6ZSBvZiBidWZm ZXIKPiArICogUkVUVVJOUyBwb2ludGVyIHRvIGJ1ZmZlciBvZiBAc2l6ZQo+ICsqLwo+ICtzdGF0 aWMgdm9pZCAqY3JlYXRlX21lbV9idWZmZXIodWludDY0X3Qgc2l6ZSkKPiArewo+ICsJdm9pZCAq YWRkcjsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gcG9zaXhfbWVtYWxpZ24oJmFkZHIsIDQw OTYsIHNpemUpOwo+ICsJaWd0X2Fzc2VydChyZXQgPT0gMCk7Cj4gKwo+ICsJcmV0dXJuIGFkZHI7 Cj4gK30KPiArCj4gKy8qIHNldHVwX2V4ZWNfb2JqCj4gKyAqIHBvcHVsYXRlIGV4ZWMgb2JqZWN0 Cj4gKyAqIEBleGVjIC0gZXhlYyBvYmplY3QKPiArICogQGhhbmRsZSAtIGhhbmRsZSB0byBnZW0g YnVmZmVyCj4gKyAqIEBmbGFncyAtIGFueSBmbGFncwo+ICsgKiBAb2Zmc2V0IC0gcmVxdWVzdGVk IFZNQQo+ICsqLwo+ICtzdGF0aWMgdm9pZCBzZXR1cF9leGVjX29iaihzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiAqZXhlYywKPiArCQkJICAgdWludDMyX3QgaGFuZGxlLCB1aW50MzJf dCBmbGFncywKPiArCQkJICAgdWludDY0X3Qgb2Zmc2V0KQo+ICt7Cj4gKwltZW1zZXQoZXhlYywg MCwgc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyKSk7Cj4gKwlleGVjLT5o YW5kbGUgPSBoYW5kbGU7Cj4gKwlleGVjLT5mbGFncyA9IGZsYWdzOwo+ICsJZXhlYy0+b2Zmc2V0 ID0gb2Zmc2V0Owo+ICt9Cj4gKwo+ICsvKiBnZW1fc3RvcmVfZGF0YV9zdm0KPiArICogcG9wdWxh dGUgYmF0Y2ggYnVmZmVyIHdpdGggTUlfU1RPUkVfRFdPUkRfSU1NIGNvbW1hbmQKPiArICogQGZk OiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqIEBjbWRfYnVmOiBiYXRjaCBidWZmZXIKPiArICog QHZhZGRyOiBkZXN0aW5hdGlvbiBWaXJ0dWFsIGFkZHJlc3MKPiArICogQGRhdGE6IGRhdGEgdG8g YmUgc3RvcmUgYXQgZGVzdGluYXRpb24KPiArICogQGVuZDogd2hldGhlciB0byBlbmQgYmF0Y2gg YnVmZmVyIG9yIG5vdAo+ICsqLwo+ICtzdGF0aWMgaW50IGdlbV9zdG9yZV9kYXRhX3N2bShpbnQg ZmQsIHVpbnQzMl90ICpjbWRfYnVmLCB1aW50NjRfdCB2YWRkciwKPiArCQkJICAgICAgdWludDMy X3QgZGF0YSwgYm9vbCBlbmQpCj4gK3sKPiArCWludCBpID0gMDsKPiArCj4gKwljbWRfYnVmW2kr K10gPSBNSV9TVE9SRV9EV09SRF9JTU07Cj4gKwljbWRfYnVmW2krK10gPSB2YWRkciAmIDB4RkZG RkZGRkM7Cj4gKwljbWRfYnVmW2krK10gPSAodmFkZHIgPj4gMzIpICYgMHhGRkZGOyAvKiBiaXRz IDMyOjQ3ICovCj4gKwo+ICsJY21kX2J1ZltpKytdID0gZGF0YTsKPiArCWlmIChlbmQpIHsKPiAr CQljbWRfYnVmW2krK10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJCWNtZF9idWZbaSsrXSA9 IDA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuKGkgKiBzaXplb2YodWludDMyX3QpKTsKPiArfQo+ICsK PiArLyogZ2VtX3N0b3JlX2RhdGEKPiArICogcG9wdWxhdGUgYmF0Y2ggYnVmZmVyIHdpdGggTUlf U1RPUkVfRFdPUkRfSU1NIGNvbW1hbmQKPiArICogVGhpcyBvbmUgZmlsbHMgdXAgcmVsb2MgYnVm ZmVyIGFzIHdlbGwKPiArICogQGZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqIEBjbWRfYnVm OiBiYXRjaCBidWZmZXIKPiArICogQGRhdGE6IGRhdGEgdG8gYmUgc3RvcmUgYXQgZGVzdGluYXRp b24KPiArICogQHJlbG9jIC0gcmVsb2NhdGlvbiBlbnRyeQo+ICsgKiBAZW5kOiB3aGV0aGVyIHRv IGVuZCBiYXRjaCBidWZmZXIgb3Igbm90Cj4gKyovCj4gK3N0YXRpYyBpbnQgZ2VtX3N0b3JlX2Rh dGEoaW50IGZkLCB1aW50MzJfdCAqY21kX2J1ZiwKPiArCQkJICB1aW50MzJfdCBoYW5kbGUsIHVp bnQzMl90IGRhdGEsCj4gKwkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5 ICpyZWxvYywKPiArCQkJICBib29sIGVuZCkKPiArewo+ICsJaW50IGkgPSAwOwo+ICsKPiArCWNt ZF9idWZbaSsrXSA9IE1JX1NUT1JFX0RXT1JEX0lNTTsKPiArCWNtZF9idWZbaSsrXSA9IDA7IC8q IGxvd2VyIDMxIGJpdHMgb2YgNDggYml0IGFkZHJlc3MgLSAwIHJlbG9jIG5lZWRlZCAqLwo+ICsJ Y21kX2J1ZltpKytdID0gMDsgLyogdXBwZXIgMTUgYml0cyBvZiA0OCBiaXQgYWRkcmVzcyAtIDAg cmVsb2MgbmVlZGVkICovCj4gKwlyZWxvYy0+b2Zmc2V0ID0gMSAqIHNpemVvZih1aW50MzJfdCk7 Cj4gKwlyZWxvYy0+ZGVsdGEgPSAwOwo+ICsJcmVsb2MtPnRhcmdldF9oYW5kbGUgPSBoYW5kbGU7 Cj4gKwlyZWxvYy0+cmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKPiArCXJl bG9jLT53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+ICsJcmVsb2MtPnBy ZXN1bWVkX29mZnNldCA9IDA7Cj4gKwljbWRfYnVmW2krK10gPSBkYXRhOwo+ICsJaWYgKGVuZCkg ewo+ICsJCWNtZF9idWZbaSsrXSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwkJY21kX2J1Zltp KytdID0gMDsKPiArCX0KPiArCj4gKwlyZXR1cm4gKGkgKiBzaXplb2YodWludDMyX3QpKTsKPiAr fQo+ICsKPiArLyogc2V0dXBfZXhlY2J1ZmZlcgo+ICsgKiBoZWxwZXIgZm9yIGJ1ZmZlciBleGVj dXRpb24KPiArICogQGV4ZWNidWYgLSBwb2ludGVyIHRvIGV4ZWNidWZmZXIKPiArICogQGV4ZWNf b2JqZWN0IC0gcG9pbnRlciB0byBleGVjIG9iamVjdDIgc3RydWN0Cj4gKyAqIEByaW5nIC0gcmlu ZyB0byBiZSB1c2VkCj4gKyAqIEBidWZmZXJfY291bnQgLSBob3cgbWFudSBidWZmZXJzIHRvIHN1 Ym1pdAo+ICsgKiBAYmF0Y2hfbGVuZ3RoIC0gbGVuZ3RoIG9mIGJhdGNoIGJ1ZmZlcgo+ICsqLwo+ ICtzdGF0aWMgdm9pZCBzZXR1cF9leGVjYnVmZmVyKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1 ZmZlcjIgKmV4ZWNidWYsCj4gKwkJCSAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVj dDIgKmV4ZWNfb2JqZWN0LAo+ICsJCQkgICAgIGludCByaW5nLCBpbnQgYnVmZmVyX2NvdW50LCBp bnQgYmF0Y2hfbGVuZ3RoKQo+ICt7Cj4gKwlleGVjYnVmLT5idWZmZXJzX3B0ciA9ICh1aW50NjRf dClleGVjX29iamVjdDsKPiArCWV4ZWNidWYtPmJ1ZmZlcl9jb3VudCA9IGJ1ZmZlcl9jb3VudDsK PiArCWV4ZWNidWYtPmJhdGNoX3N0YXJ0X29mZnNldCA9IDA7Cj4gKwlleGVjYnVmLT5iYXRjaF9s ZW4gPSBiYXRjaF9sZW5ndGg7Cj4gKwlleGVjYnVmLT5jbGlwcmVjdHNfcHRyID0gMDsKPiArCWV4 ZWNidWYtPm51bV9jbGlwcmVjdHMgPSAwOwo+ICsJZXhlY2J1Zi0+RFIxID0gMDsKPiArCWV4ZWNi dWYtPkRSNCA9IDA7Cj4gKwlleGVjYnVmLT5mbGFncyA9IHJpbmc7Cj4gKwlpOTE1X2V4ZWNidWZm ZXIyX3NldF9jb250ZXh0X2lkKCpleGVjYnVmLCAwKTsKPiArCWV4ZWNidWYtPnJzdmQyID0gMDsK PiArfQo+ICsKPiArLyogc3VibWl0X2FuZF9zeW5jCj4gKyAqIEhlbHBlciBmdW5jdGlvbiBmb3Ig ZXhlYyBhbmQgc3luYyBmdW5jdGlvbnMKPiArICogQGZkIC0gZHJtIGZkCj4gKyAqIEBleGVjYnVm IC0gcG9pbnRlciB0byBleGVjYnVmZmVyCj4gKyAqIEBiYXRjaF9idWZfaGFuZGxlIC0gYmF0Y2gg YnVmZmVyIGhhbmRsZQo+ICsqLwo+ICtzdGF0aWMgdm9pZCBzdWJtaXRfYW5kX3N5bmMoaW50IGZk LCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjYnVmLAo+ICsJCQkgICAgdWlu dDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSkKPiArewo+ICsJZ2VtX2V4ZWNidWYoZmQsIGV4ZWNidWYp Owo+ICsJZ2VtX3N5bmMoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICt9Cj4gKwo+ICsvKiBnZW1f dXNlcnB0cl9zeW5jCj4gKyAqIGhlbHBlciBmb3Igc3luY2luZyB0byBDUFUgZG9tYWluIC0gY29w eS9wYXN0ZSBmcm9tIHVzZXJibGl0Cj4gKyAqIEBmZCAtIGRybSBmZAo+ICsgKiBAaGFuZGxlIC0g YnVmZmVyIGhhbmRsZSB0byBzeW5jCj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV91c2VycHRyX3N5 bmMoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUpCj4gK3sKPiArCWdlbV9zZXRfZG9tYWluKGZkLCBo YW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VNX0RPTUFJTl9DUFUpOwo+ICt9Cj4g Kwo+ICsKPiArLyogZ2VtX3Bpbl91c2VycHRyX3Rlc3QKPiArICogVGhpcyB0ZXN0IHdpbGwgY3Jl YXRlIGEgc2hhcmVkIGJ1ZmZlciwgYW5kIGNyZWF0ZSBhIGNvbW1hbmQKPiArICogZm9yIEdQVSB0 byB3cml0ZSBkYXRhIGluIGl0Cj4gKyAqIENQVSB3aWxsIHJlYWQgYW5kIG1ha2Ugc3VyZSBleHBl Y3RlZCB2YWx1ZSBpcyBvYnRhaW5lZAo+ICsgKiBNYWxsb2MgYSA0SyBidWZmZXIKPiArICogU2hh cmUgYnVmZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVh dGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4g KyAqIFVzZSAweDEwMDAgYWRkcmVzcyBhcyBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIGJhdGNoIGJ1 ZmZlcgo+ICsgKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmplY3QKPiAr ICogU2V0ICdvZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIDB4MTAwMAo+ICsgKiBTdWJtaXQgZXhl Y2J1ZmZlcgo+ICsgKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2hhcmVkIGJ1ZmZl ciBtYXRjaGVzIERBVEEKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl91c2VycHRyX3Rlc3Qo dm9pZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaW50IGZkOwo+ICsJ dWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29i amVjdDJbMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZmZXJbU1RPUkVfQkFUQ0hfQlVGRkVSX1NJ WkUgKyAyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxl Owo+ICsJaW50IHJpbmcsIGxlbjsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4 Owo+ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDEwMDA7Cj4gKwo+ICsJZmQgPSBkcm1f b3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0 dChmZCwgQUxJQVNJTkdfUFBHVFQpKTsKPiArCWlndF9yZXF1aXJlKGhhc19zb2Z0cGluX3N1cHBv cnQoZmQpKTsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsK PiArCj4gKwkvKiBjcmVhdGUgY3B1IGJ1ZmZlciAqLwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0 ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJ c2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVm ZmVyLAo+ICsJCQkJCSBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIg d2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJh dGNoX2J1ZmZlciwgcGlubmluZ19vZmZzZXQsIGRhdGEsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZk LCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3Vi bWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBd LCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5u aW5nX29mZnNldCk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9i dWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCj4g KwlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7 Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiAr CWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCj4gKwkvKiBDaGVj ayBpZiBkcml2ZXIgcGlubmVkIHRoZSBidWZmZXIgYXMgcmVxdWVzdGVkICovCj4gKwlpZ3RfZmFp bF9vbl9mKGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgIT0gcGlubmluZ19vZmZzZXQsCj4gKwkJCSJc bkZhaWxlZCB0byBwaW4gYXQgcmVxdWVzdGVkIG9mZnNldCIpOwo+ICsJLyogY2hlY2sgb24gQ1BV IHRvIHNlZSBpZiB2YWx1ZSBjaGFuZ2VzICovCj4gKwlpZ3RfZmFpbF9vbl9mKHNoYXJlZF9idWZm ZXJbMF0gIT0gZGF0YSwKPiArCQkgICAgICAiXG5DUFUgcmVhZCBkb2VzIG5vdCBtYXRjaCBHUFUg d3JpdGUsXAo+ICsJCQlleHBlY3RlZDogMHgleCwgZ290OiAweCV4XG4iLAo+ICsJCQlkYXRhLCBz aGFyZWRfYnVmZmVyWzBdKTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUp Owo+ICsJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4g KwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICt9Cj4gKwo+ICsvKiBnZW1fcGluX2JvCj4gKyAqIFRo aXMgdGVzdCB3aWxsIHRlc3Qgc29mdHBpbm5pbmcgb2YgYSBnZW0gYnVmZmVyIG9iamVjdAo+ICsg KiBNYWxsb2MgYSA0SyBidWZmZXIKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBE QVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2UgMHgxMDAwIGFkZHJlc3MgYXMg ZGVzdGluYXRpb24gYWRkcmVzcyBpbiBiYXRjaCBidWZmZXIKPiArICogU2V0IEVYRUNfT0JKRUNU X1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gKyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9i amVjdCB0byAweDEwMDAKPiArICogU3VibWl0IGV4ZWNidWZmZXIKPiArICogVmVyaWZ5IHZhbHVl IHBpbm5lZCBvZmZzZXQgbWF0Y2hlcyB0aGUgcmVxdWVzdAo+ICsqLwo+ICtzdGF0aWMgdm9pZCBn ZW1fcGluX2JvX3Rlc3Qodm9pZCkKPiArewo+ICsJaW50IGZkOwo+ICsJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgZXhlY19vYmplY3QyWzJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW1NUT1JFX0JB VENIX0JVRkZFUl9TSVpFICsgMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCB1bnNo YXJlZF9idWZfaGFuZGxlOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5 IHJlbG9jWzRdOwo+ICsJaW50IHJpbmcsIGxlbjsKPiArCXVpbnQzMl90IHZhbHVlOwo+ICsJY29u c3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNl dCA9IDB4MTAwMDsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ICsJ aWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+ICsKPiArCWJhdGNoX2J1Zl9o YW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgZ2VtIGJ1 ZmZlciAqLwo+ICsJdW5zaGFyZWRfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUp Owo+ICsJCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICov Cj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0YShmZCwgYmF0Y2hfYnVmZmVyLCB1bnNoYXJlZF9idWZf aGFuZGxlLCBkYXRhLAo+ICsJCQkJcmVsb2MsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRj aF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNv bW1hbmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCB1bnNo YXJlZF9idWZfaGFuZGxlLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdf b2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9o YW5kbGUsIDAsIDApOwo+ICsJZXhlY19vYmplY3QyWzFdLnJlbG9jYXRpb25fY291bnQgPSAxOwo+ ICsJZXhlY19vYmplY3QyWzFdLnJlbG9jc19wdHIgPSAodWludDY0X3QpcmVsb2M7Cj4gKwo+ICsJ cmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1 ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAm ZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJLyogQ2hlY2sgaWYgZHJpdmVyIHBp bm5lZCB0aGUgYnVmZmVyIGFzIHJlcXVlc3RlZCAqLwo+ICsJaWd0X2ZhaWxfb25fZihleGVjX29i amVjdDJbMF0ub2Zmc2V0ICE9IHBpbm5pbmdfb2Zmc2V0LAo+ICsJCQkiXG5GYWlsZWQgdG8gcGlu IGF0IHJlcXVlc3RlZCBvZmZzZXQiKTsKPiArCWdlbV9yZWFkKGZkLCB1bnNoYXJlZF9idWZfaGFu ZGxlLCAwLCAodm9pZCopJnZhbHVlLCA0KTsKPiArCWlndF9hc3NlcnQodmFsdWUgPT0gZGF0YSk7 Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShm ZCwgdW5zaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gK30KPiArCj4gKwo+ICsv KiBnZW1fbXVsdGlwbGVfcHJvY2Vzc190ZXN0Cj4gKyAqIFJ1biBiYXNpYyB0ZXN0IHNpbXVsdGFu ZW91c2x5IHdpdGggbXVsdGlwbGUgcHJvY2Vzc2VzCj4gKyAqIFRoaXMgd2lsbCB0ZXN0IHBpbm5p bmcgc2FtZSBWQSBzZXBhcmF0ZWx5IGluIGVhY2ggcHJvY2Vzcwo+ICsKPiArICogZm9yaygpOwo+ ICsgKiBFeGVjdXRlIGJhc2ljIHRlc3QgaW4gcGFyZW50L2NoaWxkIHByb2Nlc3Nlcwo+ICsqLwo+ ICsjZGVmaW5lIE1BWF9OVU1fUFJPQ0VTU0VTIDEwCj4gKwo+ICtzdGF0aWMgdm9pZCBnZW1fbXVs dGlwbGVfcHJvY2Vzc190ZXN0KHZvaWQpCj4gK3sKPiArCWludCBmZDsKPiArCj4gKwlmZCA9IGRy bV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3Bw Z3R0KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ICsJaWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3Vw cG9ydChmZCkpOwo+ICsKPiArCWlndF9mb3JrKGNoaWxkLCBNQVhfTlVNX1BST0NFU1NFUykgewo+ ICsJCWdlbV9waW5fdXNlcnB0cl90ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfd2FpdGNoaWxkcmVuKCk7 Cj4gKwo+ICsJY2xvc2UoZmQpOwo+ICt9Cj4gKwo+ICsKPiArLyogZ2VtX3JlcGluX3Rlc3QKPiAr ICogVGhpcyB0ZXN0IHRyaWVzIHRvIHJlcGluIGEgYnVmZmVyIGF0IGEgcHJldmlvdXNseSBwaW5u ZWQgdm1hCj4gKyAqIGZyb20gYSBkaWZmZXJlbnQgZXhlY2J1Zi4KPiArICogTWFsbG9jIGEgNEsg YnVmZmVyCj4gKyAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIg aW9jdGwKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3 b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2UgMHgxMDAwIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRk cmVzcyBpbiBiYXRjaCBidWZmZXIKPiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGlu IGV4ZWMgb2JqZWN0Cj4gKyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byAweDEwMDAg Vk1BCj4gKyAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBE V09SRCBpbiBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFUQQo+ICsKPiArICogQ3JlYXRlIHNlY29u ZCBzaGFyZWQgYnVmZmVyCj4gKyAqIEZvbGxvdyBhbGwgc3RlcHMgYWJvdmUKPiArICogRXhlY3B0 LCBmb3Igb2Zmc2V0LCB1c2UgVk1BIG9mIGZpcnN0IGJ1ZmZlciBhYm92ZQo+ICsgKiBTdWJtaXQg ZXhlY2J1ZmZlcgo+ICsgKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2Vjb25kIHNo YXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9yZXBpbl90 ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWk5MTVfZ2Vt X3VzZXJwdHIgdXNlcnB0cjE7Cj4gKwlpbnQgZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZl cjsKPiArCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyMTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3Qy IGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9C VUZGRVJfU0laRSArIDJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1 Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlMTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25z dCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0 ID0gMHgxMDAwOwo+ICsKPiArCS8qIENyZWF0ZSBnZW0gb2JqZWN0ICovCj4gKwlmZCA9IGRybV9v cGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0 KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ICsJaWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9y dChmZCkpOwo+ICsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpF KTsKPiArCj4gKwkvKiBjcmVhdGUgY3B1IGJ1ZmZlciwgc2V0IGZpcnN0IGVsZW1lbnRzIHRvIDB4 MCAqLwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJ c2hhcmVkX2J1ZmZlcjEgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCXNoYXJlZF9i dWZmZXJbMF0gPSAweDA7Cj4gKwlzaGFyZWRfYnVmZmVyMVswXSA9IDB4MDsKPiArCj4gKwkvKiBz aGFyZSB3aXRoIEdQVSBhbmQgZ2V0IGhhbmRsZXMgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0g aW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCQkgQk9fU0la RSk7Cj4gKwlzaGFyZWRfYnVmX2hhbmRsZTEgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyMSwg c2hhcmVkX2J1ZmZlcjEsCj4gKwkJCQkJICBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY29t bWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0 YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgcGlubmluZ19vZmZzZXQsIGRhdGEsIHRydWUpOwo+ICsJ Z2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4g Kwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhl Y19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1Rf UElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3Qy WzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JF TkRFUjsKPiArCj4gKwlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJp bmcsIDIsIGxlbik7Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZf aGFuZGxlKTsKPiArCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiAr Cj4gKwlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQp Owo+ICsJaWd0X2Fzc2VydCgqc2hhcmVkX2J1ZmZlciA9PSBkYXRhKTsKPiArCj4gKwkvKiBTZWNv bmQgYnVmZmVyICovCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21t YW5kICovCj4gKwlwaW5uaW5nX29mZnNldCA9IGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQ7Cj4gKwls ZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgcGlubmluZ19vZmZzZXQs IGRhdGEsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRj aF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwkv KiBQaW4gYXQgc2hhcmVkX2J1ZmZlciwgbm90IHNoYXJlZF9idWZmZXIxICovCj4gKwkvKiBXZSBh cmUgcmVxdWVzdGluZyBhZGRyZXNzIHdoZXJlIGFub3RoZXIgYnVmZmVyIHdhcyBwaW5uZWQgcHJl dmlvdXNseSAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1 Zl9oYW5kbGUxLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0 KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUs IDAsIDApOwo+ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4 ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1Ym1p dF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJw dHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUxKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGV4ZWNf b2JqZWN0MlswXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+ICsJaWd0X2Fzc2VydCgqc2hh cmVkX2J1ZmZlcjEgPT0gZGF0YSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFu ZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQp Owo+ICsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIxKTsK PiArfQo+ICsKPiArCj4gKy8qIGdlbV9yZXBpbl9vdmVybGFwX3Rlc3QKPiArICogVGhpcyB0ZXN0 IHdpbGwgYXR0ZW1wdCB0byBwaW4gdHdvIGJ1ZmZlcnMgYXQgdGhlIHNhbWUgVk1BIGFzIHBhcnQg b2YgdGhlIHNhbWUKPiArICAgZXhlY2J1ZmZlciBvYmplY3QKPiArCj4gKyAqIE1hbGxvYyBhIDRL IGJ1ZmZlcgo+ICsgKiBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQVSBieSB1c2luZyB1c2VycHRy IGlvY3RsCj4gKyAqIENyZWF0ZSBzZWNvbmQgc2hhcmVkIGJ1ZmZlcgo+ICsgKiBDcmVhdGUgYmF0 Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgZWFjaCBidWZmZXIKPiAr ICogVXNlIHNhbWUgdmlydHVhbCBhZGRyZXNzIGFzIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBpbiBi YXRjaCBidWZmZXIKPiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGJvdGggZXhl YyBvYmplY3RzCj4gKyAqIFNldCAnb2Zmc2V0JyBpbiBib3RoIGV4ZWMgb2JqZWN0cyB0byBzYW1l IFZNQQo+ICsgKiBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgKiBDb21tYW5kIHNob3VsZCByZXR1cm4g RUlOVkFMLCBzaW5jZSB3ZSBhcmUgdHJ5aW5nIHRvIHBpbiB0byBzYW1lIFZNQQo+ICsqLwo+ICtz dGF0aWMgdm9pZCBnZW1fcGluX292ZXJsYXBfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91 c2VycHRyIHVzZXJwdHI7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHIxOwo+ICsJaW50IGZk LCByZXQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCXVpbnQzMl90ICpzaGFyZWRf YnVmZmVyMTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiAr CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MlszXTsKPiArCXVp bnQzMl90IHNoYXJlZF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZTE7Cj4gKwlpbnQgcmlu ZywgbGVuOwo+ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDEwMDA7Cj4gKwo+ICsJZmQg PSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVs bF9wcGd0dChmZCwgQUxJQVNJTkdfUFBHVFQpKTsKPiArCWlndF9yZXF1aXJlKGhhc19zb2Z0cGlu X3N1cHBvcnQoZmQpKTsKPiArCj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIo Qk9fU0laRSk7Cj4gKwlzaGFyZWRfYnVmZmVyMSA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUg KiAyKTsKPiArCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUg PSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLAo+ICsJCQkJCSBCT19T SVpFKTsKPiArCXNoYXJlZF9idWZfaGFuZGxlMSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIx LCBzaGFyZWRfYnVmZmVyMSwKPiArCQkJCQkgIEJPX1NJWkUgKiAyKTsKPiArCj4gKwkvKiBzdWJt aXQgY29tbWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0s IHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5p bmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIHNoYXJlZF9i dWZfaGFuZGxlMSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNl dCk7Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1 ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsKPiArCXJldCA9 IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fRVhFQ0JVRkZFUjIsICZleGVjYnVmKTsK PiArCj4gKwkvKiBleHBlY3QgdG8gZmFpbCAqLwo+ICsJaWd0X2Fzc2VydF9uZXEocmV0LCAwKTsK PiArCWlndF9hc3NlcnQoZXJybm8gPT0gRUlOVkFMKTsKPiArCj4gKwljbG9zZShmZCk7Cj4gKwlm cmVlKHNoYXJlZF9idWZmZXIpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyMSk7Cj4gK30KPiArCj4g Ky8qIGdlbV9zb2Z0cGluX3N0cmVzc190ZXN0Cj4gKyAqIFN0cmVzcyB0ZXN0IHdoaWNoIGNyZWF0 ZXMgMTBLIGJ1ZmZlcnMgYW5kIHNoYXJlcyB3aXRoIEdQVQo+ICsgKiBDcmVhdGUgMTAwSyB1aW50 MzIgYnVmZmVycyBvZiBzaXplIDRLIGVhY2gKPiArICogU2hhcmUgd2l0aCBHUFUgdXNpbmcgdXNl cnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4gZmly c3QgZWxlbWVudCBvZiBlYWNoIGJ1ZmZlcgo+ICsgKiBQaW4gZWFjaCBidWZmZXIgdG8gdmFyeWlu ZyBhZGRyZXNzZXMgc3RhcnRpbmcgZnJvbSAweDgwMDAwMDAwMDAwMCBnb2luZyBiZWxvdwo+ICsg KiBFeGVjdXRlIEJhdGNoIEJ1ZmZlciBvbiBCbGl0IHJpbmcgU1RSRVNTX05VTV9MT09QUyB0aW1l cwo+ICsgKiBWYWxpZGF0ZSBldmVyeSBidWZmZXIgaGFzIERBVEEgaW4gZmlyc3QgZWxlbWVudAo+ ICsgKiBSaW5zZSBhbmQgUmVwZWF0IG9uIFJlbmRlciByaW5nCj4gKyovCj4gKyNkZWZpbmUgU1RS RVNTX05VTV9CVUZGRVJTIDEwMDAwMAo+ICsjZGVmaW5lIFNUUkVTU19OVU1fTE9PUFMgMTAwCj4g KyNkZWZpbmUgU1RSRVNTX1NUT1JFX0NPTU1BTkRTIDQgKiBTVFJFU1NfTlVNX0JVRkZFUlMKPiAr Cj4gK3N0YXRpYyB2b2lkIGdlbV9zb2Z0cGluX3N0cmVzc190ZXN0KHZvaWQpCj4gK3sKPiArCWk5 MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWludCBmZDsKPiArCXVpbnQzMl90ICoqc2hhcmVk X2J1ZmZlcjsKPiArCXVpbnQzMl90ICpzaGFyZWRfaGFuZGxlOwo+ICsJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgKmV4ZWNfb2JqZWN0MjsKPiArCXVpbnQzMl90ICpiYXRjaF9idWZmZXI7Cj4gKwl1aW50 MzJfdCBiYXRjaF9idWZfaGFuZGxlOwo+ICsJaW50IHJpbmcsIGxlbjsKPiArCWludCBidWYsIGxv b3A7Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4ODAwMDAwMDAwMDAwOwo+ICsKPiAr CWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2Vz X2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSk7Cj4gKwlpZ3RfcmVxdWlyZShoYXNf c29mdHBpbl9zdXBwb3J0KGZkKSk7Cj4gKwo+ICsKPiArCS8qIEFsbG9jYXRlIGJsb2JzIGZvciBh bGwgZGF0YSBzdHJ1Y3R1cmVzICovCj4gKwlzaGFyZWRfaGFuZGxlID0gY2FsbG9jKFNUUkVTU19O VU1fQlVGRkVSUywgc2l6ZW9mKHVpbnQzMl90KSk7Cj4gKwlzaGFyZWRfYnVmZmVyID0gY2FsbG9j KFNUUkVTU19OVU1fQlVGRkVSUywgc2l6ZW9mKHVpbnQzMl90ICopKTsKPiArCWV4ZWNfb2JqZWN0 MiA9IGNhbGxvYyhTVFJFU1NfTlVNX0JVRkZFUlMgKyAxLAo+ICsJCQkJc2l6ZW9mKHN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY19vYmplY3QyKSk7Cj4gKwkvKiA0IGR3b3JkcyBwZXIgYnVmZmVyICsg MiBmb3IgdGhlIGVuZCBvZiBiYXRjaGJ1ZmZlciAqLwo+ICsJYmF0Y2hfYnVmZmVyID0gY2FsbG9j KFNUUkVTU19TVE9SRV9DT01NQU5EUyArIDIsIHNpemVvZih1aW50MzJfdCkpOwo+ICsJYmF0Y2hf YnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIChTVFJFU1NfU1RPUkVfQ09NTUFORFMgKyAyKSo0 KTsKPiArCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kcyAq Lwo+ICsJbGVuID0gMDsKPiArCWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7 IGJ1ZisrKSB7Cj4gKwkJc2hhcmVkX2J1ZmZlcltidWZdID0gY3JlYXRlX21lbV9idWZmZXIoQk9f U0laRSk7Cj4gKwkJKnNoYXJlZF9idWZmZXJbYnVmXSA9IDB4RkZGRkZGRkY7Cj4gKwo+ICsJCS8q IHNoYXJlIHdpdGggR1BVICovCj4gKwkJc2hhcmVkX2hhbmRsZVtidWZdID0gaW5pdF91c2VycHRy KGZkLCAmdXNlcnB0ciwKPiArCQkJCQkJICBzaGFyZWRfYnVmZmVyW2J1Zl0sCj4gKwkJCQkJCSAg Qk9fU0laRSk7Cj4gKwo+ICsJCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbYnVmXSwgc2hh cmVkX2hhbmRsZVtidWZdLAo+ICsJCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5n X29mZnNldCk7Cj4gKwkJbGVuICs9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVy ICsgKGxlbi80KSwKPiArCQkJCQkgIHBpbm5pbmdfb2Zmc2V0LCBidWYsCj4gKwkJCQkJICAoYnVm ID09IFNUUkVTU19OVU1fQlVGRkVSUy0xKT8gXAo+ICsJCQkJCSAgdHJ1ZTpmYWxzZSk7Cj4gKwkJ Cj4gKwkJLyogZGVjcmVtZW50YWwgNEsgYWxpZ25lZCBhZGRyZXNzICovCj4gKwkJcGlubmluZ19v ZmZzZXQgLT0gQUxJR04oQk9fU0laRSwgNDA5Nik7Cj4gKwl9Cj4gKwo+ICsJLyogc2V0dXAgY29t bWFuZCBidWZmZXIgKi8KPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0 Y2hfYnVmZmVyLCBsZW4pOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MltTVFJFU1Nf TlVNX0JVRkZFUlNdLCBiYXRjaF9idWZfaGFuZGxlLAo+ICsJCSAgICAgICAwLCAwKTsKPiArCj4g KwkvKiBXZSB3YW50IHRvIHJ1biB0aGlzIG9uIEJMVCByaW5nIGlmIHBvc3NpYmxlICovCj4gKwlp ZiAoSEFTX0JMVF9SSU5HKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSkgewo+ICsJCXJpbmcgPSBJ OTE1X0VYRUNfQkxUOwo+ICsKPiArCQlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29i amVjdDIsIHJpbmcsCj4gKwkJCQkgU1RSRVNTX05VTV9CVUZGRVJTICsgMSwgbGVuKTsKPiArCj4g KwkJZm9yIChsb29wID0gMDsgbG9vcCA8IFNUUkVTU19OVU1fTE9PUFM7IGxvb3ArKykgewo+ICsJ CQlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCQkJ LyogU2V0IHBpbm5pbmcgb2Zmc2V0IGJhY2sgdG8gb3JpZ2luYWwgdmFsdWUgKi8KPiArCQkJcGlu bmluZ19vZmZzZXQgPSAweDgwMDAwMDAwMDAwMDsKPiArCQkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNU UkVTU19OVU1fQlVGRkVSUzsgYnVmKyspIHsKPiArCQkJCWdlbV91c2VycHRyX3N5bmMoZmQsIHNo YXJlZF9oYW5kbGVbYnVmXSk7Cj4gKwkJCQlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MltidWZdLm9m ZnNldCA9PSBwaW5uaW5nX29mZnNldCk7Cj4gKwkJCQlpZ3RfZmFpbF9vbl9mKCpzaGFyZWRfYnVm ZmVyW2J1Zl0gIT0gYnVmLCBcCj4gKwkJCQkiTWlzbWF0Y2ggaW4gYnVmZmVyICVkLCBpdGVyYXRp b24gJWQ6IDB4JTA4WFxuIiwgXAo+ICsJCQkJYnVmLCBsb29wLCAqc2hhcmVkX2J1ZmZlcltidWZd KTsKPiArCQkJCXBpbm5pbmdfb2Zmc2V0IC09IEFMSUdOKEJPX1NJWkUsIDQwOTYpOwo+ICsJCQl9 Cj4gKwkJCS8qIFJlc2V0IHRoZSBidWZmZXIgZW50cmllcyBmb3IgbmV4dCBpdGVyYXRpb24gKi8K PiArCQkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKyspIHsKPiAr CQkJCSpzaGFyZWRfYnVmZmVyW2J1Zl0gPSAweEZGRkZGRkZGOwo+ICsJCQl9Cj4gKwkJfQo+ICsJ fQo+ICsKPiArCS8qIE5vdyBSZW5kZXIgUmluZyAqLwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5E RVI7Cj4gKwlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsCj4g KwkJCSBTVFJFU1NfTlVNX0JVRkZFUlMgKyAxLCBsZW4pOwo+ICsJZm9yIChsb29wID0gMDsgbG9v cCA8IFNUUkVTU19OVU1fTE9PUFM7IGxvb3ArKykgewo+ICsJCXN1Ym1pdF9hbmRfc3luYyhmZCwg JmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJCXBpbm5pbmdfb2Zmc2V0ID0gMHg4MDAw MDAwMDAwMDA7Cj4gKwkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVm KyspIHsKPiArCQkJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2hhbmRsZVtidWZdKTsKPiAr CQkJaWd0X2Fzc2VydChleGVjX29iamVjdDJbYnVmXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQp Owo+ICsJCQlpZ3RfZmFpbF9vbl9mKCpzaGFyZWRfYnVmZmVyW2J1Zl0gIT0gYnVmLCBcCj4gKwkJ CSJNaXNtYXRjaCBpbiBidWZmZXIgJWQsIFwKPiArCQkJaXRlcmF0aW9uICVkOiAweCUwOFhcbiIs IGJ1ZiwgbG9vcCwgKnNoYXJlZF9idWZmZXJbYnVmXSk7Cj4gKwkJCXBpbm5pbmdfb2Zmc2V0IC09 IEFMSUdOKEJPX1NJWkUsIDQwOTYpOwo+ICsJCX0KPiArCQkvKiBSZXNldCB0aGUgYnVmZmVyIGVu dHJpZXMgZm9yIG5leHQgaXRlcmF0aW9uICovCj4gKwkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVT U19OVU1fQlVGRkVSUzsgYnVmKyspIHsKPiArCQkJKnNoYXJlZF9idWZmZXJbYnVmXSA9IDB4RkZG RkZGRkY7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVN X0JVRkZFUlM7IGJ1ZisrKSB7Cj4gKwkJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRfaGFuZGxlW2J1Zl0p Owo+ICsJCWZyZWUoc2hhcmVkX2J1ZmZlcltidWZdKTsKPiArCX0KPiArCWdlbV9jbG9zZShmZCwg YmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwo+ICsJZnJlZShzaGFyZWRfaGFu ZGxlKTsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gKwlmcmVlKGV4ZWNfb2JqZWN0Mik7Cj4g KwlmcmVlKGJhdGNoX2J1ZmZlcik7Cj4gK30KPiArCj4gKy8qIGdlbV93cml0ZV9tdWx0aXBhZ2Vf YnVmZmVyCj4gKyAqIENyZWF0ZSBhIGJ1ZmZlciBzcGFubmluZyBtdWx0aXBsZSBwYWdlcywgYW5k IHNoYXJlIHdpdGggR1BVLgo+ICsgKiBXcml0ZSB0byBldmVyeSBlbGVtZW50IG9mIHRoZSBidWZm ZXIKPiArICogYW5kIHZlcmlmeSBjb3JyZWN0IGNvbnRlbnRzLgo+ICsKPiArICogQ3JlYXRlIDhL IGJ1ZmZlcgo+ICsgKiBTaGFyZSB3aXRoIEdQVSB1c2luZyB1c2VycHRyIGlvY3RsCj4gKyAqIENy ZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSBpbiBhbGwgZWxlbWVudHMgb2YgYnVmZmVy Cj4gKyAqIEV4ZWN1dGUgQmF0Y2ggQnVmZmVyCj4gKyAqIFZhbGlkYXRlIGV2ZXJ5IGVsZW1lbnQg aGFzIERBVEEKPiArKi8KPiArCj4gKyNkZWZpbmUgRFdPUkRfU0laRSBzaXplb2YodWludDMyX3Qp Cj4gKyNkZWZpbmUgQkJfU0laRSAoKE1VTFRJUEFHRV9CT19TSVpFIC8gRFdPUkRfU0laRSkgKiBT VE9SRV9CQVRDSF9CVUZGRVJfU0laRSkgKyAyCj4gKyNkZWZpbmUgTlVNX0RXT1JEUyAoTVVMVElQ QUdFX0JPX1NJWkUvc2l6ZW9mKHVpbnQzMl90KSkKPiArc3RhdGljIHZvaWQgZ2VtX3dyaXRlX211 bHRpcGFnZV9idWZmZXJfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJw dHI7Cj4gKwlpbnQgZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCXVpbnQzMl90 IHNoYXJlZF9oYW5kbGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNi dWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMl07 Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZmZXJbQkJfU0laRV07Cj4gKwl1aW50MzJfdCBiYXRjaF9i dWZfaGFuZGxlOwo+ICsJaW50IHJpbmcsIGxlbiwgajsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zm c2V0PTB4MTAwMDsKPiArCXVpbnQ2NF90IHZhZGRyOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJp dmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFM SUFTSU5HX1BQR1RUKSk7Cj4gKwlpZ3RfcmVxdWlyZShoYXNfc29mdHBpbl9zdXBwb3J0KGZkKSk7 Cj4gKwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIHNpemVvZihiYXRjaF9i dWZmZXIpKTsKPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihNVUxUSVBBR0Vf Qk9fU0laRSk7Cj4gKwo+ICsJbGVuID0gMDsKPiArCW1lbXNldChiYXRjaF9idWZmZXIsIDAsIHNp emVvZihiYXRjaF9idWZmZXIpKTsKPiArCW1lbXNldChzaGFyZWRfYnVmZmVyLCAwLCBNVUxUSVBB R0VfQk9fU0laRSk7Cj4gKwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNoYXJlZF9oYW5k bGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLAo+ICsJCQkJICAg ICBNVUxUSVBBR0VfQk9fU0laRSk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBd LCBzaGFyZWRfaGFuZGxlLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdf b2Zmc2V0KTsKPiArCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21t YW5kcyAqLwo+ICsJdmFkZHIgPSBwaW5uaW5nX29mZnNldDsKPiArCWZvcihqPTA7IGo8IE5VTV9E V09SRFM7IGorKykgewo+ICsJCWxlbiArPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1 ZmZlciArIChsZW4vNCksIHZhZGRyLAo+ICsJCQkJCSAgaiwKPiArCQkJCQkgIChqID09IE5VTV9E V09SRFMgLSAxKSA/IHRydWU6ZmFsc2UpOwo+ICsJCXZhZGRyICs9IHNpemVvZihzaGFyZWRfYnVm ZmVyWzBdKTsgIC8qIDQgYnl0ZXMgKi8KPiArCX0KPiArCj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNo X2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29t bWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNo X2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsJ c2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwln ZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfaGFuZGxlKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGV4 ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+ICsJZm9yKGogPSAwOyBq IDwgKE1VTFRJUEFHRV9CT19TSVpFL3NpemVvZih1aW50MzJfdCkpOyBqKyspIHsKPiArCQlpZ3Rf ZmFpbF9vbl9mKHNoYXJlZF9idWZmZXJbal0gIT0gaiwKPiArCQkiTWlzbWF0Y2ggaW4gaW5kZXgg JWQ6IDB4JTA4WFxuIiwgaiwgc2hhcmVkX2J1ZmZlcltqXSk7Cj4gKwl9Cj4gKwo+ICsJZ2VtX2Ns b3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2hhbmRs ZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ICsK PiArLyogZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0Cj4gKyAqIFRoaXMgdGVzdCB3aWxsIHJlcXVl c3QgdG8gcGluIGEgc2hhcmVkIGJ1ZmZlciB0byBhbiBpbnZhbGlkCj4gKyAqIFZNQSAgPiA0OC1i aXQgYWRkcmVzcyBpZiBzeXN0ZW0gc3VwcG9ydHMgNDhCIFBQR1RUCj4gKyAqIElmIHN5c3RlbSBz dXBwb3J0cyAzMkIgUFBHVFQsIGl0IHdpbGwgdGVzdCB0aGUgZXF1aXZhbGVudCBpbnZhbGlkIFZN QQo+ICsgKiBDcmVhdGUgc2hhcmVkIGJ1ZmZlciBvZiBzaXplIDRLCj4gKyAqIFRyeSBhbmQgUGlu IG9iamVjdCB0byBpbnZhbGlkIGFkZHJlc3MKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9p bnZhbGlkX3ZtYV90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsK PiArCWludCBmZCwgcmV0Owo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMV07Cj4gKwl1aW50MzJfdCBzaGFyZWRfYnVmX2hh bmRsZTsKPiArCWludCByaW5nOwo+ICsJdWludDY0X3QgaW52YWxpZF9hZGRyZXNzX2Zvcl80OGIg PSAweDkwMDAwMDAwMDAwMDA7IC8qIDUyIGJpdCBhZGRyZXNzICovCj4gKwl1aW50NjRfdCBpbnZh bGlkX2FkZHJlc3NfZm9yXzMyYiA9IDB4OTAwMDAwMDAwOyAvKiAzNiBiaXQgYWRkcmVzcyAqLwo+ ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWly ZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSB8fAo+ICsJCSAgICB1c2Vz X2Z1bGxfcHBndHQoZmQsIEZVTExfMzJfQklUX1BQR1RUKSk7Cj4gKwlpZ3RfcmVxdWlyZShoYXNf c29mdHBpbl9zdXBwb3J0KGZkKSk7Cj4gKwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1f YnVmZmVyKEJPX1NJWkUpOwo+ICsJKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwo+ICsJCj4g KwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJw dHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLCBCT19TSVpFKTsKPiArCj4gKwlpZiAodXNl c19mdWxsX3BwZ3R0KGZkLCBGVUxMXzQ4X0JJVF9QUEdUVCkpIHsKPiArCQlzZXR1cF9leGVjX29i aigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkJICAgICAgIEVYRUNf T0JKRUNUX1BJTk5FRCwgaW52YWxpZF9hZGRyZXNzX2Zvcl80OGIpOwo+ICsJfSBlbHNlIHsKPiAr CQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiAr CQkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgaW52YWxpZF9hZGRyZXNzX2Zvcl8zMmIpOwo+ ICsJfQo+ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNi dWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMSwgMCk7Cj4gKwo+ICsJLyogRXhw ZWN0IGV4ZWNidWYgdG8gZmFpbCAqLwo+ICsJcmV0ID0gZHJtSW9jdGwoZmQsCj4gKwkJICAgICAg IERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMiwKPiArCQkgICAgICAgJmV4ZWNidWYpOwo+ ICsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0gRU5PU1BDKTsKPiArCWlndF9hc3NlcnRfbmVxKHJl dCwgMCk7Cj4gKwkKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsJY2xv c2UoZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ICsKPiArCj4gKy8qIGdlbV9w aW5faGlnaF9hZGRyZXNzX3Rlc3QKPiArICogVGhpcyB0ZXN0IHdpbGwgY3JlYXRlIGEgc2hhcmVk IGJ1ZmZlciwgYW5kIGNyZWF0ZSBhIGNvbW1hbmQKPiArICogZm9yIEdQVSB0byB3cml0ZSBkYXRh IGluIGl0LiBJdCB3aWxsIGF0dGVtcHQgdG8gcGluIHRoZSBidWZmZXIgYXQgYWRkcmVzcyA+IDMy IGJpdHMuCj4gKyAqIENQVSB3aWxsIHJlYWQgYW5kIG1ha2Ugc3VyZSBleHBlY3RlZCB2YWx1ZSBp cyBvYnRhaW5lZAo+ICsKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNoYXJlIGJ1ZmZl ciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIGJhdGNo IGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2Ug dmlydHVhbCBhZGRyZXNzIG9mIGJ1ZmZlciBhcyAweDExMDAwMDAwMDAgKD4gMzIgYml0KQo+ICsg KiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmplY3QKPiArICogU2V0ICdv ZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIHNoYXJlZCBidWZmZXIgVk1BCj4gKyAqIFN1Ym1pdCBl eGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQgYnVm ZmVyIG1hdGNoZXMgREFUQQo+ICsgKiBOb3cgdHJ5IHNhbWUgdGVzdCB3aXRob3V0IHVzaW5nIDQ4 QklUIGZsYWcKPiArICogdGVzdCBzaG91bGQgcGFzcyB3aXRoIHJlcXVlc3RlZCBwaW5uaW5nIGFk ZHJlc3MKPiArKi8KPiArCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5faGlnaF9hZGRyZXNzX3Rlc3Qo dm9pZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaW50IGZkOwo+ICsJ dWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29i amVjdDJbMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZmZXJbU1RPUkVfQkFUQ0hfQlVGRkVSX1NJ WkUgKyAyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxl Owo+ICsJaW50IHJpbmcsIGxlbjsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4 Owo+ICsJdWludDY0X3QgaGlnaF9hZGRyZXNzID0gMHgxMTExRkZGRjAwMDsgLyogNDQgYml0IGFk ZHJlc3MgKi8KPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJ aWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxMXzQ4X0JJVF9QUEdUVCkpOwo+ICsJ aWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+ICsKPiArCWJhdGNoX2J1Zl9o YW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY3B1IGJ1 ZmZlciwgc2V0IHRvIGFsbCAweEYncyAqLwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1f YnVmZmVyKEJPX1NJWkUpOwo+ICsJKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwo+ICsKPiAr CS8qIHNoYXJlIHdpdGggR1BVICovCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9IGluaXRfdXNlcnB0 cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0 ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiArCWxlbiA9IGdlbV9zdG9y ZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBoaWdoX2FkZHJlc3MsIGRhdGEsIHRydWUpOwo+ ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7 Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigm ZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkgICAgICAgRVhFQ19PQkpF Q1RfUElOTkVEIHwgRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MsIGhpZ2hfYWRkcmVz cyk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxl LCAwLCAwKTsKPiArCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCj4gKwlzZXR1cF9l eGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7Cj4gKwlzdWJt aXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV91c2Vy cHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGV4ZWNf b2JqZWN0MlswXS5vZmZzZXQgPT0gaGlnaF9hZGRyZXNzKTsKPiArCS8qIGNoZWNrIG9uIENQVSB0 byBzZWUgaWYgdmFsdWUgY2hhbmdlcyAqLwo+ICsJaWd0X2ZhaWxfb25fZihzaGFyZWRfYnVmZmVy WzBdICE9IGRhdGEsCj4gKwkJIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BVIHdyaXRlLCBc Cj4gKwkJZXhwZWN0ZWQ6IDB4JXgsIGdvdDogMHgleFxuIiwgZGF0YSwgc2hhcmVkX2J1ZmZlclsw XSk7Cj4gKwo+ICsJLyogTm93IHRyeSBwaW5uaW5nIHRvIGhpZ2ggYWRkcmVzcyB3aXRob3V0IDQ4 QklUIGZsYWcgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9i dWZfaGFuZGxlLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIGhpZ2hfYWRkcmVzcyk7 Cj4gKwlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxl bik7Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsK PiArCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCj4gKwlpZ3Rf YXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gaGlnaF9hZGRyZXNzKTsKPiArCj4gKwln ZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRf YnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICt9 Cj4gKwo+ICsvKiBnZW1fcGluX25lYXJfNDhCaXRfdGVzdAo+ICsgKiBUaGlzIHRlc3Qgd2lsbCBj cmVhdGUgYSBzaGFyZWQgYnVmZmVyLAo+ICsgKiBhbmQgY3JlYXRlIGEgY29tbWFuZCBmb3IgR1BV IHRvIHdyaXRlIGRhdGEgaW4gaXQuIEl0IHdpbGwgYXR0ZW1wdAo+ICsgKiB0byBwaW4gdGhlIGJ1 ZmZlciBhdCBhZGRyZXNzID4gNDcgYml0cyA8PSA0OC1iaXQuCj4gKyAqIENQVSB3aWxsIHJlYWQg YW5kIG1ha2Ugc3VyZSBleHBlY3RlZCB2YWx1ZSBpcyBvYnRhaW5lZAo+ICsKPiArICogTWFsbG9j IGEgNEsgYnVmZmVyCj4gKyAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVz ZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZp cnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2UgdmlydHVhbCBhZGRyZXNzIG9mIGJ1ZmZlciBh cyByYW5nZSBiZXR3ZWVuIDQ3LWJpdCBhbmQgNDgtYml0Cj4gKyAqIFNldCBFWEVDX09CSkVDVF9Q SU5ORUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ICsgKiBTZXQgJ29mZnNldCcgaW4gZXhlYyBvYmpl Y3QgdG8gc2hhcmVkIGJ1ZmZlciBWTUEKPiArICogU3VibWl0IGV4ZWNidWZmZXIKPiArICogVmVy aWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4g KyovCj4gKyNkZWZpbmUgQkVHSU5fSElHSF9BRERSRVNTIDB4N0ZGRkZGRkZGMDAwCj4gKyNkZWZp bmUgRU5EX0hJR0hfQUREUkVTUyAweEZGRkZGRkZGQzAwMAo+ICsjZGVmaW5lIEFERFJFU1NfSU5D UkVNRU5UIDB4MjAwMDAwMDAwMAo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX25lYXJfNDhCaXRfdGVz dCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpbnQgZmQ7Cj4g Kwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1 ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNf b2JqZWN0MlsyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltCT19TSVpFXTsKPiArCXVpbnQz Ml90IGJhdGNoX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlOwo+ICsJaW50IHJpbmcsIGxl bjsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4Owo+ICsJdWludDY0X3QgaGln aF9hZGRyZXNzOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4g KwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSk7Cj4g KwlpZ3RfcmVxdWlyZShoYXNfc29mdHBpbl9zdXBwb3J0KGZkKSk7Cj4gKwo+ICsJYmF0Y2hfYnVm X2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjcHUg YnVmZmVyLCBzZXQgdG8gYWxsIDB4RidzICovCj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21l bV9idWZmZXIoQk9fU0laRSk7Cj4gKwkqc2hhcmVkX2J1ZmZlciA9IDB4RkZGRkZGRkY7Cj4gKwo+ ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2Vy cHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwgQk9fU0laRSk7Cj4gKwo+ICsJZm9yICho aWdoX2FkZHJlc3MgPSBCRUdJTl9ISUdIX0FERFJFU1M7IGhpZ2hfYWRkcmVzcyA8PSBFTkRfSElH SF9BRERSRVNTOwo+ICsJCQkJCQloaWdoX2FkZHJlc3MrPUFERFJFU1NfSU5DUkVNRU5UKSB7Cj4g KwkJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ICsJCWxl biA9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBoaWdoX2FkZHJlc3MsCj4g KwkJCQkJZGF0YSwgdHJ1ZSk7Cj4gKwkJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAw LCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwkJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4g KwkJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4g KwkJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQgfCBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJf QUREUkVTUywKPiArCQkJICAgICAgIGhpZ2hfYWRkcmVzcyk7Cj4gKwkJc2V0dXBfZXhlY19vYmoo JmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJCXJpbmcg PSBJOTE1X0VYRUNfUkVOREVSOwo+ICsJCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNf b2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCQlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVm LCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCQlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfYnVm X2hhbmRsZSk7Cj4gKwo+ICsJCWlndF9hc3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNldCA9PSBo aWdoX2FkZHJlc3MpOwo+ICsJCS8qIGNoZWNrIG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdl cyAqLwo+ICsJCWlndF9mYWlsX29uX2Yoc2hhcmVkX2J1ZmZlclswXSAhPSBkYXRhLAo+ICsJCSJc bkNQVSByZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3cml0ZSwgZXhwZWN0ZWQ6IDB4JXgsIFwKPiAr CQlnb3Q6IDB4JXhcbiwgMHglIlBSSXg2NCIiLCBkYXRhLCBzaGFyZWRfYnVmZmVyWzBdLCBoaWdo X2FkZHJlc3MpOwo+ICsJfQo+ICsKPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7 Cj4gKwlnZW1fY2xvc2UoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCWNsb3NlKGZkKTsKPiAr CWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gK30KPiArCj4gKwo+ICtpbnQgbWFpbihpbnQgYXJnYywg Y2hhciogYXJndltdKQo+ICt7Cj4gKwlpZ3Rfc3VidGVzdF9pbml0KGFyZ2MsIGFyZ3YpOwo+ICsJ aWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwo+ICsKPiArCS8qIEFsbCB0ZXN0cyBuZWVkIFBQR1RU IHN1cHBvcnQgKi8KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX3VzZXJwdHIiKSB7Cj4gKwkJZ2Vt X3Bpbl91c2VycHRyX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX2JvIikg ewo+ICsJCWdlbV9waW5fYm9fdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9tdWx0 aXBsZV9wcm9jZXNzIikgewo+ICsJCWdlbV9tdWx0aXBsZV9wcm9jZXNzX3Rlc3QoKTsKPiArCX0K PiArCWlndF9zdWJ0ZXN0KCJnZW1fcmVwaW4iKSB7Cj4gKwkJZ2VtX3JlcGluX3Rlc3QoKTsKPiAr CX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX292ZXJsYXAiKSB7Cj4gKwkJZ2VtX3Bpbl9vdmVy bGFwX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fd3JpdGVfbXVsdGlwYWdlX2J1 ZmZlciIpIHsKPiArCQlnZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZlcl90ZXN0KCk7Cj4gKwl9Cj4g Kwo+ICsJLyogRm9sbG93aW5nIHRlc3RzIG5lZWQgMzIvNDggQml0IFBQR1RUIHN1cHBvcnQgKi8K PiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX2ludmFsaWRfdm1hIikgewo+ICsJCWdlbV9waW5faW52 YWxpZF92bWFfdGVzdCgpOwo+ICsJfQo+ICsKPiArCS8qIEZvbGxvd2luZyB0ZXN0cyBuZWVkIDQ4 IEJpdCBQUEdUVCBzdXBwb3J0ICovCj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3NvZnRwaW5fc3RyZXNz Iikgewo+ICsJCWdlbV9zb2Z0cGluX3N0cmVzc190ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVz dCgiZ2VtX3Bpbl9oaWdoX2FkZHJlc3MiKSB7Cj4gKwkJZ2VtX3Bpbl9oaWdoX2FkZHJlc3NfdGVz dCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5fbmVhcl80OEJpdCIpIHsKPiArCQln ZW1fcGluX25lYXJfNDhCaXRfdGVzdCgpOwo+ICsJfQo+ICsKPiArCWlndF9leGl0KCk7Cj4gK30K PgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=