From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 11 Oct 2018 18:23:11 +0200 From: Daniel Vetter Message-ID: <20181011162311.GK31561@phenom.ffwll.local> References: <20181011001657.1715-1-drawat@vmware.com> <20181011001657.1715-4-drawat@vmware.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20181011001657.1715-4-drawat@vmware.com> Subject: Re: [Intel-gfx] [PATCH v3 04/18] drm/selftest: Add drm damage helper selftest List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Deepak Rawat Cc: thellstrom@vmware.com, syeh@vmware.com, Daniel Vetter , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, igt-dev@lists.freedesktop.org, Pekka Paalanen , linux-graphics-maintainer@vmware.com List-ID: T24gV2VkLCBPY3QgMTAsIDIwMTggYXQgMDU6MTY6NDNQTSAtMDcwMCwgRGVlcGFrIFJhd2F0IHdy b3RlOgo+IFNlbGZ0ZXN0IGZvciBkcm0gZGFtYWdlIGhlbHBlciBpdGVyYXRvciBmdW5jdGlvbnMu Cj4gCj4gQ2M6IHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tCj4gQ2M6IERhbmllbCBWZXR0 ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gQ2M6IFBla2thIFBhYWxhbmVuIDxwcGFhbGFu ZW5AZ21haWwuY29tPgo+IENjOiBEYW5pZWwgU3RvbmUgPGRhbmllbEBmb29pc2hiYXIub3JnPgo+ IENjOiBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gQ2M6IGlndC1kZXZAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCj4gQ2M6IHBldHJpLmxhdHZhbGFAaW50ZWwuY29tCj4gQ2M6IGNocmlz QGNocmlzLXdpbHNvbi5jby51awo+IFNpZ25lZC1vZmYtYnk6IERlZXBhayBSYXdhdCA8ZHJhd2F0 QHZtd2FyZS5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvTWFrZWZpbGUg ICAgICAgICAgICB8ICAgMyArLQo+ICAuLi4vc2VsZnRlc3RzL2RybV9kYW1hZ2VfaGVscGVyX3Nl bGZ0ZXN0cy5oICAgfCAgMjIgKwo+ICAuLi4vZHJtL3NlbGZ0ZXN0cy90ZXN0LWRybV9kYW1hZ2Vf aGVscGVyLmMgICAgfCA4NDQgKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwg ODY4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvZHJtX2RhbWFnZV9oZWxwZXJfc2VsZnRlc3RzLmgKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvdGVzdC1kcm1fZGFt YWdlX2hlbHBlci5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMv TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL01ha2VmaWxlCj4gaW5kZXggOWZj MzQ5ZmExOGU5Li44OGFjMjE2ZjU5NjIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Nl bGZ0ZXN0cy9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvTWFrZWZp bGUKPiBAQCAtMSArMSwyIEBACj4gLW9iai0kKENPTkZJR19EUk1fREVCVUdfU0VMRlRFU1QpICs9 IHRlc3QtZHJtX21tLm8gdGVzdC1kcm0taGVscGVyLm8KPiArb2JqLSQoQ09ORklHX0RSTV9ERUJV R19TRUxGVEVTVCkgKz0gdGVzdC1kcm1fbW0ubyB0ZXN0LWRybS1oZWxwZXIubyBcCj4gKwkJCQkg ICAgdGVzdC1kcm1fZGFtYWdlX2hlbHBlci5vCgpXaXRoIHRoZSB0ZXN0Y2FzZSBpbnRhZ3JhdGVk IGludG8gdGhlIHRlc3QtZHJtLWhlbHBlci5rbyBtb2R1bGUsIGZvcgpwYXRjaGVzIDEtNCBpbiB0 aGlzIHNlcmllczoKClJldmlld2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZm d2xsLmNoPgoKT2J2aW91c2x5IG5lZWRzIHNvbWUgYWRqdXN0aW5nIG9uIHRoZSBpZ3Qgc2lkZSB0 b28sIHNpbmNlIHdlIHNlZW0gdG8gYmUKbWlzc2luZyB0aGUgaWd0IHNjYWZmb2xkaW5nIGZvciB0 ZXN0cy1kcm0taGVscGVyLmtvLgotRGFuaWVsCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vc2VsZnRlc3RzL2RybV9kYW1hZ2VfaGVscGVyX3NlbGZ0ZXN0cy5oIGIvZHJpdmVycy9ncHUv ZHJtL3NlbGZ0ZXN0cy9kcm1fZGFtYWdlX2hlbHBlcl9zZWxmdGVzdHMuaAo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zYTFjYmUwNWJlZjAKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9kcm1fZGFtYWdlX2hlbHBlcl9z ZWxmdGVzdHMuaAo+IEBAIC0wLDAgKzEsMjIgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAgKi8KPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfbm9fZGFtYWdlLCBpZ3RfZGFt YWdlX2l0ZXJfbm9fZGFtYWdlKQo+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9ub19kYW1hZ2VfZnJh Y3Rpb25hbF9zcmMsIGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2VfZnJhY3Rpb25hbF9zcmMpCj4g K3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX25vX2RhbWFnZV9zcmNfbW92ZWQsIGlndF9kYW1hZ2VfaXRl cl9ub19kYW1hZ2Vfc3JjX21vdmVkKQo+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9ub19kYW1hZ2Vf ZnJhY3Rpb25hbF9zcmNfbW92ZWQsIGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2VfZnJhY3Rpb25h bF9zcmNfbW92ZWQpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX25vX2RhbWFnZV9ub3RfdmlzaWJs ZSwgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9ub3RfdmlzaWJsZSkKPiArc2VsZnRlc3QoZGFt YWdlX2l0ZXJfbm9fZGFtYWdlX25vX2NydGMsIGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Vfbm9f Y3J0YykKPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX25vX2ZiLCBpZ3RfZGFtYWdl X2l0ZXJfbm9fZGFtYWdlX25vX2ZiKQo+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW1wbGVfZGFt YWdlLCBpZ3RfZGFtYWdlX2l0ZXJfc2ltcGxlX2RhbWFnZSkKPiArc2VsZnRlc3QoZGFtYWdlX2l0 ZXJfc2luZ2xlX2RhbWFnZSwgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2UpCj4gK3NlbGZ0 ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0X3NyYywgaWd0X2RhbWFnZV9p dGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0X3NyYykKPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJf c2luZ2xlX2RhbWFnZV9vdXRzaWRlX3NyYywgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2Vf b3V0c2lkZV9zcmMpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfZnJhY3Rp b25hbF9zcmMsIGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ZyYWN0aW9uYWxfc3JjKQo+ ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ludGVyc2VjdF9mcmFjdGlvbmFs X3NyYywgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0X2ZyYWN0aW9uYWxf c3JjKQo+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNpZGVfZnJhY3Rp b25hbF9zcmMsIGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNpZGVfZnJhY3Rpb25h bF9zcmMpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2Vfc3JjX21vdmVkLCBp Z3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9zcmNfbW92ZWQpCj4gK3NlbGZ0ZXN0KGRhbWFn ZV9pdGVyX3NpbmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92ZWQsIGlndF9kYW1hZ2VfaXRl cl9zaW5nbGVfZGFtYWdlX2ZyYWN0aW9uYWxfc3JjX21vdmVkKQo+ICtzZWxmdGVzdChkYW1hZ2Vf aXRlcl9kYW1hZ2UsIGlndF9kYW1hZ2VfaXRlcl9kYW1hZ2UpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9p dGVyX2RhbWFnZV9vbmVfaW50ZXJzZWN0LCBpZ3RfZGFtYWdlX2l0ZXJfZGFtYWdlX29uZV9pbnRl cnNlY3QpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX2RhbWFnZV9vbmVfb3V0c2lkZSwgaWd0X2Rh bWFnZV9pdGVyX2RhbWFnZV9vbmVfb3V0c2lkZSkKPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfZGFt YWdlX3NyY19tb3ZlZCwgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9zcmNfbW92ZWQpCj4gK3NlbGZ0 ZXN0KGRhbWFnZV9pdGVyX2RhbWFnZV9ub3RfdmlzaWJsZSwgaWd0X2RhbWFnZV9pdGVyX2RhbWFn ZV9ub3RfdmlzaWJsZSkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy90 ZXN0LWRybV9kYW1hZ2VfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3Qt ZHJtX2RhbWFnZV9oZWxwZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MDAwMDAwLi4xNzc1NDczNGM0N2EKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3NlbGZ0ZXN0cy90ZXN0LWRybV9kYW1hZ2VfaGVscGVyLmMKPiBAQCAtMCwwICsxLDg0NCBA QAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ICsvKgo+ICsgKiBU ZXN0IGNhc2UgZm9yIGRybV9kYW1hZ2VfaGVscGVyIGZ1bmN0aW9ucwo+ICsgKi8KPiArCj4gKyNk ZWZpbmUgcHJfZm10KGZtdCkgImRybV9kYW1hZ2VfaGVscGVyOiAiIGZtdAo+ICsKPiArI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kYW1hZ2VfaGVscGVyLmg+ Cj4gKwo+ICsjZGVmaW5lIFRFU1RTICJkcm1fZGFtYWdlX2hlbHBlcl9zZWxmdGVzdHMuaCIKPiAr I2luY2x1ZGUgImRybV9zZWxmdGVzdC5oIgo+ICsKPiArI2RlZmluZSBGQUlMKHRlc3QsIG1zZywg Li4uKSBcCj4gKwlkbyB7IFwKPiArCQlpZiAodGVzdCkgeyBcCj4gKwkJCXByX2VycigiJXMvJXU6 ICIgbXNnLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKTsgXAo+ICsJCQly ZXR1cm4gLUVJTlZBTDsgXAo+ICsJCX0gXAo+ICsJfSB3aGlsZSAoMCkKPiArCj4gKyNkZWZpbmUg RkFJTF9PTih4KSBGQUlMKCh4KSwgIiVzIiwgIkZBSUxfT04oIiBfX3N0cmluZ2lmeSh4KSAiKVxu IikKPiArCj4gK3N0YXRpYyB2b2lkIHNldF9wbGFuZV9zcmMoc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqc3RhdGUsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsCj4gKwkJCSAgaW50IHkyKQo+ICt7Cj4g KwlzdGF0ZS0+c3JjLngxID0geDE7Cj4gKwlzdGF0ZS0+c3JjLnkxID0geTE7Cj4gKwlzdGF0ZS0+ c3JjLngyID0geDI7Cj4gKwlzdGF0ZS0+c3JjLnkyID0geTI7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHNldF9kYW1hZ2VfY2xpcChzdHJ1Y3QgZHJtX21vZGVfcmVjdCAqciwgaW50IHgxLCBpbnQg eTEsIGludCB4MiwKPiArCQkJICAgIGludCB5MikKPiArewo+ICsJci0+eDEgPSB4MTsKPiArCXIt PnkxID0geTE7Cj4gKwlyLT54MiA9IHgyOwo+ICsJci0+eTIgPSB5MjsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgc2V0X2RhbWFnZV9ibG9iKHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqZGFtYWdl X2Jsb2IsCj4gKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfcmVjdCAqciwgdWludDMyX3Qgc2l6ZSkK PiArewo+ICsJZGFtYWdlX2Jsb2ItPmxlbmd0aCA9IHNpemU7Cj4gKwlkYW1hZ2VfYmxvYi0+ZGF0 YSA9IHI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNldF9wbGFuZV9kYW1hZ2Uoc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUsCj4gKwkJCSAgICAgc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9i ICpkYW1hZ2VfYmxvYikKPiArewo+ICsJc3RhdGUtPmZiX2RhbWFnZV9jbGlwcyA9IGRhbWFnZV9i bG9iOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBjaGVja19kYW1hZ2VfY2xpcChzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpzdGF0ZSwgc3RydWN0IGRybV9yZWN0ICpyLAo+ICsJCQkgICAgICBpbnQg eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCj4gK3sKPiArCS8qCj4gKwkgKiBSb3VuZCBkb3du IHgxL3kxIGFuZCByb3VuZCB1cCB4Mi95Mi4gVGhpcyBpcyBiZWNhdXNlIGRhbWFnZSBpcyBub3Qg aW4KPiArCSAqIDE2LjE2IGZpeGVkIHBvaW50IHNvIHRvIGNhdGNoIGFsbCBwaXhlbHMuCj4gKwkg Ki8KPiArCWludCBzcmNfeDEgPSBzdGF0ZS0+c3JjLngxID4+IDE2Owo+ICsJaW50IHNyY195MSA9 IHN0YXRlLT5zcmMueTEgPj4gMTY7Cj4gKwlpbnQgc3JjX3gyID0gKHN0YXRlLT5zcmMueDIgPj4g MTYpICsgISEoc3RhdGUtPnNyYy54MiAmIDB4RkZGRik7Cj4gKwlpbnQgc3JjX3kyID0gKHN0YXRl LT5zcmMueTIgPj4gMTYpICsgISEoc3RhdGUtPnNyYy55MiAmIDB4RkZGRik7Cj4gKwo+ICsJaWYg KHgxID49IHgyIHx8IHkxID49IHkyKSB7Cj4gKwkJcHJfZXJyKCJDYW5ub3QgaGF2ZSBkYW1hZ2Ug Y2xpcCB3aXRoIG5vIGRpbWVudGlvbi5cbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiAr Cj4gKwlpZiAoeDEgPCBzcmNfeDEgfHwgeTEgPCBzcmNfeTEgfHwgeDIgPiBzcmNfeDIgfHwgeTIg PiBzcmNfeTIpIHsKPiArCQlwcl9lcnIoIkRhbWFnZSBjYW5ub3QgYmUgb3V0c2lkZSByb3VuZGVk IHBsYW5lIHNyYy5cbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlpZiAoci0+ eDEgIT0geDEgfHwgci0+eTEgIT0geTEgfHwgci0+eDIgIT0geDIgfHwgci0+eTIgIT0geTIpIHsK PiArCQlwcl9lcnIoIkRhbWFnZSA9ICVkICVkICVkICVkXG4iLCByLT54MSwgci0+eTEsIHItPngy LCByLT55Mik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Uodm9pZCAqaWdu b3JlZCkKPiArewo+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7 Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKPiArCXN0cnVjdCBkcm1fcmVj dCBjbGlwOwo+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ICsKPiArCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgZmIgPSB7Cj4gKwkJLndpZHRoID0gMjA0OCwKPiArCQkuaGVpZ2h0ID0gMjA0OAo+ ICsJfTsKPiArCj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0gewo+ICsJCS5jcnRj ID0gWkVST19TSVpFX1BUUiwKPiArCQkuZmIgPSAmZmIsCj4gKwkJLnZpc2libGUgPSB0cnVlLAo+ ICsJfTsKPiArCj4gKwkvKiBQbGFuZSBzcmMgc2FtZSBhcyBmYiBzaXplLiAqLwo+ICsJc2V0X3Bs YW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCBmYi53aWR0aCA8PCAxNiwgZmIuaGVpZ2h0IDw8IDE2 KTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCBmYi53aWR0aCA8PCAxNiwgZmIuaGVp Z2h0IDw8IDE2KTsKPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIs ICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFn ZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hpdHMrKzsKPiArCj4gKwlGQUlMKG51bV9oaXRzICE9 IDEsICJTaG91bGQgcmV0dXJuIHBsYW5lIHNyYyBhcyBkYW1hZ2UuIik7Cj4gKwlGQUlMX09OKCFj aGVja19kYW1hZ2VfY2xpcCgmc3RhdGUsICZjbGlwLCAwLCAwLCAyMDQ4LCAyMDQ4KSk7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2Rh bWFnZV9mcmFjdGlvbmFsX3NyYyh2b2lkICppZ25vcmVkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F0 b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg b2xkX3N0YXRlOwo+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gKwl1aW50MzJfdCBudW1faGl0 cyA9IDA7Cj4gKwo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiArCQkud2lkdGgg PSAyMDQ4LAo+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gKwl9Owo+ICsKPiArCXN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgc3RhdGUgPSB7Cj4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ICsJCS5mYiA9 ICZmYiwKPiArCQkudmlzaWJsZSA9IHRydWUsCj4gKwl9Owo+ICsKPiArCS8qIFBsYW5lIHNyYyBo YXMgZnJhY3Rpb25hbCBwYXJ0LiAqLwo+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAweDNm ZmZlLCAweDNmZmZlLAo+ICsJCSAgICAgIDB4M2ZmZmUgKyAoMTAyNCA8PCAxNiksIDB4M2ZmZmUg KyAoNzY4IDw8IDE2KSk7Cj4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHgzZmZmZSwgMHgzZmZm ZSwKPiArCQkgICAgICAweDNmZmZlICsgKDEwMjQgPDwgMTYpLCAweDNmZmZlICsgKDc2OCA8PCAx NikpOwo+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9z dGF0ZSwgJnN0YXRlKTsKPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVy LCAmY2xpcCkKPiArCQludW1faGl0cysrOwo+ICsKPiArCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNo b3VsZCByZXR1cm4gcm91bmRlZCBvZmYgcGxhbmUgc3JjIGFzIGRhbWFnZS4iKTsKPiArCUZBSUxf T04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDMsIDMsIDEwMjgsIDc3MikpOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9u b19kYW1hZ2Vfc3JjX21vdmVkKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBkcm1fYXRv bWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBv bGRfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKPiArCXVpbnQzMl90IG51bV9oaXRz ID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ICsJCS53aWR0aCA9 IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiArCX07Cj4gKwo+ICsJc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4gKwkJLmZiID0g JmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiArCX07Cj4gKwo+ICsJLyogUGxhbmUgc3JjIG1v dmVkIHNpbmNlIG9sZCBwbGFuZSBzdGF0ZS4gKi8KPiArCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0 ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRl LCAxMCA8PCAxNiwgMTAgPDwgMTYsCj4gKwkJICAgICAgKDEwICsgMTAyNCkgPDwgMTYsICgxMCAr IDc2OCkgPDwgMTYpOwo+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRl ciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFt YWdlKCZpdGVyLCAmY2xpcCkKPiArCQludW1faGl0cysrOwo+ICsKPiArCUZBSUwobnVtX2hpdHMg IT0gMSwgIlNob3VsZCByZXR1cm4gcGxhbmUgc3JjIGFzIGRhbWFnZS4iKTsKPiArCUZBSUxfT04o IWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDEwLCAxMCwgMTAzNCwgNzc4KSk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25v X2RhbWFnZV9mcmFjdGlvbmFsX3NyY19tb3ZlZCh2b2lkICppZ25vcmVkKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiArCXN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgb2xkX3N0YXRlOwo+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gKwl1aW50MzJf dCBudW1faGl0cyA9IDA7Cj4gKwo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiAr CQkud2lkdGggPSAyMDQ4LAo+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gKwl9Owo+ICsKPiArCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ ICsJCS5mYiA9ICZmYiwKPiArCQkudmlzaWJsZSA9IHRydWUsCj4gKwl9Owo+ICsKPiArCS8qIFBs YW5lIHNyYyBoYXMgZnJhY3Rpb25hbCBwYXJ0IGFuZCBpdCBtb3ZlZCBzaW5jZSBvbGQgcGxhbmUg c3RhdGUuICovCj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4M2ZmZmUsIDB4M2ZmZmUs Cj4gKwkJICAgICAgMHgzZmZmZSArICgxMDI0IDw8IDE2KSwgMHgzZmZmZSArICg3NjggPDwgMTYp KTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDQwMDAyLCAweDQwMDAyLAo+ICsJCSAgICAg IDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7Cj4gKwlkcm1f YXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUp Owo+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ICsJ CW51bV9oaXRzKys7Cj4gKwo+ICsJRkFJTChudW1faGl0cyAhPSAxLCAiU2hvdWxkIHJldHVybiBw bGFuZSBzcmMgYXMgZGFtYWdlLiIpOwo+ICsJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0 YXRlLCAmY2xpcCwgNCwgNCwgMTAyOSwgNzczKSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9ub3RfdmlzaWJsZSh2b2lk ICppZ25vcmVkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIg aXRlcjsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ICsJc3RydWN0IGRy bV9yZWN0IGNsaXA7Cj4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gKwo+ICsJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiArCQkud2lkdGggPSAyMDQ4LAo+ICsJCS5oZWlnaHQgPSAy MDQ4Cj4gKwl9Owo+ICsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gKwkJ LmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ICsJCS5mYiA9ICZmYiwKPiArCQkudmlzaWJsZSA9IGZh bHNlLAo+ICsJfTsKPiArCj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQg PDwgMTYsIDc2OCA8PCAxNik7Cj4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMCwgMCwgMTAyNCA8 PCAxNiwgNzY4IDw8IDE2KTsKPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQo Jml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5l X2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hpdHMrKzsKPiArCj4gKwlGQUlMKG51bV9o aXRzICE9IDAsICJTaG91bGQgaGF2ZSBubyBkYW1hZ2UuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9ub19jcnRjKHZv aWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRl ciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gKwlzdHJ1Y3Qg ZHJtX3JlY3QgY2xpcDsKPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ICsJCS53aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9 IDIwNDgKPiArCX07Cj4gKwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiAr CQkuY3J0YyA9IDAsCj4gKwkJLmZiID0gJmZiLAo+ICsJfTsKPiArCj4gKwlzZXRfcGxhbmVfc3Jj KCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gKwlzZXRfcGxhbmVf c3JjKCZzdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKPiArCWRybV9hdG9taWNf aGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlk cm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hp dHMrKzsKPiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDAsICJTaG91bGQgaGF2ZSBubyBkYW1hZ2Uu Iik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9p dGVyX25vX2RhbWFnZV9ub19mYih2b2lkICppZ25vcmVkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F0 b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg b2xkX3N0YXRlOwo+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gKwl1aW50MzJfdCBudW1faGl0 cyA9IDA7Cj4gKwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0 YyA9IFpFUk9fU0laRV9QVFIsCj4gKwkJLmZiID0gMCwKPiArCX07Cj4gKwo+ICsJc2V0X3BsYW5l X3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ICsJc2V0X3Bs YW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gKwlkcm1fYXRv bWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwo+ ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ICsJCW51 bV9oaXRzKys7Cj4gKwo+ICsJRkFJTChudW1faGl0cyAhPSAwLCAiU2hvdWxkIGhhdmUgbm8gZGFt YWdlLiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1h Z2VfaXRlcl9zaW1wbGVfZGFtYWdlKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBkcm1f YXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSBvbGRfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4g KwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsK PiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy IGZiID0gewo+ICsJCS53aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiArCX07Cj4g Kwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9IFpFUk9f U0laRV9QVFIsCj4gKwkJLmZiID0gJmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiArCX07Cj4g Kwo+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwg MTYpOwo+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAx Nik7Cj4gKwkvKiBEYW1hZ2Ugc2V0IHRvIHBsYW5lIHNyYyAqLwo+ICsJc2V0X2RhbWFnZV9jbGlw KCZkYW1hZ2UsIDAsIDAsIDEwMjQsIDc2OCk7Cj4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9i bG9iLCAmZGFtYWdlLCBzaXplb2YoZGFtYWdlKSk7Cj4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0 ZSwgJmRhbWFnZV9ibG9iKTsKPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQo Jml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5l X2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hpdHMrKzsKPiArCj4gKwlGQUlMKG51bV9o aXRzICE9IDEsICJTaG91bGQgcmV0dXJuIGRhbWFnZSB3aGVuIHNldC4iKTsKPiArCUZBSUxfT04o IWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDAsIDAsIDEwMjQsIDc2OCkpOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5n bGVfZGFtYWdlKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBl cl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7 Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gKwlzdHJ1Y3QgZHJt X21vZGVfcmVjdCBkYW1hZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKPiArCXVpbnQzMl90 IG51bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ICsJ CS53aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiArCX07Cj4gKwo+ICsJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4g KwkJLmZiID0gJmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiArCX07Cj4gKwo+ICsJc2V0X3Bs YW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ICsJc2V0 X3BsYW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gKwlzZXRf ZGFtYWdlX2NsaXAoJmRhbWFnZSwgMjU2LCAxOTIsIDc2OCwgNTc2KTsKPiArCXNldF9kYW1hZ2Vf YmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1hZ2UpKTsKPiArCXNldF9wbGFu ZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFt YWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiArCWRybV9hdG9taWNf Zm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiArCQludW1faGl0cysrOwo+ICsK PiArCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdoZW4gc2V0LiIp Owo+ICsJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMjU2LCAxOTIs IDc2OCwgNTc2KSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0 X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0X3NyYyh2b2lkICppZ25vcmVkKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiArCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9i bG9iIGRhbWFnZV9ibG9iOwo+ICsJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOwo+ICsJc3Ry dWN0IGRybV9yZWN0IGNsaXA7Cj4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gKwo+ICsJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiArCQkud2lkdGggPSAyMDQ4LAo+ICsJCS5oZWln aHQgPSAyMDQ4Cj4gKwl9Owo+ICsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7 Cj4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ICsJCS5mYiA9ICZmYiwKPiArCQkudmlzaWJs ZSA9IHRydWUsCj4gKwl9Owo+ICsKPiArCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMCwgMCwg MTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAx MDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ICsJLyogRGFtYWdlIGludGVyc2VjdCB3aXRoIHBsYW5l IHNyYy4gKi8KPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAyNTYsIDE5MiwgMTM2MCwgNzY4 KTsKPiArCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1h Z2UpKTsKPiArCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ICsJZHJt X2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRl KTsKPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiAr CQludW1faGl0cysrOwo+ICsKPiArCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4g ZGFtYWdlIGNsaXBwZWQgdG8gc3JjLiIpOwo+ICsJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAo JnN0YXRlLCAmY2xpcCwgMjU2LCAxOTIsIDEwMjQsIDc2OCkpOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNp ZGVfc3JjKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9k YW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4g KwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gKwlzdHJ1Y3QgZHJtX21v ZGVfcmVjdCBkYW1hZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKPiArCXVpbnQzMl90IG51 bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ICsJCS53 aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiArCX07Cj4gKwo+ICsJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4gKwkJ LmZiID0gJmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiArCX07Cj4gKwo+ICsJc2V0X3BsYW5l X3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ICsJc2V0X3Bs YW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gKwkvKiBEYW1h Z2UgY2xpcCBvdXRzaWRlIHBsYW5lIHNyYyAqLwo+ICsJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2Us IDEzNjAsIDEzNjAsIDEzODAsIDEzODApOwo+ICsJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxv YiwgJmRhbWFnZSwgc2l6ZW9mKGRhbWFnZSkpOwo+ICsJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUs ICZkYW1hZ2VfYmxvYik7Cj4gKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZp dGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwo+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9k YW1hZ2UoJml0ZXIsICZjbGlwKQo+ICsJCW51bV9oaXRzKys7Cj4gKwo+ICsJRkFJTChudW1faGl0 cyAhPSAwLCAiU2hvdWxkIGhhdmUgbm8gZGFtYWdlLiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ZyYWN0aW9u YWxfc3JjKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9k YW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4g KwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gKwlzdHJ1Y3QgZHJtX21v ZGVfcmVjdCBkYW1hZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKPiArCXVpbnQzMl90IG51 bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ICsJCS53 aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiArCX07Cj4gKwo+ICsJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4gKwkJ LmZiID0gJmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiArCX07Cj4gKwo+ICsJLyogUGxhbmUg c3JjIGhhcyBmcmFjdGlvbmFsIHBhcnQuICovCj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUs IDB4NDAwMDIsIDB4NDAwMDIsCj4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0 MDAwMiArICg3NjggPDwgMTYpKTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDQwMDAyLCAw eDQwMDAyLAo+ICsJCSAgICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4 IDw8IDE2KSk7Cj4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMTAsIDEwLCAyNTYsIDMzMCk7 Cj4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2YoZGFtYWdl KSk7Cj4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiArCWRybV9h dG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7 Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJ bnVtX2hpdHMrKzsKPiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIGRh bWFnZSB3aGVuIHNldC4iKTsKPiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwg JmNsaXAsIDEwLCAxMCwgMjU2LCAzMzApKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9pbnRlcnNlY3RfZnJhY3Rp b25hbF9zcmModm9pZCAqaWdub3JlZCkKPiArewo+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVy X2RhbWFnZV9pdGVyIGl0ZXI7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsK PiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiArCXN0cnVjdCBkcm1f bW9kZV9yZWN0IGRhbWFnZTsKPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ICsJdWludDMyX3Qg bnVtX2hpdHMgPSAwOwo+ICsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gKwkJ LndpZHRoID0gMjA0OCwKPiArCQkuaGVpZ2h0ID0gMjA0OAo+ICsJfTsKPiArCj4gKwlzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0gewo+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiAr CQkuZmIgPSAmZmIsCj4gKwkJLnZpc2libGUgPSB0cnVlLAo+ICsJfTsKPiArCj4gKwkvKiBQbGFu ZSBzcmMgaGFzIGZyYWN0aW9uYWwgcGFydC4gKi8KPiArCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0 ZSwgMHg0MDAwMiwgMHg0MDAwMiwKPiArCQkgICAgICAweDQwMDAyICsgKDEwMjQgPDwgMTYpLCAw eDQwMDAyICsgKDc2OCA8PCAxNikpOwo+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDB4NDAwMDIs IDB4NDAwMDIsCj4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3 NjggPDwgMTYpKTsKPiArCS8qIERhbWFnZSBpbnRlcnNlY3Qgd2l0aCBwbGFuZSBzcmMuICovCj4g KwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMTAsIDEsIDEzNjAsIDMzMCk7Cj4gKwlzZXRfZGFt YWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2YoZGFtYWdlKSk7Cj4gKwlzZXRf cGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiArCWRybV9hdG9taWNfaGVscGVy X2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRv bWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hpdHMrKzsK PiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIGRhbWFnZSBjbGlwcGVk IHRvIHJvdW5kZWQgb2ZmIHNyYy4iKTsKPiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZz dGF0ZSwgJmNsaXAsIDEwLCA0LCAxMDI5LCAzMzApKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9vdXRzaWRlX2Zy YWN0aW9uYWxfc3JjKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBkcm1fYXRvbWljX2hl bHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3Rh dGU7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gKwlzdHJ1Y3Qg ZHJtX21vZGVfcmVjdCBkYW1hZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKPiArCXVpbnQz Ml90IG51bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ ICsJCS53aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiArCX07Cj4gKwo+ICsJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIs Cj4gKwkJLmZiID0gJmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiArCX07Cj4gKwo+ICsJLyog UGxhbmUgc3JjIGhhcyBmcmFjdGlvbmFsIHBhcnQuICovCj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRf c3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2 KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDQw MDAyLCAweDQwMDAyLAo+ICsJCSAgICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIg KyAoNzY4IDw8IDE2KSk7Cj4gKwkvKiBEYW1hZ2UgY2xpcCBvdXRzaWRlIHBsYW5lIHNyYyAqLwo+ ICsJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDEzNjAsIDEzNjAsIDEzODAsIDEzODApOwo+ICsJ c2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwgc2l6ZW9mKGRhbWFnZSkpOwo+ ICsJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7Cj4gKwlkcm1fYXRvbWlj X2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwo+ICsJ ZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ICsJCW51bV9o aXRzKys7Cj4gKwo+ICsJRkFJTChudW1faGl0cyAhPSAwLCAiU2hvdWxkIGhhdmUgbm8gZGFtYWdl LiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2Vf aXRlcl9zaW5nbGVfZGFtYWdlX3NyY19tb3ZlZCh2b2lkICppZ25vcmVkKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiArCXN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgb2xkX3N0YXRlOwo+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRhbWFnZV9i bG9iOwo+ICsJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOwo+ICsJc3RydWN0IGRybV9yZWN0 IGNsaXA7Cj4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gKwo+ICsJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciBmYiA9IHsKPiArCQkud2lkdGggPSAyMDQ4LAo+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4g Kwl9Owo+ICsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gKwkJLmNydGMg PSBaRVJPX1NJWkVfUFRSLAo+ICsJCS5mYiA9ICZmYiwKPiArCQkudmlzaWJsZSA9IHRydWUsCj4g Kwl9Owo+ICsKPiArCS8qIFBsYW5lIHNyYyBtb3ZlZCBzaW5jZSBvbGQgcGxhbmUgc3RhdGUuICov Cj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAx Nik7Cj4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMTAgPDwgMTYsIDEwIDw8IDE2LAo+ICsJCSAg ICAgICgxMCArIDEwMjQpIDw8IDE2LCAoMTAgKyA3NjgpIDw8IDE2KTsKPiArCXNldF9kYW1hZ2Vf Y2xpcCgmZGFtYWdlLCAyMCwgMzAsIDI1NiwgMjU2KTsKPiArCXNldF9kYW1hZ2VfYmxvYigmZGFt YWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1hZ2UpKTsKPiArCXNldF9wbGFuZV9kYW1hZ2Uo JnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJf aW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiArCWRybV9hdG9taWNfZm9yX2VhY2hf cGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiArCQludW1faGl0cysrOwo+ICsKPiArCUZBSUwo bnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gcGxhbmUgc3JjIGFzIGRhbWFnZS4iKTsKPiAr CUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDEwLCAxMCwgMTAzNCwg Nzc4KSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X2RhbWFn ZV9pdGVyX3NpbmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92ZWQodm9pZCAqaWdub3JlZCkK PiArewo+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gKwlz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKPiArCXN0cnVjdCBkcm1fcHJvcGVydHlf YmxvYiBkYW1hZ2VfYmxvYjsKPiArCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZTsKPiArCXN0 cnVjdCBkcm1fcmVjdCBjbGlwOwo+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ICsKPiArCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gKwkJLndpZHRoID0gMjA0OCwKPiArCQkuaGVp Z2h0ID0gMjA0OAo+ICsJfTsKPiArCj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0g ewo+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiArCQkuZmIgPSAmZmIsCj4gKwkJLnZpc2li bGUgPSB0cnVlLAo+ICsJfTsKPiArCj4gKwkvKiBQbGFuZSBzcmMgd2l0aCBmcmFjdGlvbmFsIHBh cnQgbW92ZWQgc2luY2Ugb2xkIHBsYW5lIHN0YXRlLiAqLwo+ICsJc2V0X3BsYW5lX3NyYygmb2xk X3N0YXRlLCAweDNmZmZlLCAweDNmZmZlLAo+ICsJCSAgICAgIDB4M2ZmZmUgKyAoMTAyNCA8PCAx NiksIDB4M2ZmZmUgKyAoNzY4IDw8IDE2KSk7Cj4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHg0 MDAwMiwgMHg0MDAwMiwKPiArCQkgICAgICAweDQwMDAyICsgKDEwMjQgPDwgMTYpLCAweDQwMDAy ICsgKDc2OCA8PCAxNikpOwo+ICsJLyogRGFtYWdlIGludGVyc2VjdCB3aXRoIHBsYW5lIHNyYy4g Ki8KPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAyMCwgMzAsIDEzNjAsIDI1Nik7Cj4gKwlz ZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2YoZGFtYWdlKSk7Cj4g KwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiArCWRybV9hdG9taWNf aGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlk cm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hp dHMrKzsKPiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIHJvdW5kZWQg b2ZmIHBsYW5lIHNyYyBhcyBkYW1hZ2UuIik7Cj4gKwlGQUlMX09OKCFjaGVja19kYW1hZ2VfY2xp cCgmc3RhdGUsICZjbGlwLCA0LCA0LCAxMDI5LCA3NzMpKTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfZGFtYWdlKHZvaWQgKmlnbm9yZWQp Cj4gK3sKPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJ c3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5 X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2VbMl07Cj4g KwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiArCj4g KwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ICsJCS53aWR0aCA9IDIwNDgsCj4gKwkJ LmhlaWdodCA9IDIwNDgKPiArCX07Cj4gKwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0 ZSA9IHsKPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4gKwkJLmZiID0gJmZiLAo+ICsJCS52 aXNpYmxlID0gdHJ1ZSwKPiArCX07Cj4gKwo+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAw LCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAs IDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gKwkvKiAyIGRhbWFnZSBjbGlwcy4gKi8KPiAr CXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzBdLCAyMCwgMzAsIDIwMCwgMTgwKTsKPiArCXNldF9k YW1hZ2VfY2xpcCgmZGFtYWdlWzFdLCAyNDAsIDIwMCwgMjgwLCAyNTApOwo+ICsJc2V0X2RhbWFn ZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZVswXSwgc2l6ZW9mKGRhbWFnZSkpOwo+ICsJc2V0 X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7Cj4gKwlkcm1fYXRvbWljX2hlbHBl cl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwo+ICsJZHJtX2F0 b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKSB7Cj4gKwkJaWYgKG51bV9o aXRzID09IDApCj4gKwkJCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAs IDIwLCAzMCwgMjAwLCAxODApKTsKPiArCQlpZiAobnVtX2hpdHMgPT0gMSkKPiArCQkJRkFJTF9P TighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMjQwLCAyMDAsIDI4MCwgMjUwKSk7 Cj4gKwkJbnVtX2hpdHMrKzsKPiArCX0KPiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDIsICJTaG91 bGQgcmV0dXJuIGRhbWFnZSB3aGVuIHNldC4iKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfZGFtYWdlX29uZV9pbnRlcnNlY3Qodm9pZCAq aWdub3JlZCkKPiArewo+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0 ZXI7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKPiArCXN0cnVjdCBkcm1f cHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiArCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFn ZVsyXTsKPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAw Owo+ICsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gKwkJLndpZHRoID0gMjA0 OCwKPiArCQkuaGVpZ2h0ID0gMjA0OAo+ICsJfTsKPiArCj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlIHN0YXRlID0gewo+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiArCQkuZmIgPSAmZmIs Cj4gKwkJLnZpc2libGUgPSB0cnVlLAo+ICsJfTsKPiArCj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRf c3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2 KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDQw MDAyLCAweDQwMDAyLAo+ICsJCSAgICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIg KyAoNzY4IDw8IDE2KSk7Cj4gKwkvKiAyIGRhbWFnZSBjbGlwcywgb25lIGludGVyc2VjdCBwbGFu ZSBzcmMuICovCj4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVswXSwgMjAsIDMwLCAyMDAsIDE4 MCk7Cj4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVsxXSwgMiwgMiwgMTM2MCwgMTM2MCk7Cj4g KwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlWzBdLCBzaXplb2YoZGFtYWdl KSk7Cj4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiArCWRybV9h dG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7 Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApIHsKPiAr CQlpZiAobnVtX2hpdHMgPT0gMCkKPiArCQkJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0 YXRlLCAmY2xpcCwgMjAsIDMwLCAyMDAsIDE4MCkpOwo+ICsJCWlmIChudW1faGl0cyA9PSAxKQo+ ICsJCQlGQUlMX09OKCFjaGVja19kYW1hZ2VfY2xpcCgmc3RhdGUsICZjbGlwLCA0LCA0LCAxMDI5 LCA3NzMpKTsKPiArCQludW1faGl0cysrOwo+ICsJfQo+ICsKPiArCUZBSUwobnVtX2hpdHMgIT0g MiwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdoZW4gc2V0LiIpOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9kYW1hZ2Vfb25lX291dHNpZGUo dm9pZCAqaWdub3JlZCkKPiArewo+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9p dGVyIGl0ZXI7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKPiArCXN0cnVj dCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiArCXN0cnVjdCBkcm1fbW9kZV9yZWN0 IGRhbWFnZVsyXTsKPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ICsJdWludDMyX3QgbnVtX2hp dHMgPSAwOwo+ICsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gKwkJLndpZHRo ID0gMjA0OCwKPiArCQkuaGVpZ2h0ID0gMjA0OAo+ICsJfTsKPiArCj4gKwlzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlIHN0YXRlID0gewo+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiArCQkuZmIg PSAmZmIsCj4gKwkJLnZpc2libGUgPSB0cnVlLAo+ICsJfTsKPiArCj4gKwlzZXRfcGxhbmVfc3Jj KCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gKwlzZXRfcGxhbmVf c3JjKCZzdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKPiArCS8qIDIgZGFtYWdl IGNsaXBzLCBvbmUgb3V0c2lkZSBwbGFuZSBzcmMuICovCj4gKwlzZXRfZGFtYWdlX2NsaXAoJmRh bWFnZVswXSwgMTM2MCwgMTM2MCwgMTM4MCwgMTM4MCk7Cj4gKwlzZXRfZGFtYWdlX2NsaXAoJmRh bWFnZVsxXSwgMjQwLCAyMDAsIDI4MCwgMjUwKTsKPiArCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdl X2Jsb2IsICZkYW1hZ2VbMF0sIHNpemVvZihkYW1hZ2UpKTsKPiArCXNldF9wbGFuZV9kYW1hZ2Uo JnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJf aW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiArCWRybV9hdG9taWNfZm9yX2VhY2hf cGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiArCQludW1faGl0cysrOwo+ICsKPiArCUZBSUwo bnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdoZW4gc2V0LiIpOwo+ICsJRkFJ TF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMjQwLCAyMDAsIDI4MCwgMjUw KSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9p dGVyX2RhbWFnZV9zcmNfbW92ZWQodm9pZCAqaWdub3JlZCkKPiArewo+ICsJc3RydWN0IGRybV9h dG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl IG9sZF9zdGF0ZTsKPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiAr CXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZVsyXTsKPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlw Owo+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ICsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgZmIgPSB7Cj4gKwkJLndpZHRoID0gMjA0OCwKPiArCQkuaGVpZ2h0ID0gMjA0OAo+ICsJfTsK PiArCj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0gewo+ICsJCS5jcnRjID0gWkVS T19TSVpFX1BUUiwKPiArCQkuZmIgPSAmZmIsCj4gKwkJLnZpc2libGUgPSB0cnVlLAo+ICsJfTsK PiArCj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4gKwkJ ICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiAr CXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDNmZmZlLCAweDNmZmZlLAo+ICsJCSAgICAgIDB4M2Zm ZmUgKyAoMTAyNCA8PCAxNiksIDB4M2ZmZmUgKyAoNzY4IDw8IDE2KSk7Cj4gKwkvKiAyIGRhbWFn ZSBjbGlwcywgb25lIG91dHNpZGUgcGxhbmUgc3JjLiAqLwo+ICsJc2V0X2RhbWFnZV9jbGlwKCZk YW1hZ2VbMF0sIDEzNjAsIDEzNjAsIDEzODAsIDEzODApOwo+ICsJc2V0X2RhbWFnZV9jbGlwKCZk YW1hZ2VbMV0sIDI0MCwgMjAwLCAyODAsIDI1MCk7Cj4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFn ZV9ibG9iLCAmZGFtYWdlWzBdLCBzaXplb2YoZGFtYWdlKSk7Cj4gKwlzZXRfcGxhbmVfZGFtYWdl KCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVy X2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNo X3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hpdHMrKzsKPiArCj4gKwlGQUlM KG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIHJvdW5kIG9mZiBwbGFuZSBzcmMgYXMgZGFt YWdlLiIpOwo+ICsJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMywg MywgMTAyOCwgNzcyKSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg aWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9ub3RfdmlzaWJsZSh2b2lkICppZ25vcmVkKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiArCXN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRh bWFnZV9ibG9iOwo+ICsJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlWzJdOwo+ICsJc3RydWN0 IGRybV9yZWN0IGNsaXA7Cj4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gKwo+ICsJc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiArCQkud2lkdGggPSAyMDQ4LAo+ICsJCS5oZWlnaHQg PSAyMDQ4Cj4gKwl9Owo+ICsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4g KwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ICsJCS5mYiA9ICZmYiwKPiArCQkudmlzaWJsZSA9 IGZhbHNlLAo+ICsJfTsKPiArCj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4NDAwMDIs IDB4NDAwMDIsCj4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3 NjggPDwgMTYpKTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDNmZmZlLCAweDNmZmZlLAo+ ICsJCSAgICAgIDB4M2ZmZmUgKyAoMTAyNCA8PCAxNiksIDB4M2ZmZmUgKyAoNzY4IDw8IDE2KSk7 Cj4gKwkvKiAyIGRhbWFnZSBjbGlwcywgb25lIG91dHNpZGUgcGxhbmUgc3JjLiAqLwo+ICsJc2V0 X2RhbWFnZV9jbGlwKCZkYW1hZ2VbMF0sIDEzNjAsIDEzNjAsIDEzODAsIDEzODApOwo+ICsJc2V0 X2RhbWFnZV9jbGlwKCZkYW1hZ2VbMV0sIDI0MCwgMjAwLCAyODAsIDI1MCk7Cj4gKwlzZXRfZGFt YWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlWzBdLCBzaXplb2YoZGFtYWdlKSk7Cj4gKwlz ZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiArCWRybV9hdG9taWNfaGVs cGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlkcm1f YXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hpdHMr KzsKPiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDAsICJTaG91bGQgbm90IHJldHVybiBhbnkgZGFt YWdlLiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsjaW5jbHVkZSAiZHJtX3NlbGZ0 ZXN0LmMiCj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCB0ZXN0X2RybV9kYW1hZ2VfaGVscGVyX2lu aXQodm9pZCkKPiArewo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSBydW5fc2VsZnRlc3RzKHNl bGZ0ZXN0cywgQVJSQVlfU0laRShzZWxmdGVzdHMpLCBOVUxMKTsKPiArCj4gKwlyZXR1cm4gZXJy ID4gMCA/IDAgOiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCB0ZXN0X2RybV9k YW1hZ2VfaGVscGVyX2V4aXQodm9pZCkKPiArewo+ICt9Cj4gKwo+ICttb2R1bGVfaW5pdCh0ZXN0 X2RybV9kYW1hZ2VfaGVscGVyX2luaXQpOwo+ICttb2R1bGVfZXhpdCh0ZXN0X2RybV9kYW1hZ2Vf aGVscGVyX2V4aXQpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiVk13YXJlIEluYy4iKTsKPiArTU9E VUxFX0xJQ0VOU0UoIkdQTCIpOwo+IC0tIAo+IDIuMTcuMQo+IAoKLS0gCkRhbmllbCBWZXR0ZXIK U29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNo Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=