From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v2] drm/i915: Add stub mmio read/write routines to mock device Date: Wed, 12 Apr 2017 10:21:43 +0100 Message-ID: <20170412092143.3822-1-chris@chris-wilson.co.uk> References: <20170411234427.14841-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 383796E692 for ; Wed, 12 Apr 2017 09:21:47 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id q125so5096726wmd.3 for ; Wed, 12 Apr 2017 02:21:47 -0700 (PDT) In-Reply-To: <20170411234427.14841-1-chris@chris-wilson.co.uk> 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 UHJvdmlkZSBkdW1teSBmdW5jdGlvbiBwb2ludGVycyBmb3IgdGhlIG1vY2sgZGV2aWNlIGluIGNh c2Ugd2UgZG8gaGl0Cm1taW8gZHVyaW5nIHRlc3RpbmcuCgp2MjogVXNlIEFTU0lHTl9SRUFEL1dS SVRFX01NSU9fRlVOQ1MgbWFjcm9zCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlz QGNocmlzLXdpbHNvbi5jby51az4KUmV2aWV3ZWQtYnk6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFz LmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4gI3YxCi0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfdW5jb3JlLmMgICAgICAgICAgICAgIHwgNDcgKysrKysrKysrKysrLS0tLS0tLS0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMgfCAgMiAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja191bmNvcmUuYyAgICAgfCA0NiAr KysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21v Y2tfdW5jb3JlLmggICAgIHwgMzAgKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDEw MSBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja191bmNvcmUuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3VuY29yZS5oCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF91bmNvcmUuYwppbmRleCBmYjM4Yzc2OTJmYzIuLjBjZDU2YmYwMDY1MCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKQEAgLTExMDgsMTkgKzExMDgsMTkgQEAg X19nZW42X3dyaXRlKDMyKQogI3VuZGVmIEdFTjZfV1JJVEVfRk9PVEVSCiAjdW5kZWYgR0VONl9X UklURV9IRUFERVIKIAotI2RlZmluZSBBU1NJR05fV1JJVEVfTU1JT19WRlVOQ1MoeCkgXAorI2Rl ZmluZSBBU1NJR05fV1JJVEVfTU1JT19WRlVOQ1MoaTkxNSwgeCkgXAogZG8geyBcCi0JZGV2X3By aXYtPnVuY29yZS5mdW5jcy5tbWlvX3dyaXRlYiA9IHgjI193cml0ZTg7IFwKLQlkZXZfcHJpdi0+ dW5jb3JlLmZ1bmNzLm1taW9fd3JpdGV3ID0geCMjX3dyaXRlMTY7IFwKLQlkZXZfcHJpdi0+dW5j b3JlLmZ1bmNzLm1taW9fd3JpdGVsID0geCMjX3dyaXRlMzI7IFwKKwkoaTkxNSktPnVuY29yZS5m dW5jcy5tbWlvX3dyaXRlYiA9IHgjI193cml0ZTg7IFwKKwkoaTkxNSktPnVuY29yZS5mdW5jcy5t bWlvX3dyaXRldyA9IHgjI193cml0ZTE2OyBcCisJKGk5MTUpLT51bmNvcmUuZnVuY3MubW1pb193 cml0ZWwgPSB4IyNfd3JpdGUzMjsgXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBBU1NJR05fUkVB RF9NTUlPX1ZGVU5DUyh4KSBcCisjZGVmaW5lIEFTU0lHTl9SRUFEX01NSU9fVkZVTkNTKGk5MTUs IHgpIFwKIGRvIHsgXAotCWRldl9wcml2LT51bmNvcmUuZnVuY3MubW1pb19yZWFkYiA9IHgjI19y ZWFkODsgXAotCWRldl9wcml2LT51bmNvcmUuZnVuY3MubW1pb19yZWFkdyA9IHgjI19yZWFkMTY7 IFwKLQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLm1taW9fcmVhZGwgPSB4IyNfcmVhZDMyOyBcCi0J ZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5tbWlvX3JlYWRxID0geCMjX3JlYWQ2NDsgXAorCShpOTE1 KS0+dW5jb3JlLmZ1bmNzLm1taW9fcmVhZGIgPSB4IyNfcmVhZDg7IFwKKwkoaTkxNSktPnVuY29y ZS5mdW5jcy5tbWlvX3JlYWR3ID0geCMjX3JlYWQxNjsgXAorCShpOTE1KS0+dW5jb3JlLmZ1bmNz Lm1taW9fcmVhZGwgPSB4IyNfcmVhZDMyOyBcCisJKGk5MTUpLT51bmNvcmUuZnVuY3MubW1pb19y ZWFkcSA9IHgjI19yZWFkNjQ7IFwKIH0gd2hpbGUgKDApCiAKIApAQCAtMTMxMCwzNCArMTMxMCwz NCBAQCB2b2lkIGludGVsX3VuY29yZV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKIAkJaTkxNV9wbWljX2J1c19hY2Nlc3Nfbm90aWZpZXI7CiAKIAlpZiAoSVNfR0VOKGRl dl9wcml2LCAyLCA0KSB8fCBpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpIHsKLQkJQVNTSUdO X1dSSVRFX01NSU9fVkZVTkNTKGdlbjIpOwotCQlBU1NJR05fUkVBRF9NTUlPX1ZGVU5DUyhnZW4y KTsKKwkJQVNTSUdOX1dSSVRFX01NSU9fVkZVTkNTKGRldl9wcml2LCBnZW4yKTsKKwkJQVNTSUdO X1JFQURfTU1JT19WRlVOQ1MoZGV2X3ByaXYsIGdlbjIpOwogCX0gZWxzZSBpZiAoSVNfR0VONShk ZXZfcHJpdikpIHsKLQkJQVNTSUdOX1dSSVRFX01NSU9fVkZVTkNTKGdlbjUpOwotCQlBU1NJR05f UkVBRF9NTUlPX1ZGVU5DUyhnZW41KTsKKwkJQVNTSUdOX1dSSVRFX01NSU9fVkZVTkNTKGRldl9w cml2LCBnZW41KTsKKwkJQVNTSUdOX1JFQURfTU1JT19WRlVOQ1MoZGV2X3ByaXYsIGdlbjUpOwog CX0gZWxzZSBpZiAoSVNfR0VOKGRldl9wcml2LCA2LCA3KSkgewotCQlBU1NJR05fV1JJVEVfTU1J T19WRlVOQ1MoZ2VuNik7CisJCUFTU0lHTl9XUklURV9NTUlPX1ZGVU5DUyhkZXZfcHJpdiwgZ2Vu Nik7CiAKIAkJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7CiAJCQlBU1NJR05fRldfRE9N QUlOU19UQUJMRShfX3Zsdl9md19yYW5nZXMpOwotCQkJQVNTSUdOX1JFQURfTU1JT19WRlVOQ1Mo Znd0YWJsZSk7CisJCQlBU1NJR05fUkVBRF9NTUlPX1ZGVU5DUyhkZXZfcHJpdiwgZnd0YWJsZSk7 CiAJCX0gZWxzZSB7Ci0JCQlBU1NJR05fUkVBRF9NTUlPX1ZGVU5DUyhnZW42KTsKKwkJCUFTU0lH Tl9SRUFEX01NSU9fVkZVTkNTKGRldl9wcml2LCBnZW42KTsKIAkJfQogCX0gZWxzZSBpZiAoSVNf R0VOOChkZXZfcHJpdikpIHsKIAkJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7CiAJCQlB U1NJR05fRldfRE9NQUlOU19UQUJMRShfX2Nodl9md19yYW5nZXMpOwotCQkJQVNTSUdOX1dSSVRF X01NSU9fVkZVTkNTKGZ3dGFibGUpOwotCQkJQVNTSUdOX1JFQURfTU1JT19WRlVOQ1MoZnd0YWJs ZSk7CisJCQlBU1NJR05fV1JJVEVfTU1JT19WRlVOQ1MoZGV2X3ByaXYsIGZ3dGFibGUpOworCQkJ QVNTSUdOX1JFQURfTU1JT19WRlVOQ1MoZGV2X3ByaXYsIGZ3dGFibGUpOwogCiAJCX0gZWxzZSB7 Ci0JCQlBU1NJR05fV1JJVEVfTU1JT19WRlVOQ1MoZ2VuOCk7Ci0JCQlBU1NJR05fUkVBRF9NTUlP X1ZGVU5DUyhnZW42KTsKKwkJCUFTU0lHTl9XUklURV9NTUlPX1ZGVU5DUyhkZXZfcHJpdiwgZ2Vu OCk7CisJCQlBU1NJR05fUkVBRF9NTUlPX1ZGVU5DUyhkZXZfcHJpdiwgZ2VuNik7CiAJCX0KIAl9 IGVsc2UgewogCQlBU1NJR05fRldfRE9NQUlOU19UQUJMRShfX2dlbjlfZndfcmFuZ2VzKTsKLQkJ QVNTSUdOX1dSSVRFX01NSU9fVkZVTkNTKGZ3dGFibGUpOwotCQlBU1NJR05fUkVBRF9NTUlPX1ZG VU5DUyhmd3RhYmxlKTsKKwkJQVNTSUdOX1dSSVRFX01NSU9fVkZVTkNTKGRldl9wcml2LCBmd3Rh YmxlKTsKKwkJQVNTSUdOX1JFQURfTU1JT19WRlVOQ1MoZGV2X3ByaXYsIGZ3dGFibGUpOwogCQlp ZiAoSEFTX0RFQ09VUExFRF9NTUlPKGRldl9wcml2KSkgewogCQkJZGV2X3ByaXYtPnVuY29yZS5m dW5jcy5tbWlvX3JlYWRsID0KIAkJCQkJCWdlbjlfZGVjb3VwbGVkX3JlYWQzMjsKQEAgLTEzNTMs OCArMTM1Myw2IEBAIHZvaWQgaW50ZWxfdW5jb3JlX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogCiAJaTkxNV9jaGVja19hbmRfY2xlYXJfZmF1bHRzKGRldl9wcml2KTsK IH0KLSN1bmRlZiBBU1NJR05fV1JJVEVfTU1JT19WRlVOQ1MKLSN1bmRlZiBBU1NJR05fUkVBRF9N TUlPX1ZGVU5DUwogCiB2b2lkIGludGVsX3VuY29yZV9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKIHsKQEAgLTE5MDAsNSArMTg5OCw2IEBAIGludGVsX3VuY29yZV9mb3Jj ZXdha2VfZm9yX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiB9CiAKICNp ZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKKyNpbmNsdWRlICJzZWxmdGVz dHMvbW9ja191bmNvcmUuYyIKICNpbmNsdWRlICJzZWxmdGVzdHMvaW50ZWxfdW5jb3JlLmMiCiAj ZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dl bV9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZp Y2UuYwppbmRleCA2YTgyNThlYWNkY2IuLmYzMjFiZGZlMGI1YiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYwpAQCAtMzAsNiArMzAsNyBA QAogI2luY2x1ZGUgIm1vY2tfZ2VtX2RldmljZS5oIgogI2luY2x1ZGUgIm1vY2tfZ2VtX29iamVj dC5oIgogI2luY2x1ZGUgIm1vY2tfZ3R0LmgiCisjaW5jbHVkZSAibW9ja191bmNvcmUuaCIKIAog dm9pZCBtb2NrX2RldmljZV9mbHVzaChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIHsK QEAgLTE0Myw2ICsxNDQsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqbW9ja19nZW1fZGV2 aWNlKHZvaWQpCiAJbWt3cml0ZV9kZXZpY2VfaW5mbyhpOTE1KS0+Z2VuID0gLTE7CiAKIAlzcGlu X2xvY2tfaW5pdCgmaTkxNS0+bW0ub2JqZWN0X3N0YXRfbG9jayk7CisJbW9ja191bmNvcmVfaW5p dChpOTE1KTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmk5MTUtPmdwdV9lcnJvci53YWl0X3F1 ZXVlKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpOTE1LT5ncHVfZXJyb3IucmVzZXRfcXVldWUp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfdW5jb3Jl LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja191bmNvcmUuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhlZjE0YzdlNWUzOAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3VuY29yZS5jCkBA IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlv bgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8K KworI2luY2x1ZGUgIm1vY2tfdW5jb3JlLmgiCisKKyNkZWZpbmUgX19ub3Bfd3JpdGUoeCkgXAor c3RhdGljIHZvaWQgXAorbm9wX3dyaXRlIyN4KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgaTkxNV9yZWdfdCByZWcsIHUjI3ggdmFsLCBib29sIHRyYWNlKSB7IH0KK19fbm9wX3dy aXRlKDgpCitfX25vcF93cml0ZSgxNikKK19fbm9wX3dyaXRlKDMyKQorCisjZGVmaW5lIF9fbm9w X3JlYWQoeCkgXAorc3RhdGljIHUjI3ggXAorbm9wX3JlYWQjI3goc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCBpOTE1X3JlZ190IHJlZywgYm9vbCB0cmFjZSkgeyByZXR1cm4gMDsg fQorX19ub3BfcmVhZCg4KQorX19ub3BfcmVhZCgxNikKK19fbm9wX3JlYWQoMzIpCitfX25vcF9y ZWFkKDY0KQorCit2b2lkIG1vY2tfdW5jb3JlX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUpCit7CisJQVNTSUdOX1dSSVRFX01NSU9fVkZVTkNTKGk5MTUsIG5vcCk7CisJQVNTSUdO X1JFQURfTU1JT19WRlVOQ1MoaTkxNSwgbm9wKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3VuY29yZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL21vY2tfdW5jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5kNzlhYTNjYTRkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvbW9ja191bmNvcmUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29w eXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT CisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19NT0NLX1VOQ09SRV9I CisjZGVmaW5lIF9fTU9DS19VTkNPUkVfSAorCit2b2lkIG1vY2tfdW5jb3JlX2luaXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOworCisjZW5kaWYgLyogIV9fTU9DS19VTkNPUkVfSCAq LwotLSAKMi4xMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK