From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 05/28] drm/vmwgfx: Add command buffer support v3 Date: Wed, 12 Aug 2015 22:42:54 -0700 Message-ID: <1439444597-4664-6-git-send-email-thellstrom@vmware.com> References: <1439444597-4664-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.bahnhof.se (mx1.bahnhof.se [213.80.101.11]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8E21B6EBF1 for ; Wed, 12 Aug 2015 23:05:14 -0700 (PDT) Received: from localhost (mf.bahnhof.se [213.80.101.20]) by mx1-reinject (Postfix) with ESMTP id A716A44091 for ; Thu, 13 Aug 2015 07:43:34 +0200 (CEST) Received: from mf3.bahnhof.se ([127.0.0.1]) by localhost (mf3.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id tfNVOEloRLXo for ; Thu, 13 Aug 2015 07:43:25 +0200 (CEST) Received: from mail.shipmail.org (h-5-150-198-217.na.cust.bahnhof.se [5.150.198.217]) by mf3.bahnhof.se (Postfix) with ESMTP id 6D63B3E8CE7 for ; Thu, 13 Aug 2015 07:43:25 +0200 (CEST) Received: from mail.shipmail.org (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 6C4933DC004 for ; Thu, 13 Aug 2015 07:43:23 +0200 (CEST) Received: from localhost.localdomain (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 20D483DC005 for ; Thu, 13 Aug 2015 07:43:23 +0200 (CEST) In-Reply-To: <1439444597-4664-1-git-send-email-thellstrom@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QWRkIGNvbW1hbmQgYnVmZmVyIHN1cHBvcnQuCkN1cnJlbnRseSB3ZSBkb24ndCBpbXBsZW1lbnQg cHJlZW1wdGlvbiBvciBmYW5jeSBlcnJvciBoYW5kbGluZy4KVGVzdGVkIHdpdGggYSBjb3VwbGUg b2YgbWVzYS1kZW1vcywgY29tcGl6L3VuaXR5IGFuZCB2aWV3cGVyZiBtYXlhLTAzLgoKdjI6Ci0g U3luY2hyb25pemUgd2l0aCBwZW5kaW5nIHdvcmsgYXQgY29tbWFuZCBidWZmZXIgbWFuYWdlciB0 YWtlZG93bi4KLSBBZGQgYW4gaW50ZXJmYWNlIHRvIGZsdXNoIHRoZSBjdXJyZW50IGNvbW1hbmQg YnVmZmVyIGZvciBsYXRlbmN5LWNyaXRpY2FsCiAgY29tbWFuZCBiYXRjaGVzIGFuZCBhcHBseSBp dCB0byBmcmFtZWJ1ZmZlciBkaXJ0eWluZy4KCnYzOgotIE1pbm9yIGZpeGVzIG9mIGRlZmluaXRp b25zIGFuZCB0eXBvcyB0byBhZGRyZXNzIHJldmlld3MuCi0gUmVtb3ZlZCBuZXcgb3IgbW92ZWQg YnJhbmNoIHByZWRpY3RvciBoaW50cy4KClNpZ25lZC1vZmYtYnk6IFRob21hcyBIZWxsc3Ryb20g PHRoZWxsc3Ryb21Adm13YXJlLmNvbT4KUmV2aWV3ZWQtYnk6IFNpbmNsYWlyIFllaCA8c3llaEB2 bXdhcmUuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUgICAgICAgICB8 ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2J1ZmZlci5jICB8ICAgMTMg KwogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMgIHwgMTMxNSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9k cnYuYyAgICAgfCAgIDI2ICsKIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oICAg ICB8ICAgNDAgKwogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jIHwgIDE4 MCArKysrLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmIuYyAgICAgIHwgICAgMSAr CiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMgICAgfCAgIDY3ICstCiBkcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYyAgICAgfCAgIDQxICstCiBkcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYyAgICAgfCAgICA0ICsKIDEwIGZpbGVzIGNoYW5nZWQs IDE2NTYgaW5zZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtl ZmlsZQppbmRleCBjZTBhYjk1Li41MjliYzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUKQEAg LTcsNiArNyw2IEBAIHZtd2dmeC15IDo9IHZtd2dmeF9leGVjYnVmLm8gdm13Z2Z4X2dtci5vIHZt d2dmeF9rbXMubyB2bXdnZnhfZHJ2Lm8gXAogCSAgICB2bXdnZnhfb3ZlcmxheS5vIHZtd2dmeF9t YXJrZXIubyB2bXdnZnhfZ21yaWRfbWFuYWdlci5vIFwKIAkgICAgdm13Z2Z4X2ZlbmNlLm8gdm13 Z2Z4X2RtYWJ1Zi5vIHZtd2dmeF9zY3JuLm8gdm13Z2Z4X2NvbnRleHQubyBcCiAJICAgIHZtd2dm eF9zdXJmYWNlLm8gdm13Z2Z4X3ByaW1lLm8gdm13Z2Z4X21vYi5vIHZtd2dmeF9zaGFkZXIubyBc Ci0JICAgIHZtd2dmeF9jbWRidWZfcmVzLm8gXAorCSAgICB2bXdnZnhfY21kYnVmX3Jlcy5vIHZt d2dmeF9jbWRidWYubyBcCiAKIG9iai0kKENPTkZJR19EUk1fVk1XR0ZYKSA6PSB2bXdnZngubwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYnVmZmVyLmMgYi9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9idWZmZXIuYwppbmRleCBjZmYyYmY5Li4zYjM0OWZk IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9idWZmZXIuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9idWZmZXIuYwpAQCAtNzIsNiArNzIsMTIg QEAgc3RhdGljIHN0cnVjdCB0dG1fcGxhY2UgbW9iX3BsYWNlbWVudF9mbGFncyA9IHsKIAkuZmxh Z3MgPSBWTVdfUExfRkxBR19NT0IgfCBUVE1fUExfRkxBR19DQUNIRUQKIH07CiAKK3N0YXRpYyBz dHJ1Y3QgdHRtX3BsYWNlIG1vYl9uZV9wbGFjZW1lbnRfZmxhZ3MgPSB7CisJLmZwZm4gPSAwLAor CS5scGZuID0gMCwKKwkuZmxhZ3MgPSBWTVdfUExfRkxBR19NT0IgfCBUVE1fUExfRkxBR19DQUNI RUQgfCBUVE1fUExfRkxBR19OT19FVklDVAorfTsKKwogc3RydWN0IHR0bV9wbGFjZW1lbnQgdm13 X3ZyYW1fcGxhY2VtZW50ID0gewogCS5udW1fcGxhY2VtZW50ID0gMSwKIAkucGxhY2VtZW50ID0g JnZyYW1fcGxhY2VtZW50X2ZsYWdzLApAQCAtMjAwLDYgKzIwNiwxMyBAQCBzdHJ1Y3QgdHRtX3Bs YWNlbWVudCB2bXdfbW9iX3BsYWNlbWVudCA9IHsKIAkuYnVzeV9wbGFjZW1lbnQgPSAmbW9iX3Bs YWNlbWVudF9mbGFncwogfTsKIAorc3RydWN0IHR0bV9wbGFjZW1lbnQgdm13X21vYl9uZV9wbGFj ZW1lbnQgPSB7CisJLm51bV9wbGFjZW1lbnQgPSAxLAorCS5udW1fYnVzeV9wbGFjZW1lbnQgPSAx LAorCS5wbGFjZW1lbnQgPSAmbW9iX25lX3BsYWNlbWVudF9mbGFncywKKwkuYnVzeV9wbGFjZW1l bnQgPSAmbW9iX25lX3BsYWNlbWVudF9mbGFncworfTsKKwogc3RydWN0IHZtd190dG1fdHQgewog CXN0cnVjdCB0dG1fZG1hX3R0IGRtYV90dG07CiAJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJp djsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NtZGJ1Zi5jIGIv ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYjA0NGJmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS92bXdnZngvdm13Z2Z4X2NtZGJ1Zi5jCkBAIC0wLDAgKzEsMTMxNSBAQAorLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTUgVk13YXJlLCBJbmMuLCBQYWxvIEFs dG8sIENBLiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRl LCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv CisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNF LCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ2bXdnZnhfZHJ2LmgiCisjaW5jbHVkZSAi dHRtL3R0bV9ib19hcGkuaCIKKworLyoKKyAqIFNpemUgb2YgaW5saW5lIGNvbW1hbmQgYnVmZmVy cy4gVHJ5IHRvIG1ha2Ugc3VyZSB0aGF0IGEgcGFnZSBzaXplIGlzIGEKKyAqIG11bHRpcGxlIG9m IHRoZSBETUEgcG9vbCBhbGxvY2F0aW9uIHNpemUuCisgKi8KKyNkZWZpbmUgVk1XX0NNREJVRl9J TkxJTkVfQUxJR04gNjQKKyNkZWZpbmUgVk1XX0NNREJVRl9JTkxJTkVfU0laRSAoMTAyNCAtIFZN V19DTURCVUZfSU5MSU5FX0FMSUdOKQorCisvKioKKyAqIHN0cnVjdCB2bXdfY21kYnVmX2NvbnRl eHQgLSBDb21tYW5kIGJ1ZmZlciBjb250ZXh0IHF1ZXVlcworICoKKyAqIEBzdWJtaXR0ZWQ6IExp c3Qgb2YgY29tbWFuZCBidWZmZXJzIHRoYXQgaGF2ZSBiZWVuIHN1Ym1pdHRlZCB0byB0aGUKKyAq IG1hbmFnZXIgYnV0IG5vdCB5ZXQgc3VibWl0dGVkIHRvIGhhcmR3YXJlLgorICogQGh3X3N1Ym1p dHRlZDogTGlzdCBvZiBjb21tYW5kIGJ1ZmZlcnMgc3VibWl0dGVkIHRvIGhhcmR3YXJlLgorICog QHByZWVtcHRlZDogTGlzdCBvZiBwcmVlbXB0ZWQgY29tbWFuZCBidWZmZXJzLgorICogQG51bV9o d19zdWJtaXR0ZWQ6IE51bWJlciBvZiBidWZmZXJzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQg YnkgaGFyZHdhcmUKKyAqLworc3RydWN0IHZtd19jbWRidWZfY29udGV4dCB7CisJc3RydWN0IGxp c3RfaGVhZCBzdWJtaXR0ZWQ7CisJc3RydWN0IGxpc3RfaGVhZCBod19zdWJtaXR0ZWQ7CisJc3Ry dWN0IGxpc3RfaGVhZCBwcmVlbXB0ZWQ7CisJdW5zaWduZWQgbnVtX2h3X3N1Ym1pdHRlZDsKK307 CisKKy8qKgorICogc3RydWN0IHZtd19jbWRidWZfbWFuOiAtIENvbW1hbmQgYnVmZmVyIG1hbmFn ZXIKKyAqCisgKiBAY3VyX211dGV4OiBNdXRleCBwcm90ZWN0aW5nIHRoZSBjb21tYW5kIGJ1ZmZl ciB1c2VkIGZvciBpbmNyZW1lbnRhbCBzbWFsbAorICoga2VybmVsIGNvbW1hbmQgc3VibWlzc2lv bnMsIEBjdXIuCisgKiBAc3BhY2VfbXV0ZXg6IE11dGV4IHRvIHByb3RlY3QgYWdhaW5zdCBzdGFy dmF0aW9uIHdoZW4gd2UgYWxsb2NhdGUKKyAqIG1haW4gcG9vbCBidWZmZXIgc3BhY2UuCisgKiBA d29yazogQSBzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW1wbGVtZW50ZWluZyBjb21tYW5kIGJ1ZmZlciBl cnJvciBoYW5kbGluZy4KKyAqIEltbXV0YWJsZS4KKyAqIEBkZXZfcHJpdjogUG9pbnRlciB0byB0 aGUgZGV2aWNlIHByaXZhdGUgc3RydWN0LiBJbW11dGFibGUuCisgKiBAY3R4OiBBcnJheSBvZiBj b21tYW5kIGJ1ZmZlciBjb250ZXh0IHF1ZXVlcy4gVGhlIHF1ZXVlcyBhbmQgdGhlIGNvbnRleHQK KyAqIGRhdGEgaXMgcHJvdGVjdGVkIGJ5IEBsb2NrLgorICogQGVycm9yOiBMaXN0IG9mIGNvbW1h bmQgYnVmZmVycyB0aGF0IGhhdmUgY2F1c2VkIGRldmljZSBlcnJvcnMuCisgKiBQcm90ZWN0ZWQg YnkgQGxvY2suCisgKiBAbW06IFJhbmdlIG1hbmFnZXIgZm9yIHRoZSBjb21tYW5kIGJ1ZmZlciBz cGFjZS4gTWFuYWdlciBhbGxvY2F0aW9ucyBhbmQKKyAqIGZyZWVzIGFyZSBwcm90ZWN0ZWQgYnkg QGxvY2suCisgKiBAY21kX3NwYWNlOiBCdWZmZXIgb2JqZWN0IGZvciB0aGUgY29tbWFuZCBidWZm ZXIgc3BhY2UsIHVubGVzcyB3ZSB3ZXJlCisgKiBhYmxlIHRvIG1ha2UgYSBjb250aWdvdXMgY29o ZXJlbnQgRE1BIG1lbW9yeSBhbGxvY2F0aW9uLCBAaGFuZGxlLiBJbW11dGFibGUuCisgKiBAbWFw X29iajogTWFwcGluZyBzdGF0ZSBmb3IgQGNtZF9zcGFjZS4gSW1tdXRhYmxlLgorICogQG1hcDog UG9pbnRlciB0byBjb21tYW5kIGJ1ZmZlciBzcGFjZS4gTWF5IGJlIGEgbWFwcGVkIGJ1ZmZlciBv YmplY3Qgb3IKKyAqIGEgY29udGlnb3VzIGNvaGVyZW50IERNQSBtZW1vcnkgYWxsb2NhdGlvbi4g SW1tdXRhYmxlLgorICogQGN1cjogQ29tbWFuZCBidWZmZXIgZm9yIHNtYWxsIGtlcm5lbCBjb21t YW5kIHN1Ym1pc3Npb25zLiBQcm90ZWN0ZWQgYnkKKyAqIHRoZSBAY3VyX211dGV4LgorICogQGN1 cl9wb3M6IFNwYWNlIGFscmVhZHkgdXNlZCBpbiBAY3VyLiBQcm90ZWN0ZWQgYnkgQGN1cl9tdXRl eC4KKyAqIEBkZWZhdWx0X3NpemU6IERlZmF1bHQgc2l6ZSBmb3IgdGhlIEBjdXIgY29tbWFuZCBi dWZmZXIuIEltbXV0YWJsZS4KKyAqIEBtYXhfaHdfc3VibWl0dGVkOiBNYXggbnVtYmVyIG9mIGlu LWZsaWdodCBjb21tYW5kIGJ1ZmZlcnMgdGhlIGRldmljZSBjYW4KKyAqIGhhbmRsZS4gSW1tdXRh YmxlLgorICogQGxvY2s6IFNwaW5sb2NrIHByb3RlY3RpbmcgY29tbWFuZCBzdWJtaXNzaW9uIHF1 ZXVlcy4KKyAqIEBoZWFkZXI6IFBvb2wgb2YgRE1BIG1lbW9yeSBmb3IgZGV2aWNlIGNvbW1hbmQg YnVmZmVyIGhlYWRlcnMuCisgKiBJbnRlcm5hbCBwcm90ZWN0aW9uLgorICogQGRoZWFkZXJzOiBQ b29sIG9mIERNQSBtZW1vcnkgZm9yIGRldmljZSBjb21tYW5kIGJ1ZmZlciBoZWFkZXJzIHdpdGgg dHJhaWxpbmcKKyAqIHNwYWNlIGZvciBpbmxpbmUgZGF0YS4gSW50ZXJuYWwgcHJvdGVjdGlvbi4K KyAqIEB0YXNrbGV0OiBUYXNrbGV0IHN0cnVjdCBmb3IgaXJxIHByb2Nlc3NpbmcuIEltbXV0YWJs ZS4KKyAqIEBhbGxvY19xdWV1ZTogV2FpdCBxdWV1ZSBmb3IgcHJvY2Vzc2VzIHdhaXRpbmcgdG8g YWxsb2NhdGUgY29tbWFuZCBidWZmZXIKKyAqIHNwYWNlLgorICogQGlkbGVfcXVldWU6IFdhaXQg cXVldWUgZm9yIHByb2Nlc3NlcyB3YWl0aW5nIGZvciBjb21tYW5kIGJ1ZmZlciBpZGxlLgorICog QGlycV9vbjogV2hldGhlciB0aGUgcHJvY2VzcyBmdW5jdGlvbiBoYXMgcmVxdWVzdGVkIGlycSB0 byBiZSB0dXJuZWQgb24uCisgKiBQcm90ZWN0ZWQgYnkgQGxvY2suCisgKiBAdXNpbmdfbW9iOiBX aGV0aGVyIHRoZSBjb21tYW5kIGJ1ZmZlciBzcGFjZSBpcyBhIE1PQiBvciBhIGNvbnRpZ291cyBE TUEKKyAqIGFsbG9jYXRpb24uIEltbXV0YWJsZS4KKyAqIEBoYXNfcG9vbDogSGFzIGEgbGFyZ2Ug cG9vbCBvZiBETUEgbWVtb3J5IHdoaWNoIGFsbG93cyBsYXJnZXIgYWxsb2NhdGlvbnMuCisgKiBU eXBpY2FsbHkgdGhpcyBpcyBmYWxzZSBvbmx5IGR1cmluZyBib290c3RyYXAuCisgKiBAaGFuZGxl OiBETUEgYWRkcmVzcyBoYW5kbGUgZm9yIHRoZSBjb21tYW5kIGJ1ZmZlciBzcGFjZSBpZiBAdXNp bmdfbW9iIGlzCisgKiBmYWxzZS4gSW1tdXRhYmxlLgorICogQHNpemU6IFRoZSBzaXplIG9mIHRo ZSBjb21tYW5kIGJ1ZmZlciBzcGFjZS4gSW1tdXRhYmxlLgorICovCitzdHJ1Y3Qgdm13X2NtZGJ1 Zl9tYW4geworCXN0cnVjdCBtdXRleCBjdXJfbXV0ZXg7CisJc3RydWN0IG11dGV4IHNwYWNlX211 dGV4OworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2 X3ByaXY7CisJc3RydWN0IHZtd19jbWRidWZfY29udGV4dCBjdHhbU1ZHQV9DQl9DT05URVhUX01B WF07CisJc3RydWN0IGxpc3RfaGVhZCBlcnJvcjsKKwlzdHJ1Y3QgZHJtX21tIG1tOworCXN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCAqY21kX3NwYWNlOworCXN0cnVjdCB0dG1fYm9fa21hcF9vYmog bWFwX29iajsKKwl1OCAqbWFwOworCXN0cnVjdCB2bXdfY21kYnVmX2hlYWRlciAqY3VyOworCXNp emVfdCBjdXJfcG9zOworCXNpemVfdCBkZWZhdWx0X3NpemU7CisJdW5zaWduZWQgbWF4X2h3X3N1 Ym1pdHRlZDsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGRtYV9wb29sICpoZWFkZXJzOwor CXN0cnVjdCBkbWFfcG9vbCAqZGhlYWRlcnM7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2ts ZXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgYWxsb2NfcXVldWU7CisJd2FpdF9xdWV1ZV9oZWFkX3Qg aWRsZV9xdWV1ZTsKKwlib29sIGlycV9vbjsKKwlib29sIHVzaW5nX21vYjsKKwlib29sIGhhc19w b29sOworCWRtYV9hZGRyX3QgaGFuZGxlOworCXNpemVfdCBzaXplOworfTsKKworLyoqCisgKiBz dHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgLSBDb21tYW5kIGJ1ZmZlciBtZXRhZGF0YQorICoKKyAq IEBtYW46IFRoZSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VyLgorICogQGNiX2hlYWRlcjogRGV2aWNl IGNvbW1hbmQgYnVmZmVyIGhlYWRlciwgYWxsb2NhdGVkIGZyb20gYSBETUEgcG9vbC4KKyAqIEBj Yl9jb250ZXh0OiBUaGUgZGV2aWNlIGNvbW1hbmQgYnVmZmVyIGNvbnRleHQuCisgKiBAbGlzdDog TGlzdCBoZWFkIGZvciBhdHRhY2hpbmcgdG8gdGhlIG1hbmFnZXIgbGlzdHMuCisgKiBAbm9kZTog VGhlIHJhbmdlIG1hbmFnZXIgbm9kZS4KKyAqIEBoYW5kbGUuIFRoZSBETUEgYWRkcmVzcyBvZiBA Y2JfaGVhZGVyLiBIYW5kZWQgdG8gdGhlIGRldmljZSBvbiBjb21tYW5kCisgKiBidWZmZXIgc3Vi bWlzc2lvbi4KKyAqIEBjbWQ6IFBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgYnVmZmVyIHNwYWNlIG9m IHRoaXMgYnVmZmVyLgorICogQHNpemU6IFNpemUgb2YgdGhlIGNvbW1hbmQgYnVmZmVyIHNwYWNl IG9mIHRoaXMgYnVmZmVyLgorICogQHJlc2VydmVkOiBSZXNlcnZlZCBzcGFjZSBvZiB0aGlzIGJ1 ZmZlci4KKyAqIEBpbmxpbmVfc3BhY2U6IFdoZXRoZXIgaW5saW5lIGNvbW1hbmQgYnVmZmVyIHNw YWNlIGlzIHVzZWQuCisgKi8KK3N0cnVjdCB2bXdfY21kYnVmX2hlYWRlciB7CisJc3RydWN0IHZt d19jbWRidWZfbWFuICptYW47CisJU1ZHQUNCSGVhZGVyICpjYl9oZWFkZXI7CisJU1ZHQUNCQ29u dGV4dCBjYl9jb250ZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZHJtX21t X25vZGUgKm5vZGU7CisJZG1hX2FkZHJfdCBoYW5kbGU7CisJdTggKmNtZDsKKwlzaXplX3Qgc2l6 ZTsKKwlzaXplX3QgcmVzZXJ2ZWQ7CisJYm9vbCBpbmxpbmVfc3BhY2U7Cit9OworCisvKioKKyAq IHN0cnVjdCB2bXdfY21kYnVmX2RoZWFkZXIgLSBEZXZpY2UgY29tbWFuZCBidWZmZXIgaGVhZGVy IHdpdGggaW5saW5lCisgKiBjb21tYW5kIGJ1ZmZlciBzcGFjZS4KKyAqCisgKiBAY2JfaGVhZGVy OiBEZXZpY2UgY29tbWFuZCBidWZmZXIgaGVhZGVyLgorICogQGNtZDogSW5saW5lIGNvbW1hbmQg YnVmZmVyIHNwYWNlLgorICovCitzdHJ1Y3Qgdm13X2NtZGJ1Zl9kaGVhZGVyIHsKKwlTVkdBQ0JI ZWFkZXIgY2JfaGVhZGVyOworCXU4IGNtZFtWTVdfQ01EQlVGX0lOTElORV9TSVpFXSBfX2FsaWdu ZWQoVk1XX0NNREJVRl9JTkxJTkVfQUxJR04pOworfTsKKworLyoqCisgKiBzdHJ1Y3Qgdm13X2Nt ZGJ1Zl9hbGxvY19pbmZvIC0gQ29tbWFuZCBidWZmZXIgc3BhY2UgYWxsb2NhdGlvbiBtZXRhZGF0 YQorICoKKyAqIEBwYWdlX3NpemU6IFNpemUgb2YgcmVxdWVzdGVkIGNvbW1hbmQgYnVmZmVyIHNw YWNlIGluIHBhZ2VzLgorICogQG5vZGU6IFRoZSByYW5nZSBtYW5hZ2VyIG5vZGUgaWYgYWxsb2Nh dGlvbiBzdWNjZWVkZWQuCisgKiBAcmV0OiBFcnJvciBjb2RlIGlmIGZhaWx1cmUuIE90aGVyd2lz ZSAwLgorICovCitzdHJ1Y3Qgdm13X2NtZGJ1Zl9hbGxvY19pbmZvIHsKKwlzaXplX3QgcGFnZV9z aXplOworCXN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZTsKKwlpbnQgcmV0OworfTsKKworLyogTG9v cCBvdmVyIGVhY2ggY29udGV4dCBpbiB0aGUgY29tbWFuZCBidWZmZXIgbWFuYWdlci4gKi8KKyNk ZWZpbmUgZm9yX2VhY2hfY21kYnVmX2N0eChfbWFuLCBfaSwgX2N0eCkgXAorCWZvciAoX2kgPSAw LCBfY3R4ID0gJihfbWFuKS0+Y3R4WzBdOyAoX2kpIDwgU1ZHQV9DQl9DT05URVhUX01BWDsgXAor CSAgICAgKysoX2kpLCArKyhfY3R4KSkKKworc3RhdGljIGludCB2bXdfY21kYnVmX3N0YXJ0c3Rv cChzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbiwgYm9vbCBlbmFibGUpOworCisKKy8qKgorICog dm13X2NtZGJ1Zl9jdXJfbG9jayAtIEhlbHBlciB0byBsb2NrIHRoZSBjdXJfbXV0ZXguCisgKgor ICogQG1hbjogVGhlIHJhbmdlIG1hbmFnZXIuCisgKiBAaW50ZXJydXB0aWJsZTogV2hldGhlciB0 byB3YWl0IGludGVycnVwdGlibGUgd2hlbiBsb2NraW5nLgorICovCitzdGF0aWMgaW50IHZtd19j bWRidWZfY3VyX2xvY2soc3RydWN0IHZtd19jbWRidWZfbWFuICptYW4sIGJvb2wgaW50ZXJydXB0 aWJsZSkKK3sKKwlpZiAoaW50ZXJydXB0aWJsZSkgeworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1 cHRpYmxlKCZtYW4tPmN1cl9tdXRleCkpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0gZWxz ZSB7CisJCW11dGV4X2xvY2soJm1hbi0+Y3VyX211dGV4KTsKKwl9CisKKwlyZXR1cm4gMDsKK30K KworLyoqCisgKiB2bXdfY21kYnVmX2N1cl91bmxvY2sgLSBIZWxwZXIgdG8gdW5sb2NrIHRoZSBj dXJfbXV0ZXguCisgKgorICogQG1hbjogVGhlIHJhbmdlIG1hbmFnZXIuCisgKi8KK3N0YXRpYyB2 b2lkIHZtd19jbWRidWZfY3VyX3VubG9jayhzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbikKK3sK KwltdXRleF91bmxvY2soJm1hbi0+Y3VyX211dGV4KTsKK30KKworLyoqCisgKiB2bXdfY21kYnVm X2hlYWRlcl9pbmxpbmVfZnJlZSAtIEZyZWUgYSBzdHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgdGhh dCBoYXMKKyAqIGJlZW4gdXNlZCBmb3IgdGhlIGRldmljZSBjb250ZXh0IHdpdGggaW5saW5lIGNv bW1hbmQgYnVmZmVycy4KKyAqIE5lZWQgbm90IGJlIGNhbGxlZCBsb2NrZWQuCisgKgorICogQGhl YWRlcjogUG9pbnRlciB0byB0aGUgaGVhZGVyIHRvIGZyZWUuCisgKi8KK3N0YXRpYyB2b2lkIHZt d19jbWRidWZfaGVhZGVyX2lubGluZV9mcmVlKHN0cnVjdCB2bXdfY21kYnVmX2hlYWRlciAqaGVh ZGVyKQoreworCXN0cnVjdCB2bXdfY21kYnVmX2RoZWFkZXIgKmRoZWFkZXI7CisKKwlpZiAoV0FS Tl9PTl9PTkNFKCFoZWFkZXItPmlubGluZV9zcGFjZSkpCisJCXJldHVybjsKKworCWRoZWFkZXIg PSBjb250YWluZXJfb2YoaGVhZGVyLT5jYl9oZWFkZXIsIHN0cnVjdCB2bXdfY21kYnVmX2RoZWFk ZXIsCisJCQkgICAgICAgY2JfaGVhZGVyKTsKKwlkbWFfcG9vbF9mcmVlKGhlYWRlci0+bWFuLT5k aGVhZGVycywgZGhlYWRlciwgaGVhZGVyLT5oYW5kbGUpOworCWtmcmVlKGhlYWRlcik7Cit9CisK Ky8qKgorICogX192bXdfY21kYnVmX2hlYWRlcl9mcmVlIC0gRnJlZSBhIHN0cnVjdCB2bXdfY21k YnVmX2hlYWRlciAgYW5kIGl0cworICogYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzLgorICoKKyAqIGhl YWRlcjogUG9pbnRlciB0byB0aGUgaGVhZGVyIHRvIGZyZWUuCisgKgorICogRm9yIGludGVybmFs IHVzZS4gTXVzdCBiZSBjYWxsZWQgd2l0aCBtYW46OmxvY2sgaGVsZC4KKyAqLworc3RhdGljIHZv aWQgX192bXdfY21kYnVmX2hlYWRlcl9mcmVlKHN0cnVjdCB2bXdfY21kYnVmX2hlYWRlciAqaGVh ZGVyKQoreworCXN0cnVjdCB2bXdfY21kYnVmX21hbiAqbWFuID0gaGVhZGVyLT5tYW47CisKKwlC VUdfT04oIXNwaW5faXNfbG9ja2VkKCZtYW4tPmxvY2spKTsKKworCWlmIChoZWFkZXItPmlubGlu ZV9zcGFjZSkgeworCQl2bXdfY21kYnVmX2hlYWRlcl9pbmxpbmVfZnJlZShoZWFkZXIpOworCQly ZXR1cm47CisJfQorCisJZHJtX21tX3JlbW92ZV9ub2RlKGhlYWRlci0+bm9kZSk7CisJa2ZyZWUo aGVhZGVyLT5ub2RlKTsKKwloZWFkZXItPm5vZGUgPSBOVUxMOworCXdha2VfdXBfYWxsKCZtYW4t PmFsbG9jX3F1ZXVlKTsKKwlpZiAoaGVhZGVyLT5jYl9oZWFkZXIpCisJCWRtYV9wb29sX2ZyZWUo bWFuLT5oZWFkZXJzLCBoZWFkZXItPmNiX2hlYWRlciwKKwkJCSAgICAgIGhlYWRlci0+aGFuZGxl KTsKKwlrZnJlZShoZWFkZXIpOworfQorCisvKioKKyAqIHZtd19jbWRidWZfaGVhZGVyX2ZyZWUg LSBGcmVlIGEgc3RydWN0IHZtd19jbWRidWZfaGVhZGVyICBhbmQgaXRzCisgKiBhc3NvY2lhdGVk IHN0cnVjdHVyZXMuCisgKgorICogQGhlYWRlcjogUG9pbnRlciB0byB0aGUgaGVhZGVyIHRvIGZy ZWUuCisgKi8KK3ZvaWQgdm13X2NtZGJ1Zl9oZWFkZXJfZnJlZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9o ZWFkZXIgKmhlYWRlcikKK3sKKwlzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbiA9IGhlYWRlci0+ bWFuOworCisJLyogQXZvaWQgbG9ja2luZyBpZiBpbmxpbmVfc3BhY2UgKi8KKwlpZiAoaGVhZGVy LT5pbmxpbmVfc3BhY2UpIHsKKwkJdm13X2NtZGJ1Zl9oZWFkZXJfaW5saW5lX2ZyZWUoaGVhZGVy KTsKKwkJcmV0dXJuOworCX0KKwlzcGluX2xvY2tfYmgoJm1hbi0+bG9jayk7CisJX192bXdfY21k YnVmX2hlYWRlcl9mcmVlKGhlYWRlcik7CisJc3Bpbl91bmxvY2tfYmgoJm1hbi0+bG9jayk7Cit9 CisKKworLyoqCisgKiB2bXdfY21idWZfaGVhZGVyX3N1Ym1pdDogU3VibWl0IGEgY29tbWFuZCBi dWZmZXIgdG8gaGFyZHdhcmUuCisgKgorICogQGhlYWRlcjogVGhlIGhlYWRlciBvZiB0aGUgYnVm ZmVyIHRvIHN1Ym1pdC4KKyAqLworc3RhdGljIGludCB2bXdfY21kYnVmX2hlYWRlcl9zdWJtaXQo c3RydWN0IHZtd19jbWRidWZfaGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IHZtd19jbWRidWZf bWFuICptYW4gPSBoZWFkZXItPm1hbjsKKwl1MzIgdmFsOworCisJdmFsID0gKGhlYWRlci0+aGFu ZGxlID4+IDMyKTsKKwl2bXdfd3JpdGUobWFuLT5kZXZfcHJpdiwgU1ZHQV9SRUdfQ09NTUFORF9I SUdILCB2YWwpOworCXZhbCA9IChoZWFkZXItPmhhbmRsZSAmIDB4RkZGRkZGRkZVTEwpOworCXZh bCB8PSBoZWFkZXItPmNiX2NvbnRleHQgJiBTVkdBX0NCX0NPTlRFWFRfTUFTSzsKKwl2bXdfd3Jp dGUobWFuLT5kZXZfcHJpdiwgU1ZHQV9SRUdfQ09NTUFORF9MT1csIHZhbCk7CisKKwlyZXR1cm4g aGVhZGVyLT5jYl9oZWFkZXItPnN0YXR1czsKK30KKworLyoqCisgKiB2bXdfY21kYnVmX2N0eF9p bml0OiBJbml0aWFsaXplIGEgY29tbWFuZCBidWZmZXIgY29udGV4dC4KKyAqCisgKiBAY3R4OiBU aGUgY29tbWFuZCBidWZmZXIgY29udGV4dCB0byBpbml0aWFsaXplCisgKi8KK3N0YXRpYyB2b2lk IHZtd19jbWRidWZfY3R4X2luaXQoc3RydWN0IHZtd19jbWRidWZfY29udGV4dCAqY3R4KQorewor CUlOSVRfTElTVF9IRUFEKCZjdHgtPmh3X3N1Ym1pdHRlZCk7CisJSU5JVF9MSVNUX0hFQUQoJmN0 eC0+c3VibWl0dGVkKTsKKwlJTklUX0xJU1RfSEVBRCgmY3R4LT5wcmVlbXB0ZWQpOworCWN0eC0+ bnVtX2h3X3N1Ym1pdHRlZCA9IDA7Cit9CisKKy8qKgorICogdm13X2NtZGJ1Zl9jdHhfc3VibWl0 OiBTdWJtaXQgY29tbWFuZCBidWZmZXJzIGZyb20gYSBjb21tYW5kIGJ1ZmZlcgorICogY29udGV4 dC4KKyAqCisgKiBAbWFuOiBUaGUgY29tbWFuZCBidWZmZXIgbWFuYWdlci4KKyAqIEBjdHg6IFRo ZSBjb21tYW5kIGJ1ZmZlciBjb250ZXh0LgorICoKKyAqIFN1Ym1pdHMgY29tbWFuZCBidWZmZXJz IHRvIGhhcmR3YXJlIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIGNvbW1hbmQKKyAqIGJ1ZmZlcnMg dG8gc3VibWl0IG9yIHRoZSBoYXJkd2FyZSBjYW4ndCBoYW5kbGUgbW9yZSBjb21tYW5kIGJ1ZmZl cnMuCisgKi8KK3N0YXRpYyB2b2lkIHZtd19jbWRidWZfY3R4X3N1Ym1pdChzdHJ1Y3Qgdm13X2Nt ZGJ1Zl9tYW4gKm1hbiwKKwkJCQkgIHN0cnVjdCB2bXdfY21kYnVmX2NvbnRleHQgKmN0eCkKK3sK Kwl3aGlsZSAoY3R4LT5udW1faHdfc3VibWl0dGVkIDwgbWFuLT5tYXhfaHdfc3VibWl0dGVkICYm CisJICAgICAgIWxpc3RfZW1wdHkoJmN0eC0+c3VibWl0dGVkKSkgeworCQlzdHJ1Y3Qgdm13X2Nt ZGJ1Zl9oZWFkZXIgKmVudHJ5OworCQlTVkdBQ0JTdGF0dXMgc3RhdHVzOworCisJCWVudHJ5ID0g bGlzdF9maXJzdF9lbnRyeSgmY3R4LT5zdWJtaXR0ZWQsCisJCQkJCSBzdHJ1Y3Qgdm13X2NtZGJ1 Zl9oZWFkZXIsCisJCQkJCSBsaXN0KTsKKworCQlzdGF0dXMgPSB2bXdfY21kYnVmX2hlYWRlcl9z dWJtaXQoZW50cnkpOworCisJCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlpZiAo V0FSTl9PTl9PTkNFKHN0YXR1cyA9PSBTVkdBX0NCX1NUQVRVU19RVUVVRV9GVUxMKSkgeworCQkJ ZW50cnktPmNiX2hlYWRlci0+c3RhdHVzID0gU1ZHQV9DQl9TVEFUVVNfTk9ORTsKKwkJCWJyZWFr OworCQl9CisKKwkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmZW50 cnktPmxpc3QsICZjdHgtPmh3X3N1Ym1pdHRlZCk7CisJCWN0eC0+bnVtX2h3X3N1Ym1pdHRlZCsr OworCX0KKworfQorCisvKioKKyAqIHZtd19jbWRidWZfY3R4X3N1Ym1pdDogUHJvY2VzcyBhIGNv bW1hbmQgYnVmZmVyIGNvbnRleHQuCisgKgorICogQG1hbjogVGhlIGNvbW1hbmQgYnVmZmVyIG1h bmFnZXIuCisgKiBAY3R4OiBUaGUgY29tbWFuZCBidWZmZXIgY29udGV4dC4KKyAqCisgKiBTdWJt aXQgY29tbWFuZCBidWZmZXJzIHRvIGhhcmR3YXJlIGlmIHBvc3NpYmxlLCBhbmQgcHJvY2VzcyBm aW5pc2hlZAorICogYnVmZmVycy4gVHlwaWNhbGx5IGZyZWVpbmcgdGhlbSwgYnV0IG9uIHByZWVt cHRpb24gb3IgZXJyb3IgdGFrZQorICogYXBwcm9wcmlhdGUgYWN0aW9uLiBXYWtlIHVwIHdhaXRl cnMgaWYgYXBwcm9wcmlhdGUuCisgKi8KK3N0YXRpYyB2b2lkIHZtd19jbWRidWZfY3R4X3Byb2Nl c3Moc3RydWN0IHZtd19jbWRidWZfbWFuICptYW4sCisJCQkJICAgc3RydWN0IHZtd19jbWRidWZf Y29udGV4dCAqY3R4LAorCQkJCSAgIGludCAqbm90ZW1wdHkpCit7CisJc3RydWN0IHZtd19jbWRi dWZfaGVhZGVyICplbnRyeSwgKm5leHQ7CisKKwl2bXdfY21kYnVmX2N0eF9zdWJtaXQobWFuLCBj dHgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCAmY3R4LT5od19z dWJtaXR0ZWQsIGxpc3QpIHsKKwkJU1ZHQUNCU3RhdHVzIHN0YXR1cyA9IGVudHJ5LT5jYl9oZWFk ZXItPnN0YXR1czsKKworCQlpZiAoc3RhdHVzID09IFNWR0FfQ0JfU1RBVFVTX05PTkUpCisJCQli cmVhazsKKworCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCQl3YWtlX3VwX2FsbCgmbWFuLT5p ZGxlX3F1ZXVlKTsKKwkJY3R4LT5udW1faHdfc3VibWl0dGVkLS07CisJCXN3aXRjaCAoc3RhdHVz KSB7CisJCWNhc2UgU1ZHQV9DQl9TVEFUVVNfQ09NUExFVEVEOgorCQkJX192bXdfY21kYnVmX2hl YWRlcl9mcmVlKGVudHJ5KTsKKwkJCWJyZWFrOworCQljYXNlIFNWR0FfQ0JfU1RBVFVTX0NPTU1B TkRfRVJST1I6CisJCWNhc2UgU1ZHQV9DQl9TVEFUVVNfQ0JfSEVBREVSX0VSUk9SOgorCQkJbGlz dF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZtYW4tPmVycm9yKTsKKwkJCXNjaGVkdWxlX3dvcmso Jm1hbi0+d29yayk7CisJCQlicmVhazsKKwkJY2FzZSBTVkdBX0NCX1NUQVRVU19QUkVFTVBURUQ6 CisJCQlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZjdHgtPnByZWVtcHRlZCk7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCVdBUk5fT05DRSh0cnVlLCAiVW5kZWZpbmVkIGNvbW1hbmQgYnVmZmVy IHN0YXR1cy5cbiIpOworCQkJX192bXdfY21kYnVmX2hlYWRlcl9mcmVlKGVudHJ5KTsKKwkJCWJy ZWFrOworCQl9CisJfQorCisJdm13X2NtZGJ1Zl9jdHhfc3VibWl0KG1hbiwgY3R4KTsKKwlpZiAo IWxpc3RfZW1wdHkoJmN0eC0+c3VibWl0dGVkKSkKKwkJKCpub3RlbXB0eSkrKzsKK30KKworLyoq CisgKiB2bXdfY21kYnVmX21hbl9wcm9jZXNzIC0gUHJvY2VzcyBhbGwgY29tbWFuZCBidWZmZXIg Y29udGV4dHMgYW5kCisgKiBzd2l0Y2ggb24gYW5kIG9mZiBpcnFzIGFzIGFwcHJvcHJpYXRlLgor ICoKKyAqIEBtYW46IFRoZSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VyLgorICoKKyAqIENhbGxzIHZt d19jbWRidWZfY3R4X3Byb2Nlc3MoKSBvbiBhbGwgY29udGV4dHMuIElmIGFueSBjb250ZXh0IGhh cworICogY29tbWFuZCBidWZmZXJzIGxlZnQgdGhhdCBhcmUgbm90IHN1Ym1pdHRlZCB0byBoYXJk d2FyZSwgTWFrZSBzdXJlCisgKiBJUlEgaGFuZGxpbmcgaXMgdHVybmVkIG9uLiBPdGhlcndpc2Us IG1ha2Ugc3VyZSBpdCdzIHR1cm5lZCBvZmYuIFRoaXMKKyAqIGZ1bmN0aW9uIG1heSByZXR1cm4g LUVBR0FJTiB0byBpbmRpY2F0ZSBpdCBzaG91bGQgYmUgcmVydW4gZHVlIHRvCisgKiBwb3NzaWJs eSBtaXNzZWQgSVJRcyBpZiBJUlFzIGhhcyBqdXN0IGJlZW4gdHVybmVkIG9uLgorICovCitzdGF0 aWMgaW50IHZtd19jbWRidWZfbWFuX3Byb2Nlc3Moc3RydWN0IHZtd19jbWRidWZfbWFuICptYW4p Cit7CisJaW50IG5vdGVtcHR5ID0gMDsKKwlzdHJ1Y3Qgdm13X2NtZGJ1Zl9jb250ZXh0ICpjdHg7 CisJaW50IGk7CisKKwlmb3JfZWFjaF9jbWRidWZfY3R4KG1hbiwgaSwgY3R4KQorCQl2bXdfY21k YnVmX2N0eF9wcm9jZXNzKG1hbiwgY3R4LCAmbm90ZW1wdHkpOworCisJaWYgKG1hbi0+aXJxX29u ICYmICFub3RlbXB0eSkgeworCQl2bXdfZ2VuZXJpY193YWl0ZXJfcmVtb3ZlKG1hbi0+ZGV2X3By aXYsCisJCQkJCSAgU1ZHQV9JUlFGTEFHX0NPTU1BTkRfQlVGRkVSLAorCQkJCQkgICZtYW4tPmRl dl9wcml2LT5jbWRidWZfd2FpdGVycyk7CisJCW1hbi0+aXJxX29uID0gZmFsc2U7CisJfSBlbHNl IGlmICghbWFuLT5pcnFfb24gJiYgbm90ZW1wdHkpIHsKKwkJdm13X2dlbmVyaWNfd2FpdGVyX2Fk ZChtYW4tPmRldl9wcml2LAorCQkJCSAgICAgICBTVkdBX0lSUUZMQUdfQ09NTUFORF9CVUZGRVIs CisJCQkJICAgICAgICZtYW4tPmRldl9wcml2LT5jbWRidWZfd2FpdGVycyk7CisJCW1hbi0+aXJx X29uID0gdHJ1ZTsKKworCQkvKiBSZXJ1biBpbiBjYXNlIHdlIGp1c3QgbWlzc2VkIGFuIGlycS4g Ki8KKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdm13 X2NtZGJ1Zl9jdHhfYWRkIC0gU2NoZWR1bGUgYSBjb21tYW5kIGJ1ZmZlciBmb3Igc3VibWlzc2lv biBvbiBhCisgKiBjb21tYW5kIGJ1ZmZlciBjb250ZXh0CisgKgorICogQG1hbjogVGhlIGNvbW1h bmQgYnVmZmVyIG1hbmFnZXIuCisgKiBAaGVhZGVyOiBUaGUgaGVhZGVyIG9mIHRoZSBidWZmZXIg dG8gc3VibWl0LgorICogQGNiX2NvbnRleHQ6IFRoZSBjb21tYW5kIGJ1ZmZlciBjb250ZXh0IHRv IHVzZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgQGhlYWRlciB0byB0aGUgInN1Ym1pdHRl ZCIgcXVldWUgb2YgdGhlIGNvbW1hbmQKKyAqIGJ1ZmZlciBjb250ZXh0IGlkZW50aWZpZWQgYnkg QGNiX2NvbnRleHQuIEl0IHRoZW4gY2FsbHMgdGhlIGNvbW1hbmQgYnVmZmVyCisgKiBtYW5hZ2Vy IHByb2Nlc3NpbmcgdG8gcG90ZW50aWFsbHkgc3VibWl0IHRoZSBidWZmZXIgdG8gaGFyZHdhcmUu CisgKiBAbWFuLT5sb2NrIG5lZWRzIHRvIGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rp b24uCisgKi8KK3N0YXRpYyB2b2lkIHZtd19jbWRidWZfY3R4X2FkZChzdHJ1Y3Qgdm13X2NtZGJ1 Zl9tYW4gKm1hbiwKKwkJCSAgICAgICBzdHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgKmhlYWRlciwK KwkJCSAgICAgICBTVkdBQ0JDb250ZXh0IGNiX2NvbnRleHQpCit7CisJaWYgKCEoaGVhZGVyLT5j Yl9oZWFkZXItPmZsYWdzICYgU1ZHQV9DQl9GTEFHX0RYX0NPTlRFWFQpKQorCQloZWFkZXItPmNi X2hlYWRlci0+ZHhDb250ZXh0ID0gMDsKKwloZWFkZXItPmNiX2NvbnRleHQgPSBjYl9jb250ZXh0 OworCWxpc3RfYWRkX3RhaWwoJmhlYWRlci0+bGlzdCwgJm1hbi0+Y3R4W2NiX2NvbnRleHRdLnN1 Ym1pdHRlZCk7CisKKwlpZiAodm13X2NtZGJ1Zl9tYW5fcHJvY2VzcyhtYW4pID09IC1FQUdBSU4p CisJCXZtd19jbWRidWZfbWFuX3Byb2Nlc3MobWFuKTsKK30KKworLyoqCisgKiB2bXdfY21kYnVm X21hbl90YXNrbGV0IC0gVGhlIG1haW4gcGFydCBvZiB0aGUgY29tbWFuZCBidWZmZXIgaW50ZXJy dXB0CisgKiBoYW5kbGVyIGltcGxlbWVudGVkIGFzIGEgdGFza2xldC4KKyAqCisgKiBAZGF0YTog VGFza2xldCBjbG9zdXJlLiBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgYnVmZmVyIG1hbmFnZXIg Y2FzdCB0bworICogYW4gdW5zaWduZWQgbG9uZy4KKyAqCisgKiBUaGUgYm90dG9tIGhhbGYgKHRh c2tsZXQpIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBzaW1wbHkgY2FsbHMgaW50byB0aGUKKyAq IGNvbW1hbmQgYnVmZmVyIHByb2Nlc3NvciB0byBmcmVlIGZpbmlzaGVkIGJ1ZmZlcnMgYW5kIHN1 Ym1pdCBhbnkKKyAqIHF1ZXVlZCBidWZmZXJzIHRvIGhhcmR3YXJlLgorICovCitzdGF0aWMgdm9p ZCB2bXdfY21kYnVmX21hbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qg dm13X2NtZGJ1Zl9tYW4gKm1hbiA9IChzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKikgZGF0YTsKKwor CXNwaW5fbG9jaygmbWFuLT5sb2NrKTsKKwlpZiAodm13X2NtZGJ1Zl9tYW5fcHJvY2VzcyhtYW4p ID09IC1FQUdBSU4pCisJCSh2b2lkKSB2bXdfY21kYnVmX21hbl9wcm9jZXNzKG1hbik7CisJc3Bp bl91bmxvY2soJm1hbi0+bG9jayk7Cit9CisKKy8qKgorICogdm13X2NtZGJ1Zl93b3JrX2Z1bmMg LSBUaGUgZGVmZXJyZWQgd29yayBmdW5jdGlvbiB0aGF0IGhhbmRsZXMKKyAqIGNvbW1hbmQgYnVm ZmVyIGVycm9ycy4KKyAqCisgKiBAd29yazogVGhlIHdvcmsgZnVuYyBjbG9zdXJlIGFyZ3VtZW50 LgorICoKKyAqIFJlc3RhcnRpbmcgdGhlIGNvbW1hbmQgYnVmZmVyIGNvbnRleHQgYWZ0ZXIgYW4g ZXJyb3IgcmVxdWlyZXMgcHJvY2VzcworICogY29udGV4dCwgc28gaXQgaXMgZGVmZXJyZWQgdG8g dGhpcyB3b3JrIGZ1bmN0aW9uLgorICovCitzdGF0aWMgdm9pZCB2bXdfY21kYnVmX3dvcmtfZnVu YyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHZtd19jbWRidWZfbWFuICpt YW4gPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHZtd19jbWRidWZfbWFuLCB3b3JrKTsK KwlzdHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgKmVudHJ5LCAqbmV4dDsKKwlib29sIHJlc3RhcnQ7 CisKKwlzcGluX2xvY2tfYmgoJm1hbi0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KGVudHJ5LCBuZXh0LCAmbWFuLT5lcnJvciwgbGlzdCkgeworCQlyZXN0YXJ0ID0gdHJ1ZTsKKwkJ RFJNX0VSUk9SKCJDb21tYW5kIGJ1ZmZlciBlcnJvci5cbiIpOworCisJCWxpc3RfZGVsKCZlbnRy eS0+bGlzdCk7CisJCV9fdm13X2NtZGJ1Zl9oZWFkZXJfZnJlZShlbnRyeSk7CisJCXdha2VfdXBf YWxsKCZtYW4tPmlkbGVfcXVldWUpOworCX0KKwlzcGluX3VubG9ja19iaCgmbWFuLT5sb2NrKTsK KworCWlmIChyZXN0YXJ0ICYmIHZtd19jbWRidWZfc3RhcnRzdG9wKG1hbiwgdHJ1ZSkpCisJCURS TV9FUlJPUigiRmFpbGVkIHJlc3RhcnRpbmcgY29tbWFuZCBidWZmZXIgY29udGV4dCAwLlxuIik7 CisKK30KKworLyoqCisgKiB2bXdfY21kYnVmX21hbiBpZGxlIC0gQ2hlY2sgd2hldGhlciB0aGUg Y29tbWFuZCBidWZmZXIgbWFuYWdlciBpcyBpZGxlLgorICoKKyAqIEBtYW46IFRoZSBjb21tYW5k IGJ1ZmZlciBtYW5hZ2VyLgorICogQGNoZWNrX3ByZWVtcHRlZDogQ2hlY2sgYWxzbyB0aGUgcHJl ZW1wdGVkIHF1ZXVlIGZvciBwZW5kaW5nIGNvbW1hbmQgYnVmZmVycy4KKyAqCisgKi8KK3N0YXRp YyBib29sIHZtd19jbWRidWZfbWFuX2lkbGUoc3RydWN0IHZtd19jbWRidWZfbWFuICptYW4sCisJ CQkJYm9vbCBjaGVja19wcmVlbXB0ZWQpCit7CisJc3RydWN0IHZtd19jbWRidWZfY29udGV4dCAq Y3R4OworCWJvb2wgaWRsZSA9IGZhbHNlOworCWludCBpOworCisJc3Bpbl9sb2NrX2JoKCZtYW4t PmxvY2spOworCXZtd19jbWRidWZfbWFuX3Byb2Nlc3MobWFuKTsKKwlmb3JfZWFjaF9jbWRidWZf Y3R4KG1hbiwgaSwgY3R4KSB7CisJCWlmICghbGlzdF9lbXB0eSgmY3R4LT5zdWJtaXR0ZWQpIHx8 CisJCSAgICAhbGlzdF9lbXB0eSgmY3R4LT5od19zdWJtaXR0ZWQpIHx8CisJCSAgICAoY2hlY2tf cHJlZW1wdGVkICYmICFsaXN0X2VtcHR5KCZjdHgtPnByZWVtcHRlZCkpKQorCQkJZ290byBvdXRf dW5sb2NrOworCX0KKworCWlkbGUgPSBsaXN0X2VtcHR5KCZtYW4tPmVycm9yKTsKKworb3V0X3Vu bG9jazoKKwlzcGluX3VubG9ja19iaCgmbWFuLT5sb2NrKTsKKworCXJldHVybiBpZGxlOworfQor CisvKioKKyAqIF9fdm13X2NtZGJ1Zl9jdXJfZmx1c2ggLSBGbHVzaCB0aGUgY3VycmVudCBjb21t YW5kIGJ1ZmZlciBmb3Igc21hbGwga2VybmVsCisgKiBjb21tYW5kIHN1Ym1pc3Npb25zCisgKgor ICogQG1hbjogVGhlIGNvbW1hbmQgYnVmZmVyIG1hbmFnZXIuCisgKgorICogRmx1c2hlcyB0aGUg Y3VycmVudCBjb21tYW5kIGJ1ZmZlciB3aXRob3V0IGFsbG9jYXRpbmcgYSBuZXcgb25lLiBBIG5l dyBvbmUKKyAqIGlzIGF1dG9tYXRpY2FsbHkgYWxsb2NhdGVkIHdoZW4gbmVlZGVkLiBDYWxsIHdp dGggQG1hbi0+Y3VyX211dGV4IGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIF9fdm13X2NtZGJ1Zl9j dXJfZmx1c2goc3RydWN0IHZtd19jbWRidWZfbWFuICptYW4pCit7CisJc3RydWN0IHZtd19jbWRi dWZfaGVhZGVyICpjdXIgPSBtYW4tPmN1cjsKKworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgm bWFuLT5jdXJfbXV0ZXgpKTsKKworCWlmICghY3VyKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tf YmgoJm1hbi0+bG9jayk7CisJaWYgKG1hbi0+Y3VyX3BvcyA9PSAwKSB7CisJCV9fdm13X2NtZGJ1 Zl9oZWFkZXJfZnJlZShjdXIpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJbWFuLT5jdXIt PmNiX2hlYWRlci0+bGVuZ3RoID0gbWFuLT5jdXJfcG9zOworCXZtd19jbWRidWZfY3R4X2FkZCht YW4sIG1hbi0+Y3VyLCBTVkdBX0NCX0NPTlRFWFRfMCk7CitvdXRfdW5sb2NrOgorCXNwaW5fdW5s b2NrX2JoKCZtYW4tPmxvY2spOworCW1hbi0+Y3VyID0gTlVMTDsKKwltYW4tPmN1cl9wb3MgPSAw OworfQorCisvKioKKyAqIHZtd19jbWRidWZfY3VyX2ZsdXNoIC0gRmx1c2ggdGhlIGN1cnJlbnQg Y29tbWFuZCBidWZmZXIgZm9yIHNtYWxsIGtlcm5lbAorICogY29tbWFuZCBzdWJtaXNzaW9ucwor ICoKKyAqIEBtYW46IFRoZSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VyLgorICogQGludGVycnVwdGli bGU6IFdoZXRoZXIgdG8gc2xlZXAgaW50ZXJydXB0aWJsZSB3aGVuIHNsZWVwaW5nLgorICoKKyAq IEZsdXNoZXMgdGhlIGN1cnJlbnQgY29tbWFuZCBidWZmZXIgd2l0aG91dCBhbGxvY2F0aW5nIGEg bmV3IG9uZS4gQSBuZXcgb25lCisgKiBpcyBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlZCB3aGVuIG5l ZWRlZC4KKyAqLworaW50IHZtd19jbWRidWZfY3VyX2ZsdXNoKHN0cnVjdCB2bXdfY21kYnVmX21h biAqbWFuLAorCQkJIGJvb2wgaW50ZXJydXB0aWJsZSkKK3sKKwlpbnQgcmV0ID0gdm13X2NtZGJ1 Zl9jdXJfbG9jayhtYW4sIGludGVycnVwdGlibGUpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCV9fdm13X2NtZGJ1Zl9jdXJfZmx1c2gobWFuKTsKKwl2bXdfY21kYnVmX2N1cl91bmxv Y2sobWFuKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZtd19jbWRidWZfaWRsZSAtIFdh aXQgZm9yIGNvbW1hbmQgYnVmZmVyIG1hbmFnZXIgaWRsZS4KKyAqCisgKiBAbWFuOiBUaGUgY29t bWFuZCBidWZmZXIgbWFuYWdlci4KKyAqIEBpbnRlcnJ1cHRpYmxlOiBTbGVlcCBpbnRlcnJ1cHRp YmxlIHdoaWxlIHdhaXRpbmcuCisgKiBAdGltZW91dDogVGltZSBvdXQgYWZ0ZXIgdGhpcyBtYW55 IHRpY2tzLgorICoKKyAqIFdhaXQgdW50aWwgdGhlIGNvbW1hbmQgYnVmZmVyIG1hbmFnZXIgaGFz IHByb2Nlc3NlZCBhbGwgY29tbWFuZCBidWZmZXJzLAorICogb3IgdW50aWwgYSB0aW1lb3V0IG9j Y3Vycy4gSWYgYSB0aW1lb3V0IG9jY3VycywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisgKiAt RUJVU1kuCisgKi8KK2ludCB2bXdfY21kYnVmX2lkbGUoc3RydWN0IHZtd19jbWRidWZfbWFuICpt YW4sIGJvb2wgaW50ZXJydXB0aWJsZSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sK KwlpbnQgcmV0OworCisJcmV0ID0gdm13X2NtZGJ1Zl9jdXJfZmx1c2gobWFuLCBpbnRlcnJ1cHRp YmxlKTsKKwl2bXdfZ2VuZXJpY193YWl0ZXJfYWRkKG1hbi0+ZGV2X3ByaXYsCisJCQkgICAgICAg U1ZHQV9JUlFGTEFHX0NPTU1BTkRfQlVGRkVSLAorCQkJICAgICAgICZtYW4tPmRldl9wcml2LT5j bWRidWZfd2FpdGVycyk7CisKKwlpZiAoaW50ZXJydXB0aWJsZSkgeworCQlyZXQgPSB3YWl0X2V2 ZW50X2ludGVycnVwdGlibGVfdGltZW91dAorCQkJKG1hbi0+aWRsZV9xdWV1ZSwgdm13X2NtZGJ1 Zl9tYW5faWRsZShtYW4sIHRydWUpLAorCQkJIHRpbWVvdXQpOworCX0gZWxzZSB7CisJCXJldCA9 IHdhaXRfZXZlbnRfdGltZW91dAorCQkJKG1hbi0+aWRsZV9xdWV1ZSwgdm13X2NtZGJ1Zl9tYW5f aWRsZShtYW4sIHRydWUpLAorCQkJIHRpbWVvdXQpOworCX0KKwl2bXdfZ2VuZXJpY193YWl0ZXJf cmVtb3ZlKG1hbi0+ZGV2X3ByaXYsCisJCQkJICBTVkdBX0lSUUZMQUdfQ09NTUFORF9CVUZGRVIs CisJCQkJICAmbWFuLT5kZXZfcHJpdi0+Y21kYnVmX3dhaXRlcnMpOworCWlmIChyZXQgPT0gMCkg eworCQlpZiAoIXZtd19jbWRidWZfbWFuX2lkbGUobWFuLCB0cnVlKSkKKwkJCXJldCA9IC1FQlVT WTsKKwkJZWxzZQorCQkJcmV0ID0gMDsKKwl9CisJaWYgKHJldCA+IDApCisJCXJldCA9IDA7CisK KwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHZtd19jbWRidWZfdHJ5X2FsbG9jIC0gVHJ5IHRv IGFsbG9jYXRlIGJ1ZmZlciBzcGFjZSBmcm9tIHRoZSBtYWluIHBvb2wuCisgKgorICogQG1hbjog VGhlIGNvbW1hbmQgYnVmZmVyIG1hbmFnZXIuCisgKiBAaW5mbzogQWxsb2NhdGlvbiBpbmZvLiBX aWxsIGhvbGQgdGhlIHNpemUgb24gZW50cnkgYW5kIGFsbG9jYXRlZCBtbSBub2RlCisgKiBvbiBz dWNjZXNzZnVsIHJldHVybi4KKyAqCisgKiBUcnkgdG8gYWxsb2NhdGUgYnVmZmVyIHNwYWNlIGZy b20gdGhlIG1haW4gcG9vbC4gUmV0dXJucyB0cnVlIGlmIHN1Y2NlZWRlZC4KKyAqIElmIGEgZmF0 YWwgZXJyb3Igd2FzIGhpdCwgdGhlIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQgaW4gQGluZm8tPnJl dC4KKyAqLworc3RhdGljIGJvb2wgdm13X2NtZGJ1Zl90cnlfYWxsb2Moc3RydWN0IHZtd19jbWRi dWZfbWFuICptYW4sCisJCQkJIHN0cnVjdCB2bXdfY21kYnVmX2FsbG9jX2luZm8gKmluZm8pCit7 CisJaW50IHJldDsKKworCWlmIChpbmZvLT5ub2RlKQorCQlyZXR1cm4gdHJ1ZTsKKworCWluZm8t Pm5vZGUgPSBremFsbG9jKHNpemVvZigqaW5mby0+bm9kZSksIEdGUF9LRVJORUwpOworCWlmICgh aW5mby0+bm9kZSkgeworCQlpbmZvLT5yZXQgPSAtRU5PTUVNOworCQlyZXR1cm4gdHJ1ZTsKKwl9 CisKKwlzcGluX2xvY2tfYmgoJm1hbi0+bG9jayk7CisJcmV0ID0gZHJtX21tX2luc2VydF9ub2Rl X2dlbmVyaWMoJm1hbi0+bW0sIGluZm8tPm5vZGUsIGluZm8tPnBhZ2Vfc2l6ZSwgMCwgMCwKKwkJ CQkJIERSTV9NTV9TRUFSQ0hfREVGQVVMVCwKKwkJCQkJIERSTV9NTV9DUkVBVEVfREVGQVVMVCk7 CisJc3Bpbl91bmxvY2tfYmgoJm1hbi0+bG9jayk7CisJaWYgKHJldCkgeworCQlrZnJlZShpbmZv LT5ub2RlKTsKKwkJaW5mby0+bm9kZSA9IE5VTEw7CisJfQorCisJcmV0dXJuICEhaW5mby0+bm9k ZTsKK30KKworLyoqCisgKiB2bXdfY21kYnVmX2FsbG9jX3NwYWNlIC0gQWxsb2NhdGUgYnVmZmVy IHNwYWNlIGZyb20gdGhlIG1haW4gcG9vbC4KKyAqCisgKiBAbWFuOiBUaGUgY29tbWFuZCBidWZm ZXIgbWFuYWdlci4KKyAqIEBzaXplOiBUaGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbi4KKyAqIEBp bnRlcnJ1cHRpYmxlOiBXaGV0aGVyIHRvIHNsZWVwIGludGVycnVwdGlibGUgd2hpbGUgd2FpdGlu ZyBmb3Igc3BhY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYnVmZmVyIHNwYWNl IGZyb20gdGhlIG1haW4gcG9vbCwgYW5kIGlmIHRoZXJlIGlzCisgKiBubyBzcGFjZSBhdmFpbGFi bGUgQVRNLCBpdCB0dXJucyBvbiBJUlEgaGFuZGxpbmcgYW5kIHNsZWVwcyB3YWl0aW5nIGZvciBp dCB0bworICogYmVjb21lIGF2YWlsYWJsZS4KKyAqLworc3RhdGljIHN0cnVjdCBkcm1fbW1fbm9k ZSAqdm13X2NtZGJ1Zl9hbGxvY19zcGFjZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbiwKKwkJ CQkJCSAgc2l6ZV90IHNpemUsCisJCQkJCQkgIGJvb2wgaW50ZXJydXB0aWJsZSkKK3sKKwlzdHJ1 Y3Qgdm13X2NtZGJ1Zl9hbGxvY19pbmZvIGluZm87CisKKwlpbmZvLnBhZ2Vfc2l6ZSA9IFBBR0Vf QUxJR04oc2l6ZSkgPj4gUEFHRV9TSElGVDsKKwlpbmZvLm5vZGUgPSBOVUxMOworCWluZm8ucmV0 ID0gMDsKKworCS8qCisJICogVG8gcHJldmVudCBzdGFydmF0aW9uIG9mIGxhcmdlIHJlcXVlc3Rz LCBvbmx5IG9uZSBhbGxvY2F0aW5nIGNhbGwKKwkgKiBhdCBhIHRpbWUgd2FpdGluZyBmb3Igc3Bh Y2UuCisJICovCisJaWYgKGludGVycnVwdGlibGUpIHsKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJy dXB0aWJsZSgmbWFuLT5zcGFjZV9tdXRleCkpCisJCQlyZXR1cm4gRVJSX1BUUigtRVJFU1RBUlRT WVMpOworCX0gZWxzZSB7CisJCW11dGV4X2xvY2soJm1hbi0+c3BhY2VfbXV0ZXgpOworCX0KKwor CS8qIFRyeSB0byBhbGxvY2F0ZSBzcGFjZSB3aXRob3V0IHdhaXRpbmcuICovCisJKHZvaWQpIHZt d19jbWRidWZfdHJ5X2FsbG9jKG1hbiwgJmluZm8pOworCWlmIChpbmZvLnJldCAmJiAhaW5mby5u b2RlKSB7CisJCW11dGV4X3VubG9jaygmbWFuLT5zcGFjZV9tdXRleCk7CisJCXJldHVybiBFUlJf UFRSKGluZm8ucmV0KTsKKwl9CisKKwlpZiAoaW5mby5ub2RlKSB7CisJCW11dGV4X3VubG9jaygm bWFuLT5zcGFjZV9tdXRleCk7CisJCXJldHVybiBpbmZvLm5vZGU7CisJfQorCisJdm13X2dlbmVy aWNfd2FpdGVyX2FkZChtYW4tPmRldl9wcml2LAorCQkJICAgICAgIFNWR0FfSVJRRkxBR19DT01N QU5EX0JVRkZFUiwKKwkJCSAgICAgICAmbWFuLT5kZXZfcHJpdi0+Y21kYnVmX3dhaXRlcnMpOwor CisJaWYgKGludGVycnVwdGlibGUpIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSB3YWl0X2V2ZW50 X2ludGVycnVwdGlibGUKKwkJCShtYW4tPmFsbG9jX3F1ZXVlLCB2bXdfY21kYnVmX3RyeV9hbGxv YyhtYW4sICZpbmZvKSk7CisJCWlmIChyZXQpIHsKKwkJCXZtd19nZW5lcmljX3dhaXRlcl9yZW1v dmUKKwkJCQkobWFuLT5kZXZfcHJpdiwgU1ZHQV9JUlFGTEFHX0NPTU1BTkRfQlVGRkVSLAorCQkJ CSAmbWFuLT5kZXZfcHJpdi0+Y21kYnVmX3dhaXRlcnMpOworCQkJbXV0ZXhfdW5sb2NrKCZtYW4t PnNwYWNlX211dGV4KTsKKwkJCXJldHVybiBFUlJfUFRSKHJldCk7CisJCX0KKwl9IGVsc2Ugewor CQl3YWl0X2V2ZW50KG1hbi0+YWxsb2NfcXVldWUsIHZtd19jbWRidWZfdHJ5X2FsbG9jKG1hbiwg JmluZm8pKTsKKwl9CisJdm13X2dlbmVyaWNfd2FpdGVyX3JlbW92ZShtYW4tPmRldl9wcml2LAor CQkJCSAgU1ZHQV9JUlFGTEFHX0NPTU1BTkRfQlVGRkVSLAorCQkJCSAgJm1hbi0+ZGV2X3ByaXYt PmNtZGJ1Zl93YWl0ZXJzKTsKKwltdXRleF91bmxvY2soJm1hbi0+c3BhY2VfbXV0ZXgpOworCWlm IChpbmZvLnJldCAmJiAhaW5mby5ub2RlKQorCQlyZXR1cm4gRVJSX1BUUihpbmZvLnJldCk7CisK KwlyZXR1cm4gaW5mby5ub2RlOworfQorCisvKioKKyAqIHZtd19jbWRidWZfc3BhY2VfcG9vbCAt IFNldCB1cCBhIGNvbW1hbmQgYnVmZmVyIGhlYWRlciB3aXRoIGNvbW1hbmQgYnVmZmVyCisgKiBz cGFjZSBmcm9tIHRoZSBtYWluIHBvb2wuCisgKgorICogQG1hbjogVGhlIGNvbW1hbmQgYnVmZmVy IG1hbmFnZXIuCisgKiBAaGVhZGVyOiBQb2ludGVyIHRvIHRoZSBoZWFkZXIgdG8gc2V0IHVwLgor ICogQHNpemU6IFRoZSByZXF1ZXN0ZWQgc2l6ZSBvZiB0aGUgYnVmZmVyIHNwYWNlLgorICogQGlu dGVycnVwdGlibGU6IFdoZXRoZXIgdG8gc2xlZXAgaW50ZXJydXB0aWJsZSB3aGlsZSB3YWl0aW5n IGZvciBzcGFjZS4KKyAqLworc3RhdGljIGludCB2bXdfY21kYnVmX3NwYWNlX3Bvb2woc3RydWN0 IHZtd19jbWRidWZfbWFuICptYW4sCisJCQkJIHN0cnVjdCB2bXdfY21kYnVmX2hlYWRlciAqaGVh ZGVyLAorCQkJCSBzaXplX3Qgc2l6ZSwKKwkJCQkgYm9vbCBpbnRlcnJ1cHRpYmxlKQoreworCVNW R0FDQkhlYWRlciAqY2JfaGRyOworCXNpemVfdCBvZmZzZXQ7CisJaW50IHJldDsKKworCWlmICgh bWFuLT5oYXNfcG9vbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZWFkZXItPm5vZGUgPSB2bXdf Y21kYnVmX2FsbG9jX3NwYWNlKG1hbiwgc2l6ZSwgaW50ZXJydXB0aWJsZSk7CisKKwlpZiAoSVNf RVJSKGhlYWRlci0+bm9kZSkpCisJCXJldHVybiBQVFJfRVJSKGhlYWRlci0+bm9kZSk7CisKKwlo ZWFkZXItPmNiX2hlYWRlciA9IGRtYV9wb29sX2FsbG9jKG1hbi0+aGVhZGVycywgR0ZQX0tFUk5F TCwKKwkJCQkJICAgJmhlYWRlci0+aGFuZGxlKTsKKwlpZiAoIWhlYWRlci0+Y2JfaGVhZGVyKSB7 CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X25vX2NiX2hlYWRlcjsKKwl9CisKKwloZWFk ZXItPnNpemUgPSBoZWFkZXItPm5vZGUtPnNpemUgPDwgUEFHRV9TSElGVDsKKwljYl9oZHIgPSBo ZWFkZXItPmNiX2hlYWRlcjsKKwlvZmZzZXQgPSBoZWFkZXItPm5vZGUtPnN0YXJ0IDw8IFBBR0Vf U0hJRlQ7CisJaGVhZGVyLT5jbWQgPSBtYW4tPm1hcCArIG9mZnNldDsKKwltZW1zZXQoY2JfaGRy LCAwLCBzaXplb2YoKmNiX2hkcikpOworCWlmIChtYW4tPnVzaW5nX21vYikgeworCQljYl9oZHIt PmZsYWdzID0gU1ZHQV9DQl9GTEFHX01PQjsKKwkJY2JfaGRyLT5wdHIubW9iLm1vYmlkID0gbWFu LT5jbWRfc3BhY2UtPm1lbS5zdGFydDsKKwkJY2JfaGRyLT5wdHIubW9iLm1vYk9mZnNldCA9IG9m ZnNldDsKKwl9IGVsc2UgeworCQljYl9oZHItPnB0ci5wYSA9ICh1NjQpbWFuLT5oYW5kbGUgKyAo dTY0KW9mZnNldDsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X25vX2NiX2hlYWRlcjoKKwlzcGlu X2xvY2tfYmgoJm1hbi0+bG9jayk7CisJZHJtX21tX3JlbW92ZV9ub2RlKGhlYWRlci0+bm9kZSk7 CisJc3Bpbl91bmxvY2tfYmgoJm1hbi0+bG9jayk7CisJa2ZyZWUoaGVhZGVyLT5ub2RlKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdm13X2NtZGJ1Zl9zcGFjZV9pbmxpbmUgLSBTZXQg dXAgYSBjb21tYW5kIGJ1ZmZlciBoZWFkZXIgd2l0aAorICogaW5saW5lIGNvbW1hbmQgYnVmZmVy IHNwYWNlLgorICoKKyAqIEBtYW46IFRoZSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VyLgorICogQGhl YWRlcjogUG9pbnRlciB0byB0aGUgaGVhZGVyIHRvIHNldCB1cC4KKyAqIEBzaXplOiBUaGUgcmVx dWVzdGVkIHNpemUgb2YgdGhlIGJ1ZmZlciBzcGFjZS4KKyAqLworc3RhdGljIGludCB2bXdfY21k YnVmX3NwYWNlX2lubGluZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbiwKKwkJCQkgICBzdHJ1 Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgKmhlYWRlciwKKwkJCQkgICBpbnQgc2l6ZSkKK3sKKwlzdHJ1 Y3Qgdm13X2NtZGJ1Zl9kaGVhZGVyICpkaGVhZGVyOworCVNWR0FDQkhlYWRlciAqY2JfaGRyOwor CisJaWYgKFdBUk5fT05fT05DRShzaXplID4gVk1XX0NNREJVRl9JTkxJTkVfU0laRSkpCisJCXJl dHVybiAtRU5PTUVNOworCisJZGhlYWRlciA9IGRtYV9wb29sX2FsbG9jKG1hbi0+ZGhlYWRlcnMs IEdGUF9LRVJORUwsCisJCQkJICZoZWFkZXItPmhhbmRsZSk7CisJaWYgKCFkaGVhZGVyKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWhlYWRlci0+aW5saW5lX3NwYWNlID0gdHJ1ZTsKKwloZWFkZXIt PnNpemUgPSBWTVdfQ01EQlVGX0lOTElORV9TSVpFOworCWNiX2hkciA9ICZkaGVhZGVyLT5jYl9o ZWFkZXI7CisJaGVhZGVyLT5jYl9oZWFkZXIgPSBjYl9oZHI7CisJaGVhZGVyLT5jbWQgPSBkaGVh ZGVyLT5jbWQ7CisJbWVtc2V0KGRoZWFkZXIsIDAsIHNpemVvZigqZGhlYWRlcikpOworCWNiX2hk ci0+c3RhdHVzID0gU1ZHQV9DQl9TVEFUVVNfTk9ORTsKKwljYl9oZHItPmZsYWdzID0gU1ZHQV9D Ql9GTEFHX05PTkU7CisJY2JfaGRyLT5wdHIucGEgPSAodTY0KWhlYWRlci0+aGFuZGxlICsKKwkJ KHU2NClvZmZzZXRvZihzdHJ1Y3Qgdm13X2NtZGJ1Zl9kaGVhZGVyLCBjbWQpOworCisJcmV0dXJu IDA7Cit9CisKKy8qKgorICogdm13X2NtZGJ1Zl9hbGxvYyAtIEFsbG9jYXRlIGEgY29tbWFuZCBi dWZmZXIgaGVhZGVyIGNvbXBsZXRlIHdpdGgKKyAqIGNvbW1hbmQgYnVmZmVyIHNwYWNlLgorICoK KyAqIEBtYW46IFRoZSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VyLgorICogQHNpemU6IFRoZSByZXF1 ZXN0ZWQgc2l6ZSBvZiB0aGUgYnVmZmVyIHNwYWNlLgorICogQGludGVycnVwdGlibGU6IFdoZXRo ZXIgdG8gc2xlZXAgaW50ZXJydXB0aWJsZSB3aGlsZSB3YWl0aW5nIGZvciBzcGFjZS4KKyAqIEBw X2hlYWRlcjogcG9pbnRzIHRvIGEgaGVhZGVyIHBvaW50ZXIgdG8gcG9wdWxhdGUgb24gc3VjY2Vz c2Z1bCByZXR1cm4uCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gY29tbWFuZCBidWZmZXIg c3BhY2UgaWYgc3VjY2Vzc2Z1bC4gT3RoZXJ3aXNlCisgKiByZXR1cm5zIGFuIGVycm9yIHBvaW50 ZXIuIFRoZSBoZWFkZXIgcG9pbnRlciByZXR1cm5lZCBpbiBAcF9oZWFkZXIgc2hvdWxkCisgKiBi ZSB1c2VkIGZvciB1cGNvbWluZyBjYWxscyB0byB2bXdfY21kYnVmX3Jlc2VydmUoKSBhbmQgdm13 X2NtZGJ1Zl9jb21taXQoKS4KKyAqLwordm9pZCAqdm13X2NtZGJ1Zl9hbGxvYyhzdHJ1Y3Qgdm13 X2NtZGJ1Zl9tYW4gKm1hbiwKKwkJICAgICAgIHNpemVfdCBzaXplLCBib29sIGludGVycnVwdGli bGUsCisJCSAgICAgICBzdHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgKipwX2hlYWRlcikKK3sKKwlz dHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgKmhlYWRlcjsKKwlpbnQgcmV0ID0gMDsKKworCSpwX2hl YWRlciA9IE5VTEw7CisKKwloZWFkZXIgPSBremFsbG9jKHNpemVvZigqaGVhZGVyKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFoZWFkZXIpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaWYg KHNpemUgPD0gVk1XX0NNREJVRl9JTkxJTkVfU0laRSkKKwkJcmV0ID0gdm13X2NtZGJ1Zl9zcGFj ZV9pbmxpbmUobWFuLCBoZWFkZXIsIHNpemUpOworCWVsc2UKKwkJcmV0ID0gdm13X2NtZGJ1Zl9z cGFjZV9wb29sKG1hbiwgaGVhZGVyLCBzaXplLCBpbnRlcnJ1cHRpYmxlKTsKKworCWlmIChyZXQp IHsKKwkJa2ZyZWUoaGVhZGVyKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwloZWFk ZXItPm1hbiA9IG1hbjsKKwlJTklUX0xJU1RfSEVBRCgmaGVhZGVyLT5saXN0KTsKKwloZWFkZXIt PmNiX2hlYWRlci0+c3RhdHVzID0gU1ZHQV9DQl9TVEFUVVNfTk9ORTsKKwkqcF9oZWFkZXIgPSBo ZWFkZXI7CisKKwlyZXR1cm4gaGVhZGVyLT5jbWQ7Cit9CisKKy8qKgorICogdm13X2NtZGJ1Zl9y ZXNlcnZlX2N1ciAtIFJlc2VydmUgc3BhY2UgZm9yIGNvbW1hbmRzIGluIHRoZSBjdXJyZW50Cisg KiBjb21tYW5kIGJ1ZmZlci4KKyAqCisgKiBAbWFuOiBUaGUgY29tbWFuZCBidWZmZXIgbWFuYWdl ci4KKyAqIEBzaXplOiBUaGUgcmVxdWVzdGVkIHNpemUgb2YgdGhlIGNvbW1hbmRzLgorICogQGN0 eF9pZDogVGhlIGNvbnRleHQgaWQgaWYgYW55LiBPdGhlcndpc2Ugc2V0IHRvIFNWR0EzRF9SRUdf SU5WQUxJRC4KKyAqIEBpbnRlcnJ1cHRpYmxlOiBXaGV0aGVyIHRvIHNsZWVwIGludGVycnVwdGli bGUgd2hpbGUgd2FpdGluZyBmb3Igc3BhY2UuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8g Y29tbWFuZCBidWZmZXIgc3BhY2UgaWYgc3VjY2Vzc2Z1bC4gT3RoZXJ3aXNlCisgKiByZXR1cm5z IGFuIGVycm9yIHBvaW50ZXIuCisgKi8KK3N0YXRpYyB2b2lkICp2bXdfY21kYnVmX3Jlc2VydmVf Y3VyKHN0cnVjdCB2bXdfY21kYnVmX21hbiAqbWFuLAorCQkJCSAgICBzaXplX3Qgc2l6ZSwKKwkJ CQkgICAgaW50IGN0eF9pZCwKKwkJCQkgICAgYm9vbCBpbnRlcnJ1cHRpYmxlKQoreworCXN0cnVj dCB2bXdfY21kYnVmX2hlYWRlciAqY3VyOworCXZvaWQgKnJldDsKKworCWlmICh2bXdfY21kYnVm X2N1cl9sb2NrKG1hbiwgaW50ZXJydXB0aWJsZSkpCisJCXJldHVybiBFUlJfUFRSKC1FUkVTVEFS VFNZUyk7CisKKwljdXIgPSBtYW4tPmN1cjsKKwlpZiAoY3VyICYmIChzaXplICsgbWFuLT5jdXJf cG9zID4gY3VyLT5zaXplIHx8CisJICAgIChjdHhfaWQgIT0gU1ZHQTNEX0lOVkFMSURfSUQgJiYK KwkgICAgIChjdXItPmNiX2hlYWRlci0+ZmxhZ3MgJiBTVkdBX0NCX0ZMQUdfRFhfQ09OVEVYVCkg JiYKKwkgICAgIGN0eF9pZCAhPSBjdXItPmNiX2hlYWRlci0+ZHhDb250ZXh0KSkpCisJCV9fdm13 X2NtZGJ1Zl9jdXJfZmx1c2gobWFuKTsKKworCWlmICghbWFuLT5jdXIpIHsKKwkJcmV0ID0gdm13 X2NtZGJ1Zl9hbGxvYyhtYW4sCisJCQkJICAgICAgIG1heF90KHNpemVfdCwgc2l6ZSwgbWFuLT5k ZWZhdWx0X3NpemUpLAorCQkJCSAgICAgICBpbnRlcnJ1cHRpYmxlLCAmbWFuLT5jdXIpOworCQlp ZiAoSVNfRVJSKHJldCkpIHsKKwkJCXZtd19jbWRidWZfY3VyX3VubG9jayhtYW4pOworCQkJcmV0 dXJuIHJldDsKKwkJfQorCisJCWN1ciA9IG1hbi0+Y3VyOworCX0KKworCWlmIChjdHhfaWQgIT0g U1ZHQTNEX0lOVkFMSURfSUQpIHsKKwkJY3VyLT5jYl9oZWFkZXItPmZsYWdzIHw9IFNWR0FfQ0Jf RkxBR19EWF9DT05URVhUOworCQljdXItPmNiX2hlYWRlci0+ZHhDb250ZXh0ID0gY3R4X2lkOwor CX0KKworCWN1ci0+cmVzZXJ2ZWQgPSBzaXplOworCisJcmV0dXJuICh2b2lkICopIChtYW4tPmN1 ci0+Y21kICsgbWFuLT5jdXJfcG9zKTsKK30KKworLyoqCisgKiB2bXdfY21kYnVmX2NvbW1pdF9j dXIgLSBDb21taXQgY29tbWFuZHMgaW4gdGhlIGN1cnJlbnQgY29tbWFuZCBidWZmZXIuCisgKgor ICogQG1hbjogVGhlIGNvbW1hbmQgYnVmZmVyIG1hbmFnZXIuCisgKiBAc2l6ZTogVGhlIHNpemUg b2YgdGhlIGNvbW1hbmRzIGFjdHVhbGx5IHdyaXR0ZW4uCisgKiBAZmx1c2g6IFdoZXRoZXIgdG8g Zmx1c2ggdGhlIGNvbW1hbmQgYnVmZmVyIGltbWVkaWF0ZWx5LgorICovCitzdGF0aWMgdm9pZCB2 bXdfY21kYnVmX2NvbW1pdF9jdXIoc3RydWN0IHZtd19jbWRidWZfbWFuICptYW4sCisJCQkJICBz aXplX3Qgc2l6ZSwgYm9vbCBmbHVzaCkKK3sKKwlzdHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgKmN1 ciA9IG1hbi0+Y3VyOworCisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZtYW4tPmN1cl9tdXRl eCkpOworCisJV0FSTl9PTihzaXplID4gY3VyLT5yZXNlcnZlZCk7CisJbWFuLT5jdXJfcG9zICs9 IHNpemU7CisJaWYgKCFzaXplKQorCQljdXItPmNiX2hlYWRlci0+ZmxhZ3MgJj0gflNWR0FfQ0Jf RkxBR19EWF9DT05URVhUOworCWlmIChmbHVzaCkKKwkJX192bXdfY21kYnVmX2N1cl9mbHVzaCht YW4pOworCXZtd19jbWRidWZfY3VyX3VubG9jayhtYW4pOworfQorCisvKioKKyAqIHZtd19jbWRi dWZfcmVzZXJ2ZSAtIFJlc2VydmUgc3BhY2UgZm9yIGNvbW1hbmRzIGluIGEgY29tbWFuZCBidWZm ZXIuCisgKgorICogQG1hbjogVGhlIGNvbW1hbmQgYnVmZmVyIG1hbmFnZXIuCisgKiBAc2l6ZTog VGhlIHJlcXVlc3RlZCBzaXplIG9mIHRoZSBjb21tYW5kcy4KKyAqIEBjdHhfaWQ6IFRoZSBjb250 ZXh0IGlkIGlmIGFueS4gT3RoZXJ3aXNlIHNldCB0byBTVkdBM0RfUkVHX0lOVkFMSUQuCisgKiBA aW50ZXJydXB0aWJsZTogV2hldGhlciB0byBzbGVlcCBpbnRlcnJ1cHRpYmxlIHdoaWxlIHdhaXRp bmcgZm9yIHNwYWNlLgorICogQGhlYWRlcjogSGVhZGVyIG9mIHRoZSBjb21tYW5kIGJ1ZmZlci4g TlVMTCBpZiB0aGUgY3VycmVudCBjb21tYW5kIGJ1ZmZlcgorICogc2hvdWxkIGJlIHVzZWQuCisg KgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gY29tbWFuZCBidWZmZXIgc3BhY2UgaWYgc3VjY2Vz c2Z1bC4gT3RoZXJ3aXNlCisgKiByZXR1cm5zIGFuIGVycm9yIHBvaW50ZXIuCisgKi8KK3ZvaWQg KnZtd19jbWRidWZfcmVzZXJ2ZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbiwgc2l6ZV90IHNp emUsCisJCQkgaW50IGN0eF9pZCwgYm9vbCBpbnRlcnJ1cHRpYmxlLAorCQkJIHN0cnVjdCB2bXdf Y21kYnVmX2hlYWRlciAqaGVhZGVyKQoreworCWlmICghaGVhZGVyKQorCQlyZXR1cm4gdm13X2Nt ZGJ1Zl9yZXNlcnZlX2N1cihtYW4sIHNpemUsIGN0eF9pZCwgaW50ZXJydXB0aWJsZSk7CisKKwlp ZiAoc2l6ZSA+IGhlYWRlci0+c2l6ZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlp ZiAoY3R4X2lkICE9IFNWR0EzRF9JTlZBTElEX0lEKSB7CisJCWhlYWRlci0+Y2JfaGVhZGVyLT5m bGFncyB8PSBTVkdBX0NCX0ZMQUdfRFhfQ09OVEVYVDsKKwkJaGVhZGVyLT5jYl9oZWFkZXItPmR4 Q29udGV4dCA9IGN0eF9pZDsKKwl9CisKKwloZWFkZXItPnJlc2VydmVkID0gc2l6ZTsKKwlyZXR1 cm4gaGVhZGVyLT5jbWQ7Cit9CisKKy8qKgorICogdm13X2NtZGJ1Zl9jb21taXQgLSBDb21taXQg Y29tbWFuZHMgaW4gYSBjb21tYW5kIGJ1ZmZlci4KKyAqCisgKiBAbWFuOiBUaGUgY29tbWFuZCBi dWZmZXIgbWFuYWdlci4KKyAqIEBzaXplOiBUaGUgc2l6ZSBvZiB0aGUgY29tbWFuZHMgYWN0dWFs bHkgd3JpdHRlbi4KKyAqIEBoZWFkZXI6IEhlYWRlciBvZiB0aGUgY29tbWFuZCBidWZmZXIuIE5V TEwgaWYgdGhlIGN1cnJlbnQgY29tbWFuZCBidWZmZXIKKyAqIHNob3VsZCBiZSB1c2VkLgorICog QGZsdXNoOiBXaGV0aGVyIHRvIGZsdXNoIHRoZSBjb21tYW5kIGJ1ZmZlciBpbW1lZGlhdGVseS4K KyAqLwordm9pZCB2bXdfY21kYnVmX2NvbW1pdChzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbiwg c2l6ZV90IHNpemUsCisJCSAgICAgICBzdHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgKmhlYWRlciwg Ym9vbCBmbHVzaCkKK3sKKwlpZiAoIWhlYWRlcikgeworCQl2bXdfY21kYnVmX2NvbW1pdF9jdXIo bWFuLCBzaXplLCBmbHVzaCk7CisJCXJldHVybjsKKwl9CisKKwkodm9pZCkgdm13X2NtZGJ1Zl9j dXJfbG9jayhtYW4sIGZhbHNlKTsKKwlfX3Ztd19jbWRidWZfY3VyX2ZsdXNoKG1hbik7CisJV0FS Tl9PTihzaXplID4gaGVhZGVyLT5yZXNlcnZlZCk7CisJbWFuLT5jdXIgPSBoZWFkZXI7CisJbWFu LT5jdXJfcG9zID0gc2l6ZTsKKwlpZiAoIXNpemUpCisJCWhlYWRlci0+Y2JfaGVhZGVyLT5mbGFn cyAmPSB+U1ZHQV9DQl9GTEFHX0RYX0NPTlRFWFQ7CisJaWYgKGZsdXNoKQorCQlfX3Ztd19jbWRi dWZfY3VyX2ZsdXNoKG1hbik7CisJdm13X2NtZGJ1Zl9jdXJfdW5sb2NrKG1hbik7Cit9CisKKy8q KgorICogdm13X2NtZGJ1Zl90YXNrbGV0X3NjaGVkdWxlIC0gU2NoZWR1bGUgdGhlIGludGVycnVw dCBoYW5kbGVyIGJvdHRvbSBoYWxmLgorICoKKyAqIEBtYW46IFRoZSBjb21tYW5kIGJ1ZmZlciBt YW5hZ2VyLgorICovCit2b2lkIHZtd19jbWRidWZfdGFza2xldF9zY2hlZHVsZShzdHJ1Y3Qgdm13 X2NtZGJ1Zl9tYW4gKm1hbikKK3sKKwlpZiAoIW1hbikKKwkJcmV0dXJuOworCisJdGFza2xldF9z Y2hlZHVsZSgmbWFuLT50YXNrbGV0KTsKK30KKworLyoqCisgKiB2bXdfY21kYnVmX3NlbmRfZGV2 aWNlX2NvbW1hbmQgLSBTZW5kIGEgY29tbWFuZCB0aHJvdWdoIHRoZSBkZXZpY2UgY29udGV4dC4K KyAqCisgKiBAbWFuOiBUaGUgY29tbWFuZCBidWZmZXIgbWFuYWdlci4KKyAqIEBjb21tYW5kOiBQ b2ludGVyIHRvIHRoZSBjb21tYW5kIHRvIHNlbmQuCisgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgY29t bWFuZC4KKyAqCisgKiBTeW5jaHJvbm91c2x5IHNlbmRzIGEgZGV2aWNlIGNvbnRleHQgY29tbWFu ZC4KKyAqLworc3RhdGljIGludCB2bXdfY21kYnVmX3NlbmRfZGV2aWNlX2NvbW1hbmQoc3RydWN0 IHZtd19jbWRidWZfbWFuICptYW4sCisJCQkJCSAgY29uc3Qgdm9pZCAqY29tbWFuZCwKKwkJCQkJ ICBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgKmhlYWRlcjsKKwlp bnQgc3RhdHVzOworCXZvaWQgKmNtZCA9IHZtd19jbWRidWZfYWxsb2MobWFuLCBzaXplLCBmYWxz ZSwgJmhlYWRlcik7CisKKwlpZiAoSVNfRVJSKGNtZCkpCisJCXJldHVybiBQVFJfRVJSKGNtZCk7 CisKKwltZW1jcHkoY21kLCBjb21tYW5kLCBzaXplKTsKKwloZWFkZXItPmNiX2hlYWRlci0+bGVu Z3RoID0gc2l6ZTsKKwloZWFkZXItPmNiX2NvbnRleHQgPSBTVkdBX0NCX0NPTlRFWFRfREVWSUNF OworCXNwaW5fbG9ja19iaCgmbWFuLT5sb2NrKTsKKwlzdGF0dXMgPSB2bXdfY21kYnVmX2hlYWRl cl9zdWJtaXQoaGVhZGVyKTsKKwlzcGluX3VubG9ja19iaCgmbWFuLT5sb2NrKTsKKwl2bXdfY21k YnVmX2hlYWRlcl9mcmVlKGhlYWRlcik7CisKKwlpZiAoc3RhdHVzICE9IFNWR0FfQ0JfU1RBVFVT X0NPTVBMRVRFRCkgeworCQlEUk1fRVJST1IoIkRldmljZSBjb250ZXh0IGNvbW1hbmQgZmFpbGVk IHdpdGggc3RhdHVzICVkXG4iLAorCQkJICBzdGF0dXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2bXdfY21kYnVmX3N0YXJ0c3RvcCAtIFNlbmQg YSBzdGFydCAvIHN0b3AgY29tbWFuZCB0aHJvdWdoIHRoZSBkZXZpY2UKKyAqIGNvbnRleHQuCisg KgorICogQG1hbjogVGhlIGNvbW1hbmQgYnVmZmVyIG1hbmFnZXIuCisgKiBAZW5hYmxlOiBXaGV0 aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBjb250ZXh0LgorICoKKyAqIFN5bmNocm9ub3Vz bHkgc2VuZHMgYSBkZXZpY2Ugc3RhcnQgLyBzdG9wIGNvbnRleHQgY29tbWFuZC4KKyAqLworc3Rh dGljIGludCB2bXdfY21kYnVmX3N0YXJ0c3RvcChzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbiwK KwkJCQlib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgeworCQl1aW50MzIgaWQ7CisJCVNWR0FEQ0Nt ZFN0YXJ0U3RvcCBib2R5OworCX0gX19wYWNrZWQgY21kOworCisJY21kLmlkID0gU1ZHQV9EQ19D TURfU1RBUlRfU1RPUF9DT05URVhUOworCWNtZC5ib2R5LmVuYWJsZSA9IChlbmFibGUpID8gMSA6 IDA7CisJY21kLmJvZHkuY29udGV4dCA9IFNWR0FfQ0JfQ09OVEVYVF8wOworCisJcmV0dXJuIHZt d19jbWRidWZfc2VuZF9kZXZpY2VfY29tbWFuZChtYW4sICZjbWQsIHNpemVvZihjbWQpKTsKK30K KworLyoqCisgKiB2bXdfY21kYnVmX3NldF9wb29sX3NpemUgLSBTZXQgY29tbWFuZCBidWZmZXIg bWFuYWdlciBzaXplcworICoKKyAqIEBtYW46IFRoZSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VyLgor ICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSBtYWluIHNwYWNlIHBvb2wuCisgKiBAZGVmYXVsdF9z aXplOiBUaGUgZGVmYXVsdCBzaXplIG9mIHRoZSBjb21tYW5kIGJ1ZmZlciBmb3Igc21hbGwga2Vy bmVsCisgKiBzdWJtaXNzaW9ucy4KKyAqCisgKiBTZXQgdGhlIHNpemUgYW5kIGFsbG9jYXRlIHRo ZSBtYWluIGNvbW1hbmQgYnVmZmVyIHNwYWNlIHBvb2wsCisgKiBhcyB3ZWxsIGFzIHRoZSBkZWZh dWx0IHNpemUgb2YgdGhlIGNvbW1hbmQgYnVmZmVyIGZvcgorICogc21hbGwga2VybmVsIHN1Ym1p c3Npb25zLiBJZiBzdWNjZXNzZnVsLCB0aGlzIGVuYWJsZXMgbGFyZ2UgY29tbWFuZAorICogc3Vi bWlzc2lvbnMuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHRoYXQgcnVkaW1lbnRh cnkgY29tbWFuZAorICogc3VibWlzc2lvbiBpcyBhbHJlYWR5IGF2YWlsYWJsZSBhbmQgdGhhdCB0 aGUgTU9CIG1lbW9yeSBtYW5hZ2VyIGlzIGFsaXZlLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mu IE5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IHZtd19jbWRidWZfc2V0 X3Bvb2xfc2l6ZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbiwKKwkJCSAgICAgc2l6ZV90IHNp emUsIHNpemVfdCBkZWZhdWx0X3NpemUpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJp diA9IG1hbi0+ZGV2X3ByaXY7CisJYm9vbCBkdW1teTsKKwlpbnQgcmV0OworCisJaWYgKG1hbi0+ aGFzX3Bvb2wpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRmlyc3QsIHRyeSB0byBhbGxvY2F0 ZSBhIGh1Z2UgY2h1bmsgb2YgRE1BIG1lbW9yeSAqLworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUp OworCW1hbi0+bWFwID0gZG1hX2FsbG9jX2NvaGVyZW50KCZkZXZfcHJpdi0+ZGV2LT5wZGV2LT5k ZXYsIHNpemUsCisJCQkJICAgICAgJm1hbi0+aGFuZGxlLCBHRlBfS0VSTkVMKTsKKwlpZiAobWFu LT5tYXApIHsKKwkJbWFuLT51c2luZ19tb2IgPSBmYWxzZTsKKwl9IGVsc2UgeworCQkvKgorCQkg KiBETUEgbWVtb3J5IGZhaWxlZC4gSWYgd2UgY2FuIGhhdmUgY29tbWFuZCBidWZmZXJzIGluIGEK KwkJICogTU9CLCB0cnkgdG8gdXNlIHRoYXQgaW5zdGVhZC4gTm90ZSB0aGF0IHRoaXMgd2lsbAor CQkgKiBhY3R1YWxseSBjYWxsIGludG8gdGhlIGFscmVhZHkgZW5hYmxlZCBtYW5hZ2VyLCB3aGVu CisJCSAqIGJpbmRpbmcgdGhlIE1PQi4KKwkJICovCisJCWlmICghKGRldl9wcml2LT5jYXBhYmls aXRpZXMgJiBTVkdBX0NBUF9DTURfQlVGRkVSU18zKSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJ CXJldCA9IHR0bV9ib19jcmVhdGUoJmRldl9wcml2LT5iZGV2LCBzaXplLCB0dG1fYm9fdHlwZV9k ZXZpY2UsCisJCQkJICAgICZ2bXdfbW9iX25lX3BsYWNlbWVudCwgMCwgZmFsc2UsIE5VTEwsCisJ CQkJICAgICZtYW4tPmNtZF9zcGFjZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJ CW1hbi0+dXNpbmdfbW9iID0gdHJ1ZTsKKwkJcmV0ID0gdHRtX2JvX2ttYXAobWFuLT5jbWRfc3Bh Y2UsIDAsIHNpemUgPj4gUEFHRV9TSElGVCwKKwkJCQkgICZtYW4tPm1hcF9vYmopOworCQlpZiAo cmV0KQorCQkJZ290byBvdXRfbm9fbWFwOworCisJCW1hbi0+bWFwID0gdHRtX2ttYXBfb2JqX3Zp cnR1YWwoJm1hbi0+bWFwX29iaiwgJmR1bW15KTsKKwl9CisKKwltYW4tPnNpemUgPSBzaXplOwor CWRybV9tbV9pbml0KCZtYW4tPm1tLCAwLCBzaXplID4+IFBBR0VfU0hJRlQpOworCisJbWFuLT5o YXNfcG9vbCA9IHRydWU7CisJbWFuLT5kZWZhdWx0X3NpemUgPSBkZWZhdWx0X3NpemU7CisJRFJN X0lORk8oIlVzaW5nIGNvbW1hbmQgYnVmZmVycyB3aXRoICVzIHBvb2wuXG4iLAorCQkgKG1hbi0+ dXNpbmdfbW9iKSA/ICJNT0IiIDogIkRNQSIpOworCisJcmV0dXJuIDA7CisKK291dF9ub19tYXA6 CisJaWYgKG1hbi0+dXNpbmdfbW9iKQorCQl0dG1fYm9fdW5yZWYoJm1hbi0+Y21kX3NwYWNlKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdm13X2NtZGJ1Zl9tYW5fY3JlYXRlOiBDcmVh dGUgYSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VyIGFuZCBlbmFibGUgaXQgZm9yCisgKiBpbmxpbmUg Y29tbWFuZCBidWZmZXIgc3VibWlzc2lvbnMgb25seS4KKyAqCisgKiBAZGV2X3ByaXY6IFBvaW50 ZXIgdG8gZGV2aWNlIHByaXZhdGUgc3RydWN0dXJlLgorICoKKyAqIFJldHVybnMgYSBwb2ludGVy IHRvIGEgY3VtbWFuZCBidWZmZXIgbWFuYWdlciB0byBzdWNjZXNzIG9yIGVycm9yIHBvaW50ZXIK KyAqIG9uIGZhaWx1cmUuIFRoZSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VyIHdpbGwgYmUgZW5hYmxl ZCBmb3Igc3VibWlzc2lvbnMgb2YKKyAqIHNpemUgVk1XX0NNREJVRl9JTkxJTkVfU0laRSBvbmx5 LgorICovCitzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKnZtd19jbWRidWZfbWFuX2NyZWF0ZShzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCB2bXdfY21kYnVmX21hbiAqbWFu OworCXN0cnVjdCB2bXdfY21kYnVmX2NvbnRleHQgKmN0eDsKKwlpbnQgaTsKKwlpbnQgcmV0Owor CisJaWYgKCEoZGV2X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0NPTU1BTkRfQlVGRkVS UykpCisJCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOworCisJbWFuID0ga3phbGxvYyhzaXplb2Yo Km1hbiksIEdGUF9LRVJORUwpOworCWlmICghbWFuKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKKworCW1hbi0+aGVhZGVycyA9IGRtYV9wb29sX2NyZWF0ZSgidm13Z2Z4IGNtZGJ1ZiIsCisJ CQkJICAgICAgICZkZXZfcHJpdi0+ZGV2LT5wZGV2LT5kZXYsCisJCQkJICAgICAgIHNpemVvZihT VkdBQ0JIZWFkZXIpLAorCQkJCSAgICAgICA2NCwgUEFHRV9TSVpFKTsKKwlpZiAoIW1hbi0+aGVh ZGVycykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9ub19wb29sOworCX0KKworCW1h bi0+ZGhlYWRlcnMgPSBkbWFfcG9vbF9jcmVhdGUoInZtd2dmeCBpbmxpbmUgY21kYnVmIiwKKwkJ CQkJJmRldl9wcml2LT5kZXYtPnBkZXYtPmRldiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2bXdfY21k YnVmX2RoZWFkZXIpLAorCQkJCQk2NCwgUEFHRV9TSVpFKTsKKwlpZiAoIW1hbi0+ZGhlYWRlcnMp IHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfbm9fZHBvb2w7CisJfQorCisJZm9yX2Vh Y2hfY21kYnVmX2N0eChtYW4sIGksIGN0eCkKKwkJdm13X2NtZGJ1Zl9jdHhfaW5pdChjdHgpOwor CisJSU5JVF9MSVNUX0hFQUQoJm1hbi0+ZXJyb3IpOworCXNwaW5fbG9ja19pbml0KCZtYW4tPmxv Y2spOworCW11dGV4X2luaXQoJm1hbi0+Y3VyX211dGV4KTsKKwltdXRleF9pbml0KCZtYW4tPnNw YWNlX211dGV4KTsKKwl0YXNrbGV0X2luaXQoJm1hbi0+dGFza2xldCwgdm13X2NtZGJ1Zl9tYW5f dGFza2xldCwKKwkJICAgICAodW5zaWduZWQgbG9uZykgbWFuKTsKKwltYW4tPmRlZmF1bHRfc2l6 ZSA9IFZNV19DTURCVUZfSU5MSU5FX1NJWkU7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWFuLT5h bGxvY19xdWV1ZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWFuLT5pZGxlX3F1ZXVlKTsKKwlt YW4tPmRldl9wcml2ID0gZGV2X3ByaXY7CisJbWFuLT5tYXhfaHdfc3VibWl0dGVkID0gU1ZHQV9D Ql9NQVhfUVVFVUVEX1BFUl9DT05URVhUIC0gMTsKKwlJTklUX1dPUksoJm1hbi0+d29yaywgJnZt d19jbWRidWZfd29ya19mdW5jKTsKKwl2bXdfZ2VuZXJpY193YWl0ZXJfYWRkKGRldl9wcml2LCBT VkdBX0lSUUZMQUdfRVJST1IsCisJCQkgICAgICAgJmRldl9wcml2LT5lcnJvcl93YWl0ZXJzKTsK KwlyZXQgPSB2bXdfY21kYnVmX3N0YXJ0c3RvcChtYW4sIHRydWUpOworCWlmIChyZXQpIHsKKwkJ RFJNX0VSUk9SKCJGYWlsZWQgc3RhcnRpbmcgY29tbWFuZCBidWZmZXIgY29udGV4dCAwLlxuIik7 CisJCXZtd19jbWRidWZfbWFuX2Rlc3Ryb3kobWFuKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsK Kwl9CisKKwlyZXR1cm4gbWFuOworCitvdXRfbm9fZHBvb2w6CisJZG1hX3Bvb2xfZGVzdHJveSht YW4tPmhlYWRlcnMpOworb3V0X25vX3Bvb2w6CisJa2ZyZWUobWFuKTsKKworCXJldHVybiBFUlJf UFRSKHJldCk7Cit9CisKKy8qKgorICogdm13X2NtZGJ1Zl9yZW1vdmVfcG9vbCAtIFRha2UgZG93 biB0aGUgbWFpbiBidWZmZXIgc3BhY2UgcG9vbC4KKyAqCisgKiBAbWFuOiBQb2ludGVyIHRvIGEg Y29tbWFuZCBidWZmZXIgbWFuYWdlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhl IG1haW4gYnVmZmVyIHNwYWNlIHBvb2wsIGFuZCBzaG91bGQgYmUgY2FsbGVkCisgKiBiZWZvcmUg TU9CIG1lbW9yeSBtYW5hZ2VtZW50IGlzIHJlbW92ZWQuIFdoZW4gdGhpcyBmdW5jdGlvbiBoYXMg YmVlbiBjYWxsZWQsCisgKiBvbmx5IHNtYWxsIGNvbW1hbmQgYnVmZmVyIHN1Ym1pc3Npb25zIG9m IHNpemUgVk1XX0NNREJVRl9JTkxJTkVfU0laRSBvcgorICogbGVzcyBhcmUgYWxsb3dlZCwgYW5k IHRoZSBkZWZhdWx0IHNpemUgb2YgdGhlIGNvbW1hbmQgYnVmZmVyIGZvciBzbWFsbCBrZXJuZWwK KyAqIHN1Ym1pc3Npb25zIGlzIGFsc28gc2V0IHRvIHRoaXMgc2l6ZS4KKyAqLwordm9pZCB2bXdf Y21kYnVmX3JlbW92ZV9wb29sKHN0cnVjdCB2bXdfY21kYnVmX21hbiAqbWFuKQoreworCWlmICgh bWFuLT5oYXNfcG9vbCkKKwkJcmV0dXJuOworCisJbWFuLT5oYXNfcG9vbCA9IGZhbHNlOworCW1h bi0+ZGVmYXVsdF9zaXplID0gVk1XX0NNREJVRl9JTkxJTkVfU0laRTsKKwkodm9pZCkgdm13X2Nt ZGJ1Zl9pZGxlKG1hbiwgZmFsc2UsIDEwKkhaKTsKKwlpZiAobWFuLT51c2luZ19tb2IpIHsKKwkJ KHZvaWQpIHR0bV9ib19rdW5tYXAoJm1hbi0+bWFwX29iaik7CisJCXR0bV9ib191bnJlZigmbWFu LT5jbWRfc3BhY2UpOworCX0gZWxzZSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZtYW4tPmRldl9w cml2LT5kZXYtPnBkZXYtPmRldiwKKwkJCQkgIG1hbi0+c2l6ZSwgbWFuLT5tYXAsIG1hbi0+aGFu ZGxlKTsKKwl9Cit9CisKKy8qKgorICogdm13X2NtZGJ1Zl9tYW5fZGVzdHJveSAtIFRha2UgZG93 biBhIGNvbW1hbmQgYnVmZmVyIG1hbmFnZXIuCisgKgorICogQG1hbjogUG9pbnRlciB0byBhIGNv bW1hbmQgYnVmZmVyIG1hbmFnZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpZGxlcyBhbmQgdGhl biBkZXN0cm95cyBhIGNvbW1hbmQgYnVmZmVyIG1hbmFnZXIuCisgKi8KK3ZvaWQgdm13X2NtZGJ1 Zl9tYW5fZGVzdHJveShzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbikKK3sKKwlXQVJOX09OX09O Q0UobWFuLT5oYXNfcG9vbCk7CisJKHZvaWQpIHZtd19jbWRidWZfaWRsZShtYW4sIGZhbHNlLCAx MCpIWik7CisJaWYgKHZtd19jbWRidWZfc3RhcnRzdG9wKG1hbiwgZmFsc2UpKQorCQlEUk1fRVJS T1IoIkZhaWxlZCBzdG9wcGluZyBjb21tYW5kIGJ1ZmZlciBjb250ZXh0IDAuXG4iKTsKKworCXZt d19nZW5lcmljX3dhaXRlcl9yZW1vdmUobWFuLT5kZXZfcHJpdiwgU1ZHQV9JUlFGTEFHX0VSUk9S LAorCQkJCSAgJm1hbi0+ZGV2X3ByaXYtPmVycm9yX3dhaXRlcnMpOworCXRhc2tsZXRfa2lsbCgm bWFuLT50YXNrbGV0KTsKKwkodm9pZCkgY2FuY2VsX3dvcmtfc3luYygmbWFuLT53b3JrKTsKKwlk bWFfcG9vbF9kZXN0cm95KG1hbi0+ZGhlYWRlcnMpOworCWRtYV9wb29sX2Rlc3Ryb3kobWFuLT5o ZWFkZXJzKTsKKwltdXRleF9kZXN0cm95KCZtYW4tPmN1cl9tdXRleCk7CisJbXV0ZXhfZGVzdHJv eSgmbWFuLT5zcGFjZV9tdXRleCk7CisJa2ZyZWUobWFuKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfZHJ2LmMKaW5kZXggYTQ3NjZhYy4uN2UyYjNjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfZHJ2LmMKQEAgLTI3OCw2ICsyNzgsOCBAQCBzdGF0aWMgdm9pZCB2bXdfcHJpbnRfY2Fw YWJpbGl0aWVzKHVpbnQzMl90IGNhcGFiaWxpdGllcykKIAkJRFJNX0lORk8oIiAgQ29tbWFuZCBC dWZmZXJzIDIuXG4iKTsKIAlpZiAoY2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfR0JPQkpFQ1RTKQog CQlEUk1fSU5GTygiICBHdWVzdCBCYWNrZWQgUmVzb3VyY2VzLlxuIik7CisJaWYgKGNhcGFiaWxp dGllcyAmIFNWR0FfQ0FQX0NNRF9CVUZGRVJTXzMpCisJCURSTV9JTkZPKCIgIENvbW1hbmQgQnVm ZmVycyAzLlxuIik7CiB9CiAKIC8qKgpAQCAtMzYyLDYgKzM2NCwxNyBAQCBzdGF0aWMgaW50IHZt d19yZXF1ZXN0X2RldmljZV9sYXRlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCX0K IAl9CiAKKwlpZiAoZGV2X3ByaXYtPmNtYW4pIHsKKwkJcmV0ID0gdm13X2NtZGJ1Zl9zZXRfcG9v bF9zaXplKGRldl9wcml2LT5jbWFuLAorCQkJCQkgICAgICAgMjU2KjQwOTYsIDIqNDA5Nik7CisJ CWlmIChyZXQpIHsKKwkJCXN0cnVjdCB2bXdfY21kYnVmX21hbiAqbWFuID0gZGV2X3ByaXYtPmNt YW47CisKKwkJCWRldl9wcml2LT5jbWFuID0gTlVMTDsKKwkJCXZtd19jbWRidWZfbWFuX2Rlc3Ry b3kobWFuKTsKKwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zNzUsNiArMzg4LDkgQEAg c3RhdGljIGludCB2bXdfcmVxdWVzdF9kZXZpY2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJp dikKIAkJcmV0dXJuIHJldDsKIAl9CiAJdm13X2ZlbmNlX2ZpZm9fdXAoZGV2X3ByaXYtPmZtYW4p OworCWRldl9wcml2LT5jbWFuID0gdm13X2NtZGJ1Zl9tYW5fY3JlYXRlKGRldl9wcml2KTsKKwlp ZiAoSVNfRVJSKGRldl9wcml2LT5jbWFuKSkKKwkJZGV2X3ByaXYtPmNtYW4gPSBOVUxMOwogCiAJ cmV0ID0gdm13X3JlcXVlc3RfZGV2aWNlX2xhdGUoZGV2X3ByaXYpOwogCWlmIChyZXQpCkBAIC0z ODcsMTAgKzQwMywxNCBAQCBzdGF0aWMgaW50IHZtd19yZXF1ZXN0X2RldmljZShzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiAwOwogCiBvdXRfbm9fcXVlcnlfYm86CisJaWYg KGRldl9wcml2LT5jbWFuKQorCQl2bXdfY21kYnVmX3JlbW92ZV9wb29sKGRldl9wcml2LT5jbWFu KTsKIAlpZiAoZGV2X3ByaXYtPmhhc19tb2IpIHsKIAkJKHZvaWQpIHR0bV9ib19ldmljdF9tbSgm ZGV2X3ByaXYtPmJkZXYsIFZNV19QTF9NT0IpOwogCQl2bXdfb3RhYmxlc190YWtlZG93bihkZXZf cHJpdik7CiAJfQorCWlmIChkZXZfcHJpdi0+Y21hbikKKwkJdm13X2NtZGJ1Zl9tYW5fZGVzdHJv eShkZXZfcHJpdi0+Y21hbik7CiBvdXRfbm9fbW9iOgogCXZtd19mZW5jZV9maWZvX2Rvd24oZGV2 X3ByaXYtPmZtYW4pOwogCXZtd19maWZvX3JlbGVhc2UoZGV2X3ByaXYsICZkZXZfcHJpdi0+Zmlm byk7CkBAIC00MTUsNiArNDM1LDkgQEAgc3RhdGljIHZvaWQgdm13X3JlbGVhc2VfZGV2aWNlX2Vh cmx5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJQlVHX09OKGRldl9wcml2LT5waW5u ZWRfYm8gIT0gTlVMTCk7CiAKIAl0dG1fYm9fdW5yZWYoJmRldl9wcml2LT5kdW1teV9xdWVyeV9i byk7CisJaWYgKGRldl9wcml2LT5jbWFuKQorCQl2bXdfY21kYnVmX3JlbW92ZV9wb29sKGRldl9w cml2LT5jbWFuKTsKKwogCWlmIChkZXZfcHJpdi0+aGFzX21vYikgewogCQl0dG1fYm9fZXZpY3Rf bW0oJmRldl9wcml2LT5iZGV2LCBWTVdfUExfTU9CKTsKIAkJdm13X290YWJsZXNfdGFrZWRvd24o ZGV2X3ByaXYpOwpAQCAtNDMyLDYgKzQ1NSw5IEBAIHN0YXRpYyB2b2lkIHZtd19yZWxlYXNlX2Rl dmljZV9lYXJseShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogc3RhdGljIHZvaWQgdm13 X3JlbGVhc2VfZGV2aWNlX2xhdGUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKIHsKIAl2 bXdfZmVuY2VfZmlmb19kb3duKGRldl9wcml2LT5mbWFuKTsKKwlpZiAoZGV2X3ByaXYtPmNtYW4p CisJCXZtd19jbWRidWZfbWFuX2Rlc3Ryb3koZGV2X3ByaXYtPmNtYW4pOworCiAJdm13X2ZpZm9f cmVsZWFzZShkZXZfcHJpdiwgJmRldl9wcml2LT5maWZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9kcnYuaAppbmRleCBhNWYyMjFlLi44ZmQ0MGM2IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9kcnYuaApAQCAtNDUzLDYgKzQ1Myw4IEBAIHN0cnVjdCB2bXdfcHJpdmF0ZSB7CiAJ c3BpbmxvY2tfdCB3YWl0ZXJfbG9jazsKIAlpbnQgZmVuY2VfcXVldWVfd2FpdGVyczsgLyogUHJv dGVjdGVkIGJ5IHdhaXRlcl9sb2NrICovCiAJaW50IGdvYWxfcXVldWVfd2FpdGVyczsgLyogUHJv dGVjdGVkIGJ5IHdhaXRlcl9sb2NrICovCisJaW50IGNtZGJ1Zl93YWl0ZXJzOyAvKiBQcm90ZWN0 ZWQgYnkgaXJxX2xvY2sgKi8KKwlpbnQgZXJyb3Jfd2FpdGVyczsgLyogUHJvdGVjdGVkIGJ5IGly cV9sb2NrICovCiAJYXRvbWljX3QgZmlmb19xdWV1ZV93YWl0ZXJzOwogCXVpbnQzMl90IGxhc3Rf cmVhZF9zZXFubzsKIAlzcGlubG9ja190IGlycV9sb2NrOwpAQCAtNTM1LDYgKzUzNyw4IEBAIHN0 cnVjdCB2bXdfcHJpdmF0ZSB7CiAJICovCiAJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpvdGFi bGVfYm87CiAJc3RydWN0IHZtd19vdGFibGUgKm90YWJsZXM7CisKKwlzdHJ1Y3Qgdm13X2NtZGJ1 Zl9tYW4gKmNtYW47CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bXdfc3VyZmFjZSAqdm13 X3Jlc190b19zcmYoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQpAQCAtNzI5LDYgKzczMyw4IEBA IGV4dGVybiBib29sIHZtd19maWZvX2hhdmVfM2Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJp dik7CiBleHRlcm4gYm9vbCB2bXdfZmlmb19oYXZlX3BpdGNobG9jayhzdHJ1Y3Qgdm13X3ByaXZh dGUgKmRldl9wcml2KTsKIGV4dGVybiBpbnQgdm13X2ZpZm9fZW1pdF9kdW1teV9xdWVyeShzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCSAgICAgdWludDMyX3QgY2lkKTsKK2V4dGVy biBpbnQgdm13X2ZpZm9fZmx1c2goc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAg Ym9vbCBpbnRlcnJ1cHRpYmxlKTsKIAogLyoqCiAgKiBUVE0gZ2x1ZSAtIHZtd2dmeF90dG1fZ2x1 ZS5jCkBAIC03NTMsNiArNzU5LDcgQEAgZXh0ZXJuIHN0cnVjdCB0dG1fcGxhY2VtZW50IHZtd19z eXNfbmVfcGxhY2VtZW50OwogZXh0ZXJuIHN0cnVjdCB0dG1fcGxhY2VtZW50IHZtd19ldmljdGFi bGVfcGxhY2VtZW50OwogZXh0ZXJuIHN0cnVjdCB0dG1fcGxhY2VtZW50IHZtd19zcmZfcGxhY2Vt ZW50OwogZXh0ZXJuIHN0cnVjdCB0dG1fcGxhY2VtZW50IHZtd19tb2JfcGxhY2VtZW50OworZXh0 ZXJuIHN0cnVjdCB0dG1fcGxhY2VtZW50IHZtd19tb2JfbmVfcGxhY2VtZW50OwogZXh0ZXJuIHN0 cnVjdCB0dG1fYm9fZHJpdmVyIHZtd19ib19kcml2ZXI7CiBleHRlcm4gaW50IHZtd19kbWFfcXVp ZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCB2bXdfYm9fbWFwX2Rt YShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKTsKQEAgLTg1NSw2ICs4NjIsMTAgQEAgZXh0 ZXJuIHZvaWQgdm13X3NlcW5vX3dhaXRlcl9hZGQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJp dik7CiBleHRlcm4gdm9pZCB2bXdfc2Vxbm9fd2FpdGVyX3JlbW92ZShzdHJ1Y3Qgdm13X3ByaXZh dGUgKmRldl9wcml2KTsKIGV4dGVybiB2b2lkIHZtd19nb2FsX3dhaXRlcl9hZGQoc3RydWN0IHZt d19wcml2YXRlICpkZXZfcHJpdik7CiBleHRlcm4gdm9pZCB2bXdfZ29hbF93YWl0ZXJfcmVtb3Zl KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgdm13X2dlbmVyaWNf d2FpdGVyX2FkZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgZmxhZywKKwkJCQkg ICBpbnQgKndhaXRlcl9jb3VudCk7CitleHRlcm4gdm9pZCB2bXdfZ2VuZXJpY193YWl0ZXJfcmVt b3ZlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgICAgdTMyIGZsYWcsIGlu dCAqd2FpdGVyX2NvdW50KTsKIAogLyoqCiAgKiBSdWRpbWVudGFyeSBmZW5jZS1saWtlIG9iamVj dHMgY3VycmVudGx5IHVzZWQgb25seSBmb3IgdGhyb3R0bGluZyAtCkBAIC0xMDc3LDYgKzEwODgs MzUgQEAgZXh0ZXJuIGludCB2bXdfY21kYnVmX3Jlc19yZW1vdmUoc3RydWN0IHZtd19jbWRidWZf cmVzX21hbmFnZXIgKm1hbiwKIAkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CiAKIAorLyoK KyAqIENvbW1hbmQgYnVmZmVyIG1hbmFnZXJtZW50IHZtd2dmeF9jbWRidWYuYworICovCitzdHJ1 Y3Qgdm13X2NtZGJ1Zl9tYW47CitzdHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXI7CisKK2V4dGVybiBz dHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKgordm13X2NtZGJ1Zl9tYW5fY3JlYXRlKHN0cnVjdCB2bXdf cHJpdmF0ZSAqZGV2X3ByaXYpOworZXh0ZXJuIGludCB2bXdfY21kYnVmX3NldF9wb29sX3NpemUo c3RydWN0IHZtd19jbWRidWZfbWFuICptYW4sCisJCQkJICAgIHNpemVfdCBzaXplLCBzaXplX3Qg ZGVmYXVsdF9zaXplKTsKK2V4dGVybiB2b2lkIHZtd19jbWRidWZfcmVtb3ZlX3Bvb2woc3RydWN0 IHZtd19jbWRidWZfbWFuICptYW4pOworZXh0ZXJuIHZvaWQgdm13X2NtZGJ1Zl9tYW5fZGVzdHJv eShzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbik7CitleHRlcm4gaW50IHZtd19jbWRidWZfaWRs ZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbiwgYm9vbCBpbnRlcnJ1cHRpYmxlLAorCQkJICAg dW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiB2b2lkICp2bXdfY21kYnVmX3Jlc2VydmUo c3RydWN0IHZtd19jbWRidWZfbWFuICptYW4sIHNpemVfdCBzaXplLAorCQkJCWludCBjdHhfaWQs IGJvb2wgaW50ZXJydXB0aWJsZSwKKwkJCQlzdHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgKmhlYWRl cik7CitleHRlcm4gdm9pZCB2bXdfY21kYnVmX2NvbW1pdChzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4g Km1hbiwgc2l6ZV90IHNpemUsCisJCQkgICAgICBzdHJ1Y3Qgdm13X2NtZGJ1Zl9oZWFkZXIgKmhl YWRlciwKKwkJCSAgICAgIGJvb2wgZmx1c2gpOworZXh0ZXJuIHZvaWQgdm13X2NtZGJ1Zl90YXNr bGV0X3NjaGVkdWxlKHN0cnVjdCB2bXdfY21kYnVmX21hbiAqbWFuKTsKK2V4dGVybiB2b2lkICp2 bXdfY21kYnVmX2FsbG9jKHN0cnVjdCB2bXdfY21kYnVmX21hbiAqbWFuLAorCQkJICAgICAgc2l6 ZV90IHNpemUsIGJvb2wgaW50ZXJydXB0aWJsZSwKKwkJCSAgICAgIHN0cnVjdCB2bXdfY21kYnVm X2hlYWRlciAqKnBfaGVhZGVyKTsKK2V4dGVybiB2b2lkIHZtd19jbWRidWZfaGVhZGVyX2ZyZWUo c3RydWN0IHZtd19jbWRidWZfaGVhZGVyICpoZWFkZXIpOworZXh0ZXJuIGludCB2bXdfY21kYnVm X2N1cl9mbHVzaChzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1hbiwKKwkJCQlib29sIGludGVycnVw dGlibGUpOworCisKIC8qKgogICogSW5saW5lIGhlbHBlciBmdW5jdGlvbnMKICAqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jIGIvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jCmluZGV4IDY1NGM4ZGEuLjA3OTJkOGQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMKQEAgLTI0MTcsNyArMjQxNywx MjYgQEAgdm13X2V4ZWNidWZfY29weV9mZW5jZV91c2VyKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2 X3ByaXYsCiAJfQogfQogCisvKioKKyAqIHZtd19leGVjYnVmX3N1Ym1pdF9maWZvIC0gUGF0Y2gg YSBjb21tYW5kIGJhdGNoIGFuZCBzdWJtaXQgaXQgdXNpbmcKKyAqIHRoZSBmaWZvLgorICoKKyAq IEBkZXZfcHJpdjogUG9pbnRlciB0byBhIGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqIEBr ZXJuZWxfY29tbWFuZHM6IFBvaW50ZXIgdG8gdGhlIHVucGF0Y2hlZCBjb21tYW5kIGJhdGNoLgor ICogQGNvbW1hbmRfc2l6ZTogU2l6ZSBvZiB0aGUgdW5wYXRjaGVkIGNvbW1hbmQgYmF0Y2guCisg KiBAc3dfY29udGV4dDogU3RydWN0dXJlIGhvbGRpbmcgdGhlIHJlbG9jYXRpb24gbGlzdHMuCisg KgorICogU2lkZSBlZmZlY3RzOiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMCwgdGhlbiB0aGUg Y29tbWFuZCBiYXRjaAorICogcG9pbnRlZCB0byBieSBAa2VybmVsX2NvbW1hbmRzIHdpbGwgaGF2 ZSBiZWVuIG1vZGlmaWVkLgorICovCitzdGF0aWMgaW50IHZtd19leGVjYnVmX3N1Ym1pdF9maWZv KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgdm9pZCAqa2VybmVsX2NvbW1h bmRzLAorCQkJCSAgIHUzMiBjb21tYW5kX3NpemUsCisJCQkJICAgc3RydWN0IHZtd19zd19jb250 ZXh0ICpzd19jb250ZXh0KQoreworCXZvaWQgKmNtZCA9IHZtd19maWZvX3Jlc2VydmUoZGV2X3By aXYsIGNvbW1hbmRfc2l6ZSk7CisKKwlpZiAoIWNtZCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCBy ZXNlcnZpbmcgZmlmbyBzcGFjZSBmb3IgY29tbWFuZHMuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07 CisJfQorCisJdm13X2FwcGx5X3JlbG9jYXRpb25zKHN3X2NvbnRleHQpOworCW1lbWNweShjbWQs IGtlcm5lbF9jb21tYW5kcywgY29tbWFuZF9zaXplKTsKKwl2bXdfcmVzb3VyY2VfcmVsb2NhdGlv bnNfYXBwbHkoY21kLCAmc3dfY29udGV4dC0+cmVzX3JlbG9jYXRpb25zKTsKKwl2bXdfcmVzb3Vy Y2VfcmVsb2NhdGlvbnNfZnJlZSgmc3dfY29udGV4dC0+cmVzX3JlbG9jYXRpb25zKTsKKwl2bXdf Zmlmb19jb21taXQoZGV2X3ByaXYsIGNvbW1hbmRfc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KIAor LyoqCisgKiB2bXdfZXhlY2J1Zl9zdWJtaXRfY21kYnVmIC0gUGF0Y2ggYSBjb21tYW5kIGJhdGNo IGFuZCBzdWJtaXQgaXQgdXNpbmcKKyAqIHRoZSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VyLgorICoK KyAqIEBkZXZfcHJpdjogUG9pbnRlciB0byBhIGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAq IEBoZWFkZXI6IE9wYXF1ZSBoYW5kbGUgdG8gdGhlIGNvbW1hbmQgYnVmZmVyIGFsbG9jYXRpb24u CisgKiBAY29tbWFuZF9zaXplOiBTaXplIG9mIHRoZSB1bnBhdGNoZWQgY29tbWFuZCBiYXRjaC4K KyAqIEBzd19jb250ZXh0OiBTdHJ1Y3R1cmUgaG9sZGluZyB0aGUgcmVsb2NhdGlvbiBsaXN0cy4K KyAqCisgKiBTaWRlIGVmZmVjdHM6IElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAwLCB0aGVuIHRo ZSBjb21tYW5kIGJ1ZmZlcgorICogcmVwcmVzZW50ZWQgYnkgQGhlYWRlciB3aWxsIGhhdmUgYmVl biBtb2RpZmllZC4KKyAqLworc3RhdGljIGludCB2bXdfZXhlY2J1Zl9zdWJtaXRfY21kYnVmKHN0 cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgICBzdHJ1Y3Qgdm13X2NtZGJ1Zl9o ZWFkZXIgKmhlYWRlciwKKwkJCQkgICAgIHUzMiBjb21tYW5kX3NpemUsCisJCQkJICAgICBzdHJ1 Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQpCit7CisJdm9pZCAqY21kID0gdm13X2NtZGJ1 Zl9yZXNlcnZlKGRldl9wcml2LT5jbWFuLCBjb21tYW5kX3NpemUsCisJCQkJICAgICAgIFNWR0Ez RF9JTlZBTElEX0lELCBmYWxzZSwgaGVhZGVyKTsKKworCXZtd19hcHBseV9yZWxvY2F0aW9ucyhz d19jb250ZXh0KTsKKwl2bXdfcmVzb3VyY2VfcmVsb2NhdGlvbnNfYXBwbHkoY21kLCAmc3dfY29u dGV4dC0+cmVzX3JlbG9jYXRpb25zKTsKKwl2bXdfcmVzb3VyY2VfcmVsb2NhdGlvbnNfZnJlZSgm c3dfY29udGV4dC0+cmVzX3JlbG9jYXRpb25zKTsKKwl2bXdfY21kYnVmX2NvbW1pdChkZXZfcHJp di0+Y21hbiwgY29tbWFuZF9zaXplLCBoZWFkZXIsIGZhbHNlKTsKKworCXJldHVybiAwOworfQor CisvKioKKyAqIHZtd19leGVjYnVmX2NtZGJ1ZiAtIFByZXBhcmUsIGlmIHBvc3NpYmxlLCBhIHVz ZXItc3BhY2UgY29tbWFuZCBiYXRjaCBmb3IKKyAqIHN1Ym1pc3Npb24gdXNpbmcgYSBjb21tYW5k IGJ1ZmZlci4KKyAqCisgKiBAZGV2X3ByaXY6IFBvaW50ZXIgdG8gYSBkZXZpY2UgcHJpdmF0ZSBz dHJ1Y3R1cmUuCisgKiBAdXNlcl9jb21tYW5kczogVXNlci1zcGFjZSBwb2ludGVyIHRvIHRoZSBj b21tYW5kcyB0byBiZSBzdWJtaXR0ZWQuCisgKiBAY29tbWFuZF9zaXplOiBTaXplIG9mIHRoZSB1 bnBhdGNoZWQgY29tbWFuZCBiYXRjaC4KKyAqIEBoZWFkZXI6IE91dCBwYXJhbWV0ZXIgcmV0dXJu aW5nIHRoZSBvcGFxdWUgcG9pbnRlciB0byB0aGUgY29tbWFuZCBidWZmZXIuCisgKgorICogVGhp cyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB3ZSBjYW4gdXNlIHRoZSBjb21tYW5kIGJ1ZmZlciBt YW5hZ2VyIGZvcgorICogc3VibWlzc2lvbiBhbmQgaWYgc28sIGNyZWF0ZXMgYSBjb21tYW5kIGJ1 ZmZlciBvZiBzdWl0YWJsZSBzaXplIGFuZAorICogY29waWVzIHRoZSB1c2VyIGRhdGEgaW50byB0 aGF0IGJ1ZmZlci4KKyAqCisgKiBPbiBzdWNjZXNzZnVsIHJldHVybiwgdGhlIGZ1bmN0aW9uIHJl dHVybnMgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGluIHRoZQorICogY29tbWFuZCBidWZmZXIgYW5k ICpAaGVhZGVyIGlzIHNldCB0byBub24tTlVMTC4KKyAqIElmIGNvbW1hbmQgYnVmZmVycyBjb3Vs ZCBub3QgYmUgdXNlZCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZQorICogb2Yg QGtlcm5lbF9jb21tYW5kcyBvbiBmdW5jdGlvbiBjYWxsLiBUaGF0IHZhbHVlIG1heSBiZSBOVUxM LiBJbiB0aGF0IGNhc2UsCisgKiB0aGUgdmFsdWUgb2YgKkBoZWFkZXIgd2lsbCBiZSBzZXQgdG8g TlVMTC4KKyAqIElmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLCB0aGUgZnVuY3Rpb24gd2lsbCBy ZXR1cm4gYSBwb2ludGVyIGVycm9yIHZhbHVlLgorICogSWYgdGhlIGZ1bmN0aW9uIGlzIGludGVy cnVwdGVkIGJ5IGEgc2lnbmFsIHdoaWxlIHNsZWVwaW5nLCBpdCB3aWxsIHJldHVybgorICogLUVS RVNUQVJUU1lTIGNhc3RlZCB0byBhIHBvaW50ZXIgZXJyb3IgdmFsdWUuCisgKi8KK3ZvaWQgKnZt d19leGVjYnVmX2NtZGJ1ZihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJIHZvaWQg X191c2VyICp1c2VyX2NvbW1hbmRzLAorCQkJIHZvaWQgKmtlcm5lbF9jb21tYW5kcywKKwkJCSB1 MzIgY29tbWFuZF9zaXplLAorCQkJIHN0cnVjdCB2bXdfY21kYnVmX2hlYWRlciAqKmhlYWRlcikK K3sKKwlzaXplX3QgY21kYnVmX3NpemU7CisJaW50IHJldDsKKworCSpoZWFkZXIgPSBOVUxMOwor CWlmICghZGV2X3ByaXYtPmNtYW4gfHwga2VybmVsX2NvbW1hbmRzKQorCQlyZXR1cm4ga2VybmVs X2NvbW1hbmRzOworCisJaWYgKGNvbW1hbmRfc2l6ZSA+IFNWR0FfQ0JfTUFYX1NJWkUpIHsKKwkJ RFJNX0VSUk9SKCJDb21tYW5kIGJ1ZmZlciBpcyB0b28gbGFyZ2UuXG4iKTsKKwkJcmV0dXJuIEVS Ul9QVFIoLUVJTlZBTCk7CisJfQorCisJLyogSWYgcG9zc2libGUsIGFkZCBhIGxpdHRsZSBzcGFj ZSBmb3IgZmVuY2luZy4gKi8KKwljbWRidWZfc2l6ZSA9IGNvbW1hbmRfc2l6ZSArIDUxMjsKKwlj bWRidWZfc2l6ZSA9IG1pbl90KHNpemVfdCwgY21kYnVmX3NpemUsIFNWR0FfQ0JfTUFYX1NJWkUp OworCWtlcm5lbF9jb21tYW5kcyA9IHZtd19jbWRidWZfYWxsb2MoZGV2X3ByaXYtPmNtYW4sIGNt ZGJ1Zl9zaXplLAorCQkJCQkgICB0cnVlLCBoZWFkZXIpOworCWlmIChJU19FUlIoa2VybmVsX2Nv bW1hbmRzKSkKKwkJcmV0dXJuIGtlcm5lbF9jb21tYW5kczsKKworCXJldCA9IGNvcHlfZnJvbV91 c2VyKGtlcm5lbF9jb21tYW5kcywgdXNlcl9jb21tYW5kcywKKwkJCSAgICAgY29tbWFuZF9zaXpl KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIGNvcHlpbmcgY29tbWFuZHMuXG4i KTsKKwkJdm13X2NtZGJ1Zl9oZWFkZXJfZnJlZSgqaGVhZGVyKTsKKwkJKmhlYWRlciA9IE5VTEw7 CisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCX0KKworCXJldHVybiBrZXJuZWxfY29tbWFu ZHM7Cit9CiAKIGludCB2bXdfZXhlY2J1Zl9wcm9jZXNzKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2LAogCQkJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKQEAgLTI0MzIsMTggKzI1NTEs MzMgQEAgaW50IHZtd19leGVjYnVmX3Byb2Nlc3Moc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYs CiAJc3RydWN0IHZtd19mZW5jZV9vYmogKmZlbmNlID0gTlVMTDsKIAlzdHJ1Y3Qgdm13X3Jlc291 cmNlICplcnJvcl9yZXNvdXJjZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlX2xpc3Q7CisJ c3RydWN0IHZtd19jbWRidWZfaGVhZGVyICpoZWFkZXI7CiAJc3RydWN0IHd3X2FjcXVpcmVfY3R4 IHRpY2tldDsKIAl1aW50MzJfdCBoYW5kbGU7Ci0Jdm9pZCAqY21kOwogCWludCByZXQ7CiAKKyAg ICAgCWlmICh0aHJvdHRsZV91cykgeworCQlyZXQgPSB2bXdfd2FpdF9sYWcoZGV2X3ByaXYsICZk ZXZfcHJpdi0+Zmlmby5tYXJrZXJfcXVldWUsCisJCQkJICAgdGhyb3R0bGVfdXMpOworCQkKKwkJ aWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCQorCWtlcm5lbF9jb21tYW5kcyA9IHZtd19l eGVjYnVmX2NtZGJ1ZihkZXZfcHJpdiwgdXNlcl9jb21tYW5kcywKKwkJCQkJICAgICBrZXJuZWxf Y29tbWFuZHMsIGNvbW1hbmRfc2l6ZSwKKwkJCQkJICAgICAmaGVhZGVyKTsKKwlpZiAoSVNfRVJS KGtlcm5lbF9jb21tYW5kcykpCisJCXJldHVybiBQVFJfRVJSKGtlcm5lbF9jb21tYW5kcyk7CisK IAlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9wcml2LT5jbWRidWZfbXV0ZXgp OwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYg KHJldCkgeworCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gb3V0X2ZyZWVfaGVhZGVyOwor CX0KIAorCXN3X2NvbnRleHQtPmtlcm5lbCA9IGZhbHNlOwogCWlmIChrZXJuZWxfY29tbWFuZHMg PT0gTlVMTCkgewotCQlzd19jb250ZXh0LT5rZXJuZWwgPSBmYWxzZTsKLQogCQlyZXQgPSB2bXdf cmVzaXplX2NtZF9ib3VuY2Uoc3dfY29udGV4dCwgY29tbWFuZF9zaXplKTsKIAkJaWYgKHVubGlr ZWx5KHJldCAhPSAwKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKQEAgLTI0NTgsNyArMjU5Miw3IEBA IGludCB2bXdfZXhlY2J1Zl9wcm9jZXNzKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAogCQkJ Z290byBvdXRfdW5sb2NrOwogCQl9CiAJCWtlcm5lbF9jb21tYW5kcyA9IHN3X2NvbnRleHQtPmNt ZF9ib3VuY2U7Ci0JfSBlbHNlCisJfSBlbHNlIGlmICghaGVhZGVyKQogCQlzd19jb250ZXh0LT5r ZXJuZWwgPSB0cnVlOwogCiAJc3dfY29udGV4dC0+ZnAgPSB2bXdfZnByaXYoZmlsZV9wcml2KTsK QEAgLTI0NzgsNyArMjYxMiw2IEBAIGludCB2bXdfZXhlY2J1Zl9wcm9jZXNzKHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2LAogCQlzd19jb250ZXh0LT5yZXNfaHRfaW5pdGlhbGl6ZWQgPSB0cnVl OwogCX0KIAlJTklUX0xJU1RfSEVBRCgmc3dfY29udGV4dC0+c3RhZ2VkX2NtZF9yZXMpOwotCiAJ SU5JVF9MSVNUX0hFQUQoJnJlc291cmNlX2xpc3QpOwogCXJldCA9IHZtd19jbWRfY2hlY2tfYWxs KGRldl9wcml2LCBzd19jb250ZXh0LCBrZXJuZWxfY29tbWFuZHMsCiAJCQkJY29tbWFuZF9zaXpl KTsKQEAgLTI1MDIsMTQgKzI2MzUsNiBAQCBpbnQgdm13X2V4ZWNidWZfcHJvY2VzcyhzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91 dF9lcnI7CiAKLQlpZiAodGhyb3R0bGVfdXMpIHsKLQkJcmV0ID0gdm13X3dhaXRfbGFnKGRldl9w cml2LCAmZGV2X3ByaXYtPmZpZm8ubWFya2VyX3F1ZXVlLAotCQkJCSAgIHRocm90dGxlX3VzKTsK LQotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQkJZ290byBvdXRfZXJyOwotCX0KLQogCXJl dCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOwog CWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKIAkJcmV0ID0gLUVSRVNUQVJUU1lTOwpAQCAtMjUy MiwyMCArMjY0NywxNiBAQCBpbnQgdm13X2V4ZWNidWZfcHJvY2VzcyhzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiwKIAkJCWdvdG8gb3V0X3VubG9ja19iaW5kaW5nOwogCX0KIAotCWNtZCA9IHZt d19maWZvX3Jlc2VydmUoZGV2X3ByaXYsIGNvbW1hbmRfc2l6ZSk7Ci0JaWYgKHVubGlrZWx5KGNt ZCA9PSBOVUxMKSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCByZXNlcnZpbmcgZmlmbyBzcGFjZSBm b3IgY29tbWFuZHMuXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfdW5sb2NrX2Jp bmRpbmc7CisJaWYgKCFoZWFkZXIpIHsKKwkJcmV0ID0gdm13X2V4ZWNidWZfc3VibWl0X2ZpZm8o ZGV2X3ByaXYsIGtlcm5lbF9jb21tYW5kcywKKwkJCQkJICAgICAgY29tbWFuZF9zaXplLCBzd19j b250ZXh0KTsKKwl9IGVsc2UgeworCQlyZXQgPSB2bXdfZXhlY2J1Zl9zdWJtaXRfY21kYnVmKGRl dl9wcml2LCBoZWFkZXIsIGNvbW1hbmRfc2l6ZSwKKwkJCQkJCXN3X2NvbnRleHQpOworCQloZWFk ZXIgPSBOVUxMOwogCX0KLQotCXZtd19hcHBseV9yZWxvY2F0aW9ucyhzd19jb250ZXh0KTsKLQlt ZW1jcHkoY21kLCBrZXJuZWxfY29tbWFuZHMsIGNvbW1hbmRfc2l6ZSk7Ci0KLQl2bXdfcmVzb3Vy Y2VfcmVsb2NhdGlvbnNfYXBwbHkoY21kLCAmc3dfY29udGV4dC0+cmVzX3JlbG9jYXRpb25zKTsK LQl2bXdfcmVzb3VyY2VfcmVsb2NhdGlvbnNfZnJlZSgmc3dfY29udGV4dC0+cmVzX3JlbG9jYXRp b25zKTsKLQotCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgY29tbWFuZF9zaXplKTsKKwlpZiAo cmV0KQorCQlnb3RvIG91dF91bmxvY2tfYmluZGluZzsKIAogCXZtd19xdWVyeV9ib19zd2l0Y2hf Y29tbWl0KGRldl9wcml2LCBzd19jb250ZXh0KTsKIAlyZXQgPSB2bXdfZXhlY2J1Zl9mZW5jZV9j b21tYW5kcyhmaWxlX3ByaXYsIGRldl9wcml2LApAQCAtMjYxMCw2ICsyNzMxLDkgQEAgb3V0X3Vu bG9jazoKIAl2bXdfcmVzb3VyY2VfbGlzdF91bnJlZmVyZW5jZSgmcmVzb3VyY2VfbGlzdCk7CiAJ aWYgKHVubGlrZWx5KGVycm9yX3Jlc291cmNlICE9IE5VTEwpKQogCQl2bXdfcmVzb3VyY2VfdW5y ZWZlcmVuY2UoJmVycm9yX3Jlc291cmNlKTsKK291dF9mcmVlX2hlYWRlcjoKKwlpZiAoaGVhZGVy KQorCQl2bXdfY21kYnVmX2hlYWRlcl9mcmVlKGhlYWRlcik7CiAKIAlyZXR1cm4gcmV0OwogfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmIuYyBiL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X2ZiLmMKaW5kZXggZWNkYzhkOS4uZDBhM2JjZiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmIuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jCkBAIC0yNTcsNiArMjU3LDcgQEAgc3RhdGljIHZvaWQg dm13X2ZiX2RpcnR5X2ZsdXNoKHN0cnVjdCB2bXdfZmJfcGFyICpwYXIpCiAJY21kLT5ib2R5Lndp ZHRoID0gY3B1X3RvX2xlMzIodyk7CiAJY21kLT5ib2R5LmhlaWdodCA9IGNwdV90b19sZTMyKGgp OwogCXZtd19maWZvX2NvbW1pdCh2bXdfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKKwl2bXdfZmlmb19m bHVzaCh2bXdfcHJpdiwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCB2bXdfZmJfZGlydHlfbWFy ayhzdHJ1Y3Qgdm13X2ZiX3BhciAqcGFyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Zt d2dmeC92bXdnZnhfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5j CmluZGV4IGNkNWQ5ZjMuLjE4OTEwMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZv LmMKQEAgLTMxMCw3ICszMTAsOCBAQCBzdGF0aWMgaW50IHZtd19maWZvX3dhaXQoc3RydWN0IHZt d19wcml2YXRlICpkZXZfcHJpdiwKICAqIFJldHVybnM6CiAgKiAgIFBvaW50ZXIgdG8gdGhlIGZp Zm8sIG9yIG51bGwgb24gZXJyb3IgKHBvc3NpYmxlIGhhcmR3YXJlIGhhbmcpLgogICovCi12b2lk ICp2bXdfZmlmb19yZXNlcnZlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90 IGJ5dGVzKQorc3RhdGljIHZvaWQgKnZtd19sb2NhbF9maWZvX3Jlc2VydmUoc3RydWN0IHZtd19w cml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgdWludDMyX3QgYnl0ZXMpCiB7CiAJc3RydWN0IHZt d19maWZvX3N0YXRlICpmaWZvX3N0YXRlID0gJmRldl9wcml2LT5maWZvOwogCV9fbGUzMiBfX2lv bWVtICpmaWZvX21lbSA9IGRldl9wcml2LT5tbWlvX3ZpcnQ7CkBAIC0zODksOSArMzkwLDI5IEBA IHZvaWQgKnZtd19maWZvX3Jlc2VydmUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWlu dDMyX3QgYnl0ZXMpCiBvdXRfZXJyOgogCWZpZm9fc3RhdGUtPnJlc2VydmVkX3NpemUgPSAwOwog CW11dGV4X3VubG9jaygmZmlmb19zdGF0ZS0+Zmlmb19tdXRleCk7CisKIAlyZXR1cm4gTlVMTDsK IH0KIAordm9pZCAqdm13X2ZpZm9fcmVzZXJ2ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2 LCB1aW50MzJfdCBieXRlcykKK3sKKwl2b2lkICpyZXQ7CisKKwlpZiAoZGV2X3ByaXYtPmNtYW4p CisJCXJldCA9IHZtd19jbWRidWZfcmVzZXJ2ZShkZXZfcHJpdi0+Y21hbiwgYnl0ZXMsCisJCQkJ CSBTVkdBM0RfSU5WQUxJRF9JRCwgZmFsc2UsIE5VTEwpOworCWVsc2UKKwkJcmV0ID0gdm13X2xv Y2FsX2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgYnl0ZXMpOworCWlmIChJU19FUlJfT1JfTlVMTChy ZXQpKSB7CisJCURSTV9FUlJPUigiRmlmbyByZXNlcnZlIGZhaWx1cmUgb2YgJXUgYnl0ZXMuXG4i LAorCQkJICAodW5zaWduZWQpIGJ5dGVzKTsKKwkJZHVtcF9zdGFjaygpOworCQlyZXR1cm4gTlVM TDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCB2bXdfZmlmb19yZXNfY29w eShzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm9fc3RhdGUsCiAJCQkgICAgICBfX2xlMzIgX19p b21lbSAqZmlmb19tZW0sCiAJCQkgICAgICB1aW50MzJfdCBuZXh0X2NtZCwKQEAgLTQzNCw3ICs0 NTUsNyBAQCBzdGF0aWMgdm9pZCB2bXdfZmlmb19zbG93X2NvcHkoc3RydWN0IHZtd19maWZvX3N0 YXRlICpmaWZvX3N0YXRlLAogCX0KIH0KIAotdm9pZCB2bXdfZmlmb19jb21taXQoc3RydWN0IHZt d19wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgYnl0ZXMpCit2b2lkIHZtd19sb2NhbF9maWZv X2NvbW1pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCBieXRlcykKIHsK IAlzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm9fc3RhdGUgPSAmZGV2X3ByaXYtPmZpZm87CiAJ X19sZTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKQEAgLTQ4MCw2 ICs1MDEsNDYgQEAgdm9pZCB2bXdfZmlmb19jb21taXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiwgdWludDMyX3QgYnl0ZXMpCiAJbXV0ZXhfdW5sb2NrKCZmaWZvX3N0YXRlLT5maWZvX211 dGV4KTsKIH0KIAordm9pZCB2bXdfZmlmb19jb21taXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiwgdWludDMyX3QgYnl0ZXMpCit7CisJaWYgKGRldl9wcml2LT5jbWFuKQorCQl2bXdfY21k YnVmX2NvbW1pdChkZXZfcHJpdi0+Y21hbiwgYnl0ZXMsIE5VTEwsIGZhbHNlKTsKKwllbHNlCisJ CXZtd19sb2NhbF9maWZvX2NvbW1pdChkZXZfcHJpdiwgYnl0ZXMpOworfQorCisKKy8qKgorICog dm13X2ZpZm9fY29tbWl0X2ZsdXNoIC0gQ29tbWl0IGZpZm8gc3BhY2UgYW5kIGZsdXNoIGFueSBi dWZmZXJlZCBjb21tYW5kcy4KKyAqCisgKiBAZGV2X3ByaXY6IFBvaW50ZXIgdG8gZGV2aWNlIHBy aXZhdGUgc3RydWN0dXJlLgorICogQGJ5dGVzOiBOdW1iZXIgb2YgYnl0ZXMgdG8gY29tbWl0Lgor ICovCitzdGF0aWMgdm9pZCB2bXdfZmlmb19jb21taXRfZmx1c2goc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdiwgdWludDMyX3QgYnl0ZXMpCit7CisJaWYgKGRldl9wcml2LT5jbWFuKQorCQl2 bXdfY21kYnVmX2NvbW1pdChkZXZfcHJpdi0+Y21hbiwgYnl0ZXMsIE5VTEwsIHRydWUpOworCWVs c2UKKwkJdm13X2xvY2FsX2ZpZm9fY29tbWl0KGRldl9wcml2LCBieXRlcyk7Cit9CisKKy8qKgor ICogdm13X2ZpZm9fZmx1c2ggLSBGbHVzaCBhbnkgYnVmZmVyZWQgY29tbWFuZHMgYW5kIG1ha2Ug c3VyZSBjb21tYW5kIHByb2Nlc3NpbmcKKyAqIHN0YXJ0cy4KKyAqCisgKiBAZGV2X3ByaXY6IFBv aW50ZXIgdG8gZGV2aWNlIHByaXZhdGUgc3RydWN0dXJlLgorICogQGludGVycnVwdGlibGU6IFdo ZXRoZXIgdG8gd2FpdCBpbnRlcnJ1cHRpYmxlIGlmIGZ1bmN0aW9uIG5lZWRzIHRvIHNsZWVwLgor ICovCitpbnQgdm13X2ZpZm9fZmx1c2goc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgYm9v bCBpbnRlcnJ1cHRpYmxlKQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwlpZiAoZGV2X3ByaXYtPmNt YW4pCisJCXJldHVybiB2bXdfY21kYnVmX2N1cl9mbHVzaChkZXZfcHJpdi0+Y21hbiwgaW50ZXJy dXB0aWJsZSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwogaW50IHZtd19maWZvX3NlbmRfZmVu Y2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgKnNlcW5vKQogewogCXN0 cnVjdCB2bXdfZmlmb19zdGF0ZSAqZmlmb19zdGF0ZSA9ICZkZXZfcHJpdi0+ZmlmbzsKQEAgLTUx Nyw3ICs1NzgsNyBAQCBpbnQgdm13X2ZpZm9fc2VuZF9mZW5jZShzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2LCB1aW50MzJfdCAqc2Vxbm8pCiAJICAgICgodW5zaWduZWQgbG9uZylmbSArIHNp emVvZihfX2xlMzIpKTsKIAogCWlvd3JpdGUzMigqc2Vxbm8sICZjbWRfZmVuY2UtPmZlbmNlKTsK LQl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIGJ5dGVzKTsKKwl2bXdfZmlmb19jb21taXRfZmx1 c2goZGV2X3ByaXYsIGJ5dGVzKTsKIAkodm9pZCkgdm13X21hcmtlcl9wdXNoKCZmaWZvX3N0YXRl LT5tYXJrZXJfcXVldWUsICpzZXFubyk7CiAJdm13X3VwZGF0ZV9zZXFubyhkZXZfcHJpdiwgZmlm b19zdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ly cS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaXJxLmMKaW5kZXggOWZlOTgyNy4u ODc5NjRiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaXJxLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaXJxLmMKQEAgLTU2LDYgKzU2LDkg QEAgaXJxcmV0dXJuX3Qgdm13X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIAlpZiAo bWFza2VkX3N0YXR1cyAmIFNWR0FfSVJRRkxBR19GSUZPX1BST0dSRVNTKQogCQl3YWtlX3VwX2Fs bCgmZGV2X3ByaXYtPmZpZm9fcXVldWUpOwogCisJaWYgKG1hc2tlZF9zdGF0dXMgJiAoU1ZHQV9J UlFGTEFHX0NPTU1BTkRfQlVGRkVSIHwKKwkJCSAgICAgU1ZHQV9JUlFGTEFHX0VSUk9SKSkKKwkJ dm13X2NtZGJ1Zl90YXNrbGV0X3NjaGVkdWxlKGRldl9wcml2LT5jbWFuKTsKIAogCXJldHVybiBJ UlFfSEFORExFRDsKIH0KQEAgLTEzMSw4ICsxMzQsMTYgQEAgaW50IHZtd19mYWxsYmFja193YWl0 KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJICogQmxvY2sgY29tbWFuZCBzdWJtaXNz aW9uIHdoaWxlIHdhaXRpbmcgZm9yIGlkbGUuCiAJICovCiAKLQlpZiAoZmlmb19pZGxlKQorCWlm IChmaWZvX2lkbGUpIHsKIAkJZG93bl9yZWFkKCZmaWZvX3N0YXRlLT5yd3NlbSk7CisJCWlmIChk ZXZfcHJpdi0+Y21hbikgeworCQkJcmV0ID0gdm13X2NtZGJ1Zl9pZGxlKGRldl9wcml2LT5jbWFu LCBpbnRlcnJ1cHRpYmxlLAorCQkJCQkgICAgICAxMCpIWik7CisJCQlpZiAocmV0KQorCQkJCWdv dG8gb3V0X2VycjsKKwkJfQorCX0KKwogCXNpZ25hbF9zZXEgPSBhdG9taWNfcmVhZCgmZGV2X3By aXYtPm1hcmtlcl9zZXEpOwogCXJldCA9IDA7CiAKQEAgLTE3MSw2ICsxODIsNyBAQCBpbnQgdm13 X2ZhbGxiYWNrX3dhaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJaW93cml0ZTMy KHNpZ25hbF9zZXEsIGZpZm9fbWVtICsgU1ZHQV9GSUZPX0ZFTkNFKTsKIAl9CiAJd2FrZV91cF9h bGwoJmRldl9wcml2LT5mZW5jZV9xdWV1ZSk7CitvdXRfZXJyOgogCWlmIChmaWZvX2lkbGUpCiAJ CXVwX3JlYWQoJmZpZm9fc3RhdGUtPnJ3c2VtKTsKIApAQCAtMzE1LDMgKzMyNywzMCBAQCB2b2lk IHZtd19pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJc3RhdHVzID0gaW5s KGRldl9wcml2LT5pb19zdGFydCArIFZNV0dGWF9JUlFTVEFUVVNfUE9SVCk7CiAJb3V0bChzdGF0 dXMsIGRldl9wcml2LT5pb19zdGFydCArIFZNV0dGWF9JUlFTVEFUVVNfUE9SVCk7CiB9CisKK3Zv aWQgdm13X2dlbmVyaWNfd2FpdGVyX2FkZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAor CQkJICAgIHUzMiBmbGFnLCBpbnQgKndhaXRlcl9jb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGly cV9mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycV9m bGFncyk7CisJaWYgKCgqd2FpdGVyX2NvdW50KSsrID09IDApIHsKKwkJb3V0bChmbGFnLCBkZXZf cHJpdi0+aW9fc3RhcnQgKyBWTVdHRlhfSVJRU1RBVFVTX1BPUlQpOworCQlkZXZfcHJpdi0+aXJx X21hc2sgfD0gZmxhZzsKKwkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19JUlFNQVNLLCBk ZXZfcHJpdi0+aXJxX21hc2spOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJp di0+aXJxX2xvY2ssIGlycV9mbGFncyk7Cit9CisKK3ZvaWQgdm13X2dlbmVyaWNfd2FpdGVyX3Jl bW92ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgIHUzMiBmbGFnLCBp bnQgKndhaXRlcl9jb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCXNwaW5f bG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycV9mbGFncyk7CisJaWYgKC0tKCp3 YWl0ZXJfY291bnQpID09IDApIHsKKwkJZGV2X3ByaXYtPmlycV9tYXNrICY9IH5mbGFnOworCQl2 bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssIGRldl9wcml2LT5pcnFfbWFzayk7 CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2Zs YWdzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5j IGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKaW5kZXggMDdjZGE4Yy4uYjU2 MzJjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAgLTYzMSw2ICs2MzEsNyBA QCBzdGF0aWMgaW50IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlX2RpcnR5KHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZyYW1lYnVmZmVyLAogCQkJCSAgIGZsYWdzLCBjb2xvciwKIAkJCQkgICBjbGlw cywgbnVtX2NsaXBzLCBpbmMsIE5VTEwpOwogCisJdm13X2ZpZm9fZmx1c2goZGV2X3ByaXYsIGZh bHNlKTsKIAl0dG1fcmVhZF91bmxvY2soJmRldl9wcml2LT5yZXNlcnZhdGlvbl9zZW0pOwogCiAJ ZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXZfcHJpdi0+ZGV2KTsKQEAgLTk4Nyw2ICs5ODgsNyBA QCBzdGF0aWMgaW50IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWZfZGlydHkoc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZnJhbWVidWZmZXIsCiAJCQkJCSAgY2xpcHMsIG51bV9jbGlwcywgaW5jcmVtZW50 LCBOVUxMKTsKIAl9CiAKKwl2bXdfZmlmb19mbHVzaChkZXZfcHJpdiwgZmFsc2UpOwogCXR0bV9y ZWFkX3VubG9jaygmZGV2X3ByaXYtPnJlc2VydmF0aW9uX3NlbSk7CiAKIAlkcm1fbW9kZXNldF91 bmxvY2tfYWxsKGRldl9wcml2LT5kZXYpOwpAQCAtMTM0Nyw2ICsxMzQ5LDggQEAgaW50IHZtd19r bXNfcHJlc2VudChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJYnJlYWs7CiAJfQog CisJdm13X2ZpZm9fZmx1c2goZGV2X3ByaXYsIGZhbHNlKTsKKwogCWtmcmVlKGNtZCk7CiBvdXRf ZnJlZV90bXA6CiAJa2ZyZWUodG1wKTsKLS0gCjIuMS4wCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK