From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: [PATCH 54/56] drm/i915: Introduce mapping of user pages into video memory (userptr) ioctl Date: Fri, 9 May 2014 20:59:49 -0700 Message-ID: <1399694391-3935-55-git-send-email-benjamin.widawsky@intel.com> References: <1399694391-3935-1-git-send-email-benjamin.widawsky@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.bwidawsk.net (bwidawsk.net [166.78.191.112]) by gabe.freedesktop.org (Postfix) with ESMTP id EC5C96F0B1 for ; Fri, 9 May 2014 21:03:15 -0700 (PDT) In-Reply-To: <1399694391-3935-1-git-send-email-benjamin.widawsky@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 Cc: Akash Goel List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpCeSBleHBvcnRp bmcgdGhlIGFiaWxpdHkgdG8gbWFwIHVzZXIgYWRkcmVzcyBhbmQgaW5zZXJ0aW5nIFBURXMKcmVw cmVzZW50aW5nIHRoZWlyIGJhY2tpbmcgcGFnZXMgaW50byB0aGUgR1RULCB3ZSBjYW4gZXhwbG9p dCBVTUEgaW4gb3JkZXIKdG8gdXRpbGl6ZSBub3JtYWwgYXBwbGljYXRpb24gZGF0YSBhcyBhIHRl eHR1cmUgc291cmNlIG9yIGV2ZW4gYXMgYQpyZW5kZXIgdGFyZ2V0IChkZXBlbmRpbmcgdXBvbiB0 aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBjaGlwc2V0KS4gVGhpcyBoYXMKYSBudW1iZXIgb2YgdXNl cywgd2l0aCB6ZXJvLWNvcHkgZG93bmxvYWRzIHRvIHRoZSBHUFUgYW5kIGVmZmljaWVudApyZWFk YmFjayBtYWtpbmcgdGhlIGludGVybWl4ZWQgc3RyZWFtaW5nIG9mIENQVSBhbmQgR1BVIG9wZXJh dGlvbnMKZmFpcmx5IGVmZmljaWVudC4gVGhpcyBhYmlsaXR5IGhhcyBtYW55IHdpZGVzcHJlYWQg aW1wbGljYXRpb25zIGZyb20KZmFzdGVyIHJlbmRlcmluZyBvZiBjbGllbnQtc2lkZSBzb2Z0d2Fy ZSByYXN0ZXJpc2VycyAoY2hyb21pdW0pLAptaXRpZ2F0aW9uIG9mIHN0YWxscyBkdWUgdG8gcmVh ZCBiYWNrIChmaXJlZm94KSBhbmQgdG8gZmFzdGVyIHBpcGVsaW5pbmcKb2YgdGV4dHVyZSBkYXRh IChzdWNoIGFzIHBpeGVsIGJ1ZmZlciBvYmplY3RzIGluIEdMIG9yIGRhdGEgYmxvYnMgaW4gQ0wp LgoKdjI6IENvbXBpbGUgd2l0aCBDT05GSUdfTU1VX05PVElGSUVSCnYzOiBXZSBjYW4gc2xlZXAg d2hpbGUgcGVyZm9ybWluZyBpbnZhbGlkYXRlLXJhbmdlLCB3aGljaCB3ZSBjYW4gdXRpbGlzZQp0 byBkcm9wIG91ciBwYWdlIHJlZmVyZW5jZXMgcHJpb3IgdG8gdGhlIGtlcm5lbCBtYW5pcHVsYXRp bmcgdGhlIHZtYQooZm9yIGVpdGhlciBkaXNjYXJkIG9yIGNsb25pbmcpIGFuZCBzbyBwcm90ZWN0 IG5vcm1hbCB1c2Vycy4KdjQ6IE9ubHkgcnVuIHRoZSBpbnZhbGlkYXRlIG5vdGlmaWVyIGlmIHRo ZSByYW5nZSBpbnRlcmNlcHRzIHRoZSBiby4KdjU6IFByZXZlbnQgdXNlcnNwYWNlIGZyb20gYXR0 ZW1wdGluZyB0byBHVFQgbW1hcCBub24tcGFnZSBhbGlnbmVkIGJ1ZmZlcnMKdjY6IFJlY2hlY2sg YWZ0ZXIgcmVhY3F1aXJlIG11dGV4IGZvciBsb3N0IG1tdS4Kdjc6IEZpeCBpbXBsaWNpdCBwYWRk aW5nIG9mIGlvY3RsIHN0cnVjdCBieSByb3VuZGluZyB0byBuZXh0IDY0Yml0IGJvdW5kYXJ5Lgp2 ODogRml4IHJlYmFzaW5nIGVycm9yIGFmdGVyIGZvcndhcmRpbmcgcG9ydGluZyB0aGUgYmFjayBw b3J0Lgp2OTogTGltaXQgdGhlIHVzZXJwdHIgdG8gcGFnZSBhbGlnbmVkIGVudHJpZXMuIFdlIG5v dyBleHBlY3QgdXNlcnNwYWNlCiAgICB0byBoYW5kbGUgYWxsIHRoZSBvZmZzZXQtaW4tcGFnZSBh ZGp1c3RtZW50cyBpdHNlbGYuCnYxMDogUHJldmVudCB2bWEgZnJvbSBiZWluZyBjb3BpZWQgYWNy b3NzIGZvcmsgdG8gYXZvaWQgaXNzdWVzIHdpdGggY293Lgp2MTE6IERyb3Agdm1hIGJlaGF2aW91 ciBjaGFuZ2VzIC0tIGxvY2tpbmcgaXMgbmlnaCBvbiBpbXBvc3NpYmxlLgogICAgIFVzZSBhIHdv cmtlciB0byBsb2FkIHVzZXIgcGFnZXMgdG8gYXZvaWQgbG9jayBpbnZlcnNpb25zLgp2MTI6IFVz ZSBnZXRfdGFza19tbSgpL21tcHV0KCkgZm9yIGNvcnJlY3QgcmVmY291bnRpbmcgb2YgbW0uCnYx MzogVXNlIGEgd29ya2VyIHRvIHJlbGVhc2UgdGhlIG1tdV9ub3RpZmllciB0byBhdm9pZCBsb2Nr IGludmVyc2lvbgp2MTQ6IERlY291cGxlIG1tdV9ub3RpZmllciBmcm9tIHN0cnVjdF9tdXRleCB1 c2luZyBhIGN1c3RvbSBtbXVfbm90aWZlcgogICAgIHdpdGggaXRzIG93biBsb2NraW5nIGFuZCB0 cmVlIG9mIG9iamVjdHMgZm9yIGVhY2ggbW0vbW11X25vdGlmaWVyLgp2MTU6IFByZXZlbnQgb3Zl cmxhcHBpbmcgdXNlcnB0ciBvYmplY3RzLCBhbmQgaW52YWxpZGF0ZSBhbGwgb2JqZWN0cwogICAg IHdpdGhpbiB0aGUgbW11X25vdGlmaWVyIHJhbmdlCnYxNjogRml4IGEgdHlwbyBmb3IgaXRlcmF0 aW5nIG92ZXIgbXVsdGlwbGUgb2JqZWN0cyBpbiB0aGUgcmFuZ2UgYW5kCiAgICAgcmVhcnJhbmdl IGVycm9yIHBhdGggdG8gZGVzdHJveSB0aGUgbW11X25vdGlmaWVyIGxvY2tsZXNzbHkuCiAgICAg QWxzbyBjbG9zZSBhIHJhY2UgYmV0d2VlbiBpbnZhbGlkYXRlX3JhbmdlIGFuZCB0aGUgZ2V0X3Bh Z2VzX3dvcmtlci4KdjE3OiBDbG9zZSBhIHJhY2UgYmV0d2VlbiBnZXRfcGFnZXNfd29ya2VyL2lu dmFsaWRhdGVfcmFuZ2UgYW5kIGZyZXNoCiAgICAgYWxsb2NhdGlvbnMgb2YgdGhlIHNhbWUgdXNl cnB0ciByYW5nZSAtIGFuZCBub3RpY2UgdGhhdAogICAgIHN0cnVjdF9tdXRleCB3YXMgcHJlc3Vt ZWQgdG8gYmUgaGVsZCB3aGVuIGR1cmluZyBjcmVhdGlvbiBpdCB3YXNuJ3QuCnYxODogU2lnaC4g Rml4IHRoZSByZWZhY3RvciBvZiBzdF9zZXRfcGFnZXMoKSB0byBhbGxvY2F0ZSBlbm91Z2ggbWVt b3J5CiAgICAgZm9yIHRoZSBzdHJ1Y3Qgc2dfdGFibGUgYW5kIHRvIGNsZWFyIGl0IGJlZm9yZSBy ZXBvcnRpbmcgYW4gZXJyb3IuCnYxOTogQWx3YXlzIGVycm9yIG91dCBvbiByZWFkLW9ubHkgdXNl cnB0ciByZXF1ZXN0cyBhcyB3ZSBkb24ndCBoYXZlIHRoZQogICAgIGhhcmR3YXJlIGluZnJhc3Ry dWN0dXJlIHRvIHN1cHBvcnQgdGhlbSBhdCB0aGUgbW9tZW50Lgp2MjA6IFJlZnVzZSB0byBpbXBs ZW1lbnQgcmVhZC1vbmx5IHN1cHBvcnQgdW50aWwgd2UgaGF2ZSB0aGUgcmVxdWlyZWQKICAgICBp bmZyYXN0cnVjdHVyZSAtIGJ1dCByZXNlcnZlIHRoZSBiaXQgaW4gZmxhZ3MgZm9yIGZ1dHVyZSB1 c2UuCnYyMTogdXNlX21tKCkgaXMgbm90IHJlcXVpcmVkIGZvciBnZXRfdXNlcl9wYWdlcygpLiBJ dCBpcyBvbmx5IG1lYW50IHRvCiAgICAgYmUgdXNlZCB0byBmaXggdXAgdGhlIGtlcm5lbCB0aHJl YWQncyBjdXJyZW50LT5tbSBmb3IgdXNlIHdpdGgKICAgICBjb3B5X3VzZXIoKS4KdjIyOiBVc2Ug c2dfYWxsb2NfdGFibGVfZnJvbV9wYWdlcyBmb3IgdGhhdCBjaHVua3kgZmVlbGluZwoKU2lnbmVk LW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBUdnJ0 a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AbGludXguaW50ZWwuY29tPgpDYzogIkdvbmcsIFpo aXBlbmciIDx6aGlwZW5nLmdvbmdAaW50ZWwuY29tPgpDYzogQWthc2ggR29lbCA8YWthc2guZ29l bEBpbnRlbC5jb20+CkNjOiAiVm9sa2luLCBCcmFkbGV5IEQiIDxicmFkbGV5LmQudm9sa2luQGlu dGVsLmNvbT4KUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBsaW51 eC5pbnRlbC5jb20+CgpDb25mbGljdHM6Cglkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5j Cglkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCglpbmNsdWRlL3VhcGkvZHJtL2k5MTVf ZHJtLmgKLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnICAgICAgICAgICAgfCAgIDEg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgMjQgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMgICAgICAgICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9kbWFidWYuYyAgfCAgIDUgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0 ci5jIHwgNzAxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jICAgfCAgIDIgKwogaW5jbHVkZS91YXBpL2RybS9pOTE1 X2RybS5oICAgICAgICAgICAgIHwgIDE2ICsKIDkgZmlsZXMgY2hhbmdlZCwgNzU0IGluc2VydGlv bnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV91c2VycHRyLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwppbmRleCBlNGUzYzAxLi40 MzdlMTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcKQEAgLTUsNiArNSw3IEBAIGNvbmZpZyBEUk1fSTkx NQogCWRlcGVuZHMgb24gKEFHUCB8fCBBR1A9bikKIAlzZWxlY3QgSU5URUxfR1RUCiAJc2VsZWN0 IEFHUF9JTlRFTCBpZiBBR1AKKwlzZWxlY3QgSU5URVJWQUxfVFJFRQogCSMgd2UgbmVlZCBzaG1m cyBmb3IgdGhlIHN3YXBwYWJsZSBiYWNraW5nIHN0b3JlLCBhbmQgaW4gcGFydGljdWxhcgogCSMg dGhlIHNobWVtX3JlYWRwYWdlKCkgd2hpY2ggZGVwZW5kcyB1cG9uIHRtcGZzCiAJc2VsZWN0IFNI TUVNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGI1ZDQwMjkuLmU1NDhmNGUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCkBAIC0yNyw2ICsyNyw3IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBc CiAJICBpOTE1X2dlbS5vIFwKIAkgIGk5MTVfZ2VtX3N0b2xlbi5vIFwKIAkgIGk5MTVfZ2VtX3Rp bGluZy5vIFwKKwkgIGk5MTVfZ2VtX3VzZXJwdHIubyBcCiAJICBpOTE1X2dwdV9lcnJvci5vIFwK IAkgIGk5MTVfaXJxLm8gXAogCSAgaTkxNV90cmFjZV9wb2ludHMubyBcCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kbWEuYwppbmRleCA1NGEwOGE5Li4wMGFlNmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMK QEAgLTE5OTUsNiArMTk5NSw3IEBAIGNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpOTE1X2lv Y3Rsc1tdID0gewogCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0NPTlRFWFRfREVTVFJPWSwg aTkxNV9nZW1fY29udGV4dF9kZXN0cm95X2lvY3RsLCBEUk1fVU5MT0NLRUR8RFJNX1JFTkRFUl9B TExPVyksCiAJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9SRUdfUkVBRCwgaTkxNV9yZWdfcmVhZF9p b2N0bCwgRFJNX1VOTE9DS0VEfERSTV9SRU5ERVJfQUxMT1cpLAogCURSTV9JT0NUTF9ERUZfRFJW KEk5MTVfR0VUX1JFU0VUX1NUQVRTLCBpOTE1X2dldF9yZXNldF9zdGF0c19pb2N0bCwgRFJNX1VO TE9DS0VEfERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1VT RVJQVFIsIGk5MTVfZ2VtX3VzZXJwdHJfaW9jdGwsIERSTV9VTkxPQ0tFRHxEUk1fUkVOREVSX0FM TE9XKSwKIH07CiAKIGludCBpOTE1X21heF9pb2N0bCA9IERSTV9BUlJBWV9TSVpFKGk5MTVfaW9j dGxzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDA4NDg2MzguLjYwNTEzZTcgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ky Yy1hbGdvLWJpdC5oPgogI2luY2x1ZGUgPGRybS9pbnRlbC1ndHQuaD4KICNpbmNsdWRlIDxsaW51 eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNodGFibGUuaD4KICNpbmNsdWRlIDxs aW51eC9pbnRlbC1pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxs aW51eC9wbV9xb3MuaD4KQEAgLTE3Miw2ICsxNzMsNyBAQCBlbnVtIGhwZF9waW4gewogCQlpZiAo KGludGVsX2Nvbm5lY3RvciktPmJhc2UuZW5jb2RlciA9PSAoX19lbmNvZGVyKSkKIAogc3RydWN0 IGRybV9pOTE1X3ByaXZhdGU7CitzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0OwogCiBlbnVtIGludGVs X2RwbGxfaWQgewogCURQTExfSURfUFJJVkFURSA9IC0xLCAvKiBub24tc2hhcmVkIGRwbGwgaW4g dXNlICovCkBAIC0zOTgsNiArNDAwLDcgQEAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlIHsK IAkJdTMyIHRpbGluZzoyOwogCQl1MzIgZGlydHk6MTsKIAkJdTMyIHB1cmdlYWJsZToxOworCQl1 MzIgdXNlcnB0cjoxOwogCQlzMzIgcmluZzo0OwogCQl1MzIgY2FjaGVfbGV2ZWw6MzsKIAl9ICoq YWN0aXZlX2JvLCAqKnBpbm5lZF9ibzsKQEAgLTE0NDQsNiArMTQ0Nyw5IEBAIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlIHsKIAlzdHJ1Y3QgaTkxNV9ndHQgZ3R0OyAvKiBWTSByZXByZXNlbnRpbmcg dGhlIGdsb2JhbCBhZGRyZXNzIHNwYWNlICovCiAKIAlzdHJ1Y3QgaTkxNV9nZW1fbW0gbW07Cisj aWYgZGVmaW5lZChDT05GSUdfTU1VX05PVElGSUVSKQorCURFQ0xBUkVfSEFTSFRBQkxFKG1tdV9u b3RpZmllcnMsIDcpOworI2VuZGlmCiAKIAkvKiBLZXJuZWwgTW9kZXNldHRpbmcgKi8KIApAQCAt MTU3Nyw2ICsxNTgzLDcgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIHsKIAkgKi8K IAlpbnQgKCpnZXRfcGFnZXMpKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICopOwogCXZvaWQg KCpwdXRfcGFnZXMpKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICopOworCXZvaWQgKCpyZWxl YXNlKShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqKTsKIH07CiAKIHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0IHsKQEAgLTE2OTAsOCArMTY5NywyMCBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCB7CiAKIAkvKiogZm9yIHBoeSBhbGxvY2F0ZWQgb2JqZWN0cyAqLwogCXN0cnVjdCBk cm1faTkxNV9nZW1fcGh5c19vYmplY3QgKnBoeXNfb2JqOwotfTsKIAorCXVuaW9uIHsKKwkJc3Ry dWN0IGk5MTVfZ2VtX3VzZXJwdHIgeworCQkJdWludHB0cl90IHB0cjsKKwkJCXVuc2lnbmVkIHJl YWRfb25seSA6MTsKKwkJCXVuc2lnbmVkIGFjdGl2ZSA6NDsKKyNkZWZpbmUgSTkxNV9HRU1fVVNF UlBUUl9NQVhfQUNUSVZFIDE1CisKKwkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCQkJc3RydWN0 IGk5MTVfbW11X29iamVjdCAqbW47CisJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcms7CisJCX0g dXNlcnB0cjsKKwl9OworfTsKICNkZWZpbmUgdG9faW50ZWxfYm8oeCkgY29udGFpbmVyX29mKHgs IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LCBiYXNlKQogCiAvKioKQEAgLTIxMjMsNiArMjE0 Miw5IEBAIGludCBpOTE1X2dlbV9zZXRfdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCiAJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBpbnQgaTkxNV9nZW1f Z2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2luaXRfdXNlcnB0cihzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKK2ludCBpOTE1X2dlbV91c2VycHRyX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwog aW50IGk5MTVfZ2VtX2dldF9hcGVydHVyZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkICpkYXRhLAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGludCBpOTE1X2dl bV93YWl0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYwppbmRleCAzMjBkNmIwLi4yODdkNDhlIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMKQEAgLTQyNDAsNiArNDI0MCw5IEBAIHZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3Qoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKQogCWlmIChvYmotPmJhc2UuaW1wb3J0X2F0dGFj aCkKIAkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KCZvYmotPmJhc2UsIE5VTEwpOwogCisJaWYgKG9i ai0+b3BzLT5yZWxlYXNlKQorCQlvYmotPm9wcy0+cmVsZWFzZShvYmopOworCiAJZHJtX2dlbV9v YmplY3RfcmVsZWFzZSgmb2JqLT5iYXNlKTsKIAlpOTE1X2dlbV9pbmZvX3JlbW92ZV9vYmooZGV2 X3ByaXYsIG9iai0+YmFzZS5zaXplKTsKIApAQCAtNDUxOSw2ICs0NTIyLDcgQEAgaW50IGk5MTVf Z2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJCURSTV9ERUJVR19EUklWRVIoImFs bG93IHdha2UgYWNrIHRpbWVkIG91dFxuIik7CiAJfQogCisJaTkxNV9nZW1faW5pdF91c2VycHRy KGRldik7CiAJaTkxNV9nZW1faW5pdF9nbG9iYWxfZ3R0KGRldik7CiAKIAlyZXQgPSBpOTE1X2dl bV9jb250ZXh0X2luaXQoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2RtYWJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZG1hYnVmLmMK aW5kZXggMzIxMTAyYS4uNjExOTViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZG1hYnVmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZG1h YnVmLmMKQEAgLTIyOSw2ICsyMjksMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29w cyBpOTE1X2RtYWJ1Zl9vcHMgPSAgewogc3RydWN0IGRtYV9idWYgKmk5MTVfZ2VtX3ByaW1lX2V4 cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICAgIHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqZ2VtX29iaiwgaW50IGZsYWdzKQogeworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmogPSB0b19pbnRlbF9ibyhnZW1fb2JqKTsKKworCWlmIChvYmotPnVzZXJwdHIubW0gJiYg b2JqLT51c2VycHRyLm1uID09IE5VTEwpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCiAJ cmV0dXJuIGRtYV9idWZfZXhwb3J0KGdlbV9vYmosICZpOTE1X2RtYWJ1Zl9vcHMsIGdlbV9vYmot PnNpemUsIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fdXNlcnB0ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYTM3Y2MKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKQEAgLTAsMCAr MSw3MDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMi0yMDE0IEludGVsIENvcnBvcmF0aW9u CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLwor CisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkx NV9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCisjaW5jbHVkZSAiaW50ZWxfZHJ2Lmgi CisjaW5jbHVkZSA8bGludXgvbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbXVfbm90 aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KKyNpbmNsdWRlIDxsaW51eC9z d2FwLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19NTVVfTk9USUZJRVIpCisjaW5jbHVkZSA8bGlu dXgvaW50ZXJ2YWxfdHJlZS5oPgorCitzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgeworCXNwaW5s b2NrX3QgbG9jazsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOworCXN0cnVjdCBtbXVfbm90aWZp ZXIgbW47CisJc3RydWN0IHJiX3Jvb3Qgb2JqZWN0czsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 OworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXVu c2lnbmVkIGxvbmcgY291bnQ7CisJdW5zaWduZWQgbG9uZyBzZXJpYWw7Cit9OworCitzdHJ1Y3Qg aTkxNV9tbXVfb2JqZWN0IHsKKwlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1tdTsKKwlzdHJ1 Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlIGl0OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv Ymo7Cit9OworCitzdGF0aWMgdm9pZCBpOTE1X2dlbV91c2VycHRyX21uX2ludmFsaWRhdGVfcmFu Z2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAqX21uLAorCQkJCQkJICAgICAgIHN0cnVjdCBt bV9zdHJ1Y3QgKm1tLAorCQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCQkg ICAgICAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICpt biA9IGNvbnRhaW5lcl9vZihfbW4sIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciwgbW4pOworCXN0 cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHNlcmlh bCA9IDA7CisKKwllbmQtLTsgLyogaW50ZXJ2YWwgcmFuZ2VzIGFyZSBpbmNsdXNpdmUsIGJ1dCBp bnZhbGlkYXRlIHJhbmdlIGlzIGV4Y2x1c2l2ZSAqLworCXdoaWxlIChzdGFydCA8IGVuZCkgewor CQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCisJCW9iaiA9IE5VTEw7CisJCXNw aW5fbG9jaygmbW4tPmxvY2spOworCQlpZiAoc2VyaWFsID09IG1uLT5zZXJpYWwpCisJCQlpdCA9 IGludGVydmFsX3RyZWVfaXRlcl9uZXh0KGl0LCBzdGFydCwgZW5kKTsKKwkJZWxzZQorCQkJaXQg PSBpbnRlcnZhbF90cmVlX2l0ZXJfZmlyc3QoJm1uLT5vYmplY3RzLCBzdGFydCwgZW5kKTsKKwkJ aWYgKGl0ICE9IE5VTEwpIHsKKwkJCW9iaiA9IGNvbnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVf bW11X29iamVjdCwgaXQpLT5vYmo7CisJCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2UoJm9iai0+ YmFzZSk7CisJCQlzZXJpYWwgPSBtbi0+c2VyaWFsOworCQl9CisJCXNwaW5fdW5sb2NrKCZtbi0+ bG9jayk7CisJCWlmIChvYmogPT0gTlVMTCkKKwkJCXJldHVybjsKKworCQltdXRleF9sb2NrKCZt bi0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQkvKiBDYW5jZWwgYW55IGFjdGl2ZSB3b3JrZXIgYW5k IGZvcmNlIHVzIHRvIHJlLWV2YWx1YXRlIGd1cCAqLworCQlvYmotPnVzZXJwdHIud29yayA9IE5V TEw7CisKKwkJaWYgKG9iai0+cGFnZXMgIT0gTlVMTCkgeworCQkJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShtbi0+ZGV2KTsKKwkJCXN0cnVjdCBpOTE1X3ZtYSAq dm1hLCAqdG1wOworCQkJYm9vbCB3YXNfaW50ZXJydXB0aWJsZTsKKworCQkJd2FzX2ludGVycnVw dGlibGUgPSBkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZTsKKwkJCWRldl9wcml2LT5tbS5pbnRl cnJ1cHRpYmxlID0gZmFsc2U7CisKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bWEsIHRt cCwgJm9iai0+dm1hX2xpc3QsIHZtYV9saW5rKSB7CisJCQkJaW50IHJldCA9IGk5MTVfdm1hX3Vu YmluZCh2bWEpOworCQkJCVdBUk5fT04ocmV0ICYmIHJldCAhPSAtRUlPKTsKKwkJCX0KKwkJCVdB Uk5fT04oaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopKTsKKworCQkJZGV2X3ByaXYtPm1t LmludGVycnVwdGlibGUgPSB3YXNfaW50ZXJydXB0aWJsZTsKKwkJfQorCisJCXN0YXJ0ID0gb2Jq LT51c2VycHRyLnB0ciArIG9iai0+YmFzZS5zaXplOworCisJCWRybV9nZW1fb2JqZWN0X3VucmVm ZXJlbmNlKCZvYmotPmJhc2UpOworCQltdXRleF91bmxvY2soJm1uLT5kZXYtPnN0cnVjdF9tdXRl eCk7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMgaTkxNV9n ZW1fdXNlcnB0cl9ub3RpZmllciA9IHsKKwkuaW52YWxpZGF0ZV9yYW5nZV9zdGFydCA9IGk5MTVf Z2VtX3VzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKK307CisKK3N0YXRpYyBzdHJ1 Y3QgaTkxNV9tbXVfbm90aWZpZXIgKgorX19pOTE1X21tdV9ub3RpZmllcl9sb29rdXAoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOworCXN0cnVjdCBpOTE1X21tdV9u b3RpZmllciAqbW11OworCisJLyogUHJvdGVjdGVkIGJ5IGRldi0+c3RydWN0X211dGV4ICovCisJ aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShkZXZfcHJpdi0+bW11X25vdGlmaWVycywgbW11LCBub2Rl LCAodW5zaWduZWQgbG9uZyltbSkKKwkJaWYgKG1tdS0+bW0gPT0gbW0pCisJCQlyZXR1cm4gbW11 OworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIg KgoraTkxNV9tbXVfbm90aWZpZXJfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBt bV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKKwlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1tdTsKKwlpbnQgcmV0Owor CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJbW11ID0gX19p OTE1X21tdV9ub3RpZmllcl9sb29rdXAoZGV2LCBtbSk7CisJaWYgKG1tdSkKKwkJcmV0dXJuIG1t dTsKKworCW1tdSA9IGttYWxsb2Moc2l6ZW9mKCptbXUpLCBHRlBfS0VSTkVMKTsKKwlpZiAobW11 ID09IE5VTEwpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJc3Bpbl9sb2NrX2luaXQo Jm1tdS0+bG9jayk7CisJbW11LT5kZXYgPSBkZXY7CisJbW11LT5tbi5vcHMgPSAmaTkxNV9nZW1f dXNlcnB0cl9ub3RpZmllcjsKKwltbXUtPm1tID0gbW07CisJbW11LT5vYmplY3RzID0gUkJfUk9P VDsKKwltbXUtPmNvdW50ID0gMDsKKwltbXUtPnNlcmlhbCA9IDA7CisKKwkvKiBQcm90ZWN0ZWQg YnkgbW1hcF9zZW0gKHdyaXRlLWxvY2spICovCisJcmV0ID0gX19tbXVfbm90aWZpZXJfcmVnaXN0 ZXIoJm1tdS0+bW4sIG1tKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKG1tdSk7CisJCXJldHVybiBF UlJfUFRSKHJldCk7CisJfQorCisJLyogUHJvdGVjdGVkIGJ5IGRldi0+c3RydWN0X211dGV4ICov CisJaGFzaF9hZGQoZGV2X3ByaXYtPm1tdV9ub3RpZmllcnMsICZtbXUtPm5vZGUsICh1bnNpZ25l ZCBsb25nKW1tKTsKKwlyZXR1cm4gbW11OworfQorCitzdGF0aWMgdm9pZAorX19pOTE1X21tdV9u b3RpZmllcl9kZXN0cm95X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3Ry dWN0IGk5MTVfbW11X25vdGlmaWVyICptbXUgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpt bXUpLCB3b3JrKTsKKwltbXVfbm90aWZpZXJfdW5yZWdpc3RlcigmbW11LT5tbiwgbW11LT5tbSk7 CisJa2ZyZWUobW11KTsKK30KKworc3RhdGljIHZvaWQKK19faTkxNV9tbXVfbm90aWZpZXJfZGVz dHJveShzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1tdSkKK3sKKwlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZtbXUtPmRldi0+c3RydWN0X211dGV4KTsKKworCS8qIFByb3RlY3RlZCBieSBkZXYtPnN0 cnVjdF9tdXRleCAqLworCWhhc2hfZGVsKCZtbXUtPm5vZGUpOworCisJLyogT3VyIGxvY2sgb3Jk ZXJpbmcgaXM6IG1tYXBfc2VtLCBtbXVfbm90aWZpZXJfc2NydSwgc3RydWN0X211dGV4LgorCSAq IFdlIGVudGVyIHRoZSBmdW5jdGlvbiBob2xkaW5nIHN0cnVjdF9tdXRleCwgdGhlcmVmb3JlIHdl IG5lZWQKKwkgKiB0byBkcm9wIG91ciBtdXRleCBwcmlvciB0byBjYWxsaW5nIG1tdV9ub3RpZmll cl91bnJlZ2lzdGVyIGluCisJICogb3JkZXIgdG8gcHJldmVudCBsb2NrIGludmVyc2lvbiAoYW5k IHN5c3RlbS13aWRlIGRlYWRsb2NrKQorCSAqIGJldHdlZW4gdGhlIG1tYXBfc2VtIGFuZCBzdHJ1 Y3QtbXV0ZXguIEhlbmNlIHdlIGRlZmVyIHRoZQorCSAqIHVucmVnaXN0cmF0aW9uIHRvIGEgd29y a3F1ZXVlIHdoZXJlIHdlIGhvbGQgbm8gbG9ja3MuCisJICovCisJSU5JVF9XT1JLKCZtbXUtPndv cmssIF9faTkxNV9tbXVfbm90aWZpZXJfZGVzdHJveV93b3JrZXIpOworCXNjaGVkdWxlX3dvcmso Jm1tdS0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkIF9faTkxNV9tbXVfbm90aWZpZXJfdXBkYXRl X3NlcmlhbChzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1tdSkKK3sKKwlpZiAoKyttbXUtPnNl cmlhbCA9PSAwKQorCQltbXUtPnNlcmlhbCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X21t dV9ub3RpZmllcl9kZWwoc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbXUsCisJCSAgICAgIHN0 cnVjdCBpOTE1X21tdV9vYmplY3QgKm1uKQoreworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1tdS0+ ZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJc3Bpbl9sb2NrKCZtbXUtPmxvY2spOworCWludGVydmFs X3RyZWVfcmVtb3ZlKCZtbi0+aXQsICZtbXUtPm9iamVjdHMpOworCV9faTkxNV9tbXVfbm90aWZp ZXJfdXBkYXRlX3NlcmlhbChtbXUpOworCXNwaW5fdW5sb2NrKCZtbXUtPmxvY2spOworCisJLyog UHJvdGVjdGVkIGFnYWluc3QgX2FkZCgpIGJ5IGRldi0+c3RydWN0X211dGV4ICovCisJaWYgKC0t bW11LT5jb3VudCA9PSAwKQorCQlfX2k5MTVfbW11X25vdGlmaWVyX2Rlc3Ryb3kobW11KTsKK30K Kworc3RhdGljIGludAoraTkxNV9tbXVfbm90aWZpZXJfYWRkKHN0cnVjdCBpOTE1X21tdV9ub3Rp ZmllciAqbW11LAorCQkgICAgICBzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbikKK3sKKwlzdHJ1 Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICppdDsKKwlpbnQgcmV0OworCisJLyogTWFrZSBzdXJlIHdl IGRyb3AgdGhlIGZpbmFsIGFjdGl2ZSByZWZlcmVuY2UgKGFuZCB0aGVyZWJ5CisJICogcmVtb3Zl IHRoZSBvYmplY3RzIGZyb20gdGhlIGludGVydmFsIHRyZWUpIGJlZm9yZSB3ZSBkbworCSAqIHRo ZSBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgb2JqZWN0cy4KKwkgKi8KKwlyZXQgPSBpOTE1X211dGV4 X2xvY2tfaW50ZXJydXB0aWJsZShtbXUtPmRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhtbXUtPmRldik7CisKKwkvKiBEaXNhbGxvdyBv dmVybGFwcGluZyB1c2VycHRyIG9iamVjdHMgKi8KKwlzcGluX2xvY2soJm1tdS0+bG9jayk7CisJ aXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfZmlyc3QoJm1tdS0+b2JqZWN0cywKKwkJCQkgICAgICBt bi0+aXQuc3RhcnQsIG1uLT5pdC5sYXN0KTsKKwlpZiAoaXQpIHsKKwkJc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iajsKKworCQkvKiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhlIGZpcnN0 IG9iamVjdCBhcyBpdCBlaXRoZXIKKwkJICogaXMgaWRsZSAoYW5kIGluIHVzZSBlbHNld2hlcmUp IG9yIHdlIHRyeSBhZ2FpbiBpbiBvcmRlcgorCQkgKiB0byBnaXZlIHRpbWUgZm9yIHRoZSBndXAt d29ya2VyIHRvIHJ1biBhbmQgZmx1c2ggaXRzCisJCSAqIG9iamVjdCByZWZlcmVuY2VzLiBBZnRl cndhcmRzIGlmIHdlIGZpbmQgYW5vdGhlcgorCQkgKiBvYmplY3QgdGhhdCBpcyBpZGxlIChhbmQg c28gcmVmZXJlbmNlZCBlbHNld2hlcmUpCisJCSAqIHdlIGtub3cgdGhhdCB0aGUgb3ZlcmxhcCB3 aXRoIGFuIHBpbm5lZCBvYmplY3QgaXMKKwkJICogZ2VudWluZS4KKwkJICovCisJCW9iaiA9IGNv bnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpLT5vYmo7CisJCXJldCA9 IG9iai0+dXNlcnB0ci5hY3RpdmUgPyAtRUFHQUlOIDogLUVJTlZBTDsKKwl9IGVsc2UgeworCQlp bnRlcnZhbF90cmVlX2luc2VydCgmbW4tPml0LCAmbW11LT5vYmplY3RzKTsKKwkJX19pOTE1X21t dV9ub3RpZmllcl91cGRhdGVfc2VyaWFsKG1tdSk7CisJCXJldCA9IDA7CisJfQorCXNwaW5fdW5s b2NrKCZtbXUtPmxvY2spOworCW11dGV4X3VubG9jaygmbW11LT5kZXYtPnN0cnVjdF9tdXRleCk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fdXNlcnB0cl9yZWxl YXNlX19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlz dHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbjsKKworCW1uID0gb2JqLT51c2VycHRyLm1uOworCWlm IChtbiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpOTE1X21tdV9ub3RpZmllcl9kZWwobW4tPm1t dSwgbW4pOworCW9iai0+dXNlcnB0ci5tbiA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVf Z2VtX3VzZXJwdHJfaW5pdF9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCisJCQkJICAgIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBpOTE1X21tdV9ub3Rp ZmllciAqbW11OworCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1uOworCWludCByZXQ7CisKKwlp ZiAoZmxhZ3MgJiBJOTE1X1VTRVJQVFJfVU5TWU5DSFJPTklaRUQpCisJCXJldHVybiBjYXBhYmxl KENBUF9TWVNfQURNSU4pID8gMCA6IC1FUEVSTTsKKworCWRvd25fd3JpdGUoJm9iai0+dXNlcnB0 ci5tbS0+bW1hcF9zZW0pOworCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKG9i ai0+YmFzZS5kZXYpOworCWlmIChyZXQgPT0gMCkgeworCQltbXUgPSBpOTE1X21tdV9ub3RpZmll cl9nZXQob2JqLT5iYXNlLmRldiwgb2JqLT51c2VycHRyLm1tKTsKKwkJaWYgKCFJU19FUlIobW11 KSkKKwkJCW1tdS0+Y291bnQrKzsgLyogcHJlZW1wdGl2ZSBhZGQgdG8gYWN0IGFzIGEgcmVmY291 bnQgKi8KKwkJZWxzZQorCQkJcmV0ID0gUFRSX0VSUihtbXUpOworCQltdXRleF91bmxvY2soJm9i ai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7CisJfQorCXVwX3dyaXRlKCZvYmotPnVzZXJwdHIu bW0tPm1tYXBfc2VtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbW4gPSBremFsbG9j KHNpemVvZigqbW4pLCBHRlBfS0VSTkVMKTsKKwlpZiAobW4gPT0gTlVMTCkgeworCQlyZXQgPSAt RU5PTUVNOworCQlnb3RvIGRlc3Ryb3lfbW11OworCX0KKworCW1uLT5tbXUgPSBtbXU7CisJbW4t Pml0LnN0YXJ0ID0gb2JqLT51c2VycHRyLnB0cjsKKwltbi0+aXQubGFzdCA9IG1uLT5pdC5zdGFy dCArIG9iai0+YmFzZS5zaXplIC0gMTsKKwltbi0+b2JqID0gb2JqOworCisJcmV0ID0gaTkxNV9t bXVfbm90aWZpZXJfYWRkKG1tdSwgbW4pOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9tbjsKKwor CW9iai0+dXNlcnB0ci5tbiA9IG1uOworCXJldHVybiAwOworCitmcmVlX21uOgorCWtmcmVlKG1u KTsKK2Rlc3Ryb3lfbW11OgorCW11dGV4X2xvY2soJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRl eCk7CisJaWYgKC0tbW11LT5jb3VudCA9PSAwKQorCQlfX2k5MTVfbW11X25vdGlmaWVyX2Rlc3Ry b3kobW11KTsKKwltdXRleF91bmxvY2soJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7CisJ cmV0dXJuIHJldDsKK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX3VzZXJwdHJf cmVsZWFzZV9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7 Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25vdGlmaWVyKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgIHVuc2lnbmVkIGZsYWdzKQor eworCWlmICgoZmxhZ3MgJiBJOTE1X1VTRVJQVFJfVU5TWU5DSFJPTklaRUQpID09IDApCisJCXJl dHVybiAtRU5PREVWOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4g LUVQRVJNOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RydWN0IGdldF9wYWdlc193b3Jr IHsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKK307CisKKworI2lmIElTX0VOQUJM RUQoQ09ORklHX1NXSU9UTEIpCisjZGVmaW5lIHN3aW90bGJfYWN0aXZlKCkgc3dpb3RsYl9ucl90 YmwoKQorI2Vsc2UKKyNkZWZpbmUgc3dpb3RsYl9hY3RpdmUoKSAwCisjZW5kaWYKKworc3RhdGlj IGludAorc3Rfc2V0X3BhZ2VzKHN0cnVjdCBzZ190YWJsZSAqKnN0LCBzdHJ1Y3QgcGFnZSAqKnB2 ZWMsIGludCBudW1fcGFnZXMpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgcmV0 LCBuOworCisJKnN0ID0ga21hbGxvYyhzaXplb2YoKipzdCksIEdGUF9LRVJORUwpOworCWlmICgq c3QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoc3dpb3RsYl9hY3RpdmUoKSkg eworCQlyZXQgPSBzZ19hbGxvY190YWJsZSgqc3QsIG51bV9wYWdlcywgR0ZQX0tFUk5FTCk7CisJ CWlmIChyZXQpCisJCQlnb3RvIGVycjsKKworCQlmb3JfZWFjaF9zZygoKnN0KS0+c2dsLCBzZywg bnVtX3BhZ2VzLCBuKQorCQkJc2dfc2V0X3BhZ2Uoc2csIHB2ZWNbbl0sIFBBR0VfU0laRSwgMCk7 CisJfSBlbHNlIHsKKwkJcmV0ID0gc2dfYWxsb2NfdGFibGVfZnJvbV9wYWdlcygqc3QsIHB2ZWMs IG51bV9wYWdlcywKKwkJCQkJCTAsIG51bV9wYWdlcyA8PCBQQUdFX1NISUZULAorCQkJCQkJR0ZQ X0tFUk5FTCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKKwor ZXJyOgorCWtmcmVlKCpzdCk7CisJKnN0ID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgdm9pZAorX19pOTE1X2dlbV91c2VycHRyX2dldF9wYWdlc193b3JrZXIoc3RydWN0IHdvcmtf c3RydWN0ICpfd29yaykKK3sKKwlzdHJ1Y3QgZ2V0X3BhZ2VzX3dvcmsgKndvcmsgPSBjb250YWlu ZXJfb2YoX3dvcmssIHR5cGVvZigqd29yayksIHdvcmspOworCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmogPSB3b3JrLT5vYmo7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ YmFzZS5kZXY7CisJY29uc3QgaW50IG51bV9wYWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBBR0Vf U0hJRlQ7CisJc3RydWN0IHBhZ2UgKipwdmVjOworCWludCBwaW5uZWQsIHJldDsKKworCXJldCA9 IC1FTk9NRU07CisJcGlubmVkID0gMDsKKworCXB2ZWMgPSBrbWFsbG9jKG51bV9wYWdlcypzaXpl b2Yoc3RydWN0IHBhZ2UgKiksCisJCSAgICAgICBHRlBfVEVNUE9SQVJZIHwgX19HRlBfTk9XQVJO IHwgX19HRlBfTk9SRVRSWSk7CisJaWYgKHB2ZWMgPT0gTlVMTCkKKwkJcHZlYyA9IGRybV9tYWxs b2NfYWIobnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOworCWlmIChwdmVjICE9IE5V TEwpIHsKKwkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBvYmotPnVzZXJwdHIubW07CisKKwkJZG93 bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQl3aGlsZSAocGlubmVkIDwgbnVtX3BhZ2VzKSB7CisJ CQlyZXQgPSBnZXRfdXNlcl9wYWdlcyh3b3JrLT50YXNrLCBtbSwKKwkJCQkJICAgICBvYmotPnVz ZXJwdHIucHRyICsgcGlubmVkICogUEFHRV9TSVpFLAorCQkJCQkgICAgIG51bV9wYWdlcyAtIHBp bm5lZCwKKwkJCQkJICAgICAhb2JqLT51c2VycHRyLnJlYWRfb25seSwgMCwKKwkJCQkJICAgICBw dmVjICsgcGlubmVkLCBOVUxMKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWJyZWFrOworCisJCQlw aW5uZWQgKz0gcmV0OworCQl9CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJfQorCisJbXV0 ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChvYmotPnVzZXJwdHIud29yayAhPSAm d29yay0+d29yaykgeworCQlyZXQgPSAwOworCX0gZWxzZSBpZiAocGlubmVkID09IG51bV9wYWdl cykgeworCQlyZXQgPSBzdF9zZXRfcGFnZXMoJm9iai0+cGFnZXMsIHB2ZWMsIG51bV9wYWdlcyk7 CisJCWlmIChyZXQgPT0gMCkgeworCQkJbGlzdF9hZGRfdGFpbCgmb2JqLT5nbG9iYWxfbGlzdCwg JnRvX2k5MTUoZGV2KS0+bW0udW5ib3VuZF9saXN0KTsKKwkJCXBpbm5lZCA9IDA7CisJCX0KKwl9 CisKKwlvYmotPnVzZXJwdHIud29yayA9IEVSUl9QVFIocmV0KTsKKwlvYmotPnVzZXJwdHIuYWN0 aXZlLS07CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJbXV0ZXhf dW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZWxlYXNlX3BhZ2VzKHB2ZWMsIHBpbm5l ZCwgMCk7CisJZHJtX2ZyZWVfbGFyZ2UocHZlYyk7CisKKwlwdXRfdGFza19zdHJ1Y3Qod29yay0+ dGFzayk7CisJa2ZyZWUod29yayk7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3VzZXJwdHJf Z2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJY29uc3QgaW50 IG51bV9wYWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7CisJc3RydWN0IHBhZ2Ug KipwdmVjOworCWludCBwaW5uZWQsIHJldDsKKworCS8qIElmIHVzZXJzcGFjZSBzaG91bGQgZW5n aW5lZXIgdGhhdCB0aGVzZSBwYWdlcyBhcmUgcmVwbGFjZWQgaW4KKwkgKiB0aGUgdm1hIGJldHdl ZW4gdXMgYmluZGluZyB0aGlzIHBhZ2UgaW50byB0aGUgR1RUIGFuZCBjb21wbGV0aW9uCisJICog b2YgcmVuZGVyaW5nLi4uIFRoZWlyIGxvc3MuIElmIHRoZXkgY2hhbmdlIHRoZSBtYXBwaW5nIG9m IHRoZWlyCisJICogcGFnZXMgdGhleSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBibyB0byBwb2ludCB0 byB0aGUgbmV3IHZtYS4KKwkgKgorCSAqIEhvd2V2ZXIsIHRoYXQgc3RpbGwgbGVhdmVzIG9wZW4g dGhlIHBvc3NpYmlsaXR5IG9mIHRoZSB2bWEKKwkgKiBiZWluZyBjb3BpZWQgdXBvbiBmb3JrLiBX aGljaCBmYWxscyB1bmRlciB0aGUgc2FtZSB1c2Vyc3BhY2UKKwkgKiBzeW5jaHJvbmlzYXRpb24g aXNzdWUgYXMgYSByZWd1bGFyIGJvLCBleGNlcHQgdGhhdCB0aGlzIHRpbWUKKwkgKiB0aGUgcHJv Y2VzcyBtYXkgbm90IGJlIGV4cGVjdGluZyB0aGF0IGEgcGFydGljdWxhciBwaWVjZSBvZgorCSAq IG1lbW9yeSBpcyB0aWVkIHRvIHRoZSBHUFUuCisJICoKKwkgKiBGb3J0dW5hdGVseSwgd2UgY2Fu IGhvb2sgaW50byB0aGUgbW11X25vdGlmaWVyIGluIG9yZGVyIHRvCisJICogZGlzY2FyZCB0aGUg cGFnZSByZWZlcmVuY2VzIHByaW9yIHRvIGFueXRoaW5nIG5hc3R5IGhhcHBlbmluZworCSAqIHRv IHRoZSB2bWEgKGRpc2NhcmQgb3IgY2xvbmluZykgd2hpY2ggc2hvdWxkIHByZXZlbnQgdGhlIG1v cmUKKwkgKiBlZ3JlZ2lvdXMgY2FzZXMgZnJvbSBjYXVzaW5nIGhhcm0uCisJICovCisKKwlwdmVj ID0gTlVMTDsKKwlwaW5uZWQgPSAwOworCWlmIChvYmotPnVzZXJwdHIubW0gPT0gY3VycmVudC0+ bW0pIHsKKwkJcHZlYyA9IGttYWxsb2MobnVtX3BhZ2VzKnNpemVvZihzdHJ1Y3QgcGFnZSAqKSwK KwkJCSAgICAgICBHRlBfVEVNUE9SQVJZIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSk7 CisJCWlmIChwdmVjID09IE5VTEwpIHsKKwkJCXB2ZWMgPSBkcm1fbWFsbG9jX2FiKG51bV9wYWdl cywgc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKKwkJCWlmIChwdmVjID09IE5VTEwpCisJCQkJcmV0 dXJuIC1FTk9NRU07CisJCX0KKworCQlwaW5uZWQgPSBfX2dldF91c2VyX3BhZ2VzX2Zhc3Qob2Jq LT51c2VycHRyLnB0ciwgbnVtX3BhZ2VzLAorCQkJCQkgICAgICAgIW9iai0+dXNlcnB0ci5yZWFk X29ubHksIHB2ZWMpOworCX0KKwlpZiAocGlubmVkIDwgbnVtX3BhZ2VzKSB7CisJCWlmIChwaW5u ZWQgPCAwKSB7CisJCQlyZXQgPSBwaW5uZWQ7CisJCQlwaW5uZWQgPSAwOworCQl9IGVsc2Ugewor CQkJLyogU3Bhd24gYSB3b3JrZXIgc28gdGhhdCB3ZSBjYW4gYWNxdWlyZSB0aGUKKwkJCSAqIHVz ZXIgcGFnZXMgd2l0aG91dCBob2xkaW5nIG91ciBtdXRleC4gQWNjZXNzCisJCQkgKiB0byB0aGUg dXNlciBwYWdlcyByZXF1aXJlcyBtbWFwX3NlbSwgYW5kIHdlIGhhdmUKKwkJCSAqIGEgc3RyaWN0 IGxvY2sgb3JkZXJpbmcgb2YgbW1hcF9zZW0sIHN0cnVjdF9tdXRleCAtCisJCQkgKiB3ZSBhbHJl YWR5IGhvbGQgc3RydWN0X211dGV4IGhlcmUgYW5kIHNvIGNhbm5vdAorCQkJICogY2FsbCBndXAg d2l0aG91dCBlbmNvdW50ZXJpbmcgYSBsb2NrIGludmVyc2lvbi4KKwkJCSAqCisJCQkgKiBVc2Vy c3BhY2Ugd2lsbCBrZWVwIG9uIHJlcGVhdGluZyB0aGUgb3BlcmF0aW9uCisJCQkgKiAodGhhbmtz IHRvIEVBR0FJTikgdW50aWwgZWl0aGVyIHdlIGhpdCB0aGUgZmFzdAorCQkJICogcGF0aCBvciB0 aGUgd29ya2VyIGNvbXBsZXRlcy4gSWYgdGhlIHdvcmtlciBpcworCQkJICogY2FuY2VsbGVkIG9y IHN1cGVyc2VkZWQsIHRoZSB0YXNrIGlzIHN0aWxsIHJ1bgorCQkJICogYnV0IHRoZSByZXN1bHRz IGlnbm9yZWQuIChUaGlzIGxlYWRzIHRvCisJCQkgKiBjb21wbGljYXRpb25zIHRoYXQgd2UgbWF5 IGhhdmUgYSBzdHJheSBvYmplY3QKKwkJCSAqIHJlZmNvdW50IHRoYXQgd2UgbmVlZCB0byBiZSB3 YXJ5IG9mIHdoZW4KKwkJCSAqIGNoZWNraW5nIGZvciBleGlzdGluZyBvYmplY3RzIGR1cmluZyBj cmVhdGlvbi4pCisJCQkgKiBJZiB0aGUgd29ya2VyIGVuY291bnRlcnMgYW4gZXJyb3IsIGl0IHJl cG9ydHMKKwkJCSAqIHRoYXQgZXJyb3IgYmFjayB0byB0aGlzIGZ1bmN0aW9uIHRocm91Z2gKKwkJ CSAqIG9iai0+dXNlcnB0ci53b3JrID0gRVJSX1BUUi4KKwkJCSAqLworCQkJcmV0ID0gLUVBR0FJ TjsKKwkJCWlmIChvYmotPnVzZXJwdHIud29yayA9PSBOVUxMICYmCisJCQkgICAgb2JqLT51c2Vy cHRyLmFjdGl2ZSA8IEk5MTVfR0VNX1VTRVJQVFJfTUFYX0FDVElWRSkgeworCQkJCXN0cnVjdCBn ZXRfcGFnZXNfd29yayAqd29yazsKKworCQkJCXdvcmsgPSBrbWFsbG9jKHNpemVvZigqd29yayks IEdGUF9LRVJORUwpOworCQkJCWlmICh3b3JrICE9IE5VTEwpIHsKKwkJCQkJb2JqLT51c2VycHRy LndvcmsgPSAmd29yay0+d29yazsKKwkJCQkJb2JqLT51c2VycHRyLmFjdGl2ZSsrOworCisJCQkJ CXdvcmstPm9iaiA9IG9iajsKKwkJCQkJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKCZvYmotPmJh c2UpOworCisJCQkJCXdvcmstPnRhc2sgPSBjdXJyZW50OworCQkJCQlnZXRfdGFza19zdHJ1Y3Qo d29yay0+dGFzayk7CisKKwkJCQkJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBfX2k5MTVfZ2VtX3Vz ZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcik7CisJCQkJCXNjaGVkdWxlX3dvcmsoJndvcmstPndvcmsp OworCQkJCX0gZWxzZQorCQkJCQlyZXQgPSAtRU5PTUVNOworCQkJfSBlbHNlIHsKKwkJCQlpZiAo SVNfRVJSKG9iai0+dXNlcnB0ci53b3JrKSkgeworCQkJCQlyZXQgPSBQVFJfRVJSKG9iai0+dXNl cnB0ci53b3JrKTsKKwkJCQkJb2JqLT51c2VycHRyLndvcmsgPSBOVUxMOworCQkJCX0KKwkJCX0K KwkJfQorCX0gZWxzZSB7CisJCXJldCA9IHN0X3NldF9wYWdlcygmb2JqLT5wYWdlcywgcHZlYywg bnVtX3BhZ2VzKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlvYmotPnVzZXJwdHIud29yayA9IE5V TEw7CisJCQlwaW5uZWQgPSAwOworCQl9CisJfQorCisJcmVsZWFzZV9wYWdlcyhwdmVjLCBwaW5u ZWQsIDApOworCWRybV9mcmVlX2xhcmdlKHB2ZWMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyB2b2lkCitpOTE1X2dlbV91c2VycHRyX3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IGk7CisKKwlCVUdf T04ob2JqLT51c2VycHRyLndvcmsgIT0gTlVMTCk7CisKKwlpZiAob2JqLT5tYWR2ICE9IEk5MTVf TUFEVl9XSUxMTkVFRCkKKwkJb2JqLT5kaXJ0eSA9IDA7CisKKwlmb3JfZWFjaF9zZyhvYmotPnBh Z2VzLT5zZ2wsIHNnLCBvYmotPnBhZ2VzLT5uZW50cywgaSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFn ZSA9IHNnX3BhZ2Uoc2cpOworCisJCWlmIChvYmotPmRpcnR5KQorCQkJc2V0X3BhZ2VfZGlydHko cGFnZSk7CisKKwkJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVh c2UocGFnZSk7CisJfQorCW9iai0+ZGlydHkgPSAwOworCisJc2dfZnJlZV90YWJsZShvYmotPnBh Z2VzKTsKKwlrZnJlZShvYmotPnBhZ2VzKTsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX3Vz ZXJwdHJfcmVsZWFzZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCWk5MTVf Z2VtX3VzZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKG9iaik7CisKKwlpZiAob2JqLT51c2Vy cHRyLm1tKSB7CisJCW1tcHV0KG9iai0+dXNlcnB0ci5tbSk7CisJCW9iai0+dXNlcnB0ci5tbSA9 IE5VTEw7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rf b3BzIGk5MTVfZ2VtX3VzZXJwdHJfb3BzID0geworCS5nZXRfcGFnZXMgPSBpOTE1X2dlbV91c2Vy cHRyX2dldF9wYWdlcywKKwkucHV0X3BhZ2VzID0gaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMs CisJLnJlbGVhc2UgPSBpOTE1X2dlbV91c2VycHRyX3JlbGVhc2UsCit9OworCisvKioKKyAqIENy ZWF0ZXMgYSBuZXcgbW0gb2JqZWN0IHRoYXQgd3JhcHMgc29tZSBub3JtYWwgbWVtb3J5IGZyb20g dGhlIHByb2Nlc3MKKyAqIGNvbnRleHQgLSB1c2VyIG1lbW9yeS4KKyAqCisgKiBXZSBpbXBvc2Ug c2V2ZXJhbCByZXN0cmljdGlvbnMgdXBvbiB0aGUgbWVtb3J5IGJlaW5nIG1hcHBlZAorICogaW50 byB0aGUgR1BVLgorICogMS4gSXQgbXVzdCBiZSBwYWdlIGFsaWduZWQgKGJvdGggc3RhcnQvZW5k IGFkZHJlc3NlcywgaS5lIHB0ciBhbmQgc2l6ZSkuCisgKiAyLiBJdCBjYW5ub3Qgb3ZlcmxhcCBh bnkgb3RoZXIgdXNlcnB0ciBvYmplY3QgaW4gdGhlIHNhbWUgYWRkcmVzcyBzcGFjZS4KKyAqIDMu IEl0IG11c3QgYmUgbm9ybWFsIHN5c3RlbSBtZW1vcnksIG5vdCBhIHBvaW50ZXIgaW50byBhbm90 aGVyIG1hcCBvZiBJTworICogICAgc3BhY2UgKGUuZy4gaXQgbXVzdCBub3QgYmUgYSBHVFQgbW1h cHBpbmcgb2YgYW5vdGhlciBvYmplY3QpLgorICogNC4gV2Ugb25seSBhbGxvdyBhIGJvIGFzIGxh cmdlIGFzIHdlIGNvdWxkIGluIHRoZW9yeSBtYXAgaW50byB0aGUgR1RULAorICogICAgdGhhdCBp cyB3ZSBsaW1pdCB0aGUgc2l6ZSB0byB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgR1RULgorICogNS4g VGhlIGJvIGlzIG1hcmtlZCBhcyBiZWluZyBzbm9vcGFibGUuIFRoZSBiYWNraW5nIHBhZ2VzIGFy ZSBsZWZ0CisgKiAgICBhY2Nlc3NpYmxlIGRpcmVjdGx5IGJ5IHRoZSBDUFUsIGJ1dCByZWFkcyBh bmQgd3JpdGVzIGJ5IHRoZSBHUFUgbWF5CisgKiAgICBpbmN1ciB0aGUgY29zdCBvZiBhIHNub29w ICh1bmxlc3MgeW91IGhhdmUgYW4gTExDIGFyY2hpdGVjdHVyZSkuCisgKgorICogU3luY2hyb25p c2F0aW9uIGJldHdlZW4gbXVsdGlwbGUgdXNlcnMgYW5kIHRoZSBHUFUgaXMgbGVmdCB0byB1c2Vy c3BhY2UKKyAqIHRocm91Z2ggdGhlIG5vcm1hbCBzZXQtZG9tYWluLWlvY3RsLiBUaGUga2VybmVs IHdpbGwgZW5mb3JjZSB0aGF0IHRoZQorICogR1BVIHJlbGlucXVpc2hlcyB0aGUgVk1BIGJlZm9y ZSBpdCBpcyByZXR1cm5lZCBiYWNrIHRvIHRoZSBzeXN0ZW0KKyAqIGkuZS4gdXBvbiBmcmVlKCks IG11bm1hcCgpIG9yIHByb2Nlc3MgdGVybWluYXRpb24uIEhvd2V2ZXIsIHRoZSB1c2Vyc3BhY2UK KyAqIG1hbGxvYygpIGxpYnJhcnkgbWF5IG5vdCBpbW1lZGlhdGVseSByZWxpbnF1aXNoIHRoZSBW TUEgYWZ0ZXIgZnJlZSgpIGFuZAorICogaW5zdGVhZCByZXVzZSBpdCB3aGlsc3QgdGhlIEdQVSBp cyBzdGlsbCByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBWTUEuCisgKiBDYXZlYXQgZW1wdG9y LgorICoKKyAqIEFsc28gbm90ZSwgdGhhdCB0aGUgb2JqZWN0IGNyZWF0ZWQgaGVyZSBpcyBub3Qg Y3VycmVudGx5IGEgImZpcnN0IGNsYXNzIgorICogb2JqZWN0LCBpbiB0aGF0IHNldmVyYWwgaW9j dGxzIGFyZSBiYW5uZWQuIFRoZXNlIGFyZSB0aGUgQ1BVIGFjY2VzcworICogaW9jdGxzOiBtbWFw KCksIHB3cml0ZSBhbmQgcHJlYWQuIEluIHByYWN0aWNlLCB5b3UgYXJlIGV4cGVjdGVkIHRvIHVz ZQorICogZGlyZWN0IGFjY2VzcyB2aWEgeW91ciBwb2ludGVyIHJhdGhlciB0aGFuIHVzZSB0aG9z ZSBpb2N0bHMuCisgKgorICogSWYgeW91IHRoaW5rIHRoaXMgaXMgYSBnb29kIGludGVyZmFjZSB0 byB1c2UgdG8gcGFzcyBHUFUgbWVtb3J5IGJldHdlZW4KKyAqIGRyaXZlcnMsIHBsZWFzZSB1c2Ug ZG1hLWJ1ZiBpbnN0ZWFkLiBJbiBmYWN0LCB3aGVyZXZlciBwb3NzaWJsZSB1c2UKKyAqIGRtYS1i dWYgaW5zdGVhZC4KKyAqLworaW50CitpOTE1X2dlbV91c2VycHRyX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVj dCBkcm1faTkxNV9nZW1fdXNlcnB0ciAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCXUzMiBoYW5kbGU7CisKKwlpZiAoYXJncy0+Zmxh Z3MgJiB+KEk5MTVfVVNFUlBUUl9SRUFEX09OTFkgfAorCQkJICAgIEk5MTVfVVNFUlBUUl9VTlNZ TkNIUk9OSVpFRCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9mZnNldF9pbl9wYWdlKGFy Z3MtPnVzZXJfcHRyIHwgYXJncy0+dXNlcl9zaXplKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlp ZiAoYXJncy0+dXNlcl9zaXplID4gZGV2X3ByaXYtPmd0dC5iYXNlLnRvdGFsKQorCQlyZXR1cm4g LUUyQklHOworCisJaWYgKCFhY2Nlc3Nfb2soYXJncy0+ZmxhZ3MgJiBJOTE1X1VTRVJQVFJfUkVB RF9PTkxZID8gVkVSSUZZX1JFQUQgOiBWRVJJRllfV1JJVEUsCisJCSAgICAgICAoY2hhciBfX3Vz ZXIgKikodW5zaWduZWQgbG9uZylhcmdzLT51c2VyX3B0ciwgYXJncy0+dXNlcl9zaXplKSkKKwkJ cmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoYXJncy0+ZmxhZ3MgJiBJOTE1X1VTRVJQVFJfUkVBRF9P TkxZKSB7CisJCS8qIE9uIGFsbW9zdCBhbGwgb2YgdGhlIGN1cnJlbnQgaHcsIHdlIGNhbm5vdCB0 ZWxsIHRoZSBHUFUgdGhhdCBhCisJCSAqIHBhZ2UgaXMgcmVhZG9ubHksIHNvIHRoaXMgaXMganVz dCBhIHBsYWNlaG9sZGVyIGluIHRoZSB1QVBJLgorCQkgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJ fQorCisJLyogQWxsb2NhdGUgdGhlIG5ldyBvYmplY3QgKi8KKwlvYmogPSBpOTE1X2dlbV9vYmpl Y3RfYWxsb2MoZGV2KTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJ ZHJtX2dlbV9wcml2YXRlX29iamVjdF9pbml0KGRldiwgJm9iai0+YmFzZSwgYXJncy0+dXNlcl9z aXplKTsKKwlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZpOTE1X2dlbV91c2VycHRyX29wcyk7 CisJb2JqLT5jYWNoZV9sZXZlbCA9IEk5MTVfQ0FDSEVfTExDOworCW9iai0+YmFzZS53cml0ZV9k b21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BVOworCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSBJ OTE1X0dFTV9ET01BSU5fQ1BVOworCisJb2JqLT51c2VycHRyLnB0ciA9IGFyZ3MtPnVzZXJfcHRy OworCW9iai0+dXNlcnB0ci5yZWFkX29ubHkgPSAhIShhcmdzLT5mbGFncyAmIEk5MTVfVVNFUlBU Ul9SRUFEX09OTFkpOworCisJLyogQW5kIGtlZXAgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50LT5t bSBmb3IgcmVzb2x2aW5nIHRoZSB1c2VyIHBhZ2VzCisJICogYXQgYmluZGluZy4gVGhpcyBtZWFu cyB0aGF0IHdlIG5lZWQgdG8gaG9vayBpbnRvIHRoZSBtbXVfbm90aWZpZXIKKwkgKiBpbiBvcmRl ciB0byBkZXRlY3QgaWYgdGhlIG1tdSBpcyBkZXN0cm95ZWQuCisJICovCisJcmV0ID0gLUVOT01F TTsKKwlpZiAoKG9iai0+dXNlcnB0ci5tbSA9IGdldF90YXNrX21tKGN1cnJlbnQpKSkKKwkJcmV0 ID0gaTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbXVfbm90aWZpZXIob2JqLCBhcmdzLT5mbGFncyk7 CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZSwgJm9i ai0+YmFzZSwgJmhhbmRsZSk7CisKKwkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0g aGFuZGxlIGhvbGRzIGl0IG5vdyAqLworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9j a2VkKCZvYmotPmJhc2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlhcmdzLT5oYW5k bGUgPSBoYW5kbGU7CisJcmV0dXJuIDA7Cit9CisKK2ludAoraTkxNV9nZW1faW5pdF91c2VycHRy KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisjaWYgZGVmaW5lZChDT05GSUdfTU1VX05PVElG SUVSKQorCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsK KwloYXNoX2luaXQoZGV2X3ByaXYtPm1tdV9ub3RpZmllcnMpOworI2VuZGlmCisJcmV0dXJuIDA7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwppbmRleCBkNjM5ZDZmLi40OWYz MjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKQEAgLTIwNSw2ICsyMDUs NyBAQCBzdGF0aWMgdm9pZCBwcmludF9lcnJvcl9idWZmZXJzKHN0cnVjdCBkcm1faTkxNV9lcnJv cl9zdGF0ZV9idWYgKm0sCiAJCWVycl9wdXRzKG0sIHRpbGluZ19mbGFnKGVyci0+dGlsaW5nKSk7 CiAJCWVycl9wdXRzKG0sIGRpcnR5X2ZsYWcoZXJyLT5kaXJ0eSkpOwogCQllcnJfcHV0cyhtLCBw dXJnZWFibGVfZmxhZyhlcnItPnB1cmdlYWJsZSkpOworCQllcnJfcHV0cyhtLCBlcnItPnVzZXJw dHIgPyAiIHVzZXJwdHIiIDogIiIpOwogCQllcnJfcHV0cyhtLCBlcnItPnJpbmcgIT0gLTEgPyAi ICIgOiAiIik7CiAJCWVycl9wdXRzKG0sIHJpbmdfc3RyKGVyci0+cmluZykpOwogCQllcnJfcHV0 cyhtLCBpOTE1X2NhY2hlX2xldmVsX3N0cihlcnItPmNhY2hlX2xldmVsKSk7CkBAIC02NTUsNiAr NjU2LDcgQEAgc3RhdGljIHZvaWQgY2FwdHVyZV9ibyhzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfYnVm ZmVyICplcnIsCiAJZXJyLT50aWxpbmcgPSBvYmotPnRpbGluZ19tb2RlOwogCWVyci0+ZGlydHkg PSBvYmotPmRpcnR5OwogCWVyci0+cHVyZ2VhYmxlID0gb2JqLT5tYWR2ICE9IEk5MTVfTUFEVl9X SUxMTkVFRDsKKwllcnItPnVzZXJwdHIgPSBvYmotPnVzZXJwdHIubW0gIT0gMDsKIAllcnItPnJp bmcgPSBvYmotPnJpbmcgPyBvYmotPnJpbmctPmlkIDogLTE7CiAJZXJyLT5jYWNoZV9sZXZlbCA9 IG9iai0+Y2FjaGVfbGV2ZWw7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVf ZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKaW5kZXggNjMwNmE4NC4uZGQ5ODQ2 MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUv dWFwaS9kcm0vaTkxNV9kcm0uaApAQCAtMjIzLDYgKzIyMyw3IEBAIHR5cGVkZWYgc3RydWN0IF9k cm1faTkxNV9zYXJlYSB7CiAjZGVmaW5lIERSTV9JOTE1X0dFTV9HRVRfQ0FDSElORwkweDMwCiAj ZGVmaW5lIERSTV9JOTE1X1JFR19SRUFECQkweDMxCiAjZGVmaW5lIERSTV9JOTE1X0dFVF9SRVNF VF9TVEFUUwkweDMyCisjZGVmaW5lIERSTV9JOTE1X0dFTV9VU0VSUFRSCQkweDM0CiAKICNkZWZp bmUgRFJNX0lPQ1RMX0k5MTVfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9J OTE1X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfRkxVU0gJ CURSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9GTFVTSCkKQEAgLTI3Myw2ICsy NzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgewogI2RlZmluZSBEUk1fSU9D VExfSTkxNV9HRU1fQ09OVEVYVF9ERVNUUk9ZCURSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBE Uk1fSTkxNV9HRU1fQ09OVEVYVF9ERVNUUk9ZLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRf ZGVzdHJveSkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfUkVHX1JFQUQJCQlEUk1fSU9XUiAoRFJN X0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1JFR19SRUFELCBzdHJ1Y3QgZHJtX2k5MTVfcmVnX3Jl YWQpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVF9SRVNFVF9TVEFUUwkJRFJNX0lPV1IgKERS TV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRVRfUkVTRVRfU1RBVFMsIHN0cnVjdCBkcm1faTkx NV9yZXNldF9zdGF0cykKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1VTRVJQVFIJCQlEUk1f SU9XUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9VU0VSUFRSLCBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3VzZXJwdHIpCiAKIC8qIEFsbG93IGRyaXZlcnMgdG8gc3VibWl0IGJhdGNoYnVm ZmVycyBkaXJlY3RseSB0byBoYXJkd2FyZSwgcmVseWluZwogICogb24gdGhlIHNlY3VyaXR5IG1l Y2hhbmlzbXMgcHJvdmlkZWQgYnkgaGFyZHdhcmUuCkBAIC0xMDUxLDQgKzEwNTMsMTggQEAgc3Ry dWN0IGRybV9pOTE1X3Jlc2V0X3N0YXRzIHsKIAlfX3UzMiBwYWQ7CiB9OwogCitzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3VzZXJwdHIgeworCV9fdTY0IHVzZXJfcHRyOworCV9fdTY0IHVzZXJfc2l6ZTsK KwlfX3UzMiBmbGFnczsKKyNkZWZpbmUgSTkxNV9VU0VSUFRSX1JFQURfT05MWSAweDEKKyNkZWZp bmUgSTkxNV9VU0VSUFRSX1VOU1lOQ0hST05JWkVEIDB4ODAwMDAwMDAKKwkvKioKKwkgKiBSZXR1 cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QuCisJICoKKwkgKiBPYmplY3QgaGFuZGxlcyBhcmUg bm9uemVyby4KKwkgKi8KKwlfX3UzMiBoYW5kbGU7Cit9OworCiAjZW5kaWYgLyogX1VBUElfSTkx NV9EUk1fSF8gKi8KLS0gCjEuOS4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=