From mboxrd@z Thu Jan 1 00:00:00 1970 From: sourab gupta Subject: Re: [PATCH v8 02/12] drm/i915: Add i915 perf infrastructure Date: Fri, 04 Nov 2016 14:29:07 +0530 Message-ID: <1478249947.18863.15.camel@sourab-desktop> References: <20161028021430.2177-1-robert@sixbynine.org> <20161028021430.2177-3-robert@sixbynine.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161028021430.2177-3-robert@sixbynine.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Robert Bragg Cc: "dri-devel@lists.freedesktop.org" , David Airlie , "intel-gfx@lists.freedesktop.org" , "Vetter, Daniel" List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCAyMDE2LTEwLTI3IGF0IDE5OjE0IC0wNzAwLCBSb2JlcnQgQnJhZ2cgd3JvdGU6Cj4g QWRkcyBiYXNlIGk5MTUgcGVyZiBpbmZyYXN0cnVjdHVyZSBmb3IgR2VuIHBlcmZvcm1hbmNlIG1l dHJpY3MuCj4gCj4gVGhpcyBhZGRzIGEgRFJNX0lPQ1RMX0k5MTVfUEVSRl9PUEVOIGlvY3RsIHRo YXQgdGFrZXMgYW4gYXJyYXkgb2YgdWludDY0Cj4gcHJvcGVydGllcyB0byBjb25maWd1cmUgYSBz dHJlYW0gb2YgbWV0cmljcyBhbmQgcmV0dXJucyBhIG5ldyBmZCB1c2FibGUKPiB3aXRoIHN0YW5k YXJkIFZGUyBzeXN0ZW0gY2FsbHMgaW5jbHVkaW5nIHJlYWQoKSB0byByZWFkIHR5cGVkIGFuZCBz aXplZAo+IHJlY29yZHM7IGlvY3RsKCkgdG8gZW5hYmxlIG9yIGRpc2FibGUgY2FwdHVyZSBhbmQg cG9sbCgpIHRvIHdhaXQgZm9yCj4gZGF0YS4KPiAKPiBBIHN0cmVhbSBpcyBvcGVuZWQgc29tZXRo aW5nIGxpa2U6Cj4gCj4gICB1aW50NjRfdCBwcm9wZXJ0aWVzW10gPSB7Cj4gICAgICAgLyogU2lu Z2xlIGNvbnRleHQgc2FtcGxpbmcgKi8KPiAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfQ1RYX0hB TkRMRSwgICAgICAgIGN0eF9oYW5kbGUsCj4gCj4gICAgICAgLyogSW5jbHVkZSBPQSByZXBvcnRz IGluIHNhbXBsZXMgKi8KPiAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX09BLCAgICAg ICAgIHRydWUsCj4gCj4gICAgICAgLyogT0EgdW5pdCBjb25maWd1cmF0aW9uICovCj4gICAgICAg RFJNX0k5MTVfUEVSRl9QUk9QX09BX01FVFJJQ1NfU0VULCAgICBtZXRyaWNzX3NldF9pZCwKPiAg ICAgICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfRk9STUFULCAgICAgICAgIHJlcG9ydF9mb3JtYXQs Cj4gICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCAgICAgICBwZXJpb2RfZXhw b25lbnQsCj4gICAgfTsKPiAgICBzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtIHBhcm0g PSB7Cj4gICAgICAgLmZsYWdzID0gSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQyB8Cj4gICAgICAg ICAgICAgICAgSTkxNV9QRVJGX0ZMQUdfRkRfTk9OQkxPQ0sgfAo+ICAgICAgICAgICAgICAgIEk5 MTVfUEVSRl9GTEFHX0RJU0FCTEVELAo+ICAgICAgIC5wcm9wZXJ0aWVzX3B0ciA9ICh1aW50NjRf dClwcm9wZXJ0aWVzLAo+ICAgICAgIC5udW1fcHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVz KSAvIDE2LAo+ICAgIH07Cj4gICAgaW50IGZkID0gZHJtSW9jdGwoZHJtX2ZkLCBEUk1fSU9DVExf STkxNV9QRVJGX09QRU4sICZwYXJhbSk7Cj4gCj4gUmVjb3JkcyByZWFkIGFsbCBzdGFydCB3aXRo IGEgY29tbW9uIHsgdHlwZSwgc2l6ZSB9IGhlYWRlciB3aXRoCj4gRFJNX0k5MTVfUEVSRl9SRUNP UkRfU0FNUExFIGJlaW5nIG9mIG1vc3QgaW50ZXJlc3QuIFNhbXBsZSByZWNvcmRzCj4gY29udGFp biBhbiBleHRlbnNpYmxlIG51bWJlciBvZiBmaWVsZHMgYW5kIGl0J3MgdGhlCj4gRFJNX0k5MTVf UEVSRl9QUk9QX1NBTVBMRV94eXogcHJvcGVydGllcyBnaXZlbiB3aGVuIG9wZW5pbmcgdGhhdAo+ IGRldGVybWluZSB3aGF0J3MgaW5jbHVkZWQgaW4gZXZlcnkgc2FtcGxlLgo+IAo+IE5vIHNwZWNp ZmljIHN0cmVhbXMgYXJlIHN1cHBvcnRlZCB5ZXQgc28gYW55IGF0dGVtcHQgdG8gb3BlbiBhIHN0 cmVhbQo+IHdpbGwgcmV0dXJuIGFuIGVycm9yLgo+IAo+IHYyOgo+ICAgICB1c2UgaTkxNV9nZW1f Y29udGV4dF9nZXQoKSAtIENocmlzIFdpbHNvbgo+IHYzOgo+ICAgICB1cGRhdGUgcmVhZCgpIGlu dGVyZmFjZSB0byBhdm9pZCBwYXNzaW5nIHN0YXRlIHN0cnVjdCAtIENocmlzIFdpbHNvbgo+ICAg ICBmaXggc29tZSByZWJhc2UgZmFsbG91dCwgd2l0aCBpOTE1LXBlcmYgaW5pdC9kZWluaXQKPiB2 NDoKPiAgICAgcy9EUk1fSU9SVy9EUk1fSU9XLyAtIEVtaWwgVmVsaWtvdgo+IAo+IFNpZ25lZC1v ZmYtYnk6IFJvYmVydCBCcmFnZyA8cm9iZXJ0QHNpeGJ5bmluZS5vcmc+Cj4gLS0tCj4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgIHwgICAzICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYyAgfCAgIDQgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o ICB8ICA5MSArKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyB8IDQ0 MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS91YXBp L2RybS9pOTE1X2RybS5oICAgICAgfCAgNjcgKysrKysrCj4gIDUgZmlsZXMgY2hhbmdlZCwgNjA4 IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcGVyZi5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCA2MTIzNDAwLi44ZDRl MjVmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMTEzLDYgKzExMyw5IEBAIGk5MTUt JChDT05GSUdfRFJNX0k5MTVfQ0FQVFVSRV9FUlJPUikgKz0gaTkxNV9ncHVfZXJyb3Iubwo+ICAj IHZpcnR1YWwgZ3B1IGNvZGUKPiAgaTkxNS15ICs9IGk5MTVfdmdwdS5vCj4gIAo+ICsjIHBlcmYg Y29kZQo+ICtpOTE1LXkgKz0gaTkxNV9wZXJmLm8KPiArCj4gIGlmZXEgKCQoQ09ORklHX0RSTV9J OTE1X0dWVCkseSkKPiAgaTkxNS15ICs9IGludGVsX2d2dC5vCj4gIGluY2x1ZGUgJChzcmMpL2d2 dC9NYWtlZmlsZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IGluZGV4IGFmMzU1OWQuLjY4NWM5 NmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBAQCAtODM2LDYgKzgzNiw4IEBAIHN0 YXRpYyBpbnQgaTkxNV9kcml2ZXJfaW5pdF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4gIAo+ICAJaW50ZWxfZGV0ZWN0X3ByZXByb2R1Y3Rpb25faHcoZGV2X3ByaXYp Owo+ICAKPiArCWk5MTVfcGVyZl9pbml0KGRldl9wcml2KTsKPiArCj4gIAlyZXR1cm4gMDsKPiAg Cj4gIGVycl93b3JrcXVldWVzOgo+IEBAIC04NDksNiArODUxLDcgQEAgc3RhdGljIGludCBpOTE1 X2RyaXZlcl9pbml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAg ICovCj4gIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX2NsZWFudXBfZWFybHkoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gKwlpOTE1X3BlcmZfZmluaShkZXZfcHJpdik7 Cj4gIAlpOTE1X2dlbV9sb2FkX2NsZWFudXAoJmRldl9wcml2LT5kcm0pOwo+ICAJaTkxNV93b3Jr cXVldWVzX2NsZWFudXAoZGV2X3ByaXYpOwo+ICB9Cj4gQEAgLTI1NTYsNiArMjU1OSw3IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaTkxNV9pb2N0bHNbXSA9IHsKPiAgCURS TV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1VTRVJQVFIsIGk5MTVfZ2VtX3VzZXJwdHJfaW9jdGws IERSTV9SRU5ERVJfQUxMT1cpLAo+ICAJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fQ09OVEVY VF9HRVRQQVJBTSwgaTkxNV9nZW1fY29udGV4dF9nZXRwYXJhbV9pb2N0bCwgRFJNX1JFTkRFUl9B TExPVyksCj4gIAlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9DT05URVhUX1NFVFBBUkFNLCBp OTE1X2dlbV9jb250ZXh0X3NldHBhcmFtX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiArCURS TV9JT0NUTF9ERUZfRFJWKEk5MTVfUEVSRl9PUEVOLCBpOTE1X3BlcmZfb3Blbl9pb2N0bCwgRFJN X1JFTkRFUl9BTExPVyksCj4gIH07Cj4gIAo+ICBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJp dmVyID0gewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IDVhMjYwZGIuLjdhNjVjMGIg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMTc2Nyw2ICsxNzY3LDg0IEBAIHN0 cnVjdCBpbnRlbF93bV9jb25maWcgewo+ICAJYm9vbCBzcHJpdGVzX3NjYWxlZDsKPiAgfTsKPiAg Cj4gK3N0cnVjdCBpOTE1X3BlcmZfc3RyZWFtOwo+ICsKPiArc3RydWN0IGk5MTVfcGVyZl9zdHJl YW1fb3BzIHsKPiArCS8qIEVuYWJsZXMgdGhlIGNvbGxlY3Rpb24gb2YgSFcgc2FtcGxlcywgZWl0 aGVyIGluIHJlc3BvbnNlIHRvCj4gKwkgKiBJOTE1X1BFUkZfSU9DVExfRU5BQkxFIG9yIGltcGxp Y2l0bHkgY2FsbGVkIHdoZW4gc3RyZWFtIGlzCj4gKwkgKiBvcGVuZWQgd2l0aG91dCBJOTE1X1BF UkZfRkxBR19ESVNBQkxFRC4KPiArCSAqLwo+ICsJdm9pZCAoKmVuYWJsZSkoc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSk7Cj4gKwo+ICsJLyogRGlzYWJsZXMgdGhlIGNvbGxlY3Rpb24g b2YgSFcgc2FtcGxlcywgZWl0aGVyIGluIHJlc3BvbnNlIHRvCj4gKwkgKiBJOTE1X1BFUkZfSU9D VExfRElTQUJMRSBvciBpbXBsaWNpdGx5IGNhbGxlZCBiZWZvcmUKPiArCSAqIGRlc3Ryb3lpbmcg dGhlIHN0cmVhbS4KPiArCSAqLwo+ICsJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0pOwo+ICsKPiArCS8qIFJldHVybjogdHJ1ZSBpZiBhbnkgaTkxNSBwZXJm IHJlY29yZHMgYXJlIHJlYWR5IHRvIHJlYWQoKQo+ICsJICogZm9yIHRoaXMgc3RyZWFtLgo+ICsJ ICovCj4gKwlib29sICgqY2FuX3JlYWQpKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0p Owo+ICsKPiArCS8qIENhbGwgcG9sbF93YWl0LCBwYXNzaW5nIGEgd2FpdCBxdWV1ZSB0aGF0IHdp bGwgYmUgd29rZW4KPiArCSAqIG9uY2UgdGhlcmUgaXMgc29tZXRoaW5nIHJlYWR5IHRvIHJlYWQo KSBmb3IgdGhlIHN0cmVhbQo+ICsJICovCj4gKwl2b2lkICgqcG9sbF93YWl0KShzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICsJCQkgIHN0cnVjdCBmaWxlICpmaWxlLAo+ICsJCQkg IHBvbGxfdGFibGUgKndhaXQpOwo+ICsKPiArCS8qIEZvciBoYW5kbGluZyBhIGJsb2NraW5nIHJl YWQsIHdhaXQgdW50aWwgdGhlcmUgaXMgc29tZXRoaW5nCj4gKwkgKiB0byByZWFkeSB0byByZWFk KCkgZm9yIHRoZSBzdHJlYW0uIEUuZy4gd2FpdCBvbiB0aGUgc2FtZQo+ICsJICogd2FpdCBxdWV1 ZSB0aGF0IHdvdWxkIGJlIHBhc3NlZCB0byBwb2xsX3dhaXQoKSB1bnRpbAo+ICsJICogLT5jYW5f cmVhZCgpIHJldHVybnMgdHJ1ZSAoaWYgaXRzIHNhZmUgdG8gY2FsbCAtPmNhbl9yZWFkKCkKPiAr CSAqIHdpdGhvdXQgdGhlIGk5MTUgcGVyZiBsb2NrIGhlbGQpLgo+ICsJICovCj4gKwlpbnQgKCp3 YWl0X3VubG9ja2VkKShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKTsKPiArCj4gKwkv KiByZWFkIC0gQ29weSBidWZmZXJlZCBtZXRyaWNzIGFzIHJlY29yZHMgdG8gdXNlcnNwYWNlCj4g KwkgKiBAYnVmOiB0aGUgdXNlcnNwYWNlLCBkZXN0aW5hdGlvbiBidWZmZXIKPiArCSAqIEBjb3Vu dDogdGhlIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCByZXF1ZXN0ZWQgYnkgdXNlcnNwYWNlCj4g KwkgKiBAb2Zmc2V0OiB6ZXJvIGF0IHRoZSBzdGFydCBvZiB0aGUgcmVhZCwgdXBkYXRlZCBhcyB0 aGUgcmVhZAo+ICsJICogICAgICAgICAgcHJvY2VlZHMsIGl0IHJlcHJlc2VudHMgaG93IG1hbnkg Ynl0ZXMgaGF2ZSBiZWVuCj4gKwkgKiAgICAgICAgICBjb3BpZWQgc28gZmFyIGFuZCB0aGUgYnVm ZmVyIG9mZnNldCBmb3IgY29weWluZyB0aGUKPiArCSAqICAgICAgICAgIG5leHQgcmVjb3JkLgo+ ICsJICoKPiArCSAqIENvcHkgYXMgbWFueSBidWZmZXJlZCBpOTE1IHBlcmYgc2FtcGxlcyBhbmQg cmVjb3JkcyBmb3IKPiArCSAqIHRoaXMgc3RyZWFtIHRvIHVzZXJzcGFjZSBhcyB3aWxsIGZpdCBp biB0aGUgZ2l2ZW4gYnVmZmVyLgo+ICsJICoKPiArCSAqIE9ubHkgd3JpdGUgY29tcGxldGUgcmVj b3JkczsgcmV0dXJuaW5nIC1FTk9TUEMgaWYgdGhlcmUKPiArCSAqIGlzbid0IHJvb20gZm9yIGEg Y29tcGxldGUgcmVjb3JkLgo+ICsJICoKPiArCSAqIFJldHVybiBhbnkgZXJyb3IgY29uZGl0aW9u IHRoYXQgcmVzdWx0cyBpbiBhIHNob3J0IHJlYWQKPiArCSAqIHN1Y2ggYXMgLUVOT1NQQyBvciAt RUZBVUxULCBldmVuIHRob3VnaCB0aGVzZSBtYXkgYmUKPiArCSAqIHNxdWFzaGVkIGJlZm9yZSBy ZXR1cm5pbmcgdG8gdXNlcnNwYWNlLgo+ICsJICovCj4gKwlpbnQgKCpyZWFkKShzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICsJCSAgICBjaGFyIF9fdXNlciAqYnVmLAo+ICsJCSAg ICBzaXplX3QgY291bnQsCj4gKwkJICAgIHNpemVfdCAqb2Zmc2V0KTsKPiArCj4gKwkvKiBDbGVh bnVwIGFueSBzdHJlYW0gc3BlY2lmaWMgcmVzb3VyY2VzLgo+ICsJICoKPiArCSAqIFRoZSBzdHJl YW0gd2lsbCBhbHdheXMgYmUgZGlzYWJsZWQgYmVmb3JlIHRoaXMgaXMgY2FsbGVkLgo+ICsJICov Cj4gKwl2b2lkICgqZGVzdHJveSkoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSk7Cj4g K307Cj4gKwo+ICtzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSB7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXY7Cj4gKwo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaW5rOwo+ICsKPiAr CXUzMiBzYW1wbGVfZmxhZ3M7Cj4gKwo+ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsK PiArCWJvb2wgZW5hYmxlZDsKPiArCj4gKwlzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbV9vcHMgKm9w czsKPiArfTsKPiArCj4gIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPiAgCXN0cnVjdCBkcm1f ZGV2aWNlIGRybTsKPiAgCj4gQEAgLTIwNjksNiArMjE0NywxMiBAQCBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSB7Cj4gIAo+ICAJc3RydWN0IGk5MTVfcnVudGltZV9wbSBwbTsKPiAgCj4gKwlzdHJ1 Y3Qgewo+ICsJCWJvb2wgaW5pdGlhbGl6ZWQ7Cj4gKwkJc3RydWN0IG11dGV4IGxvY2s7Cj4gKwkJ c3RydWN0IGxpc3RfaGVhZCBzdHJlYW1zOwo+ICsJfSBwZXJmOwo+ICsKPiAgCS8qIEFic3RyYWN0 IHRoZSBzdWJtaXNzaW9uIG1lY2hhbmlzbSAobGVnYWN5IHJpbmdidWZmZXIgb3IgZXhlY2xpc3Rz KSBhd2F5ICovCj4gIAlzdHJ1Y3Qgewo+ICAJCXZvaWQgKCpyZXN1bWUpKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICopOwo+IEBAIC0zNDgyLDYgKzM1NjYsOSBAQCBpbnQgaTkxNV9nZW1fY29udGV4 dF9zZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICBp bnQgaTkxNV9nZW1fY29udGV4dF9yZXNldF9zdGF0c19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAo+ICAJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4g IAo+ICtpbnQgaTkxNV9wZXJmX29wZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKPiArCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4gKwo+ICAvKiBpOTE1X2dl bV9ldmljdC5jICovCj4gIGludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5n KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkJCSAgdTY0IG1pbl9zaXplLCB1 NjQgYWxpZ25tZW50LAo+IEBAIC0zNjA3LDYgKzM2OTQsMTAgQEAgaW50IGludGVsX2VuZ2luZV9j bWRfcGFyc2VyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCQkJICAgIHUzMiBi YXRjaF9sZW4sCj4gIAkJCSAgICBib29sIGlzX21hc3Rlcik7Cj4gIAo+ICsvKiBpOTE1X3BlcmYu YyAqLwo+ICtleHRlcm4gdm9pZCBpOTE1X3BlcmZfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwo+ICtleHRlcm4gdm9pZCBpOTE1X3BlcmZfZmluaShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICsKPiAgLyogaTkxNV9zdXNwZW5kLmMgKi8KPiAgZXh0 ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gIGV4dGVy biBpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcGVyZi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw Li5jNDVjZjkyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcGVyZi5jCj4gQEAgLTAsMCArMSw0NDMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIw MTUtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsg Kgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgIFJvYmVydCBCcmFnZyA8cm9iZXJ0QHNpeGJ5bmluZS5v cmc+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Fub25faW5vZGVzLmg+Cj4gKwo+ICsj aW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArCj4gK3N0cnVjdCBwZXJmX29wZW5fcHJvcGVydGllcyB7 Cj4gKwl1MzIgc2FtcGxlX2ZsYWdzOwo+ICsKPiArCXU2NCBzaW5nbGVfY29udGV4dDoxOwo+ICsJ dTY0IGN0eF9oYW5kbGU7Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBpOTE1X3BlcmZfcmVh ZF9sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKPiArCQkJCSAgICAgc3Ry dWN0IGZpbGUgKmZpbGUsCj4gKwkJCQkgICAgIGNoYXIgX191c2VyICpidWYsCj4gKwkJCQkgICAg IHNpemVfdCBjb3VudCwKPiArCQkJCSAgICAgbG9mZl90ICpwcG9zKQo+ICt7Cj4gKwkvKiBOb3Rl IHdlIGtlZXAgdGhlIG9mZnNldCAoYWthIGJ5dGVzIHJlYWQpIHNlcGFyYXRlIGZyb20gYW55Cj4g KwkgKiBlcnJvciBzdGF0dXMgc28gdGhhdCB0aGUgZmluYWwgY2hlY2sgZm9yIHdoZXRoZXIgd2Ug cmV0dXJuCj4gKwkgKiB0aGUgYnl0ZXMgcmVhZCB3aXRoIGEgaGlnaGVyIHByZWNlZGVuY2UgdGhh biBhbnkgZXJyb3IgKHNlZQo+ICsJICogY29tbWVudCBiZWxvdykgZG9lc24ndCBuZWVkIHRvIGJl IGhhbmRsZWQvZHVwbGljYXRlZCBpbgo+ICsJICogc3RyZWFtLT5vcHMtPnJlYWQoKSBpbXBsZW1l bnRhdGlvbnMuCj4gKwkgKi8KPiArCXNpemVfdCBvZmZzZXQgPSAwOwo+ICsJaW50IHJldCA9IHN0 cmVhbS0+b3BzLT5yZWFkKHN0cmVhbSwgYnVmLCBjb3VudCwgJm9mZnNldCk7Cj4gKwo+ICsJLyog SWYgd2UndmUgc3VjY2Vzc2Z1bGx5IGNvcGllZCBhbnkgZGF0YSB0aGVuIHJlcG9ydGluZyB0aGF0 Cj4gKwkgKiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYW55IGludGVybmFsIGVycm9yIHN0YXR1cywg c28gdGhlCj4gKwkgKiBkYXRhIGlzbid0IGxvc3QuCj4gKwkgKgo+ICsJICogRm9yIGV4YW1wbGUg cmV0IHdpbGwgYmUgLUVOT1NQQyB3aGVuZXZlciB0aGVyZSBpcyBtb3JlCj4gKwkgKiBidWZmZXJl ZCBkYXRhIHRoYW4gY2FuIGJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIGJ1dCB0aGF0J3MKPiArCSAq IG9ubHkgaW50ZXJlc3RpbmcgaWYgd2Ugd2VyZW4ndCBhYmxlIHRvIGNvcHkgc29tZSBkYXRhCj4g KwkgKiBiZWNhdXNlIGl0IGltcGxpZXMgdGhlIHVzZXJzcGFjZSBidWZmZXIgaXMgdG9vIHNtYWxs IHRvCj4gKwkgKiByZWNlaXZlIGEgc2luZ2xlIHJlY29yZCAoYW5kIHdlIG5ldmVyIHNwbGl0IHJl Y29yZHMpLgo+ICsJICoKPiArCSAqIEFub3RoZXIgY2FzZSB3aXRoIHJldCA9PSAtRUZBVUxUIGlz IG1vcmUgb2YgYSBncmV5IGFyZWEKPiArCSAqIHNpbmNlIGl0IHdvdWxkIHNlZW0gbGlrZSBiYWQg Zm9ybSBmb3IgdXNlcnNwYWNlIHRvIGFzayB1cwo+ICsJICogdG8gb3ZlcnJ1biBpdHMgYnVmZmVy LCBidXQgdGhlIHVzZXIga25vd3MgYmVzdDoKPiArCSAqCj4gKwkgKiAgIGh0dHA6Ly95YXJjaGl2 ZS5uZXQvY29tcC9saW51eC9wYXJ0aWFsX3JlYWRzX3dyaXRlcy5odG1sCj4gKwkgKi8KPiArCXJl dHVybiBvZmZzZXQgPzogKHJldCA/OiAtRUFHQUlOKTsKPiArfQo+ICsKPiArc3RhdGljIHNzaXpl X3QgaTkxNV9wZXJmX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCj4gKwkJCSAgICAgIGNoYXIgX191 c2VyICpidWYsCj4gKwkJCSAgICAgIHNpemVfdCBjb3VudCwKPiArCQkJICAgICAgbG9mZl90ICpw cG9zKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtID0gZmlsZS0+cHJp dmF0ZV9kYXRhOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFt LT5kZXZfcHJpdjsKPiArCXNzaXplX3QgcmV0Owo+ICsKPiArCWlmICghKGZpbGUtPmZfZmxhZ3Mg JiBPX05PTkJMT0NLKSkgewo+ICsJCS8qIEFsbG93IGZhbHNlIHBvc2l0aXZlcyBmcm9tIHN0cmVh bS0+b3BzLT53YWl0X3VubG9ja2VkLgo+ICsJCSAqLwo+ICsJCWRvIHsKPiArCQkJcmV0ID0gc3Ry ZWFtLT5vcHMtPndhaXRfdW5sb2NrZWQoc3RyZWFtKTsKPiArCQkJaWYgKHJldCkKPiArCQkJCXJl dHVybiByZXQ7Cj4gKwo+ICsJCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKClNo b3VsZCBpbnRlcnJ1cHRpYmxlIHZlcnNpb24gYmUgdXNlZCBoZXJlLCB0byBhbGxvdyBmb3IgcmVh ZHMgdG8gYmUKaW50ZXJydXB0ZWQ/Cj4gKwkJCXJldCA9IGk5MTVfcGVyZl9yZWFkX2xvY2tlZChz dHJlYW0sIGZpbGUsCj4gKwkJCQkJCSAgICBidWYsIGNvdW50LCBwcG9zKTsKPiArCQkJbXV0ZXhf dW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKPiArCQl9IHdoaWxlIChyZXQgPT0gLUVBR0FJ Tik7Cj4gKwl9IGVsc2Ugewo+ICsJCW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOwpM aWtld2lzZS4KCj4gKwkJcmV0ID0gaTkxNV9wZXJmX3JlYWRfbG9ja2VkKHN0cmVhbSwgZmlsZSwg YnVmLCBjb3VudCwgcHBvcyk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2Nr KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQg aW50IGk5MTVfcGVyZl9wb2xsX2xvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFt LAo+ICsJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUsCj4gKwkJCQkJICBwb2xsX3RhYmxlICp3YWl0 KQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgc3RyZWFtcyA9IDA7Cj4gKwo+ICsJc3RyZWFtLT5vcHMt PnBvbGxfd2FpdChzdHJlYW0sIGZpbGUsIHdhaXQpOwo+ICsKPiArCWlmIChzdHJlYW0tPm9wcy0+ Y2FuX3JlYWQoc3RyZWFtKSkKPiArCQlzdHJlYW1zIHw9IFBPTExJTjsKPiArCj4gKwlyZXR1cm4g c3RyZWFtczsKPiArfQo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGludCBpOTE1X3BlcmZfcG9sbChz dHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKPiArewo+ICsJc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOwpTYW1lIHF1ZXN0aW9uLiBD YW4gaW50ZXJydXB0aWJsZSB2ZXJzaW9ucyBiZSB1c2VkIGhlcmUsIGFuZCBsaWtld2lzZQpvdGhl ciBpbnN0YW5jZXMgaW4gdGhlIHBhdGNoPwoKPiArCXJldCA9IGk5MTVfcGVyZl9wb2xsX2xvY2tl ZChzdHJlYW0sIGZpbGUsIHdhaXQpOwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5s b2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOTE1X3Bl cmZfZW5hYmxlX2xvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICt7Cj4g KwlpZiAoc3RyZWFtLT5lbmFibGVkKQo+ICsJCXJldHVybjsKPiArCj4gKwkvKiBBbGxvdyBzdHJl YW0tPm9wcy0+ZW5hYmxlKCkgdG8gcmVmZXIgdG8gdGhpcyAqLwo+ICsJc3RyZWFtLT5lbmFibGVk ID0gdHJ1ZTsKPiArCj4gKwlpZiAoc3RyZWFtLT5vcHMtPmVuYWJsZSkKPiArCQlzdHJlYW0tPm9w cy0+ZW5hYmxlKHN0cmVhbSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGk5MTVfcGVyZl9kaXNh YmxlX2xvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICt7Cj4gKwlpZiAo IXN0cmVhbS0+ZW5hYmxlZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyogQWxsb3cgc3RyZWFtLT5v cHMtPmRpc2FibGUoKSB0byByZWZlciB0byB0aGlzICovCj4gKwlzdHJlYW0tPmVuYWJsZWQgPSBm YWxzZTsKPiArCj4gKwlpZiAoc3RyZWFtLT5vcHMtPmRpc2FibGUpCj4gKwkJc3RyZWFtLT5vcHMt PmRpc2FibGUoc3RyZWFtKTsKPiArfQo+ICsKPiArc3RhdGljIGxvbmcgaTkxNV9wZXJmX2lvY3Rs X2xvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICsJCQkJICAgdW5zaWdu ZWQgaW50IGNtZCwKPiArCQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQo+ICt7Cj4gKwlzd2l0Y2gg KGNtZCkgewo+ICsJY2FzZSBJOTE1X1BFUkZfSU9DVExfRU5BQkxFOgo+ICsJCWk5MTVfcGVyZl9l bmFibGVfbG9ja2VkKHN0cmVhbSk7Cj4gKwkJcmV0dXJuIDA7Cj4gKwljYXNlIEk5MTVfUEVSRl9J T0NUTF9ESVNBQkxFOgo+ICsJCWk5MTVfcGVyZl9kaXNhYmxlX2xvY2tlZChzdHJlYW0pOwo+ICsJ CXJldHVybiAwOwo+ICsJfQo+ICsKPiArCXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgbG9uZyBpOTE1X3BlcmZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCj4gKwkJCSAgICB1bnNp Z25lZCBpbnQgY21kLAo+ICsJCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCj4gK3sKPiArCXN0cnVj dCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owo+ICsJbG9u ZyByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7Cj4gKwlyZXQg PSBpOTE1X3BlcmZfaW9jdGxfbG9ja2VkKHN0cmVhbSwgY21kLCBhcmcpOwo+ICsJbXV0ZXhfdW5s b2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBpOTE1X3BlcmZfZGVzdHJveV9sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9z dHJlYW0gKnN0cmVhbSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gc3RyZWFtLT5kZXZfcHJpdjsKPiArCj4gKwlpZiAoc3RyZWFtLT5lbmFibGVkKQo+ICsJCWk5 MTVfcGVyZl9kaXNhYmxlX2xvY2tlZChzdHJlYW0pOwo+ICsKPiArCWlmIChzdHJlYW0tPm9wcy0+ ZGVzdHJveSkKPiArCQlzdHJlYW0tPm9wcy0+ZGVzdHJveShzdHJlYW0pOwo+ICsKPiArCWxpc3Rf ZGVsKCZzdHJlYW0tPmxpbmspOwo+ICsKPiArCWlmIChzdHJlYW0tPmN0eCkgewo+ICsJCW11dGV4 X2xvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKPiArCQlpOTE1X2dlbV9jb250ZXh0 X3B1dChzdHJlYW0tPmN0eCk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVj dF9tdXRleCk7Cj4gKwl9Cj4gKwo+ICsJa2ZyZWUoc3RyZWFtKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBpOTE1X3BlcmZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAq ZmlsZSkKPiArewo+ICsJc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSA9IGZpbGUtPnBy aXZhdGVfZGF0YTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVh bS0+ZGV2X3ByaXY7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7Cj4g KwlpOTE1X3BlcmZfZGVzdHJveV9sb2NrZWQoc3RyZWFtKTsKPiArCW11dGV4X3VubG9jaygmZGV2 X3ByaXYtPnBlcmYubG9jayk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewo+ICsJLm93bmVyCQk9IFRI SVNfTU9EVUxFLAo+ICsJLmxsc2VlawkJPSBub19sbHNlZWssCj4gKwkucmVsZWFzZQk9IGk5MTVf cGVyZl9yZWxlYXNlLAo+ICsJLnBvbGwJCT0gaTkxNV9wZXJmX3BvbGwsCj4gKwkucmVhZAkJPSBp OTE1X3BlcmZfcmVhZCwKPiArCS51bmxvY2tlZF9pb2N0bAk9IGk5MTVfcGVyZl9pb2N0bCwKPiAr fTsKPiArCj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKgo+ICtsb29rdXBf Y29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkgICAgICAgc3Ry dWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2LAo+ICsJICAgICAgIHUzMiBjdHhf dXNlcl9oYW5kbGUpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXZf cHJpdi0+ZHJtKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCj4g KwljdHggPSBpOTE1X2dlbV9jb250ZXh0X2xvb2t1cChmaWxlX3ByaXYsIGN0eF91c2VyX2hhbmRs ZSk7Cj4gKwlpZiAoIUlTX0VSUihjdHgpKQo+ICsJCWk5MTVfZ2VtX2NvbnRleHRfZ2V0KGN0eCk7 Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwo+ ICsJcmV0dXJuIGN0eDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtpOTE1X3BlcmZfb3Blbl9p b2N0bF9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkgICAg c3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSAqcGFyYW0sCj4gKwkJCSAgICBzdHJ1Y3Qg cGVyZl9vcGVuX3Byb3BlcnRpZXMgKnByb3BzLAo+ICsJCQkgICAgc3RydWN0IGRybV9maWxlICpm aWxlKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqc3BlY2lmaWNfY3R4ID0gTlVM TDsKPiArCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0gPSBOVUxMOwo+ICsJdW5zaWdu ZWQgbG9uZyBmX2ZsYWdzID0gMDsKPiArCWludCBzdHJlYW1fZmQ7Cj4gKwlpbnQgcmV0Owo+ICsK PiArCWlmIChwcm9wcy0+c2luZ2xlX2NvbnRleHQpIHsKPiArCQl1MzIgY3R4X2hhbmRsZSA9IHBy b3BzLT5jdHhfaGFuZGxlOwo+ICsJCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVf cHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2Owo+ICsKPiArCQlzcGVjaWZpY19jdHggPSBsb29rdXBf Y29udGV4dChkZXZfcHJpdiwgZmlsZV9wcml2LCBjdHhfaGFuZGxlKTsKPiArCQlpZiAoSVNfRVJS KHNwZWNpZmljX2N0eCkpIHsKPiArCQkJcmV0ID0gUFRSX0VSUihzcGVjaWZpY19jdHgpOwo+ICsJ CQlpZiAocmV0ICE9IC1FSU5UUikKPiArCQkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGxvb2sgdXAg Y29udGV4dCB3aXRoIElEICV1IGZvciBvcGVuaW5nIHBlcmYgc3RyZWFtXG4iLAo+ICsJCQkJCSAg Y3R4X2hhbmRsZSk7Cj4gKwkJCWdvdG8gZXJyOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIXNw ZWNpZmljX2N0eCAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewo+ICsJCURSTV9FUlJPUigi SW5zdWZmaWNpZW50IHByaXZpbGVnZXMgdG8gb3BlbiBzeXN0ZW0td2lkZSBpOTE1IHBlcmYgc3Ry ZWFtXG4iKTsKPiArCQlyZXQgPSAtRUFDQ0VTOwo+ICsJCWdvdG8gZXJyX2N0eDsKPiArCX0KPiAr Cj4gKwlzdHJlYW0gPSBremFsbG9jKHNpemVvZigqc3RyZWFtKSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIXN0cmVhbSkgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfY3R4Owo+ICsJ fQo+ICsKPiArCXN0cmVhbS0+c2FtcGxlX2ZsYWdzID0gcHJvcHMtPnNhbXBsZV9mbGFnczsKPiAr CXN0cmVhbS0+ZGV2X3ByaXYgPSBkZXZfcHJpdjsKPiArCXN0cmVhbS0+Y3R4ID0gc3BlY2lmaWNf Y3R4Owo+ICsKPiArCS8qCj4gKwkgKiBUT0RPOiBzdXBwb3J0IHNhbXBsaW5nIHNvbWV0aGluZwo+ ICsJICoKPiArCSAqIEZvciBub3cgdGhpcyBpcyBhcyBmYXIgYXMgd2UgY2FuIGdvLgo+ICsJICov Cj4gKwlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIGk5MTUgcGVyZiBzdHJlYW0gY29uZmlndXJhdGlv blxuIik7Cj4gKwlyZXQgPSAtRUlOVkFMOwo+ICsJZ290byBlcnJfYWxsb2M7Cj4gKwo+ICsJbGlz dF9hZGQoJnN0cmVhbS0+bGluaywgJmRldl9wcml2LT5wZXJmLnN0cmVhbXMpOwo+ICsKPiArCWlm IChwYXJhbS0+ZmxhZ3MgJiBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDKQo+ICsJCWZfZmxhZ3Mg fD0gT19DTE9FWEVDOwo+ICsJaWYgKHBhcmFtLT5mbGFncyAmIEk5MTVfUEVSRl9GTEFHX0ZEX05P TkJMT0NLKQo+ICsJCWZfZmxhZ3MgfD0gT19OT05CTE9DSzsKPiArCj4gKwlzdHJlYW1fZmQgPSBh bm9uX2lub2RlX2dldGZkKCJbaTkxNV9wZXJmXSIsICZmb3BzLCBzdHJlYW0sIGZfZmxhZ3MpOwo+ ICsJaWYgKHN0cmVhbV9mZCA8IDApIHsKPiArCQlyZXQgPSBzdHJlYW1fZmQ7Cj4gKwkJZ290byBl cnJfb3BlbjsKPiArCX0KPiArCj4gKwlpZiAoIShwYXJhbS0+ZmxhZ3MgJiBJOTE1X1BFUkZfRkxB R19ESVNBQkxFRCkpCj4gKwkJaTkxNV9wZXJmX2VuYWJsZV9sb2NrZWQoc3RyZWFtKTsKPiArCj4g KwlyZXR1cm4gc3RyZWFtX2ZkOwo+ICsKPiArZXJyX29wZW46Cj4gKwlsaXN0X2RlbCgmc3RyZWFt LT5saW5rKTsKPiArCWlmIChzdHJlYW0tPm9wcy0+ZGVzdHJveSkKPiArCQlzdHJlYW0tPm9wcy0+ ZGVzdHJveShzdHJlYW0pOwo+ICtlcnJfYWxsb2M6Cj4gKwlrZnJlZShzdHJlYW0pOwo+ICtlcnJf Y3R4Ogo+ICsJaWYgKHNwZWNpZmljX2N0eCkgewo+ICsJCW11dGV4X2xvY2soJmRldl9wcml2LT5k cm0uc3RydWN0X211dGV4KTsKPiArCQlpOTE1X2dlbV9jb250ZXh0X3B1dChzcGVjaWZpY19jdHgp Owo+ICsJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJfQo+ ICtlcnI6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKiBOb3RlIHdlIGNvcHkgdGhlIHBy b3BlcnRpZXMgZnJvbSB1c2Vyc3BhY2Ugb3V0c2lkZSBvZiB0aGUgaTkxNSBwZXJmCj4gKyAqIG11 dGV4IHRvIGF2b2lkIGFuIGF3a3dhcmQgbG9ja2RlcCB3aXRoIG1tYXBfc2VtLgo+ICsgKgo+ICsg KiBOb3RlIHRoaXMgZnVuY3Rpb24gb25seSB2YWxpZGF0ZXMgcHJvcGVydGllcyBpbiBpc29sYXRp b24gaXQgZG9lc24ndAo+ICsgKiB2YWxpZGF0ZSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBwcm9w ZXJ0aWVzIG1ha2VzIHNlbnNlIG9yIHRoYXQgYWxsCj4gKyAqIHByb3BlcnRpZXMgbmVjZXNzYXJ5 IGZvciBhIHBhcnRpY3VsYXIga2luZCBvZiBzdHJlYW0gaGF2ZSBiZWVuIHNldC4KPiArICovCj4g K3N0YXRpYyBpbnQgcmVhZF9wcm9wZXJ0aWVzX3VubG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgICB1NjQgX191c2VyICp1cHJvcHMsCj4gKwkJCQkgICAg dTMyIG5fcHJvcHMsCj4gKwkJCQkgICAgc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVzICpwcm9w cykKPiArewo+ICsJdTY0IF9fdXNlciAqdXByb3AgPSB1cHJvcHM7Cj4gKwlpbnQgaTsKPiArCj4g KwltZW1zZXQocHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgcGVyZl9vcGVuX3Byb3BlcnRpZXMpKTsK PiArCj4gKwlpZiAoIW5fcHJvcHMpIHsKPiArCQlEUk1fRVJST1IoIk5vIGk5MTUgcGVyZiBwcm9w ZXJ0aWVzIGdpdmVuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKG5f cHJvcHMgPiBEUk1fSTkxNV9QRVJGX1BST1BfTUFYKSB7Cj4gKwkJRFJNX0VSUk9SKCJNb3JlIGk5 MTUgcGVyZiBwcm9wZXJ0aWVzIHNwZWNpZmllZCB0aGFuIGV4aXN0Iik7Cj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG5fcHJvcHM7IGkrKykgewo+ICsJ CXU2NCBpZCwgdmFsdWU7Cj4gKwkJaW50IHJldDsKPiArCj4gKwkJcmV0ID0gZ2V0X3VzZXIoaWQs IHVwcm9wKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQlyZXQgPSBn ZXRfdXNlcih2YWx1ZSwgdXByb3AgKyAxKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0 Owo+ICsKPiArCQlzd2l0Y2ggKChlbnVtIGRybV9pOTE1X3BlcmZfcHJvcGVydHlfaWQpaWQpIHsK PiArCQljYXNlIERSTV9JOTE1X1BFUkZfUFJPUF9DVFhfSEFORExFOgo+ICsJCQlwcm9wcy0+c2lu Z2xlX2NvbnRleHQgPSAxOwo+ICsJCQlwcm9wcy0+Y3R4X2hhbmRsZSA9IHZhbHVlOwo+ICsJCQli cmVhazsKPiArCQlkZWZhdWx0Ogo+ICsJCQlNSVNTSU5HX0NBU0UoaWQpOwo+ICsJCQlEUk1fRVJS T1IoIlVua25vd24gaTkxNSBwZXJmIHByb3BlcnR5IElEIik7Cj4gKwkJCXJldHVybiAtRUlOVkFM Owo+ICsJCX0KPiArCj4gKwkJdXByb3AgKz0gMjsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiAraW50IGk5MTVfcGVyZl9vcGVuX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEsCj4gKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtICpwYXJhbSA9IGRhdGE7Cj4gKwlzdHJ1Y3QgcGVy Zl9vcGVuX3Byb3BlcnRpZXMgcHJvcHM7Cj4gKwl1MzIga25vd25fb3Blbl9mbGFnczsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJaWYgKCFkZXZfcHJpdi0+cGVyZi5pbml0aWFsaXplZCkgewo+ICsJCURS TV9FUlJPUigiaTkxNSBwZXJmIGludGVyZmFjZSBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHN5c3Rl bSIpOwo+ICsJCXJldHVybiAtRU5PVFNVUFA7Cj4gKwl9Cj4gKwo+ICsJa25vd25fb3Blbl9mbGFn cyA9IEk5MTVfUEVSRl9GTEFHX0ZEX0NMT0VYRUMgfAo+ICsJCQkgICBJOTE1X1BFUkZfRkxBR19G RF9OT05CTE9DSyB8Cj4gKwkJCSAgIEk5MTVfUEVSRl9GTEFHX0RJU0FCTEVEOwo+ICsJaWYgKHBh cmFtLT5mbGFncyAmIH5rbm93bl9vcGVuX2ZsYWdzKSB7Cj4gKwkJRFJNX0VSUk9SKCJVbmtub3du IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSBmbGFnXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCX0KPiArCj4gKwlyZXQgPSByZWFkX3Byb3BlcnRpZXNfdW5sb2NrZWQoZGV2X3ByaXYsCj4g KwkJCQkgICAgICAgdTY0X3RvX3VzZXJfcHRyKHBhcmFtLT5wcm9wZXJ0aWVzX3B0ciksCj4gKwkJ CQkgICAgICAgcGFyYW0tPm51bV9wcm9wZXJ0aWVzLAo+ICsJCQkJICAgICAgICZwcm9wcyk7Cj4g KwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZGV2X3ByaXYt PnBlcmYubG9jayk7Cj4gKwlyZXQgPSBpOTE1X3BlcmZfb3Blbl9pb2N0bF9sb2NrZWQoZGV2X3By aXYsIHBhcmFtLCAmcHJvcHMsIGZpbGUpOwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVy Zi5sb2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICt2b2lkIGk5MTVfcGVyZl9p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJSU5JVF9MSVNU X0hFQUQoJmRldl9wcml2LT5wZXJmLnN0cmVhbXMpOwo+ICsJbXV0ZXhfaW5pdCgmZGV2X3ByaXYt PnBlcmYubG9jayk7Cj4gKwo+ICsJZGV2X3ByaXYtPnBlcmYuaW5pdGlhbGl6ZWQgPSB0cnVlOwo+ ICt9Cj4gKwo+ICt2b2lkIGk5MTVfcGVyZl9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiArewo+ICsJaWYgKCFkZXZfcHJpdi0+cGVyZi5pbml0aWFsaXplZCkKPiArCQly ZXR1cm47Cj4gKwo+ICsJLyogQ3VycmVudGx5IG5vdGhpbmcgdG8gY2xlYW4gdXAgKi8KPiArCj4g KwlkZXZfcHJpdi0+cGVyZi5pbml0aWFsaXplZCA9IGZhbHNlOwo+ICt9Cj4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0u aAo+IGluZGV4IDAzNzI1ZmUuLjk4Y2Q0OTMgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2Ry bS9pOTE1X2RybS5oCj4gKysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gQEAgLTI1 OCw2ICsyNTgsNyBAQCB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgewo+ICAjZGVmaW5l IERSTV9JOTE1X0dFTV9VU0VSUFRSCQkweDMzCj4gICNkZWZpbmUgRFJNX0k5MTVfR0VNX0NPTlRF WFRfR0VUUEFSQU0JMHgzNAo+ICAjZGVmaW5lIERSTV9JOTE1X0dFTV9DT05URVhUX1NFVFBBUkFN CTB4MzUKPiArI2RlZmluZSBEUk1fSTkxNV9QRVJGX09QRU4JCTB4MzYKPiAgCj4gICNkZWZpbmUg RFJNX0lPQ1RMX0k5MTVfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1 X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKPiAgI2RlZmluZSBEUk1fSU9DVExfSTkxNV9GTFVTSAkJ RFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0ZMVVNIKQo+IEBAIC0zMTEsNiAr MzEyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X3NhcmVhIHsKPiAgI2RlZmluZSBEUk1f SU9DVExfSTkxNV9HRU1fVVNFUlBUUgkJCURSTV9JT1dSIChEUk1fQ09NTUFORF9CQVNFICsgRFJN X0k5MTVfR0VNX1VTRVJQVFIsIHN0cnVjdCBkcm1faTkxNV9nZW1fdXNlcnB0cikKPiAgI2RlZmlu ZSBEUk1fSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9HRVRQQVJBTQlEUk1fSU9XUiAoRFJNX0NPTU1B TkRfQkFTRSArIERSTV9JOTE1X0dFTV9DT05URVhUX0dFVFBBUkFNLCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2NvbnRleHRfcGFyYW0pCj4gICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRf U0VUUEFSQU0JRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fQ09OVEVY VF9TRVRQQVJBTSwgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtKQo+ICsjZGVmaW5l IERSTV9JT0NUTF9JOTE1X1BFUkZfT1BFTglEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1f STkxNV9QRVJGX09QRU4sIHN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFyYW0pCj4gIAo+ICAv KiBBbGxvdyBkcml2ZXJzIHRvIHN1Ym1pdCBiYXRjaGJ1ZmZlcnMgZGlyZWN0bHkgdG8gaGFyZHdh cmUsIHJlbHlpbmcKPiAgICogb24gdGhlIHNlY3VyaXR5IG1lY2hhbmlzbXMgcHJvdmlkZWQgYnkg aGFyZHdhcmUuCj4gQEAgLTEyMjIsNiArMTIyNCw3MSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2Nv bnRleHRfcGFyYW0gewo+ICAJX191NjQgdmFsdWU7Cj4gIH07Cj4gIAo+ICtlbnVtIGRybV9pOTE1 X3BlcmZfcHJvcGVydHlfaWQgewo+ICsJLyoqCj4gKwkgKiBPcGVuIHRoZSBzdHJlYW0gZm9yIGEg c3BlY2lmaWMgY29udGV4dCBoYW5kbGUgKGFzIHVzZWQgd2l0aAo+ICsJICogZXhlY2J1ZmZlcjIp LiBBIHN0cmVhbSBvcGVuZWQgZm9yIGEgc3BlY2lmaWMgY29udGV4dCB0aGlzIHdheQo+ICsJICog d29uJ3QgdHlwaWNhbGx5IHJlcXVpcmUgcm9vdCBwcml2aWxlZ2VzLgo+ICsJICovCj4gKwlEUk1f STkxNV9QRVJGX1BST1BfQ1RYX0hBTkRMRSA9IDEsCj4gKwo+ICsJRFJNX0k5MTVfUEVSRl9QUk9Q X01BWCAvKiBub24tQUJJICovCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vcGVu X3BhcmFtIHsKPiArCV9fdTMyIGZsYWdzOwo+ICsjZGVmaW5lIEk5MTVfUEVSRl9GTEFHX0ZEX0NM T0VYRUMJKDE8PDApCj4gKyNkZWZpbmUgSTkxNV9QRVJGX0ZMQUdfRkRfTk9OQkxPQ0sJKDE8PDEp Cj4gKyNkZWZpbmUgSTkxNV9QRVJGX0ZMQUdfRElTQUJMRUQJCSgxPDwyKQo+ICsKPiArCS8qKiBU aGUgbnVtYmVyIG9mIHU2NCAoaWQsIHZhbHVlKSBwYWlycyAqLwo+ICsJX191MzIgbnVtX3Byb3Bl cnRpZXM7Cj4gKwo+ICsJLyoqCj4gKwkgKiBQb2ludGVyIHRvIGFycmF5IG9mIHU2NCAoaWQsIHZh bHVlKSBwYWlycyBjb25maWd1cmluZyB0aGUgc3RyZWFtCj4gKwkgKiB0byBvcGVuLgo+ICsJICov Cj4gKwlfX3U2NCBfX3VzZXIgcHJvcGVydGllc19wdHI7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIEk5 MTVfUEVSRl9JT0NUTF9FTkFCTEUJX0lPKCdpJywgMHgwKQo+ICsjZGVmaW5lIEk5MTVfUEVSRl9J T0NUTF9ESVNBQkxFCV9JTygnaScsIDB4MSkKPiArCj4gKy8qKgo+ICsgKiBDb21tb24gdG8gYWxs IGk5MTUgcGVyZiByZWNvcmRzCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9yZWNvcmRf aGVhZGVyIHsKPiArCV9fdTMyIHR5cGU7Cj4gKwlfX3UxNiBwYWQ7Cj4gKwlfX3UxNiBzaXplOwo+ ICt9Owo+ICsKPiArZW51bSBkcm1faTkxNV9wZXJmX3JlY29yZF90eXBlIHsKPiArCj4gKwkvKioK PiArCSAqIFNhbXBsZXMgYXJlIHRoZSB3b3JrIGhvcnNlIHJlY29yZCB0eXBlIHdob3NlIGNvbnRl bnRzIGFyZSBleHRlbnNpYmxlCj4gKwkgKiBhbmQgZGVmaW5lZCB3aGVuIG9wZW5pbmcgYW4gaTkx NSBwZXJmIHN0cmVhbSBiYXNlZCBvbiB0aGUgZ2l2ZW4KPiArCSAqIHByb3BlcnRpZXMuCj4gKwkg Kgo+ICsJICogQm9vbGVhbiBwcm9wZXJ0aWVzIGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRp b24KPiArCSAqIERSTV9JOTE1X1BFUkZfU0FNUExFX3h5el9QUk9QIHJlcXVlc3QgdGhlIGluY2x1 c2lvbiBvZiAneHl6JyBkYXRhIGluCj4gKwkgKiBldmVyeSBzYW1wbGUuCj4gKwkgKgo+ICsJICog VGhlIG9yZGVyIG9mIHRoZXNlIHNhbXBsZSBwcm9wZXJ0aWVzIGdpdmVuIGJ5IHVzZXJzcGFjZSBo YXMgbm8KPiArCSAqIGFmZmVjdCBvbiB0aGUgb3JkZXJpbmcgb2YgZGF0YSB3aXRoaW4gYSBzYW1w bGUuIFRoZSBvcmRlciB3aWxsIGJlCj4gKwkgKiBkb2N1bWVudGVkIGhlcmUuCj4gKwkgKgo+ICsJ ICogc3RydWN0IHsKPiArCSAqICAgICBzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9yZWNvcmRfaGVhZGVy IGhlYWRlcjsKPiArCSAqCj4gKwkgKiAgICAgVE9ETzogaXRlbWl6ZSBleHRlbnNpYmxlIHNhbXBs ZSBkYXRhIGhlcmUKPiArCSAqIH07Cj4gKwkgKi8KPiArCURSTV9JOTE1X1BFUkZfUkVDT1JEX1NB TVBMRSA9IDEsCj4gKwo+ICsJRFJNX0k5MTVfUEVSRl9SRUNPUkRfTUFYIC8qIG5vbi1BQkkgKi8K PiArfTsKPiArCj4gICNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQo+ICB9Cj4gICNlbmRpZgoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=