From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH i-g-t 1/1] igt/dapc: Test Driver Assisted Performance Capture (DAPC) Date: Tue, 29 Aug 2017 09:51:59 +0100 Message-ID: References: <1503913983-3502-1-git-send-email-sagar.a.kamble@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 ESMTPS id ABDAD6E0C7 for ; Tue, 29 Aug 2017 08:52:05 +0000 (UTC) In-Reply-To: <1503913983-3502-1-git-send-email-sagar.a.kamble@intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Sagar Arun Kamble , intel-gfx@lists.freedesktop.org Cc: Sourab Gupta List-Id: intel-gfx@lists.freedesktop.org SGkgU2FnYXIsCgpUaGFua3MgZm9yIHdyaXRpbmcgdGhpcyB0ZXN0LiBJdCBsb29rcyBwcm9taXNp bmcgYnV0IHRoZXJlIGFyZSBhIGZldyAKaXNzdWVzIHRoYXQgbmVlZHMgdG8gYmUgYWRkcmVzc2Vk IGZvciB0aGlzIHRvIHJ1biBpbiBDSS4KUGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSBjb21tZW50 cyBiZWxvdy4KClRoYW5rcyEKCk9uIDI4LzA4LzE3IDEwOjUzLCBTYWdhciBBcnVuIEthbWJsZSB3 cm90ZToKPiBUaGlzIHRlc3QgdmVyaWZpZXMgZGlmZmVyZW50IGk5MTUgcGVyZiBzYW1wbGluZyBv cHRpb25zIGZvciBmaWVsZHMgbGlrZQo+IFBJRCwgQ1RYIElELCBUaW1lc3RhbXAsIE9BIFJlcG9y dCwgVEFHLCBNTUlPLgo+Cj4gQ2M6IExpb25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2Vy bGluQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBTb3VyYWIgR3VwdGEgPHNvdXJhYi5ndXB0 YUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogU2FnYXIgQXJ1biBLYW1ibGUgPHNhZ2FyLmEu a2FtYmxlQGludGVsLmNvbT4KPiAtLS0KPiAgIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgICAx ICsKPiAgIHRlc3RzL2RhcGMuYyAgICAgICAgICAgfCAxMDE3ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgMiBmaWxlcyBjaGFuZ2VkLCAxMDE4IGlu c2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9kYXBjLmMKPgo+IGRpZmYg LS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ IGluZGV4IGJiMDEzYzcuLjYxZmViMGQgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291 cmNlcwo+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBAQCAtMjYsNiArMjYsNyBAQCBU RVNUU19wcm9ncyA9IFwKPiAgIAljb3JlX2dldHZlcnNpb24gXAo+ICAgCWNvcmVfcHJvcF9ibG9i IFwKPiAgIAljb3JlX3NldG1hc3Rlcl92c19hdXRoIFwKPiArCWRhcGMgXAo+ICAgCWRlYnVnZnNf dGVzdCBcCj4gICAJZHJtX2ltcG9ydF9leHBvcnQgXAo+ICAgCWRybV9tbSBcCj4gZGlmZiAtLWdp dCBhL3Rlc3RzL2RhcGMuYyBiL3Rlc3RzL2RhcGMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uZjQ5YjFjZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi90ZXN0cy9kYXBj LmMKPiBAQCAtMCwwICsxLDEwMTcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTcgSW50 ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiAr ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICogZGFw YzogRHJpdmVyIEFzc2lzdGVkIFBlcmZvcm1hbmNlIENhcHR1cmUKPiArICoJIFRoaXMgdGVzdHMg dGhlIGk5MTUgcGVyZiBmdW5jdGlvbmFsaXR5IHRvIHNhbXBsZSB2YXJpb3VzIG1ldHJpY3MgYnkK PiArICoJIGFzc29jaWF0aW5nIHdpdGggdGhlIENTIHN0cmVhbSBvciBqdXN0IHN0YW5kYWxvbmUg cGVyaW9kaWMgT0Egc2FtcGxlcy4KPiArICoJIFZlcmlmaWVzIGZpZWxkcyBsaWtlIFBJRCwgQ1RY IElELCBUaW1lc3RhbXAsIE9BIFJlcG9ydCwgTU1JTywgVGFncyBhcmUKPiArICoJIGdlbmVyYXRl ZCBwcm9wZXJseSBmb3IgZWFjaCBzYW1wbGUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAg U291cmFiIEd1cHRhIDxzb3VyYWIuZ3VwdGFAaW50ZWwuY29tPgo+ICsgKiAgIFNhZ2FyIEFydW4g S2FtYmxlIDxzYWdhci5hLmthbWJsZUBpbnRlbC5jb20+Cj4gKyAqCj4gKyAqLwo+ICsjZGVmaW5l IF9HTlVfU09VUkNFCj4gKyNpbmNsdWRlICJ4Zjg2ZHJtLmgiCj4gKyNpbmNsdWRlICJpOTE1X2Ry bS5oIgo+ICsjaW5jbHVkZSAiaWd0X2NvcmUuaCIKPiArI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZl bnQuaD4KPiArI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KPiArI2luY2x1ZGUgPHN5cy90eXBlcy5o Pgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gKyNpbmNs dWRlIDxzeXMvbW1hbi5oPgo+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxk aXJlbnQuaD4KPiArI2luY2x1ZGUgPGxpbWl0cy5oPgo+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiAr I2luY2x1ZGUgPHN0ZGludC5oPgo+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICsjaW5jbHVkZSA8 c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4g KyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgPGFzc2VydC5oPgo+ICsjaW5jbHVkZSA8 dGltZS5oPgo+ICsKClRvIGJlIGFibGUgdG8gcnVuIHRoaXMgdGVzdCBpbiB0aGUgY29udGludW91 cyBpbnRlZ3JhdGlvbiBzeXN0ZW0sIHdlIApuZWVkIGl0IHRvIGJlIGF1dG9ub21vdXMuClRoZSBm b2xsb3dpbmcgbWFjcm8gcmVxdWlyZXMgdXNlciBpbnRlcmFjdGlvbi4gVW5mb3J0dW5hdGVseSB0 aGF0IHdvbid0IAp3b3JrLgpQbGVhc2UgbG9vayBhdCB0aGUgb3RoZXIgdGVzdHMgdG8gY3JlYXRl IHN1YnRlc3RzIGFuZCBtYWtlIHN1cmUgd2UgY2FuIApydW4gdGhpcyBpbiB0aGUgQ0kuClRoYW5r cyEKCj4gKyNkZWZpbmUgQ09MTEVDVF9EQVRBIHsgXAo+ICsJcHJpbnRmKCIoJXMpIENvbGxlY3Rp bmcgZGF0YS4gIiwgX19mdW5jX18pOyBcCj4gKwlwcmludGYoIlByZXNzIGVudGVyIHRvIGNvbnRp bnVlLi4uXG4iKTsgXAo+ICsJZ2V0YyhzdGRpbik7IFwKPiArfQo+ICsKCkl0IHdvdWxkIGJlIGdv b2QgdG8gdGVzdCBzdHJlYW0gY29uZmlndXJhdGlvbnMgd2l0aCBkaWZmZXJlbnQgc2l6ZXMuCkZv ciBleGFtcGxlIG9ubHkgUGlkLCBvciBUYWcgJiBQaWQgb3IgU291cmNlSW5mbyAmIGN0eCBJRCAm IFRhZywgZXRjLi4uCkFuZCB2ZXJpZnkgdGhhdCB3ZSBnZXQgcmVwb3J0cyB3aXRoIGFwcHJvcHJp YXRlIHNpemVzLgoKPiArI2RlZmluZSBPQV9TQU1QTEVfU0laRV9NQVgJKDggKwkvKiBkcm1faTkx NV9wZXJmX3JlY29yZF9oZWFkZXIgKi8gXAo+ICsJCQkJIDggKwkvKiBzb3VyY2UgaW5mbyAqLyBc Cj4gKwkJCQkgOCArCS8qIGN0eCBJRCAqLyBcCj4gKwkJCQkgOCArCS8qIFBpZCAqLyBcCj4gKwkJ CQkgOCArCS8qIFRhZyAqLyBcCj4gKwkJCQkgMjU2KSAvKiByYXcgT0EgY291bnRlciBzbmFwc2hv dCAqLwo+ICsKPiArI2RlZmluZSBUU19TQU1QTEVfU0laRV9NQVgJKDggKwkvKiBkcm1faTkxNV9w ZXJmX3JlY29yZF9oZWFkZXIgKi8gXAo+ICsJCQkJIDggKwkvKiBjdHggSUQgKi8gXAo+ICsJCQkJ IDggKwkvKiBQaWQgKi8gXAo+ICsJCQkJIDggKwkvKiBUYWcgKi8gXAo+ICsJCQkJIDgpCS8qIFRp bWVzdGFtcCAqLyBcCj4gKwo+ICsjZGVmaW5lIFRTX01NSU9fU0FNUExFX1NJWkVfTUFYCSg4ICsg ICAvKiBkcm1faTkxNV9wZXJmX3JlY29yZF9oZWFkZXIgKi8gXAo+ICsJCQkJIDggKyAgIC8qIGN0 eCBJRCAqLyBcCj4gKwkJCQkgOCArICAgLyogUGlkICovIFwKPiArCQkJCSA4ICsgICAvKiBUYWcg Ki8gXAo+ICsJCQkJIDggKyAgIC8qIFRpbWVzdGFtcCAqLyBcCj4gKwkJCQkgNCpJOTE1X1BFUkZf TU1JT19OVU1fTUFYKQkvKiBNTUlPIHJlZyAqLwo+ICsKPiArI2RlZmluZSBPQV9UU19NTUlPX1NB TVBMRV9TSVpFX01BWCAoOCArICAgLyogZHJtX2k5MTVfcGVyZl9yZWNvcmRfaGVhZGVyICovIFwK PiArCQkJCSAgICA4ICsgICAvKiBzb3VyY2UgaW5mbyAqLyBcCj4gKwkJCQkgICAgOCArICAgLyog Y3R4IElEICovIFwKPiArCQkJCSAgICA4ICsgICAvKiBQaWQgKi8gXAo+ICsJCQkJICAgIDggKyAg IC8qIFRhZyAqLyBcCj4gKwkJCQkgICAgOCArICAgLyogVGltZXN0YW1wICovIFwKPiArCQkJCSAg ICAoNCpJOTE1X1BFUkZfTU1JT19OVU1fTUFYKSArIC8qIE1NSU8gcmVnKi8gXAo+ICsJCQkJICAg IDI1NikgLyogcmF3IE9BIGNvdW50ZXIgc25hcHNob3QgKi8KPiArCj4gKyNkZWZpbmUgUkVBRF9P QV9CVUZfU0laRV9NQVgJCSgxMDAqT0FfU0FNUExFX1NJWkVfTUFYKQo+ICsjZGVmaW5lIFJFQURf VFNfQlVGX1NJWkVfTUFYCQkoMTAwKlRTX1NBTVBMRV9TSVpFX01BWCkKPiArI2RlZmluZSBSRUFE X1RTX01NSU9fQlVGX1NJWkVfTUFYCSgxMDAqVFNfTU1JT19TQU1QTEVfU0laRV9NQVgpCj4gKyNk ZWZpbmUgUkVBRF9PQV9UU19NTUlPX0JVRl9TSVpFX01BWAkoMTAwKk9BX1RTX01NSU9fU0FNUExF X1NJWkVfTUFYKQo+ICsKPiArI2RlZmluZSBTQU1QTEVfT0EJKDE8PDApCj4gKyNkZWZpbmUgU0FN UExFX1RTCSgxPDwxKQo+ICsjZGVmaW5lIFNBTVBMRV9NTUlPCSgxPDwyKQo+ICsKPiArc3RydWN0 IGludGVsX2RldmljZSB7Cj4gKwl1aW50MzJfdCBkZXZpY2U7Cj4gKwl1aW50MzJfdCBzdWJzeXN0 ZW1fZGV2aWNlOwo+ICsJdWludDMyX3Qgc3Vic3lzdGVtX3ZlbmRvcjsKPiArfTsKPiArCj4gK2Vu dW0gcGxhdGZvcm0gewo+ICsJQVJDSF9IU1csCj4gKwlBUkNIX0JEVywKPiArCUFSQ0hfU0tMLAo+ ICt9IGFyY2g7Cj4gKwo+ICsvKiBEQVBDIE9BIHNhbXBsZXMgcmVhZCgpIGZyb20gaTkxNSBwZXJm ICovCj4gK3N0cnVjdCBkYXBjX29hX3NhbXBsZSB7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9y ZWNvcmRfaGVhZGVyIGhlYWRlcjsKPiArCXVpbnQ2NF90IHNvdXJjZV9pbmZvOwo+ICsJdWludDY0 X3QgY3R4X2lkOwo+ICsJdWludDY0X3QgcGlkOwo+ICsJdWludDY0X3QgdGFnOwo+ICsJdWludDhf dCBvYV9yZXBvcnRbXTsKPiArfTsKPiArCj4gKy8qIERBUEMgdGltZXN0YW1wIHNhbXBsZXMgcmVh ZCgpIGZyb20gaTkxNSBwZXJmICovCj4gK3N0cnVjdCBkYXBjX3RzX3NhbXBsZSB7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcGVyZl9yZWNvcmRfaGVhZGVyIGhlYWRlcjsKPiArCXVpbnQ2NF90IGN0eF9p ZDsKPiArCXVpbnQ2NF90IHBpZDsKPiArCXVpbnQ2NF90IHRhZzsKPiArCXVpbnQ2NF90IHRpbWVz dGFtcDsKPiArfTsKPiArCj4gKy8qIERBUEMgdGltZXN0YW1wICsgbW1pbyBzYW1wbGVzIHJlYWQo KSBmcm9tIGk5MTUgcGVyZiAqLwo+ICtzdHJ1Y3QgZGFwY190c19tbWlvX3NhbXBsZSB7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcGVyZl9yZWNvcmRfaGVhZGVyIGhlYWRlcjsKPiArCXVpbnQ2NF90IGN0 eF9pZDsKPiArCXVpbnQ2NF90IHBpZDsKPiArCXVpbnQ2NF90IHRhZzsKPiArCXVpbnQ2NF90IHRp bWVzdGFtcDsKPiArCXVpbnQzMl90IG1taW9bMl07Cj4gK307Cj4gKwo+ICsvKiBEQVBDIE9BICsg dGltZXN0YW1wICsgbW1pbyBzYW1wbGVzIHJlYWQoKSBmcm9tIGk5MTUgcGVyZiAqLwo+ICtzdHJ1 Y3QgZGFwY19vYV90c19tbWlvX3NhbXBsZSB7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9yZWNv cmRfaGVhZGVyIGhlYWRlcjsKPiArCXVpbnQ2NF90IHNvdXJjZV9pbmZvOwo+ICsJdWludDY0X3Qg Y3R4X2lkOwo+ICsJdWludDY0X3QgcGlkOwo+ICsJdWludDY0X3QgdGFnOwo+ICsJdWludDY0X3Qg dGltZXN0YW1wOwo+ICsKPiArCS8qCj4gKwkgKiBIYXJkY29kaW5nIDIgaGVyZSBzaW5jZSB0aGUg YXJyYXkgc2l6ZSB3b3VsZCBkZXBlbmQgb24gbm8uIG9mIG1taW8KPiArCSAqIHZhbHVlcyBxdWVy aWVkLiBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLgo+ICsJICovCj4gKwl1aW50 MzJfdCBtbWlvWzJdOwo+ICsJdWludDhfdCBvYV9yZXBvcnRbXTsKPiArfTsKPiArCj4gK3N0cnVj dCBpOTE1X29hX2Zvcm1hdCB7Cj4gKwlpbnQgZm9ybWF0Owo+ICsJaW50IHNpemU7Cj4gK307Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfb2FfZm9ybWF0IGhzd19vYV9mb3JtYXRzW0k5MTVfT0Ff Rk9STUFUX01BWF0gPSB7Cj4gKwlbSTkxNV9PQV9GT1JNQVRfQTEzXQkgICAgPSB7IDAsIDY0IH0s Cj4gKwlbSTkxNV9PQV9GT1JNQVRfQTI5XQkgICAgPSB7IDEsIDEyOCB9LAo+ICsJW0k5MTVfT0Ff Rk9STUFUX0ExM19COF9DOF0gID0geyAyLCAxMjggfSwKPiArCS8qIEEyOV9COF9DOCBEaXNhbGxv d2VkIGFzIDE5MiBieXRlcyBkb2Vzbid0IGZhY3RvciBpbnRvIGJ1ZmZlciBzaXplICovCj4gKwlb STkxNV9PQV9GT1JNQVRfQjRfQzhdCSAgICA9IHsgNCwgNjQgfSwKPiArCVtJOTE1X09BX0ZPUk1B VF9BNDVfQjhfQzhdICA9IHsgNSwgMjU2IH0sCj4gKwlbSTkxNV9PQV9GT1JNQVRfQjRfQzhfQTE2 XSAgPSB7IDYsIDEyOCB9LAo+ICsJW0k5MTVfT0FfRk9STUFUX0M0X0I4XQkgICAgPSB7IDcsIDY0 IH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfb2FfZm9ybWF0IGdlbjhfcGx1c19v YV9mb3JtYXRzW0k5MTVfT0FfRk9STUFUX01BWF0gPSB7Cj4gKwlbSTkxNV9PQV9GT1JNQVRfQTEy XQkJICAgID0geyAwLCA2NCB9LAo+ICsJW0k5MTVfT0FfRk9STUFUX0ExMl9COF9DOF0JICAgID0g eyAyLCAxMjggfSwKPiArCVtJOTE1X09BX0ZPUk1BVF9BMzJ1NDBfQTR1MzJfQjhfQzhdID0geyA1 LCAyNTYgfSwKPiArCVtJOTE1X09BX0ZPUk1BVF9DNF9COF0JCSAgICA9IHsgNywgNjQgfSwKPiAr fTsKPiArCgpJJ20gbm90IHN1cmUgaXQncyB3b3J0aCB0ZXN0aW5nIGFsbCB0aGUgY29uZmlncywg bWF5YmUganVzdCBsaW1pdCB0aGUgCnRlc3QgdG8gVGVzdE9hLgpZb3UgY2FuIHBpY2t1cCB0aGUg dXVpZHMgaW4gcGVyZi5jLgoKPiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoc3dfZ3VpZHNb XSA9IHsKPiArCSI0MDNkODgzMi0xYTI3LTRhYTYtYTY0ZS1mNTM4OWNlN2IyMTIiLAo+ICsJIjM5 YWQxNGJjLTIzODAtNDVjNC05MWViLWZiY2IzYWE3YWU3YiIsCj4gKwkiMzg2NWJlMjgtNjk4Mi00 OWZlLTk0OTQtZTRkMWI0Nzk1NDEzIiwKPiArCSJiYjVlZDQ5Yi0yNDk3LTQwOTUtOTRmNi0yNmJh Mjk0ZGI4OGEiLAo+ICsJIjMzNThkNjM5LTliNWYtNDVhYi05NzZkLTliMDhjYmZjNjI0MCIsCj4g KwkiYmMyNzQ0ODgtYjRiNi00MGM3LTkwZGEtYjc3ZDdhZDE2MTg5IiwKPiArfTsKPiArCj4gKy8q Cj4gKyAqIE5lZWQgdG8gdXBkYXRlIEdVSUQgYmFzZWQgb24gbGF0ZXN0IGk5MTUgY29uZmlndXJh dGlvbi4gQ3VycmVudGx5Cj4gKyAqIGZpcnN0IEdVSUQgaXMgYmVpbmcgdGVzdGVkLgo+ICsgKi8K PiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBza2xfZ3VpZHNbXSA9IHsKPiArCSIxNjUxOTQ5 Zi0wYWMwLTRjYjEtYTA2Zi1kYWZkNzRhNDA3ZDEiLAo+ICsJImY1MTllNDgxLTI0ZDItNGQ0Mi04 N2M5LTNmZGQxMmMwMDIwMiIsCj4gKwkiZmRmYzAxY2MtZTI4ZS00MjNhLWFhZTAtYjVlZDVkNGQ3 YTlmIiwKPiArCSJjOWM3YWNlNS02MTRhLTRmOGUtOTBjNy0zMDA2NGMzNmNhZDIiLAo+ICsJIjk5 Nzk3ZGMyLWI0OGYtNGQ4My1iOTczLTYxM2NmZjAxMjAyYiIsCj4gKwkiYWZhMTQ4ZWEtNzdmYi00 OGVlLWI4ZjgtZTVlOTcxZWNmNTg5IiwKPiArCSJiZmNlNzA2MS1lNmYxLTRhNzgtYmVkOC1jOWNj NjlhZjcwZjkiLAo+ICsJImMzNWRkY2FiLWIxZjItNDUyZi05NjlhLWE4MjA5ZDUzMWEwMCIsCj4g KwkiMmIwZDBjODMtNzA2YS00Y2I2LWI1NWUtZDZiY2Y1MWZhNmQzIiwKPiArCSJkMDg0ZjZhOS1m NzA2LTRiNzQtYjk4Yy02NWRhYTUzNDA1MTciLAo+ICsJImM3ZWQ0OTNjLTU0ZmYtNDE1Mi1iYWY0 LTA3ZTMxZTdhMjRjYiIsCj4gKwkiNDNhZDkzMDAtMTk4YS00NzM0LThmM2EtMmEyMTUxYjlkYWI2 IiwKPiArCSJjY2ZjZTNmMi02YzYzLTQ2MzAtYTA0My1mMmEwMjQzZmVkOGYiLAo+ICsJIjJlNTY0 YjI4LTk4ZmEtNDJhMC04YmJjLTc5MTVkZTNjYzAzYyIsCj4gKwkiYTMwNTUzM2YtN2UzNi00ZmI2 LTg3NDktYzYyODBiY2UzNDU3IiwKPiArCSIzNGVjZDU5Zi02YjUyLTQwMDQtOTE2Zi1hZmU5NTMw YTA0NDIiLAo+ICsJImVlMTk5MGQ5LTZlOTMtNGM3Yy1hYTllLWI0MGUxZWM0ZDQxYiIsCj4gK307 Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGludGVsX2RldmljZSBpbnRlbF9kZXY7Cj4gK3N0YXRpYyBp bnQgZHJtX2ZkID0gLTE7Cj4gK3N0YXRpYyBpbnQgZHJtX2NhcmQgPSAtMTsKPiArc3RhdGljIGlu dCBwZXJmX2V2ZW50X2ZkX3JjcyA9IC0xOwo+ICsKPiArc3RhdGljIHVpbnQ2NF90IHJlYWRfZmls ZV91aW50NjQoY29uc3QgY2hhciAqZmlsZSkKPiArewo+ICsJY2hhciBidWZbMzJdOwo+ICsJaW50 IGZkLCBuOwo+ICsKPiArCWZkID0gb3BlbihmaWxlLCAwKTsKPiArCWlmIChmZCA8IDApCj4gKwkJ cmV0dXJuIDA7Cj4gKwluID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSAtIDEpOwo+ICsJY2xv c2UoZmQpOwo+ICsJaWYgKG4gPCAwKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWJ1ZltuXSA9ICdc MCc7Cj4gKwlyZXR1cm4gc3RydG91bGwoYnVmLCAwLCAwKTsKPiArfQo+ICsKPiArc3RhdGljIHVp bnQzMl90IHJlYWRfZGV2aWNlX3BhcmFtKGludCBpZCwgY29uc3QgY2hhciAqcGFyYW0pCj4gK3sK PiArCWNoYXIgKm5hbWU7Cj4gKwlpbnQgcmV0ID0gYXNwcmludGYoJm5hbWUsICIvc3lzL2NsYXNz L2RybS9yZW5kZXJEJXUvZGV2aWNlLyVzIiwKPiArCQkJICAgaWQsIHBhcmFtKTsKPiArCXVpbnQz Ml90IHZhbHVlOwo+ICsKPiArCWFzc2VydChyZXQgIT0gLTEpOwo+ICsKPiArCXZhbHVlID0gcmVh ZF9maWxlX3VpbnQ2NChuYW1lKTsKPiArCWZyZWUobmFtZSk7Cj4gKwo+ICsJcmV0dXJuIHZhbHVl Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdldF9jYXJkX2Zvcl9mZChpbnQgZmQpCj4gK3sKPiAr CXN0cnVjdCBzdGF0IHNiOwo+ICsJaW50IG1qciwgbW5yOwo+ICsJY2hhciBidWZmZXJbMTI4XTsK PiArCURJUiAqZHJtX2RpcjsKPiArCWludCBlbnRyeV9zaXplOwo+ICsJc3RydWN0IGRpcmVudCAq ZW50cnkxLCAqZW50cnkyOwo+ICsJaW50IG5hbWVfbWF4Owo+ICsKPiArCWlmIChmc3RhdChmZCwg JnNiKSkgewo+ICsJCXByaW50ZigiRmFpbGVkIHRvIHN0YXQgRFJNIGZkXG4iKTsKPiArCQlyZXR1 cm4gLTE7Cj4gKwl9Cj4gKwo+ICsJbWpyID0gbWFqb3Ioc2Iuc3RfcmRldik7Cj4gKwltbnIgPSBt aW5vcihzYi5zdF9yZGV2KTsKPiArCj4gKwlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIp LCAiL3N5cy9kZXYvY2hhci8lZDolZC9kZXZpY2UvZHJtIiwKPiArCQkgbWpyLCBtbnIpOwo+ICsK PiArCWRybV9kaXIgPSBvcGVuZGlyKGJ1ZmZlcik7Cj4gKwlhc3NlcnQoZHJtX2RpciAhPSBOVUxM KTsKPiArCj4gKwluYW1lX21heCA9IHBhdGhjb25mKGJ1ZmZlciwgX1BDX05BTUVfTUFYKTsKPiAr Cj4gKwlpZiAobmFtZV9tYXggPT0gLTEpCj4gKwkJbmFtZV9tYXggPSAyNTU7Cj4gKwo+ICsJZW50 cnlfc2l6ZSA9IDI1NjsKPiArCWVudHJ5MSA9IGFsbG9jYShlbnRyeV9zaXplKTsKPiArCj4gKwl3 aGlsZSAoKHJlYWRkaXJfcihkcm1fZGlyLCBlbnRyeTEsICZlbnRyeTIpID09IDApICYmIGVudHJ5 MiAhPSBOVUxMKQo+ICsJCWlmIChlbnRyeTItPmRfdHlwZSA9PSBEVF9ESVIgJiYKPiArCQkgICAg c3RybmNtcChlbnRyeTItPmRfbmFtZSwgImNhcmQiLCA0KSA9PSAwKQo+ICsJCQlyZXR1cm4gc3Ry dG91bGwoZW50cnkyLT5kX25hbWUgKyA0LCBOVUxMLCAxMCk7Cj4gKwo+ICsJcmV0dXJuIC0xOwo+ ICt9Cj4gKwo+ICsKCllvdSBjYW4gcmVwbGFjZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdpdGgg X19kcm1fb3Blbl9kcml2ZXJfcmVuZGVyLgoKPiArc3RhdGljIGludCBvcGVuX3JlbmRlcl9ub2Rl KHN0cnVjdCBpbnRlbF9kZXZpY2UgKmRldikKPiArewo+ICsJY2hhciAqbmFtZTsKPiArCWludCBp LCBmZDsKPiArCj4gKwlmb3IgKGkgPSAxMjg7IGkgPCAoMTI4ICsgMTYpOyBpKyspIHsKPiArCQlp bnQgcmV0Owo+ICsKPiArCQlyZXQgPSBhc3ByaW50ZigmbmFtZSwgIi9kZXYvZHJpL3JlbmRlckQl dSIsIGkpOwo+ICsJCWFzc2VydChyZXQgIT0gLTEpOwo+ICsKPiArCQlmZCA9IG9wZW4obmFtZSwg T19SRFdSKTsKPiArCQlmcmVlKG5hbWUpOwo+ICsKPiArCQlpZiAoZmQgPT0gLTEpCj4gKwkJCWNv bnRpbnVlOwo+ICsKPiArCQlpZiAocmVhZF9kZXZpY2VfcGFyYW0oaSwgInZlbmRvciIpICE9IDB4 ODA4Nikgewo+ICsJCQljbG9zZShmZCk7Cj4gKwkJCWZkID0gLTE7Cj4gKwkJCWNvbnRpbnVlOwo+ ICsJCX0KPiArCj4gKwkJZGV2LT5kZXZpY2UgPSByZWFkX2RldmljZV9wYXJhbShpLCAiZGV2aWNl Iik7Cj4gKwkJZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID0gcmVhZF9kZXZpY2VfcGFyYW0oaSwKPiAr CQkJCQkJCSAgInN1YnN5c3RlbV9kZXZpY2UiKTsKPiArCQlkZXYtPnN1YnN5c3RlbV92ZW5kb3Ig PSByZWFkX2RldmljZV9wYXJhbShpLAo+ICsJCQkJCQkJICAic3Vic3lzdGVtX3ZlbmRvciIpOwo+ ICsKPiArCQlyZXR1cm4gZmQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZkOwo+ICt9CgpUaGUgZm9s bG93aW5nIGZ1bmN0aW9uIGNhbiBiZSByZXBsYWNlZCBieSBpZ3RfaW9jdGwoKS4KCj4gKwo+ICsv KiBIYW5kbGUgcmVzdGFydGluZyBpb2N0bCBpZiBpbnRlcnJ1cHRlZC4uLiAqLwo+ICtzdGF0aWMg aW50IHBlcmZfaW9jdGwoaW50IGZkLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIHZvaWQgKmFyZykK PiArewo+ICsJaW50IHJldDsKPiArCj4gKwlkbyB7Cj4gKwkJcmV0ID0gaW9jdGwoZmQsIHJlcXVl c3QsIGFyZyk7Cj4gKwl9IHdoaWxlIChyZXQgPT0gLTEgJiYgKGVycm5vID09IEVJTlRSIHx8IGVy cm5vID09IEVBR0FJTikpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK2ludCByZWFk X3BlcmZfZGFwY19zYW1wbGVzKHVpbnQ4X3QgKnRlbXBfYnVmLCB1aW50OF90ICpvdXRfZGF0YSwK PiArCQkJICAgdWludDhfdCBzYW1wbGVfZmxhZ3MsIGludCBmZCkKPiArewo+ICsJaW50IGNvdW50 LCBtYXhfcmVhZF9zaXplID0gMTYqMTAyNCoxMDI0LCBzaXplX2NvcGllZCA9IDAsIG9mZnNldCA9 IDA7Cj4gKwo+ICsJaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQSkKPiArCQltYXhfcmVhZF9z aXplID0gUkVBRF9PQV9CVUZfU0laRV9NQVg7Cj4gKwllbHNlIGlmIChzYW1wbGVfZmxhZ3MgJiBT QU1QTEVfVFMpCj4gKwkJbWF4X3JlYWRfc2l6ZSA9IFJFQURfVFNfQlVGX1NJWkVfTUFYOwo+ICsJ ZWxzZSBpZiAoc2FtcGxlX2ZsYWdzICYgKFNBTVBMRV9UU3xTQU1QTEVfTU1JTykpCj4gKwkJbWF4 X3JlYWRfc2l6ZSA9IFJFQURfVFNfTU1JT19CVUZfU0laRV9NQVg7Cj4gKwllbHNlIGlmIChzYW1w bGVfZmxhZ3MgJiAoU0FNUExFX09BfFNBTVBMRV9UU3xTQU1QTEVfTU1JTykpIHsKPiArCQltYXhf cmVhZF9zaXplID0gUkVBRF9PQV9UU19NTUlPX0JVRl9TSVpFX01BWDsKPiArCX0gZWxzZSB7Cj4g KwkJcHJpbnRmKCJVbmtub3duIHNhbXBsZSBmbGFnczogJWRcbiIsIHNhbXBsZV9mbGFncyk7Cj4g KwkJcmV0dXJuIC0xOwo+ICsJfQo+ICsKPiArCWNvdW50ID0gcmVhZChmZCwgdGVtcF9idWYsIG1h eF9yZWFkX3NpemUpOwo+ICsKPiArCWlmIChjb3VudCA8IDApIHsKPiArCQlwcmludGYoIkVycm9y IHJlYWRpbmcgaTkxNSBPQSBldmVudCBzdHJlYW0uIEVycm5vOiVkIiwgZXJybm8pOwo+ICsJCXBl cnJvcigiRXJyb3IgOiAiKTsKPiArCQlyZXR1cm4gY291bnQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGNv dW50ID09IDApCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJd2hpbGUgKG9mZnNldCA8IGNvdW50KSB7 Cj4gKwkJc3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hlYWRlciAqaGVhZGVyID0KPiArCQko c3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hlYWRlciAqKSh0ZW1wX2J1ZiArIG9mZnNldCk7 Cj4gKwo+ICsJCWlmIChoZWFkZXItPnNpemUgPT0gMCkgewo+ICsJCQlwcmludGYoIlNwdXJpb3Vz IGhlYWRlciBzaXplID09IDBcbiIpOwo+ICsJCQkvKiBYWFg6IEhvdyBzaG91bGQgd2UgaGFuZGxl IHRoaXMgaW5zdGVhZCBvZiBleGl0aW5nKCkqLwo+ICsJCQlleGl0KDEpOwo+ICsJCX0KPiArCj4g KwkJb2Zmc2V0ICs9IGhlYWRlci0+c2l6ZTsKPiArCj4gKwkJc3dpdGNoIChoZWFkZXItPnR5cGUp IHsKPiArCQljYXNlIERSTV9JOTE1X1BFUkZfUkVDT1JEX09BX0JVRkZFUl9MT1NUOgo+ICsJCQlw cmludGYoImk5MTVfb2E6IE9BIGJ1ZmZlciBvdmVyZmxvd1xuIik7Cj4gKwkJCWJyZWFrOwo+ICsJ CWNhc2UgRFJNX0k5MTVfUEVSRl9SRUNPUkRfT0FfUkVQT1JUX0xPU1Q6Cj4gKwkJCXByaW50Zigi aTkxNV9vYTogT0EgcmVwb3J0IGxvc3RcbiIpOwo+ICsJCQlicmVhazsKPiArCQljYXNlIERSTV9J OTE1X1BFUkZfUkVDT1JEX1NBTVBMRToKPiArCQkJaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9P QSkgewo+ICsJCQkJc3RydWN0IGRhcGNfb2Ffc2FtcGxlICpzYW1wbGUgPQo+ICsJCQkJCShzdHJ1 Y3QgZGFwY19vYV9zYW1wbGUgKiloZWFkZXI7Cj4gKwo+ICsJCQkJaWYgKHNhbXBsZS0+c291cmNl X2luZm8gPT0KPiArCQkJCSAgICBJOTE1X1BFUkZfU0FNUExFX09BX1NPVVJDRV9SQ1MpIHsKPiAr CQkJCQkvKiBEQVBDIHNhbXBsZSAqLwo+ICsJCQkJCXByaW50ZigiREFQQyBPQSBzYW1wbGVcbiIp Owo+ICsJCQkJfSBlbHNlIHsKPiArCQkJCQkvKiBQZXJpb2RpYyBzYW1wbGUuIE5vIG5lZWQgdG8g Y29weSAqLwo+ICsJCQkJCXByaW50ZigiUGVyaW9kaWMgc2FtcGxlXG4iKTsKPiArCQkJCQljb250 aW51ZTsKPiArCQkJCX0KPiArCQkJfQo+ICsJCQltZW1jcHkob3V0X2RhdGEgKyBzaXplX2NvcGll ZCwgaGVhZGVyLCBoZWFkZXItPnNpemUpOwo+ICsJCQlzaXplX2NvcGllZCArPSBoZWFkZXItPnNp emU7Cj4gKwkJCWJyZWFrOwo+ICsJCWRlZmF1bHQ6Cj4gKwkJCXByaW50ZigiaTkxNV9vYTogU3B1 cmlvdXMgaGVhZGVyIHR5cGUgPSAlZFxuIiwKPiArCQkJICAgICAgIGhlYWRlci0+dHlwZSk7Cj4g KwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiBzaXplX2NvcGllZDsKPiArfQo+ICsKPiArYm9vbCBy ZWFkX21ldHJpY3NfaWRfZnJvbV9zeXNmcyhpbnQgKm1ldHJpY3NfaWQpCj4gK3sKPiArCWNoYXIg YnVmZmVyWzEyOF07Cj4gKwljb25zdCBjaGFyICpndWlkOwo+ICsKPiArCWFzc2VydChkcm1fY2Fy ZCA+PSAwKTsKPiArCj4gKwkvKgo+ICsJICogU2VsZWN0IHJlbmRlciBiYXNpYyBtZXRyaWNzIElE IC0gaS5lLiBmaXJzdCBndWlkLCBmcm9tIHRoZSBhcmNoCj4gKwkgKiBzcGVjaWZpYyBndWlkcy4K PiArCSAqLwo+ICsJc3dpdGNoIChhcmNoKSB7Cj4gKwljYXNlIEFSQ0hfSFNXOgo+ICsJCWd1aWQg PSBoc3dfZ3VpZHNbMF07Cj4gKwkJYnJlYWs7CgpZb3UgZGVmaW5lZCBBUkNIX0JEVywgYnV0IGl0 IGFwcGVhcnMgdG8gYmUgbWlzc2luZyBoZXJlLgoKPiArCWNhc2UgQVJDSF9TS0w6Cj4gKwkJZ3Vp ZCA9IHNrbF9ndWlkc1swXTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcHJpbnRmKCJn dWlkIG5vdCBmb3VuZCBmb3IgdGhlIGFyY2hcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0K PiArCj4gKwlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAo+ICsJCSAiL3N5cy9jbGFz cy9kcm0vY2FyZCVkL21ldHJpY3MvJXMvaWQiLAo+ICsJCSBkcm1fY2FyZCwgZ3VpZCk7Cj4gKwkq bWV0cmljc19pZCA9IHJlYWRfZmlsZV91aW50NjQoYnVmZmVyKTsKPiArCj4gKwlyZXR1cm4gdHJ1 ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgb3Blbl9pOTE1X3Jjc19vYV9zdHJlYW0oaW50IHJl cG9ydF9mb3JtYXQsIGludCBtZXRyaWNzX2lkKQo+ICt7Cj4gKwlpbnQgcGVyaW9kX2V4cG9uZW50 ID0gMTY7Ly8wOwo+ICsJaW50IHJpbmdfaWQgPSBJOTE1X0VYRUNfUkVOREVSOyAvKiBSQ1MgKi8K PiArCXN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFyYW0gcGFyYW07Cj4gKwl1aW50NjRfdCBw cm9wZXJ0aWVzW10gPSB7Cj4gKwkJRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQSwgdHJ1ZSwK PiArCQlEUk1fSTkxNV9QRVJGX1BST1BfT0FfTUVUUklDU19TRVQsIG1ldHJpY3NfaWQsCj4gKwkJ RFJNX0k5MTVfUEVSRl9QUk9QX09BX0ZPUk1BVCwgcmVwb3J0X2Zvcm1hdCwKPiArCQlEUk1fSTkx NV9QRVJGX1BST1BfT0FfRVhQT05FTlQsIHBlcmlvZF9leHBvbmVudCwKPiArCQlEUk1fSTkxNV9Q RVJGX1BST1BfRU5HSU5FLCByaW5nX2lkLAo+ICsJCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVf T0FfU09VUkNFLCB0cnVlLAo+ICsJCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfQ1RYX0lELCB0 cnVlLAo+ICsJCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfUElELCB0cnVlLAo+ICsJCURSTV9J OTE1X1BFUkZfUFJPUF9TQU1QTEVfVEFHLCB0cnVlLAo+ICsJfTsKClRoaXMgdGVzdCB3aWxsIHBv dGVudGlhbGx5IHJ1biBvbiBvbGRlciBrZXJuZWxzLCB3aGVyZSB0aGUgZmVhdHVyZSAKeW91J3Jl IGFkZGluZyB3b24ndCBiZSBhdmFpbGFibGUuCkl0IG5lZWRzIHRvIGhhbmRsZSB0aGlzIGNhc2Ug YW4ganVzdCBza2lwIHRoZSB0ZXN0cyBpZiBvcGVuaW5nIHRoZSAKc3RyZWFtIHdpdGggbmV3ZXIg b3B0aW9ucyBpc24ndCBzdXBwb3J0ZWQuCgo+ICsJaW50IGZkOwo+ICsKPiArCW1lbXNldCgmcGFy YW0sIDAsIHNpemVvZihwYXJhbSkpOwo+ICsKPiArCXBhcmFtLmZsYWdzID0gMDsKPiArCXBhcmFt LmZsYWdzIHw9IEk5MTVfUEVSRl9GTEFHX0ZEX0NMT0VYRUM7Cj4gKwlwYXJhbS5mbGFncyB8PSBJ OTE1X1BFUkZfRkxBR19GRF9OT05CTE9DSzsKPiArCj4gKwlwYXJhbS5wcm9wZXJ0aWVzX3B0ciA9 ICh1aW50NjRfdClwcm9wZXJ0aWVzOwo+ICsJcGFyYW0ubnVtX3Byb3BlcnRpZXMgPSBzaXplb2Yo cHJvcGVydGllcykgLyAxNjsKPiArCj4gKwlmZCA9IHBlcmZfaW9jdGwoZHJtX2ZkLCBEUk1fSU9D VExfSTkxNV9QRVJGX09QRU4sICZwYXJhbSk7Cj4gKwo+ICsJaWYgKGZkID09IC0xKSB7Cj4gKwkJ cGVycm9yKCJFcnJvciBvcGVuaW5nIGk5MTUgcGVyZiBldmVudCA6ICIpOwo+ICsJCXJldHVybjsK PiArCX0KPiArCj4gKwlwcmludGYoIk9wZW5lZCBpOTE1IHBlcmYgZXZlbnQuXG4iKTsKPiArCXBl cmZfZXZlbnRfZmRfcmNzID0gZmQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG9wZW5faTkxNV9y Y3NfdHNfc3RyZWFtKHZvaWQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFy YW0gcGFyYW07Cj4gKwlpbnQgcmluZ19pZCA9IEk5MTVfRVhFQ19SRU5ERVI7IC8qIFJDUyAqLwo+ ICsJdWludDY0X3QgcHJvcGVydGllc1tdID0gewo+ICsJCURSTV9JOTE1X1BFUkZfUFJPUF9FTkdJ TkUsIHJpbmdfaWQsCj4gKwkJRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9UUywgdHJ1ZSwKPiAr CQlEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX0NUWF9JRCwgdHJ1ZSwKPiArCQlEUk1fSTkxNV9Q RVJGX1BST1BfU0FNUExFX1BJRCwgdHJ1ZSwKPiArCQlEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExF X1RBRywgdHJ1ZSwKPiArCX07Cj4gKwlpbnQgZmQ7Cj4gKwo+ICsJbWVtc2V0KCZwYXJhbSwgMCwg c2l6ZW9mKHBhcmFtKSk7Cj4gKwo+ICsJcGFyYW0uZmxhZ3MgPSAwOwo+ICsJcGFyYW0uZmxhZ3Mg fD0gSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQzsKPiArCXBhcmFtLmZsYWdzIHw9IEk5MTVfUEVS Rl9GTEFHX0ZEX05PTkJMT0NLOwo+ICsKPiArCXBhcmFtLnByb3BlcnRpZXNfcHRyID0gKHVpbnQ2 NF90KXByb3BlcnRpZXM7Cj4gKwlwYXJhbS5udW1fcHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0 aWVzKSAvIDE2Owo+ICsKPiArCWZkID0gcGVyZl9pb2N0bChkcm1fZmQsIERSTV9JT0NUTF9JOTE1 X1BFUkZfT1BFTiwgJnBhcmFtKTsKPiArCj4gKwlpZiAoZmQgPT0gLTEpIHsKPiArCQlwZXJyb3Io IkVycm9yIG9wZW5pbmcgaTkxNSBwZXJmIGV2ZW50IDogIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ ICsKPiArCXByaW50ZigiT3BlbmVkIGk5MTUgcGVyZiBldmVudC5cbiIpOwo+ICsJcGVyZl9ldmVu dF9mZF9yY3MgPSBmZDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgb3Blbl9pOTE1X3Jjc190c19t bWlvX3N0cmVhbSgKPiArCQkJc3RydWN0IGRybV9pOTE1X3BlcmZfbW1pb19saXN0ICptbWlvX2xp c3QpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFyYW0gcGFyYW07Cj4gKwlp bnQgcmluZ19pZCA9IEk5MTVfRVhFQ19SRU5ERVI7IC8qIFJDUyAqLwo+ICsJdWludDY0X3QgcHJv cGVydGllc1tdID0gewo+ICsJCURSTV9JOTE1X1BFUkZfUFJPUF9FTkdJTkUsIHJpbmdfaWQsCj4g KwkJRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9UUywgdHJ1ZSwKPiArCQlEUk1fSTkxNV9QRVJG X1BST1BfU0FNUExFX01NSU8sICh1aW50NjRfdCltbWlvX2xpc3QsCj4gKwkJRFJNX0k5MTVfUEVS Rl9QUk9QX1NBTVBMRV9DVFhfSUQsIHRydWUsCj4gKwkJRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBM RV9QSUQsIHRydWUsCj4gKwkJRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9UQUcsIHRydWUsCj4g Kwl9Owo+ICsJaW50IGZkOwo+ICsKPiArCW1lbXNldCgmcGFyYW0sIDAsIHNpemVvZihwYXJhbSkp Owo+ICsKPiArCXBhcmFtLmZsYWdzID0gMDsKPiArCXBhcmFtLmZsYWdzIHw9IEk5MTVfUEVSRl9G TEFHX0ZEX0NMT0VYRUM7Cj4gKwlwYXJhbS5mbGFncyB8PSBJOTE1X1BFUkZfRkxBR19GRF9OT05C TE9DSzsKPiArCj4gKwlwYXJhbS5wcm9wZXJ0aWVzX3B0ciA9ICh1aW50NjRfdClwcm9wZXJ0aWVz Owo+ICsJcGFyYW0ubnVtX3Byb3BlcnRpZXMgPSBzaXplb2YocHJvcGVydGllcykgLyAxNjsKPiAr Cj4gKwlmZCA9IHBlcmZfaW9jdGwoZHJtX2ZkLCBEUk1fSU9DVExfSTkxNV9QRVJGX09QRU4sICZw YXJhbSk7Cj4gKwo+ICsJaWYgKGZkID09IC0xKSB7Cj4gKwkJcGVycm9yKCJFcnJvciBvcGVuaW5n IGk5MTUgcGVyZiBldmVudCA6ICIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlwcmludGYo Ik9wZW5lZCBpOTE1IHBlcmYgZXZlbnQuXG4iKTsKPiArCXBlcmZfZXZlbnRfZmRfcmNzID0gZmQ7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG9wZW5faTkxNV9yY3Nfb2FfdHNfbW1pb19zdHJlYW0o aW50IHJlcG9ydF9mb3JtYXQsIGludCBtZXRyaWNzX2lkLAo+ICsJCQlzdHJ1Y3QgZHJtX2k5MTVf cGVyZl9tbWlvX2xpc3QgKm1taW9fbGlzdCkKPiArewo+ICsJaW50IHBlcmlvZF9leHBvbmVudCA9 IDE2Oy8vMDsKPiArCWludCByaW5nX2lkID0gSTkxNV9FWEVDX1JFTkRFUjsgLyogUkNTICovCj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtIHBhcmFtOwo+ICsJdWludDY0X3QgcHJv cGVydGllc1tdID0gewo+ICsJCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfT0EsIHRydWUsCj4g KwkJRFJNX0k5MTVfUEVSRl9QUk9QX09BX01FVFJJQ1NfU0VULCBtZXRyaWNzX2lkLAo+ICsJCURS TV9JOTE1X1BFUkZfUFJPUF9PQV9GT1JNQVQsIHJlcG9ydF9mb3JtYXQsCj4gKwkJRFJNX0k5MTVf UEVSRl9QUk9QX09BX0VYUE9ORU5ULCBwZXJpb2RfZXhwb25lbnQsCj4gKwkJRFJNX0k5MTVfUEVS Rl9QUk9QX0VOR0lORSwgcmluZ19pZCwKPiArCQlEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX09B X1NPVVJDRSwgdHJ1ZSwKPiArCQlEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX1RTLCB0cnVlLAo+ ICsJCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfTU1JTywgKHVpbnQ2NF90KW1taW9fbGlzdCwK PiArCQlEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX0NUWF9JRCwgdHJ1ZSwKPiArCQlEUk1fSTkx NV9QRVJGX1BST1BfU0FNUExFX1BJRCwgdHJ1ZSwKPiArCQlEUk1fSTkxNV9QRVJGX1BST1BfU0FN UExFX1RBRywgdHJ1ZSwKPiArCX07Cj4gKwlpbnQgZmQ7Cj4gKwo+ICsJbWVtc2V0KCZwYXJhbSwg MCwgc2l6ZW9mKHBhcmFtKSk7Cj4gKwo+ICsJcGFyYW0uZmxhZ3MgPSAwOwo+ICsJcGFyYW0uZmxh Z3MgfD0gSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQzsKPiArCXBhcmFtLmZsYWdzIHw9IEk5MTVf UEVSRl9GTEFHX0ZEX05PTkJMT0NLOwo+ICsKPiArCXBhcmFtLnByb3BlcnRpZXNfcHRyID0gKHVp bnQ2NF90KXByb3BlcnRpZXM7Cj4gKwlwYXJhbS5udW1fcHJvcGVydGllcyA9IHNpemVvZihwcm9w ZXJ0aWVzKSAvIDE2Owo+ICsKPiArCWZkID0gcGVyZl9pb2N0bChkcm1fZmQsIERSTV9JT0NUTF9J OTE1X1BFUkZfT1BFTiwgJnBhcmFtKTsKPiArCj4gKwlpZiAoZmQgPT0gLTEpIHsKPiArCQlwZXJy b3IoIkVycm9yIG9wZW5pbmcgaTkxNSBwZXJmIGV2ZW50IDogIik7Cj4gKwkJcmV0dXJuOwo+ICsJ fQo+ICsKPiArCXByaW50ZigiT3BlbmVkIGk5MTUgcGVyZiBldmVudC5cbiIpOwo+ICsJcGVyZl9l dmVudF9mZF9yY3MgPSBmZDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgb3Blbl9pOTE1X3Blcmlv ZGljX29hX3N0cmVhbShpbnQgcmVwb3J0X2Zvcm1hdCwgaW50IG1ldHJpY3NfaWQpCj4gK3sKPiAr CWludCBwZXJpb2RfZXhwb25lbnQgPSAxNjsvLzA7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9v cGVuX3BhcmFtIHBhcmFtOwo+ICsJdWludDY0X3QgcHJvcGVydGllc1tdID0gewo+ICsJCURSTV9J OTE1X1BFUkZfUFJPUF9TQU1QTEVfT0EsIHRydWUsCj4gKwkJRFJNX0k5MTVfUEVSRl9QUk9QX09B X01FVFJJQ1NfU0VULCBtZXRyaWNzX2lkLAo+ICsJCURSTV9JOTE1X1BFUkZfUFJPUF9PQV9GT1JN QVQsIHJlcG9ydF9mb3JtYXQsCj4gKwkJRFJNX0k5MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCBw ZXJpb2RfZXhwb25lbnQsCj4gKwkJRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQV9TT1VSQ0Us IHRydWUsCj4gKwl9Owo+ICsJaW50IGZkOwo+ICsKPiArCW1lbXNldCgmcGFyYW0sIDAsIHNpemVv ZihwYXJhbSkpOwo+ICsKPiArCXBhcmFtLmZsYWdzID0gMDsKPiArCXBhcmFtLmZsYWdzIHw9IEk5 MTVfUEVSRl9GTEFHX0ZEX0NMT0VYRUM7Cj4gKwlwYXJhbS5mbGFncyB8PSBJOTE1X1BFUkZfRkxB R19GRF9OT05CTE9DSzsKPiArCj4gKwlwYXJhbS5wcm9wZXJ0aWVzX3B0ciA9ICh1aW50NjRfdClw cm9wZXJ0aWVzOwo+ICsJcGFyYW0ubnVtX3Byb3BlcnRpZXMgPSBzaXplb2YocHJvcGVydGllcykg LyAxNjsKPiArCj4gKwlmZCA9IHBlcmZfaW9jdGwoZHJtX2ZkLCBEUk1fSU9DVExfSTkxNV9QRVJG X09QRU4sICZwYXJhbSk7Cj4gKwo+ICsJaWYgKGZkID09IC0xKSB7Cj4gKwkJcGVycm9yKCJFcnJv ciBvcGVuaW5nIGk5MTUgcGVyZiBldmVudCA6ICIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4g KwlwcmludGYoIk9wZW5lZCBpOTE1IHBlcmYgZXZlbnQuXG4iKTsKPiArCXBlcmZfZXZlbnRfZmRf cmNzID0gZmQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNsb3NlX2k5MTVfcGVyZl9zdHJlYW0o dm9pZCkKPiArewo+ICsJaWYgKHBlcmZfZXZlbnRfZmRfcmNzICE9IC0xKSB7Cj4gKwkJY2xvc2Uo cGVyZl9ldmVudF9mZF9yY3MpOwo+ICsJCXBlcmZfZXZlbnRfZmRfcmNzID0gLTE7Cj4gKwl9Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHRlc3RfcGVyZl9kYXBjX3Jjc19vYSh2b2lkKQo+ICt7Cj4g Kwl1aW50NjRfdCByZXBvcnRfZm9ybWF0Owo+ICsJaW50IG1ldHJpY3NfaWQ7Cj4gKwlpbnQgc2l6 ZSwgcmVwb3J0X3NpemUsIGN1cnJlbnRfc2l6ZSA9IDA7Cj4gKwl1aW50OF90ICpkYXBjX2RhdGEs ICp0ZW1wX2J1ZmZlciwgKmN1cnJlbnRfaGRyOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYg KGFyY2ggPT0gQVJDSF9IU1cpIHsKPiArCQlyZXBvcnRfZm9ybWF0ID0gSTkxNV9PQV9GT1JNQVRf QTI5Owo+ICsJCXJlcG9ydF9zaXplID0gaHN3X29hX2Zvcm1hdHNbcmVwb3J0X2Zvcm1hdF0uc2l6 ZTsKPiArCX0gZWxzZSB7Cj4gKwkJcmVwb3J0X2Zvcm1hdCA9IEk5MTVfT0FfRk9STUFUX0ExMjsK PiArCQlyZXBvcnRfc2l6ZSA9IGdlbjhfcGx1c19vYV9mb3JtYXRzW3JlcG9ydF9mb3JtYXRdLnNp emU7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJlcG9ydF9zaXplIDwgMCkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJZGFwY19kYXRhID0gbWFsbG9jKFJFQURfT0FfQlVGX1NJWkVfTUFYKTsKPiArCXRlbXBfYnVm ZmVyID0gbWFsbG9jKFJFQURfT0FfQlVGX1NJWkVfTUFYKTsKPiArCj4gKwlyZXQgPSByZWFkX21l dHJpY3NfaWRfZnJvbV9zeXNmcygmbWV0cmljc19pZCk7Cj4gKwlpZiAoIXJldCkgewo+ICsJCXBy aW50ZigiUmVhZGluZyBtZXRyaWNzIGlkIGZyb20gc3lzZnMgZmFpbGVkXG4iKTsKPiArCQlyZXR1 cm47Cj4gKwl9Cj4gKwo+ICsJb3Blbl9pOTE1X3Jjc19vYV9zdHJlYW0ocmVwb3J0X2Zvcm1hdCwg bWV0cmljc19pZCk7Cj4gKwo+ICsJLyogQ29sbGVjdCBzYW1wbGVzICovCj4gKwlDT0xMRUNUX0RB VEE7Cj4gKwo+ICsJLyogUmVhZCBzYW1wbGVzICovCj4gKwlzaXplID0gcmVhZF9wZXJmX2RhcGNf c2FtcGxlcyh0ZW1wX2J1ZmZlciwgZGFwY19kYXRhLCBTQU1QTEVfT0EsCj4gKwkJCQkgICAgICBw ZXJmX2V2ZW50X2ZkX3Jjcyk7CgpXaGF0IGlmIHNpemUgPSAtMT8KVGhpcyBuZWVkcyB0byBiZSBj aGVja2VkLCBpbiB0aGUgb3RoZXIgdGVzdHMgdG9vLgoKPiArCj4gKwljdXJyZW50X2hkciA9IGRh cGNfZGF0YTsKPiArCj4gKwlwcmludGYoInNpemUgcmV0cmlldmVkID0gJWRcbiIsIHNpemUpOwo+ ICsJLyogVmVyaWZ5IHRoZSBzYW5pdHkgb2YgREFQQyBub2RlIGhlYWRlcnMgKi8KPiArCXdoaWxl IChjdXJyZW50X3NpemUgPCBzaXplKSB7Cj4gKwkJc3RydWN0IGRhcGNfb2Ffc2FtcGxlICpzYW1w bGUgPSAoc3RydWN0IGRhcGNfb2Ffc2FtcGxlICopCj4gKwkJCQkJKGN1cnJlbnRfaGRyICsgY3Vy cmVudF9zaXplKTsKPiArCj4gKwkJaWd0X2Fzc2VydChzYW1wbGUtPnBpZCAhPSAwKTsKCkknbSBu b3Qgc3VyZSB0aGF0J3MgZ29vZCBlbm91Z2guClRoZXJlIGlzIGEgbmVlZCB0byB2ZXJpZnkgdGhh dCB0aGUgcGlkIGFjdHVhbGx5IG1hdGNoZXMgc29tZXRoaW5nIHdlIAprbm93IGlzIGNvcnJlY3Qu CgpJIHdvdWxkIHN1Z2dlc3QgdG8gc3Bhd24gYSBjaGlsZCBwcm9jZXNzIHRoYXQgZW1pdHMgYSBy ZW5kZXJjb3B5IGFuZCAKdmVyaWZ5IGluIHRoZSBwYXJlbnQgcHJvY2VzcyB0aGF0IHdlIGdldCB0 aGUgbnVtYmVyIG9mIHdyaXR0ZW4gcGl4ZWxzIGluIAp0aGUgQTIxIGNvdW50ZXIgOgoKaHR0cHM6 Ly9naXRodWIuY29tL2RqZGVhdGgvaW50ZWwtZ3B1LXRvb2xzL2Jsb2Ivd2lwL2RqZGVhdGgvb2Et bmV4dC90ZXN0cy9wZXJmLmMjTDM1OTMKCkl0IHNob3VsZCB2ZXJpZnkgdGhhdCB0aGUgcmVwb3J0 cyBjb250YWluaW5nIHRoZSB3cml0dGVuIHBpeGVscyBhcmUgCnRhZ2dlZCB3aXRoIHRoZSBhcHBy b3ByaWF0ZSBQSUQuCgo+ICsJCXByaW50ZigicGlkID0gJWx1LCBjdHhfaWQgPSAlbHUsIE9BKGZp cnN0IDggYnl0ZXMpOjB4JWxseCwgIgo+ICsJCSAgICAgICAib2EgdHM9MHgleFxuIiwKPiArCQkJ c2FtcGxlLT5waWQsIHNhbXBsZS0+Y3R4X2lkLAo+ICsJCQkqKHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQgKilzYW1wbGUtPm9hX3JlcG9ydCwKPiArCQkJKih1aW50MzJfdCAqKShzYW1wbGUtPm9hX3Jl cG9ydCArIDQpKTsKPiArCj4gKwkJY3VycmVudF9zaXplICs9IHNhbXBsZS0+aGVhZGVyLnNpemU7 Cj4gKwl9Cj4gKwljbG9zZV9pOTE1X3BlcmZfc3RyZWFtKCk7Cj4gKwo+ICsJZnJlZShkYXBjX2Rh dGEpOwo+ICsJZnJlZSh0ZW1wX2J1ZmZlcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRlc3Rf cGVyZl9kYXBjX3Jjc190cyh2b2lkKQo+ICt7Cj4gKwo+ICsJdWludDY0X3QgcHJldl90cyA9IDAs IGluaXRfdHMgPSAwOwo+ICsJaW50IHNpemUsIGN1cnJlbnRfc2l6ZSA9IDA7Cj4gKwl1aW50OF90 ICpkYXBjX2RhdGEsICp0ZW1wX2J1ZmZlciwgKmN1cnJlbnRfaGRyOwo+ICsKPiArCWRhcGNfZGF0 YSA9IG1hbGxvYyhSRUFEX1RTX0JVRl9TSVpFX01BWCk7Cj4gKwl0ZW1wX2J1ZmZlciA9IG1hbGxv YyhSRUFEX1RTX0JVRl9TSVpFX01BWCk7Cj4gKwo+ICsJbWVtc2V0KGRhcGNfZGF0YSwgMCwgUkVB RF9UU19CVUZfU0laRV9NQVgpOwo+ICsJbWVtc2V0KHRlbXBfYnVmZmVyLCAwLCBSRUFEX1RTX0JV Rl9TSVpFX01BWCk7Cj4gKwo+ICsJb3Blbl9pOTE1X3Jjc190c19zdHJlYW0oKTsKPiArCj4gKwkv KiBDb2xsZWN0IHNhbXBsZXMgKi8KPiArCUNPTExFQ1RfREFUQTsKPiArCj4gKwkvKiBSZWFkIHNh bXBsZXMgKi8KPiArCXNpemUgPSByZWFkX3BlcmZfZGFwY19zYW1wbGVzKHRlbXBfYnVmZmVyLCBk YXBjX2RhdGEsIFNBTVBMRV9UUywKPiArCQkJCSAgICAgIHBlcmZfZXZlbnRfZmRfcmNzKTsKPiAr Cj4gKwljdXJyZW50X2hkciA9IGRhcGNfZGF0YTsKPiArCj4gKwlwcmludGYoInNpemUgY29sbGVj dGVkID0gJWRcbiIsIHNpemUpOwo+ICsKPiArCS8qIFZlcmlmeSB0aGUgc2FuaXR5IG9mIERBUEMg ZGF0YSAqLwo+ICsJd2hpbGUgKGN1cnJlbnRfc2l6ZSA8IHNpemUpIHsKPiArCQlzdHJ1Y3QgZGFw Y190c19zYW1wbGUgKnNhbXBsZSA9IChzdHJ1Y3QgZGFwY190c19zYW1wbGUgKikKPiArCQkJCQkJ KGN1cnJlbnRfaGRyICsgY3VycmVudF9zaXplKTsKPiArCQl1aW50NjRfdCB0cyA9IHNhbXBsZS0+ dGltZXN0YW1wOwo+ICsKPiArCQlpZ3RfYXNzZXJ0KHNhbXBsZS0+cGlkICE9IDApOwo+ICsJCXBy aW50ZigicGlkID0gJWx1LCBjdHhfaWQgPSAlbHUsIHRhZz0lbHUsIHRzPTB4JWxseFxuIiwKPiAr CQkJc2FtcGxlLT5waWQsIHNhbXBsZS0+Y3R4X2lkLCBzYW1wbGUtPnRhZywKPiArCQkJKHVuc2ln bmVkIGxvbmcgbG9uZyl0cyk7Cj4gKwo+ICsJCWlndF9hc3NlcnQodHMgPiBpbml0X3RzKTsKPiAr CQlpZ3RfYXNzZXJ0KHRzID4gcHJldl90cyk7Cj4gKwkJcHJldl90cyA9IHRzOwo+ICsKPiArCQlj dXJyZW50X3NpemUgKz0gc2FtcGxlLT5oZWFkZXIuc2l6ZTsKPiArCX0KPiArCj4gKwlwcmludGYo InRvdGFsIHNpemUgcmVhZCA9ICVkXG4iLCBjdXJyZW50X3NpemUpOwo+ICsJY2xvc2VfaTkxNV9w ZXJmX3N0cmVhbSgpOwo+ICsKPiArCWZyZWUoZGFwY19kYXRhKTsKPiArCWZyZWUodGVtcF9idWZm ZXIpOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIHZvaWQgdGVzdF9wZXJmX2RhcGNfcmNzX3RzX21t aW8odm9pZCkKPiArewo+ICsKPiArCXVpbnQ2NF90IHByZXZfdHMgPSAwLCBpbml0X3RzID0gMDsK PiArCWludCByLCBzaXplLCBjdXJyZW50X3NpemUgPSAwOwo+ICsJdWludDhfdCAqZGFwY19kYXRh LCAqdGVtcF9idWZmZXIsICpjdXJyZW50X2hkcjsKPiArCXN0cnVjdCBkcm1faTkxNV9wZXJmX21t aW9fbGlzdCBtbWlvOwo+ICsKPiArCWRhcGNfZGF0YSA9IG1hbGxvYyhSRUFEX1RTX01NSU9fQlVG X1NJWkVfTUFYKTsKPiArCXRlbXBfYnVmZmVyID0gbWFsbG9jKFJFQURfVFNfTU1JT19CVUZfU0la RV9NQVgpOwo+ICsKPiArCW1lbXNldCgmbW1pbywgMCwgc2l6ZW9mKG1taW8pKTsKPiArCj4gKyNk ZWZpbmUgR0VONl9HVF9HRlhfUkM2CQkJCTB4MTM4MTA4CgpZb3UgY2FuIHJlYWQgdGhlIHJjNiBy ZXNpZGVuY3kgaW5mbyBmcm9tIAovc3lzL2tlcm5lbC9kZWJ1Zy9kcmkvMC9pOTE1X2RycGNfaW5m by4KTWF5YmUgeW91IGNvdWxkIHJlYWQgaXQgb25jZSB0aGVyZSBiZWZvcmUgb3BlbmluZyB0aGUg c3RyZWFtLCB0aGVuIGNsb3NlIAp0aGUgc3RlYW0gYW5kIHJlYWQgaXQgb25jZSBtb3JlLgpUaGVu IHZlcmlmeSB0aGF0IGFsbCB0aGUgcmVwb3J0cyByZWFkIGhhdmUgd2l0aCB0aGUgYm91bmRzIG9m IHRoZSAyIHJlYWRzLgoKPiArI2RlZmluZSBHRU42X0dUX0dGWF9SQzZwCQkJMHgxMzgxMEMKPiAr CW1taW8ubW1pb19saXN0WzBdID0gR0VONl9HVF9HRlhfUkM2Owo+ICsJbW1pby5tbWlvX2xpc3Rb MV0gPSBHRU42X0dUX0dGWF9SQzZwOwo+ICsJbW1pby5udW1fbW1pbyA9IDI7Cj4gKwo+ICsJb3Bl bl9pOTE1X3Jjc190c19tbWlvX3N0cmVhbSgmbW1pbyk7Cj4gKwo+ICsJLyogQ29sbGVjdCBzYW1w bGVzICovCj4gKwlDT0xMRUNUX0RBVEE7Cj4gKwo+ICsJLyogUmVhZCBzYW1wbGVzICovCj4gKwlz aXplID0gcmVhZF9wZXJmX2RhcGNfc2FtcGxlcyh0ZW1wX2J1ZmZlciwgZGFwY19kYXRhLAo+ICsJ CQkJICAgICAgU0FNUExFX1RTfFNBTVBMRV9NTUlPLCBwZXJmX2V2ZW50X2ZkX3Jjcyk7Cj4gKwo+ ICsJY3VycmVudF9oZHIgPSBkYXBjX2RhdGE7Cj4gKwo+ICsJcHJpbnRmKCJzaXplIGNvbGxlY3Rl ZCA9ICVkXG4iLCBzaXplKTsKPiArCS8qIFZlcmlmeSB0aGUgc2FuaXR5IG9mIERBUEMgZGF0YSAq Lwo+ICsJd2hpbGUgKGN1cnJlbnRfc2l6ZSA8IHNpemUpIHsKPiArCQlzdHJ1Y3QgZGFwY190c19t bWlvX3NhbXBsZSAqc2FtcGxlID0KPiArCQkJCQkJKHN0cnVjdCBkYXBjX3RzX21taW9fc2FtcGxl ICopCj4gKwkJCQkJCShjdXJyZW50X2hkciArIGN1cnJlbnRfc2l6ZSk7Cj4gKwkJdWludDY0X3Qg dHMgPSBzYW1wbGUtPnRpbWVzdGFtcDsKPiArCj4gKwkJaWd0X2Fzc2VydChzYW1wbGUtPnBpZCAh PSAwKTsKPiArCQlwcmludGYoInBpZCA9ICVsdSwgY3R4X2lkID0gJWx1LCB0cz0weCVsbHhcbiIs Cj4gKwkJCXNhbXBsZS0+cGlkLCBzYW1wbGUtPmN0eF9pZCwKPiArCQkJKHVuc2lnbmVkIGxvbmcg bG9uZyl0cyk7Cj4gKwo+ICsJCWlndF9hc3NlcnQodHMgPiBpbml0X3RzKTsKPiArCQlpZ3RfYXNz ZXJ0KHRzID4gcHJldl90cyk7Cj4gKwkJcHJldl90cyA9IHRzOwo+ICsKPiArCQlmb3IgKHIgPSAw OyByIDwgbW1pby5udW1fbW1pbzsgcisrKSB7Cj4gKwkJCXByaW50ZigibW1pbyAweCUwOFggPSAw eCUwOFhcbiIsCj4gKwkJCW1taW8ubW1pb19saXN0W3JdLAo+ICsJCQlzYW1wbGUtPm1taW9bcl0p Owo+ICsJCX0KPiArCj4gKwkJY3VycmVudF9zaXplICs9IHNhbXBsZS0+aGVhZGVyLnNpemU7Cj4g Kwl9Cj4gKwo+ICsJcHJpbnRmKCJ0b3RhbCBzaXplIHJlYWQgPSAlZFxuIiwgY3VycmVudF9zaXpl KTsKPiArCWNsb3NlX2k5MTVfcGVyZl9zdHJlYW0oKTsKPiArCj4gKwlmcmVlKGRhcGNfZGF0YSk7 Cj4gKwlmcmVlKHRlbXBfYnVmZmVyKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGVzdF9wZXJm X2RhcGNfcmNzX29hX3RzX21taW8odm9pZCkKPiArewo+ICsKPiArCXVpbnQ2NF90IHJlcG9ydF9m b3JtYXQ7Cj4gKwl1aW50NjRfdCBwcmV2X3RzID0gMCwgaW5pdF90cyA9IDA7Cj4gKwlpbnQgciwg cmVwb3J0X3NpemUsIHNpemUsIG1ldHJpY3NfaWQsIGN1cnJlbnRfc2l6ZSA9IDA7Cj4gKwl1aW50 OF90ICpkYXBjX2RhdGEsICp0ZW1wX2J1ZmZlciwgKmN1cnJlbnRfaGRyOwo+ICsJc3RydWN0IGRy bV9pOTE1X3BlcmZfbW1pb19saXN0IG1taW87Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAo YXJjaCA9PSBBUkNIX0hTVykgewo+ICsJCXJlcG9ydF9mb3JtYXQgPSBJOTE1X09BX0ZPUk1BVF9B Mjk7Cj4gKwkJcmVwb3J0X3NpemUgPSBoc3dfb2FfZm9ybWF0c1tyZXBvcnRfZm9ybWF0XS5zaXpl Owo+ICsJfSBlbHNlIHsKPiArCQlyZXBvcnRfZm9ybWF0ID0gSTkxNV9PQV9GT1JNQVRfQTEyOwo+ ICsJCXJlcG9ydF9zaXplID0gZ2VuOF9wbHVzX29hX2Zvcm1hdHNbcmVwb3J0X2Zvcm1hdF0uc2l6 ZTsKPiArCX0KPiArCj4gKwlpZiAocmVwb3J0X3NpemUgPCAwKQo+ICsJCXJldHVybjsKPiArCj4g KwlkYXBjX2RhdGEgPSBtYWxsb2MoUkVBRF9PQV9UU19NTUlPX0JVRl9TSVpFX01BWCk7Cj4gKwl0 ZW1wX2J1ZmZlciA9IG1hbGxvYyhSRUFEX09BX1RTX01NSU9fQlVGX1NJWkVfTUFYKTsKPiArCj4g KwltZW1zZXQoJm1taW8sIDAsIHNpemVvZihtbWlvKSk7Cj4gKwo+ICsjZGVmaW5lIEdFTjZfR1Rf R0ZYX1JDNgkJCQkweDEzODEwOAo+ICsjZGVmaW5lIEdFTjZfR1RfR0ZYX1JDNnAJCQkweDEzODEw Qwo+ICsJbW1pby5tbWlvX2xpc3RbMF0gPSBHRU42X0dUX0dGWF9SQzY7Cj4gKwltbWlvLm1taW9f bGlzdFsxXSA9IEdFTjZfR1RfR0ZYX1JDNnA7Cj4gKwltbWlvLm51bV9tbWlvID0gMjsKPiArCj4g KwlyZXQgPSByZWFkX21ldHJpY3NfaWRfZnJvbV9zeXNmcygmbWV0cmljc19pZCk7Cj4gKwlpZiAo IXJldCkgewo+ICsJCXByaW50ZigiUmVhZGluZyBtZXRyaWNzIGlkIGZyb20gc3lzZnMgZmFpbGVk XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJb3Blbl9pOTE1X3Jjc19vYV90c19tbWlv X3N0cmVhbShyZXBvcnRfZm9ybWF0LCBtZXRyaWNzX2lkLCAmbW1pbyk7Cj4gKwo+ICsJLyogQ29s bGVjdCBzYW1wbGVzICovCj4gKwlDT0xMRUNUX0RBVEE7Cj4gKwo+ICsJLyogUmVhZCBzYW1wbGVz ICovCj4gKwlzaXplID0gcmVhZF9wZXJmX2RhcGNfc2FtcGxlcyh0ZW1wX2J1ZmZlciwgZGFwY19k YXRhLAo+ICsJCQkJICAgICAgU0FNUExFX09BfFNBTVBMRV9UU3xTQU1QTEVfTU1JTywKPiArCQkJ CSAgICAgIHBlcmZfZXZlbnRfZmRfcmNzKTsKPiArCj4gKwljdXJyZW50X2hkciA9IGRhcGNfZGF0 YTsKPiArCj4gKwlwcmludGYoInNpemUgY29sbGVjdGVkID0gJWRcbiIsIHNpemUpOwo+ICsJLyog VmVyaWZ5IHRoZSBzYW5pdHkgb2YgREFQQyBkYXRhICovCj4gKwl3aGlsZSAoY3VycmVudF9zaXpl IDwgc2l6ZSkgewo+ICsJCXN0cnVjdCBkYXBjX29hX3RzX21taW9fc2FtcGxlICpzYW1wbGUgPQo+ ICsJCQkJKHN0cnVjdCBkYXBjX29hX3RzX21taW9fc2FtcGxlICopCj4gKwkJCQkJCShjdXJyZW50 X2hkciArIGN1cnJlbnRfc2l6ZSk7Cj4gKwkJdWludDY0X3QgdHMgPSBzYW1wbGUtPnRpbWVzdGFt cDsKPiArCj4gKwkJaWd0X2Fzc2VydChzYW1wbGUtPnBpZCAhPSAwKTsKPiArCQlwcmludGYoInBp ZCA9ICVsdSwgY3R4X2lkID0gJWx1LCB0cz0weCVsbHhcbiIsCj4gKwkJCXNhbXBsZS0+cGlkLCBz YW1wbGUtPmN0eF9pZCwKPiArCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0cyk7Cj4gKwo+ICsJCWln dF9hc3NlcnQodHMgPiBpbml0X3RzKTsKPiArCQlpZ3RfYXNzZXJ0KHRzID4gcHJldl90cyk7Cj4g KwkJcHJldl90cyA9IHRzOwo+ICsKPiArCQlmb3IgKHIgPSAwOyByIDwgbW1pby5udW1fbW1pbzsg cisrKSB7Cj4gKwkJCXByaW50ZigibW1pbyAweCUwOFggPSAweCUwOFhcbiIsCj4gKwkJCW1taW8u bW1pb19saXN0W3JdLCBzYW1wbGUtPm1taW9bcl0pOwo+ICsJCX0KPiArCj4gKwkJY3VycmVudF9z aXplICs9IHNhbXBsZS0+aGVhZGVyLnNpemU7Cj4gKwkJcHJpbnRmKCJjdXJyZW50IHNpemUgPSAl ZFxuIiwgY3VycmVudF9zaXplKTsKPiArCX0KPiArCj4gKwlwcmludGYoInRvdGFsIHNpemUgcmVh ZCA9ICVkXG4iLCBjdXJyZW50X3NpemUpOwo+ICsJY2xvc2VfaTkxNV9wZXJmX3N0cmVhbSgpOwo+ ICsKPiArCWZyZWUoZGFwY19kYXRhKTsKPiArCWZyZWUodGVtcF9idWZmZXIpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCB0ZXN0X3BlcmZfZGFwY19wZXJpb2RpY19vYSh2b2lkKQo+ICt7Cj4gKwl1 aW50NjRfdCByZXBvcnRfZm9ybWF0Owo+ICsJaW50IHNpemUsIHJlcG9ydF9zaXplLCBtZXRyaWNz X2lkOwo+ICsJdWludDhfdCAqZGFwY19kYXRhLCAqdGVtcF9idWZmZXI7Cj4gKwlpbnQgcmV0ID0g MDsKPiArCj4gKwlpZiAoYXJjaCA9PSBBUkNIX0hTVykgewo+ICsJCXJlcG9ydF9mb3JtYXQgPSBJ OTE1X09BX0ZPUk1BVF9BMjk7Cj4gKwkJcmVwb3J0X3NpemUgPSBoc3dfb2FfZm9ybWF0c1tyZXBv cnRfZm9ybWF0XS5zaXplOwo+ICsJfSBlbHNlIHsKPiArCQlyZXBvcnRfZm9ybWF0ID0gSTkxNV9P QV9GT1JNQVRfQTEyOwo+ICsJCXJlcG9ydF9zaXplID0gZ2VuOF9wbHVzX29hX2Zvcm1hdHNbcmVw b3J0X2Zvcm1hdF0uc2l6ZTsKPiArCX0KPiArCj4gKwlpZiAocmVwb3J0X3NpemUgPCAwKQo+ICsJ CXJldHVybjsKPiArCj4gKwlkYXBjX2RhdGEgPSBtYWxsb2MoUkVBRF9PQV9CVUZfU0laRV9NQVgp Owo+ICsJdGVtcF9idWZmZXIgPSBtYWxsb2MoUkVBRF9PQV9CVUZfU0laRV9NQVgpOwo+ICsKPiAr CXJldCA9IHJlYWRfbWV0cmljc19pZF9mcm9tX3N5c2ZzKCZtZXRyaWNzX2lkKTsKPiArCWlmICgh cmV0KSB7Cj4gKwkJcHJpbnRmKCJSZWFkaW5nIG1ldHJpY3MgaWQgZnJvbSBzeXNmcyBmYWlsZWRc biIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlvcGVuX2k5MTVfcGVyaW9kaWNfb2Ffc3Ry ZWFtKHJlcG9ydF9mb3JtYXQsIG1ldHJpY3NfaWQpOwo+ICsKPiArCS8qIENvbGxlY3Qgc2FtcGxl cyAqLwo+ICsJQ09MTEVDVF9EQVRBOwo+ICsKPiArCS8qIFJlYWQgc2FtcGxlcyAqLwo+ICsJc2l6 ZSA9IHJlYWRfcGVyZl9kYXBjX3NhbXBsZXModGVtcF9idWZmZXIsIGRhcGNfZGF0YSwgU0FNUExF X09BLAo+ICsJCQkJICAgICAgcGVyZl9ldmVudF9mZF9yY3MpOwoKV2hhdCBhcmUgeW91IHRlc3Rp bmcgaGVyZT8KCj4gKwo+ICsJY2xvc2VfaTkxNV9wZXJmX3N0cmVhbSgpOwo+ICsKPiArCWZyZWUo ZGFwY19kYXRhKTsKPiArCWZyZWUodGVtcF9idWZmZXIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9v bAo+ICtpbml0aWFsaXplKHZvaWQpCj4gK3sKPiArCj4gKwlpZiAoaW50ZWxfZGV2LmRldmljZSkK PiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlkcm1fZmQgPSBvcGVuX3JlbmRlcl9ub2RlKCZpbnRl bF9kZXYpOwo+ICsJaWYgKGRybV9mZCA8IDApIHsKPiArCQlwcmludGYoIkZhaWxlZCB0byBvcGVu IHJlbmRlciBub2RlXG4iKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJZHJtX2Nh cmQgPSBnZXRfY2FyZF9mb3JfZmQoZHJtX2ZkKTsKPiArCWlmIChkcm1fY2FyZCA8IDApIHsKPiAr CQlwcmludGYoIkZhaWxlZCB0byBnZXQgZHJtIGNhcmQgaW5mb1xuIik7Cj4gKwkJcmV0dXJuIGZh bHNlOwo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCj4gK3sKPiArCWJvb2wgcmV0Owo+ICsJaW50IG9wdGlvbjsKPiAr CWludCBwbGF0Zm9ybTsKPiArCj4gKwlpZiAoYXJnYyAhPSAzKSB7Cj4gKwkJcHJpbnRmKCJVc2Fn ZTogXG4uL2RhcGMgPFBsYXRmb3JtPiA8VGVzdF9tb2RlPlwKPiArCQlcblBsYXRmb3JtOiAwLUhT VywgMS1CRFcsIDItU0tMXG5cCj4gKwkJXG5UZXN0X21vZGU6XG5cCj4gKwkJXHQwIC0gUkNTIE9B IG1vZGVcblwKPiArCQlcdDEgLSBSQ1MgVFMgbW9kZVxuXAo+ICsJCVx0MiAtIFJDUyBUUytNTUlP IG1vZGVcblwKPiArCQlcdDMgLSBSQ1MgT0ErVFMrTU1JTyBtb2RlXG5cCj4gKwkJXHQ0IC0gUGVy aW9kaWMgT0EgbW9kZVxuIik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gaW5p dGlhbGl6ZSgpOwo+ICsJaWYgKCFyZXQpCj4gKwkJcmV0dXJuIC0xOwo+ICsKPiArCXBsYXRmb3Jt ID0gYXRvaShhcmd2WzFdKTsKPiArCXN3aXRjaCAocGxhdGZvcm0pIHsKPiArCWNhc2UgMDoKPiAr CQlhcmNoID0gQVJDSF9IU1c7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDE6Cj4gKwkJYXJjaCA9IEFS Q0hfQkRXOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSAyOgo+ICsJCWFyY2ggPSBBUkNIX1NLTDsKPiAr CQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHBsYXRm b3JtOiVkXG4iLCBwbGF0Zm9ybSk7Cj4gKwkJcmV0dXJuIC0xOwo+ICsJfQo+ICsKPiArCW9wdGlv biA9IGF0b2koYXJndlsyXSk7Cj4gKwlzd2l0Y2ggKG9wdGlvbikgewo+ICsJY2FzZSAwOgo+ICsJ CXRlc3RfcGVyZl9kYXBjX3Jjc19vYSgpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSAxOgo+ICsJCXRl c3RfcGVyZl9kYXBjX3Jjc190cygpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSAyOgo+ICsJCXRlc3Rf cGVyZl9kYXBjX3Jjc190c19tbWlvKCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDM6Cj4gKwkJdGVz dF9wZXJmX2RhcGNfcmNzX29hX3RzX21taW8oKTsKPiArCQlicmVhazsKPiArCWNhc2UgNDoKPiAr CQl0ZXN0X3BlcmZfZGFwY19wZXJpb2RpY19vYSgpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoK PiArCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgT3B0aW9uOiVkXG4iLCBvcHRpb24pOwo+ICsJ CXJldHVybiAtMTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=