From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH v5 1/2] drm/i915: Tidy workaround batch buffer emission Date: Thu, 16 Feb 2017 13:54:02 +0000 Message-ID: <20170216135402.28433-1-tvrtko.ursulin@linux.intel.com> References: <20170216135119.22816-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 806196EB2D for ; Thu, 16 Feb 2017 13:54:11 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id c85so3256881wmi.1 for ; Thu, 16 Feb 2017 05:54:11 -0800 (PST) In-Reply-To: <20170216135119.22816-1-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClVzZSB0aGUg IipiYXRjaCsrID0gIiBzdHlsZSBhcyBpbiB0aGUgcmluZyBlbWlzc2lvbiBmb3IgYmV0dGVyCnJl YWRhYmlsaXR5IGFuZCBhbHNvIHNpbXBsaWZ5IHRoZSBsb2dpYyBhIGJpdCBieSBjb25zb2xpZGF0 aW5nCnRoZSBvZmZzZXQgYW5kIHNpemUgY2FsY3VsYXRpb25zIGFuZCBvdmVyZmxvdyBjaGVja2lu Zy4gVGhlCmxhdHRlciBpcyBhIHByb2dyYW1taW5nIGVycm9yIHNvIGl0IGlzIG5vdCByZXF1aXJl ZCB0byBjaGVjawpmb3IgaXQgYWZ0ZXIgZWFjaCB3cml0ZSB0byB0aGUgb2JqZWN0LCBidXQgcmF0 aGVyIGRvIGl0IG9uY2UgdGhlCndob2xlIHN0YXRlIGhhcyBiZWVuIHdyaXR0ZW4gYW5kIGZhaWwg dGhlIGRyaXZlciBpZiBzb21ldGhpbmcKd2VudCB3cm9uZy4KCnYyOiBSZWJhc2UuCgp2MzogS2Vl cCB0cmFjayBvZiBvZmZzZXRzIGFuZCBzaXplcyBpbiBieXRlcyBmb3Igc2ltcGxpY2l0eQogICAg YW5kIHJlbmFtZSBmdW5jdGlvbiBwb2ludGVyIHZhcmlhYmxlIHRvIF9mbiBzdWZmaXguCiAgICAo Q2hyaXMgV2lsc29uKQoKdjQ6IEZpeCBzaXplIGNhbGMgYnJva2VuIGluIHYzIGFuZCBhZGQgYWxp Z25tZW50IHdhcm5pbmcuIChDaHJpcyBXaWxzb24pCgp2NTogRml4IHJldHVybiBjb2RlLgoKU2ln bmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KUmV2 aWV3ZWQtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPiAodjIpCkNj OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9scmMuYyB8IDMxNCArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMTQgaW5zZXJ0aW9ucygrKSwgMjAwIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKaW5kZXggZWU0MzFkMzljZTA2Li40YzJk ZmFkYjk4ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC04OTAsMTggKzg5MCw2IEBA IHN0YXRpYyBpbnQgZXhlY2xpc3RzX3JlcXVlc3RfYWxsb2Moc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpyZXF1ZXN0KQogCXJldHVybiByZXQ7CiB9CiAKLSNkZWZpbmUgd2FfY3R4X2VtaXQo YmF0Y2gsIGluZGV4LCBjbWQpCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpbnQgX19pbmRleCA9 IChpbmRleCkrKzsJCQkJXAotCQlpZiAoV0FSTl9PTihfX2luZGV4ID49IChQQUdFX1NJWkUgLyBz aXplb2YodWludDMyX3QpKSkpIHsgXAotCQkJcmV0dXJuIC1FTk9TUEM7CQkJCQlcCi0JCX0JCQkJ CQkJXAotCQliYXRjaFtfX2luZGV4XSA9IChjbWQpOwkJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNk ZWZpbmUgd2FfY3R4X2VtaXRfcmVnKGJhdGNoLCBpbmRleCwgcmVnKSBcCi0Jd2FfY3R4X2VtaXQo KGJhdGNoKSwgKGluZGV4KSwgaTkxNV9tbWlvX3JlZ19vZmZzZXQocmVnKSkKLQogLyoKICAqIElu IHRoaXMgV0Egd2UgbmVlZCB0byBzZXQgR0VOOF9MM1NRQ1JFRzRbMjE6MjFdIGFuZCByZXNldCBp dCBhZnRlcgogICogUElQRV9DT05UUk9MIGluc3RydWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZv ciB0aGUgZmx1c2ggdG8gaGFwcGVuIGNvcnJlY3RseQpAQCAtOTE4LDU2ICs5MDYsMzEgQEAgc3Rh dGljIGludCBleGVjbGlzdHNfcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcXVlc3QpCiAgKiBUaGlzIFdBIGlzIGFsc28gcmVxdWlyZWQgZm9yIEdlbjkgc28gZXh0 cmFjdGluZyBhcyBhIGZ1bmN0aW9uIGF2b2lkcwogICogY29kZSBkdXBsaWNhdGlvbi4KICAqLwot c3RhdGljIGlubGluZSBpbnQgZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2Eoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCQkJdWludDMyX3QgKmJhdGNoLAotCQkJCQkJdWlu dDMyX3QgaW5kZXgpCi17Ci0JdWludDMyX3QgbDNzcWM0X2ZsdXNoID0gKDB4NDA0MDAwMDAgfCBH RU44X0xRU0NfRkxVU0hfQ09IRVJFTlRfTElORVMpOwotCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGlu ZGV4LCAoTUlfU1RPUkVfUkVHSVNURVJfTUVNX0dFTjggfAotCQkJCSAgIE1JX1NSTV9MUk1fR0xP QkFMX0dUVCkpOwotCXdhX2N0eF9lbWl0X3JlZyhiYXRjaCwgaW5kZXgsIEdFTjhfTDNTUUNSRUc0 KTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIGk5MTVfZ2d0dF9vZmZzZXQoZW5naW5lLT5z Y3JhdGNoKSArIDI1Nik7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKLQotCXdhX2N0 eF9lbWl0KGJhdGNoLCBpbmRleCwgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOwotCXdhX2N0eF9l bWl0X3JlZyhiYXRjaCwgaW5kZXgsIEdFTjhfTDNTUUNSRUc0KTsKLQl3YV9jdHhfZW1pdChiYXRj aCwgaW5kZXgsIGwzc3FjNF9mbHVzaCk7Ci0KLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIEdG WF9PUF9QSVBFX0NPTlRST0woNikpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgKFBJUEVf Q09OVFJPTF9DU19TVEFMTCB8Ci0JCQkJICAgUElQRV9DT05UUk9MX0RDX0ZMVVNIX0VOQUJMRSkp OwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGlu ZGV4LCAwKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCXdhX2N0eF9lbWl0KGJh dGNoLCBpbmRleCwgMCk7Ci0KLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIChNSV9MT0FEX1JF R0lTVEVSX01FTV9HRU44IHwKLQkJCQkgICBNSV9TUk1fTFJNX0dMT0JBTF9HVFQpKTsKLQl3YV9j dHhfZW1pdF9yZWcoYmF0Y2gsIGluZGV4LCBHRU44X0wzU1FDUkVHNCk7Ci0Jd2FfY3R4X2VtaXQo YmF0Y2gsIGluZGV4LCBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRjaCkgKyAyNTYpOwot CXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0KLQlyZXR1cm4gaW5kZXg7Ci19Ci0KLXN0 YXRpYyBpbmxpbmUgdWludDMyX3Qgd2FfY3R4X3N0YXJ0KHN0cnVjdCBpOTE1X3dhX2N0eF9iYiAq d2FfY3R4LAotCQkJCSAgICB1aW50MzJfdCBvZmZzZXQsCi0JCQkJICAgIHVpbnQzMl90IHN0YXJ0 X2FsaWdubWVudCkKK3N0YXRpYyB1MzIgKgorZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2Eo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKQogewotCXJldHVybiB3 YV9jdHgtPm9mZnNldCA9IEFMSUdOKG9mZnNldCwgc3RhcnRfYWxpZ25tZW50KTsKLX0KLQotc3Rh dGljIGlubGluZSBpbnQgd2FfY3R4X2VuZChzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2N0eCwK LQkJCSAgICAgdWludDMyX3Qgb2Zmc2V0LAotCQkJICAgICB1aW50MzJfdCBzaXplX2FsaWdubWVu dCkKLXsKLQl3YV9jdHgtPnNpemUgPSBvZmZzZXQgLSB3YV9jdHgtPm9mZnNldDsKLQotCVdBUk4o d2FfY3R4LT5zaXplICUgc2l6ZV9hbGlnbm1lbnQsCi0JICAgICAid2FfY3R4X2JiIGZhaWxlZCBz YW5pdHkgY2hlY2tzOiBzaXplICVkIGlzIG5vdCBhbGlnbmVkIHRvICVkXG4iLAotCSAgICAgd2Ff Y3R4LT5zaXplLCBzaXplX2FsaWdubWVudCk7Ci0JcmV0dXJuIDA7CisJKmJhdGNoKysgPSBNSV9T VE9SRV9SRUdJU1RFUl9NRU1fR0VOOCB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsKKwkqYmF0Y2gr KyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfTDNTUUNSRUc0KTsKKwkqYmF0Y2grKyA9IGk5 MTVfZ2d0dF9vZmZzZXQoZW5naW5lLT5zY3JhdGNoKSArIDI1NjsKKwkqYmF0Y2grKyA9IDA7CisK KwkqYmF0Y2grKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDEpOworCSpiYXRjaCsrID0gaTkxNV9t bWlvX3JlZ19vZmZzZXQoR0VOOF9MM1NRQ1JFRzQpOworCSpiYXRjaCsrID0gMHg0MDQwMDAwMCB8 IEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVOVF9MSU5FUzsKKworCSpiYXRjaCsrID0gR0ZYX09QX1BJ UEVfQ09OVFJPTCg2KTsKKwkqYmF0Y2grKyA9IFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8IFBJUEVf Q09OVFJPTF9EQ19GTFVTSF9FTkFCTEU7CisJKmJhdGNoKysgPSAwOworCSpiYXRjaCsrID0gMDsK KwkqYmF0Y2grKyA9IDA7CisJKmJhdGNoKysgPSAwOworCisJKmJhdGNoKysgPSBNSV9MT0FEX1JF R0lTVEVSX01FTV9HRU44IHwgTUlfU1JNX0xSTV9HTE9CQUxfR1RUOworCSpiYXRjaCsrID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9MM1NRQ1JFRzQpOworCSpiYXRjaCsrID0gaTkxNV9nZ3R0 X29mZnNldChlbmdpbmUtPnNjcmF0Y2gpICsgMjU2OworCSpiYXRjaCsrID0gMDsKKworCXJldHVy biBiYXRjaDsKIH0KIAogLyoKQEAgLTk4NSw0MiArOTQ4LDI4IEBAIHN0YXRpYyBpbmxpbmUgaW50 IHdhX2N0eF9lbmQoc3RydWN0IGk5MTVfd2FfY3R4X2JiICp3YV9jdHgsCiAgKiBNSV9CQVRDSF9C VUZGRVJfRU5EIHdpbGwgYmUgYWRkZWQgdG8gcGVyY3R4IGJhdGNoIGFuZCBib3RoIG9mIHRoZW0g dG9nZXRoZXIKICAqIG1ha2VzIGEgY29tcGxldGUgYmF0Y2ggYnVmZmVyLgogICovCi1zdGF0aWMg aW50IGdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsCi0JCQkJICAgIHN0cnVjdCBpOTE1X3dhX2N0eF9iYiAqd2FfY3R4LAotCQkJCSAgICB1aW50 MzJfdCAqYmF0Y2gsCi0JCQkJICAgIHVpbnQzMl90ICpvZmZzZXQpCitzdGF0aWMgdTMyICpnZW44 X2luaXRfaW5kaXJlY3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIg KmJhdGNoKQogewotCXVpbnQzMl90IHNjcmF0Y2hfYWRkcjsKLQl1aW50MzJfdCBpbmRleCA9IHdh X2N0eF9zdGFydCh3YV9jdHgsICpvZmZzZXQsIENBQ0hFTElORV9EV09SRFMpOwotCiAJLyogV2FE aXNhYmxlQ3R4UmVzdG9yZUFyYml0cmF0aW9uOmJkdyxjaHYgKi8KLQl3YV9jdHhfZW1pdChiYXRj aCwgaW5kZXgsIE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRElTQUJMRSk7CisJKmJhdGNoKysgPSBN SV9BUkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FCTEU7CiAKIAkvKiBXYUZsdXNoQ29oZXJlbnRMM0Nh Y2hlTGluZXNBdENvbnRleHRTd2l0Y2g6YmR3ICovCi0JaWYgKElTX0JST0FEV0VMTChlbmdpbmUt Pmk5MTUpKSB7Ci0JCWludCByYyA9IGdlbjhfZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKGVuZ2lu ZSwgYmF0Y2gsIGluZGV4KTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKLQkJaW5kZXgg PSByYzsKLQl9CisJaWYgKElTX0JST0FEV0VMTChlbmdpbmUtPmk5MTUpKQorCQliYXRjaCA9IGdl bjhfZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKGVuZ2luZSwgYmF0Y2gpOwogCisJKmJhdGNoKysg PSBHRlhfT1BfUElQRV9DT05UUk9MKDYpOworCSpiYXRjaCsrID0gUElQRV9DT05UUk9MX0ZMVVNI X0wzIHwgUElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCIHwKKwkJICAgUElQRV9DT05UUk9MX0NT X1NUQUxMIHwgUElQRV9DT05UUk9MX1FXX1dSSVRFOwogCS8qIFdhQ2xlYXJTbG1TcGFjZUF0Q29u dGV4dFN3aXRjaDpiZHcsY2h2ICovCiAJLyogQWN0dWFsIHNjcmF0Y2ggbG9jYXRpb24gaXMgYXQg MTI4IGJ5dGVzIG9mZnNldCAqLwotCXNjcmF0Y2hfYWRkciA9IGk5MTVfZ2d0dF9vZmZzZXQoZW5n aW5lLT5zY3JhdGNoKSArIDIgKiBDQUNIRUxJTkVfQllURVM7Ci0KLQl3YV9jdHhfZW1pdChiYXRj aCwgaW5kZXgsIEdGWF9PUF9QSVBFX0NPTlRST0woNikpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBp bmRleCwgKFBJUEVfQ09OVFJPTF9GTFVTSF9MMyB8Ci0JCQkJICAgUElQRV9DT05UUk9MX0dMT0JB TF9HVFRfSVZCIHwKLQkJCQkgICBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfAotCQkJCSAgIFBJUEVf Q09OVFJPTF9RV19XUklURSkpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgc2NyYXRjaF9h ZGRyKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCXdhX2N0eF9lbWl0KGJhdGNo LCBpbmRleCwgMCk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKKwkqYmF0Y2grKyA9 IGk5MTVfZ2d0dF9vZmZzZXQoZW5naW5lLT5zY3JhdGNoKSArIDIgKiBDQUNIRUxJTkVfQllURVM7 CisJKmJhdGNoKysgPSAwOworCSpiYXRjaCsrID0gMDsKKwkqYmF0Y2grKyA9IDA7CiAKIAkvKiBQ YWQgdG8gZW5kIG9mIGNhY2hlbGluZSAqLwotCXdoaWxlIChpbmRleCAlIENBQ0hFTElORV9EV09S RFMpCi0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgTUlfTk9PUCk7CisJd2hpbGUgKCh1bnNp Z25lZCBsb25nKWJhdGNoICUgQ0FDSEVMSU5FX0JZVEVTKQorCQkqYmF0Y2grKyA9IE1JX05PT1A7 CiAKIAkvKgogCSAqIE1JX0JBVENIX0JVRkZFUl9FTkQgaXMgbm90IHJlcXVpcmVkIGluIEluZGly ZWN0IGN0eCBCQiBiZWNhdXNlCkBAIC0xMDI4LDcgKzk3Nyw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9p bml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkgKiBp biB0aGUgcmVnaXN0ZXIgQ1RYX1JDU19JTkRJUkVDVF9DVFgKIAkgKi8KIAotCXJldHVybiB3YV9j dHhfZW5kKHdhX2N0eCwgKm9mZnNldCA9IGluZGV4LCBDQUNIRUxJTkVfRFdPUkRTKTsKKwlyZXR1 cm4gYmF0Y2g7CiB9CiAKIC8qCkBAIC0xMDQwLDU4ICs5ODksMzggQEAgc3RhdGljIGludCBnZW44 X2luaXRfaW5kaXJlY3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogICog IFRoaXMgYmF0Y2ggaXMgdGVybWluYXRlZCB3aXRoIE1JX0JBVENIX0JVRkZFUl9FTkQgYW5kIHNv IHdlIG5lZWQgbm90IGFkZCBwYWRkaW5nCiAgKiAgdG8gYWxpZ24gaXQgd2l0aCBjYWNoZWxpbmUg YXMgcGFkZGluZyBhZnRlciBNSV9CQVRDSF9CVUZGRVJfRU5EIGlzIHJlZHVuZGFudC4KICAqLwot c3RhdGljIGludCBnZW44X2luaXRfcGVyY3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKLQkJCSAgICAgICBzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2N0eCwKLQkJCSAgICAg ICB1aW50MzJfdCAqYmF0Y2gsCi0JCQkgICAgICAgdWludDMyX3QgKm9mZnNldCkKK3N0YXRpYyB1 MzIgKmdlbjhfaW5pdF9wZXJjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1 MzIgKmJhdGNoKQogewotCXVpbnQzMl90IGluZGV4ID0gd2FfY3R4X3N0YXJ0KHdhX2N0eCwgKm9m ZnNldCwgQ0FDSEVMSU5FX0RXT1JEUyk7Ci0KIAkvKiBXYURpc2FibGVDdHhSZXN0b3JlQXJiaXRy YXRpb246YmR3LGNodiAqLwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgTUlfQVJCX09OX09G RiB8IE1JX0FSQl9FTkFCTEUpOwotCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9CQVRD SF9CVUZGRVJfRU5EKTsKKwkqYmF0Y2grKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRU5BQkxF OworCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKIAotCXJldHVybiB3YV9jdHhfZW5k KHdhX2N0eCwgKm9mZnNldCA9IGluZGV4LCAxKTsKKwlyZXR1cm4gYmF0Y2g7CiB9CiAKLXN0YXRp YyBpbnQgZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKLQkJCQkgICAgc3RydWN0IGk5MTVfd2FfY3R4X2JiICp3YV9jdHgsCi0JCQkJICAgIHVp bnQzMl90ICpiYXRjaCwKLQkJCQkgICAgdWludDMyX3QgKm9mZnNldCkKK3N0YXRpYyB1MzIgKmdl bjlfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUz MiAqYmF0Y2gpCiB7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBlbmdpbmUtPmk5MTU7Ci0JdWludDMyX3QgaW5kZXggPSB3YV9jdHhfc3RhcnQod2FfY3R4 LCAqb2Zmc2V0LCBDQUNIRUxJTkVfRFdPUkRTKTsKLQogCS8qIFdhRmx1c2hDb2hlcmVudEwzQ2Fj aGVMaW5lc0F0Q29udGV4dFN3aXRjaDpza2wsYnh0LGdsayAqLwotCXJldCA9IGdlbjhfZW1pdF9m bHVzaF9jb2hlcmVudGwzX3dhKGVuZ2luZSwgYmF0Y2gsIGluZGV4KTsKLQlpZiAocmV0IDwgMCkK LQkJcmV0dXJuIHJldDsKLQlpbmRleCA9IHJldDsKKwliYXRjaCA9IGdlbjhfZW1pdF9mbHVzaF9j b2hlcmVudGwzX3dhKGVuZ2luZSwgYmF0Y2gpOwogCiAJLyogV2FEaXNhYmxlR2F0aGVyQXRTZXRT aGFkZXJDb21tb25TbGljZTpza2wsYnh0LGtibCxnbGsgKi8KLQl3YV9jdHhfZW1pdChiYXRjaCwg aW5kZXgsIE1JX0xPQURfUkVHSVNURVJfSU1NKDEpKTsKLQl3YV9jdHhfZW1pdF9yZWcoYmF0Y2gs IGluZGV4LCBDT01NT05fU0xJQ0VfQ0hJQ0tFTjIpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRl eCwgX01BU0tFRF9CSVRfRElTQUJMRSgKLQkJCSAgICBHRU45X0RJU0FCTEVfR0FUSEVSX0FUX1NF VF9TSEFERVJfQ09NTU9OX1NMSUNFKSk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9O T09QKTsKKwkqYmF0Y2grKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDEpOworCSpiYXRjaCsrID0g aTkxNV9tbWlvX3JlZ19vZmZzZXQoQ09NTU9OX1NMSUNFX0NISUNLRU4yKTsKKwkqYmF0Y2grKyA9 IF9NQVNLRURfQklUX0RJU0FCTEUoCisJCQlHRU45X0RJU0FCTEVfR0FUSEVSX0FUX1NFVF9TSEFE RVJfQ09NTU9OX1NMSUNFKTsKKwkqYmF0Y2grKyA9IE1JX05PT1A7CiAKIAkvKiBXYUNsZWFyU2xt U3BhY2VBdENvbnRleHRTd2l0Y2g6a2JsICovCiAJLyogQWN0dWFsIHNjcmF0Y2ggbG9jYXRpb24g aXMgYXQgMTI4IGJ5dGVzIG9mZnNldCAqLwotCWlmIChJU19LQkxfUkVWSUQoZGV2X3ByaXYsIDAs IEtCTF9SRVZJRF9BMCkpIHsKLQkJdTMyIHNjcmF0Y2hfYWRkciA9Ci0JCQlpOTE1X2dndHRfb2Zm c2V0KGVuZ2luZS0+c2NyYXRjaCkgKyAyICogQ0FDSEVMSU5FX0JZVEVTOwotCi0JCXdhX2N0eF9l bWl0KGJhdGNoLCBpbmRleCwgR0ZYX09QX1BJUEVfQ09OVFJPTCg2KSk7Ci0JCXdhX2N0eF9lbWl0 KGJhdGNoLCBpbmRleCwgKFBJUEVfQ09OVFJPTF9GTFVTSF9MMyB8Ci0JCQkJCSAgIFBJUEVfQ09O VFJPTF9HTE9CQUxfR1RUX0lWQiB8Ci0JCQkJCSAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8Ci0J CQkJCSAgIFBJUEVfQ09OVFJPTF9RV19XUklURSkpOwotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5k ZXgsIHNjcmF0Y2hfYWRkcik7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0JCXdh X2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwg MCk7CisJaWYgKElTX0tCTF9SRVZJRChlbmdpbmUtPmk5MTUsIDAsIEtCTF9SRVZJRF9BMCkpIHsK KwkJKmJhdGNoKysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDYpOworCQkqYmF0Y2grKyA9IFBJUEVf Q09OVFJPTF9GTFVTSF9MMyB8IFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUX0lWQiB8CisJCQkgICBQ SVBFX0NPTlRST0xfQ1NfU1RBTEwgfCBQSVBFX0NPTlRST0xfUVdfV1JJVEU7CisJCSpiYXRjaCsr ID0gaTkxNV9nZ3R0X29mZnNldChlbmdpbmUtPnNjcmF0Y2gpICsKKwkJCSAgIDIgKiBDQUNIRUxJ TkVfQllURVM7CisJCSpiYXRjaCsrID0gMDsKKwkJKmJhdGNoKysgPSAwOworCQkqYmF0Y2grKyA9 IDA7CiAJfQogCiAJLyogV2FNZWRpYVBvb2xTdGF0ZUNtZEluV0FCQjpieHQsZ2xrICovCkBAIC0x MTA5LDQxICsxMDM4LDM3IEBAIHN0YXRpYyBpbnQgZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJICogcG9zc2libGUgY29uZmlndXJhdGlv bnMsIHRvIGF2b2lkIGR1cGxpY2F0aW9uIHRoZXkgYXJlCiAJCSAqIG5vdCBzaG93biBoZXJlIGFn YWluLgogCQkgKi8KLQkJdTMyIGV1X3Bvb2xfY29uZmlnID0gMHgwMDc3NzAwMDsKLQkJd2FfY3R4 X2VtaXQoYmF0Y2gsIGluZGV4LCBHRU45X01FRElBX1BPT0xfU1RBVEUpOwotCQl3YV9jdHhfZW1p dChiYXRjaCwgaW5kZXgsIEdFTjlfTUVESUFfUE9PTF9FTkFCTEUpOwotCQl3YV9jdHhfZW1pdChi YXRjaCwgaW5kZXgsIGV1X3Bvb2xfY29uZmlnKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4 LCAwKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKLQkJd2FfY3R4X2VtaXQoYmF0 Y2gsIGluZGV4LCAwKTsKKwkJKmJhdGNoKysgPSBHRU45X01FRElBX1BPT0xfU1RBVEU7CisJCSpi YXRjaCsrID0gR0VOOV9NRURJQV9QT09MX0VOQUJMRTsKKwkJKmJhdGNoKysgPSAweDAwNzc3MDAw OworCQkqYmF0Y2grKyA9IDA7CisJCSpiYXRjaCsrID0gMDsKKwkJKmJhdGNoKysgPSAwOwogCX0K IAogCS8qIFBhZCB0byBlbmQgb2YgY2FjaGVsaW5lICovCi0Jd2hpbGUgKGluZGV4ICUgQ0FDSEVM SU5FX0RXT1JEUykKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9OT09QKTsKKwl3aGls ZSAoKHVuc2lnbmVkIGxvbmcpYmF0Y2ggJSBDQUNIRUxJTkVfQllURVMpCisJCSpiYXRjaCsrID0g TUlfTk9PUDsKIAotCXJldHVybiB3YV9jdHhfZW5kKHdhX2N0eCwgKm9mZnNldCA9IGluZGV4LCBD QUNIRUxJTkVfRFdPUkRTKTsKKwlyZXR1cm4gYmF0Y2g7CiB9CiAKLXN0YXRpYyBpbnQgZ2VuOV9p bml0X3BlcmN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkgICAgICAg c3RydWN0IGk5MTVfd2FfY3R4X2JiICp3YV9jdHgsCi0JCQkgICAgICAgdWludDMyX3QgKmJhdGNo LAotCQkJICAgICAgIHVpbnQzMl90ICpvZmZzZXQpCitzdGF0aWMgdTMyICpnZW45X2luaXRfcGVy Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCkKIHsKLQl1 aW50MzJfdCBpbmRleCA9IHdhX2N0eF9zdGFydCh3YV9jdHgsICpvZmZzZXQsIENBQ0hFTElORV9E V09SRFMpOworCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKIAotCXdhX2N0eF9lbWl0 KGJhdGNoLCBpbmRleCwgTUlfQkFUQ0hfQlVGRkVSX0VORCk7Ci0KLQlyZXR1cm4gd2FfY3R4X2Vu ZCh3YV9jdHgsICpvZmZzZXQgPSBpbmRleCwgMSk7CisJcmV0dXJuIGJhdGNoOwogfQogCi1zdGF0 aWMgaW50IGxyY19zZXR1cF93YV9jdHhfb2JqKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwgdTMyIHNpemUpCisjZGVmaW5lIENUWF9XQV9CQl9PQkpfU0laRSAoUEFHRV9TSVpFKQorCitz dGF0aWMgaW50IGxyY19zZXR1cF93YV9jdHgoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJc3RydWN0IGk5MTVfdm1h ICp2bWE7CiAJaW50IGVycjsKIAotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoZW5naW5l LT5pOTE1LCBQQUdFX0FMSUdOKHNpemUpKTsKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRl KGVuZ2luZS0+aTkxNSwgQ1RYX1dBX0JCX09CSl9TSVpFKTsKIAlpZiAoSVNfRVJSKG9iaikpCiAJ CXJldHVybiBQVFJfRVJSKG9iaik7CiAKQEAgLTExNjUsNzggKzEwOTAsNjggQEAgc3RhdGljIGlu dCBscmNfc2V0dXBfd2FfY3R4X29iaihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUz MiBzaXplKQogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGxyY19kZXN0cm95X3dhX2N0 eF9vYmooc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGljIHZvaWQgbHJjX2Rl c3Ryb3lfd2FfY3R4KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlpOTE1X3Zt YV91bnBpbl9hbmRfcmVsZWFzZSgmZW5naW5lLT53YV9jdHgudm1hKTsKIH0KIAordHlwZWRlZiB1 MzIgKigqd2FfYmJfZnVuY190KShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAq YmF0Y2gpOworCiBzdGF0aWMgaW50IGludGVsX2luaXRfd29ya2Fyb3VuZF9iYihzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CiAJc3RydWN0IGk5MTVfY3R4X3dvcmthcm91bmRzICp3 YV9jdHggPSAmZW5naW5lLT53YV9jdHg7Ci0JdWludDMyX3QgKmJhdGNoOwotCXVpbnQzMl90IG9m ZnNldDsKKwlzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2JiWzJdID0geyAmd2FfY3R4LT5pbmRp cmVjdF9jdHgsCisJCQkJCSAgICAmd2FfY3R4LT5wZXJfY3R4IH07CisJd2FfYmJfZnVuY190IHdh X2JiX2ZuWzJdOwogCXN0cnVjdCBwYWdlICpwYWdlOworCXZvaWQgKmJhdGNoLCAqYmF0Y2hfcHRy OworCXVuc2lnbmVkIGludCBpOwogCWludCByZXQ7CiAKLQlXQVJOX09OKGVuZ2luZS0+aWQgIT0g UkNTKTsKKwlpZiAoV0FSTl9PTihlbmdpbmUtPmlkICE9IFJDUyB8fCAhZW5naW5lLT5zY3JhdGNo KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiB1cGRhdGUgdGhpcyB3aGVuIFdBIGZvciBoaWdo ZXIgR2VuIGFyZSBhZGRlZCAqLwotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+IDkpIHsK LQkJRFJNX0VSUk9SKCJXQSBiYXRjaCBidWZmZXIgaXMgbm90IGluaXRpYWxpemVkIGZvciBHZW4l ZFxuIiwKLQkJCSAgSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpOworCXN3aXRjaCAoSU5URUxfR0VO KGVuZ2luZS0+aTkxNSkpIHsKKwljYXNlIDk6CisJCXdhX2JiX2ZuWzBdID0gZ2VuOV9pbml0X2lu ZGlyZWN0Y3R4X2JiOworCQl3YV9iYl9mblsxXSA9IGdlbjlfaW5pdF9wZXJjdHhfYmI7CisJCWJy ZWFrOworCWNhc2UgODoKKwkJd2FfYmJfZm5bMF0gPSBnZW44X2luaXRfaW5kaXJlY3RjdHhfYmI7 CisJCXdhX2JiX2ZuWzFdID0gZ2VuOF9pbml0X3BlcmN0eF9iYjsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJTUlTU0lOR19DQVNFKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKTsKIAkJcmV0dXJuIDA7 CiAJfQogCi0JLyogc29tZSBXQSBwZXJmb3JtIHdyaXRlcyB0byBzY3JhdGNoIHBhZ2UsIGVuc3Vy ZSBpdCBpcyB2YWxpZCAqLwotCWlmICghZW5naW5lLT5zY3JhdGNoKSB7Ci0JCURSTV9FUlJPUigi c2NyYXRjaCBwYWdlIG5vdCBhbGxvY2F0ZWQgZm9yICVzXG4iLCBlbmdpbmUtPm5hbWUpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXQgPSBscmNfc2V0dXBfd2FfY3R4X29iaihlbmdpbmUs IFBBR0VfU0laRSk7CisJcmV0ID0gbHJjX3NldHVwX3dhX2N0eChlbmdpbmUpOwogCWlmIChyZXQp IHsKIAkJRFJNX0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIHNldHVwIGNvbnRleHQgV0EgcGFnZTog JWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcGFnZSA9IGk5MTVfZ2VtX29iamVj dF9nZXRfZGlydHlfcGFnZSh3YV9jdHgtPnZtYS0+b2JqLCAwKTsKLQliYXRjaCA9IGttYXBfYXRv bWljKHBhZ2UpOwotCW9mZnNldCA9IDA7Ci0KLQlpZiAoSVNfR0VOOChlbmdpbmUtPmk5MTUpKSB7 Ci0JCXJldCA9IGdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYihlbmdpbmUsCi0JCQkJCSAgICAgICAm d2FfY3R4LT5pbmRpcmVjdF9jdHgsCi0JCQkJCSAgICAgICBiYXRjaCwKLQkJCQkJICAgICAgICZv ZmZzZXQpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7CisJYmF0Y2ggPSBiYXRjaF9wdHIgPSBr bWFwX2F0b21pYyhwYWdlKTsKIAotCQlyZXQgPSBnZW44X2luaXRfcGVyY3R4X2JiKGVuZ2luZSwK LQkJCQkJICAmd2FfY3R4LT5wZXJfY3R4LAotCQkJCQkgIGJhdGNoLAotCQkJCQkgICZvZmZzZXQp OwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmIChJU19HRU45KGVuZ2luZS0+ aTkxNSkpIHsKLQkJcmV0ID0gZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKGVuZ2luZSwKLQkJCQkJ ICAgICAgICZ3YV9jdHgtPmluZGlyZWN0X2N0eCwKLQkJCQkJICAgICAgIGJhdGNoLAotCQkJCQkg ICAgICAgJm9mZnNldCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQotCQlyZXQgPSBnZW45 X2luaXRfcGVyY3R4X2JiKGVuZ2luZSwKLQkJCQkJICAmd2FfY3R4LT5wZXJfY3R4LAotCQkJCQkg IGJhdGNoLAotCQkJCQkgICZvZmZzZXQpOwotCQlpZiAocmV0KQorCS8qCisJICogRW1pdCB0aGUg dHdvIHdvcmthcm91bmQgYmF0Y2ggYnVmZmVycywgcmVjb3JkaW5nIHRoZSBvZmZzZXQgZnJvbSB0 aGUKKwkgKiBzdGFydCBvZiB0aGUgd29ya2Fyb3VuZCBiYXRjaCBidWZmZXIgb2JqZWN0IGZvciBl YWNoIGFuZCB0aGVpcgorCSAqIHJlc3BlY3RpdmUgc2l6ZXMuCisJICovCisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUod2FfYmJfZm4pOyBpKyspIHsKKwkJd2FfYmJbaV0tPm9mZnNldCA9IGJh dGNoX3B0ciAtIGJhdGNoOworCQlpZiAoV0FSTl9PTighSVNfQUxJR05FRCh3YV9iYltpXS0+b2Zm c2V0LCBDQUNIRUxJTkVfQllURVMpKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0 OworCQl9CisJCWJhdGNoX3B0ciA9IHdhX2JiX2ZuW2ldKGVuZ2luZSwgYmF0Y2hfcHRyKTsKKwkJ d2FfYmJbaV0tPnNpemUgPSBiYXRjaF9wdHIgLSAoYmF0Y2ggKyB3YV9iYltpXS0+b2Zmc2V0KTsK IAl9CiAKKwlCVUdfT04oYmF0Y2hfcHRyIC0gYmF0Y2ggPiBDVFhfV0FfQkJfT0JKX1NJWkUpOwog b3V0OgogCWt1bm1hcF9hdG9taWMoYmF0Y2gpOwotCWlmIChyZXQpCi0JCWxyY19kZXN0cm95X3dh X2N0eF9vYmooZW5naW5lKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNjg1LDcgKzE2MDAsNyBA QCB2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19jbGVhbnVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKIAogCWludGVsX2VuZ2luZV9jbGVhbnVwX2NvbW1vbihlbmdpbmUpOwogCi0JbHJj X2Rlc3Ryb3lfd2FfY3R4X29iaihlbmdpbmUpOworCWxyY19kZXN0cm95X3dhX2N0eChlbmdpbmUp OwogCWVuZ2luZS0+aTkxNSA9IE5VTEw7CiAJZGV2X3ByaXYtPmVuZ2luZVtlbmdpbmUtPmlkXSA9 IE5VTEw7CiAJa2ZyZWUoZW5naW5lKTsKQEAgLTE5NzEsMTUgKzE4ODYsMTQgQEAgc3RhdGljIHZv aWQgZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHUzMiAqcmVnX3N0YXRlLAogCQkJdTMyIGdndHRf b2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldCh3YV9jdHgtPnZtYSk7CiAKIAkJCXJlZ19zdGF0ZVtD VFhfUkNTX0lORElSRUNUX0NUWCsxXSA9Ci0JCQkJKGdndHRfb2Zmc2V0ICsgd2FfY3R4LT5pbmRp cmVjdF9jdHgub2Zmc2V0ICogc2l6ZW9mKHVpbnQzMl90KSkgfAotCQkJCSh3YV9jdHgtPmluZGly ZWN0X2N0eC5zaXplIC8gQ0FDSEVMSU5FX0RXT1JEUyk7CisJCQkJKGdndHRfb2Zmc2V0ICsgd2Ff Y3R4LT5pbmRpcmVjdF9jdHgub2Zmc2V0KSB8CisJCQkJKHdhX2N0eC0+aW5kaXJlY3RfY3R4LnNp emUgLyBDQUNIRUxJTkVfQllURVMpOwogCiAJCQlyZWdfc3RhdGVbQ1RYX1JDU19JTkRJUkVDVF9D VFhfT0ZGU0VUKzFdID0KIAkJCQlpbnRlbF9scl9pbmRpcmVjdF9jdHhfb2Zmc2V0KGVuZ2luZSkg PDwgNjsKIAogCQkJcmVnX3N0YXRlW0NUWF9CQl9QRVJfQ1RYX1BUUisxXSA9Ci0JCQkJKGdndHRf b2Zmc2V0ICsgd2FfY3R4LT5wZXJfY3R4Lm9mZnNldCAqIHNpemVvZih1aW50MzJfdCkpIHwKLQkJ CQkweDAxOworCQkJCShnZ3R0X29mZnNldCArIHdhX2N0eC0+cGVyX2N0eC5vZmZzZXQpIHwgMHgw MTsKIAkJfQogCX0KIAlyZWdfc3RhdGVbQ1RYX0xSSV9IRUFERVJfMV0gPSBNSV9MT0FEX1JFR0lT VEVSX0lNTSg5KSB8IE1JX0xSSV9GT1JDRV9QT1NURUQ7Ci0tIAoyLjkuMwoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==