From mboxrd@z Thu Jan 1 00:00:00 1970 From: Francisco Jerez Subject: [PATCHv7] drm/i915: Added Programming of the MOCS Date: Tue, 7 Jul 2015 22:13:01 +0300 Message-ID: <1436296381-1174-1-git-send-email-currojerez@riseup.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by gabe.freedesktop.org (Postfix) with ESMTPS id F12EC6E759 for ; Tue, 7 Jul 2015 12:12:00 -0700 (PDT) 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 RnJvbTogUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+CgpUaGlzIGNoYW5n ZSBhZGRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aGUgTU9DUyByZWdpc3RlcnMgdG8gdGhlIGdlbiA5 KwpwbGF0Zm9ybXMuIFRoaXMgY2hhbmdlIHNldCBwcm9ncmFtcyB0aGUgTU9DUyByZWdpc3RlciB2 YWx1ZXMgdG8gYSBzZXQKb2YgdmFsdWVzIHRoYXQgYXJlIGRlZmluZWQgdG8gYmUgb3B0aW1hbC4K Ckl0IGNyZWF0ZXMgYSBmaXhlZCByZWdpc3RlciBzZXQgdGhhdCBpcyBwcm9ncmFtbWVkIGFjcm9z cyB0aGUgZGlmZmVyZW50CmVuZ2luZXMgc28gdGhhdCBhbGwgZW5naW5lcyBoYXZlIHRoZSBzYW1l IHRhYmxlLiBUaGlzIGlzIGRvbmUgYXMgdGhlCm1haW4gUkNTIGNvbnRleHQgb25seSBob2xkcyB0 aGUgcmVnaXN0ZXJzIGZvciBpdHNlbGYgYW5kIHRoZSBzaGFyZWQKTDMgdmFsdWVzLiBCeSB0cnlp bmcgdG8ga2VlcCB0aGUgcmVnaXN0ZXJzIGNvbnNpc3RlbnQgYWNyb3NzIHRoZQpkaWZmZXJlbnQg ZW5naW5lcyBpdCBzaG91bGQgbWFrZSB0aGUgcHJvZ3JhbW1pbmcgZm9yIHRoZSByZWdpc3RlcnMK Y29uc2lzdGVudC4KCnYyOgotJ3N0YXRpYyBjb25zdCcgZm9yIHByaXZhdGUgZGF0YSBzdHJ1Y3R1 cmVzIGFuZCBzdHlsZSBjaGFuZ2VzLihNYXR0IFR1cm5lcikKdjM6Ci0gTWFrZSB0aGUgdGFibGVz ICJzbGlnaHRseSIgbW9yZSByZWFkYWJsZS4gKERhbWllbiBMZXNwaWF1KQotIFVwZGF0ZWQgdGFi bGVzIGZpeCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uLgp2NDoKLSBDb2RlIGZvcm1hdHRpbmcuIChD aHJpcyBXaWxzb24pCi0gcmUtcHJpdmF0aXNlZCBtb2NzIGNvZGUuIChEYW5pZWwgVmV0dGVyKQp2 NToKLSBDaGFuZ2VkIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24uIChDaHJpcyBXaWxzb24pCnY2Ogot IHJlLWJhc2VkCi0gQWRkZWQgTWVzYSB0YWJsZSBlbnRyeSAoc2t5bGFrZSAmIGJyb3h0b24pIChG cmFuY2lzY28gSmVyZXopCi0gVGlkaWVkIHVwIHRoZSByZWFkYWJpbGl0eSBkZWZpbmVzIChGcmFu Y2lzY28gSmVyZXopCi0gTlVNQkVSIG9mIGVudHJpZXMgZGVmaW5lcyB3cm9uZy4gKEppbSBCaXNo KQotIEFkZGVkIGNvbW1lbnRzIHRvIGNsZWFyIHVwIHRoZSBtZWFuaW5nIG9mIHRoZSB0YWJsZXMg KEppbSBCaXNoKQoKU2lnbmVkLW9mZi1ieTogUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBp bnRlbC5jb20+Cgp2NyAoRnJhbmNpc2NvIEplcmV6KToKLSBEb24ndCB3cml0ZSBMMy1zcGVjaWZp YyBNT0NTX0VTQy9TQ0MgdmFsdWVzIGludG8gdGhlIGUvTExDIGNvbnRyb2wKICB0YWJsZXMuICBQ cmVmaXggTDMtc3BlY2lmaWMgZGVmaW5lcyBjb25zaXN0ZW50bHkgd2l0aCBMM18gYW5kCiAgZS9M TEMtc3BlY2lmaWMgZGVmaW5lcyB3aXRoIExFXyB0byBhdm9pZCB0aGlzIGtpbmQgb2YgY29uZnVz aW9uIGluCiAgdGhlIGZ1dHVyZS4KLSBDaGFuZ2UgTDNDQyBXVCBkZWZpbmUgYmFjayB0byBSRVNF UlZFRCAobWF0Y2hlcyBteSBoYXJkd2FyZQogIGRvY3VtZW50YXRpb24gYW5kIHRoZSBvcmlnaW5h bCBwYXRjaCwgcHJvYmFibHkgYSBtaXN1bmRlcnN0YW5kaW5nCiAgb2YgbXkgb3duIHByZXZpb3Vz IGNvbW1lbnQpLgotIERyb3AgQW5kcm9pZCB0YWJsZXMsIGRlZmluZSBuZXcgbWluaW1hbCB0YWJs ZXMgbW9yZSBzdWl0YWJsZSBmb3IgdGhlCiAgb3BlbiBzb3VyY2Ugc3RhY2suCi0gQWRkIGNvbW1l bnQgdGhhdCB0aGUgTU9DUyB0YWJsZXMgYXJlIHBhcnQgb2YgdGhlIGtlcm5lbCBBQkkuCi0gTW92 ZSBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4oKSBhbmQgX2FkdmFuY2UoKSBjYWxscyBvbmUgbGV2 ZWwgZG93bgogIChDaHJpcyBXaWxzb24pLgotIE1pbm9yIGZvcm1hdHRpbmcgYW5kIHN0eWxlIGZp eGVzLgoKU2lnbmVkLW9mZi1ieTogRnJhbmNpc2NvIEplcmV6IDxjdXJyb2plcmV6QHJpc2V1cC5u ZXQ+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgIHwgICAxICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICB8ICAgOSArKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbHJjLmMgIHwgIDExICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMu aCAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jIHwgMzI0ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9tb2NzLmggfCAgNTcgKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA0MDEgaW5zZXJ0aW9u cygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9tb2NzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9tb2NzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGRlMjE5NjUuLmU1MmUwMTIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0zNiw2ICszNiw3IEBAIGk5MTUteSArPSBpOTE1X2Nt ZF9wYXJzZXIubyBcCiAJICBpOTE1X3RyYWNlX3BvaW50cy5vIFwKIAkgIGludGVsX2hvdHBsdWcu byBcCiAJICBpbnRlbF9scmMubyBcCisJICBpbnRlbF9tb2NzLm8gXAogCSAgaW50ZWxfcmluZ2J1 ZmZlci5vIFwKIAkgIGludGVsX3VuY29yZS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4 IDJhMjliY2MuLjliMTcyNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtNzkwNiw0ICs3 OTA2LDEzIEBAIGVudW0gc2tsX2Rpc3BfcG93ZXJfd2VsbHMgewogI2RlZmluZSBfUEFMRVRURV9B IChkZXZfcHJpdi0+aW5mby5kaXNwbGF5X21taW9fb2Zmc2V0ICsgMHhhMDAwKQogI2RlZmluZSBf UEFMRVRURV9CIChkZXZfcHJpdi0+aW5mby5kaXNwbGF5X21taW9fb2Zmc2V0ICsgMHhhODAwKQog CisvKiBNT0NTIChNZW1vcnkgT2JqZWN0IENvbnRyb2wgU3RhdGUpIHJlZ2lzdGVycyAqLworI2Rl ZmluZSBHRU45X0xOQ0ZDTU9DUzAJCSgweEIwMjApCS8qIEwzIENhY2hlIENvbnRyb2wgYmFzZSAq LworCisjZGVmaW5lIEdFTjlfR0ZYX01PQ1NfMAkJKDB4YzgwMCkJLyogR3JhcGhpY3MgTU9DUyBi YXNlIHJlZ2lzdGVyKi8KKyNkZWZpbmUgR0VOOV9NRlgwX01PQ1NfMAkoMHhjOTAwKQkvKiBNZWRp YSAwIE1PQ1MgYmFzZSByZWdpc3RlciovCisjZGVmaW5lIEdFTjlfTUZYMV9NT0NTXzAJKDB4Y0Ew MCkJLyogTWVkaWEgMSBNT0NTIGJhc2UgcmVnaXN0ZXIqLworI2RlZmluZSBHRU45X1ZFQk9YX01P Q1NfMAkoMHhjQjAwKQkvKiBWaWRlbyBNT0NTIGJhc2UgcmVnaXN0ZXIqLworI2RlZmluZSBHRU45 X0JMVF9NT0NTXzAJCSgweGNjMDApCS8qIEJsaXR0ZXIgTU9DUyBiYXNlIHJlZ2lzdGVyKi8KKwog I2VuZGlmIC8qIF9JOTE1X1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwppbmRleCBk NGY4YjQzLi40NjZkMTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwpAQCAtMTM1LDYgKzEz NSw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4K ICNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX21vY3MuaCIKIAogI2RlZmlu ZSBHRU45X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUgKDIyICogUEFHRV9TSVpFKQogI2RlZmluZSBH RU44X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUgKDIwICogUEFHRV9TSVpFKQpAQCAtNzcyLDggKzc3 Myw3IEBAIHN0YXRpYyBpbnQgbG9naWNhbF9yaW5nX3ByZXBhcmUoc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpyZXEsIGludCBieXRlcykKICAqCiAgKiBSZXR1cm46IG5vbi16ZXJvIGlmIHRo ZSByaW5nYnVmZmVyIGlzIG5vdCByZWFkeSB0byBiZSB3cml0dGVuIHRvLgogICovCi1zdGF0aWMg aW50IGludGVsX2xvZ2ljYWxfcmluZ19iZWdpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJlcSwKLQkJCQkgICAgaW50IG51bV9kd29yZHMpCitpbnQgaW50ZWxfbG9naWNhbF9yaW5nX2Jl Z2luKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQgbnVtX2R3b3JkcykKIHsK IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7CiAJaW50IHJldDsKQEAgLTE2NzUs NiArMTY3NSwxMyBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9yY3NfY29udGV4dChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJLyoK KwkgKiBGYWlsaW5nIHRvIHByb2dyYW0gdGhlIE1PQ1MgaXMgbm9uLWZhdGFsLlRoZSBzeXN0ZW0g d2lsbCBub3QKKwkgKiBydW4gYXQgcGVhayBwZXJmb3JtYW5jZS4gU28gZ2VuZXJhdGUgYSB3YXJu aW5nIGFuZCBjYXJyeSBvbi4KKwkgKi8KKwlpZiAoaW50ZWxfcmNzX2NvbnRleHRfaW5pdF9tb2Nz KHJlcSkgIT0gMCkKKwkJRFJNX0VSUk9SKCJNT0NTIGZhaWxlZCB0byBwcm9ncmFtOiBleHBlY3Qg cGVyZm9ybWFuY2UgaXNzdWVzLiIpOworCiAJcmV0dXJuIGludGVsX2xyX2NvbnRleHRfcmVuZGVy X3N0YXRlX2luaXQocmVxKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbHJjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaAppbmRleCBlMDI5 OWZiLi42NGY4OWY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKQEAgLTQyLDYgKzQyLDcg QEAgaW50IGludGVsX2xvZ2ljYWxfcmluZ19yZXNlcnZlX3NwYWNlKHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxdWVzdCk7CiB2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19zdG9wKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwogdm9pZCBpbnRlbF9sb2dpY2FsX3JpbmdfY2xlYW51 cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKIGludCBpbnRlbF9sb2dpY2FsX3Jpbmdz X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgaW50ZWxfbG9naWNhbF9yaW5nX2Jl Z2luKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQgbnVtX2R3b3Jkcyk7CiAK IGludCBsb2dpY2FsX3JpbmdfZmx1c2hfYWxsX2NhY2hlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcSk7CiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X21vY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2I5M2U5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogQ29w eXJpZ2h0IChjKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1Mg SU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgorI2lu Y2x1ZGUgImludGVsX2xyYy5oIgorI2luY2x1ZGUgImludGVsX3JpbmdidWZmZXIuaCIKKworLyog c3RydWN0dXJlcyByZXF1aXJlZCAqLworc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgeworCXUz Mgljb250cm9sX3ZhbHVlOworCXUxNglsM2NjX3ZhbHVlOworfTsKKworc3RydWN0IGRybV9pOTE1 X21vY3NfdGFibGUgeworCXUzMgkJCQkJc2l6ZTsKKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfbW9j c19lbnRyeQkqdGFibGU7Cit9OworCisvKiBEZWZpbmVzIGZvciB0aGUgdGFibGVzIChYWFhfTU9D U18wIC0gWFhYX01PQ1NfNjMpICovCisjZGVmaW5lIExFX0NBQ0hFQUJJTElUWSh2YWx1ZSkJKHZh bHVlIDw8IDApCisjZGVmaW5lIExFX1RHVF9DQUNIRSh2YWx1ZSkJKHZhbHVlIDw8IDIpCisjZGVm aW5lIExFX0xSVU0odmFsdWUpCQkodmFsdWUgPDwgNCkKKyNkZWZpbmUgTEVfQU9NKHZhbHVlKQkJ KHZhbHVlIDw8IDYpCisjZGVmaW5lIExFX1JTQyh2YWx1ZSkJCSh2YWx1ZSA8PCA3KQorI2RlZmlu ZSBMRV9TQ0ModmFsdWUpCQkodmFsdWUgPDwgOCkKKyNkZWZpbmUgTEVfUEZNKHZhbHVlKQkJKHZh bHVlIDw8IDExKQorI2RlZmluZSBMRV9TQ0YodmFsdWUpCQkodmFsdWUgPDwgMTQpCisKKy8qIERl ZmluZXMgZm9yIHRoZSB0YWJsZXMgKExOQ0ZNT0NTMCAtIExOQ0ZNT0NTMzEpIC0gdHdvIGVudHJp ZXMgcGVyIHdvcmQgKi8KKyNkZWZpbmUgTDNfRVNDKHZhbHVlKQkJKHZhbHVlIDw8IDApCisjZGVm aW5lIEwzX1NDQyh2YWx1ZSkJCSh2YWx1ZSA8PCAxKQorI2RlZmluZSBMM19DQUNIRUFCSUxJVFko dmFsdWUpCSh2YWx1ZSA8PCA0KQorCisvKiBIZWxwZXIgZGVmaW5lcyAqLworI2RlZmluZSBHRU45 X05VTV9NT0NTX0VOVFJJRVMJKDYyKSAgLyogNjIgb3V0IG9mIDY0IC0gNjMgJiA2NCBhcmUgcmVz ZXJ2ZWQuICovCisKKy8qIChlKUxMQyBjYWNoaW5nIG9wdGlvbnMgKi8KKyNkZWZpbmUgTEVfUEFH RVRBQkxFCQkoMCkKKyNkZWZpbmUgTEVfVUMJCQkoMSkKKyNkZWZpbmUgTEVfV1QJCQkoMikKKyNk ZWZpbmUgTEVfV0IJCQkoMykKKworLyogTDMgY2FjaGluZyBvcHRpb25zICovCisjZGVmaW5lIEwz X0RJUkVDVAkJKDApCisjZGVmaW5lIEwzX1VDCQkJKDEpCisjZGVmaW5lIEwzX1JFU0VSVkVECQko MikKKyNkZWZpbmUgTDNfV0IJCQkoMykKKworLyogVGFyZ2V0IGNhY2hlICovCisjZGVmaW5lIEVM TEMJCQkoMCkKKyNkZWZpbmUgTExDCQkJKDEpCisjZGVmaW5lIExMQ19FTExDCQkoMikKKworLyoK KyAqIE1PQ1MgdGFibGVzCisgKgorICogVGhlc2UgYXJlIHRoZSBNT0NTIHRhYmxlcyB0aGF0IGFy ZSBwcm9ncmFtbWVkIGFjcm9zcyBhbGwgdGhlIHJpbmdzLgorICogVGhlIGNvbnRyb2wgdmFsdWUg aXMgcHJvZ3JhbW1lZCB0byBhbGwgdGhlIHJpbmdzIHRoYXQgc3VwcG9ydCB0aGUKKyAqIE1PQ1Mg cmVnaXN0ZXJzLiBXaGlsZSB0aGUgbDNjY192YWx1ZXMgYXJlIG9ubHkgcHJvZ3JhbW1lZCB0byB0 aGUKKyAqIExOQ0ZDTU9DUzAgLSBMTkNGQ01PQ1MzMiByZWdpc3RlcnMuCisgKgorICogVGhlc2Ug dGFibGVzIGFyZSBpbnRlbmRlZCB0byBiZSBrZXB0IHJlYXNvbmFibHkgY29uc2lzdGVudCBhY3Jv c3MKKyAqIHBsYXRmb3Jtcy4gSG93ZXZlciBzb21lIG9mIHRoZSBmaWVsZHMgYXJlIG5vdCBhcHBs aWNhYmxlIHRvIGFsbCBvZgorICogdGhlbS4KKyAqCisgKiBOT1RFOiBUaGVzZSB0YWJsZXMgTVVT VCBzdGFydCB3aXRoIGJlaW5nIHVuY2FjaGVkIGFuZCB0aGUgbGVuZ3RoCisgKiAgICAgICBNVVNU IGJlIGxlc3MgdGhhbiA2MyBhcyB0aGUgbGFzdCB0d28gcmVnaXN0ZXJzIGFyZSByZXNlcnZlZAor ICogICAgICAgYnkgdGhlIGhhcmR3YXJlLiAgVGhlc2UgdGFibGVzIGFyZSBwYXJ0IG9mIHRoZSBr ZXJuZWwgQUJJIGFuZAorICogICAgICAgbWF5IG9ubHkgYmUgdXBkYXRlZCBpbmNyZW1lbnRhbGx5 IGJ5IGFkZGluZyBlbnRyaWVzIGF0IHRoZQorICogICAgICAgZW5kLgorICovCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgc2t5bGFrZV9tb2NzX3RhYmxlW10gPSB7CisJ LyogeyAweDAwMDAwMDA5LCAweDAwMTAgfSAqLworCXsgKExFX0NBQ0hFQUJJTElUWShMRV9VQykg fCBMRV9UR1RfQ0FDSEUoTExDX0VMTEMpIHwgTEVfTFJVTSgwKSB8CisJICAgTEVfQU9NKDApIHwg TEVfUlNDKDApIHwgTEVfU0NDKDApIHwgTEVfUEZNKDApIHwgTEVfU0NGKDApKSwKKwkgIChMM19F U0MoMCkgfCBMM19TQ0MoMCkgfCBMM19DQUNIRUFCSUxJVFkoTDNfVUMpKSB9LAorCS8qIHsgMHgw MDAwMDAzOCwgMHgwMDMwIH0gKi8KKwl7IChMRV9DQUNIRUFCSUxJVFkoTEVfUEFHRVRBQkxFKSB8 IExFX1RHVF9DQUNIRShMTENfRUxMQykgfCBMRV9MUlVNKDMpIHwKKwkgICBMRV9BT00oMCkgfCBM RV9SU0MoMCkgfCBMRV9TQ0MoMCkgfCBMRV9QRk0oMCkgfCBMRV9TQ0YoMCkpLAorCSAgKEwzX0VT QygwKSB8IEwzX1NDQygwKSB8IEwzX0NBQ0hFQUJJTElUWShMM19XQikpIH0sCisJLyogeyAweDAw MDAwMDNiLCAweDAwMzAgfSAqLworCXsgKExFX0NBQ0hFQUJJTElUWShMRV9XQikgfCBMRV9UR1Rf Q0FDSEUoTExDX0VMTEMpIHwgTEVfTFJVTSgzKSB8CisJICAgTEVfQU9NKDApIHwgTEVfUlNDKDAp IHwgTEVfU0NDKDApIHwgTEVfUEZNKDApIHwgTEVfU0NGKDApKSwKKwkgIChMM19FU0MoMCkgfCBM M19TQ0MoMCkgfCBMM19DQUNIRUFCSUxJVFkoTDNfV0IpKSB9Cit9OworCisvKiBOT1RFOiB0aGUg TEVfVEdUX0NBQ0hFIGlzIG5vdCB1c2VkIG9uIEJyb3h0b24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfbW9jc19lbnRyeSBicm94dG9uX21vY3NfdGFibGVbXSA9IHsKKwkvKiB7IDB4 MDAwMDAwMDksIDB4MDAxMCB9ICovCisJeyAoTEVfQ0FDSEVBQklMSVRZKExFX1VDKSB8IExFX1RH VF9DQUNIRShMTENfRUxMQykgfCBMRV9MUlVNKDApIHwKKwkgICBMRV9BT00oMCkgfCBMRV9SU0Mo MCkgfCBMRV9TQ0MoMCkgfCBMRV9QRk0oMCkgfCBMRV9TQ0YoMCkpLAorCSAgKEwzX0VTQygwKSB8 IEwzX1NDQygwKSB8IEwzX0NBQ0hFQUJJTElUWShMM19VQykpIH0sCisJLyogeyAweDAwMDAwMDM4 LCAweDAwMzAgfSAqLworCXsgKExFX0NBQ0hFQUJJTElUWShMRV9QQUdFVEFCTEUpIHwgTEVfVEdU X0NBQ0hFKExMQ19FTExDKSB8IExFX0xSVU0oMykgfAorCSAgIExFX0FPTSgwKSB8IExFX1JTQygw KSB8IExFX1NDQygwKSB8IExFX1BGTSgwKSB8IExFX1NDRigwKSksCisJICAoTDNfRVNDKDApIHwg TDNfU0NDKDApIHwgTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSkgfSwKKwkvKiB7IDB4MDAwMDAwM2Is IDB4MDAzMCB9ICovCisJeyAoTEVfQ0FDSEVBQklMSVRZKExFX1dCKSB8IExFX1RHVF9DQUNIRShM TENfRUxMQykgfCBMRV9MUlVNKDMpIHwKKwkgICBMRV9BT00oMCkgfCBMRV9SU0MoMCkgfCBMRV9T Q0MoMCkgfCBMRV9QRk0oMCkgfCBMRV9TQ0YoMCkpLAorCSAgKEwzX0VTQygwKSB8IEwzX1NDQygw KSB8IEwzX0NBQ0hFQUJJTElUWShMM19XQikpIH0KK307CisKKy8qKgorICogZ2V0X21vY3Nfc2V0 dGluZ3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZXMgb2YgdGhl IE1PQ1MgdGFibGUgdGhhdCBuZWVkcyB0bworICogYmUgcHJvZ3JhbW1lZCBmb3IgdGhlIHBsYXRm b3JtLiBJdCB3aWxsIHJldHVybiB0aGUgdmFsdWVzIHRoYXQgbmVlZAorICogdG8gYmUgcHJvZ3Jh bW1lZCBhbmQgaWYgdGhleSBuZWVkIHRvIGJlIHByb2dyYW1tZWQuCisgKgorICogSWYgdGhlIHJl dHVybiB2YWx1ZXMgaXMgZmFsc2UgdGhlbiB0aGUgcmVnaXN0ZXJzIGRvIG5vdCBuZWVkIHByb2dy YW1taW5nLgorICovCitzdGF0aWMgYm9vbCBnZXRfbW9jc19zZXR0aW5ncyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgKnRhYmxlKQor eworCWJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAoSVNfU0tZTEFLRShkZXYpKSB7CisJCXRh YmxlLT5zaXplICA9IEFSUkFZX1NJWkUoc2t5bGFrZV9tb2NzX3RhYmxlKTsKKwkJdGFibGUtPnRh YmxlID0gc2t5bGFrZV9tb2NzX3RhYmxlOworCQlyZXN1bHQgPSB0cnVlOworCX0gZWxzZSBpZiAo SVNfQlJPWFRPTihkZXYpKSB7CisJCXRhYmxlLT5zaXplICA9IEFSUkFZX1NJWkUoYnJveHRvbl9t b2NzX3RhYmxlKTsKKwkJdGFibGUtPnRhYmxlID0gYnJveHRvbl9tb2NzX3RhYmxlOworCQlyZXN1 bHQgPSB0cnVlOworCX0gZWxzZSB7CisJCS8qIFBsYXRmb3JtIHRoYXQgc2hvdWxkIGhhdmUgYSBN T0NTIHRhYmxlIGRvZXMgbm90ICovCisJCVdBUk5fT04oSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0g OSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBlbWl0X21vY3NfY29udHJv bF90YWJsZSgpIC0gZW1pdCB0aGUgbW9jcyBjb250cm9sIHRhYmxlCisgKiBAcmVxOglSZXF1ZXN0 IHRvIHNldCB1cCB0aGUgTU9DUyB0YWJsZSBmb3IuCisgKiBAdGFibGU6CVRoZSB2YWx1ZXMgdG8g cHJvZ3JhbSBpbnRvIHRoZSBjb250cm9sIHJlZ3MuCisgKiBAcmVnX2Jhc2U6CVRoZSBiYXNlIGZv ciB0aGUgZW5naW5lIHRoYXQgbmVlZHMgdG8gYmUgcHJvZ3JhbW1lZC4KKyAqCisgKiBUaGlzIGZ1 bmN0aW9uIHNpbXBseSBlbWl0cyBhIE1JX0xPQURfUkVHSVNURVJfSU1NIGNvbW1hbmQgZm9yIHRo ZQorICogZ2l2ZW4gdGFibGUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGFkZHJlc3MuCisgKgorICog QHJldHVybiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSB0aGUgZXJyb3Igc3RhdHVzLgorICovCitz dGF0aWMgaW50IGVtaXRfbW9jc19jb250cm9sX3RhYmxlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJs ZSwKKwkJCQkgICB1MzIgcmVnX2Jhc2UpCit7CisJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJp bmdidWYgPSByZXEtPnJpbmdidWY7CisJdW5zaWduZWQgaW50IGluZGV4OworCWludCByZXQ7CisK KwlyZXQgPSBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4ocmVxLCAyICsgMiAqIEdFTjlfTlVNX01P Q1NfRU5UUklFUyk7CisJaWYgKHJldCkgeworCQlEUk1fREVCVUcoImludGVsX2xvZ2ljYWxfcmlu Z19iZWdpbiBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaW50ZWxf bG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwKKwkJCQlNSV9MT0FEX1JFR0lTVEVSX0lNTShHRU45 X05VTV9NT0NTX0VOVFJJRVMpKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRhYmxlLT5z aXplOyBpbmRleCsrKSB7CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHJlZ19i YXNlICsgaW5kZXggKiA0KTsKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwKKwkJ CQkJdGFibGUtPnRhYmxlW2luZGV4XS5jb250cm9sX3ZhbHVlKTsKKwl9CisKKwkvKgorCSAqIE9r LCBub3cgc2V0IHRoZSB1bnVzZWQgZW50cmllcyB0byB1bmNhY2hlZC4gVGhlc2UgZW50cmllcwor CSAqIGFyZSBvZmZpY2lhbGx5IHVuZGVmaW5lZCBhbmQgbm8gY29udHJhY3QgZm9yIHRoZSBjb250 ZW50cworCSAqIGFuZCBzZXR0aW5ncyBpcyBnaXZlbiBmb3IgdGhlc2UgZW50cmllcy4KKwkgKgor CSAqIEVudHJ5IDAgaW4gdGhlIHRhYmxlIGlzIHVuY2FjaGVkIC0gc28gd2UgYXJlIGp1c3Qgd3Jp dGluZworCSAqIHRoYXQgdmFsdWUgdG8gYWxsIHRoZSB1c2VkIGVudHJpZXMuCisJICovCisJZm9y ICg7IGluZGV4IDwgR0VOOV9OVU1fTU9DU19FTlRSSUVTOyBpbmRleCsrKSB7CisJCWludGVsX2xv Z2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHJlZ19iYXNlICsgaW5kZXggKiA0KTsKKwkJaW50ZWxf bG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgdGFibGUtPnRhYmxlWzBdLmNvbnRyb2xfdmFsdWUp OworCX0KKworCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX05PT1ApOworCWlu dGVsX2xvZ2ljYWxfcmluZ19hZHZhbmNlKHJpbmdidWYpOworCisJcmV0dXJuIDA7Cit9CisKKy8q KgorICogZW1pdF9tb2NzX2wzY2NfdGFibGUoKSAtIGVtaXQgdGhlIG1vY3MgY29udHJvbCB0YWJs ZQorICogQHJlcToJUmVxdWVzdCB0byBzZXQgdXAgdGhlIE1PQ1MgdGFibGUgZm9yLgorICogQHRh YmxlOglUaGUgdmFsdWVzIHRvIHByb2dyYW0gaW50byB0aGUgY29udHJvbCByZWdzLgorICoKKyAq IFRoaXMgZnVuY3Rpb24gc2ltcGx5IGVtaXRzIGEgTUlfTE9BRF9SRUdJU1RFUl9JTU0gY29tbWFu ZCBmb3IgdGhlCisgKiBnaXZlbiB0YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4g VGhpcyByZWdpc3RlciBzZXQgaXMKKyAqIHByb2dyYW1tZWQgaW4gcGFpcnMuCisgKgorICogQHJl dHVybiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSB0aGUgZXJyb3Igc3RhdHVzLgorICovCitzdGF0 aWMgaW50IGVtaXRfbW9jc19sM2NjX3RhYmxlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxLAorCQkJCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSkKK3sKKwlz dHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiA9IHJlcS0+cmluZ2J1ZjsKKwl1bnNpZ25l ZCBpbnQgY291bnQ7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHZhbHVlOworCXUzMiBmaWxsZXIg PSAodGFibGUtPnRhYmxlWzBdLmwzY2NfdmFsdWUgJiAweGZmZmYpIHwKKwkJCSgodGFibGUtPnRh YmxlWzBdLmwzY2NfdmFsdWUgJiAweGZmZmYpIDw8IDE2KTsKKwlpbnQgcmV0OworCisJcmV0ID0g aW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHJlcSwgMiArIEdFTjlfTlVNX01PQ1NfRU5UUklFUyk7 CisJaWYgKHJldCkgeworCQlEUk1fREVCVUcoImludGVsX2xvZ2ljYWxfcmluZ19iZWdpbiBmYWls ZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaW50ZWxfbG9naWNhbF9yaW5n X2VtaXQocmluZ2J1ZiwKKwkJCU1JX0xPQURfUkVHSVNURVJfSU1NKEdFTjlfTlVNX01PQ1NfRU5U UklFUyAvIDIpKTsKKworCWZvciAoaSA9IDAsIGNvdW50ID0gMDsgaSA8IHRhYmxlLT5zaXplIC8g MjsgaSsrLCBjb3VudCArPSAyKSB7CisJCXZhbHVlID0gKHRhYmxlLT50YWJsZVtjb3VudF0ubDNj Y192YWx1ZSAmIDB4ZmZmZikgfAorCQkJKCh0YWJsZS0+dGFibGVbY291bnQgKyAxXS5sM2NjX3Zh bHVlICYgMHhmZmZmKSA8PCAxNik7CisKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1 ZiwgR0VOOV9MTkNGQ01PQ1MwICsgaSAqIDQpOworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChy aW5nYnVmLCB2YWx1ZSk7CisJfQorCisJaWYgKHRhYmxlLT5zaXplICYgMHgwMSkgeworCQkvKiBP ZGQgdGFibGUgc2l6ZSAtIDEgbGVmdCBvdmVyICovCisJCXZhbHVlID0gKHRhYmxlLT50YWJsZVtj b3VudF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgfAorCQkJKCh0YWJsZS0+dGFibGVbMF0ubDNjY192 YWx1ZSAmIDB4ZmZmZikgPDwgMTYpOworCX0gZWxzZQorCQl2YWx1ZSA9IGZpbGxlcjsKKworCS8q CisJICogTm93IHNldCB0aGUgcmVzdCBvZiB0aGUgdGFibGUgdG8gdW5jYWNoZWQgLSB1c2UgZW50 cnkgMCBhcworCSAqIHRoaXMgd2lsbCBiZSB1bmNhY2hlZC4gTGVhdmUgdGhlIGxhc3QgcGFpciB1 bmluaXRpYWxpc2VkIGFzCisJICogdGhleSBhcmUgcmVzZXJ2ZWQgYnkgdGhlIGhhcmR3YXJlLgor CSAqLworCWZvciAoOyBpIDwgR0VOOV9OVU1fTU9DU19FTlRSSUVTIC8gMjsgaSsrKSB7CisJCWlu dGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIEdFTjlfTE5DRkNNT0NTMCArIGkgKiA0KTsK KwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgdmFsdWUpOworCisJCXZhbHVlID0g ZmlsbGVyOworCX0KKworCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX05PT1Ap OworCWludGVsX2xvZ2ljYWxfcmluZ19hZHZhbmNlKHJpbmdidWYpOworCisJcmV0dXJuIDA7Cit9 CisKKy8qKgorICogaW50ZWxfcmNzX2NvbnRleHRfaW5pdF9tb2NzKCkgLSBwcm9ncmFtIHRoZSBN T0NTIHJlZ2lzdGVyLgorICoKKyAqIEByZXE6CVJlcXVlc3QgdG8gc2V0IHVwIHRoZSBNT0NTIHRh YmxlcyBmb3IuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGVtaXQgYSBiYXRjaCBidWZmZXIg d2l0aCB0aGUgdmFsdWVzIHJlcXVpcmVkIGZvcgorICogcHJvZ3JhbW1pbmcgdGhlIE1PQ1MgcmVn aXN0ZXIgdmFsdWVzIGZvciBhbGwgdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQKKyAqIHJpbmdzLgor ICoKKyAqIFRoZXNlIHJlZ2lzdGVycyBhcmUgcGFydGlhbGx5IHN0b3JlZCBpbiB0aGUgUkNTIGNv bnRleHQsIHNvIHRoZXkgYXJlCisgKiBlbWl0dGVkIGF0IHRoZSBzYW1lIHRpbWUgc28gdGhhdCB3 aGVuIGEgY29udGV4dCBpcyBjcmVhdGVkIHRoZXNlIHJlZ2lzdGVycworICogYXJlIHNldCB1cC4g VGhlc2UgcmVnaXN0ZXJzIGhhdmUgdG8gYmUgZW1pdHRlZCBpbnRvIHRoZSBzdGFydCBvZiB0aGUK KyAqIGNvbnRleHQgYXMgc2V0dGluZyB0aGUgRUxTUCB3aWxsIHJlLWluaXQgc29tZSBvZiB0aGVz ZSByZWdpc3RlcnMgYmFjaworICogdG8gdGhlIGh3IHZhbHVlcy4KKyAqCisgKiBAcmV0dXJuIDAg b24gc3VjY2Vzcywgb3RoZXJ3aXNlIHRoZSBlcnJvciBzdGF0dXMuCisgKi8KK2ludCBpbnRlbF9y Y3NfY29udGV4dF9pbml0X21vY3Moc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCit7 CisJc3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgdDsKKwlpbnQgcmV0OworCisJaWYgKGdldF9t b2NzX3NldHRpbmdzKHJlcS0+cmluZy0+ZGV2LCAmdCkpIHsKKwkJLyogUHJvZ3JhbSB0aGUgY29u dHJvbCByZWdpc3RlcnMgKi8KKwkJcmV0ID0gZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmVxLCAm dCwgR0VOOV9HRlhfTU9DU18wKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0 ID0gZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmVxLCAmdCwgR0VOOV9NRlgwX01PQ1NfMCk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGVtaXRfbW9jc19jb250cm9sX3Rh YmxlKHJlcSwgJnQsIEdFTjlfTUZYMV9NT0NTXzApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJl dDsKKworCQlyZXQgPSBlbWl0X21vY3NfY29udHJvbF90YWJsZShyZXEsICZ0LCBHRU45X1ZFQk9Y X01PQ1NfMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGVtaXRfbW9j c19jb250cm9sX3RhYmxlKHJlcSwgJnQsIEdFTjlfQkxUX01PQ1NfMCk7CisJCWlmIChyZXQpCisJ CQlyZXR1cm4gcmV0OworCisJCS8qIE5vdyBwcm9ncmFtIHRoZSBsM2NjIHJlZ2lzdGVycyAqLwor CQlyZXQgPSBlbWl0X21vY3NfbDNjY190YWJsZShyZXEsICZ0KTsKKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CisKKwkJRFJNX0RFQlVHKCJNT0NTOiBUYWJsZSBzZXQgaW4gY29udGV4dC5cbiIp OworCX0gZWxzZSB7CisJCURSTV9ERUJVRygiTU9DUzogVGFibGUgbm90IHN1cHBvcnRlZCBvbiBw bGF0Zm9ybS5cbiIpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9j cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTQ1YjEKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmgKQEAgLTAsMCArMSw1 NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQg ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cisg KgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUu CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwK KyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIElO VEVMX01PQ1NfSAorI2RlZmluZSBJTlRFTF9NT0NTX0gKKworLyoqCisgKiBET0M6IE1lbW9yeSBP YmplY3RzIENvbnRyb2wgU3RhdGUgKE1PQ1MpCisgKgorICogTW90aXZhdGlvbjoKKyAqIEluIHBy ZXZpb3VzIEdlbnMgdGhlIE1PQ1Mgc2V0dGluZ3Mgd2FzIGEgdmFsdWUgdGhhdCB3YXMgc2V0IGJ5 IHVzZXIgbGFuZCBhcworICogcGFydCBvZiB0aGUgYmF0Y2guIEluIEdlbjkgdGhpcyBoYXMgY2hh bmdlZCB0byBiZSBhIHNpbmdsZSB0YWJsZSAocGVyIHJpbmcpCisgKiB0aGF0IGFsbCBiYXRjaGVz IG5vdyByZWZlcmVuY2UgYnkgaW5kZXggaW5zdGVhZCBvZiBwcm9ncmFtbWluZyB0aGUgTU9DUwor ICogZGlyZWN0bHkuCisgKgorICogVGhlIG9uZSB3cmlua2xlIGluIHRoaXMgaXMgdGhhdCBvbmx5 IFBBUlQgb2YgdGhlIE1PQ1MgdGFibGVzIGFyZSBpbmNsdWRlZAorICogaW4gY29udGV4dCAoVGhl IEdGWF9NT0NTXzAgLSBHRlhfTU9DU182NCBhbmQgdGhlIExOQ0ZDTU9DUzAgLSBMTkNGQ01PQ1Mz MgorICogcmVnaXN0ZXJzKS4gVGhlIHJlc3QgYXJlIG5vdCAodGhlIHNldHRpbmdzIGZvciB0aGUg b3RoZXIgcmluZ3MpLgorICoKKyAqIFRoaXMgdGFibGUgbmVlZHMgdG8gYmUgc2V0IGF0IHN5c3Rl bSBzdGFydC11cCBiZWNhdXNlIHRoZSB3YXkgdGhlIHRhYmxlCisgKiBpbnRlcmFjdHMgd2l0aCB0 aGUgY29udGV4dHMgYW5kIHRoZSBHbW1MaWIgaW50ZXJmYWNlLgorICoKKyAqCisgKiBJbXBsZW1l bnRhdGlvbjoKKyAqCisgKiBUaGUgdGFibGVzIChvbmUgcGVyIHN1cHBvcnRlZCBwbGF0Zm9ybSkg YXJlIGRlZmluZWQgaW4gaW50ZWxfbW9jcy5jCisgKiBhbmQgYXJlIHByb2dyYW1tZWQgaW4gdGhl IGZpcnN0IGJhdGNoIGFmdGVyIHRoZSBjb250ZXh0IGlzIGxvYWRlZAorICogKHdpdGggdGhlIGhh cmR3YXJlIHdvcmthcm91bmRzKS4gVGhpcyB3aWxsIHRoZW4gbGV0IHRoZSB1c3VhbAorICogY29u dGV4dCBoYW5kbGluZyBrZWVwIHRoZSBNT0NTIGluIHN0ZXAuCisgKi8KKworI2luY2x1ZGUgPGRy bS9kcm1QLmg+CisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworaW50IGludGVsX3Jjc19jb250ZXh0 X2luaXRfbW9jcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSk7CisKKyNlbmRpZgot LSAKMi40LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==