From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH igt] igt/gem_softpin: Remove false dependencies on esoteric features Date: Fri, 15 Jan 2016 09:41:22 +0000 Message-ID: <5698BEC2.4070009@linux.intel.com> References: <1452769369-12802-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 66A066EB2A for ; Fri, 15 Jan 2016 01:41:25 -0800 (PST) In-Reply-To: <1452769369-12802-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKT24gMTQvMDEvMTYgMTE6MDIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBGb3Igc29mdHBp bm5pbmcsIHdlIGRvIG5vdCByZXF1aXJlIGVpdGhlciB1c2VycHRyIG9yIGV4dGVuZGVkIHBwZ3R0 LCBzbwo+IHJlbW92ZSB0aG9zZSByZXF1aXJlbWVudHMgYW5kIG1ha2UgdGhlIHRlc3RzIHdvcmsg dW5pdmVyc2FsbHkuIChDZXJ0YWluCj4gQUJJIHRlc3RzIHJlcXVpcmUgbGFyZ2UgR1RULCBvciBw ZXItcHJvY2VzcyBHVFQuKQo+Cj4gSW4gdGhlIHByb2Nlc3MsIG1ha2UgdGhlIHRlc3RzIG1vcmUg ZXh0ZW5zaXZlIC0gdmFsaWRhdGUgb3ZlcmxhcHBpbmcKPiBoYW5kbGluZyBtb3JlIGNhcmVmdWws IGV4cGxpY2l0bHkgdGVzdCBuby1yZWxvY2F0aW9uIHN1cHBvcnQsIHZhbGlkYXRlCj4gbW9yZSBB QkkgaGFuZGxpbmcuIEFuZCBmb3IgZnVuLCBjYXVzZSBhIGtlcm5lbCBHUEYuCj4KPiBTaWduZWQt b2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0KPiAg IHRlc3RzL2dlbV9zb2Z0cGluLmMgfCAxMzEzICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAgMSBmaWxlIGNoYW5nZWQsIDMyNCBpbnNlcnRpb25z KCspLCA5ODkgZGVsZXRpb25zKC0pCgpBZGRpbmcgc29tZSBwZW9wbGUgdG8gQ2Mgd2hvIGNvdWxk IGJlIHBvdGVudGlhbCByZXZpZXdlcnMuIFdlIHdlcmUgCnRyYWNraW5nIGJsYW5rZXQgaW1wcm92 ZW1lbnRzIGFncmVlZCBkdXJpbmcgY29kZSByZXZpZXcgb2YgdGhlIGluaXRpYWwgCnZlcnNpb24g aW4gVklaLTY5NTEuIEkndmUgcHV0IGEgcmVmZXJlbmNlIHRvIHRoaXMgcGF0Y2ggaW4gdGhlcmUu CgpSZWdhcmRzLAoKVHZydGtvCgo+IGRpZmYgLS1naXQgYS90ZXN0cy9nZW1fc29mdHBpbi5jIGIv dGVzdHMvZ2VtX3NvZnRwaW4uYwo+IGluZGV4IDFjYmRlNGUuLmYxODg1NTkgMTAwNjQ0Cj4gLS0t IGEvdGVzdHMvZ2VtX3NvZnRwaW4uYwo+ICsrKyBiL3Rlc3RzL2dlbV9zb2Z0cGluLmMKPiBAQCAt MjYsODAgKzI2LDEwIEBACj4gICAgKgo+ICAgICovCj4KPiAtI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ IC0jaW5jbHVkZSA8c3RkbGliLmg+Cj4gLSNpbmNsdWRlIDxzdGRpbnQuaD4KPiAtI2luY2x1ZGUg PHN0ZGlvLmg+Cj4gLSNpbmNsdWRlIDxzdHJpbmcuaD4KPiAtI2luY2x1ZGUgPGZjbnRsLmg+Cj4g LSNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+IC0jaW5jbHVkZSA8ZXJybm8uaD4KPiAtI2luY2x1ZGUg PHN5cy9zdGF0Lmg+Cj4gLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPiAtI2luY2x1ZGUgPHN5cy90 aW1lLmg+Cj4gLSNpbmNsdWRlIDxtYWxsb2MuaD4KPiAtI2luY2x1ZGUgImRybS5oIgo+IC0jaW5j bHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKPiAtI2luY2x1ZGUgImRybXRlc3QuaCIKPiAtI2luY2x1 ZGUgImludGVsX2NoaXBzZXQuaCIKPiAtI2luY2x1ZGUgImludGVsX2lvLmgiCj4gLSNpbmNsdWRl ICJpOTE1X2RybS5oIgo+IC0jaW5jbHVkZSA8YXNzZXJ0Lmg+Cj4gLSNpbmNsdWRlIDxzeXMvd2Fp dC5oPgo+IC0jaW5jbHVkZSA8c3lzL2lwYy5oPgo+IC0jaW5jbHVkZSA8c3lzL3NobS5oPgo+IC0j aW5jbHVkZSAiaWd0X2ttcy5oIgo+IC0jaW5jbHVkZSA8aW50dHlwZXMuaD4KPiAtI2luY2x1ZGUg PHN5cy90eXBlcy5oPgo+IC0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiAtCj4gLSNkZWZpbmUgQk9f U0laRSA0MDk2Cj4gLSNkZWZpbmUgTVVMVElQQUdFX0JPX1NJWkUgMiAqIEJPX1NJWkUKPiAtI2Rl ZmluZSBTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSA0Cj4gKyNpbmNsdWRlICJpZ3QuaCIKPiArCj4g ICAjZGVmaW5lIEVYRUNfT0JKRUNUX1BJTk5FRAkoMTw8NCkKPiAgICNkZWZpbmUgRVhFQ19PQkpF Q1RfU1VQUE9SVFNfNDhCX0FERFJFU1MgKDE8PDMpCj4gLSNkZWZpbmUgU0hBUkVEX0JVRkZFUl9T SVpFIDQwOTYKPiAtCj4gLXR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2dlbV91c2VycHRyIGk5MTVf Z2VtX3VzZXJwdHI7Cj4gLQo+IC1zdGF0aWMgdWludDMyX3QgaW5pdF91c2VycHRyKGludCBmZCwg aTkxNV9nZW1fdXNlcnB0ciAqLCB2b2lkICpwdHIsIHVpbnQ2NF90IHNpemUpOwo+IC1zdGF0aWMg dm9pZCAqY3JlYXRlX21lbV9idWZmZXIodWludDY0X3Qgc2l6ZSk7Cj4gLXN0YXRpYyBpbnQgZ2Vt X2NhbGxfdXNlcnB0cl9pb2N0bChpbnQgZmQsIGk5MTVfZ2VtX3VzZXJwdHIgKnVzZXJwdHIpOwo+ IC1zdGF0aWMgdm9pZCBnZW1fcGluX3VzZXJwdHJfdGVzdCh2b2lkKTsKPiAtc3RhdGljIHZvaWQg Z2VtX3Bpbl9ib190ZXN0KHZvaWQpOwo+IC1zdGF0aWMgdm9pZCBnZW1fcGluX2ludmFsaWRfdm1h X3Rlc3QoYm9vbCB0ZXN0X2RlY291cGxlX2ZsYWdzLCBib29sIHRlc3RfY2Fub25pY2FsX29mZnNl dCk7Cj4gLXN0YXRpYyB2b2lkIGdlbV9waW5fb3ZlcmxhcF90ZXN0KHZvaWQpOwo+IC1zdGF0aWMg dm9pZCBnZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0KHZvaWQpOwo+IC0KPiAtI2RlZmluZSBOT19Q UEdUVCAwCj4gLSNkZWZpbmUgQUxJQVNJTkdfUFBHVFQgMQo+IC0jZGVmaW5lIEZVTExfMzJfQklU X1BQR1RUIDIKPiAtI2RlZmluZSBGVUxMXzQ4X0JJVF9QUEdUVCAzCj4gLS8qIHVzZXNfZnVsbF9w cGd0dAo+IC0gKiBGaW5kcyBzdXBwb3J0ZWQgUFBHVFQgZGV0YWlscy4KPiAtICogQGZkIERSTSBm ZAo+IC0gKiBAbWluIGNhbiBiZQo+IC0gKiAwIC0gTm8gUFBHVFQKPiAtICogMSAtIEFsaWFzaW5n IFBQR1RUCj4gLSAqIDIgLSBGdWxsIFBQR1RUICgzMmIpCj4gLSAqIDMgLSBGdWxsIFBQR1RUICg0 OGIpCj4gLSAqIFJFVFVSTlMgdHJ1ZS9mYWxzZSBpZiBtaW4gc3VwcG9ydCBpcyBwcmVzZW50Cj4g LSovCj4gLXN0YXRpYyBib29sIHVzZXNfZnVsbF9wcGd0dChpbnQgZmQsIGludCBtaW4pCj4gLXsK PiAtCXN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSBncDsKPiAtCWludCB2YWwgPSAwOwo+IC0KPiAt CW1lbXNldCgmZ3AsIDAsIHNpemVvZihncCkpOwo+IC0JZ3AucGFyYW0gPSAxODsgLyogSEFTX0FM SUFTSU5HX1BQR1RUICovCj4gLQlncC52YWx1ZSA9ICZ2YWw7Cj4gLQo+IC0JaWYgKGRybUlvY3Rs KGZkLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4g LQllcnJubyA9IDA7Cj4gLQlyZXR1cm4gdmFsID49IG1pbjsKPiAtfQo+Cj4gICAvKiBoYXNfc29m dHBpbl9zdXBwb3J0Cj4gICAgKiBGaW5kcyBpZiBzb2Z0cGluIGZlYXR1cmUgaXMgc3VwcG9ydGVk Cj4gQEAgLTEyMSw4MyArNTEsNiBAQCBzdGF0aWMgYm9vbCBoYXNfc29mdHBpbl9zdXBwb3J0KGlu dCBmZCkKPiAgIAlyZXR1cm4gKHZhbCA9PSAxKTsKPiAgIH0KPgo+IC0vKiBnZW1fY2FsbF91c2Vy cHRyX2lvY3RsCj4gLSAqIEhlbHBlciB0byBjYWxsIGlvY3RsIC0gVE9ETzogbW92ZSB0byBsaWIK PiAtICogQGZkIC0gZHJtIGZkCj4gLSAqIEB1c2VycHRyIC0gcG9pbnRlciB0byBpbml0aWFsaXNl ZCB1c2VycHRyCj4gLSAqIFJFVFVSTlMgc3RhdHVzIG9mIGlvY3RsIGNhbGwKPiAtKi8KPiAtc3Rh dGljIGludCBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGludCBmZCwgaTkxNV9nZW1fdXNlcnB0ciAq dXNlcnB0cikKPiAtewo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQgPSBkcm1Jb2N0bChmZCwgRFJN X0lPQ1RMX0k5MTVfR0VNX1VTRVJQVFIsIHVzZXJwdHIpOwo+IC0KPiAtCWlmIChyZXQpCj4gLQkJ cmV0ID0gZXJybm87Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtLyogaW5pdF91c2Vy cHRyCj4gLSAqIEhlbHBlciB0aGF0IGluaXRzIHVzZXJwdHIgYW4gcmV0dXJucyBoYW5kbGUKPiAt ICogQGZkIC0gZHJtIGZkCj4gLSAqIEB1c2VycHRyIC0gcG9pbnRlciB0byBlbXB0eSB1c2VycHRy Cj4gLSAqIEBwdHIgLSBidWZmZXIgdG8gYmUgc2hhcmVkCj4gLSAqIEBzaXplIC0gc2l6ZSBvZiBi dWZmZXIKPiAtICogQHJvIC0gcmVhZCBvbmx5IGZsYWcKPiAtICogUkVUVVJOUyBoYW5kbGUgdG8g c2hhcmVkIGJ1ZmZlcgo+IC0qLwo+IC1zdGF0aWMgdWludDMyX3QgaW5pdF91c2VycHRyKGludCBm ZCwgaTkxNV9nZW1fdXNlcnB0ciAqdXNlcnB0ciwgdm9pZCAqcHRyLAo+IC0JCQkgICAgIHVpbnQ2 NF90IHNpemUpCj4gLXsKPiAtCWludCByZXQ7Cj4gLQo+IC0JbWVtc2V0KCh2b2lkKil1c2VycHRy LCAwLCBzaXplb2YoaTkxNV9nZW1fdXNlcnB0cikpOwo+IC0KPiAtCXVzZXJwdHItPnVzZXJfcHRy ID0gKHVuc2lnbmVkIGxvbmcpcHRyOyAvKiBOZWVkIHRoZSBjYXN0IHRvIG92ZXJjb21lIGNvbXBp bGVyIHdhcm5pbmcgKi8KPiAtCXVzZXJwdHItPnVzZXJfc2l6ZSA9IHNpemU7Cj4gLQl1c2VycHRy LT5mbGFncyA9IDA7IC8qIHVzZSBzeW5jaHJvbml6ZWQgb3BlcmF0aW9uICovCj4gLQo+IC0JcmV0 ID0gZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bChmZCwgdXNlcnB0cik7Cj4gLQlpZ3RfYXNzZXJ0X2Vx KHJldCwgMCk7Cj4gLQo+IC0JcmV0dXJuIHVzZXJwdHItPmhhbmRsZTsKPiAtfQo+IC0KPiAtLyog Y3JlYXRlX21lbV9idWZmZXIKPiAtICogQ3JlYXRlcyBhIDRLIGFsaWduZWQgQ1BVIGJ1ZmZlcgo+ IC0gKiBAc2l6ZSAtIHNpemUgb2YgYnVmZmVyCj4gLSAqIFJFVFVSTlMgcG9pbnRlciB0byBidWZm ZXIgb2YgQHNpemUKPiAtKi8KPiAtc3RhdGljIHZvaWQgKmNyZWF0ZV9tZW1fYnVmZmVyKHVpbnQ2 NF90IHNpemUpCj4gLXsKPiAtCXZvaWQgKmFkZHI7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9 IHBvc2l4X21lbWFsaWduKCZhZGRyLCA0MDk2LCBzaXplKTsKPiAtCWlndF9hc3NlcnQocmV0ID09 IDApOwo+IC0KPiAtCXJldHVybiBhZGRyOwo+IC19Cj4gLQo+IC0vKiBzZXR1cF9leGVjX29iago+ IC0gKiBwb3B1bGF0ZSBleGVjIG9iamVjdAo+IC0gKiBAZXhlYyAtIGV4ZWMgb2JqZWN0Cj4gLSAq IEBoYW5kbGUgLSBoYW5kbGUgdG8gZ2VtIGJ1ZmZlcgo+IC0gKiBAZmxhZ3MgLSBhbnkgZmxhZ3MK PiAtICogQG9mZnNldCAtIHJlcXVlc3RlZCBWTUEKPiAtKi8KPiAtc3RhdGljIHZvaWQgc2V0dXBf ZXhlY19vYmooc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWMsCj4gLQkJCSAg IHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgZmxhZ3MsCj4gLQkJCSAgIHVpbnQ2NF90IG9mZnNl dCkKPiAtewo+IC0JbWVtc2V0KGV4ZWMsIDAsIHNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MikpOwo+IC0JZXhlYy0+aGFuZGxlID0gaGFuZGxlOwo+IC0JZXhlYy0+ZmxhZ3Mg PSBmbGFnczsKPiAtCWV4ZWMtPm9mZnNldCA9IG9mZnNldDsKPiAtfQo+IC0KPiAgIC8qIGdlbjhf Y2Fub25pY2FsX2FkZHIKPiAgICAqIFVzZWQgdG8gY29udmVydCBhbnkgYWRkcmVzcyBpbnRvIGNh bm9uaWNhbCBmb3JtLCBpLmUuIFs2Mzo0OF0gPT0gWzQ3XS4KPiAgICAqIEJhc2VkIG9uIGtlcm5l bCdzIHNpZ25fZXh0ZW5kNjQgaW1wbGVtZW50YXRpb24uCj4gQEAgLTIxMCw5MDQgKzYzLDM4NiBA QCBzdGF0aWMgdWludDY0X3QgZ2VuOF9jYW5vbmljYWxfYWRkcih1aW50NjRfdCBhZGRyZXNzKQo+ ICAgCXJldHVybiAoX19zNjQpKGFkZHJlc3MgPDwgc2hpZnQpID4+IHNoaWZ0Owo+ICAgfQo+Cj4g LS8qIGdlbV9zdG9yZV9kYXRhX3N2bQo+IC0gKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBN SV9TVE9SRV9EV09SRF9JTU0gY29tbWFuZAo+IC0gKiBAZmQ6IGRybSBmaWxlIGRlc2NyaXB0b3IK PiAtICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgo+IC0gKiBAdmFkZHI6IGRlc3RpbmF0aW9uIFZp cnR1YWwgYWRkcmVzcwo+IC0gKiBAZGF0YTogZGF0YSB0byBiZSBzdG9yZSBhdCBkZXN0aW5hdGlv bgo+IC0gKiBAZW5kOiB3aGV0aGVyIHRvIGVuZCBiYXRjaCBidWZmZXIgb3Igbm90Cj4gLSovCj4g LXN0YXRpYyBpbnQgZ2VtX3N0b3JlX2RhdGFfc3ZtKGludCBmZCwgdWludDMyX3QgKmNtZF9idWYs IHVpbnQ2NF90IHZhZGRyLAo+IC0JCQkgICAgICB1aW50MzJfdCBkYXRhLCBib29sIGVuZCkKPiAr c3RhdGljIGludCBfX2dlbV9leGVjYnVmKGludCBmZCwgc3RydWN0IGRybV9pOTE1X2dlbV9leGVj YnVmZmVyMiAqZWIpCj4gICB7Cj4gLQlpbnQgaSA9IDA7Cj4gLQo+IC0JY21kX2J1ZltpKytdID0g TUlfU1RPUkVfRFdPUkRfSU1NOwo+IC0JY21kX2J1ZltpKytdID0gdmFkZHIgJiAweEZGRkZGRkZD Owo+IC0JY21kX2J1ZltpKytdID0gKHZhZGRyID4+IDMyKSAmIDB4RkZGRjsgLyogYml0cyAzMjo0 NyAqLwo+IC0KPiAtCWNtZF9idWZbaSsrXSA9IGRhdGE7Cj4gLQlpZiAoZW5kKSB7Cj4gLQkJY21k X2J1ZltpKytdID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiAtCQljbWRfYnVmW2krK10gPSAwOwo+ IC0JfQo+IC0KPiAtCXJldHVybihpICogc2l6ZW9mKHVpbnQzMl90KSk7Cj4gKwlpbnQgZXJyID0g MDsKPiArCWlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX0VYRUNCVUZGRVIyLCBl YikpCj4gKwkJZXJyID0gLWVycm5vOwo+ICsJcmV0dXJuIGVycjsKPiAgIH0KPgo+IC0vKiBnZW1f c3RvcmVfZGF0YQo+IC0gKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9TVE9SRV9EV09S RF9JTU0gY29tbWFuZAo+IC0gKiBUaGlzIG9uZSBmaWxscyB1cCByZWxvYyBidWZmZXIgYXMgd2Vs bAo+IC0gKiBAZmQ6IGRybSBmaWxlIGRlc2NyaXB0b3IKPiAtICogQGNtZF9idWY6IGJhdGNoIGJ1 ZmZlcgo+IC0gKiBAZGF0YTogZGF0YSB0byBiZSBzdG9yZSBhdCBkZXN0aW5hdGlvbgo+IC0gKiBA cmVsb2MgLSByZWxvY2F0aW9uIGVudHJ5Cj4gLSAqIEBlbmQ6IHdoZXRoZXIgdG8gZW5kIGJhdGNo IGJ1ZmZlciBvciBub3QKPiAtKi8KPiAtc3RhdGljIGludCBnZW1fc3RvcmVfZGF0YShpbnQgZmQs IHVpbnQzMl90ICpjbWRfYnVmLAo+IC0JCQkgIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgZGF0 YSwKPiAtCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAo+ IC0JCQkgIGJvb2wgZW5kKQo+ICtzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWQoaW50IGZkKQo+ICAg ewo+IC0JaW50IGkgPSAwOwo+IC0KPiAtCWNtZF9idWZbaSsrXSA9IE1JX1NUT1JFX0RXT1JEX0lN TTsKPiAtCWNtZF9idWZbaSsrXSA9IDA7IC8qIGxvd2VyIDMxIGJpdHMgb2YgNDggYml0IGFkZHJl c3MgLSAwIHJlbG9jIG5lZWRlZCAqLwo+IC0JY21kX2J1ZltpKytdID0gMDsgLyogdXBwZXIgMTUg Yml0cyBvZiA0OCBiaXQgYWRkcmVzcyAtIDAgcmVsb2MgbmVlZGVkICovCj4gLQlyZWxvYy0+b2Zm c2V0ID0gMSAqIHNpemVvZih1aW50MzJfdCk7Cj4gLQlyZWxvYy0+ZGVsdGEgPSAwOwo+IC0JcmVs b2MtPnRhcmdldF9oYW5kbGUgPSBoYW5kbGU7Cj4gLQlyZWxvYy0+cmVhZF9kb21haW5zID0gSTkx NV9HRU1fRE9NQUlOX1JFTkRFUjsKPiAtCXJlbG9jLT53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9E T01BSU5fUkVOREVSOwo+IC0JcmVsb2MtPnByZXN1bWVkX29mZnNldCA9IDA7Cj4gLQljbWRfYnVm W2krK10gPSBkYXRhOwo+IC0JaWYgKGVuZCkgewo+IC0JCWNtZF9idWZbaSsrXSA9IE1JX0JBVENI X0JVRkZFUl9FTkQ7Cj4gLQkJY21kX2J1ZltpKytdID0gMDsKPiArCWNvbnN0IHVpbnQzMl90IGJi ZSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmplY3Q7 Cj4gKwo+ICsJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOwo+ICsJZXhlY2J1 Zi5idWZmZXJzX3B0ciA9ICh1bnNpZ25lZCBsb25nKSZvYmplY3Q7Cj4gKwlleGVjYnVmLmJ1ZmZl cl9jb3VudCA9IDE7Cj4gKwo+ICsJbWVtc2V0KCZvYmplY3QsIDAsIHNpemVvZihvYmplY3QpKTsK PiArCW9iamVjdC5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCAyKjQwOTYpOwo+ICsJb2JqZWN0LmZs YWdzID0gRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MgfCBFWEVDX09CSkVDVF9QSU5O RUQ7Cj4gKwlnZW1fd3JpdGUoZmQsIG9iamVjdC5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUp KTsKPiArCj4gKwkvKiBDaGVjayBpbnZhbGlkIGFsaWdubWVudCAqLwo+ICsJb2JqZWN0Lm9mZnNl dCA9IDQwOTY7Cj4gKwlvYmplY3QuYWxpZ25tZW50ID0gNjQqMTAyNDsKPiArCWlndF9hc3NlcnRf ZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCAtRUlOVkFMKTsKPiArCW9iamVjdC5hbGln bm1lbnQgPSAwOwo+ICsKPiArCS8qIENoZWNrIHdyYXBhcm91bmQgKi8KPiArCW9iamVjdC5vZmZz ZXQgPSAtNDA5NlVMTDsKPiArCWlndF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNi dWYpLCAtRUlOVkFMKTsKPiArCj4gKwkvKiBDaGVjayBiZXlvbmQgYm91bmRzIG9mIGFwZXJ0dXJl ICovCj4gKwlvYmplY3Qub2Zmc2V0ID0gZ2VtX2FwZXJ0dXJlX3NpemUoZmQpIC0gNDA5NjsKPiAr CW9iamVjdC5vZmZzZXQgPSBnZW44X2Nhbm9uaWNhbF9hZGRyKG9iamVjdC5vZmZzZXQpOwo+ICsJ aWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1FSU5WQUwpOwo+ICsK PiArCS8qIENoZWNrIGdlbjggY2Fub25pY2FsIGFkZHJlc3NpbmcgKi8KPiArCWlmIChnZW1fYXBl cnR1cmVfc2l6ZShmZCkgPiAxdWxsPDxHRU44X0hJR0hfQUREUkVTU19CSVQpIHsKPiArCQlvYmpl Y3Qub2Zmc2V0ID0gMXVsbCA8PCBHRU44X0hJR0hfQUREUkVTU19CSVQ7Cj4gKwkJaWd0X2Fzc2Vy dF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1FSU5WQUwpOwo+ICsKPiArCQlvYmpl Y3Qub2Zmc2V0ID0gZ2VuOF9jYW5vbmljYWxfYWRkcihvYmplY3Qub2Zmc2V0KTsKPiArCQlpZ3Rf YXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKSwgMCk7Cj4gICAJfQo+Cj4gLQly ZXR1cm4gKGkgKiBzaXplb2YodWludDMyX3QpKTsKPiAtfQo+ICsJLyogQ2hlY2sgZXh0ZW5kZWQg cmFuZ2UgKi8KPiArCWlmIChnZW1fYXBlcnR1cmVfc2l6ZShmZCkgPiAxdWxsPDwzMikgewo+ICsJ CW9iamVjdC5mbGFncyA9IEVYRUNfT0JKRUNUX1BJTk5FRDsKPiArCQlvYmplY3Qub2Zmc2V0ID0g MXVsbDw8MzI7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1Ziks IC1FSU5WQUwpOwo+Cj4gLS8qIHNldHVwX2V4ZWNidWZmZXIKPiAtICogaGVscGVyIGZvciBidWZm ZXIgZXhlY3V0aW9uCj4gLSAqIEBleGVjYnVmIC0gcG9pbnRlciB0byBleGVjYnVmZmVyCj4gLSAq IEBleGVjX29iamVjdCAtIHBvaW50ZXIgdG8gZXhlYyBvYmplY3QyIHN0cnVjdAo+IC0gKiBAcmlu ZyAtIHJpbmcgdG8gYmUgdXNlZAo+IC0gKiBAYnVmZmVyX2NvdW50IC0gaG93IG1hbnUgYnVmZmVy cyB0byBzdWJtaXQKPiAtICogQGJhdGNoX2xlbmd0aCAtIGxlbmd0aCBvZiBiYXRjaCBidWZmZXIK PiAtKi8KPiAtc3RhdGljIHZvaWQgc2V0dXBfZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyICpleGVjYnVmLAo+IC0JCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyICpleGVjX29iamVjdCwKPiAtCQkJICAgICBpbnQgcmluZywgaW50IGJ1ZmZlcl9j b3VudCwgaW50IGJhdGNoX2xlbmd0aCkKPiAtewo+IC0JZXhlY2J1Zi0+YnVmZmVyc19wdHIgPSAo dW5zaWduZWQgbG9uZylleGVjX29iamVjdDsKPiAtCWV4ZWNidWYtPmJ1ZmZlcl9jb3VudCA9IGJ1 ZmZlcl9jb3VudDsKPiAtCWV4ZWNidWYtPmJhdGNoX3N0YXJ0X29mZnNldCA9IDA7Cj4gLQlleGVj YnVmLT5iYXRjaF9sZW4gPSBiYXRjaF9sZW5ndGg7Cj4gLQlleGVjYnVmLT5jbGlwcmVjdHNfcHRy ID0gMDsKPiAtCWV4ZWNidWYtPm51bV9jbGlwcmVjdHMgPSAwOwo+IC0JZXhlY2J1Zi0+RFIxID0g MDsKPiAtCWV4ZWNidWYtPkRSNCA9IDA7Cj4gLQlleGVjYnVmLT5mbGFncyA9IHJpbmc7Cj4gLQlp OTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKCpleGVjYnVmLCAwKTsKPiAtCWV4ZWNidWYt PnJzdmQyID0gMDsKPiAtfQo+IC0KPiAtLyogc3VibWl0X2FuZF9zeW5jCj4gLSAqIEhlbHBlciBm dW5jdGlvbiBmb3IgZXhlYyBhbmQgc3luYyBmdW5jdGlvbnMKPiAtICogQGZkIC0gZHJtIGZkCj4g LSAqIEBleGVjYnVmIC0gcG9pbnRlciB0byBleGVjYnVmZmVyCj4gLSAqIEBiYXRjaF9idWZfaGFu ZGxlIC0gYmF0Y2ggYnVmZmVyIGhhbmRsZQo+IC0qLwo+IC1zdGF0aWMgdm9pZCBzdWJtaXRfYW5k X3N5bmMoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjYnVmLAo+ IC0JCQkgICAgdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSkKPiAtewo+IC0JZ2VtX2V4ZWNidWYo ZmQsIGV4ZWNidWYpOwo+IC0JZ2VtX3N5bmMoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+IC19Cj4g LQo+IC0vKiBnZW1fdXNlcnB0cl9zeW5jCj4gLSAqIGhlbHBlciBmb3Igc3luY2luZyB0byBDUFUg ZG9tYWluIC0gY29weS9wYXN0ZSBmcm9tIHVzZXJibGl0Cj4gLSAqIEBmZCAtIGRybSBmZAo+IC0g KiBAaGFuZGxlIC0gYnVmZmVyIGhhbmRsZSB0byBzeW5jCj4gLSovCj4gLXN0YXRpYyB2b2lkIGdl bV91c2VycHRyX3N5bmMoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUpCj4gLXsKPiAtCWdlbV9zZXRf ZG9tYWluKGZkLCBoYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VNX0RPTUFJTl9D UFUpOwo+IC19Cj4gLQo+IC0KPiAtLyogZ2VtX3Bpbl91c2VycHRyX3Rlc3QKPiAtICogVGhpcyB0 ZXN0IHdpbGwgY3JlYXRlIGEgc2hhcmVkIGJ1ZmZlciwgYW5kIGNyZWF0ZSBhIGNvbW1hbmQKPiAt ICogZm9yIEdQVSB0byB3cml0ZSBkYXRhIGluIGl0Cj4gLSAqIENQVSB3aWxsIHJlYWQgYW5kIG1h a2Ugc3VyZSBleHBlY3RlZCB2YWx1ZSBpcyBvYnRhaW5lZAo+IC0gKiBNYWxsb2MgYSA0SyBidWZm ZXIKPiAtICogU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0 bAo+IC0gKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQg b2YgYnVmZmVyCj4gLSAqIFVzZSAweDEwMDAgYWRkcmVzcyBhcyBkZXN0aW5hdGlvbiBhZGRyZXNz IGluIGJhdGNoIGJ1ZmZlcgo+IC0gKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhl YyBvYmplY3QKPiAtICogU2V0ICdvZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIDB4MTAwMAo+IC0g KiBTdWJtaXQgZXhlY2J1ZmZlcgo+IC0gKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4g c2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEKPiAtKi8KPiAtc3RhdGljIHZvaWQgZ2VtX3Bpbl91 c2VycHRyX3Rlc3Qodm9pZCkKPiAtewo+IC0JaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+IC0J aW50IGZkOwo+IC0JdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2Jq ZWN0MiBleGVjX29iamVjdDJbMl07Cj4gLQl1aW50MzJfdCBiYXRjaF9idWZmZXJbU1RPUkVfQkFU Q0hfQlVGRkVSX1NJWkUgKyAyXTsKPiAtCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUsIHNoYXJl ZF9idWZfaGFuZGxlOwo+IC0JaW50IHJpbmcsIGxlbjsKPiAtCWNvbnN0IHVpbnQzMl90IGRhdGEg PSAweDEyMzQ1Njc4Owo+IC0JdWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDEwMDA7Cj4gLQo+ IC0JZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiAtCWlndF9yZXF1aXJlKHVz ZXNfZnVsbF9wcGd0dChmZCwgQUxJQVNJTkdfUFBHVFQpKTsKPiAtCWlndF9yZXF1aXJlKGhhc19z b2Z0cGluX3N1cHBvcnQoZmQpKTsKPiAtCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZk LCBCT19TSVpFKTsKPiAtCj4gLQkvKiBjcmVhdGUgY3B1IGJ1ZmZlciAqLwo+IC0Jc2hhcmVkX2J1 ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+IC0KPiAtCS8qIHNoYXJlIHdpdGgg R1BVICovCj4gLQlzaGFyZWRfYnVmX2hhbmRsZSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIs IHNoYXJlZF9idWZmZXIsCj4gLQkJCQkJIEJPX1NJWkUpOwo+IC0KPiAtCS8qIGNyZWF0ZSBjb21t YW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiAtCWxlbiA9IGdlbV9zdG9yZV9kYXRh X3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBwaW5uaW5nX29mZnNldCwgZGF0YSwgdHJ1ZSk7Cj4gLQln ZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiAt Cj4gLQkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiAtCXNldHVwX2V4ZWNfb2JqKCZleGVj X29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+IC0JCSAgICAgICBFWEVDX09CSkVDVF9Q SU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiAtCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJb MV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+IC0KPiAtCXJpbmcgPSBJOTE1X0VYRUNfUkVO REVSOwo+IC0KPiAtCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0Miwgcmlu ZywgMiwgbGVuKTsKPiAtCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9o YW5kbGUpOwo+IC0JZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+IC0K PiAtCS8qIENoZWNrIGlmIGRyaXZlciBwaW5uZWQgdGhlIGJ1ZmZlciBhcyByZXF1ZXN0ZWQgKi8K PiAtCWlndF9mYWlsX29uX2YoZXhlY19vYmplY3QyWzBdLm9mZnNldCAhPSBwaW5uaW5nX29mZnNl dCwKPiAtCQkJIlxuRmFpbGVkIHRvIHBpbiBhdCByZXF1ZXN0ZWQgb2Zmc2V0Iik7Cj4gLQkvKiBj aGVjayBvbiBDUFUgdG8gc2VlIGlmIHZhbHVlIGNoYW5nZXMgKi8KPiAtCWlndF9mYWlsX29uX2Yo c2hhcmVkX2J1ZmZlclswXSAhPSBkYXRhLAo+IC0JCSAgICAgICJcbkNQVSByZWFkIGRvZXMgbm90 IG1hdGNoIEdQVSB3cml0ZSxcCj4gLQkJCWV4cGVjdGVkOiAweCV4LCBnb3Q6IDB4JXhcbiIsCj4g LQkJCWRhdGEsIHNoYXJlZF9idWZmZXJbMF0pOwo+IC0KPiAtCWdlbV9jbG9zZShmZCwgYmF0Y2hf YnVmX2hhbmRsZSk7Cj4gLQlnZW1fY2xvc2UoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiAtCWNs b3NlKGZkKTsKPiAtCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gKwkJb2JqZWN0Lm9mZnNldCA9IGdl bjhfY2Fub25pY2FsX2FkZHIob2JqZWN0Lm9mZnNldCk7Cj4gKwkJb2JqZWN0LmZsYWdzIHw9IEVY RUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTOwo+ICsJCWlndF9hc3NlcnRfZXEoX19nZW1f ZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCAwKTsKPiArCX0KPiAgIH0KPgo+IC0vKiBnZW1fcGluX2Jv Cj4gLSAqIFRoaXMgdGVzdCB3aWxsIHRlc3Qgc29mdHBpbm5pbmcgb2YgYSBnZW0gYnVmZmVyIG9i amVjdAo+IC0gKiBNYWxsb2MgYSA0SyBidWZmZXIKPiAtICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0 byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+IC0gKiBVc2UgMHgxMDAwIGFk ZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBiYXRjaCBidWZmZXIKPiAtICogU2V0IEVY RUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gLSAqIFNldCAnb2Zmc2V0JyBp biBleGVjIG9iamVjdCB0byAweDEwMDAKPiAtICogU3VibWl0IGV4ZWNidWZmZXIKPiAtICogVmVy aWZ5IHZhbHVlIHBpbm5lZCBvZmZzZXQgbWF0Y2hlcyB0aGUgcmVxdWVzdAo+IC0qLwo+IC1zdGF0 aWMgdm9pZCBnZW1fcGluX2JvX3Rlc3Qodm9pZCkKPiArc3RhdGljIHZvaWQgdGVzdF9zb2Z0cGlu KGludCBmZCkKPiAgIHsKPiAtCWludCBmZDsKPiArCWNvbnN0IHVpbnQzMl90IHNpemUgPSAxMDI0 ICogMTAyNDsKPiArCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4g ICAJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+IC0Jc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzJdOwo+IC0JdWludDMyX3QgYmF0 Y2hfYnVmZmVyW1NUT1JFX0JBVENIX0JVRkZFUl9TSVpFICsgMl07Cj4gLQl1aW50MzJfdCBiYXRj aF9idWZfaGFuZGxlLCB1bnNoYXJlZF9idWZfaGFuZGxlOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dl bV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jWzRdOwo+IC0JaW50IHJpbmcsIGxlbjsKPiAtCXVpbnQz Ml90IHZhbHVlOwo+IC0JY29uc3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gLQl1aW50 NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4MTAwMDsKPiAtCj4gLQlmZCA9IGRybV9vcGVuX2RyaXZl cihEUklWRVJfSU5URUwpOwo+IC0JaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElB U0lOR19QUEdUVCkpOwo+IC0JaWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+ IC0KPiAtCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiAtCj4g LQkvKiBjcmVhdGUgZ2VtIGJ1ZmZlciAqLwo+IC0JdW5zaGFyZWRfYnVmX2hhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIEJPX1NJWkUpOwo+IC0KPiAtCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRo IHdyaXRlIGNvbW1hbmQgKi8KPiAtCWxlbiA9IGdlbV9zdG9yZV9kYXRhKGZkLCBiYXRjaF9idWZm ZXIsIHVuc2hhcmVkX2J1Zl9oYW5kbGUsIGRhdGEsCj4gLQkJCQlyZWxvYywgdHJ1ZSk7Cj4gLQln ZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiAt Cj4gLQkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiAtCXNldHVwX2V4ZWNfb2JqKCZleGVj X29iamVjdDJbMF0sIHVuc2hhcmVkX2J1Zl9oYW5kbGUsCj4gLQkJICAgICAgIEVYRUNfT0JKRUNU X1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+IC0Jc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0 MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gLQlleGVjX29iamVjdDJbMV0ucmVsb2Nh dGlvbl9jb3VudCA9IDE7Cj4gLQlleGVjX29iamVjdDJbMV0ucmVsb2NzX3B0ciA9ICh1bnNpZ25l ZCBsb25nKXJlbG9jOwo+IC0KPiAtCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+IC0KPiAtCXNl dHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiAt CXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+IC0KPiAt CS8qIENoZWNrIGlmIGRyaXZlciBwaW5uZWQgdGhlIGJ1ZmZlciBhcyByZXF1ZXN0ZWQgKi8KPiAt CWlndF9mYWlsX29uX2YoZXhlY19vYmplY3QyWzBdLm9mZnNldCAhPSBwaW5uaW5nX29mZnNldCwK PiAtCQkJIlxuRmFpbGVkIHRvIHBpbiBhdCByZXF1ZXN0ZWQgb2Zmc2V0Iik7Cj4gLQlnZW1fcmVh ZChmZCwgdW5zaGFyZWRfYnVmX2hhbmRsZSwgMCwgKHZvaWQqKSZ2YWx1ZSwgNCk7Cj4gLQlpZ3Rf YXNzZXJ0KHZhbHVlID09IGRhdGEpOwo+IC0KPiAtCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hh bmRsZSk7Cj4gLQlnZW1fY2xvc2UoZmQsIHVuc2hhcmVkX2J1Zl9oYW5kbGUpOwo+IC0JY2xvc2Uo ZmQpOwo+IC19Cj4gLQo+IC0KPiAtLyogZ2VtX211bHRpcGxlX3Byb2Nlc3NfdGVzdAo+IC0gKiBS dW4gYmFzaWMgdGVzdCBzaW11bHRhbmVvdXNseSB3aXRoIG11bHRpcGxlIHByb2Nlc3Nlcwo+IC0g KiBUaGlzIHdpbGwgdGVzdCBwaW5uaW5nIHNhbWUgVkEgc2VwYXJhdGVseSBpbiBlYWNoIHByb2Nl c3MKPiAtCj4gLSAqIGZvcmsoKTsKPiAtICogRXhlY3V0ZSBiYXNpYyB0ZXN0IGluIHBhcmVudC9j aGlsZCBwcm9jZXNzZXMKPiAtKi8KPiAtI2RlZmluZSBNQVhfTlVNX1BST0NFU1NFUyAxMAo+IC0K PiAtc3RhdGljIHZvaWQgZ2VtX211bHRpcGxlX3Byb2Nlc3NfdGVzdCh2b2lkKQo+IC17Cj4gLQlp bnQgZmQ7Cj4gLQo+IC0JZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiAtCWln dF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgQUxJQVNJTkdfUFBHVFQpKTsKPiAtCWlndF9y ZXF1aXJlKGhhc19zb2Z0cGluX3N1cHBvcnQoZmQpKTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyIG9iamVjdDsKPiArCXVpbnQ2NF90IG9mZnNldCwgZW5kOwo+ICsJaW50IGxv b3A7Cj4gKwo+ICsJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOwo+ICsJZXhl Y2J1Zi5idWZmZXJzX3B0ciA9ICh1bnNpZ25lZCBsb25nKSZvYmplY3Q7Cj4gKwlleGVjYnVmLmJ1 ZmZlcl9jb3VudCA9IDE7Cj4gKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMTAyNDsgbG9vcCsrKSB7 Cj4gKwkJbWVtc2V0KCZvYmplY3QsIDAsIHNpemVvZihvYmplY3QpKTsKPiArCQlvYmplY3QuaGFu ZGxlID0gZ2VtX2NyZWF0ZShmZCwgMipzaXplKTsKPiArCQlnZW1fd3JpdGUoZmQsIG9iamVjdC5o YW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKPiArCj4gKwkJLyogRmluZCBhIGhvbGUgKi8K PiArCQlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ICsJCWdlbV9jbG9zZShmZCwgb2JqZWN0 LmhhbmRsZSk7Cj4gKwo+ICsJCWlndF9kZWJ1ZygiTWFkZSBhIDIgTWlCIGhvbGU6ICUwOGxseFxu IiwKPiArCQkJICBvYmplY3Qub2Zmc2V0KTsKPiArCj4gKwkJb2JqZWN0LmhhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIHNpemUpOwo+ICsJCWdlbV93cml0ZShmZCwgb2JqZWN0LmhhbmRsZSwgMCwgJmJi ZSwgc2l6ZW9mKGJiZSkpOwo+ICsJCW9iamVjdC5mbGFncyB8PSBFWEVDX09CSkVDVF9QSU5ORUQ7 Cj4gKwo+ICsJCWVuZCA9IG9iamVjdC5vZmZzZXQgKyBzaXplOwo+ICsJCWZvciAob2Zmc2V0ID0g b2JqZWN0Lm9mZnNldDsgb2Zmc2V0IDw9IGVuZDsgb2Zmc2V0ICs9IDQwOTYpIHsKPiArCQkJb2Jq ZWN0Lm9mZnNldCA9IG9mZnNldDsKPiArCQkJZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKPiAr CQkJaWd0X2Fzc2VydF9lcV91NjQob2JqZWN0Lm9mZnNldCwgb2Zmc2V0KTsKPiArCQl9Cj4KPiAt CWlndF9mb3JrKGNoaWxkLCBNQVhfTlVNX1BST0NFU1NFUykgewo+IC0JCWdlbV9waW5fdXNlcnB0 cl90ZXN0KCk7Cj4gKwkJZ2VtX2Nsb3NlKGZkLCBvYmplY3QuaGFuZGxlKTsKPiAgIAl9Cj4gLQlp Z3Rfd2FpdGNoaWxkcmVuKCk7Cj4gLQo+IC0JY2xvc2UoZmQpOwo+IC19Cj4gLQo+IC0KPiAtLyog Z2VtX3JlcGluX3Rlc3QKPiAtICogVGhpcyB0ZXN0IHRyaWVzIHRvIHJlcGluIGEgYnVmZmVyIGF0 IGEgcHJldmlvdXNseSBwaW5uZWQgdm1hCj4gLSAqIGZyb20gYSBkaWZmZXJlbnQgZXhlY2J1Zi4K PiAtICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gLSAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BV IGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiAtICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0 ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+IC0gKiBVc2UgMHgxMDAwIGFkZHJlc3Mg YXMgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBiYXRjaCBidWZmZXIKPiAtICogU2V0IEVYRUNfT0JK RUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gLSAqIFNldCAnb2Zmc2V0JyBpbiBleGVj IG9iamVjdCB0byAweDEwMDAgVk1BCj4gLSAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gLSAqIFZlcmlm eSB2YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFUQQo+IC0K PiAtICogQ3JlYXRlIHNlY29uZCBzaGFyZWQgYnVmZmVyCj4gLSAqIEZvbGxvdyBhbGwgc3RlcHMg YWJvdmUKPiAtICogRXhlY3B0LCBmb3Igb2Zmc2V0LCB1c2UgVk1BIG9mIGZpcnN0IGJ1ZmZlciBh Ym92ZQo+IC0gKiBTdWJtaXQgZXhlY2J1ZmZlcgo+IC0gKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3Qg RFdPUkQgaW4gc2Vjb25kIHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gLSovCj4gLXN0YXRp YyB2b2lkIGdlbV9yZXBpbl90ZXN0KHZvaWQpCj4gLXsKPiAtCWk5MTVfZ2VtX3VzZXJwdHIgdXNl cnB0cjsKPiAtCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjE7Cj4gLQlpbnQgZmQ7Cj4gLQl1aW50 MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiAtCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyMTsKPiAtCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiAtCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiAtCXVpbnQzMl90IGJhdGNoX2J1 ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJdOwo+IC0JdWludDMyX3QgYmF0Y2hfYnVm X2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlMTsKPiAtCWludCBy aW5nLCBsZW47Cj4gLQljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiAtCXVpbnQ2 NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHgxMDAwOwo+IC0KPiAtCS8qIENyZWF0ZSBnZW0gb2JqZWN0 ICovCj4gLQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+IC0JaWd0X3JlcXVp cmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+IC0JaWd0X3JlcXVpcmUo aGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+IC0KPiAtCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1f Y3JlYXRlKGZkLCBCT19TSVpFKTsKPiAtCj4gLQkvKiBjcmVhdGUgY3B1IGJ1ZmZlciwgc2V0IGZp cnN0IGVsZW1lbnRzIHRvIDB4MCAqLwo+IC0Jc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVm ZmVyKEJPX1NJWkUpOwo+IC0Jc2hhcmVkX2J1ZmZlcjEgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19T SVpFKTsKPiAtCXNoYXJlZF9idWZmZXJbMF0gPSAweDA7Cj4gLQlzaGFyZWRfYnVmZmVyMVswXSA9 IDB4MDsKPiAtCj4gLQkvKiBzaGFyZSB3aXRoIEdQVSBhbmQgZ2V0IGhhbmRsZXMgKi8KPiAtCXNo YXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZl ciwKPiAtCQkJCQkgQk9fU0laRSk7Cj4gLQlzaGFyZWRfYnVmX2hhbmRsZTEgPSBpbml0X3VzZXJw dHIoZmQsICZ1c2VycHRyMSwgc2hhcmVkX2J1ZmZlcjEsCj4gLQkJCQkJICBCT19TSVpFKTsKPiAt Cj4gLQkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gLQls ZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgcGlubmluZ19vZmZzZXQs IGRhdGEsIHRydWUpOwo+IC0JZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRj aF9idWZmZXIsIGxlbik7Cj4gLQo+IC0JLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gLQlz ZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiAtCQkg ICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gLQlzZXR1cF9leGVj X29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiAtCj4gLQly aW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiAtCj4gLQlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVm LCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7Cj4gLQlzdWJtaXRfYW5kX3N5bmMoZmQsICZl eGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiAtCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJl ZF9idWZfaGFuZGxlKTsKPiAtCj4gLQlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQg PT0gcGlubmluZ19vZmZzZXQpOwo+IC0JaWd0X2Fzc2VydCgqc2hhcmVkX2J1ZmZlciA9PSBkYXRh KTsKPiAtCj4gLQkvKiBTZWNvbmQgYnVmZmVyICovCj4gLQkvKiBjcmVhdGUgY29tbWFuZCBidWZm ZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gLQlwaW5uaW5nX29mZnNldCA9IGV4ZWNfb2JqZWN0 MlswXS5vZmZzZXQ7Cj4gLQlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZl ciwgcGlubmluZ19vZmZzZXQsIGRhdGEsIHRydWUpOwo+IC0JZ2VtX3dyaXRlKGZkLCBiYXRjaF9i dWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gLQo+IC0JLyogc3VibWl0IGNvbW1h bmQgYnVmZmVyICovCj4gLQkvKiBQaW4gYXQgc2hhcmVkX2J1ZmZlciwgbm90IHNoYXJlZF9idWZm ZXIxICovCj4gLQkvKiBXZSBhcmUgcmVxdWVzdGluZyBhZGRyZXNzIHdoZXJlIGFub3RoZXIgYnVm ZmVyIHdhcyBwaW5uZWQgcHJldmlvdXNseSAqLwo+IC0Jc2V0dXBfZXhlY19vYmooJmV4ZWNfb2Jq ZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUxLAo+IC0JCSAgICAgICBFWEVDX09CSkVDVF9QSU5O RUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiAtCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0s IGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+IC0KPiAtCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVS Owo+IC0KPiAtCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywg MiwgbGVuKTsKPiAtCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5k bGUpOwo+IC0JZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUxKTsKPiAtCj4g LQlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+ IC0JaWd0X2Fzc2VydCgqc2hhcmVkX2J1ZmZlcjEgPT0gZGF0YSk7Cj4gLQo+IC0JZ2VtX2Nsb3Nl KGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiAtCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5k bGUpOwo+IC0JY2xvc2UoZmQpOwo+IC0KPiAtCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gLQlmcmVl KHNoYXJlZF9idWZmZXIxKTsKPiAgIH0KPgo+IC0KPiAtLyogZ2VtX3JlcGluX292ZXJsYXBfdGVz dAo+IC0gKiBUaGlzIHRlc3Qgd2lsbCBhdHRlbXB0IHRvIHBpbiB0d28gYnVmZmVycyBhdCB0aGUg c2FtZSBWTUEgYXMgcGFydCBvZiB0aGUgc2FtZQo+IC0gICBleGVjYnVmZmVyIG9iamVjdAo+IC0K PiAtICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gLSAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BV IGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiAtICogQ3JlYXRlIHNlY29uZCBzaGFyZWQgYnVmZmVy Cj4gLSAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBv ZiBlYWNoIGJ1ZmZlcgo+IC0gKiBVc2Ugc2FtZSB2aXJ0dWFsIGFkZHJlc3MgYXMgZGVzdGluYXRp b24gYWRkcmVzc2VzIGluIGJhdGNoIGJ1ZmZlcgo+IC0gKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVE IGZsYWcgaW4gYm90aCBleGVjIG9iamVjdHMKPiAtICogU2V0ICdvZmZzZXQnIGluIGJvdGggZXhl YyBvYmplY3RzIHRvIHNhbWUgVk1BCj4gLSAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gLSAqIENvbW1h bmQgc2hvdWxkIHJldHVybiBFSU5WQUwsIHNpbmNlIHdlIGFyZSB0cnlpbmcgdG8gcGluIHRvIHNh bWUgVk1BCj4gLSovCj4gLXN0YXRpYyB2b2lkIGdlbV9waW5fb3ZlcmxhcF90ZXN0KHZvaWQpCj4g K3N0YXRpYyB2b2lkIHRlc3Rfb3ZlcmxhcChpbnQgZmQpCj4gICB7Cj4gLQlpOTE1X2dlbV91c2Vy cHRyIHVzZXJwdHI7Cj4gLQlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHIxOwo+IC0JaW50IGZkLCBy ZXQ7Cj4gLQl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiAtCXVpbnQzMl90ICpzaGFyZWRfYnVm ZmVyMTsKPiArCWNvbnN0IHVpbnQzMl90IHNpemUgPSAxMDI0ICogMTAyNDsKPiArCWNvbnN0IHVp bnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dl bV9leGVjYnVmZmVyMiBleGVjYnVmOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVj dDIgZXhlY19vYmplY3QyWzNdOwo+IC0JdWludDMyX3Qgc2hhcmVkX2J1Zl9oYW5kbGUsIHNoYXJl ZF9idWZfaGFuZGxlMTsKPiAtCWludCByaW5nLCBsZW47Cj4gLQl1aW50NjRfdCBwaW5uaW5nX29m ZnNldCA9IDB4MTAwMDsKPiAtCj4gLQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwp Owo+IC0JaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ IC0JaWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+IC0KPiAtCXNoYXJlZF9i dWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiAtCXNoYXJlZF9idWZmZXIxID0g Y3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSAqIDIpOwo+IC0KPiAtCS8qIHNoYXJlIHdpdGggR1BV ICovCj4gLQlzaGFyZWRfYnVmX2hhbmRsZSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNo YXJlZF9idWZmZXIsCj4gLQkJCQkJIEJPX1NJWkUpOwo+IC0Jc2hhcmVkX2J1Zl9oYW5kbGUxID0g aW5pdF91c2VycHRyKGZkLCAmdXNlcnB0cjEsIHNoYXJlZF9idWZmZXIxLAo+IC0JCQkJCSAgQk9f U0laRSAqIDIpOwo+IC0KPiAtCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+IC0Jc2V0dXBf ZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gLQkJICAgICAg IEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+IC0Jc2V0dXBfZXhlY19vYmoo JmV4ZWNfb2JqZWN0MlsxXSwgc2hhcmVkX2J1Zl9oYW5kbGUxLAo+IC0JCSAgICAgICBFWEVDX09C SkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiAtCj4gLQlyaW5nID0gSTkxNV9FWEVDX1JF TkRFUjsKPiAtCj4gLQlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJp bmcsIDIsIGxlbik7Cj4gLQo+IC0JcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dF TV9FWEVDQlVGRkVSMiwgJmV4ZWNidWYpOwo+IC0KPiAtCS8qIGV4cGVjdCB0byBmYWlsICovCj4g LQlpZ3RfYXNzZXJ0X25lcShyZXQsIDApOwo+IC0JaWd0X2Fzc2VydChlcnJubyA9PSBFSU5WQUwp Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqZWN0WzJdOwo+ICsJdWlu dDY0X3Qgb2Zmc2V0Owo+ICsJdWludDMyX3QgaGFuZGxlOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIDMqc2l6ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGhhbmRsZSwgMCwgJmJiZSwgc2l6 ZW9mKGJiZSkpOwo+ICsKPiArCW1lbXNldChvYmplY3QsIDAsIHNpemVvZihvYmplY3QpKTsKPiAr CW9iamVjdFswXS5oYW5kbGUgPSBoYW5kbGU7Cj4gKwo+ICsJLyogRmluZCBhIGhvbGUgKi8KPiAr CW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKPiArCWV4ZWNidWYuYnVmZmVy c19wdHIgPSAodW5zaWduZWQgbG9uZylvYmplY3Q7Cj4gKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9 IDE7Cj4gKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ICsKPiArCWlndF9kZWJ1ZygiTWFk ZSBhIDN4MSBNaUIgaG9sZTogJTA4bGx4XG4iLAo+ICsJCSAgb2JqZWN0WzBdLm9mZnNldCk7Cj4g Kwo+ICsJb2JqZWN0WzBdLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIHNpemUpOwo+ICsJb2JqZWN0 WzBdLm9mZnNldCArPSBzaXplOwo+ICsJb2JqZWN0WzBdLmZsYWdzIHw9IEVYRUNfT0JKRUNUX1BJ Tk5FRDsKPiArCW9iamVjdFsxXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBzaXplKTsKPiArCW9i amVjdFsxXS5mbGFncyB8PSBFWEVDX09CSkVDVF9QSU5ORUQ7Cj4gKwlnZW1fd3JpdGUoZmQsIG9i amVjdFsxXS5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKPiArCWV4ZWNidWYuYnVmZmVy X2NvdW50ID0gMjsKPiArCj4gKwkvKiBDaGVjayB0aGF0IHdlIGZpdCBpbnRvIG91ciBob2xlICov Cj4gKwlvYmplY3RbMV0ub2Zmc2V0ID0gb2JqZWN0WzBdLm9mZnNldCAtIHNpemU7Cj4gKwlnZW1f ZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ICsJaWd0X2Fzc2VydF9lcV91NjQob2JqZWN0WzFdLm9m ZnNldCArIHNpemUsIG9iamVjdFswXS5vZmZzZXQpOwo+ICsKPiArCW9iamVjdFsxXS5vZmZzZXQg PSBvYmplY3RbMF0ub2Zmc2V0ICsgc2l6ZTsKPiArCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7 Cj4gKwlpZ3RfYXNzZXJ0X2VxX3U2NChvYmplY3RbMV0ub2Zmc2V0IC0gc2l6ZSwgb2JqZWN0WzBd Lm9mZnNldCk7Cj4gKwo+ICsJLyogVHJ5IGFsbCBwb3NzaWJsZSBwYWdlLWFsaWduZWQgb3Zlcmxh cHMgKi8KPiArCWZvciAob2Zmc2V0ID0gb2JqZWN0WzBdLm9mZnNldCAtIHNpemUgKyA0MDk2Owo+ ICsJICAgICBvZmZzZXQgPCBvYmplY3RbMF0ub2Zmc2V0ICsgc2l6ZTsKPiArCSAgICAgb2Zmc2V0 ICs9IDQwOTYpIHsKPiArCQlvYmplY3RbMV0ub2Zmc2V0ID0gb2Zmc2V0Owo+ICsJCWlndF9kZWJ1 ZygiWzBdPVslMDhsbHggLSAlMDhsbHhdIFsxXT1bJTA4bGx4IC0gJTA4bGx4XVxuIiwKPiArCQkJ ICAobG9uZyBsb25nKW9iamVjdFswXS5vZmZzZXQsCj4gKwkJCSAgKGxvbmcgbG9uZylvYmplY3Rb MF0ub2Zmc2V0ICsgc2l6ZSwKPiArCQkJICAobG9uZyBsb25nKW9iamVjdFsxXS5vZmZzZXQsCj4g KwkJCSAgKGxvbmcgbG9uZylvYmplY3RbMV0ub2Zmc2V0ICsgc2l6ZSk7Cj4gKwkJaWd0X2Fzc2Vy dF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1FSU5WQUwpOwo+ICsJCWlndF9hc3Nl cnRfZXFfdTY0KG9iamVjdFsxXS5vZmZzZXQsIG9mZnNldCk7Cj4gKwl9Cj4KPiAtCWNsb3NlKGZk KTsKPiAtCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gLQlmcmVlKHNoYXJlZF9idWZmZXIxKTsKPiAr CWdlbV9jbG9zZShmZCwgb2JqZWN0WzFdLmhhbmRsZSk7Cj4gKwlnZW1fY2xvc2UoZmQsIG9iamVj dFswXS5oYW5kbGUpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICAgfQo+Cj4gLS8qIGdl bV9zb2Z0cGluX3N0cmVzc190ZXN0Cj4gLSAqIFN0cmVzcyB0ZXN0IHdoaWNoIGNyZWF0ZXMgMTBL IGJ1ZmZlcnMgYW5kIHNoYXJlcyB3aXRoIEdQVQo+IC0gKiBDcmVhdGUgMTAwSyB1aW50MzIgYnVm ZmVycyBvZiBzaXplIDRLIGVhY2gKPiAtICogU2hhcmUgd2l0aCBHUFUgdXNpbmcgdXNlcnB0ciBp b2N0bAo+IC0gKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4gZmlyc3QgZWxl bWVudCBvZiBlYWNoIGJ1ZmZlcgo+IC0gKiBQaW4gZWFjaCBidWZmZXIgdG8gdmFyeWluZyBhZGRy ZXNzZXMgc3RhcnRpbmcgZnJvbSAweDgwMDAwMDAwMDAwMCBnb2luZyBiZWxvdwo+IC0gKiAocmVx dWlyZXMgb2Zmc2V0cyBpbiBjYW5vbmljYWwgZm9ybSkKPiAtICogRXhlY3V0ZSBCYXRjaCBCdWZm ZXIgb24gQmxpdCByaW5nIFNUUkVTU19OVU1fTE9PUFMgdGltZXMKPiAtICogVmFsaWRhdGUgZXZl cnkgYnVmZmVyIGhhcyBEQVRBIGluIGZpcnN0IGVsZW1lbnQKPiAtICogUmluc2UgYW5kIFJlcGVh dCBvbiBSZW5kZXIgcmluZwo+IC0qLwo+IC0jZGVmaW5lIFNUUkVTU19OVU1fQlVGRkVSUyAxMDAw MDAKPiAtI2RlZmluZSBTVFJFU1NfTlVNX0xPT1BTIDEwMAo+IC0jZGVmaW5lIFNUUkVTU19TVE9S RV9DT01NQU5EUyA0ICogU1RSRVNTX05VTV9CVUZGRVJTCj4gLSNkZWZpbmUgU1RSRVNTX1NUQVJU X0FERFJFU1MgMHg4MDAwMDAwMDAwMDAKPiAtc3RhdGljIHZvaWQgZ2VtX3NvZnRwaW5fc3RyZXNz X3Rlc3Qodm9pZCkKPiArc3RhdGljIHVpbnQ2NF90IGJ1c3lfYmF0Y2goaW50IGZkKQo+ICAgewo+ IC0JaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+IC0JaW50IGZkOwo+IC0JdWludDMyX3QgKipz aGFyZWRfYnVmZmVyOwo+IC0JdWludDMyX3QgKnNoYXJlZF9oYW5kbGU7Cj4gKwljb25zdCBpbnQg Z2VuID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKTsKPiArCWNvbnN0IGludCBo YXNfNjRiaXRfcmVsb2MgPSBnZW4gPj0gODsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNi dWZmZXIyIGV4ZWNidWY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhl Y19vYmplY3QyOwo+IC0JdWludDMyX3QgKmJhdGNoX2J1ZmZlcjsKPiAtCXVpbnQzMl90IGJhdGNo X2J1Zl9oYW5kbGU7Cj4gLQlpbnQgcmluZywgbGVuOwo+IC0JaW50IGJ1ZiwgbG9vcDsKPiAtCXVp bnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gU1RSRVNTX1NUQVJUX0FERFJFU1M7Cj4gLQo+IC0JZmQg PSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiAtCWlndF9yZXF1aXJlKHVzZXNfZnVs bF9wcGd0dChmZCwgRlVMTF80OF9CSVRfUFBHVFQpKTsKPiAtCWlndF9yZXF1aXJlKGhhc19zb2Z0 cGluX3N1cHBvcnQoZmQpKTsKPiAtCj4gLQo+IC0JLyogQWxsb2NhdGUgYmxvYnMgZm9yIGFsbCBk YXRhIHN0cnVjdHVyZXMgKi8KPiAtCXNoYXJlZF9oYW5kbGUgPSBjYWxsb2MoU1RSRVNTX05VTV9C VUZGRVJTLCBzaXplb2YodWludDMyX3QpKTsKPiAtCXNoYXJlZF9idWZmZXIgPSBjYWxsb2MoU1RS RVNTX05VTV9CVUZGRVJTLCBzaXplb2YodWludDMyX3QgKikpOwo+IC0JZXhlY19vYmplY3QyID0g Y2FsbG9jKFNUUkVTU19OVU1fQlVGRkVSUyArIDEsCj4gLQkJCQlzaXplb2Yoc3RydWN0IGRybV9p OTE1X2dlbV9leGVjX29iamVjdDIpKTsKPiAtCS8qIDQgZHdvcmRzIHBlciBidWZmZXIgKyAyIGZv ciB0aGUgZW5kIG9mIGJhdGNoYnVmZmVyICovCj4gLQliYXRjaF9idWZmZXIgPSBjYWxsb2MoU1RS RVNTX1NUT1JFX0NPTU1BTkRTICsgMiwgc2l6ZW9mKHVpbnQzMl90KSk7Cj4gLQliYXRjaF9idWZf aGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgKFNUUkVTU19TVE9SRV9DT01NQU5EUyArIDIpKjQpOwo+ IC0KPiAtCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmRzICovCj4g LQlsZW4gPSAwOwo+IC0JZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVm KyspIHsKPiAtCQlzaGFyZWRfYnVmZmVyW2J1Zl0gPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpF KTsKPiAtCQkqc2hhcmVkX2J1ZmZlcltidWZdID0gMHhGRkZGRkZGRjsKPiAtCj4gLQkJLyogc2hh cmUgd2l0aCBHUFUgKi8KPiAtCQlzaGFyZWRfaGFuZGxlW2J1Zl0gPSBpbml0X3VzZXJwdHIoZmQs ICZ1c2VycHRyLAo+IC0JCQkJCQkgIHNoYXJlZF9idWZmZXJbYnVmXSwKPiAtCQkJCQkJICBCT19T SVpFKTsKPiAtCj4gLQkJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MltidWZdLCBzaGFyZWRf aGFuZGxlW2J1Zl0sCj4gLQkJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQgfAo+IC0JCQkgICAg ICAgRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MsCj4gLQkJCSAgICAgICBnZW44X2Nh bm9uaWNhbF9hZGRyKHBpbm5pbmdfb2Zmc2V0KSk7Cj4gLQkJbGVuICs9IGdlbV9zdG9yZV9kYXRh X3N2bShmZCwgYmF0Y2hfYnVmZmVyICsgKGxlbi80KSwKPiAtCQkJCQkgIGdlbjhfY2Fub25pY2Fs X2FkZHIocGlubmluZ19vZmZzZXQpLAo+IC0JCQkJCSAgYnVmLCAoYnVmID09IFNUUkVTU19OVU1f QlVGRkVSUy0xKT8gXAo+IC0JCQkJCSAgdHJ1ZTpmYWxzZSk7Cj4gLQo+IC0JCS8qIGRlY3JlbWVu dGFsIDRLIGFsaWduZWQgYWRkcmVzcyAqLwo+IC0JCXBpbm5pbmdfb2Zmc2V0IC09IEFMSUdOKEJP X1NJWkUsIDQwOTYpOwo+IC0JfQo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIg b2JqZWN0WzJdOwo+ICsJdWludDMyX3QgKm1hcDsKPiArCWludCBmYWN0b3IgPSAxMDsKPiArCWlu dCBpID0gMDsKPgo+IC0JLyogc2V0dXAgY29tbWFuZCBidWZmZXIgKi8KPiAtCWdlbV93cml0ZShm ZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4pOwo+IC0Jc2V0dXBfZXhl Y19vYmooJmV4ZWNfb2JqZWN0MltTVFJFU1NfTlVNX0JVRkZFUlNdLCBiYXRjaF9idWZfaGFuZGxl LAo+IC0JCSAgICAgICAwLCAwKTsKPiAtCj4gLQkvKiBXZSB3YW50IHRvIHJ1biB0aGlzIG9uIEJM VCByaW5nIGlmIHBvc3NpYmxlICovCj4gLQlpZiAoSEFTX0JMVF9SSU5HKGludGVsX2dldF9kcm1f ZGV2aWQoZmQpKSkgewo+IC0JCXJpbmcgPSBJOTE1X0VYRUNfQkxUOwo+IC0KPiAtCQlzZXR1cF9l eGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsCj4gLQkJCQkgU1RSRVNTX05V TV9CVUZGRVJTICsgMSwgbGVuKTsKPiAtCj4gLQkJZm9yIChsb29wID0gMDsgbG9vcCA8IFNUUkVT U19OVU1fTE9PUFM7IGxvb3ArKykgewo+IC0JCQlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVm LCBiYXRjaF9idWZfaGFuZGxlKTsKPiAtCQkJLyogU2V0IHBpbm5pbmcgb2Zmc2V0IGJhY2sgdG8g b3JpZ2luYWwgdmFsdWUgKi8KPiAtCQkJcGlubmluZ19vZmZzZXQgPSBTVFJFU1NfU1RBUlRfQURE UkVTUzsKPiAtCQkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKysp IHsKPiAtCQkJCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9oYW5kbGVbYnVmXSk7Cj4gLQkJ CQlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MltidWZdLm9mZnNldCA9PQo+IC0JCQkJCWdlbjhfY2Fu b25pY2FsX2FkZHIocGlubmluZ19vZmZzZXQpKTsKPiAtCQkJCWlndF9mYWlsX29uX2YoKnNoYXJl ZF9idWZmZXJbYnVmXSAhPSBidWYsIFwKPiAtCQkJCSJNaXNtYXRjaCBpbiBidWZmZXIgJWQsIGl0 ZXJhdGlvbiAlZDogMHglMDhYXG4iLCBcCj4gLQkJCQlidWYsIGxvb3AsICpzaGFyZWRfYnVmZmVy W2J1Zl0pOwo+IC0JCQkJcGlubmluZ19vZmZzZXQgLT0gQUxJR04oQk9fU0laRSwgNDA5Nik7Cj4g LQkJCX0KPiAtCQkJLyogUmVzZXQgdGhlIGJ1ZmZlciBlbnRyaWVzIGZvciBuZXh0IGl0ZXJhdGlv biAqLwo+IC0JCQlmb3IoYnVmID0gMDsgYnVmIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBidWYrKykg ewo+IC0JCQkJKnNoYXJlZF9idWZmZXJbYnVmXSA9IDB4RkZGRkZGRkY7Cj4gLQkJCX0KPiAtCQl9 Cj4gKwltZW1zZXQob2JqZWN0LCAwLCBzaXplb2Yob2JqZWN0KSk7Cj4gKwlvYmplY3RbMF0uaGFu ZGxlID0gZ2VtX2NyZWF0ZShmZCwgMTAyNCoxMDI0KTsKPiArCW9iamVjdFsxXS5oYW5kbGUgPSBn ZW1fY3JlYXRlKGZkLCA0MDk2KTsKPiArCW1hcCA9IGdlbV9tbWFwX19jcHUoZmQsIG9iamVjdFsx XS5oYW5kbGUsIDAsIDQwOTYsIFBST1RfV1JJVEUpOwo+ICsJZ2VtX3NldF9kb21haW4oZmQsIG9i amVjdFsxXS5oYW5kbGUsCj4gKwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VN X0RPTUFJTl9DUFUpOwo+ICsKPiArCSptYXAgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsKPiAr CW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKPiArCWV4ZWNidWYuYnVmZmVy c19wdHIgPSAodW5zaWduZWQgbG9uZylvYmplY3Q7Cj4gKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9 IDI7Cj4gKwlpZiAoZ2VuID49IDYpCj4gKwkJZXhlY2J1Zi5mbGFncyA9IEk5MTVfRVhFQ19CTFQ7 Cj4gKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ICsKPiArCWlndF9kZWJ1ZygiQWN0aXZl IG9mZnNldHMgPSBbJTA4bGx4LCAlMDhsbHhdXG4iLAo+ICsJCSAgb2JqZWN0WzBdLm9mZnNldCwg b2JqZWN0WzFdLm9mZnNldCk7Cj4gKwo+ICsjZGVmaW5lIENPUFlfQkxUX0NNRAkJKDI8PDI5fDB4 NTM8PDIyfDB4NikKPiArI2RlZmluZSBCTFRfV1JJVEVfQUxQSEEJCSgxPDwyMSkKPiArI2RlZmlu ZSBCTFRfV1JJVEVfUkdCCQkoMTw8MjApCj4gKwlnZW1fc2V0X2RvbWFpbihmZCwgb2JqZWN0WzFd LmhhbmRsZSwKPiArCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlO X0NQVSk7Cj4gKwl3aGlsZSAoZmFjdG9yLS0pIHsKPiArCQkvKiBYWV9TUkNfQ09QWSAqLwo+ICsJ CW1hcFtpKytdID0gQ09QWV9CTFRfQ01EIHwgQkxUX1dSSVRFX0FMUEhBIHwgQkxUX1dSSVRFX1JH QjsKPiArCQlpZiAoaGFzXzY0Yml0X3JlbG9jKQo+ICsJCQltYXBbaS0xXSArPSAyOwo+ICsJCW1h cFtpKytdID0gMHhjYyA8PCAxNiB8IDEgPDwgMjUgfCAxIDw8IDI0IHwgKDQqMTAyNCk7Cj4gKwkJ bWFwW2krK10gPSAwOwo+ICsJCW1hcFtpKytdID0gMjU2IDw8IDE2IHwgMTAyNDsKPiArCQltYXBb aSsrXSA9IG9iamVjdFswXS5vZmZzZXQ7Cj4gKwkJaWYgKGhhc182NGJpdF9yZWxvYykKPiArCQkJ bWFwW2krK10gPSBvYmplY3RbMF0ub2Zmc2V0ID4+IDMyOwo+ICsJCW1hcFtpKytdID0gMDsKPiAr CQltYXBbaSsrXSA9IDQwOTY7Cj4gKwkJbWFwW2krK10gPSBvYmplY3RbMF0ub2Zmc2V0Owo+ICsJ CWlmIChoYXNfNjRiaXRfcmVsb2MpCj4gKwkJCW1hcFtpKytdID0gb2JqZWN0WzBdLm9mZnNldCA+ PiAzMjsKPiAgIAl9Cj4gKwltYXBbaSsrXSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwltdW5t YXAobWFwLCA0MDk2KTsKPgo+IC0JLyogTm93IFJlbmRlciBSaW5nICovCj4gLQlyaW5nID0gSTkx NV9FWEVDX1JFTkRFUjsKPiAtCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0 MiwgcmluZywKPiAtCQkJIFNUUkVTU19OVU1fQlVGRkVSUyArIDEsIGxlbik7Cj4gLQlmb3IgKGxv b3AgPSAwOyBsb29wIDwgU1RSRVNTX05VTV9MT09QUzsgbG9vcCsrKSB7Cj4gLQkJc3VibWl0X2Fu ZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gLQkJcGlubmluZ19vZmZz ZXQgPSBTVFJFU1NfU1RBUlRfQUREUkVTUzsKPiAtCQlmb3IoYnVmID0gMDsgYnVmIDwgU1RSRVNT X05VTV9CVUZGRVJTOyBidWYrKykgewo+IC0JCQlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRf aGFuZGxlW2J1Zl0pOwo+IC0JCQlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MltidWZdLm9mZnNldCA9 PQo+IC0JCQkJZ2VuOF9jYW5vbmljYWxfYWRkcihwaW5uaW5nX29mZnNldCkpOwo+IC0JCQlpZ3Rf ZmFpbF9vbl9mKCpzaGFyZWRfYnVmZmVyW2J1Zl0gIT0gYnVmLCBcCj4gLQkJCSJNaXNtYXRjaCBp biBidWZmZXIgJWQsIFwKPiAtCQkJaXRlcmF0aW9uICVkOiAweCUwOFhcbiIsIGJ1ZiwgbG9vcCwg KnNoYXJlZF9idWZmZXJbYnVmXSk7Cj4gLQkJCXBpbm5pbmdfb2Zmc2V0IC09IEFMSUdOKEJPX1NJ WkUsIDQwOTYpOwo+IC0JCX0KPiAtCQkvKiBSZXNldCB0aGUgYnVmZmVyIGVudHJpZXMgZm9yIG5l eHQgaXRlcmF0aW9uICovCj4gLQkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVS UzsgYnVmKyspIHsKPiAtCQkJKnNoYXJlZF9idWZmZXJbYnVmXSA9IDB4RkZGRkZGRkY7Cj4gLQkJ fQo+IC0JfQo+IC0KPiAtCWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1 ZisrKSB7Cj4gLQkJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRfaGFuZGxlW2J1Zl0pOwo+IC0JCWZyZWUo c2hhcmVkX2J1ZmZlcltidWZdKTsKPiAtCX0KPiAtCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hh bmRsZSk7Cj4gLQljbG9zZShmZCk7Cj4gKwlvYmplY3RbMF0uZmxhZ3MgPSBFWEVDX09CSkVDVF9Q SU5ORUQgfCBFWEVDX09CSkVDVF9XUklURTsKPiArCW9iamVjdFsxXS5mbGFncyA9IEVYRUNfT0JK RUNUX1BJTk5FRDsKPiArCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4gKwlnZW1fY2xvc2Uo ZmQsIG9iamVjdFswXS5oYW5kbGUpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBvYmplY3RbMV0uaGFuZGxl KTsKPgo+IC0JZnJlZShzaGFyZWRfaGFuZGxlKTsKPiAtCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4g LQlmcmVlKGV4ZWNfb2JqZWN0Mik7Cj4gLQlmcmVlKGJhdGNoX2J1ZmZlcik7Cj4gKwlyZXR1cm4g b2JqZWN0WzFdLm9mZnNldDsKPiAgIH0KPgo+IC0vKiBnZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZl cgo+IC0gKiBDcmVhdGUgYSBidWZmZXIgc3Bhbm5pbmcgbXVsdGlwbGUgcGFnZXMsIGFuZCBzaGFy ZSB3aXRoIEdQVS4KPiAtICogV3JpdGUgdG8gZXZlcnkgZWxlbWVudCBvZiB0aGUgYnVmZmVyCj4g LSAqIGFuZCB2ZXJpZnkgY29ycmVjdCBjb250ZW50cy4KPiAtCj4gLSAqIENyZWF0ZSA4SyBidWZm ZXIKPiAtICogU2hhcmUgd2l0aCBHUFUgdXNpbmcgdXNlcnB0ciBpb2N0bAo+IC0gKiBDcmVhdGUg YmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4gYWxsIGVsZW1lbnRzIG9mIGJ1ZmZlcgo+IC0g KiBFeGVjdXRlIEJhdGNoIEJ1ZmZlcgo+IC0gKiBWYWxpZGF0ZSBldmVyeSBlbGVtZW50IGhhcyBE QVRBCj4gLSovCj4gLQo+IC0jZGVmaW5lIERXT1JEX1NJWkUgc2l6ZW9mKHVpbnQzMl90KQo+IC0j ZGVmaW5lIEJCX1NJWkUgKChNVUxUSVBBR0VfQk9fU0laRSAvIERXT1JEX1NJWkUpICogU1RPUkVf QkFUQ0hfQlVGRkVSX1NJWkUpICsgMgo+IC0jZGVmaW5lIE5VTV9EV09SRFMgKE1VTFRJUEFHRV9C T19TSVpFL3NpemVvZih1aW50MzJfdCkpCj4gLXN0YXRpYyB2b2lkIGdlbV93cml0ZV9tdWx0aXBh Z2VfYnVmZmVyX3Rlc3Qodm9pZCkKPiArc3RhdGljIHZvaWQgdGVzdF9ldmljdF9hY3RpdmUoaW50 IGZkKQo+ICAgewo+IC0JaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+IC0JaW50IGZkOwo+IC0J dWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gLQl1aW50MzJfdCBzaGFyZWRfaGFuZGxlOwo+ICsJ Y29uc3QgdWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiAgIAlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMl07Cj4gLQl1aW50MzJfdCBiYXRjaF9idWZmZXJbQkJf U0laRV07Cj4gLQl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlOwo+IC0JaW50IHJpbmcsIGxlbiwg ajsKPiAtCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0PTB4MTAwMDsKPiAtCXVpbnQ2NF90IHZhZGRy Owo+IC0KPiAtCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gLQlpZ3RfcmVx dWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFMSUFTSU5HX1BQR1RUKSk7Cj4gLQlpZ3RfcmVxdWly ZShoYXNfc29mdHBpbl9zdXBwb3J0KGZkKSk7Cj4gLQo+IC0JYmF0Y2hfYnVmX2hhbmRsZSA9IGdl bV9jcmVhdGUoZmQsIHNpemVvZihiYXRjaF9idWZmZXIpKTsKPiAtCXNoYXJlZF9idWZmZXIgPSBj cmVhdGVfbWVtX2J1ZmZlcihNVUxUSVBBR0VfQk9fU0laRSk7Cj4gLQo+IC0JbGVuID0gMDsKPiAt CW1lbXNldChiYXRjaF9idWZmZXIsIDAsIHNpemVvZihiYXRjaF9idWZmZXIpKTsKPiAtCW1lbXNl dChzaGFyZWRfYnVmZmVyLCAwLCBNVUxUSVBBR0VfQk9fU0laRSk7Cj4gLQo+IC0JLyogc2hhcmUg d2l0aCBHUFUgKi8KPiAtCXNoYXJlZF9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRy LCBzaGFyZWRfYnVmZmVyLAo+IC0JCQkJICAgICBNVUxUSVBBR0VfQk9fU0laRSk7Cj4gLQlzZXR1 cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfaGFuZGxlLAo+IC0JCSAgICAgICBF WEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiAtCj4gLQkvKiBjcmVhdGUgY29t bWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kcyAqLwo+IC0JdmFkZHIgPSBwaW5uaW5nX29m ZnNldDsKPiAtCWZvcihqPTA7IGo8IE5VTV9EV09SRFM7IGorKykgewo+IC0JCWxlbiArPSBnZW1f c3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciArIChsZW4vNCksIHZhZGRyLAo+IC0JCQkJ CSAgaiwKPiAtCQkJCQkgIChqID09IE5VTV9EV09SRFMgLSAxKSA/IHRydWU6ZmFsc2UpOwo+IC0J CXZhZGRyICs9IHNpemVvZihzaGFyZWRfYnVmZmVyWzBdKTsgIC8qIDQgYnl0ZXMgKi8KPiAtCX0K PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iamVjdDsKPiArCXVpbnQ2NF90 IGV4cGVjdGVkOwo+Cj4gLQlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNo X2J1ZmZlciwgbGVuKTsKPiArCW1lbXNldCgmb2JqZWN0LCAwLCBzaXplb2Yob2JqZWN0KSk7Cj4g KwlvYmplY3QuaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7Cj4gKwlnZW1fd3JpdGUoZmQs IG9iamVjdC5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKPgo+IC0JLyogc3VibWl0IGNv bW1hbmQgYnVmZmVyICovCj4gLQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRj aF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCWV4cGVjdGVkID0gYnVzeV9iYXRjaChmZCk7Cj4gKwlv YmplY3Qub2Zmc2V0ID0gZXhwZWN0ZWQ7Cj4gKwlvYmplY3QuZmxhZ3MgPSBFWEVDX09CSkVDVF9Q SU5ORUQ7Cj4KPiAtCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+IC0Jc2V0dXBfZXhlY2J1ZmZl cigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+IC0Jc3VibWl0X2FuZF9z eW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gLQlnZW1fdXNlcnB0cl9zeW5j KGZkLCBzaGFyZWRfaGFuZGxlKTsKPiAtCj4gLQlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5v ZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+IC0JZm9yKGogPSAwOyBqIDwgKE1VTFRJUEFHRV9C T19TSVpFL3NpemVvZih1aW50MzJfdCkpOyBqKyspIHsKPiAtCQlpZ3RfZmFpbF9vbl9mKHNoYXJl ZF9idWZmZXJbal0gIT0gaiwKPiAtCQkiTWlzbWF0Y2ggaW4gaW5kZXggJWQ6IDB4JTA4WFxuIiwg aiwgc2hhcmVkX2J1ZmZlcltqXSk7Cj4gLQl9Cj4gKwkvKiBSZXBsYWNlIHRoZSBhY3RpdmUgYmF0 Y2ggd2l0aCBvdXJzZWx2ZXMsIGZvcmNpbmcgYW4gZXZpY3Rpb24gKi8KPiArCW1lbXNldCgmZXhl Y2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKPiArCWV4ZWNidWYuYnVmZmVyc19wdHIgPSAodW5z aWduZWQgbG9uZykmb2JqZWN0Owo+ICsJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOwo+Cj4gLQln ZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+IC0JZ2VtX2Nsb3NlKGZkLCBzaGFyZWRf aGFuZGxlKTsKPiAtCWNsb3NlKGZkKTsKPiArCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4g KwlnZW1fY2xvc2UoZmQsIG9iamVjdC5oYW5kbGUpOwo+Cj4gLQlmcmVlKHNoYXJlZF9idWZmZXIp Owo+ICsJaWd0X2Fzc2VydF9lcV91NjQob2JqZWN0Lm9mZnNldCwgZXhwZWN0ZWQpOwo+ICAgfQo+ Cj4gLS8qIGdlbV9waW5faW52YWxpZF92bWFfdGVzdAo+IC0gKiBUaGlzIHRlc3Qgd2lsbCByZXF1 ZXN0IHRvIHBpbiBhIHNoYXJlZCBidWZmZXIgdG8gYW4gaW52YWxpZAo+IC0gKiBWTUEgID4gNDgt Yml0IGFkZHJlc3MgaWYgc3lzdGVtIHN1cHBvcnRzIDQ4QiBQUEdUVDsgaXQgYWxzbwo+IC0gKiB3 aWxsIHRlc3QgdGhhdCBhbnkgYXR0ZW1wdCBvZiB1c2luZyBhIDQ4LWJpdCBhZGRyZXNzIHJlcXVp cmVzCj4gLSAqIHRoZSBTVVBQT1JUU180OEJfQUREUkVTUyBmbGFnLCBhbmQgdGhhdCA0OC1iaXQg YWRkcmVzcyBuZWVkIHRvIGJlCj4gLSAqIGluIGNhbm9uaWNhbCBmb3JtIChiaXRzIFs2Mzo0OF0g PT0gWzQ3XSkuCj4gLSAqIElmIHN5c3RlbSBzdXBwb3J0cyAzMkIgUFBHVFQsIGl0IHdpbGwgdGVz dCB0aGUgZXF1aXZhbGVudCBpbnZhbGlkIFZNQQo+IC0gKiBDcmVhdGUgc2hhcmVkIGJ1ZmZlciBv ZiBzaXplIDRLCj4gLSAqIFRyeSBhbmQgUGluIG9iamVjdCB0byBpbnZhbGlkIGFkZHJlc3MKPiAt Ki8KPiAtc3RhdGljIHZvaWQgZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0KGJvb2wgdGVzdF9kZWNv dXBsZV9mbGFncywKPiAtCQkJCSAgICAgYm9vbCB0ZXN0X2Nhbm9uaWNhbF9vZmZzZXQpCj4gK3N0 YXRpYyB2b2lkIHRlc3RfZXZpY3RfaGFuZyhpbnQgZmQpCj4gICB7Cj4gLQlpOTE1X2dlbV91c2Vy cHRyIHVzZXJwdHI7Cj4gLQlpbnQgZmQsIHJldDsKPiAtCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVy Owo+ICsJY29uc3QgdWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiAgIAlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMV07Cj4gLQl1aW50MzJfdCBzaGFyZWRfYnVm X2hhbmRsZTsKPiAtCWludCByaW5nOwo+IC0JdWludDY0X3QgaW52YWxpZF9hZGRyZXNzX2Zvcl80 OGIgPSAweDkwMDAwMDAwMDAwMDA7IC8qIDUyIGJpdCBhZGRyZXNzICovCj4gLQl1aW50NjRfdCBu b25jYW5vbmljYWxfYWRkcmVzc19mb3JfNDhiID0gMHhGRjAwMDAwMDAwMDA7IC8qIDQ4IGJpdCBh ZGRyZXNzIGluIG5vbmNhbm9uaWNhbCBmb3JtICovCj4gLQl1aW50NjRfdCBpbnZhbGlkX2FkZHJl c3NfZm9yXzMyYiA9IDB4OTAwMDAwMDAwOyAvKiAzNiBiaXQgYWRkcmVzcyAqLwo+IC0KPiAtCWZk ID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gLQlpZ3RfcmVxdWlyZSh1c2VzX2Z1 bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSB8fAo+IC0JCSAgICB1c2VzX2Z1bGxfcHBn dHQoZmQsIEZVTExfMzJfQklUX1BQR1RUKSk7Cj4gLQlpZ3RfcmVxdWlyZShoYXNfc29mdHBpbl9z dXBwb3J0KGZkKSk7Cj4gLQo+IC0Jc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJP X1NJWkUpOwo+IC0JKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwo+IC0KPiAtCS8qIHNoYXJl IHdpdGggR1BVICovCj4gLQlzaGFyZWRfYnVmX2hhbmRsZSA9IGluaXRfdXNlcnB0cihmZCwgJnVz ZXJwdHIsIHNoYXJlZF9idWZmZXIsIEJPX1NJWkUpOwo+IC0KPiAtCWlmICh1c2VzX2Z1bGxfcHBn dHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSAmJiB0ZXN0X2Nhbm9uaWNhbF9vZmZzZXQpIHsKPiAt CQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiAt CQkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCB8IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9B RERSRVNTLAo+IC0JCQkgICAgICAgbm9uY2Fub25pY2FsX2FkZHJlc3NfZm9yXzQ4Yik7Cj4gLQl9 IGVsc2UgaWYgKHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF80OF9CSVRfUFBHVFQpICYmICF0ZXN0 X2RlY291cGxlX2ZsYWdzKSB7Cj4gLQkJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwg c2hhcmVkX2J1Zl9oYW5kbGUsCj4gLQkJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQgfCBFWEVD X09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVTUywKPiAtCQkJICAgICAgIGludmFsaWRfYWRkcmVz c19mb3JfNDhiKTsKPiAtCX0gZWxzZSB7Cj4gLQkJLyogVGhpcyBhbHNvIGZhaWxzIGluIDQ4YiB3 aXRob3V0IDQ4Ql9BRERSRVNTIHN1cHBvcnQgZmxhZyAqLwo+IC0JCXNldHVwX2V4ZWNfb2JqKCZl eGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+IC0JCQkgICAgICAgRVhFQ19PQkpF Q1RfUElOTkVELCBpbnZhbGlkX2FkZHJlc3NfZm9yXzMyYik7Cj4gLQl9Cj4gLQo+IC0JcmluZyA9 IEk5MTVfRVhFQ19SRU5ERVI7Cj4gLQo+IC0Jc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhl Y19vYmplY3QyLCByaW5nLCAxLCAwKTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmpl Y3QyIG9iamVjdDsKPiArCXVpbnQ2NF90IGV4cGVjdGVkOwo+ICsJaWd0X2hhbmdfcmluZ190IGhh bmc7Cj4KPiAtCS8qIEV4cGVjdCBleGVjYnVmIHRvIGZhaWwgKi8KPiAtCXJldCA9IGRybUlvY3Rs KGZkLAo+IC0JCSAgICAgICBEUk1fSU9DVExfSTkxNV9HRU1fRVhFQ0JVRkZFUjIsCj4gLQkJICAg ICAgICZleGVjYnVmKTsKPiArCW1lbXNldCgmb2JqZWN0LCAwLCBzaXplb2Yob2JqZWN0KSk7Cj4g KwlvYmplY3QuaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7Cj4gKwlnZW1fd3JpdGUoZmQs IG9iamVjdC5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKPgo+IC0JaWd0X2Fzc2VydChl cnJubyA9PSBFSU5WQUwpOwo+IC0JaWd0X2Fzc2VydF9uZXEocmV0LCAwKTsKPiArCWhhbmcgPSBp Z3RfaGFuZ19jdHgoZmQsIDAsIDAsIDAsICh1aW50NjRfdCAqKSZleHBlY3RlZCk7Cj4gKwlvYmpl Y3Qub2Zmc2V0ID0gZXhwZWN0ZWQ7Cj4gKwlvYmplY3QuZmxhZ3MgPSBFWEVDX09CSkVDVF9QSU5O RUQ7Cj4KPiAtCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+IC0JY2xvc2UoZmQp Owo+IC0JZnJlZShzaGFyZWRfYnVmZmVyKTsKPiAtfQo+ICsJLyogUmVwbGFjZSB0aGUgaGFuZ2lu ZyBiYXRjaCB3aXRoIG91cnNlbHZlcywgZm9yY2luZyBhbiBldmljdGlvbiAqLwo+ICsJbWVtc2V0 KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOwo+ICsJZXhlY2J1Zi5idWZmZXJzX3B0ciA9 ICh1bnNpZ25lZCBsb25nKSZvYmplY3Q7Cj4gKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDE7Cj4K PiArCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4gKwlnZW1fY2xvc2UoZmQsIG9iamVjdC5o YW5kbGUpOwo+Cj4gLS8qIGdlbV9waW5faGlnaF9hZGRyZXNzX3Rlc3QKPiAtICogVGhpcyB0ZXN0 IHdpbGwgY3JlYXRlIGEgc2hhcmVkIGJ1ZmZlciwgYW5kIGNyZWF0ZSBhIGNvbW1hbmQKPiAtICog Zm9yIEdQVSB0byB3cml0ZSBkYXRhIGluIGl0LiBJdCB3aWxsIGF0dGVtcHQgdG8gcGluIHRoZSBi dWZmZXIgYXQgYWRkcmVzcyA+IDMyIGJpdHMuCj4gLSAqIENQVSB3aWxsIHJlYWQgYW5kIG1ha2Ug c3VyZSBleHBlY3RlZCB2YWx1ZSBpcyBvYnRhaW5lZAo+ICsJaWd0X2Fzc2VydF9lcV91NjQob2Jq ZWN0Lm9mZnNldCwgZXhwZWN0ZWQpOwo+Cj4gLSAqIE1hbGxvYyBhIDRLIGJ1ZmZlcgo+IC0gKiBT aGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQVSBieSB1c2luZyB1c2VycHRyIGlvY3RsCj4gLSAqIENy ZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBidWZmZXIK PiAtICogVXNlIHZpcnR1YWwgYWRkcmVzcyBvZiBidWZmZXIgYXMgMHgxMTAwMDAwMDAwICg+IDMy IGJpdCkKPiAtICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4g LSAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byBzaGFyZWQgYnVmZmVyIFZNQQo+IC0g KiBTdWJtaXQgZXhlY2J1ZmZlcgo+IC0gKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4g c2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEKPiAtKi8KPiArCWlndF9wb3N0X2hhbmdfcmluZyhm ZCwgaGFuZyk7Cj4gK30KPgo+IC1zdGF0aWMgdm9pZCBnZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0 KHZvaWQpCj4gK3N0YXRpYyB2b2lkIHhjaGdfb2Zmc2V0KHZvaWQgKmFycmF5LCB1bnNpZ25lZCBp LCB1bnNpZ25lZCBqKQo+ICAgewo+IC0JaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+IC0JaW50 IGZkOwo+IC0JdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0 MiBleGVjX29iamVjdDJbMl07Cj4gLQl1aW50MzJfdCBiYXRjaF9idWZmZXJbU1RPUkVfQkFUQ0hf QlVGRkVSX1NJWkUgKyAyXTsKPiAtCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUsIHNoYXJlZF9i dWZfaGFuZGxlOwo+IC0JaW50IHJpbmcsIGxlbjsKPiAtCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAw eDEyMzQ1Njc4Owo+IC0JdWludDY0X3QgaGlnaF9hZGRyZXNzID0gMHgxMTExRkZGRjAwMDsgLyog NDQgYml0IGFkZHJlc3MgKi8KPiAtCj4gLQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5U RUwpOwo+IC0JaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxMXzQ4X0JJVF9QUEdU VCkpOwo+IC0JaWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+IC0KPiAtCWJh dGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiAtCj4gLQkvKiBjcmVh dGUgY3B1IGJ1ZmZlciwgc2V0IHRvIGFsbCAweEYncyAqLwo+IC0Jc2hhcmVkX2J1ZmZlciA9IGNy ZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+IC0JKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZG Owo+IC0KPiAtCS8qIHNoYXJlIHdpdGggR1BVICovCj4gLQlzaGFyZWRfYnVmX2hhbmRsZSA9IGlu aXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsIEJPX1NJWkUpOwo+IC0KPiAt CS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiAtCWxlbiA9 IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBoaWdoX2FkZHJlc3MsIGRhdGEs IHRydWUpOwo+IC0JZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZm ZXIsIGxlbik7Cj4gLQo+IC0JLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gLQlzZXR1cF9l eGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiAtCQkgICAgICAg RVhFQ19PQkpFQ1RfUElOTkVEIHwgRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MsIGhp Z2hfYWRkcmVzcyk7Cj4gLQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9i dWZfaGFuZGxlLCAwLCAwKTsKPiAtCj4gLQlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiAtCj4g LQlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7 Cj4gLQlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiAt CWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiAtCj4gLQlpZ3RfYXNz ZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gaGlnaF9hZGRyZXNzKTsKPiAtCS8qIGNoZWNr IG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcyAqLwo+IC0JaWd0X2ZhaWxfb25fZihzaGFy ZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gLQkJIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BV IHdyaXRlLCBcCj4gLQkJZXhwZWN0ZWQ6IDB4JXgsIGdvdDogMHgleFxuIiwgZGF0YSwgc2hhcmVk X2J1ZmZlclswXSk7Cj4gLQo+IC0JZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiAt CWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+IC0JY2xvc2UoZmQpOwo+IC0JZnJl ZShzaGFyZWRfYnVmZmVyKTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpv YmplY3QgPSBhcnJheTsKPiArCXVpbnQ2NF90IHRtcCA9IG9iamVjdFtpXS5vZmZzZXQ7Cj4gKwlv YmplY3RbaV0ub2Zmc2V0ID0gb2JqZWN0W2pdLm9mZnNldDsKPiArCW9iamVjdFtqXS5vZmZzZXQg PSB0bXA7Cj4gICB9Cj4KPiAtLyogZ2VtX3Bpbl9uZWFyXzQ4Qml0X3Rlc3QKPiAtICogVGhpcyB0 ZXN0IHdpbGwgY3JlYXRlIGEgc2hhcmVkIGJ1ZmZlciwKPiAtICogYW5kIGNyZWF0ZSBhIGNvbW1h bmQgZm9yIEdQVSB0byB3cml0ZSBkYXRhIGluIGl0LiBJdCB3aWxsIGF0dGVtcHQKPiAtICogdG8g cGluIHRoZSBidWZmZXIgYXQgYWRkcmVzcyA+IDQ3IGJpdHMgPD0gNDgtYml0Lgo+IC0gKiBDUFUg d2lsbCByZWFkIGFuZCBtYWtlIHN1cmUgZXhwZWN0ZWQgdmFsdWUgaXMgb2J0YWluZWQuCj4gLSAq IE5vdGUgdGhhdCB3ZSBtdXN0IHN1Ym1pdCBhZGRyZXNzZXMgaW4gY2Fub25pY2FsIGZvcm0sIG5v dCBvbmx5Cj4gLSAqIGJlY2F1c2UgdGhlIGFkZHJlc3NzIHdpbGwgYmUgdmFsaWRhdGVkLCBidXQg YWxzbyB0aGUgcmV0dXJuZWQgb2Zmc2V0Cj4gLSAqIHdpbGwgYmUgaW4gdGhpcyBmb3JtYXQuCj4g LQo+IC0gKiBNYWxsb2MgYSA0SyBidWZmZXIKPiAtICogU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBH UFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+IC0gKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdy aXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gLSAqIFVzZSB2aXJ0dWFsIGFkZHJl c3Mgb2YgYnVmZmVyIGFzIHJhbmdlIGJldHdlZW4gNDctYml0IGFuZCA0OC1iaXQKPiAtICogU2V0 IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gLSAqIFNldCAnb2Zmc2V0 JyBpbiBleGVjIG9iamVjdCB0byBzaGFyZWQgYnVmZmVyIFZNQQo+IC0gKiBTdWJtaXQgZXhlY2J1 ZmZlcgo+IC0gKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2hhcmVkIGJ1ZmZlciBt YXRjaGVzIERBVEEKPiAtKi8KPiAtI2RlZmluZSBCRUdJTl9ISUdIX0FERFJFU1MgMHg3RkZGRkZG RkYwMDAKPiAtI2RlZmluZSBFTkRfSElHSF9BRERSRVNTIDB4RkZGRkZGRkZDMDAwCj4gLSNkZWZp bmUgQUREUkVTU19JTkNSRU1FTlQgMHgyMDAwMDAwMDAwCj4gLXN0YXRpYyB2b2lkIGdlbV9waW5f bmVhcl80OEJpdF90ZXN0KHZvaWQpCj4gK3N0YXRpYyB2b2lkIHRlc3Rfbm9yZWxvYyhpbnQgZmQp Cj4gICB7Cj4gLQlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gLQlpbnQgZmQ7Cj4gLQl1aW50 MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCWNvbnN0IGludCBnZW4gPSBpbnRlbF9nZW4oaW50ZWxf Z2V0X2RybV9kZXZpZChmZCkpOwo+ICsJY29uc3QgdWludDMyX3Qgc2l6ZSA9IDQwOTY7Cj4gKwlj b25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICAgCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiAtCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltCT19T SVpFXTsKPiAtCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlOwo+ IC0JaW50IHJpbmcsIGxlbjsKPiAtCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4Owo+ IC0JdWludDY0X3QgaGlnaF9hZGRyZXNzLCBjYW5faGlnaF9hZGRyZXNzOwo+IC0KPiAtCWZkID0g ZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gLQlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxf cHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSk7Cj4gLQlpZ3RfcmVxdWlyZShoYXNfc29mdHBp bl9zdXBwb3J0KGZkKSk7Cj4gLQo+IC0JYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQs IEJPX1NJWkUpOwo+IC0KPiAtCS8qIGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8gYWxsIDB4Ridz ICovCj4gLQlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gLQkq c2hhcmVkX2J1ZmZlciA9IDB4RkZGRkZGRkY7Cj4gLQo+IC0JLyogc2hhcmUgd2l0aCBHUFUgKi8K PiAtCXNoYXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVk X2J1ZmZlciwgQk9fU0laRSk7Cj4gLQo+IC0JZm9yIChoaWdoX2FkZHJlc3MgPSBCRUdJTl9ISUdI X0FERFJFU1M7IGhpZ2hfYWRkcmVzcyA8PSBFTkRfSElHSF9BRERSRVNTOwo+IC0JCQkJCQloaWdo X2FkZHJlc3MrPUFERFJFU1NfSU5DUkVNRU5UKSB7Cj4gLQkJY2FuX2hpZ2hfYWRkcmVzcyA9IGdl bjhfY2Fub25pY2FsX2FkZHIoaGlnaF9hZGRyZXNzKTsKPiAtCQkvKiBjcmVhdGUgY29tbWFuZCBi dWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gLQkJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3Zt KGZkLCBiYXRjaF9idWZmZXIsIGNhbl9oaWdoX2FkZHJlc3MsCj4gLQkJCQkJZGF0YSwgdHJ1ZSk7 Cj4gLQkJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxl bik7Cj4gLQkJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gLQkJc2V0dXBfZXhlY19vYmoo JmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gLQkJCSAgICAgICBFWEVDX09C SkVDVF9QSU5ORUQgfCBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVTUywKPiAtCQkJICAg ICAgIGNhbl9oaWdoX2FkZHJlc3MpOwo+IC0JCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJb MV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+IC0KPiAtCQlyaW5nID0gSTkxNV9FWEVDX1JF TkRFUjsKPiAtCQlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcs IDIsIGxlbik7Cj4gLQkJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hh bmRsZSk7Cj4gLQkJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+IC0K PiAtCQlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gY2FuX2hpZ2hfYWRkcmVz cyk7Cj4gLQkJLyogY2hlY2sgb24gQ1BVIHRvIHNlZSBpZiB2YWx1ZSBjaGFuZ2VzICovCj4gLQkJ aWd0X2ZhaWxfb25fZihzaGFyZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gLQkJIlxuQ1BVIHJlYWQg ZG9lcyBub3QgbWF0Y2ggR1BVIHdyaXRlLCBleHBlY3RlZDogMHgleCwgXAo+IC0JCWdvdDogMHgl eFxuLCAweCUiUFJJeDY0IiIsIGRhdGEsIHNoYXJlZF9idWZmZXJbMF0sIGhpZ2hfYWRkcmVzcyk7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmplY3RbMjU3XTsKPiArCXVp bnQ2NF90IG9mZnNldDsKPiArCXVpbnQzMl90IGhhbmRsZTsKPiArCXVpbnQzMl90ICpiYXRjaCwg KmI7Cj4gKwlpbnQgaSwgbG9vcDsKPiArCj4gKwloYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCAoQVJS QVlfU0laRShvYmplY3QpKzEpKnNpemUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBoYW5kbGUsIDAsICZi YmUsIHNpemVvZihiYmUpKTsKPiArCj4gKwltZW1zZXQob2JqZWN0LCAwLCBzaXplb2Yob2JqZWN0 KSk7Cj4gKwlvYmplY3RbMF0uaGFuZGxlID0gaGFuZGxlOwo+ICsKPiArCS8qIEZpbmQgYSBob2xl ICovCj4gKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7Cj4gKwlleGVjYnVm LmJ1ZmZlcnNfcHRyID0gKHVuc2lnbmVkIGxvbmcpb2JqZWN0Owo+ICsJZXhlY2J1Zi5idWZmZXJf Y291bnQgPSAxOwo+ICsJZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKPiArCWdlbV9jbG9zZShm ZCwgb2JqZWN0WzBdLmhhbmRsZSk7Cj4gKwo+ICsJaWd0X2RlYnVnKCJNYWRlIGEgJWR4JWQgS2lC IGhvbGU6ICUwOGxseFxuIiwKPiArCQkgIChpbnQpQVJSQVlfU0laRShvYmplY3QpLCBzaXplLzEw MjQsIG9iamVjdFswXS5vZmZzZXQpOwo+ICsKPiArCW9mZnNldCA9IG9iamVjdFswXS5vZmZzZXQ7 Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvYmplY3QpIC0gMTsgaSsrKSB7Cj4gKwkJ b2JqZWN0W2ldLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIHNpemUpOwo+ICsJCW9iamVjdFtpXS5v ZmZzZXQgPSBvZmZzZXQgKyBpKnNpemU7Cj4gKwkJb2JqZWN0W2ldLmZsYWdzID0gRVhFQ19PQkpF Q1RfUElOTkVEIHwgRVhFQ19PQkpFQ1RfV1JJVEU7Cj4gICAJfQo+ICsJb2JqZWN0W2ldLmhhbmRs ZSA9IGdlbV9jcmVhdGUoZmQsIDIqc2l6ZSk7Cj4gKwlvYmplY3RbaV0ub2Zmc2V0ID0gb2Zmc2V0 ICsgaSpzaXplOwo+ICsJb2JqZWN0W2ldLmZsYWdzID0gRVhFQ19PQkpFQ1RfUElOTkVEOwo+ICsK PiArCWIgPSBiYXRjaCA9IGdlbV9tbWFwX19jcHUoZmQsIG9iamVjdFtpXS5oYW5kbGUsIDAsIDIq c2l6ZSwgUFJPVF9XUklURSk7Cj4gKwlnZW1fc2V0X2RvbWFpbihmZCwgb2JqZWN0W2ldLmhhbmRs ZSwKPiArCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7 Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvYmplY3QpIC0gMTsgaSsrKSB7Cj4gKwkJ KmIrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTTsKPiArCQlpZiAoZ2VuIDwgOCkgewo+ICsJCQkqYisr ID0gMDsKPiArCQkJKmIrKyA9IG9iamVjdFtpXS5vZmZzZXQ7Cj4gKwkJfSBlbHNlIHsKPiArCQkJ KmIrKyA9IG9iamVjdFtpXS5vZmZzZXQ7Cj4gKwkJCSpiKysgPSBvYmplY3RbaV0ub2Zmc2V0ID4+ IDMyOwo+ICsJCX0KPiArCQkqYisrID0gaTsKPiArCX0KPiArCSpiKysgPSBNSV9CQVRDSF9CVUZG RVJfRU5EOwo+ICsJaWd0X2Fzc2VydChiIC0gYmF0Y2ggPD0gMipzaXplL3NpemVvZih1aW50MzJf dCkpOwo+ICsJbXVubWFwKGJhdGNoLCBzaXplKTsKPgo+IC0JZ2VtX2Nsb3NlKGZkLCBiYXRjaF9i dWZfaGFuZGxlKTsKPiAtCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+IC0JY2xv c2UoZmQpOwo+IC0JZnJlZShzaGFyZWRfYnVmZmVyKTsKPiAtfQo+ICsJZXhlY2J1Zi5idWZmZXJf Y291bnQgPSBBUlJBWV9TSVpFKG9iamVjdCk7Cj4gKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMTAy NDsgbG9vcCsrKSB7Cj4gKwkJaWd0X3Blcm11dGVfYXJyYXkob2JqZWN0LCBBUlJBWV9TSVpFKG9i amVjdCktMSwgeGNoZ19vZmZzZXQpOwo+ICsJCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4K PiArCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvYmplY3QpIC0gMTsgaSsrKSB7Cj4gKwkJ CXVpbnQzMl90IHZhbDsKPgo+IC1pbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQo+IC17 Cj4gLQlpZ3Rfc3VidGVzdF9pbml0KGFyZ2MsIGFyZ3YpOwo+IC0JaWd0X3NraXBfb25fc2ltdWxh dGlvbigpOwo+IC0KPiAtCS8qIEFsbCB0ZXN0cyBuZWVkIFBQR1RUIHN1cHBvcnQgKi8KPiAtCWln dF9zdWJ0ZXN0KCJnZW1fcGluX3VzZXJwdHIiKSB7Cj4gLQkJZ2VtX3Bpbl91c2VycHRyX3Rlc3Qo KTsKPiAtCX0KPiAtCWlndF9zdWJ0ZXN0KCJnZW1fcGluX2JvIikgewo+IC0JCWdlbV9waW5fYm9f dGVzdCgpOwo+IC0JfQo+IC0JaWd0X3N1YnRlc3QoImdlbV9tdWx0aXBsZV9wcm9jZXNzIikgewo+ IC0JCWdlbV9tdWx0aXBsZV9wcm9jZXNzX3Rlc3QoKTsKPiAtCX0KPiAtCWlndF9zdWJ0ZXN0KCJn ZW1fcmVwaW4iKSB7Cj4gLQkJZ2VtX3JlcGluX3Rlc3QoKTsKPiAtCX0KPiAtCWlndF9zdWJ0ZXN0 KCJnZW1fcGluX292ZXJsYXAiKSB7Cj4gLQkJZ2VtX3Bpbl9vdmVybGFwX3Rlc3QoKTsKPiAtCX0K PiAtCWlndF9zdWJ0ZXN0KCJnZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZlciIpIHsKPiAtCQlnZW1f d3JpdGVfbXVsdGlwYWdlX2J1ZmZlcl90ZXN0KCk7Cj4gKwkJCWdlbV9yZWFkKGZkLCBvYmplY3Rb aV0uaGFuZGxlLCAwLCAmdmFsLCBzaXplb2YodmFsKSk7Cj4gKwkJCWlndF9hc3NlcnRfZXEodmFs LCAob2JqZWN0W2ldLm9mZnNldCAtIG9mZnNldCkvIHNpemUpOwo+ICsJCX0KPiAgIAl9Cj4gKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvYmplY3QpOyBpKyspCj4gKwkJZ2VtX2Nsb3NlKGZk LCBvYmplY3RbaV0uaGFuZGxlKTsKPiArfQo+Cj4gLQkvKiBGb2xsb3dpbmcgdGVzdHMgbmVlZCAz Mi80OCBCaXQgUFBHVFQgc3VwcG9ydCAqLwo+IC0JaWd0X3N1YnRlc3QoImdlbV9waW5faW52YWxp ZF92bWEiKSB7Cj4gLQkJZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0KGZhbHNlLCBmYWxzZSk7Cj4g LQl9Cj4gK2lndF9tYWluCj4gK3sKPiArCWludCBmZCA9IC0xOwo+Cj4gLQkvKiBGb2xsb3dpbmcg dGVzdHMgbmVlZCA0OCBCaXQgUFBHVFQgc3VwcG9ydCAqLwo+IC0JaWd0X3N1YnRlc3QoImdlbl9w aW5fbm9uY2Fub25pY2FsX2hpZ2hfYWRkcmVzcyIpIHsKPiAtCQlnZW1fcGluX2ludmFsaWRfdm1h X3Rlc3QoZmFsc2UsIHRydWUpOwo+IC0JfQo+IC0JaWd0X3N1YnRlc3QoImdlbV9waW5faGlnaF9h ZGRyZXNzX3dpdGhvdXRfY29ycmVjdF9mbGFnIikgewo+IC0JCWdlbV9waW5faW52YWxpZF92bWFf dGVzdCh0cnVlLCBmYWxzZSk7Cj4gLQl9Cj4gLQlpZ3Rfc3VidGVzdCgiZ2VtX3NvZnRwaW5fc3Ry ZXNzIikgewo+IC0JCWdlbV9zb2Z0cGluX3N0cmVzc190ZXN0KCk7Cj4gLQl9Cj4gLQlpZ3Rfc3Vi dGVzdCgiZ2VtX3Bpbl9oaWdoX2FkZHJlc3MiKSB7Cj4gLQkJZ2VtX3Bpbl9oaWdoX2FkZHJlc3Nf dGVzdCgpOwo+IC0JfQo+IC0JaWd0X3N1YnRlc3QoImdlbV9waW5fbmVhcl80OEJpdCIpIHsKPiAt CQlnZW1fcGluX25lYXJfNDhCaXRfdGVzdCgpOwo+ICsJaWd0X3NraXBfb25fc2ltdWxhdGlvbigp Owo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJf SU5URUwpOwo+ICsJCWlndF9yZXF1aXJlKGhhc19zb2Z0cGluX3N1cHBvcnQoZmQpKTsKPiAgIAl9 Cj4KPiAtCWlndF9leGl0KCk7Cj4gKwlpZ3Rfc3VidGVzdCgiaW52YWxpZCIpCj4gKwkJdGVzdF9p bnZhbGlkKGZkKTsKPiArCWlndF9zdWJ0ZXN0KCJzb2Z0cGluIikKPiArCQl0ZXN0X3NvZnRwaW4o ZmQpOwo+ICsJaWd0X3N1YnRlc3QoIm92ZXJsYXAiKQo+ICsJCXRlc3Rfb3ZlcmxhcChmZCk7Cj4g KwlpZ3Rfc3VidGVzdCgibm9yZWxvYyIpCj4gKwkJdGVzdF9ub3JlbG9jKGZkKTsKPiArCWlndF9z dWJ0ZXN0KCJldmljdC1hY3RpdmUiKQo+ICsJCXRlc3RfZXZpY3RfYWN0aXZlKGZkKTsKPiArCWln dF9zdWJ0ZXN0KCJldmljdC1oYW5nIikKPiArCQl0ZXN0X2V2aWN0X2hhbmcoZmQpOwo+ICsKPiAr CWlndF9maXh0dXJlCj4gKwkJY2xvc2UoZmQpOwo+ICAgfQo+Cl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==