From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4089CC4CED0 for ; Thu, 19 Sep 2019 13:53:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B7C4F21D7C for ; Thu, 19 Sep 2019 13:53:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="HeDsvxzV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390582AbfISNxH (ORCPT ); Thu, 19 Sep 2019 09:53:07 -0400 Received: from mail-eopbgr700050.outbound.protection.outlook.com ([40.107.70.50]:52064 "EHLO NAM04-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2403882AbfISNxF (ORCPT ); Thu, 19 Sep 2019 09:53:05 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SRZmqYSBPy3kRYslUhGzsYl2xA5z/Q6jMZ0S6TB/rzXbWUx92fxgH1794CyOxa90vMeYQs1aZGLcYG4cwyVNlm3j30OTKoT338Fmkpry3axnqd1xi67VkjmFs0j5t4oDO6uvEgfYXREwHOqw1XGhetEJHlT6+hGSkB1Fj8unIPI/dvNEfKl0NtEDGWphITqKswyw7Dh1K2eZibOH0U0frI4qzkV5o/vBZ+vx9+OWcFxhda45ugX+DzKgQPbWmFiJLffb5Dy8nE0zoqRzSTPDZcnJAhpvHZTiulJeJ1ZtT9JleLybfMu7kEYmZyQtqQg4jFk781QcxvBxFenwxjPwXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qLPCtyeQ3Ce9+bTFdRT+nGzSIO23Mgt5e8LGUu8WgW4=; b=C1aAkOEhNxjE+0qXCGFsnzVMIs+vtR/LocGq1udgMElSTrCTbMs2n1MUPFuTQsbxs57I/PzXqoWFyrLFRG8SkQcHY8nRmMdxyv6E7poaXjR2tSsszPttgxtm6nVS7rgh3X1CfpFh+oK3Ho5g5JJp0irIu1gEpqeblbl1vsMbDKOGLyc/icogB68U+vUYnsvr7UzRo9X1Y0EP3JpK5EACCLwPKkSDr2Sbn763o8D9G8mFRqqGieqe6DCtORl4ggg+H+tgA3NqupjmROqzOOYbdOyInQzfkK6Ebye9428EQ6003dWbLuOGmFNoAAcJq0VooUm0CWxZ60oM1Xqb5f8S8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qLPCtyeQ3Ce9+bTFdRT+nGzSIO23Mgt5e8LGUu8WgW4=; b=HeDsvxzVgakK6iOkWjhaejZyDtimT0MA3BoIbB6JQTERgHPmcFXut8C6lJVagnmdUtrQ+K9S1+mvsqfTy9XbtF85VXbi+6EM2Pk1wUCN+L0h04HHWq3lH3wU8mjF/gtZgjzkgOgljd1n4KmObo+FcKvz4/exSOrPyUdbJte+pok= Received: from MN2PR11MB4063.namprd11.prod.outlook.com (20.179.149.217) by MN2PR11MB4400.namprd11.prod.outlook.com (52.135.37.204) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.20; Thu, 19 Sep 2019 13:52:43 +0000 Received: from MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8]) by MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8%3]) with mapi id 15.20.2263.023; Thu, 19 Sep 2019 13:52:43 +0000 From: Jerome Pouiller To: "devel@driverdev.osuosl.org" , "linux-wireless@vger.kernel.org" CC: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , David Le Goff , Jerome Pouiller Subject: [PATCH v2 20/20] staging: wfx: implement the rest of mac80211 API Thread-Topic: [PATCH v2 20/20] staging: wfx: implement the rest of mac80211 API Thread-Index: AQHVbvGBHC/SOY0//E2Q3W2jXCD27w== Date: Thu, 19 Sep 2019 13:52:42 +0000 Message-ID: <20190919135220.30663-21-Jerome.Pouiller@silabs.com> References: <20190919135220.30663-1-Jerome.Pouiller@silabs.com> In-Reply-To: <20190919135220.30663-1-Jerome.Pouiller@silabs.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Jerome.Pouiller@silabs.com; x-originating-ip: [37.71.187.125] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: dd9dd192-c658-480b-101d-08d73d08a4f4 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);SRVR:MN2PR11MB4400; x-ms-traffictypediagnostic: MN2PR11MB4400: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:117; x-forefront-prvs: 016572D96D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(1496009)(376002)(39850400004)(136003)(366004)(396003)(346002)(189003)(199004)(3846002)(76176011)(8676002)(76116006)(476003)(25786009)(2616005)(6116002)(54906003)(71190400001)(6436002)(102836004)(6486002)(36756003)(186003)(71200400001)(26005)(305945005)(6512007)(99286004)(6506007)(91956017)(7736002)(446003)(8936002)(256004)(81156014)(14444005)(2906002)(66066001)(30864003)(107886003)(4326008)(86362001)(14454004)(478600001)(64756008)(81166006)(2501003)(486006)(66574012)(316002)(66946007)(66446008)(66556008)(5660300002)(11346002)(66476007)(1076003)(110136005)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:MN2PR11MB4400;H:MN2PR11MB4063.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: silabs.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: APjr92Dvo53QZewuIIGpIDpK38vVm9KJmidnmml7V9NGivnZDqx7+CdOigKf2ucy8gDrzABfS3E9Vo27lZbDPDxBfkHBgxXBh9NF1OO4pJAgrY3oWz/AyjGfYxI64hEX5Jki1RUkdfZRxYqH6n/RIO8C89Z28PD9TKJiTC8yNVSi9rq2NUH+9dg7c5LIKPEWQvnDvXcy+Z/qRG+Rly/SCYZ8S7idmwuNI0U0o5icflGS6A1nsszh3Afte/Wb7KuhYAsl1RqldyWJGHQBOjQw1y96vO8kgRhn6gRJ8kRryGNBKJLkqw0aHn3n2eAeb53zTqCAgnUevFNXJFKEOq3iPo0Nls08c5Mfo4GjbqSXgOkWPVysGWUXg51FYS+rBRqHGUt4AEiebVaf6/lQMXus1+4huJYqV046qGqkycF2A6k= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: dd9dd192-c658-480b-101d-08d73d08a4f4 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 13:52:42.1941 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: GfBGraXZ6OATGew3zq7VVI+vdvAm3VpMH5/tVc2r+m6gvq8Z8nDKcY/UHy00OtYE9M5uSW1koVZYSlrjEu4rsg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4400 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPg0KDQpT aWduZWQtb2ZmLWJ5OiBKw6lyw7RtZSBQb3VpbGxlciA8amVyb21lLnBvdWlsbGVyQHNpbGFicy5j b20+DQotLS0NCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguYyB8ICAgMjYgKw0KIGRyaXZl cnMvc3RhZ2luZy93ZngvZGF0YV90eC5jIHwgICAxNiArDQogZHJpdmVycy9zdGFnaW5nL3dmeC9k ZWJ1Zy5jICAgfCAgICAyICsNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9yeC5jICB8ICAgNTMg KysNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5jICB8ICAgIDEgKw0KIGRyaXZlcnMvc3Rh Z2luZy93ZngvbWFpbi5jICAgIHwgIDEzMyArKysNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVl LmMgICB8ICAgODAgKysNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYyAgICB8ICAgNDAgKw0K IGRyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMgICAgIHwgMTQ0MyArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0NCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oICAgICB8ICAgNjUgKysN CiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oICAgICB8ICAgNTEgKysNCiAxMSBmaWxlcyBjaGFu Z2VkLCAxOTA3IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV9y eC5jDQppbmRleCAzYjMxMTdiMmVkYWMuLjNhNzkwODljODUwMSAxMDA2NDQNCi0tLSBhL2RyaXZl cnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFf cnguYw0KQEAgLTIxLDYgKzIxLDggQEAgc3RhdGljIGludCB3ZnhfaGFuZGxlX3BzcG9sbChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCiAJdTMyIHBzcG9sbF9tYXNr ID0gMDsNCiAJaW50IGk7DQogDQorCWlmICh3dmlmLT5zdGF0ZSAhPSBXRlhfU1RBVEVfQVApDQor CQlyZXR1cm4gMTsNCiAJaWYgKCFldGhlcl9hZGRyX2VxdWFsKHd2aWYtPnZpZi0+YWRkciwgcHNw b2xsLT5ic3NpZCkpDQogCQlyZXR1cm4gMTsNCiANCkBAIC0xNjIsNiArMTY0LDMwIEBAIHZvaWQg d2Z4X3J4X2NiKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgaGlmX2luZF9yeCAqYXJnLCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiDQogCSAgICAmJiBhcmctPnJ4X2ZsYWdzLm1hdGNoX3VjX2FkZHIN CiAJICAgICYmIG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfQkFDSykN CiAJCWdvdG8gZHJvcDsNCisJaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZnJhbWUtPmZyYW1lX2Nv bnRyb2wpDQorCSAgICAmJiAhYXJnLT5zdGF0dXMgJiYgd3ZpZi0+dmlmDQorCSAgICAmJiBldGhl cl9hZGRyX2VxdWFsKGllZWU4MDIxMV9nZXRfU0EoZnJhbWUpLCB3dmlmLT52aWYtPmJzc19jb25m LmJzc2lkKSkgew0KKwkJY29uc3QgdTggKnRpbV9pZTsNCisJCXU4ICppZXMgPSBtZ210LT51LmJl YWNvbi52YXJpYWJsZTsNCisJCXNpemVfdCBpZXNfbGVuID0gc2tiLT5sZW4gLSAoaWVzIC0gc2ti LT5kYXRhKTsNCisNCisJCXRpbV9pZSA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfVElNLCBp ZXMsIGllc19sZW4pOw0KKwkJaWYgKHRpbV9pZSkgew0KKwkJCXN0cnVjdCBpZWVlODAyMTFfdGlt X2llICp0aW0gPSAoc3RydWN0IGllZWU4MDIxMV90aW1faWUgKikgJnRpbV9pZVsyXTsNCisNCisJ CQlpZiAod3ZpZi0+ZHRpbV9wZXJpb2QgIT0gdGltLT5kdGltX3BlcmlvZCkgew0KKwkJCQl3dmlm LT5kdGltX3BlcmlvZCA9IHRpbS0+ZHRpbV9wZXJpb2Q7DQorCQkJCXNjaGVkdWxlX3dvcmsoJnd2 aWYtPnNldF9iZWFjb25fd2FrZXVwX3BlcmlvZF93b3JrKTsNCisJCQl9DQorCQl9DQorDQorCQkv KiBEaXNhYmxlIGJlYWNvbiBmaWx0ZXIgb25jZSB3ZSdyZSBhc3NvY2lhdGVkLi4uICovDQorCQlp ZiAod3ZpZi0+ZGlzYWJsZV9iZWFjb25fZmlsdGVyICYmDQorCQkgICAgKHd2aWYtPnZpZi0+YnNz X2NvbmYuYXNzb2MgfHwgd3ZpZi0+dmlmLT5ic3NfY29uZi5pYnNzX2pvaW5lZCkpIHsNCisJCQl3 dmlmLT5kaXNhYmxlX2JlYWNvbl9maWx0ZXIgPSBmYWxzZTsNCisJCQlzY2hlZHVsZV93b3JrKCZ3 dmlmLT51cGRhdGVfZmlsdGVyaW5nX3dvcmspOw0KKwkJfQ0KKwl9DQogDQogCWlmIChlYXJseV9k YXRhKSB7DQogCQlzcGluX2xvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9k YXRhX3R4LmMNCmluZGV4IDIxN2QzYzI3MDcwNi4uN2YyNzk5ZmJkYWZlIDEwMDY0NA0KLS0tIGEv ZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93Zngv ZGF0YV90eC5jDQpAQCAtMTAsNiArMTAsNyBAQA0KICNpbmNsdWRlICJkYXRhX3R4LmgiDQogI2lu Y2x1ZGUgIndmeC5oIg0KICNpbmNsdWRlICJiaC5oIg0KKyNpbmNsdWRlICJzdGEuaCINCiAjaW5j bHVkZSAicXVldWUuaCINCiAjaW5jbHVkZSAiZGVidWcuaCINCiAjaW5jbHVkZSAidHJhY2VzLmgi DQpAQCAtMzU5LDYgKzM2MCw5IEBAIHZvaWQgd2Z4X2xpbmtfaWRfZ2Nfd29yayhzdHJ1Y3Qgd29y a19zdHJ1Y3QgKndvcmspDQogCXUzMiBtYXNrOw0KIAlpbnQgaTsNCiANCisJaWYgKHd2aWYtPnN0 YXRlICE9IFdGWF9TVEFURV9BUCkNCisJCXJldHVybjsNCisNCiAJd2Z4X3R4X2xvY2tfZmx1c2go d3ZpZi0+d2Rldik7DQogCXNwaW5fbG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQogCWZv ciAoaSA9IDA7IGkgPCBXRlhfTUFYX1NUQV9JTl9BUF9NT0RFOyArK2kpIHsNCkBAIC03MjksMTQg KzczMywyNiBAQCB2b2lkIHdmeF90eF9jb25maXJtX2NiKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBz dHJ1Y3QgaGlmX2NuZl90eCAqYXJnKQ0KIAltZW1zZXQodHhfaW5mby0+cGFkLCAwLCBzaXplb2Yo dHhfaW5mby0+cGFkKSk7DQogDQogCWlmICghYXJnLT5zdGF0dXMpIHsNCisJCWlmICh3dmlmLT5i c3NfbG9zc19zdGF0ZSAmJiBhcmctPnBhY2tldF9pZCA9PSB3dmlmLT5ic3NfbG9zc19jb25maXJt X2lkKQ0KKwkJCXdmeF9jcW1fYnNzbG9zc19zbSh3dmlmLCAwLCAxLCAwKTsNCiAJCXR4X2luZm8t PnN0YXR1cy50eF90aW1lID0gYXJnLT5tZWRpYV9kZWxheSAtIGFyZy0+dHhfcXVldWVfZGVsYXk7 DQogCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykNCiAJCQl0 eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9OT0FDS19UUkFOU01JVFRFRDsNCiAJ CWVsc2UNCiAJCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7DQogCX0g ZWxzZSBpZiAoYXJnLT5zdGF0dXMgPT0gSElGX1JFUVVFVUUpIHsNCisJCS8qICJSRVFVRVVFIiBt ZWFucyAiaW1wbGljaXQgc3VzcGVuZCIgKi8NCisJCXN0cnVjdCBoaWZfaW5kX3N1c3BlbmRfcmVz dW1lX3R4IHN1c3BlbmQgPSB7DQorCQkJLnN1c3BlbmRfcmVzdW1lX2ZsYWdzLnJlc3VtZSA9IDAs DQorCQkJLnN1c3BlbmRfcmVzdW1lX2ZsYWdzLmJjX21jX29ubHkgPSAxLA0KKwkJfTsNCisNCiAJ CVdBUk4oIWFyZy0+dHhfcmVzdWx0X2ZsYWdzLnJlcXVldWUsICJpbmNvaGVyZW50IHN0YXR1cyBh bmQgcmVzdWx0X2ZsYWdzIik7DQorCQl3Znhfc3VzcGVuZF9yZXN1bWUod3ZpZiwgJnN1c3BlbmQp Ow0KIAkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQ7DQor CX0gZWxzZSB7DQorCQlpZiAod3ZpZi0+YnNzX2xvc3Nfc3RhdGUgJiYgYXJnLT5wYWNrZXRfaWQg PT0gd3ZpZi0+YnNzX2xvc3NfY29uZmlybV9pZCkNCisJCQl3ZnhfY3FtX2Jzc2xvc3Nfc20od3Zp ZiwgMCwgMCwgMSk7DQogCX0NCiAJd2Z4X3BlbmRpbmdfcmVtb3ZlKHd2aWYtPndkZXYsIHNrYik7 DQogfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvZGVidWcuYyBiL2RyaXZlcnMv c3RhZ2luZy93ZngvZGVidWcuYw0KaW5kZXggMWUyM2JiNWJkZTNlLi4zMjYxYjI2N2MzODUgMTAw NjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVnLmMNCisrKyBiL2RyaXZlcnMvc3Rh Z2luZy93ZngvZGVidWcuYw0KQEAgLTExLDcgKzExLDkgQEANCiANCiAjaW5jbHVkZSAiZGVidWcu aCINCiAjaW5jbHVkZSAid2Z4LmgiDQorI2luY2x1ZGUgInN0YS5oIg0KICNpbmNsdWRlICJtYWlu LmgiDQorI2luY2x1ZGUgImhpZl90eC5oIg0KICNpbmNsdWRlICJoaWZfdHhfbWliLmgiDQogDQog I2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L3dmeC9oaWZfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMNCmluZGV4IGQzODZm YWIwYTkwZi4uNTJkYjAyZDNhYTQxIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9o aWZfcnguYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguYw0KQEAgLTEyLDYgKzEy LDggQEANCiAjaW5jbHVkZSAiaGlmX3J4LmgiDQogI2luY2x1ZGUgIndmeC5oIg0KICNpbmNsdWRl ICJzY2FuLmgiDQorI2luY2x1ZGUgImJoLmgiDQorI2luY2x1ZGUgInN0YS5oIg0KICNpbmNsdWRl ICJkYXRhX3J4LmgiDQogI2luY2x1ZGUgInNlY3VyZV9saW5rLmgiDQogI2luY2x1ZGUgImhpZl9h cGlfY21kLmgiDQpAQCAtMTQ0LDYgKzE0Niw0MyBAQCBzdGF0aWMgaW50IGhpZl9yZWNlaXZlX2lu ZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBoaWZfbXNnICpoaWYsIHZvaQ0K IAlyZXR1cm4gMDsNCiB9DQogDQorc3RhdGljIGludCBoaWZfZXZlbnRfaW5kaWNhdGlvbihzdHJ1 Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKmhpZiwgdm9pZCAqYnVmKQ0KK3sNCisJ c3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2Up Ow0KKwlzdHJ1Y3QgaGlmX2luZF9ldmVudCAqYm9keSA9IGJ1ZjsNCisJc3RydWN0IHdmeF9oaWZf ZXZlbnQgKmV2ZW50Ow0KKwlpbnQgZmlyc3Q7DQorDQorCVdBUk5fT04oIXd2aWYpOw0KKwlpZiAo IXd2aWYpDQorCQlyZXR1cm4gMDsNCisNCisJZXZlbnQgPSBremFsbG9jKHNpemVvZigqZXZlbnQp LCBHRlBfS0VSTkVMKTsNCisJaWYgKCFldmVudCkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlt ZW1jcHkoJmV2ZW50LT5ldnQsIGJvZHksIHNpemVvZihzdHJ1Y3QgaGlmX2luZF9ldmVudCkpOw0K KwlzcGluX2xvY2soJnd2aWYtPmV2ZW50X3F1ZXVlX2xvY2spOw0KKwlmaXJzdCA9IGxpc3RfZW1w dHkoJnd2aWYtPmV2ZW50X3F1ZXVlKTsNCisJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmxpbmssICZ3 dmlmLT5ldmVudF9xdWV1ZSk7DQorCXNwaW5fdW5sb2NrKCZ3dmlmLT5ldmVudF9xdWV1ZV9sb2Nr KTsNCisNCisJaWYgKGZpcnN0KQ0KKwkJc2NoZWR1bGVfd29yaygmd3ZpZi0+ZXZlbnRfaGFuZGxl cl93b3JrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaGlmX3BtX21vZGVf Y29tcGxldGVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cg KmhpZiwgdm9pZCAqYnVmKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2 aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOw0KKw0KKwlXQVJOX09OKCF3dmlmKTsNCisJY29tcGxl dGUoJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K IHN0YXRpYyBpbnQgaGlmX3NjYW5fY29tcGxldGVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAq d2Rldiwgc3RydWN0IGhpZl9tc2cgKmhpZiwgdm9pZCAqYnVmKQ0KIHsNCiAJc3RydWN0IHdmeF92 aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOw0KQEAgLTE2NSw2 ICsyMDQsMTcgQEAgc3RhdGljIGludCBoaWZfam9pbl9jb21wbGV0ZV9pbmRpY2F0aW9uKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAqaGkNCiAJcmV0dXJuIDA7DQogfQ0KIA0K K3N0YXRpYyBpbnQgaGlmX3N1c3BlbmRfcmVzdW1lX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYg KndkZXYsIHN0cnVjdCBoaWZfbXNnICpoaWYsIHZvaWQgKmJ1ZikNCit7DQorCXN0cnVjdCB3Znhf dmlmICp3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsNCisJc3RydWN0 IGhpZl9pbmRfc3VzcGVuZF9yZXN1bWVfdHggKmJvZHkgPSBidWY7DQorDQorCVdBUk5fT04oIXd2 aWYpOw0KKwl3Znhfc3VzcGVuZF9yZXN1bWUod3ZpZiwgYm9keSk7DQorDQorCXJldHVybiAwOw0K K30NCisNCiBzdGF0aWMgaW50IGhpZl9lcnJvcl9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2LCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCB2b2lkICpidWYpDQogew0KIAlzdHJ1Y3QgaGlmX2lu ZF9lcnJvciAqYm9keSA9IGJ1ZjsNCkBAIC0yNDIsOCArMjkyLDExIEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgew0KIAl7IEhJRl9JTkRfSURfU1RBUlRVUCwgICAgICAgICAgICAgIGhpZl9zdGFydHVw X2luZGljYXRpb24gfSwNCiAJeyBISUZfSU5EX0lEX1dBS0VVUCwgICAgICAgICAgICAgICBoaWZf d2FrZXVwX2luZGljYXRpb24gfSwNCiAJeyBISUZfSU5EX0lEX0pPSU5fQ09NUExFVEUsICAgICAg ICBoaWZfam9pbl9jb21wbGV0ZV9pbmRpY2F0aW9uIH0sDQorCXsgSElGX0lORF9JRF9TRVRfUE1f TU9ERV9DTVBMLCAgICAgaGlmX3BtX21vZGVfY29tcGxldGVfaW5kaWNhdGlvbiB9LA0KIAl7IEhJ Rl9JTkRfSURfU0NBTl9DTVBMLCAgICAgICAgICAgIGhpZl9zY2FuX2NvbXBsZXRlX2luZGljYXRp b24gfSwNCisJeyBISUZfSU5EX0lEX1NVU1BFTkRfUkVTVU1FX1RYLCAgICBoaWZfc3VzcGVuZF9y ZXN1bWVfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfU0xfRVhDSEFOR0VfUFVCX0tFWVMs IGhpZl9rZXlzX2luZGljYXRpb24gfSwNCisJeyBISUZfSU5EX0lEX0VWRU5ULCAgICAgICAgICAg ICAgICBoaWZfZXZlbnRfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfR0VORVJJQywgICAg ICAgICAgICAgIGhpZl9nZW5lcmljX2luZGljYXRpb24gfSwNCiAJeyBISUZfSU5EX0lEX0VSUk9S LCAgICAgICAgICAgICAgICBoaWZfZXJyb3JfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURf RVhDRVBUSU9OLCAgICAgICAgICAgIGhpZl9leGNlcHRpb25faW5kaWNhdGlvbiB9LA0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4 L2hpZl90eC5jDQppbmRleCAxNTdhYjE3N2I3M2YuLjJkNDAyMjVhMGZjZSAxMDA2NDQNCi0tLSBh L2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmMNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93Zngv aGlmX3R4LmMNCkBAIC0xNCw2ICsxNCw3IEBADQogI2luY2x1ZGUgImJoLmgiDQogI2luY2x1ZGUg Imh3aW8uaCINCiAjaW5jbHVkZSAiZGVidWcuaCINCisjaW5jbHVkZSAic3RhLmgiDQogDQogdm9p ZCB3ZnhfaW5pdF9oaWZfY21kKHN0cnVjdCB3ZnhfaGlmX2NtZCAqaGlmX2NtZCkNCiB7DQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4 L21haW4uYw0KaW5kZXggZTdiYmEyNGFhZTBiLi5mZTlhODk3MDM4OTcgMTAwNjQ0DQotLS0gYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9tYWlu LmMNCkBAIC01MCwxNCArNTAsMTEyIEBAIHN0YXRpYyBjaGFyICpzbGtfa2V5Ow0KIG1vZHVsZV9w YXJhbShzbGtfa2V5LCBjaGFycCwgMDYwMCk7DQogTU9EVUxFX1BBUk1fREVTQyhzbGtfa2V5LCAi c2VjcmV0IGtleSBmb3Igc2VjdXJlIGxpbmsgKGV4cGVjdCA2NCBoZXhkZWNpbWFsIGRpZ2l0cyku Iik7DQogDQorI2RlZmluZSBSQVRFVEFCX0VOVChfcmF0ZSwgX3JhdGVpZCwgX2ZsYWdzKSB7IFwN CisJLmJpdHJhdGUgID0gKF9yYXRlKSwgICBcDQorCS5od192YWx1ZSA9IChfcmF0ZWlkKSwgXA0K KwkuZmxhZ3MgICAgPSAoX2ZsYWdzKSwgIFwNCit9DQorDQorc3RhdGljIHN0cnVjdCBpZWVlODAy MTFfcmF0ZSB3ZnhfcmF0ZXNbXSA9IHsNCisJUkFURVRBQl9FTlQoMTAsICAwLCAgMCksDQorCVJB VEVUQUJfRU5UKDIwLCAgMSwgIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwNCisJUkFU RVRBQl9FTlQoNTUsICAyLCAgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLA0KKwlSQVRF VEFCX0VOVCgxMTAsIDMsICBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksDQorCVJBVEVU QUJfRU5UKDYwLCAgNiwgIDApLA0KKwlSQVRFVEFCX0VOVCg5MCwgIDcsICAwKSwNCisJUkFURVRB Ql9FTlQoMTIwLCA4LCAgMCksDQorCVJBVEVUQUJfRU5UKDE4MCwgOSwgIDApLA0KKwlSQVRFVEFC X0VOVCgyNDAsIDEwLCAwKSwNCisJUkFURVRBQl9FTlQoMzYwLCAxMSwgMCksDQorCVJBVEVUQUJf RU5UKDQ4MCwgMTIsIDApLA0KKwlSQVRFVEFCX0VOVCg1NDAsIDEzLCAwKSwNCit9Ow0KKw0KKyNk ZWZpbmUgQ0hBTjJHKF9jaGFubmVsLCBfZnJlcSwgX2ZsYWdzKSB7IFwNCisJLmJhbmQgPSBOTDgw MjExX0JBTkRfMkdIWiwgXA0KKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCAgICBcDQorCS5od192 YWx1ZSA9IChfY2hhbm5lbCksICAgIFwNCisJLmZsYWdzID0gKF9mbGFncyksICAgICAgICAgXA0K KwkubWF4X2FudGVubmFfZ2FpbiA9IDAsICAgICBcDQorCS5tYXhfcG93ZXIgPSAzMCwgICAgICAg ICAgIFwNCit9DQorDQorc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCB3ZnhfMmdoel9j aGFudGFibGVbXSA9IHsNCisJQ0hBTjJHKDEsICAyNDEyLCAwKSwNCisJQ0hBTjJHKDIsICAyNDE3 LCAwKSwNCisJQ0hBTjJHKDMsICAyNDIyLCAwKSwNCisJQ0hBTjJHKDQsICAyNDI3LCAwKSwNCisJ Q0hBTjJHKDUsICAyNDMyLCAwKSwNCisJQ0hBTjJHKDYsICAyNDM3LCAwKSwNCisJQ0hBTjJHKDcs ICAyNDQyLCAwKSwNCisJQ0hBTjJHKDgsICAyNDQ3LCAwKSwNCisJQ0hBTjJHKDksICAyNDUyLCAw KSwNCisJQ0hBTjJHKDEwLCAyNDU3LCAwKSwNCisJQ0hBTjJHKDExLCAyNDYyLCAwKSwNCisJQ0hB TjJHKDEyLCAyNDY3LCAwKSwNCisJQ0hBTjJHKDEzLCAyNDcyLCAwKSwNCisJQ0hBTjJHKDE0LCAy NDg0LCAwKSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRl ZF9iYW5kIHdmeF9iYW5kXzJnaHogPSB7DQorCS5jaGFubmVscyA9IHdmeF8yZ2h6X2NoYW50YWJs ZSwNCisJLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHdmeF8yZ2h6X2NoYW50YWJsZSksDQorCS5i aXRyYXRlcyA9IHdmeF9yYXRlcywNCisJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHdmeF9yYXRl cyksDQorCS5odF9jYXAgPSB7DQorCQkvLyBSZWNlaXZlIGNhcHMNCisJCS5jYXAgPSBJRUVFODAy MTFfSFRfQ0FQX0dSTl9GTEQgfCBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCB8DQorCQkgICAgICAg SUVFRTgwMjExX0hUX0NBUF9NQVhfQU1TRFUgfCAoMSA8PCBJRUVFODAyMTFfSFRfQ0FQX1JYX1NU QkNfU0hJRlQpLA0KKwkJLmh0X3N1cHBvcnRlZCA9IDEsDQorCQkuYW1wZHVfZmFjdG9yID0gSUVF RTgwMjExX0hUX01BWF9BTVBEVV8xNkssDQorCQkuYW1wZHVfZGVuc2l0eSA9IElFRUU4MDIxMV9I VF9NUERVX0RFTlNJVFlfTk9ORSwNCisJCS5tY3MgPSB7DQorCQkJLnJ4X21hc2sgPSB7IDB4RkYg fSwgLy8gTUNTMCB0byBNQ1M3DQorCQkJLnJ4X2hpZ2hlc3QgPSA2NSwNCisJCQkudHhfcGFyYW1z ID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVELA0KKwkJfSwNCisJfSwNCit9Ow0KKw0KK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IHdkZXZfaWZhY2VfbGltaXRz W10gPSB7DQorCXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9O KSB9LA0KKwl7IC5tYXggPSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIH0sDQor fTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiB3 ZnhfaWZhY2VfY29tYmluYXRpb25zW10gPSB7DQorCXsNCisJCS5udW1fZGlmZmVyZW50X2NoYW5u ZWxzID0gMiwNCisJCS5tYXhfaW50ZXJmYWNlcyA9IDIsDQorCQkubGltaXRzID0gd2Rldl9pZmFj ZV9saW1pdHMsDQorCQkubl9saW1pdHMgPSBBUlJBWV9TSVpFKHdkZXZfaWZhY2VfbGltaXRzKSwN CisJfQ0KK307DQorDQogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHdmeF9vcHMg PSB7DQogCS5zdGFydAkJCT0gd2Z4X3N0YXJ0LA0KIAkuc3RvcAkJCT0gd2Z4X3N0b3AsDQogCS5h ZGRfaW50ZXJmYWNlCQk9IHdmeF9hZGRfaW50ZXJmYWNlLA0KIAkucmVtb3ZlX2ludGVyZmFjZQk9 IHdmeF9yZW1vdmVfaW50ZXJmYWNlLA0KKwkuY29uZmlnCQkJPSB3ZnhfY29uZmlnLA0KIAkudHgJ CQk9IHdmeF90eCwNCisJLmNvbmZfdHgJCT0gd2Z4X2NvbmZfdHgsDQogCS5od19zY2FuCQk9IHdm eF9od19zY2FuLA0KKwkuc3RhX2FkZAkJPSB3Znhfc3RhX2FkZCwNCisJLnN0YV9yZW1vdmUJCT0g d2Z4X3N0YV9yZW1vdmUsDQorCS5zdGFfbm90aWZ5CQk9IHdmeF9zdGFfbm90aWZ5LA0KKwkuc2V0 X3RpbQkJPSB3Znhfc2V0X3RpbSwNCiAJLnNldF9rZXkJCT0gd2Z4X3NldF9rZXksDQorCS5zZXRf cnRzX3RocmVzaG9sZAk9IHdmeF9zZXRfcnRzX3RocmVzaG9sZCwNCisJLmJzc19pbmZvX2NoYW5n ZWQJPSB3ZnhfYnNzX2luZm9fY2hhbmdlZCwNCisJLnByZXBhcmVfbXVsdGljYXN0CT0gd2Z4X3By ZXBhcmVfbXVsdGljYXN0LA0KKwkuY29uZmlndXJlX2ZpbHRlcgk9IHdmeF9jb25maWd1cmVfZmls dGVyLA0KKwkuYW1wZHVfYWN0aW9uCQk9IHdmeF9hbXBkdV9hY3Rpb24sDQorCS5mbHVzaAkJCT0g d2Z4X2ZsdXNoLA0KKwkuYWRkX2NoYW5jdHgJCT0gd2Z4X2FkZF9jaGFuY3R4LA0KKwkucmVtb3Zl X2NoYW5jdHgJCT0gd2Z4X3JlbW92ZV9jaGFuY3R4LA0KKwkuY2hhbmdlX2NoYW5jdHgJCT0gd2Z4 X2NoYW5nZV9jaGFuY3R4LA0KKwkuYXNzaWduX3ZpZl9jaGFuY3R4CT0gd2Z4X2Fzc2lnbl92aWZf Y2hhbmN0eCwNCisJLnVuYXNzaWduX3ZpZl9jaGFuY3R4CT0gd2Z4X3VuYXNzaWduX3ZpZl9jaGFu Y3R4LA0KIH07DQogDQogYm9vbCB3ZnhfYXBpX29sZGVyX3RoYW4oc3RydWN0IHdmeF9kZXYgKndk ZXYsIGludCBtYWpvciwgaW50IG1pbm9yKQ0KQEAgLTE5OCw2ICsyOTYsMTYgQEAgc3RydWN0IHdm eF9kZXYgKndmeF9pbml0X2NvbW1vbihzdHJ1Y3QgZGV2aWNlICpkZXYsDQogDQogCVNFVF9JRUVF ODAyMTFfREVWKGh3LCBkZXYpOw0KIA0KKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBORUVEX0RUSU1f QkVGT1JFX0FTU09DKTsNCisJaWVlZTgwMjExX2h3X3NldChodywgVFhfQU1QRFVfU0VUVVBfSU5f SFcpOw0KKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBBTVBEVV9BR0dSRUdBVElPTik7DQorCWllZWU4 MDIxMV9od19zZXQoaHcsIENPTk5FQ1RJT05fTU9OSVRPUik7DQorCWllZWU4MDIxMV9od19zZXQo aHcsIFJFUE9SVFNfVFhfQUNLX1NUQVRVUyk7DQorCWllZWU4MDIxMV9od19zZXQoaHcsIFNVUFBP UlRTX0RZTkFNSUNfUFMpOw0KKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBTSUdOQUxfREJNKTsNCisJ aWVlZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfUFMpOw0KKwlpZWVlODAyMTFfaHdfc2V0KGh3 LCBNRlBfQ0FQQUJMRSk7DQorDQogCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB3 ZnhfdmlmKTsNCiAJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHdmeF9zdGFfcHJp dik7DQogCWh3LT5xdWV1ZXMgPSA0Ow0KQEAgLTIwNiw4ICszMTQsMTkgQEAgc3RydWN0IHdmeF9k ZXYgKndmeF9pbml0X2NvbW1vbihzdHJ1Y3QgZGV2aWNlICpkZXYsDQogCWh3LT5leHRyYV90eF9o ZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgaGlmX3NsX21zZ19oZHIpICsgc2l6ZW9mKHN0cnVjdCBo aWZfbXNnKQ0KIAkJCQkrIHNpemVvZihzdHJ1Y3QgaGlmX3JlcV90eCkNCiAJCQkJKyA0IC8qIGFs aWdubWVudCAqLyArIDggLyogVEtJUCBJViAqLzsNCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9k ZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfA0KKwkJCQkgICAgIEJJVChOTDgwMjEx X0lGVFlQRV9BREhPQykgfA0KKwkJCQkgICAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCk7DQorCWh3 LT53aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19BUF9VQVBTRDsNCisJaHctPndpcGh5LT5mbGFn cyAmPSB+V0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUOw0KKwlody0+d2lwaHktPm1heF9hcF9h c3NvY19zdGEgPSBXRlhfTUFYX1NUQV9JTl9BUF9NT0RFOw0KIAlody0+d2lwaHktPm1heF9zY2Fu X3NzaWRzID0gMjsNCiAJaHctPndpcGh5LT5tYXhfc2Nhbl9pZV9sZW4gPSBJRUVFODAyMTFfTUFY X0RBVEFfTEVOOw0KKwlody0+d2lwaHktPm5faWZhY2VfY29tYmluYXRpb25zID0gQVJSQVlfU0la RSh3ZnhfaWZhY2VfY29tYmluYXRpb25zKTsNCisJaHctPndpcGh5LT5pZmFjZV9jb21iaW5hdGlv bnMgPSB3ZnhfaWZhY2VfY29tYmluYXRpb25zOw0KKwlody0+d2lwaHktPmJhbmRzW05MODAyMTFf QkFORF8yR0haXSA9IGRldm1fa21hbGxvYyhkZXYsIHNpemVvZih3ZnhfYmFuZF8yZ2h6KSwgR0ZQ X0tFUk5FTCk7DQorCS8vIEZJWE1FOiBhbHNvIGNvcHkgd2Z4X3JhdGVzIGFuZCB3ZnhfMmdoel9j aGFudGFibGUNCisJbWVtY3B5KGh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLCAm d2Z4X2JhbmRfMmdoeiwgc2l6ZW9mKHdmeF9iYW5kXzJnaHopKTsNCiANCiAJd2RldiA9IGh3LT5w cml2Ow0KIAl3ZGV2LT5odyA9IGh3Ow0KQEAgLTI5MCw2ICs0MDksMTIgQEAgaW50IHdmeF9wcm9i ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikNCiAJCWdvdG8gZXJyMTsNCiAJfQ0KIA0KKwlpZiAod2Rl di0+aHdfY2Fwcy5yZWd1bF9zZWxfbW9kZV9pbmZvLnJlZ2lvbl9zZWxfbW9kZSkgew0KKwkJd2Rl di0+aHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0tPmNoYW5uZWxzWzExXS5mbGFn cyB8PSBJRUVFODAyMTFfQ0hBTl9OT19JUjsNCisJCXdkZXYtPmh3LT53aXBoeS0+YmFuZHNbTkw4 MDIxMV9CQU5EXzJHSFpdLT5jaGFubmVsc1sxMl0uZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fTk9f SVI7DQorCQl3ZGV2LT5ody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXS0+Y2hhbm5l bHNbMTNdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOw0KKwl9DQorDQogCWRldl9k Ymcod2Rldi0+ZGV2LCAic2VuZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXNcbiIsIHdkZXYtPnBk YXRhLmZpbGVfcGRzKTsNCiAJZXJyID0gd2Z4X3NlbmRfcGRhdGFfcGRzKHdkZXYpOw0KIAlpZiAo ZXJyIDwgMCkNCkBAIC0zMjIsNiArNDQ3LDEyIEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9k ZXYgKndkZXYpDQogCQl9DQogCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJNQUMgYWRkcmVzcyAlZDog JXBNXG4iLCBpLCB3ZGV2LT5hZGRyZXNzZXNbaV0uYWRkcik7DQogCX0NCisJd2Rldi0+aHctPndp cGh5LT5uX2FkZHJlc3NlcyA9IEFSUkFZX1NJWkUod2Rldi0+YWRkcmVzc2VzKTsNCisJd2Rldi0+ aHctPndpcGh5LT5hZGRyZXNzZXMgPSB3ZGV2LT5hZGRyZXNzZXM7DQorDQorCWVyciA9IGllZWU4 MDIxMV9yZWdpc3Rlcl9odyh3ZGV2LT5odyk7DQorCWlmIChlcnIpDQorCQlnb3RvIGVycjE7DQog DQogCWVyciA9IHdmeF9kZWJ1Z19pbml0KHdkZXYpOw0KIAlpZiAoZXJyKQ0KQEAgLTMzMCw2ICs0 NjEsNyBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KIAlyZXR1cm4gMDsN CiANCiBlcnIyOg0KKwlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3ZGV2LT5odyk7DQogCWllZWU4 MDIxMV9mcmVlX2h3KHdkZXYtPmh3KTsNCiBlcnIxOg0KIAl3ZnhfYmhfdW5yZWdpc3Rlcih3ZGV2 KTsNCkBAIC0zMzgsNiArNDcwLDcgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rl dikNCiANCiB2b2lkIHdmeF9yZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KIHsNCisJaWVl ZTgwMjExX3VucmVnaXN0ZXJfaHcod2Rldi0+aHcpOw0KIAloaWZfc2h1dGRvd24od2Rldik7DQog CXdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpOw0KIAl3Znhfc2xfZGVpbml0KHdkZXYpOw0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYyBiL2RyaXZlcnMvc3RhZ2luZy93Zngv cXVldWUuYw0KaW5kZXggYWE0MzhiZTIxZDM3Li42ZjFiZTRmNmY0NjMgMTAwNjQ0DQotLS0gYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVlLmMNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvcXVl dWUuYw0KQEAgLTM1MSw2ICszNTEsODMgQEAgYm9vbCB3ZnhfdHhfcXVldWVzX2lzX2VtcHR5KHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KIAlyZXR1cm4gcmV0Ow0KIH0NCiANCitzdGF0aWMgYm9vbCBo aWZfaGFuZGxlX3R4X2RhdGEoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBza19idWZmICpz a2IsDQorCQkJICAgICAgIHN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVlKQ0KK3sNCisJYm9vbCBoYW5k bGVkID0gZmFsc2U7DQorCXN0cnVjdCB3ZnhfdHhfcHJpdiAqdHhfcHJpdiA9IHdmeF9za2JfdHhf cHJpdihza2IpOw0KKwlzdHJ1Y3QgaGlmX3JlcV90eCAqcmVxID0gd2Z4X3NrYl90eHJlcShza2Ip Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqZnJhbWUgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIg KikgKHJlcS0+ZnJhbWUgKyByZXEtPmRhdGFfZmxhZ3MuZmNfb2Zmc2V0KTsNCisNCisJZW51bSB7 DQorCQlkb19wcm9iZSwNCisJCWRvX2Ryb3AsDQorCQlkb193ZXAsDQorCQlkb190eCwNCisJfSBh Y3Rpb24gPSBkb190eDsNCisNCisJc3dpdGNoICh3dmlmLT52aWYtPnR5cGUpIHsNCisJY2FzZSBO TDgwMjExX0lGVFlQRV9TVEFUSU9OOg0KKwkJaWYgKHd2aWYtPnN0YXRlIDwgV0ZYX1NUQVRFX1BS RV9TVEEpDQorCQkJYWN0aW9uID0gZG9fZHJvcDsNCisJCWJyZWFrOw0KKwljYXNlIE5MODAyMTFf SUZUWVBFX0FQOg0KKwkJaWYgKCF3dmlmLT5zdGF0ZSkgew0KKwkJCWFjdGlvbiA9IGRvX2Ryb3A7 DQorCQl9IGVsc2UgaWYgKCEoQklUKHR4X3ByaXYtPnJhd19saW5rX2lkKSAmIChCSVQoMCkgfCB3 dmlmLT5saW5rX2lkX21hcCkpKSB7DQorCQkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LCAiYSBm cmFtZSB3aXRoIGV4cGlyZWQgbGluay1pZCBpcyBkcm9wcGVkXG4iKTsNCisJCQlhY3Rpb24gPSBk b19kcm9wOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6DQor CQlpZiAod3ZpZi0+c3RhdGUgIT0gV0ZYX1NUQVRFX0lCU1MpDQorCQkJYWN0aW9uID0gZG9fZHJv cDsNCisJCWJyZWFrOw0KKwljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6DQorCWRlZmF1bHQ6 DQorCQlhY3Rpb24gPSBkb19kcm9wOw0KKwkJYnJlYWs7DQorCX0NCisNCisJaWYgKGFjdGlvbiA9 PSBkb190eCkgew0KKwkJaWYgKGllZWU4MDIxMV9pc19udWxsZnVuYyhmcmFtZS0+ZnJhbWVfY29u dHJvbCkpIHsNCisJCQltdXRleF9sb2NrKCZ3dmlmLT5ic3NfbG9zc19sb2NrKTsNCisJCQlpZiAo d3ZpZi0+YnNzX2xvc3Nfc3RhdGUpIHsNCisJCQkJd3ZpZi0+YnNzX2xvc3NfY29uZmlybV9pZCA9 IHJlcS0+cGFja2V0X2lkOw0KKwkJCQlyZXEtPnF1ZXVlX2lkLnF1ZXVlX2lkID0gSElGX1FVRVVF X0lEX1ZPSUNFOw0KKwkJCX0NCisJCQltdXRleF91bmxvY2soJnd2aWYtPmJzc19sb3NzX2xvY2sp Ow0KKwkJfSBlbHNlIGlmIChpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChmcmFtZS0+ZnJhbWVfY29u dHJvbCkgJiYNCisJCQkgICB0eF9wcml2LT5od19rZXkgJiYNCisJCQkgICB0eF9wcml2LT5od19r ZXktPmtleWlkeCAhPSB3dmlmLT53ZXBfZGVmYXVsdF9rZXlfaWQgJiYNCisJCQkgICAodHhfcHJp di0+aHdfa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHwNCisJCQkgICAg dHhfcHJpdi0+aHdfa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSkgew0K KwkJCWFjdGlvbiA9IGRvX3dlcDsNCisJCX0NCisJfQ0KKw0KKwlzd2l0Y2ggKGFjdGlvbikgew0K KwljYXNlIGRvX2Ryb3A6DQorCQlCVUdfT04od2Z4X3BlbmRpbmdfcmVtb3ZlKHd2aWYtPndkZXYs IHNrYikpOw0KKwkJaGFuZGxlZCA9IHRydWU7DQorCQlicmVhazsNCisJY2FzZSBkb193ZXA6DQor CQl3ZnhfdHhfbG9jayh3dmlmLT53ZGV2KTsNCisJCXd2aWYtPndlcF9kZWZhdWx0X2tleV9pZCA9 IHR4X3ByaXYtPmh3X2tleS0+a2V5aWR4Ow0KKwkJd3ZpZi0+d2VwX3BlbmRpbmdfc2tiID0gc2ti Ow0KKwkJaWYgKCFzY2hlZHVsZV93b3JrKCZ3dmlmLT53ZXBfa2V5X3dvcmspKQ0KKwkJCXdmeF90 eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCQloYW5kbGVkID0gdHJ1ZTsNCisJCWJyZWFrOw0KKwlj YXNlIGRvX3R4Og0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQkvKiBEbyBub3RoaW5nICovDQor CQlicmVhazsNCisJfQ0KKwlyZXR1cm4gaGFuZGxlZDsNCit9DQorDQogc3RhdGljIGludCB3Znhf Z2V0X3ByaW9fcXVldWUoc3RydWN0IHdmeF92aWYgKnd2aWYsDQogCQkJCSB1MzIgdHhfYWxsb3dl ZF9tYXNrLCBpbnQgKnRvdGFsKQ0KIHsNCkBAIC00OTgsNiArNTc1LDkgQEAgc3RydWN0IGhpZl9t c2cgKndmeF90eF9xdWV1ZXNfZ2V0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KIAkJd3ZpZiA9IHdk ZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7DQogCQlXQVJOX09OKCF3dmlmKTsNCiAN CisJCWlmIChoaWZfaGFuZGxlX3R4X2RhdGEod3ZpZiwgc2tiLCBxdWV1ZSkpDQorCQkJY29udGlu dWU7ICAvKiBIYW5kbGVkIGJ5IFdTTSAqLw0KKw0KIAkJd3ZpZi0+cHNwb2xsX21hc2sgJj0gfkJJ VCh0eF9wcml2LT5yYXdfbGlua19pZCk7DQogDQogCQkvKiBhbGxvdyBidXJzdGluZyBpZiB0eG9w IGlzIHNldCAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93Zngvc2Nhbi5jIGIvZHJp dmVycy9zdGFnaW5nL3dmeC9zY2FuLmMNCmluZGV4IDIwN2IyNmViYzlmZC4uZWE1MDAxYzkxNWY2 IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9zY2FuLmMNCisrKyBiL2RyaXZlcnMv c3RhZ2luZy93Zngvc2Nhbi5jDQpAQCAtMjEsMTEgKzIxLDI2IEBAIHN0YXRpYyB2b2lkIF9faWVl ZTgwMjExX3NjYW5fY29tcGxldGVkX2NvbXBhdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9v bCBhYm9yDQogCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChodywgJmluZm8pOw0KIH0NCiANCitz dGF0aWMgdm9pZCB3Znhfc2Nhbl9yZXN0YXJ0X2RlbGF5ZWQoc3RydWN0IHdmeF92aWYgKnd2aWYp DQorew0KKwlpZiAod3ZpZi0+ZGVsYXllZF91bmpvaW4pIHsNCisJCXd2aWYtPmRlbGF5ZWRfdW5q b2luID0gZmFsc2U7DQorCQlpZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPnVuam9pbl93b3JrKSkN CisJCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOw0KKwl9IGVsc2UgaWYgKHd2aWYtPmRlbGF5 ZWRfbGlua19sb3NzKSB7DQorCQl3dmlmLT5kZWxheWVkX2xpbmtfbG9zcyA9IDA7DQorCQl3Znhf Y3FtX2Jzc2xvc3Nfc20od3ZpZiwgMSwgMCwgMCk7DQorCX0NCit9DQorDQogc3RhdGljIGludCB3 Znhfc2Nhbl9zdGFydChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHdmeF9zY2FuX3BhcmFt cyAqc2NhbikNCiB7DQogCWludCByZXQ7DQogCWludCB0bW8gPSA1MDA7DQogDQorCWlmICh3dmlm LT5zdGF0ZSA9PSBXRlhfU1RBVEVfUFJFX1NUQSkNCisJCXJldHVybiAtRUJVU1k7DQorDQogCXRt byArPSBzY2FuLT5zY2FuX3JlcS5udW1fb2ZfY2hhbm5lbHMgKg0KIAkgICAgICAgKCgyMCAqIChz Y2FuLT5zY2FuX3JlcS5tYXhfY2hhbm5lbF90aW1lKSkgKyAxMCk7DQogCWF0b21pY19zZXQoJnd2 aWYtPnNjYW4uaW5fcHJvZ3Jlc3MsIDEpOw0KQEAgLTM4LDYgKzUzLDcgQEAgc3RhdGljIGludCB3 Znhfc2Nhbl9zdGFydChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHdmeF9zY2FuX3BhcmFt cyAqc2NhbikNCiAJCWF0b21pY19zZXQoJnd2aWYtPnNjYW4uaW5fcHJvZ3Jlc3MsIDApOw0KIAkJ YXRvbWljX3NldCgmd3ZpZi0+d2Rldi0+c2Nhbl9pbl9wcm9ncmVzcywgMCk7DQogCQljYW5jZWxf ZGVsYXllZF93b3JrX3N5bmMoJnd2aWYtPnNjYW4udGltZW91dCk7DQorCQl3Znhfc2Nhbl9yZXN0 YXJ0X2RlbGF5ZWQod3ZpZik7DQogCX0NCiAJcmV0dXJuIHJldDsNCiB9DQpAQCAtNTYsNiArNzIs OSBAQCBpbnQgd2Z4X2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQogCWlmICghd3Zp ZikNCiAJCXJldHVybiAtRUlOVkFMOw0KIA0KKwlpZiAod3ZpZi0+c3RhdGUgPT0gV0ZYX1NUQVRF X0FQKQ0KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KKw0KIAlpZiAocmVxLT5uX3NzaWRzID09IDEg JiYgIXJlcS0+c3NpZHNbMF0uc3NpZF9sZW4pDQogCQlyZXEtPm5fc3NpZHMgPSAwOw0KIA0KQEAg LTEyMSwxMSArMTQwLDIzIEBAIHZvaWQgd2Z4X3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3Qg KndvcmspDQogCQkuc2Nhbl9yZXEuc2Nhbl90eXBlLnR5cGUgPSAwLCAgICAvKiBGb3JlZ3JvdW5k ICovDQogCX07DQogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqZmlyc3Q7DQorCWJvb2wgZmly c3RfcnVuID0gKHd2aWYtPnNjYW4uYmVnaW4gPT0gd3ZpZi0+c2Nhbi5jdXJyICYmDQorCQkJICB3 dmlmLT5zY2FuLmJlZ2luICE9IHd2aWYtPnNjYW4uZW5kKTsNCiAJaW50IGk7DQogDQogCWRvd24o Jnd2aWYtPnNjYW4ubG9jayk7DQogCW11dGV4X2xvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgp Ow0KIA0KKwlpZiAoZmlyc3RfcnVuKSB7DQorCQlpZiAod3ZpZi0+c3RhdGUgPT0gV0ZYX1NUQVRF X1NUQSAmJg0KKwkJICAgICEod3ZpZi0+cG93ZXJzYXZlX21vZGUucG1fbW9kZS5lbnRlcl9wc20p KSB7DQorCQkJc3RydWN0IGhpZl9yZXFfc2V0X3BtX21vZGUgcG0gPSB3dmlmLT5wb3dlcnNhdmVf bW9kZTsNCisNCisJCQlwbS5wbV9tb2RlLmVudGVyX3BzbSA9IDE7DQorCQkJd2Z4X3NldF9wbSh3 dmlmLCAmcG0pOw0KKwkJfQ0KKwl9DQorDQogCWlmICghd3ZpZi0+c2Nhbi5yZXEgfHwgd3ZpZi0+ c2Nhbi5jdXJyID09IHd2aWYtPnNjYW4uZW5kKSB7DQogCQlpZiAod3ZpZi0+c2Nhbi5vdXRwdXRf cG93ZXIgIT0gd3ZpZi0+d2Rldi0+b3V0cHV0X3Bvd2VyKQ0KIAkJCWhpZl9zZXRfb3V0cHV0X3Bv d2VyKHd2aWYsIHd2aWYtPndkZXYtPm91dHB1dF9wb3dlciAqIDEwKTsNCkBAIC0xMzgsMTAgKzE2 OSwxNCBAQCB2b2lkIHdmeF9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KIAkJ CWRldl9kYmcod3ZpZi0+d2Rldi0+ZGV2LCAic2NhbiBjYW5jZWxlZFxuIik7DQogDQogCQl3dmlm LT5zY2FuLnJlcSA9IE5VTEw7DQorCQl3Znhfc2Nhbl9yZXN0YXJ0X2RlbGF5ZWQod3ZpZik7DQog CQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOw0KIAkJbXV0ZXhfdW5sb2NrKCZ3dmlmLT53ZGV2 LT5jb25mX211dGV4KTsNCiAJCV9faWVlZTgwMjExX3NjYW5fY29tcGxldGVkX2NvbXBhdCh3dmlm LT53ZGV2LT5odywgd3ZpZi0+c2Nhbi5zdGF0dXMgPyAxIDogMCk7DQogCQl1cCgmd3ZpZi0+c2Nh bi5sb2NrKTsNCisJCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RBVEVfU1RBICYmDQorCQkgICAg ISh3dmlmLT5wb3dlcnNhdmVfbW9kZS5wbV9tb2RlLmVudGVyX3BzbSkpDQorCQkJd2Z4X3NldF9w bSh3dmlmLCAmd3ZpZi0+cG93ZXJzYXZlX21vZGUpOw0KIAkJcmV0dXJuOw0KIAl9DQogCWZpcnN0 ID0gKnd2aWYtPnNjYW4uY3VycjsNCkBAIC0xNzAsNiArMjA1LDExIEBAIHZvaWQgd2Z4X3NjYW5f d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQogCXNjYW4uc3NpZHMgPSAmd3ZpZi0+c2Nh bi5zc2lkc1swXTsNCiAJc2Nhbi5zY2FuX3JlcS5udW1fb2ZfY2hhbm5lbHMgPSBpdCAtIHd2aWYt PnNjYW4uY3VycjsNCiAJc2Nhbi5zY2FuX3JlcS5wcm9iZV9kZWxheSA9IDEwMDsNCisJLy8gRklY TUU6IENoZWNrIGlmIEZXIGNhbiBkbyBhY3RpdmUgc2NhbiB3aGlsZSBqb2luZWQuDQorCWlmICh3 dmlmLT5zdGF0ZSA9PSBXRlhfU1RBVEVfU1RBKSB7DQorCQlzY2FuLnNjYW5fcmVxLnNjYW5fdHlw ZS50eXBlID0gMTsNCisJCXNjYW4uc2Nhbl9yZXEuc2Nhbl9mbGFncy5mYmcgPSAxOw0KKwl9DQog DQogCXNjYW4uY2ggPSBrY2FsbG9jKHNjYW4uc2Nhbl9yZXEubnVtX29mX2NoYW5uZWxzLCBzaXpl b2YodTgpLCBHRlBfS0VSTkVMKTsNCiANCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4 L3N0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYw0KaW5kZXggMmU3MDliOGEzYmY0Li4y ODU1ZDE0YTcwOWMgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jDQorKysg Yi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jDQpAQCAtOSwxMSArOSwxNDggQEANCiANCiAjaW5j bHVkZSAic3RhLmgiDQogI2luY2x1ZGUgIndmeC5oIg0KKyNpbmNsdWRlICJmd2lvLmgiDQorI2lu Y2x1ZGUgImJoLmgiDQogI2luY2x1ZGUgImtleS5oIg0KICNpbmNsdWRlICJzY2FuLmgiDQorI2lu Y2x1ZGUgImRlYnVnLmgiDQorI2luY2x1ZGUgImhpZl90eC5oIg0KICNpbmNsdWRlICJoaWZfdHhf bWliLmgiDQogDQogI2RlZmluZSBUWE9QX1VOSVQgMzINCisjZGVmaW5lIEhJRl9NQVhfQVJQX0lQ X0FERFJUQUJMRV9FTlRSSUVTIDINCisNCitzdGF0aWMgdTMyIHdmeF9yYXRlX21hc2tfdG9faHco c3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiByYXRlcykNCit7DQorCWludCBpOw0KKwl1MzIgcmV0 ID0gMDsNCisJLy8gV0Z4IG9ubHkgc3VwcG9ydCAyR0h6DQorCXN0cnVjdCBpZWVlODAyMTFfc3Vw cG9ydGVkX2JhbmQgKnNiYW5kID0gd2Rldi0+aHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRf MkdIWl07DQorDQorCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7DQor CQlpZiAocmF0ZXMgJiBCSVQoaSkpIHsNCisJCQlpZiAoaSA+PSBzYmFuZC0+bl9iaXRyYXRlcykN CisJCQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAidW5zdXBwb3J0ZWQgYmFzaWMgcmF0ZVxuIik7DQor CQkJZWxzZQ0KKwkJCQlyZXQgfD0gQklUKHNiYW5kLT5iaXRyYXRlc1tpXS5od192YWx1ZSk7DQor CQl9DQorCX0NCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQgX193ZnhfZnJlZV9l dmVudF9xdWV1ZShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQ0KK3sNCisJc3RydWN0IHdmeF9oaWZf ZXZlbnQgKmV2ZW50LCAqdG1wOw0KKw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnQs IHRtcCwgbGlzdCwgbGluaykgew0KKwkJbGlzdF9kZWwoJmV2ZW50LT5saW5rKTsNCisJCWtmcmVl KGV2ZW50KTsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCB3ZnhfZnJlZV9ldmVudF9xdWV1ZShz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikNCit7DQorCUxJU1RfSEVBRChsaXN0KTsNCisNCisJc3Bpbl9s b2NrKCZ3dmlmLT5ldmVudF9xdWV1ZV9sb2NrKTsNCisJbGlzdF9zcGxpY2VfaW5pdCgmd3ZpZi0+ ZXZlbnRfcXVldWUsICZsaXN0KTsNCisJc3Bpbl91bmxvY2soJnd2aWYtPmV2ZW50X3F1ZXVlX2xv Y2spOw0KKw0KKwlfX3dmeF9mcmVlX2V2ZW50X3F1ZXVlKCZsaXN0KTsNCit9DQorDQordm9pZCB3 ZnhfY3FtX2Jzc2xvc3Nfc20oc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBpbml0LCBpbnQgZ29v ZCwgaW50IGJhZCkNCit7DQorCWludCB0eCA9IDA7DQorDQorCW11dGV4X2xvY2soJnd2aWYtPmJz c19sb3NzX2xvY2spOw0KKwl3dmlmLT5kZWxheWVkX2xpbmtfbG9zcyA9IDA7DQorCWNhbmNlbF93 b3JrX3N5bmMoJnd2aWYtPmJzc19wYXJhbXNfd29yayk7DQorDQorCS8qIElmIHdlIGhhdmUgYSBw ZW5kaW5nIHVuam9pbiAqLw0KKwlpZiAod3ZpZi0+ZGVsYXllZF91bmpvaW4pDQorCQlnb3RvIGVu ZDsNCisNCisJaWYgKGluaXQpIHsNCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmd3ZpZi0+YnNz X2xvc3Nfd29yaywgSFopOw0KKwkJd3ZpZi0+YnNzX2xvc3Nfc3RhdGUgPSAwOw0KKw0KKwkJaWYg KCFhdG9taWNfcmVhZCgmd3ZpZi0+d2Rldi0+dHhfbG9jaykpDQorCQkJdHggPSAxOw0KKwl9IGVs c2UgaWYgKGdvb2QpIHsNCisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmd3ZpZi0+YnNzX2xv c3Nfd29yayk7DQorCQl3dmlmLT5ic3NfbG9zc19zdGF0ZSA9IDA7DQorCQlzY2hlZHVsZV93b3Jr KCZ3dmlmLT5ic3NfcGFyYW1zX3dvcmspOw0KKwl9IGVsc2UgaWYgKGJhZCkgew0KKwkJLyogRklY TUUgU2hvdWxkIHdlIGp1c3Qga2VlcCBnb2luZyB1bnRpbCB3ZSB0aW1lIG91dD8gKi8NCisJCWlm ICh3dmlmLT5ic3NfbG9zc19zdGF0ZSA8IDMpDQorCQkJdHggPSAxOw0KKwl9IGVsc2Ugew0KKwkJ Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3dmlmLT5ic3NfbG9zc193b3JrKTsNCisJCXd2aWYt PmJzc19sb3NzX3N0YXRlID0gMDsNCisJfQ0KKw0KKwkvKiBTcGl0IG91dCBhIE5VTEwgcGFja2V0 IHRvIG91ciBBUCBpZiBuZWNlc3NhcnkgKi8NCisJLy8gRklYTUU6IGNhbGwgaWVlZTgwMjExX2Jl YWNvbl9sb3NzL2llZWU4MDIxMV9jb25uZWN0aW9uX2xvc3MgaW5zdGVhZA0KKwlpZiAodHgpIHsN CisJCXN0cnVjdCBza19idWZmICpza2I7DQorDQorCQl3dmlmLT5ic3NfbG9zc19zdGF0ZSsrOw0K Kw0KKwkJc2tiID0gaWVlZTgwMjExX251bGxmdW5jX2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+ dmlmLCBmYWxzZSk7DQorCQlpZiAoIXNrYikNCisJCQlnb3RvIGVuZDsNCisJCW1lbXNldChJRUVF ODAyMTFfU0tCX0NCKHNrYiksIDAsIHNpemVvZigqSUVFRTgwMjExX1NLQl9DQihza2IpKSk7DQor CQlJRUVFODAyMTFfU0tCX0NCKHNrYiktPmNvbnRyb2wudmlmID0gd3ZpZi0+dmlmOw0KKwkJSUVF RTgwMjExX1NLQl9DQihza2IpLT5kcml2ZXJfcmF0ZXNbMF0uaWR4ID0gMDsNCisJCUlFRUU4MDIx MV9TS0JfQ0Ioc2tiKS0+ZHJpdmVyX3JhdGVzWzBdLmNvdW50ID0gMTsNCisJCUlFRUU4MDIxMV9T S0JfQ0Ioc2tiKS0+ZHJpdmVyX3JhdGVzWzFdLmlkeCA9IC0xOw0KKwkJd2Z4X3R4KHd2aWYtPndk ZXYtPmh3LCBOVUxMLCBza2IpOw0KKwl9DQorZW5kOg0KKwltdXRleF91bmxvY2soJnd2aWYtPmJz c19sb3NzX2xvY2spOw0KK30NCisNCitzdGF0aWMgaW50IHdmeF9zZXRfdWFwc2RfcGFyYW0oc3Ry dWN0IHdmeF92aWYgKnd2aWYsDQorCQkJICAgY29uc3Qgc3RydWN0IHdmeF9lZGNhX3BhcmFtcyAq YXJnKQ0KK3sNCisJaW50IHJldDsNCisNCisJLyogSGVyZSdzIHRoZSBtYXBwaW5nIEFDIFtxdWV1 ZSwgYml0XQ0KKwkgKiAgVk8gWzAsM10sIFZJIFsxLCAyXSwgQkUgWzIsIDFdLCBCSyBbMywgMF0N CisJICovDQorDQorCWlmIChhcmctPnVhcHNkX2VuYWJsZVtJRUVFODAyMTFfQUNfVk9dKQ0KKwkJ d3ZpZi0+dWFwc2RfaW5mby50cmlnX3ZvaWNlID0gMTsNCisJZWxzZQ0KKwkJd3ZpZi0+dWFwc2Rf aW5mby50cmlnX3ZvaWNlID0gMDsNCisNCisJaWYgKGFyZy0+dWFwc2RfZW5hYmxlW0lFRUU4MDIx MV9BQ19WSV0pDQorCQl3dmlmLT51YXBzZF9pbmZvLnRyaWdfdmlkZW8gPSAxOw0KKwllbHNlDQor CQl3dmlmLT51YXBzZF9pbmZvLnRyaWdfdmlkZW8gPSAwOw0KKw0KKwlpZiAoYXJnLT51YXBzZF9l bmFibGVbSUVFRTgwMjExX0FDX0JFXSkNCisJCXd2aWYtPnVhcHNkX2luZm8udHJpZ19iZSA9IDE7 DQorCWVsc2UNCisJCXd2aWYtPnVhcHNkX2luZm8udHJpZ19iZSA9IDA7DQorDQorCWlmIChhcmct PnVhcHNkX2VuYWJsZVtJRUVFODAyMTFfQUNfQktdKQ0KKwkJd3ZpZi0+dWFwc2RfaW5mby50cmln X2Jja2dybmQgPSAxOw0KKwllbHNlDQorCQl3dmlmLT51YXBzZF9pbmZvLnRyaWdfYmNrZ3JuZCA9 IDA7DQorDQorCS8qIEN1cnJlbnRseSBwc2V1ZG8gVS1BUFNEIG9wZXJhdGlvbiBpcyBub3Qgc3Vw cG9ydGVkLCBzbyBzZXR0aW5nDQorCSAqIE1pbkF1dG9UcmlnZ2VySW50ZXJ2YWwsIE1heEF1dG9U cmlnZ2VySW50ZXJ2YWwgYW5kDQorCSAqIEF1dG9UcmlnZ2VyU3RlcCB0byAwDQorCSAqLw0KKwl3 dmlmLT51YXBzZF9pbmZvLm1pbl9hdXRvX3RyaWdnZXJfaW50ZXJ2YWwgPSAwOw0KKwl3dmlmLT51 YXBzZF9pbmZvLm1heF9hdXRvX3RyaWdnZXJfaW50ZXJ2YWwgPSAwOw0KKwl3dmlmLT51YXBzZF9p bmZvLmF1dG9fdHJpZ2dlcl9zdGVwID0gMDsNCisNCisJcmV0ID0gaGlmX3NldF91YXBzZF9pbmZv KHd2aWYsICZ3dmlmLT51YXBzZF9pbmZvKTsNCisJcmV0dXJuIHJldDsNCit9DQogDQogaW50IHdm eF9md2RfcHJvYmVfcmVxKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGVuYWJsZSkNCiB7DQpA QCAtMjIsNiArMTU5LDEwNDQgQEAgaW50IHdmeF9md2RfcHJvYmVfcmVxKHN0cnVjdCB3Znhfdmlm ICp3dmlmLCBib29sIGVuYWJsZSkNCiAJCQkJIHd2aWYtPmZ3ZF9wcm9iZV9yZXEpOw0KIH0NCiAN CitzdGF0aWMgaW50IHdmeF9zZXRfbWNhc3RfZmlsdGVyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLA0K KwkJCQkgICAgc3RydWN0IHdmeF9ncnBfYWRkcl90YWJsZSAqZnApDQorew0KKwlpbnQgaSwgcmV0 Ow0KKwlzdHJ1Y3QgaGlmX21pYl9jb25maWdfZGF0YV9maWx0ZXIgY29uZmlnID0geyB9Ow0KKwlz dHJ1Y3QgaGlmX21pYl9zZXRfZGF0YV9maWx0ZXJpbmcgZmlsdGVyX2RhdGEgPSB7IH07DQorCXN0 cnVjdCBoaWZfbWliX21hY19hZGRyX2RhdGFfZnJhbWVfY29uZGl0aW9uIGZpbHRlcl9hZGRyX3Zh bCA9IHsgfTsNCisJc3RydWN0IGhpZl9taWJfdWNfbWNfYmNfZGF0YV9mcmFtZV9jb25kaXRpb24g ZmlsdGVyX2FkZHJfdHlwZSA9IHsgfTsNCisNCisJLy8gVGVtcG9yYXJ5IHdvcmthcm91bmQgZm9y IGZpbHRlcnMNCisJcmV0dXJuIGhpZl9zZXRfZGF0YV9maWx0ZXJpbmcod3ZpZiwgJmZpbHRlcl9k YXRhKTsNCisNCisJaWYgKCFmcC0+ZW5hYmxlKSB7DQorCQlmaWx0ZXJfZGF0YS5lbmFibGUgPSAw Ow0KKwkJcmV0dXJuIGhpZl9zZXRfZGF0YV9maWx0ZXJpbmcod3ZpZiwgJmZpbHRlcl9kYXRhKTsN CisJfQ0KKw0KKwkvLyBBMSBBZGRyZXNzIG1hdGNoIG9uIGxpc3QNCisJZm9yIChpID0gMDsgaSA8 IGZwLT5udW1fYWRkcmVzc2VzOyBpKyspIHsNCisJCWZpbHRlcl9hZGRyX3ZhbC5jb25kaXRpb25f aWR4ID0gaTsNCisJCWZpbHRlcl9hZGRyX3ZhbC5hZGRyZXNzX3R5cGUgPSBISUZfTUFDX0FERFJf QTE7DQorCQlldGhlcl9hZGRyX2NvcHkoZmlsdGVyX2FkZHJfdmFsLm1hY19hZGRyZXNzLCBmcC0+ YWRkcmVzc19saXN0W2ldKTsNCisJCXJldCA9IGhpZl9zZXRfbWFjX2FkZHJfY29uZGl0aW9uKHd2 aWYsICZmaWx0ZXJfYWRkcl92YWwpOw0KKwkJaWYgKHJldCkNCisJCQlyZXR1cm4gcmV0Ow0KKwkJ Y29uZmlnLm1hY19jb25kIHw9IDEgPDwgaTsNCisJfQ0KKw0KKwkvLyBBY2NlcHQgdW5pY2FzdCBh bmQgYnJvYWRjYXN0DQorCWZpbHRlcl9hZGRyX3R5cGUuY29uZGl0aW9uX2lkeCA9IDA7DQorCWZp bHRlcl9hZGRyX3R5cGUucGFyYW0uYml0cy50eXBlX3VuaWNhc3QgPSAxOw0KKwlmaWx0ZXJfYWRk cl90eXBlLnBhcmFtLmJpdHMudHlwZV9icm9hZGNhc3QgPSAxOw0KKwlyZXQgPSBoaWZfc2V0X3Vj X21jX2JjX2NvbmRpdGlvbih3dmlmLCAmZmlsdGVyX2FkZHJfdHlwZSk7DQorCWlmIChyZXQpDQor CQlyZXR1cm4gcmV0Ow0KKw0KKwljb25maWcudWNfbWNfYmNfY29uZCA9IDE7DQorCWNvbmZpZy5m aWx0ZXJfaWR4ID0gMDsgLy8gVE9ETyAjZGVmaW5lIE1VTFRJQ0FTVF9GSUxURVJJTkcgMA0KKwlj b25maWcuZW5hYmxlID0gMTsNCisJcmV0ID0gaGlmX3NldF9jb25maWdfZGF0YV9maWx0ZXIod3Zp ZiwgJmNvbmZpZyk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwkvLyBkaXNjYXJk IGFsbCBkYXRhIGZyYW1lcyBleGNlcHQgbWF0Y2ggZmlsdGVyDQorCWZpbHRlcl9kYXRhLmVuYWJs ZSA9IDE7DQorCWZpbHRlcl9kYXRhLmRlZmF1bHRfZmlsdGVyID0gMTsgLy8gZGlzY2FyZCBhbGwN CisJcmV0ID0gaGlmX3NldF9kYXRhX2ZpbHRlcmluZyh3dmlmLCAmZmlsdGVyX2RhdGEpOw0KKw0K KwlyZXR1cm4gcmV0Ow0KK30NCisNCit2b2lkIHdmeF91cGRhdGVfZmlsdGVyaW5nKHN0cnVjdCB3 ZnhfdmlmICp3dmlmKQ0KK3sNCisJaW50IHJldDsNCisJYm9vbCBpc19zdGEgPSB3dmlmLT52aWYg JiYgTkw4MDIxMV9JRlRZUEVfU1RBVElPTiA9PSB3dmlmLT52aWYtPnR5cGU7DQorCWJvb2wgZmls dGVyX2Jzc2lkID0gd3ZpZi0+ZmlsdGVyX2Jzc2lkOw0KKwlib29sIGZ3ZF9wcm9iZV9yZXEgPSB3 dmlmLT5md2RfcHJvYmVfcmVxOw0KKwlzdHJ1Y3QgaGlmX21pYl9iY25fZmlsdGVyX2VuYWJsZSBi Zl9jdHJsOw0KKwlzdHJ1Y3QgaGlmX21pYl9iY25fZmlsdGVyX3RhYmxlICpiZl90Ymw7DQorCXN0 cnVjdCBoaWZfaWVfdGFibGVfZW50cnkgaWVfdGJsW10gPSB7DQorCQl7DQorCQkJLmllX2lkICAg ICAgICA9IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQywNCisJCQkuaGFzX2NoYW5nZWQgID0gMSwN CisJCQkubm9fbG9uZ2VyICAgID0gMSwNCisJCQkuaGFzX2FwcGVhcmVkID0gMSwNCisJCQkub3Vp ICAgICAgICAgPSB7IDB4NTAsIDB4NkYsIDB4OUF9LA0KKwkJfSwgew0KKwkJCS5pZV9pZCAgICAg ICAgPSBXTEFOX0VJRF9IVF9PUEVSQVRJT04sDQorCQkJLmhhc19jaGFuZ2VkICA9IDEsDQorCQkJ Lm5vX2xvbmdlciAgICA9IDEsDQorCQkJLmhhc19hcHBlYXJlZCA9IDEsDQorCQl9LCB7DQorCQkJ LmllX2lkICAgICAgICA9IFdMQU5fRUlEX0VSUF9JTkZPLA0KKwkJCS5oYXNfY2hhbmdlZCAgPSAx LA0KKwkJCS5ub19sb25nZXIgICAgPSAxLA0KKwkJCS5oYXNfYXBwZWFyZWQgPSAxLA0KKwkJfQ0K Kwl9Ow0KKw0KKwlpZiAod3ZpZi0+c3RhdGUgPT0gV0ZYX1NUQVRFX1BBU1NJVkUpDQorCQlyZXR1 cm47DQorDQorCWJmX3RibCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWZfbWliX2Jjbl9maWx0 ZXJfdGFibGUpICsgc2l6ZW9mKGllX3RibCksIEdGUF9LRVJORUwpOw0KKwltZW1jcHkoYmZfdGJs LT5pZV90YWJsZSwgaWVfdGJsLCBzaXplb2YoaWVfdGJsKSk7DQorCWlmICh3dmlmLT5kaXNhYmxl X2JlYWNvbl9maWx0ZXIpIHsNCisJCWJmX2N0cmwuZW5hYmxlID0gMDsNCisJCWJmX2N0cmwuYmNu X2NvdW50ID0gMTsNCisJCWJmX3RibC0+bnVtX29mX2luZm9fZWxtdHMgPSAwOw0KKwl9IGVsc2Ug aWYgKCFpc19zdGEpIHsNCisJCWJmX2N0cmwuZW5hYmxlID0gSElGX0JFQUNPTl9GSUxURVJfRU5B QkxFIHwgSElGX0JFQUNPTl9GSUxURVJfQVVUT19FUlA7DQorCQliZl9jdHJsLmJjbl9jb3VudCA9 IDA7DQorCQliZl90YmwtPm51bV9vZl9pbmZvX2VsbXRzID0gMjsNCisJfSBlbHNlIHsNCisJCWJm X2N0cmwuZW5hYmxlID0gSElGX0JFQUNPTl9GSUxURVJfRU5BQkxFOw0KKwkJYmZfY3RybC5iY25f Y291bnQgPSAwOw0KKwkJYmZfdGJsLT5udW1fb2ZfaW5mb19lbG10cyA9IDM7DQorCX0NCisNCisJ cmV0ID0gaGlmX3NldF9yeF9maWx0ZXIod3ZpZiwgZmlsdGVyX2Jzc2lkLCBmd2RfcHJvYmVfcmVx KTsNCisJaWYgKCFyZXQpDQorCQlyZXQgPSBoaWZfc2V0X2JlYWNvbl9maWx0ZXJfdGFibGUod3Zp ZiwgYmZfdGJsKTsNCisJaWYgKCFyZXQpDQorCQlyZXQgPSBoaWZfYmVhY29uX2ZpbHRlcl9jb250 cm9sKHd2aWYsIGJmX2N0cmwuZW5hYmxlLCBiZl9jdHJsLmJjbl9jb3VudCk7DQorCWlmICghcmV0 KQ0KKwkJcmV0ID0gd2Z4X3NldF9tY2FzdF9maWx0ZXIod3ZpZiwgJnd2aWYtPm1jYXN0X2ZpbHRl cik7DQorCWlmIChyZXQpDQorCQlkZXZfZXJyKHd2aWYtPndkZXYtPmRldiwgInVwZGF0ZSBmaWx0 ZXJpbmcgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCisJa2ZyZWUoYmZfdGJsKTsNCit9DQorDQordm9p ZCB3ZnhfdXBkYXRlX2ZpbHRlcmluZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7 DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3Znhf dmlmLCB1cGRhdGVfZmlsdGVyaW5nX3dvcmspOw0KKw0KKwl3ZnhfdXBkYXRlX2ZpbHRlcmluZyh3 dmlmKTsNCit9DQorDQordTY0IHdmeF9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jX2xpc3QpDQorew0KKwlpbnQg aTsNCisJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsNCisJc3RydWN0IHdmeF92aWYgKnd2aWYg PSBOVUxMOw0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Ow0KKwlpbnQgY291bnQg PSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KG1jX2xpc3QpOw0KKw0KKwl3aGlsZSAoKHd2aWYg PSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpIHsNCisJCW1lbXNldCgmd3ZpZi0+ bWNhc3RfZmlsdGVyLCAweDAwLCBzaXplb2Yod3ZpZi0+bWNhc3RfZmlsdGVyKSk7DQorCQlpZiAo IWNvdW50IHx8IGNvdW50ID4gQVJSQVlfU0laRSh3dmlmLT5tY2FzdF9maWx0ZXIuYWRkcmVzc19s aXN0KSkNCisJCQljb250aW51ZTsNCisNCisJCWkgPSAwOw0KKwkJbmV0ZGV2X2h3X2FkZHJfbGlz dF9mb3JfZWFjaChoYSwgbWNfbGlzdCkgew0KKwkJCWV0aGVyX2FkZHJfY29weSh3dmlmLT5tY2Fz dF9maWx0ZXIuYWRkcmVzc19saXN0W2ldLCBoYS0+YWRkcik7DQorCQkJaSsrOw0KKwkJfQ0KKwkJ d3ZpZi0+bWNhc3RfZmlsdGVyLmVuYWJsZSA9IDE7DQorCQl3dmlmLT5tY2FzdF9maWx0ZXIubnVt X2FkZHJlc3NlcyA9IGNvdW50Ow0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIHdm eF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAgdW5z aWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsDQorCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2Zs YWdzLA0KKwkJCSAgICAgdTY0IHVudXNlZCkNCit7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0g TlVMTDsNCisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsNCisNCisJKnRvdGFsX2Zs YWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfRkNTRkFJTCB8IEZJRl9QUk9CRV9SRVE7DQorDQor CXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgew0KKwkJ ZG93bigmd3ZpZi0+c2Nhbi5sb2NrKTsNCisJCXd2aWYtPmZpbHRlcl9ic3NpZCA9ICgqdG90YWxf ZmxhZ3MgJiAoRklGX09USEVSX0JTUyB8IEZJRl9QUk9CRV9SRVEpKSA/IDAgOiAxOw0KKwkJd3Zp Zi0+ZGlzYWJsZV9iZWFjb25fZmlsdGVyID0gISgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPQkVfUkVR KTsNCisJCXdmeF9md2RfcHJvYmVfcmVxKHd2aWYsIHRydWUpOw0KKwkJd2Z4X3VwZGF0ZV9maWx0 ZXJpbmcod3ZpZik7DQorCQl1cCgmd3ZpZi0+c2Nhbi5sb2NrKTsNCisJfQ0KK30NCisNCitpbnQg d2Z4X2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYsDQorCQkgICB1MTYgcXVldWUsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVf cGFyYW1zICpwYXJhbXMpDQorew0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Ow0K KwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB2aWYtPmRydl9wcml2 Ow0KKwlpbnQgcmV0ID0gMDsNCisJLyogVG8gcHJldmVudCByZS1hcHBseWluZyBQTSByZXF1ZXN0 IE9JRCBhZ2FpbiBhbmQgYWdhaW4qLw0KKwl1MTYgb2xkX3VhcHNkX2ZsYWdzLCBuZXdfdWFwc2Rf ZmxhZ3M7DQorCXN0cnVjdCBoaWZfcmVxX2VkY2FfcXVldWVfcGFyYW1zICplZGNhOw0KKw0KKwlt dXRleF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCisNCisJaWYgKHF1ZXVlIDwgaHctPnF1ZXVl cykgew0KKwkJb2xkX3VhcHNkX2ZsYWdzID0gKigodTE2ICopICZ3dmlmLT51YXBzZF9pbmZvKTsN CisJCWVkY2EgPSAmd3ZpZi0+ZWRjYS5wYXJhbXNbcXVldWVdOw0KKw0KKwkJd3ZpZi0+ZWRjYS51 YXBzZF9lbmFibGVbcXVldWVdID0gcGFyYW1zLT51YXBzZDsNCisJCWVkY2EtPmFpZnNuID0gcGFy YW1zLT5haWZzOw0KKwkJZWRjYS0+Y3dfbWluID0gcGFyYW1zLT5jd19taW47DQorCQllZGNhLT5j d19tYXggPSBwYXJhbXMtPmN3X21heDsNCisJCWVkY2EtPnR4X29wX2xpbWl0ID0gcGFyYW1zLT50 eG9wICogVFhPUF9VTklUOw0KKwkJZWRjYS0+YWxsb3dlZF9tZWRpdW1fdGltZSA9IDA7DQorCQly ZXQgPSBoaWZfc2V0X2VkY2FfcXVldWVfcGFyYW1zKHd2aWYsIGVkY2EpOw0KKwkJaWYgKHJldCkg ew0KKwkJCXJldCA9IC1FSU5WQUw7DQorCQkJZ290byBvdXQ7DQorCQl9DQorDQorCQlpZiAod3Zp Zi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsNCisJCQlyZXQgPSB3Znhf c2V0X3VhcHNkX3BhcmFtKHd2aWYsICZ3dmlmLT5lZGNhKTsNCisJCQluZXdfdWFwc2RfZmxhZ3Mg PSAqKCh1MTYgKikgJnd2aWYtPnVhcHNkX2luZm8pOw0KKwkJCWlmICghcmV0ICYmIHd2aWYtPnNl dGJzc3BhcmFtc19kb25lICYmDQorCQkJICAgIHd2aWYtPnN0YXRlID09IFdGWF9TVEFURV9TVEEg JiYNCisJCQkgICAgb2xkX3VhcHNkX2ZsYWdzICE9IG5ld191YXBzZF9mbGFncykNCisJCQkJcmV0 ID0gd2Z4X3NldF9wbSh3dmlmLCAmd3ZpZi0+cG93ZXJzYXZlX21vZGUpOw0KKwkJfQ0KKwl9IGVs c2Ugew0KKwkJcmV0ID0gLUVJTlZBTDsNCisJfQ0KKw0KK291dDoNCisJbXV0ZXhfdW5sb2NrKCZ3 ZGV2LT5jb25mX211dGV4KTsNCisJcmV0dXJuIHJldDsNCit9DQorDQoraW50IHdmeF9zZXRfcG0o c3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHN0cnVjdCBoaWZfcmVxX3NldF9wbV9tb2RlICph cmcpDQorew0KKwlzdHJ1Y3QgaGlmX3JlcV9zZXRfcG1fbW9kZSBwbSA9ICphcmc7DQorCXUxNiB1 YXBzZF9mbGFnczsNCisJaW50IHJldDsNCisNCisJaWYgKHd2aWYtPnN0YXRlICE9IFdGWF9TVEFU RV9TVEEgfHwgIXd2aWYtPmJzc19wYXJhbXMuYWlkKQ0KKwkJcmV0dXJuIDA7DQorDQorCW1lbWNw eSgmdWFwc2RfZmxhZ3MsICZ3dmlmLT51YXBzZF9pbmZvLCBzaXplb2YodWFwc2RfZmxhZ3MpKTsN CisNCisJaWYgKHVhcHNkX2ZsYWdzICE9IDApDQorCQlwbS5wbV9tb2RlLmZhc3RfcHNtID0gMDsN CisNCisJLy8gS2VybmVsIGRpc2FibGUgUG93ZXJTYXZlIHdoZW4gbXVsdGlwbGUgdmlmcyBhcmUg aW4gdXNlLiBJbiBjb250cmFyeSwNCisJLy8gaXQgaXMgYWJzb2x1dGx5IG5lY2Vzc2FyeSB0byBl bmFibGUgUG93ZXJTYXZlIGZvciBXRjIwMA0KKwlpZiAod3ZpZl9jb3VudCh3dmlmLT53ZGV2KSA+ IDEpIHsNCisJCXBtLnBtX21vZGUuZW50ZXJfcHNtID0gMTsNCisJCXBtLnBtX21vZGUuZmFzdF9w c20gPSAwOw0KKwl9DQorDQorCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3dmlm LT5zZXRfcG1fbW9kZV9jb21wbGV0ZSwgbXNlY3NfdG9famlmZmllcygzMDApKSkNCisJCWRldl93 YXJuKHd2aWYtPndkZXYtPmRldiwgInRpbWVvdXQgd2hpbGUgd2FpdGluZyBvZiBzZXRfcG1fbW9k ZV9jb21wbGV0ZVxuIik7DQorCXJldCA9IGhpZl9zZXRfcG0od3ZpZiwgJnBtKTsNCisJLy8gRklY TUU6IHdoeSA/DQorCWlmICgtRVRJTUVET1VUID09IHd2aWYtPnNjYW4uc3RhdHVzKQ0KKwkJd3Zp Zi0+c2Nhbi5zdGF0dXMgPSAxOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgd2Z4X3NldF9y dHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpDQorew0KKwlz dHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9 IE5VTEw7DQorDQorCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0g TlVMTCkNCisJCWhpZl9ydHNfdGhyZXNob2xkKHd2aWYsIHZhbHVlKTsNCisJcmV0dXJuIDA7DQor fQ0KKw0KKy8qIElmIHN1Y2Nlc3NmdWwsIExPQ0tTIHRoZSBUWCBxdWV1ZSEgKi8NCitzdGF0aWMg aW50IF9fd2Z4X2ZsdXNoKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBib29sIGRyb3ApDQorew0KKwlp bnQgcmV0Ow0KKw0KKwlmb3IgKDs7KSB7DQorCQlpZiAoZHJvcCkgew0KKwkJCXdmeF90eF9xdWV1 ZXNfY2xlYXIod2Rldik7DQorCQl9IGVsc2Ugew0KKwkJCXJldCA9IHdhaXRfZXZlbnRfdGltZW91 dCgNCisJCQkJd2Rldi0+dHhfcXVldWVfc3RhdHMud2FpdF9saW5rX2lkX2VtcHR5LA0KKwkJCQl3 ZnhfdHhfcXVldWVzX2lzX2VtcHR5KHdkZXYpLA0KKwkJCQkyICogSFopOw0KKwkJfQ0KKw0KKwkJ aWYgKCFkcm9wICYmIHJldCA8PSAwKSB7DQorCQkJcmV0ID0gLUVUSU1FRE9VVDsNCisJCQlicmVh azsNCisJCX0NCisJCXJldCA9IDA7DQorDQorCQl3ZnhfdHhfbG9ja19mbHVzaCh3ZGV2KTsNCisJ CWlmICghd2Z4X3R4X3F1ZXVlc19pc19lbXB0eSh3ZGV2KSkgew0KKwkJCS8qIEhpZ2hseSB1bmxp a2VseTogV1NNIHJlcXVldWVkIGZyYW1lcy4gKi8NCisJCQl3ZnhfdHhfdW5sb2NrKHdkZXYpOw0K KwkJCWNvbnRpbnVlOw0KKwkJfQ0KKwkJYnJlYWs7DQorCX0NCisJcmV0dXJuIHJldDsNCit9DQor DQordm9pZCB3ZnhfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYsDQorCQkgIHUzMiBxdWV1ZXMsIGJvb2wgZHJvcCkNCit7DQorCXN0cnVjdCB3 ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmOw0KKw0KKwlp ZiAodmlmKSB7DQorCQl3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3ByaXY7DQor CQlpZiAod3ZpZi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpDQorCQkJZHJv cCA9IHRydWU7DQorCQlpZiAod3ZpZi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICYm ICF3dmlmLT5lbmFibGVfYmVhY29uKQ0KKwkJCWRyb3AgPSB0cnVlOw0KKwl9DQorDQorCS8vIEZJ WE1FOiBvbmx5IGZsdXNoIHJlcXVlc3RlZCB2aWYNCisJaWYgKCFfX3dmeF9mbHVzaCh3ZGV2LCBk cm9wKSkNCisJCXdmeF90eF91bmxvY2sod2Rldik7DQorfQ0KKw0KKy8qIFdTTSBjYWxsYmFja3Mg Ki8NCisNCitzdGF0aWMgdm9pZCB3ZnhfZXZlbnRfcmVwb3J0X3Jzc2koc3RydWN0IHdmeF92aWYg Knd2aWYsIHVpbnQ4X3QgcmF3X3JjcGlfcnNzaSkNCit7DQorCS8qIFJTU0k6IHNpZ25lZCBROC4w LCBSQ1BJOiB1bnNpZ25lZCBRNy4xDQorCSAqIFJTU0kgPSBSQ1BJIC8gMiAtIDExMA0KKwkgKi8N CisJaW50IHJjcGlfcnNzaTsNCisJaW50IGNxbV9ldnQ7DQorDQorCXJjcGlfcnNzaSA9IHJhd19y Y3BpX3Jzc2kgLyAyIC0gMTEwOw0KKwlpZiAocmNwaV9yc3NpIDw9IHd2aWYtPmNxbV9yc3NpX3Ro b2xkKQ0KKwkJY3FtX2V2dCA9IE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5UX0xPVzsN CisJZWxzZQ0KKwkJY3FtX2V2dCA9IE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5UX0hJ R0g7DQorCWllZWU4MDIxMV9jcW1fcnNzaV9ub3RpZnkod3ZpZi0+dmlmLCBjcW1fZXZ0LCByY3Bp X3Jzc2ksIEdGUF9LRVJORUwpOw0KK30NCisNCit2b2lkIHdmeF9ldmVudF9oYW5kbGVyX3dvcmso c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPQ0K KwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCBldmVudF9oYW5kbGVyX3dvcmsp Ow0KKwlzdHJ1Y3Qgd2Z4X2hpZl9ldmVudCAqZXZlbnQ7DQorDQorCUxJU1RfSEVBRChsaXN0KTsN CisNCisJc3Bpbl9sb2NrKCZ3dmlmLT5ldmVudF9xdWV1ZV9sb2NrKTsNCisJbGlzdF9zcGxpY2Vf aW5pdCgmd3ZpZi0+ZXZlbnRfcXVldWUsICZsaXN0KTsNCisJc3Bpbl91bmxvY2soJnd2aWYtPmV2 ZW50X3F1ZXVlX2xvY2spOw0KKw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmbGlzdCwg bGluaykgew0KKwkJc3dpdGNoIChldmVudC0+ZXZ0LmV2ZW50X2lkKSB7DQorCQljYXNlIEhJRl9F VkVOVF9JTkRfQlNTTE9TVDoNCisJCQljYW5jZWxfd29ya19zeW5jKCZ3dmlmLT51bmpvaW5fd29y ayk7DQorCQkJaWYgKCFkb3duX3RyeWxvY2soJnd2aWYtPnNjYW4ubG9jaykpIHsNCisJCQkJd2Z4 X2NxbV9ic3Nsb3NzX3NtKHd2aWYsIDEsIDAsIDApOw0KKwkJCQl1cCgmd3ZpZi0+c2Nhbi5sb2Nr KTsNCisJCQl9IGVsc2Ugew0KKwkJCQkvKiBTY2FuIGlzIGluIHByb2dyZXNzLiBEZWxheSByZXBv cnRpbmcuDQorCQkJCSAqIFNjYW4gY29tcGxldGUgd2lsbCB0cmlnZ2VyIGJzc19sb3NzX3dvcmsN CisJCQkJICovDQorCQkJCXd2aWYtPmRlbGF5ZWRfbGlua19sb3NzID0gMTsNCisJCQkJLyogQWxz byBzdGFydCBhIHdhdGNoZG9nLiAqLw0KKwkJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnd2aWYt PmJzc19sb3NzX3dvcmssIDUgKiBIWik7DQorCQkJfQ0KKwkJCWJyZWFrOw0KKwkJY2FzZSBISUZf RVZFTlRfSU5EX0JTU1JFR0FJTkVEOg0KKwkJCXdmeF9jcW1fYnNzbG9zc19zbSh3dmlmLCAwLCAw LCAwKTsNCisJCQljYW5jZWxfd29ya19zeW5jKCZ3dmlmLT51bmpvaW5fd29yayk7DQorCQkJYnJl YWs7DQorCQljYXNlIEhJRl9FVkVOVF9JTkRfUkNQSV9SU1NJOg0KKwkJCXdmeF9ldmVudF9yZXBv cnRfcnNzaSh3dmlmLCBldmVudC0+ZXZ0LmV2ZW50X2RhdGEucmNwaV9yc3NpKTsNCisJCQlicmVh azsNCisJCWNhc2UgSElGX0VWRU5UX0lORF9QU19NT0RFX0VSUk9SOg0KKwkJCWRldl93YXJuKHd2 aWYtPndkZXYtPmRldiwgImVycm9yIHdoaWxlIHByb2Nlc3NpbmcgcG93ZXIgc2F2ZSByZXF1ZXN0 XG4iKTsNCisJCQlicmVhazsNCisJCWRlZmF1bHQ6DQorCQkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ ZGV2LCAidW5oYW5kbGVkIGV2ZW50IGluZGljYXRpb246ICUuMnhcbiIsIGV2ZW50LT5ldnQuZXZl bnRfaWQpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorCV9fd2Z4X2ZyZWVfZXZlbnRfcXVldWUo Jmxpc3QpOw0KK30NCisNCit2b2lkIHdmeF9ic3NfbG9zc193b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykNCit7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gY29udGFpbmVyX29mKHdvcmss IHN0cnVjdCB3ZnhfdmlmLCBic3NfbG9zc193b3JrLndvcmspOw0KKw0KKwlpZWVlODAyMTFfY29u bmVjdGlvbl9sb3NzKHd2aWYtPnZpZik7DQorfQ0KKw0KK3ZvaWQgd2Z4X2Jzc19wYXJhbXNfd29y ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9 IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgYnNzX3BhcmFtc193b3JrKTsNCisN CisJbXV0ZXhfbG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRleCk7DQorCXd2aWYtPmJzc19wYXJh bXMuYnNzX2ZsYWdzLmxvc3RfY291bnRfb25seSA9IDE7DQorCWhpZl9zZXRfYnNzX3BhcmFtcyh3 dmlmLCAmd3ZpZi0+YnNzX3BhcmFtcyk7DQorCXd2aWYtPmJzc19wYXJhbXMuYnNzX2ZsYWdzLmxv c3RfY291bnRfb25seSA9IDA7DQorCW11dGV4X3VubG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRl eCk7DQorfQ0KKw0KK3ZvaWQgd2Z4X3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZF93b3JrKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gY29udGFp bmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCBzZXRfYmVhY29uX3dha2V1cF9wZXJpb2Rfd29y ayk7DQorDQorCWhpZl9zZXRfYmVhY29uX3dha2V1cF9wZXJpb2Qod3ZpZiwgd3ZpZi0+ZHRpbV9w ZXJpb2QsIHd2aWYtPmR0aW1fcGVyaW9kKTsNCit9DQorDQorc3RhdGljIHZvaWQgd2Z4X2RvX3Vu am9pbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikNCit7DQorCW11dGV4X2xvY2soJnd2aWYtPndkZXYt PmNvbmZfbXV0ZXgpOw0KKw0KKwlpZiAoYXRvbWljX3JlYWQoJnd2aWYtPnNjYW4uaW5fcHJvZ3Jl c3MpKSB7DQorCQlpZiAod3ZpZi0+ZGVsYXllZF91bmpvaW4pDQorCQkJZGV2X2RiZyh3dmlmLT53 ZGV2LT5kZXYsICJkZWxheWVkIHVuam9pbiBpcyBhbHJlYWR5IHNjaGVkdWxlZFxuIik7DQorCQll bHNlDQorCQkJd3ZpZi0+ZGVsYXllZF91bmpvaW4gPSB0cnVlOw0KKwkJZ290byBkb25lOw0KKwl9 DQorDQorCXd2aWYtPmRlbGF5ZWRfbGlua19sb3NzID0gZmFsc2U7DQorDQorCWlmICghd3ZpZi0+ c3RhdGUpDQorCQlnb3RvIGRvbmU7DQorDQorCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RBVEVf QVApDQorCQlnb3RvIGRvbmU7DQorDQorCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPnVwZGF0ZV9m aWx0ZXJpbmdfd29yayk7DQorCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPnNldF9iZWFjb25fd2Fr ZXVwX3BlcmlvZF93b3JrKTsNCisJd3ZpZi0+c3RhdGUgPSBXRlhfU1RBVEVfUEFTU0lWRTsNCisN CisJLyogVW5qb2luIGlzIGEgcmVzZXQuICovDQorCXdmeF90eF9mbHVzaCh3dmlmLT53ZGV2KTsN CisJaGlmX2tlZXBfYWxpdmVfcGVyaW9kKHd2aWYsIDApOw0KKwloaWZfcmVzZXQod3ZpZiwgZmFs c2UpOw0KKwloaWZfc2V0X291dHB1dF9wb3dlcih3dmlmLCB3dmlmLT53ZGV2LT5vdXRwdXRfcG93 ZXIgKiAxMCk7DQorCXd2aWYtPmR0aW1fcGVyaW9kID0gMDsNCisJaGlmX3NldF9tYWNhZGRyKHd2 aWYsIHd2aWYtPnZpZi0+YWRkcik7DQorCXdmeF9mcmVlX2V2ZW50X3F1ZXVlKHd2aWYpOw0KKwlj YW5jZWxfd29ya19zeW5jKCZ3dmlmLT5ldmVudF9oYW5kbGVyX3dvcmspOw0KKwl3ZnhfY3FtX2Jz c2xvc3Nfc20od3ZpZiwgMCwgMCwgMCk7DQorDQorCS8qIERpc2FibGUgQmxvY2sgQUNLcyAqLw0K KwloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMCwgMCk7DQorDQorCXd2aWYtPmRpc2Fi bGVfYmVhY29uX2ZpbHRlciA9IGZhbHNlOw0KKwl3ZnhfdXBkYXRlX2ZpbHRlcmluZyh3dmlmKTsN CisJbWVtc2V0KCZ3dmlmLT5ic3NfcGFyYW1zLCAwLCBzaXplb2Yod3ZpZi0+YnNzX3BhcmFtcykp Ow0KKwl3dmlmLT5zZXRic3NwYXJhbXNfZG9uZSA9IGZhbHNlOw0KKwltZW1zZXQoJnd2aWYtPmh0 X2luZm8sIDAsIHNpemVvZih3dmlmLT5odF9pbmZvKSk7DQorDQorZG9uZToNCisJbXV0ZXhfdW5s b2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsNCit9DQorDQorc3RhdGljIHZvaWQgd2Z4X3Nl dF9tZnAoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcykNCit7 DQorCWNvbnN0IGludCBwYWlyd2lzZV9jaXBoZXJfc3VpdGVfY291bnRfb2Zmc2V0ID0gOCAvIHNp emVvZih1aW50MTZfdCk7DQorCWNvbnN0IGludCBwYWlyd2lzZV9jaXBoZXJfc3VpdGVfc2l6ZSA9 IDQgLyBzaXplb2YodWludDE2X3QpOw0KKwljb25zdCBpbnQgYWttX3N1aXRlX3NpemUgPSA0IC8g c2l6ZW9mKHVpbnQxNl90KTsNCisJY29uc3QgdWludDE2X3QgKnB0ciA9IE5VTEw7DQorCWJvb2wg bWZwYyA9IGZhbHNlOw0KKwlib29sIG1mcHIgPSBmYWxzZTsNCisNCisJLyogODAyLjExdyBwcm90 ZWN0ZWQgbWdtdCBmcmFtZXMgKi8NCisNCisJLyogcmV0cmlldmUgTUZQQyBhbmQgTUZQUiBmbGFn cyBmcm9tIGJlYWNvbiBvciBQQlJTUCAqLw0KKw0KKwlyY3VfcmVhZF9sb2NrKCk7DQorCWlmIChi c3MpDQorCQlwdHIgPSAoY29uc3QgdWludDE2X3QgKikgaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNz LCBXTEFOX0VJRF9SU04pOw0KKw0KKwlpZiAocHRyKSB7DQorCQlwdHIgKz0gcGFpcndpc2VfY2lw aGVyX3N1aXRlX2NvdW50X29mZnNldDsNCisJCXB0ciArPSAxICsgcGFpcndpc2VfY2lwaGVyX3N1 aXRlX3NpemUgKiAqcHRyOw0KKwkJcHRyICs9IDEgKyBha21fc3VpdGVfc2l6ZSAqICpwdHI7DQor CQltZnByID0gKnB0ciAmIEJJVCg2KTsNCisJCW1mcGMgPSAqcHRyICYgQklUKDcpOw0KKwl9DQor CXJjdV9yZWFkX3VubG9jaygpOw0KKw0KKwloaWZfc2V0X21mcCh3dmlmLCBtZnBjLCBtZnByKTsN Cit9DQorDQorLyogTVVTVCBiZSBjYWxsZWQgd2l0aCB0eF9sb2NrIGhlbGQhICBJdCB3aWxsIGJl IHVubG9ja2VkIGZvciB1cy4gKi8NCitzdGF0aWMgdm9pZCB3ZnhfZG9fam9pbihzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZikNCit7DQorCWNvbnN0IHU4ICpic3NpZDsNCisJc3RydWN0IGllZWU4MDIxMV9i c3NfY29uZiAqY29uZiA9ICZ3dmlmLT52aWYtPmJzc19jb25mOw0KKwlzdHJ1Y3QgY2ZnODAyMTFf YnNzICpic3MgPSBOVUxMOw0KKwlzdHJ1Y3QgaGlmX3JlcV9qb2luIGpvaW4gPSB7DQorCQkubW9k ZSA9IGNvbmYtPmlic3Nfam9pbmVkID8gSElGX01PREVfSUJTUyA6IEhJRl9NT0RFX0JTUywNCisJ CS5wcmVhbWJsZV90eXBlID0gY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlID8gSElGX1BSRUFNQkxF X1NIT1JUIDogSElGX1BSRUFNQkxFX0xPTkcsDQorCQkucHJvYmVfZm9yX2pvaW4gPSAxLA0KKwkJ LmF0aW1fd2luZG93ID0gMCwNCisJCS5iYXNpY19yYXRlX3NldCA9IHdmeF9yYXRlX21hc2tfdG9f aHcod3ZpZi0+d2RldiwgY29uZi0+YmFzaWNfcmF0ZXMpLA0KKwl9Ow0KKw0KKwlpZiAod3ZpZi0+ Y2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JUikNCisJCWpvaW4ucHJvYmVfZm9y X2pvaW4gPSAwOw0KKw0KKwlpZiAod3ZpZi0+c3RhdGUpDQorCQl3ZnhfZG9fdW5qb2luKHd2aWYp Ow0KKw0KKwlic3NpZCA9IHd2aWYtPnZpZi0+YnNzX2NvbmYuYnNzaWQ7DQorDQorCWJzcyA9IGNm ZzgwMjExX2dldF9ic3Mod3ZpZi0+d2Rldi0+aHctPndpcGh5LCB3dmlmLT5jaGFubmVsLCBic3Np ZCwgTlVMTCwgMCwNCisJCQkgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwgSUVFRTgwMjEx X1BSSVZBQ1lfQU5ZKTsNCisNCisJaWYgKCFic3MgJiYgIWNvbmYtPmlic3Nfam9pbmVkKSB7DQor CQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCW11dGV4 X2xvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOw0KKw0KKwkvKiBVbmRlciB0aGUgY29uZiBs b2NrOiBjaGVjayBzY2FuIHN0YXR1cyBhbmQNCisJICogYmFpbCBvdXQgaWYgaXQgaXMgaW4gcHJv Z3Jlc3MuDQorCSAqLw0KKwlpZiAoYXRvbWljX3JlYWQoJnd2aWYtPnNjYW4uaW5fcHJvZ3Jlc3Mp KSB7DQorCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOw0KKwkJZ290byBkb25lX3B1dDsNCisJ fQ0KKw0KKwkvKiBTYW5pdHkgY2hlY2sgYmFzaWMgcmF0ZXMgKi8NCisJaWYgKCFqb2luLmJhc2lj X3JhdGVfc2V0KQ0KKwkJam9pbi5iYXNpY19yYXRlX3NldCA9IDc7DQorDQorCS8qIFNhbml0eSBj aGVjayBiZWFjb24gaW50ZXJ2YWwgKi8NCisJaWYgKCF3dmlmLT5iZWFjb25faW50KQ0KKwkJd3Zp Zi0+YmVhY29uX2ludCA9IDE7DQorDQorCWpvaW4uYmVhY29uX2ludGVydmFsID0gd3ZpZi0+YmVh Y29uX2ludDsNCisNCisJLy8gRFRJTSBwZXJpb2Qgd2lsbCBiZSBzZXQgb24gZmlyc3QgQmVhY29u DQorCXd2aWYtPmR0aW1fcGVyaW9kID0gMDsNCisNCisJam9pbi5jaGFubmVsX251bWJlciA9IHd2 aWYtPmNoYW5uZWwtPmh3X3ZhbHVlOw0KKwltZW1jcHkoam9pbi5ic3NpZCwgYnNzaWQsIHNpemVv Zihqb2luLmJzc2lkKSk7DQorDQorCWlmICghY29uZi0+aWJzc19qb2luZWQpIHsNCisJCWNvbnN0 IHU4ICpzc2lkaWU7DQorDQorCQlyY3VfcmVhZF9sb2NrKCk7DQorCQlzc2lkaWUgPSBpZWVlODAy MTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NTSUQpOw0KKwkJaWYgKHNzaWRpZSkgew0KKwkJ CWpvaW4uc3NpZF9sZW5ndGggPSBzc2lkaWVbMV07DQorCQkJbWVtY3B5KGpvaW4uc3NpZCwgJnNz aWRpZVsyXSwgam9pbi5zc2lkX2xlbmd0aCk7DQorCQl9DQorCQlyY3VfcmVhZF91bmxvY2soKTsN CisJfQ0KKw0KKwl3ZnhfdHhfZmx1c2god3ZpZi0+d2Rldik7DQorDQorCWlmICh3dmlmX2NvdW50 KHd2aWYtPndkZXYpIDw9IDEpDQorCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHhG RiwgMHhGRik7DQorDQorCXdmeF9zZXRfbWZwKHd2aWYsIGJzcyk7DQorDQorCS8qIFBlcmZvcm0g YWN0dWFsIGpvaW4gKi8NCisJd3ZpZi0+d2Rldi0+dHhfYnVyc3RfaWR4ID0gLTE7DQorCWlmICho aWZfam9pbih3dmlmLCAmam9pbikpIHsNCisJCWllZWU4MDIxMV9jb25uZWN0aW9uX2xvc3Mod3Zp Zi0+dmlmKTsNCisJCXd2aWYtPmpvaW5fY29tcGxldGVfc3RhdHVzID0gLTE7DQorCQkvKiBUeCBs b2NrIHN0aWxsIGhlbGQsIHVuam9pbiB3aWxsIGNsZWFyIGl0LiAqLw0KKwkJaWYgKCFzY2hlZHVs ZV93b3JrKCZ3dmlmLT51bmpvaW5fd29yaykpDQorCQkJd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2 KTsNCisJfSBlbHNlIHsNCisJCXd2aWYtPmpvaW5fY29tcGxldGVfc3RhdHVzID0gMDsNCisJCWlm ICh3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpDQorCQkJd3ZpZi0+c3Rh dGUgPSBXRlhfU1RBVEVfSUJTUzsNCisJCWVsc2UNCisJCQl3dmlmLT5zdGF0ZSA9IFdGWF9TVEFU RV9QUkVfU1RBOw0KKwkJd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsNCisNCisJCS8qIFVwbG9h ZCBrZXlzICovDQorCQl3ZnhfdXBsb2FkX2tleXMod3ZpZik7DQorDQorCQkvKiBEdWUgdG8gYmVh Y29uIGZpbHRlcmluZyBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZQ0KKwkJICogQVAncyBiZWFjb24g aXMgbm90IGtub3duIGZvciB0aGUgbWFjODAyMTEgc3RhY2suDQorCQkgKiBEaXNhYmxlIGZpbHRl cmluZyB0ZW1wb3JhcnkgdG8gbWFrZSBzdXJlIHRoZSBzdGFjaw0KKwkJICogcmVjZWl2ZXMgYXQg bGVhc3Qgb25lDQorCQkgKi8NCisJCXd2aWYtPmRpc2FibGVfYmVhY29uX2ZpbHRlciA9IHRydWU7 DQorCX0NCisJd2Z4X3VwZGF0ZV9maWx0ZXJpbmcod3ZpZik7DQorDQorZG9uZV9wdXQ6DQorCW11 dGV4X3VubG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRleCk7DQorCWlmIChic3MpDQorCQljZmc4 MDIxMV9wdXRfYnNzKHd2aWYtPndkZXYtPmh3LT53aXBoeSwgYnNzKTsNCit9DQorDQordm9pZCB3 ZnhfdW5qb2luX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IHdm eF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIHVuam9pbl93 b3JrKTsNCisNCisJd2Z4X2RvX3Vuam9pbih3dmlmKTsNCisJd2Z4X3R4X3VubG9jayh3dmlmLT53 ZGV2KTsNCit9DQorDQoraW50IHdmeF9zdGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBz dHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkN Cit7DQorCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQorCXN0cnVjdCB3Znhfdmlm ICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCB3Znhf c3RhX3ByaXYgKnN0YV9wcml2ID0gKHN0cnVjdCB3Znhfc3RhX3ByaXYgKikgJnN0YS0+ZHJ2X3By aXY7DQorCXN0cnVjdCB3ZnhfbGlua19lbnRyeSAqZW50cnk7DQorCXN0cnVjdCBza19idWZmICpz a2I7DQorDQorCWlmICh3dmlmLT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApDQorCQly ZXR1cm4gMDsNCisNCisJc3RhX3ByaXYtPnZpZl9pZCA9IHd2aWYtPmlkOw0KKwlzdGFfcHJpdi0+ bGlua19pZCA9IHdmeF9maW5kX2xpbmtfaWQod3ZpZiwgc3RhLT5hZGRyKTsNCisJaWYgKCFzdGFf cHJpdi0+bGlua19pZCkgew0KKwkJZGV2X3dhcm4od2Rldi0+ZGV2LCAibW8gbW9yZSBsaW5rLWlk IGF2YWlsYWJsZVxuIik7DQorCQlyZXR1cm4gLUVOT0VOVDsNCisJfQ0KKw0KKwllbnRyeSA9ICZ3 dmlmLT5saW5rX2lkX2RiW3N0YV9wcml2LT5saW5rX2lkIC0gMV07DQorCXNwaW5fbG9ja19iaCgm d3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorCWlmICgoc3RhLT51YXBzZF9xdWV1ZXMgJiBJRUVFODAy MTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX01BU0spID09DQorCQkJCQlJRUVFODAyMTFfV01NX0lF X1NUQV9RT1NJTkZPX0FDX01BU0spDQorCQl3dmlmLT5zdGFfYXNsZWVwX21hc2sgfD0gQklUKHN0 YV9wcml2LT5saW5rX2lkKTsNCisJZW50cnktPnN0YXR1cyA9IFdGWF9MSU5LX0hBUkQ7DQorCXdo aWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVudHJ5LT5yeF9xdWV1ZSkpKQ0KKwkJaWVlZTgwMjEx X3J4X2lycXNhZmUod2Rldi0+aHcsIHNrYik7DQorCXNwaW5fdW5sb2NrX2JoKCZ3dmlmLT5wc19z dGF0ZV9sb2NrKTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCB3Znhfc3RhX3JlbW92ZShzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgIHN0 cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3 LT5wcml2Ow0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB2aWYt PmRydl9wcml2Ow0KKwlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9IChzdHJ1Y3Qgd2Z4 X3N0YV9wcml2ICopICZzdGEtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgd2Z4X2xpbmtfZW50cnkgKmVu dHJ5Ow0KKw0KKwlpZiAod3ZpZi0+dmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQIHx8ICFz dGFfcHJpdi0+bGlua19pZCkNCisJCXJldHVybiAwOw0KKw0KKwllbnRyeSA9ICZ3dmlmLT5saW5r X2lkX2RiW3N0YV9wcml2LT5saW5rX2lkIC0gMV07DQorCXNwaW5fbG9ja19iaCgmd3ZpZi0+cHNf c3RhdGVfbG9jayk7DQorCWVudHJ5LT5zdGF0dXMgPSBXRlhfTElOS19SRVNFUlZFOw0KKwllbnRy eS0+dGltZXN0YW1wID0gamlmZmllczsNCisJd2Z4X3R4X2xvY2sod2Rldik7DQorCWlmICghc2No ZWR1bGVfd29yaygmd3ZpZi0+bGlua19pZF93b3JrKSkNCisJCXdmeF90eF91bmxvY2sod2Rldik7 DQorCXNwaW5fdW5sb2NrX2JoKCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisJZmx1c2hfd29yaygm d3ZpZi0+bGlua19pZF93b3JrKTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgd2Z4X3NldF9j dHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgc2V0X2N0c193b3JrKTsN CisJdTggZXJwX2llWzNdID0geyBXTEFOX0VJRF9FUlBfSU5GTywgMSwgMCB9Ow0KKwlzdHJ1Y3Qg aGlmX2llX2ZsYWdzIHRhcmdldF9mcmFtZSA9IHsNCisJCS5iZWFjb24gPSAxLA0KKwl9Ow0KKw0K KwltdXRleF9sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsNCisJZXJwX2llWzJdID0gd3Zp Zi0+ZXJwX2luZm87DQorCW11dGV4X3VubG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRleCk7DQor DQorCWhpZl9lcnBfdXNlX3Byb3RlY3Rpb24od3ZpZiwgZXJwX2llWzJdICYgV0xBTl9FUlBfVVNF X1BST1RFQ1RJT04pOw0KKw0KKwlpZiAod3ZpZi0+dmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBF X1NUQVRJT04pDQorCQloaWZfdXBkYXRlX2llKHd2aWYsICZ0YXJnZXRfZnJhbWUsIGVycF9pZSwg c2l6ZW9mKGVycF9pZSkpOw0KK30NCisNCitzdGF0aWMgaW50IHdmeF9zdGFydF9hcChzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZikNCit7DQorCWludCByZXQ7DQorCXN0cnVjdCBpZWVlODAyMTFfYnNzX2Nv bmYgKmNvbmYgPSAmd3ZpZi0+dmlmLT5ic3NfY29uZjsNCisJc3RydWN0IGhpZl9yZXFfc3RhcnQg c3RhcnQgPSB7DQorCQkuY2hhbm5lbF9udW1iZXIgPSB3dmlmLT5jaGFubmVsLT5od192YWx1ZSwN CisJCS5iZWFjb25faW50ZXJ2YWwgPSBjb25mLT5iZWFjb25faW50LA0KKwkJLmR0aW1fcGVyaW9k ID0gY29uZi0+ZHRpbV9wZXJpb2QsDQorCQkucHJlYW1ibGVfdHlwZSA9IGNvbmYtPnVzZV9zaG9y dF9wcmVhbWJsZSA/IEhJRl9QUkVBTUJMRV9TSE9SVCA6IEhJRl9QUkVBTUJMRV9MT05HLA0KKwkJ LmJhc2ljX3JhdGVfc2V0ID0gd2Z4X3JhdGVfbWFza190b19odyh3dmlmLT53ZGV2LCBjb25mLT5i YXNpY19yYXRlcyksDQorCX07DQorDQorCW1lbXNldChzdGFydC5zc2lkLCAwLCBzaXplb2Yoc3Rh cnQuc3NpZCkpOw0KKwlpZiAoIWNvbmYtPmhpZGRlbl9zc2lkKSB7DQorCQlzdGFydC5zc2lkX2xl bmd0aCA9IGNvbmYtPnNzaWRfbGVuOw0KKwkJbWVtY3B5KHN0YXJ0LnNzaWQsIGNvbmYtPnNzaWQs IHN0YXJ0LnNzaWRfbGVuZ3RoKTsNCisJfQ0KKw0KKwl3dmlmLT5iZWFjb25faW50ID0gY29uZi0+ YmVhY29uX2ludDsNCisJd3ZpZi0+ZHRpbV9wZXJpb2QgPSBjb25mLT5kdGltX3BlcmlvZDsNCisN CisJbWVtc2V0KCZ3dmlmLT5saW5rX2lkX2RiLCAwLCBzaXplb2Yod3ZpZi0+bGlua19pZF9kYikp Ow0KKw0KKwl3dmlmLT53ZGV2LT50eF9idXJzdF9pZHggPSAtMTsNCisJcmV0ID0gaGlmX3N0YXJ0 KHd2aWYsICZzdGFydCk7DQorCWlmICghcmV0KQ0KKwkJcmV0ID0gd2Z4X3VwbG9hZF9rZXlzKHd2 aWYpOw0KKwlpZiAoIXJldCkgew0KKwkJaWYgKHd2aWZfY291bnQod3ZpZi0+d2RldikgPD0gMSkN CisJCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7DQorCQl3dmlm LT5zdGF0ZSA9IFdGWF9TVEFURV9BUDsNCisJCXdmeF91cGRhdGVfZmlsdGVyaW5nKHd2aWYpOw0K Kwl9DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgd2Z4X3VwZGF0ZV9iZWFjb25p bmcoc3RydWN0IHdmeF92aWYgKnd2aWYpDQorew0KKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25m ICpjb25mID0gJnd2aWYtPnZpZi0+YnNzX2NvbmY7DQorDQorCWlmICh3dmlmLT52aWYtPnR5cGUg PT0gTkw4MDIxMV9JRlRZUEVfQVApIHsNCisJCS8qIFRPRE86IGNoZWNrIGlmIGNoYW5nZWQgY2hh bm5lbCwgYmFuZCAqLw0KKwkJaWYgKHd2aWYtPnN0YXRlICE9IFdGWF9TVEFURV9BUCB8fA0KKwkJ ICAgIHd2aWYtPmJlYWNvbl9pbnQgIT0gY29uZi0+YmVhY29uX2ludCkgew0KKwkJCXdmeF90eF9s b2NrX2ZsdXNoKHd2aWYtPndkZXYpOw0KKwkJCWlmICh3dmlmLT5zdGF0ZSAhPSBXRlhfU1RBVEVf UEFTU0lWRSkNCisJCQkJaGlmX3Jlc2V0KHd2aWYsIGZhbHNlKTsNCisJCQl3dmlmLT5zdGF0ZSA9 IFdGWF9TVEFURV9QQVNTSVZFOw0KKwkJCXdmeF9zdGFydF9hcCh3dmlmKTsNCisJCQl3ZnhfdHhf dW5sb2NrKHd2aWYtPndkZXYpOw0KKwkJfSBlbHNlIHsNCisJCX0NCisJfQ0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIGludCB3ZnhfdXBsb2FkX2JlYWNvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZikNCit7DQorCWludCByZXQgPSAwOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsNCisJ c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210Ow0KKwlzdHJ1Y3QgaGlmX21pYl90ZW1wbGF0ZV9m cmFtZSAqcDsNCisNCisJaWYgKHd2aWYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFU SU9OIHx8DQorCSAgICB3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiB8 fA0KKwkgICAgd3ZpZi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQ0K KwkJZ290byBkb25lOw0KKw0KKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldCh3dmlmLT53ZGV2 LT5odywgd3ZpZi0+dmlmKTsNCisNCisJaWYgKCFza2IpDQorCQlyZXR1cm4gLUVOT01FTTsNCisN CisJcCA9IChzdHJ1Y3QgaGlmX21pYl90ZW1wbGF0ZV9mcmFtZSAqKSBza2JfcHVzaChza2IsIDQp Ow0KKwlwLT5mcmFtZV90eXBlID0gSElGX1RNUExUX0JDTjsNCisJcC0+aW5pdF9yYXRlID0gQVBJ X1JBVEVfSU5ERVhfQl8xTUJQUzsgLyogMU1icHMgRFNTUyAqLw0KKwlwLT5mcmFtZV9sZW5ndGgg PSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIDQpOw0KKw0KKwlyZXQgPSBoaWZfc2V0X3RlbXBsYXRl X2ZyYW1lKHd2aWYsIHApOw0KKw0KKwlza2JfcHVsbChza2IsIDQpOw0KKw0KKwlpZiAocmV0KQ0K KwkJZ290byBkb25lOw0KKwkvKiBUT0RPOiBEaXN0aWxsIHByb2JlIHJlc3A7IHJlbW92ZSBUSU0g YW5kIGFueSBvdGhlciBiZWFjb24tc3BlY2lmaWMNCisJICogSUVzDQorCSAqLw0KKwltZ210ID0g KHZvaWQgKilza2ItPmRhdGE7DQorCW1nbXQtPmZyYW1lX2NvbnRyb2wgPQ0KKwkJY3B1X3RvX2xl MTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7DQor DQorCXAtPmZyYW1lX3R5cGUgPSBISUZfVE1QTFRfUFJCUkVTOw0KKw0KKwlyZXQgPSBoaWZfc2V0 X3RlbXBsYXRlX2ZyYW1lKHd2aWYsIHApOw0KKwl3ZnhfZndkX3Byb2JlX3JlcSh3dmlmLCBmYWxz ZSk7DQorDQorZG9uZToNCisJaWYgKCFza2IpDQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7DQorCXJl dHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgd2Z4X2lzX2h0KGNvbnN0IHN0cnVjdCB3Znhf aHRfaW5mbyAqaHRfaW5mbykNCit7DQorCXJldHVybiBodF9pbmZvLT5jaGFubmVsX3R5cGUgIT0g Tkw4MDIxMV9DSEFOX05PX0hUOw0KK30NCisNCitzdGF0aWMgaW50IHdmeF9odF9ncmVlbmZpZWxk KGNvbnN0IHN0cnVjdCB3ZnhfaHRfaW5mbyAqaHRfaW5mbykNCit7DQorCXJldHVybiB3ZnhfaXNf aHQoaHRfaW5mbykgJiYNCisJCShodF9pbmZvLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NB UF9HUk5fRkxEKSAmJg0KKwkJIShodF9pbmZvLT5vcGVyYXRpb25fbW9kZSAmDQorCQkgIElFRUU4 MDIxMV9IVF9PUF9NT0RFX05PTl9HRl9TVEFfUFJTTlQpOw0KK30NCisNCitzdGF0aWMgaW50IHdm eF9odF9hbXBkdV9kZW5zaXR5KGNvbnN0IHN0cnVjdCB3ZnhfaHRfaW5mbyAqaHRfaW5mbykNCit7 DQorCWlmICghd2Z4X2lzX2h0KGh0X2luZm8pKQ0KKwkJcmV0dXJuIDA7DQorCXJldHVybiBodF9p bmZvLT5odF9jYXAuYW1wZHVfZGVuc2l0eTsNCit9DQorDQorc3RhdGljIHZvaWQgd2Z4X2pvaW5f ZmluYWxpemUoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYg KmluZm8pDQorew0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gTlVMTDsNCisJc3RydWN0 IGhpZl9taWJfc2V0X2Fzc29jaWF0aW9uX21vZGUgYXNzb2NpYXRpb25fbW9kZSA9IHsgfTsNCisN CisJaWYgKGluZm8tPmR0aW1fcGVyaW9kKQ0KKwkJd3ZpZi0+ZHRpbV9wZXJpb2QgPSBpbmZvLT5k dGltX3BlcmlvZDsNCisJd3ZpZi0+YmVhY29uX2ludCA9IGluZm8tPmJlYWNvbl9pbnQ7DQorDQor CXJjdV9yZWFkX2xvY2soKTsNCisJaWYgKGluZm8tPmJzc2lkICYmICFpbmZvLT5pYnNzX2pvaW5l ZCkNCisJCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh3dmlmLT52aWYsIGluZm8tPmJzc2lkKTsN CisJaWYgKHN0YSkgew0KKwkJd3ZpZi0+aHRfaW5mby5odF9jYXAgPSBzdGEtPmh0X2NhcDsNCisJ CXd2aWYtPmJzc19wYXJhbXMub3BlcmF0aW9uYWxfcmF0ZV9zZXQgPQ0KKwkJCXdmeF9yYXRlX21h c2tfdG9faHcod3ZpZi0+d2Rldiwgc3RhLT5zdXBwX3JhdGVzW3d2aWYtPmNoYW5uZWwtPmJhbmRd KTsNCisJCXd2aWYtPmh0X2luZm8ub3BlcmF0aW9uX21vZGUgPSBpbmZvLT5odF9vcGVyYXRpb25f bW9kZTsNCisJfSBlbHNlIHsNCisJCW1lbXNldCgmd3ZpZi0+aHRfaW5mbywgMCwgc2l6ZW9mKHd2 aWYtPmh0X2luZm8pKTsNCisJCXd2aWYtPmJzc19wYXJhbXMub3BlcmF0aW9uYWxfcmF0ZV9zZXQg PSAtMTsNCisJfQ0KKwlyY3VfcmVhZF91bmxvY2soKTsNCisNCisJLyogTm9uIEdyZWVuZmllbGQg c3RhdGlvbnMgcHJlc2VudCAqLw0KKwlpZiAod3ZpZi0+aHRfaW5mby5vcGVyYXRpb25fbW9kZSAm IElFRUU4MDIxMV9IVF9PUF9NT0RFX05PTl9HRl9TVEFfUFJTTlQpDQorCQloaWZfZHVhbF9jdHNf cHJvdGVjdGlvbih3dmlmLCB0cnVlKTsNCisJZWxzZQ0KKwkJaGlmX2R1YWxfY3RzX3Byb3RlY3Rp b24od3ZpZiwgZmFsc2UpOw0KKw0KKwlhc3NvY2lhdGlvbl9tb2RlLnByZWFtYnR5cGVfdXNlID0g MTsNCisJYXNzb2NpYXRpb25fbW9kZS5tb2RlID0gMTsNCisJYXNzb2NpYXRpb25fbW9kZS5yYXRl c2V0ID0gMTsNCisJYXNzb2NpYXRpb25fbW9kZS5zcGFjaW5nID0gMTsNCisJYXNzb2NpYXRpb25f bW9kZS5wcmVhbWJsZV90eXBlID0gaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlID8gSElGX1BSRUFN QkxFX1NIT1JUIDogSElGX1BSRUFNQkxFX0xPTkc7DQorCWFzc29jaWF0aW9uX21vZGUuYmFzaWNf cmF0ZV9zZXQgPSBjcHVfdG9fbGUzMih3ZnhfcmF0ZV9tYXNrX3RvX2h3KHd2aWYtPndkZXYsIGlu Zm8tPmJhc2ljX3JhdGVzKSk7DQorCWFzc29jaWF0aW9uX21vZGUubWl4ZWRfb3JfZ3JlZW5maWVs ZF90eXBlID0gd2Z4X2h0X2dyZWVuZmllbGQoJnd2aWYtPmh0X2luZm8pOw0KKwlhc3NvY2lhdGlv bl9tb2RlLm1wZHVfc3RhcnRfc3BhY2luZyA9IHdmeF9odF9hbXBkdV9kZW5zaXR5KCZ3dmlmLT5o dF9pbmZvKTsNCisNCisJd2Z4X2NxbV9ic3Nsb3NzX3NtKHd2aWYsIDAsIDAsIDApOw0KKwljYW5j ZWxfd29ya19zeW5jKCZ3dmlmLT51bmpvaW5fd29yayk7DQorDQorCXd2aWYtPmJzc19wYXJhbXMu YmVhY29uX2xvc3RfY291bnQgPSAyMDsNCisJd3ZpZi0+YnNzX3BhcmFtcy5haWQgPSBpbmZvLT5h aWQ7DQorDQorCWlmICh3dmlmLT5kdGltX3BlcmlvZCA8IDEpDQorCQl3dmlmLT5kdGltX3Blcmlv ZCA9IDE7DQorDQorCWhpZl9zZXRfYXNzb2NpYXRpb25fbW9kZSh3dmlmLCAmYXNzb2NpYXRpb25f bW9kZSk7DQorDQorCWlmICghaW5mby0+aWJzc19qb2luZWQpIHsNCisJCWhpZl9rZWVwX2FsaXZl X3BlcmlvZCh3dmlmLCAzMCAvKiBzZWMgKi8pOw0KKwkJaGlmX3NldF9ic3NfcGFyYW1zKHd2aWYs ICZ3dmlmLT5ic3NfcGFyYW1zKTsNCisJCXd2aWYtPnNldGJzc3BhcmFtc19kb25lID0gdHJ1ZTsN CisJCXdmeF9zZXRfYmVhY29uX3dha2V1cF9wZXJpb2Rfd29yaygmd3ZpZi0+c2V0X2JlYWNvbl93 YWtldXBfcGVyaW9kX3dvcmspOw0KKwkJd2Z4X3NldF9wbSh3dmlmLCAmd3ZpZi0+cG93ZXJzYXZl X21vZGUpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgd2Z4X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsDQorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJ CSAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywNCisJCQkgICAgIHUzMiBjaGFu Z2VkKQ0KK3sNCisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsNCisJc3RydWN0IHdm eF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKikgdmlmLT5kcnZfcHJpdjsNCisJYm9vbCBk b19qb2luID0gZmFsc2U7DQorCWludCBpOw0KKwlpbnQgbmJfYXJwX2FkZHI7DQorDQorCW11dGV4 X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOw0KKw0KKwkvKiBUT0RPOiBCU1NfQ0hBTkdFRF9RT1Mg Ki8NCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BUlBfRklMVEVSKSB7DQorCQlzdHJ1Y3Qg aGlmX21pYl9hcnBfaXBfYWRkcl90YWJsZSBmaWx0ZXIgPSB7IH07DQorDQorCQluYl9hcnBfYWRk ciA9IGluZm8tPmFycF9hZGRyX2NudDsNCisJCWlmIChuYl9hcnBfYWRkciA8PSAwIHx8IG5iX2Fy cF9hZGRyID4gSElGX01BWF9BUlBfSVBfQUREUlRBQkxFX0VOVFJJRVMpDQorCQkJbmJfYXJwX2Fk ZHIgPSAwOw0KKw0KKwkJZm9yIChpID0gMDsgaSA8IEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9F TlRSSUVTOyBpKyspIHsNCisJCQlmaWx0ZXIuY29uZGl0aW9uX2lkeCA9IGk7DQorCQkJaWYgKGkg PCBuYl9hcnBfYWRkcikgew0KKwkJCQkvLyBDYXV0aW9uOiB0eXBlIG9mIGFycF9hZGRyX2xpc3Rb aV0gaXMgX19iZTMyDQorCQkJCW1lbWNweShmaWx0ZXIuaXB2NF9hZGRyZXNzLCAmaW5mby0+YXJw X2FkZHJfbGlzdFtpXSwgc2l6ZW9mKGZpbHRlci5pcHY0X2FkZHJlc3MpKTsNCisJCQkJZmlsdGVy LmFycF9lbmFibGUgPSBISUZfQVJQX05TX0ZJTFRFUklOR19FTkFCTEU7DQorCQkJfSBlbHNlIHsN CisJCQkJZmlsdGVyLmFycF9lbmFibGUgPSBISUZfQVJQX05TX0ZJTFRFUklOR19ESVNBQkxFOw0K KwkJCX0NCisJCQloaWZfc2V0X2FycF9pcHY0X2ZpbHRlcih3dmlmLCAmZmlsdGVyKTsNCisJCX0N CisJfQ0KKw0KKwlpZiAoY2hhbmdlZCAmDQorCSAgICAoQlNTX0NIQU5HRURfQkVBQ09OIHwgQlNT X0NIQU5HRURfQVBfUFJPQkVfUkVTUCB8DQorCSAgICAgQlNTX0NIQU5HRURfQlNTSUQgfCBCU1Nf Q0hBTkdFRF9TU0lEIHwgQlNTX0NIQU5HRURfSUJTUykpIHsNCisJCXd2aWYtPmJlYWNvbl9pbnQg PSBpbmZvLT5iZWFjb25faW50Ow0KKwkJd2Z4X3VwZGF0ZV9iZWFjb25pbmcod3ZpZik7DQorCQl3 ZnhfdXBsb2FkX2JlYWNvbih3dmlmKTsNCisJfQ0KKw0KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFO R0VEX0JFQUNPTl9FTkFCTEVEICYmIHd2aWYtPnN0YXRlICE9IFdGWF9TVEFURV9JQlNTKSB7DQor CQlpZiAod3ZpZi0+ZW5hYmxlX2JlYWNvbiAhPSBpbmZvLT5lbmFibGVfYmVhY29uKSB7DQorCQkJ aGlmX2JlYWNvbl90cmFuc21pdCh3dmlmLCBpbmZvLT5lbmFibGVfYmVhY29uKTsNCisJCQl3dmlm LT5lbmFibGVfYmVhY29uID0gaW5mby0+ZW5hYmxlX2JlYWNvbjsNCisJCX0NCisJfQ0KKw0KKwkv KiBhc3NvYy9kaXNhc3NvYywgb3IgbWF5YmUgQUlEIGNoYW5nZWQgKi8NCisJaWYgKGNoYW5nZWQg JiBCU1NfQ0hBTkdFRF9BU1NPQykgew0KKwkJd2Z4X3R4X2xvY2tfZmx1c2god2Rldik7DQorCQl3 dmlmLT53ZXBfZGVmYXVsdF9rZXlfaWQgPSAtMTsNCisJCXdmeF90eF91bmxvY2sod2Rldik7DQor CX0NCisNCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQyAmJiAhaW5mby0+YXNzb2Mg JiYNCisJICAgICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RBVEVfU1RBIHx8IHd2aWYtPnN0YXRlID09 IFdGWF9TVEFURV9JQlNTKSkgew0KKwkJLyogU2hlZHVsZSB1bmpvaW4gd29yayAqLw0KKwkJd2Z4 X3R4X2xvY2sod2Rldik7DQorCQlpZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPnVuam9pbl93b3Jr KSkNCisJCQl3ZnhfdHhfdW5sb2NrKHdkZXYpOw0KKwl9IGVsc2Ugew0KKwkJaWYgKGNoYW5nZWQg JiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKSB7DQorCQkJaWYgKGluZm8tPmlic3Nfam9pbmVkKQ0K KwkJCQlkb19qb2luID0gdHJ1ZTsNCisJCQllbHNlIGlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RB VEVfQVApDQorCQkJCXdmeF91cGRhdGVfYmVhY29uaW5nKHd2aWYpOw0KKwkJfQ0KKw0KKwkJaWYg KGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkNCisJCQlkb19qb2luID0gdHJ1ZTsNCisNCisJ CWlmIChjaGFuZ2VkICYNCisJCSAgICAoQlNTX0NIQU5HRURfQVNTT0MgfCBCU1NfQ0hBTkdFRF9C U1NJRCB8DQorCQkgICAgIEJTU19DSEFOR0VEX0lCU1MgfCBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRF UyB8IEJTU19DSEFOR0VEX0hUKSkgew0KKwkJCWlmIChpbmZvLT5hc3NvYykgew0KKwkJCQlpZiAo d3ZpZi0+c3RhdGUgPCBXRlhfU1RBVEVfUFJFX1NUQSkgew0KKwkJCQkJaWVlZTgwMjExX2Nvbm5l Y3Rpb25fbG9zcyh2aWYpOw0KKwkJCQkJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsN CisJCQkJCXJldHVybjsNCisJCQkJfSBlbHNlIGlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RBVEVf UFJFX1NUQSkgew0KKwkJCQkJd3ZpZi0+c3RhdGUgPSBXRlhfU1RBVEVfU1RBOw0KKwkJCQl9DQor CQkJfSBlbHNlIHsNCisJCQkJZG9fam9pbiA9IHRydWU7DQorCQkJfQ0KKw0KKwkJCWlmIChpbmZv LT5hc3NvYyB8fCBpbmZvLT5pYnNzX2pvaW5lZCkNCisJCQkJd2Z4X2pvaW5fZmluYWxpemUod3Zp ZiwgaW5mbyk7DQorCQkJZWxzZQ0KKwkJCQltZW1zZXQoJnd2aWYtPmJzc19wYXJhbXMsIDAsIHNp emVvZih3dmlmLT5ic3NfcGFyYW1zKSk7DQorCQl9DQorCX0NCisNCisJLyogRVJQIFByb3RlY3Rp b24gKi8NCisJaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfQVNTT0MgfA0KKwkJICAgICAgIEJT U19DSEFOR0VEX0VSUF9DVFNfUFJPVCB8DQorCQkgICAgICAgQlNTX0NIQU5HRURfRVJQX1BSRUFN QkxFKSkgew0KKwkJdTMyIHByZXZfZXJwX2luZm8gPSB3dmlmLT5lcnBfaW5mbzsNCisNCisJCWlm IChpbmZvLT51c2VfY3RzX3Byb3QpDQorCQkJd3ZpZi0+ZXJwX2luZm8gfD0gV0xBTl9FUlBfVVNF X1BST1RFQ1RJT047DQorCQllbHNlIGlmICghKHByZXZfZXJwX2luZm8gJiBXTEFOX0VSUF9OT05f RVJQX1BSRVNFTlQpKQ0KKwkJCXd2aWYtPmVycF9pbmZvICY9IH5XTEFOX0VSUF9VU0VfUFJPVEVD VElPTjsNCisNCisJCWlmIChpbmZvLT51c2Vfc2hvcnRfcHJlYW1ibGUpDQorCQkJd3ZpZi0+ZXJw X2luZm8gfD0gV0xBTl9FUlBfQkFSS0VSX1BSRUFNQkxFOw0KKwkJZWxzZQ0KKwkJCXd2aWYtPmVy cF9pbmZvICY9IH5XTEFOX0VSUF9CQVJLRVJfUFJFQU1CTEU7DQorDQorCQlpZiAocHJldl9lcnBf aW5mbyAhPSB3dmlmLT5lcnBfaW5mbykNCisJCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT5zZXRfY3Rz X3dvcmspOw0KKwl9DQorDQorCWlmIChjaGFuZ2VkICYgKEJTU19DSEFOR0VEX0FTU09DIHwgQlNT X0NIQU5HRURfRVJQX1NMT1QpKQ0KKwkJaGlmX3Nsb3RfdGltZSh3dmlmLCBpbmZvLT51c2Vfc2hv cnRfc2xvdCA/IDkgOiAyMCk7DQorDQorCWlmIChjaGFuZ2VkICYgKEJTU19DSEFOR0VEX0FTU09D IHwgQlNTX0NIQU5HRURfQ1FNKSkgew0KKwkJc3RydWN0IGhpZl9taWJfcmNwaV9yc3NpX3RocmVz aG9sZCB0aCA9IHsNCisJCQkucm9sbGluZ19hdmVyYWdlX2NvdW50ID0gOCwNCisJCQkuZGV0ZWN0 aW9uID0gMSwNCisJCX07DQorDQorCQl3dmlmLT5jcW1fcnNzaV90aG9sZCA9IGluZm8tPmNxbV9y c3NpX3Rob2xkOw0KKw0KKwkJaWYgKCFpbmZvLT5jcW1fcnNzaV90aG9sZCAmJiAhaW5mby0+Y3Ft X3Jzc2lfaHlzdCkgew0KKwkJCXRoLnVwcGVydGhyZXNoID0gMTsNCisJCQl0aC5sb3dlcnRocmVz aCA9IDE7DQorCQl9IGVsc2Ugew0KKwkJCS8qIEZJWE1FIEl0J3Mgbm90IGEgY29ycmVjdCB3YXkg b2Ygc2V0dGluZyB0aHJlc2hvbGQuDQorCQkJICogVXBwZXIgYW5kIGxvd2VyIG11c3QgYmUgc2V0 IGVxdWFsIGhlcmUgYW5kIGFkanVzdGVkDQorCQkJICogaW4gY2FsbGJhY2suIEhvd2V2ZXIgY3Vy cmVudCBpbXBsZW1lbnRhdGlvbiBpcyBtdWNoDQorCQkJICogbW9yZSByZWxpYWJsZSBhbmQgc3Rh YmxlLg0KKwkJCSAqLw0KKwkJCS8qIFJTU0k6IHNpZ25lZCBROC4wLCBSQ1BJOiB1bnNpZ25lZCBR Ny4xDQorCQkJICogUlNTSSA9IFJDUEkgLyAyIC0gMTEwDQorCQkJICovDQorCQkJdGgudXBwZXJf dGhyZXNob2xkID0gaW5mby0+Y3FtX3Jzc2lfdGhvbGQgKyBpbmZvLT5jcW1fcnNzaV9oeXN0Ow0K KwkJCXRoLnVwcGVyX3RocmVzaG9sZCA9ICh0aC51cHBlcl90aHJlc2hvbGQgKyAxMTApICogMjsN CisJCQl0aC5sb3dlcl90aHJlc2hvbGQgPSBpbmZvLT5jcW1fcnNzaV90aG9sZDsNCisJCQl0aC5s b3dlcl90aHJlc2hvbGQgPSAodGgubG93ZXJfdGhyZXNob2xkICsgMTEwKSAqIDI7DQorCQl9DQor CQloaWZfc2V0X3JjcGlfcnNzaV90aHJlc2hvbGQod3ZpZiwgJnRoKTsNCisJfQ0KKw0KKwlpZiAo Y2hhbmdlZCAmIEJTU19DSEFOR0VEX1RYUE9XRVIgJiYgaW5mby0+dHhwb3dlciAhPSB3ZGV2LT5v dXRwdXRfcG93ZXIpIHsNCisJCXdkZXYtPm91dHB1dF9wb3dlciA9IGluZm8tPnR4cG93ZXI7DQor CQloaWZfc2V0X291dHB1dF9wb3dlcih3dmlmLCB3ZGV2LT5vdXRwdXRfcG93ZXIgKiAxMCk7DQor CX0NCisJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCisNCisJaWYgKGRvX2pvaW4p IHsNCisJCXdmeF90eF9sb2NrX2ZsdXNoKHdkZXYpOw0KKwkJd2Z4X2RvX2pvaW4od3ZpZik7IC8q IFdpbGwgdW5sb2NrIGl0IGZvciB1cyAqLw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHdmeF9w c19ub3RpZnkoc3RydWN0IHdmeF92aWYgKnd2aWYsIGVudW0gc3RhX25vdGlmeV9jbWQgbm90aWZ5 X2NtZCwNCisJCQkgIGludCBsaW5rX2lkKQ0KK3sNCisJdTMyIGJpdCwgcHJldjsNCisNCisJc3Bp bl9sb2NrX2JoKCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisJLyogWmVybyBsaW5rIGlkIG1lYW5z ICJmb3IgYWxsIGxpbmsgSURzIiAqLw0KKwlpZiAobGlua19pZCkgew0KKwkJYml0ID0gQklUKGxp bmtfaWQpOw0KKwl9IGVsc2UgaWYgKG5vdGlmeV9jbWQgIT0gU1RBX05PVElGWV9BV0FLRSkgew0K KwkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LCAidW5zdXBwb3J0ZWQgbm90aWZ5IGNvbW1hbmRc biIpOw0KKwkJYml0ID0gMDsNCisJfSBlbHNlIHsNCisJCWJpdCA9IHd2aWYtPmxpbmtfaWRfbWFw Ow0KKwl9DQorCXByZXYgPSB3dmlmLT5zdGFfYXNsZWVwX21hc2sgJiBiaXQ7DQorDQorCXN3aXRj aCAobm90aWZ5X2NtZCkgew0KKwljYXNlIFNUQV9OT1RJRllfU0xFRVA6DQorCQlpZiAoIXByZXYp IHsNCisJCQlpZiAod3ZpZi0+bWNhc3RfYnVmZmVyZWQgJiYgIXd2aWYtPnN0YV9hc2xlZXBfbWFz aykNCisJCQkJc2NoZWR1bGVfd29yaygmd3ZpZi0+bWNhc3Rfc3RhcnRfd29yayk7DQorCQkJd3Zp Zi0+c3RhX2FzbGVlcF9tYXNrIHw9IGJpdDsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIFNUQV9O T1RJRllfQVdBS0U6DQorCQlpZiAocHJldikgew0KKwkJCXd2aWYtPnN0YV9hc2xlZXBfbWFzayAm PSB+Yml0Ow0KKwkJCXd2aWYtPnBzcG9sbF9tYXNrICY9IH5iaXQ7DQorCQkJaWYgKGxpbmtfaWQg JiYgIXd2aWYtPnN0YV9hc2xlZXBfbWFzaykNCisJCQkJc2NoZWR1bGVfd29yaygmd3ZpZi0+bWNh c3Rfc3RvcF93b3JrKTsNCisJCQl3ZnhfYmhfcmVxdWVzdF90eCh3dmlmLT53ZGV2KTsNCisJCX0N CisJCWJyZWFrOw0KKwl9DQorCXNwaW5fdW5sb2NrX2JoKCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsN Cit9DQorDQordm9pZCB3Znhfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3Ry dWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgICBlbnVtIHN0YV9ub3RpZnlfY21kIG5vdGlm eV9jbWQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgd2Z4X3N0 YV9wcml2ICpzdGFfcHJpdiA9IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopICZzdGEtPmRydl9wcml2 Ow0KKw0KKwl3ZnhfcHNfbm90aWZ5KHd2aWYsIG5vdGlmeV9jbWQsIHN0YV9wcml2LT5saW5rX2lk KTsNCit9DQorDQogc3RhdGljIGludCB3Znhfc2V0X3RpbV9pbXBsKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBib29sIGFpZDBfYml0X3NldCkNCiB7DQogCXN0cnVjdCBza19idWZmICpza2I7DQpAQCAt MzMsOCArMTIwOCwxMSBAQCBzdGF0aWMgaW50IHdmeF9zZXRfdGltX2ltcGwoc3RydWN0IHdmeF92 aWYgKnd2aWYsIGJvb2wgYWlkMF9iaXRfc2V0KQ0KIA0KIAlza2IgPSBpZWVlODAyMTFfYmVhY29u X2dldF90aW0od3ZpZi0+d2Rldi0+aHcsIHd2aWYtPnZpZiwNCiAJCQkJICAgICAgICZ0aW1fb2Zm c2V0LCAmdGltX2xlbmd0aCk7DQotCWlmICghc2tiKQ0KKwlpZiAoIXNrYikgew0KKwkJaWYgKCFf X3dmeF9mbHVzaCh3dmlmLT53ZGV2LCB0cnVlKSkNCisJCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndk ZXYpOw0KIAkJcmV0dXJuIC1FTk9FTlQ7DQorCX0NCiAJdGltX3B0ciA9IHNrYi0+ZGF0YSArIHRp bV9vZmZzZXQ7DQogDQogCWlmICh0aW1fb2Zmc2V0ICYmIHRpbV9sZW5ndGggPj0gNikgew0KQEAg LTU2LDE2ICsxMjM0LDM0IEBAIHN0YXRpYyBpbnQgd2Z4X3NldF90aW1faW1wbChzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgYm9vbCBhaWQwX2JpdF9zZXQpDQogCXJldHVybiAwOw0KIH0NCiANCit2b2lk IHdmeF9zZXRfdGltX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0 IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIHNldF90 aW1fd29yayk7DQorDQorCXdmeF9zZXRfdGltX2ltcGwod3ZpZiwgd3ZpZi0+YWlkMF9iaXRfc2V0 KTsNCit9DQorDQoraW50IHdmeF9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1 Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIHNldCkNCit7DQorCXN0cnVjdCB3ZnhfZGV2ICp3 ZGV2ID0gaHctPnByaXY7DQorCXN0cnVjdCB3Znhfc3RhX3ByaXYgKnN0YV9kZXYgPSAoc3RydWN0 IHdmeF9zdGFfcHJpdiAqKSAmc3RhLT5kcnZfcHJpdjsNCisJc3RydWN0IHdmeF92aWYgKnd2aWYg PSB3ZGV2X3RvX3d2aWYod2Rldiwgc3RhX2Rldi0+dmlmX2lkKTsNCisNCisJc2NoZWR1bGVfd29y aygmd3ZpZi0+c2V0X3RpbV93b3JrKTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KIHN0YXRpYyB2b2lk IHdmeF9tY2FzdF9zdGFydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCiB7DQogCXN0 cnVjdCB3ZnhfdmlmICp3dmlmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCBt Y2FzdF9zdGFydF93b3JrKTsNCisJbG9uZyB0bW8gPSB3dmlmLT5kdGltX3BlcmlvZCAqIFRVX1RP X0pJRkZJRVMod3ZpZi0+YmVhY29uX2ludCArIDIwKTsNCiANCiAJY2FuY2VsX3dvcmtfc3luYygm d3ZpZi0+bWNhc3Rfc3RvcF93b3JrKTsNCiAJaWYgKCF3dmlmLT5haWQwX2JpdF9zZXQpIHsNCiAJ CXdmeF90eF9sb2NrX2ZsdXNoKHd2aWYtPndkZXYpOw0KIAkJd2Z4X3NldF90aW1faW1wbCh3dmlm LCB0cnVlKTsNCiAJCXd2aWYtPmFpZDBfYml0X3NldCA9IHRydWU7DQotCQltb2RfdGltZXIoJnd2 aWYtPm1jYXN0X3RpbWVvdXQsIFRVX1RPX0pJRkZJRVMoMTAwMCkpOw0KKwkJbW9kX3RpbWVyKCZ3 dmlmLT5tY2FzdF90aW1lb3V0LCBqaWZmaWVzICsgdG1vKTsNCiAJCXdmeF90eF91bmxvY2sod3Zp Zi0+d2Rldik7DQogCX0NCiB9DQpAQCAtOTUsNiArMTI5MSwxMzQgQEAgc3RhdGljIHZvaWQgd2Z4 X21jYXN0X3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpDQogCXNwaW5fdW5sb2NrX2JoKCZ3 dmlmLT5wc19zdGF0ZV9sb2NrKTsNCiB9DQogDQoraW50IHdmeF9hbXBkdV9hY3Rpb24oc3RydWN0 IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQor CQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYW1wZHVfcGFyYW1zICpwYXJhbXMpDQorew0KKwkvKiBB Z2dyZWdhdGlvbiBpcyBpbXBsZW1lbnRlZCBmdWxseSBpbiBmaXJtd2FyZSwNCisJICogaW5jbHVk aW5nIGJsb2NrIGFjayBuZWdvdGlhdGlvbi4gRG8gbm90IGFsbG93DQorCSAqIG1hYzgwMjExIHN0 YWNrIHRvIGRvIGFueXRoaW5nOiBpdCBpbnRlcmZlcmVzIHdpdGgNCisJICogdGhlIGZpcm13YXJl Lg0KKwkgKi8NCisNCisJLyogTm90ZSB0aGF0IHdlIHN0aWxsIG5lZWQgdGhpcyBmdW5jdGlvbiBz dHViYmVkLiAqLw0KKw0KKwlyZXR1cm4gLUVOT1RTVVBQOw0KK30NCisNCit2b2lkIHdmeF9zdXNw ZW5kX3Jlc3VtZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCQlzdHJ1Y3QgaGlmX2luZF9zdXNw ZW5kX3Jlc3VtZV90eCAqYXJnKQ0KK3sNCisJaWYgKGFyZy0+c3VzcGVuZF9yZXN1bWVfZmxhZ3Mu YmNfbWNfb25seSkgew0KKwkJYm9vbCBjYW5jZWxfdG1vID0gZmFsc2U7DQorDQorCQlzcGluX2xv Y2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwkJaWYgKCFhcmctPnN1c3BlbmRfcmVzdW1l X2ZsYWdzLnJlc3VtZSkNCisJCQl3dmlmLT5tY2FzdF90eCA9IGZhbHNlOw0KKwkJZWxzZQ0KKwkJ CXd2aWYtPm1jYXN0X3R4ID0gd3ZpZi0+YWlkMF9iaXRfc2V0ICYmIHd2aWYtPm1jYXN0X2J1ZmZl cmVkOw0KKwkJaWYgKHd2aWYtPm1jYXN0X3R4KSB7DQorCQkJY2FuY2VsX3RtbyA9IHRydWU7DQor CQkJd2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7DQorCQl9DQorCQlzcGluX3VubG9ja19i aCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorCQlpZiAoY2FuY2VsX3RtbykNCisJCQlkZWxfdGlt ZXJfc3luYygmd3ZpZi0+bWNhc3RfdGltZW91dCk7DQorCX0gZWxzZSBpZiAoYXJnLT5zdXNwZW5k X3Jlc3VtZV9mbGFncy5yZXN1bWUpIHsNCisJCS8vIEZJWE1FOiBzaG91bGQgY2hhbmdlIGVhY2gg c3RhdGlvbiBzdGF0dXMgaW5kZXBlbmRlbnRseQ0KKwkJd2Z4X3BzX25vdGlmeSh3dmlmLCBTVEFf Tk9USUZZX0FXQUtFLCAwKTsNCisJCXdmeF9iaF9yZXF1ZXN0X3R4KHd2aWYtPndkZXYpOw0KKwl9 IGVsc2Ugew0KKwkJLy8gRklYTUU6IHNob3VsZCBjaGFuZ2UgZWFjaCBzdGF0aW9uIHN0YXR1cyBp bmRlcGVuZGVudGx5DQorCQl3ZnhfcHNfbm90aWZ5KHd2aWYsIFNUQV9OT1RJRllfU0xFRVAsIDAp Ow0KKwl9DQorfQ0KKw0KK2ludCB3ZnhfYWRkX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsDQorCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpDQorew0KKwly ZXR1cm4gMDsNCit9DQorDQordm9pZCB3ZnhfcmVtb3ZlX2NoYW5jdHgoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsDQorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpDQorew0K K30NCisNCit2b2lkIHdmeF9jaGFuZ2VfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywN CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZiwNCisJCQl1MzIgY2hhbmdl ZCkNCit7DQorfQ0KKw0KK2ludCB3ZnhfYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgIHN0cnVjdCBpZWVl ODAyMTFfY2hhbmN0eF9jb25mICpjb25mKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAo c3RydWN0IHdmeF92aWYgKikgdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IGllZWU4MDIxMV9jaGFu bmVsICpjaCA9IGNvbmYtPmRlZi5jaGFuOw0KKw0KKwlXQVJOKHd2aWYtPmNoYW5uZWwsICJjaGFu bmVsIG92ZXJ3cml0ZSIpOw0KKwl3dmlmLT5jaGFubmVsID0gY2g7DQorCXd2aWYtPmh0X2luZm8u Y2hhbm5lbF90eXBlID0gY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZSgmY29uZi0+ZGVmKTsNCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgd2Z4X3VuYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgICAg IHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKQ0KK3sNCisJc3RydWN0IHdmeF92 aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKikgdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IGll ZWU4MDIxMV9jaGFubmVsICpjaCA9IGNvbmYtPmRlZi5jaGFuOw0KKw0KKwlXQVJOKHd2aWYtPmNo YW5uZWwgIT0gY2gsICJjaGFubmVsIG1pc21hdGNoIik7DQorCXd2aWYtPmNoYW5uZWwgPSBOVUxM Ow0KK30NCisNCitpbnQgd2Z4X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNo YW5nZWQpDQorew0KKwlpbnQgcmV0ID0gMDsNCisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+ cHJpdjsNCisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOw0KKwlzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZjsNCisNCisJLy8gRklYTUU6IEludGVyZmFjZSBpZCBzaG91bGQgbm90 IGJlZW4gaGFyZGNvZGVkDQorCXd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgMCk7DQorCWlmICgh d3ZpZikgew0KKwkJV0FSTigxLCAiaW50ZXJmYWNlIDAgZG9lcyBub3QgZXhpc3QgYW55bW9yZSIp Ow0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJZG93bigmd3ZpZi0+c2Nhbi5sb2NrKTsNCisJbXV0 ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRleCk7DQorCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NP TkZfQ0hBTkdFX1BPV0VSKSB7DQorCQl3ZGV2LT5vdXRwdXRfcG93ZXIgPSBjb25mLT5wb3dlcl9s ZXZlbDsNCisJCWhpZl9zZXRfb3V0cHV0X3Bvd2VyKHd2aWYsIHdkZXYtPm91dHB1dF9wb3dlciAq IDEwKTsNCisJfQ0KKw0KKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykg ew0KKwkJd3ZpZiA9IE5VTEw7DQorCQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwg d3ZpZikpICE9IE5VTEwpIHsNCisJCQltZW1zZXQoJnd2aWYtPnBvd2Vyc2F2ZV9tb2RlLCAwLCBz aXplb2Yod3ZpZi0+cG93ZXJzYXZlX21vZGUpKTsNCisJCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVF ODAyMTFfQ09ORl9QUykgew0KKwkJCQl3dmlmLT5wb3dlcnNhdmVfbW9kZS5wbV9tb2RlLmVudGVy X3BzbSA9IDE7DQorCQkJCWlmIChjb25mLT5keW5hbWljX3BzX3RpbWVvdXQgPiAwKSB7DQorCQkJ CQl3dmlmLT5wb3dlcnNhdmVfbW9kZS5wbV9tb2RlLmZhc3RfcHNtID0gMTsNCisJCQkJCS8vIEZp cm13YXJlIGRvZXMgbm90IHN1cHBvcnQgbW9yZSB0aGFuIDEyOG1zDQorCQkJCQl3dmlmLT5wb3dl cnNhdmVfbW9kZS5mYXN0X3BzbV9pZGxlX3BlcmlvZCA9DQorCQkJCQkJbWluKGNvbmYtPmR5bmFt aWNfcHNfdGltZW91dCAqIDIsIDI1NSk7DQorCQkJCX0NCisJCQl9DQorCQkJaWYgKHd2aWYtPnN0 YXRlID09IFdGWF9TVEFURV9TVEEgJiYgd3ZpZi0+YnNzX3BhcmFtcy5haWQpDQorCQkJCXdmeF9z ZXRfcG0od3ZpZiwgJnd2aWYtPnBvd2Vyc2F2ZV9tb2RlKTsNCisJCX0NCisJCXd2aWYgPSB3ZGV2 X3RvX3d2aWYod2RldiwgMCk7DQorCX0NCisNCisJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211 dGV4KTsNCisJdXAoJnd2aWYtPnNjYW4ubG9jayk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KIGlu dCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZikNCiB7DQogCWludCBpOw0KQEAgLTEzOCw4ICsxNDYyLDIyIEBAIGludCB3 ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZikNCiAJCWRlZmF1bHRfZWRjYV9wYXJhbXNbSUVFRTgwMjExX0FDX0JLXS5xdWV1 ZV9pZCA9IEhJRl9RVUVVRV9JRF9CRVNURUZGT1JUOw0KIAl9DQogDQorCXZpZi0+ZHJpdmVyX2Zs YWdzIHw9IElFRUU4MDIxMV9WSUZfQkVBQ09OX0ZJTFRFUiB8DQorCQkJICAgICBJRUVFODAyMTFf VklGX1NVUFBPUlRTX1VBUFNEIHwNCisJCQkgICAgIElFRUU4MDIxMV9WSUZfU1VQUE9SVFNfQ1FN X1JTU0k7DQorDQogCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOw0KIA0KKwlzd2l0Y2gg KHZpZi0+dHlwZSkgew0KKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046DQorCWNhc2UgTkw4 MDIxMV9JRlRZUEVfQURIT0M6DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6DQorCQlicmVhazsN CisJZGVmYXVsdDoNCisJCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7DQorCQlyZXR1 cm4gLUVPUE5PVFNVUFA7DQorCX0NCisNCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2Rl di0+dmlmKTsgaSsrKSB7DQogCQlpZiAoIXdkZXYtPnZpZltpXSkgew0KIAkJCXdkZXYtPnZpZltp XSA9IHZpZjsNCkBAIC0xNTEsNiArMTQ4OSw3IEBAIGludCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikNCiAJCW11dGV4 X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7DQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQogCX0N CisJLy8gRklYTUU6IHByZWZlciB1c2Ugb2YgY29udGFpbmVyX29mKCkgdG8gZ2V0IHZpZg0KIAl3 dmlmLT52aWYgPSB2aWY7DQogCXd2aWYtPndkZXYgPSB3ZGV2Ow0KIA0KQEAgLTE1OCwxMSArMTQ5 NywxNiBAQCBpbnQgd2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0 cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQogCUlOSVRfREVMQVlFRF9XT1JLKCZ3dmlmLT5saW5r X2lkX2djX3dvcmssIHdmeF9saW5rX2lkX2djX3dvcmspOw0KIA0KIAlzcGluX2xvY2tfaW5pdCgm d3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorCUlOSVRfV09SSygmd3ZpZi0+c2V0X3RpbV93b3JrLCB3 Znhfc2V0X3RpbV93b3JrKTsNCiANCiAJSU5JVF9XT1JLKCZ3dmlmLT5tY2FzdF9zdGFydF93b3Jr LCB3ZnhfbWNhc3Rfc3RhcnRfd29yayk7DQogCUlOSVRfV09SSygmd3ZpZi0+bWNhc3Rfc3RvcF93 b3JrLCB3ZnhfbWNhc3Rfc3RvcF93b3JrKTsNCiAJdGltZXJfc2V0dXAoJnd2aWYtPm1jYXN0X3Rp bWVvdXQsIHdmeF9tY2FzdF90aW1lb3V0LCAwKTsNCiANCisJd3ZpZi0+c2V0YnNzcGFyYW1zX2Rv bmUgPSBmYWxzZTsNCisJbXV0ZXhfaW5pdCgmd3ZpZi0+YnNzX2xvc3NfbG9jayk7DQorCUlOSVRf REVMQVlFRF9XT1JLKCZ3dmlmLT5ic3NfbG9zc193b3JrLCB3ZnhfYnNzX2xvc3Nfd29yayk7DQor DQogCXd2aWYtPndlcF9kZWZhdWx0X2tleV9pZCA9IC0xOw0KIAlJTklUX1dPUksoJnd2aWYtPndl cF9rZXlfd29yaywgd2Z4X3dlcF9rZXlfd29yayk7DQogDQpAQCAtMTcwLDIyICsxNTE0LDExNSBA QCBpbnQgd2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBp ZWVlODAyMTFfdmlmICp2aWYpDQogCUlOSVRfV09SSygmd3ZpZi0+c2Nhbi53b3JrLCB3Znhfc2Nh bl93b3JrKTsNCiAJSU5JVF9ERUxBWUVEX1dPUksoJnd2aWYtPnNjYW4udGltZW91dCwgd2Z4X3Nj YW5fdGltZW91dCk7DQogDQorCXNwaW5fbG9ja19pbml0KCZ3dmlmLT5ldmVudF9xdWV1ZV9sb2Nr KTsNCisJSU5JVF9MSVNUX0hFQUQoJnd2aWYtPmV2ZW50X3F1ZXVlKTsNCisJSU5JVF9XT1JLKCZ3 dmlmLT5ldmVudF9oYW5kbGVyX3dvcmssIHdmeF9ldmVudF9oYW5kbGVyX3dvcmspOw0KKw0KKwlp bml0X2NvbXBsZXRpb24oJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlKTsNCisJY29tcGxldGUo Jnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlKTsNCisJSU5JVF9XT1JLKCZ3dmlmLT5zZXRfYmVh Y29uX3dha2V1cF9wZXJpb2Rfd29yaywgd2Z4X3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZF93b3Jr KTsNCisJSU5JVF9XT1JLKCZ3dmlmLT51cGRhdGVfZmlsdGVyaW5nX3dvcmssIHdmeF91cGRhdGVf ZmlsdGVyaW5nX3dvcmspOw0KKwlJTklUX1dPUksoJnd2aWYtPmJzc19wYXJhbXNfd29yaywgd2Z4 X2Jzc19wYXJhbXNfd29yayk7DQorCUlOSVRfV09SSygmd3ZpZi0+c2V0X2N0c193b3JrLCB3Znhf c2V0X2N0c193b3JrKTsNCisJSU5JVF9XT1JLKCZ3dmlmLT51bmpvaW5fd29yaywgd2Z4X3Vuam9p bl93b3JrKTsNCisNCiAJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCisNCisJaGlm X3NldF9tYWNhZGRyKHd2aWYsIHZpZi0+YWRkcik7DQogCUJVR19PTihBUlJBWV9TSVpFKGRlZmF1 bHRfZWRjYV9wYXJhbXMpICE9IEFSUkFZX1NJWkUod3ZpZi0+ZWRjYS5wYXJhbXMpKTsNCi0JZm9y IChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspDQorCWZvciAoaSA9IDA7IGkgPCBJ RUVFODAyMTFfTlVNX0FDUzsgaSsrKSB7DQogCQltZW1jcHkoJnd2aWYtPmVkY2EucGFyYW1zW2ld LCAmZGVmYXVsdF9lZGNhX3BhcmFtc1tpXSwgc2l6ZW9mKGRlZmF1bHRfZWRjYV9wYXJhbXNbaV0p KTsNCisJCXd2aWYtPmVkY2EudWFwc2RfZW5hYmxlW2ldID0gZmFsc2U7DQorCQloaWZfc2V0X2Vk Y2FfcXVldWVfcGFyYW1zKHd2aWYsICZ3dmlmLT5lZGNhLnBhcmFtc1tpXSk7DQorCX0NCisJd2Z4 X3NldF91YXBzZF9wYXJhbSh3dmlmLCAmd3ZpZi0+ZWRjYSk7DQorDQogCXR4X3BvbGljeV9pbml0 KHd2aWYpOw0KKwl3dmlmID0gTlVMTDsNCisJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdk ZXYsIHd2aWYpKSAhPSBOVUxMKSB7DQorCQkvLyBDb21ibyBtb2RlIGRvZXMgbm90IHN1cHBvcnQg QmxvY2sgQWNrcy4gV2UgY2FuIHJlLWVuYWJsZSB0aGVtDQorCQlpZiAod3ZpZl9jb3VudCh3ZGV2 KSA9PSAxKQ0KKwkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweEZGLCAweEZGKTsN CisJCWVsc2UNCisJCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHgwMCwgMHgwMCk7 DQorCQkvLyBDb21ibyBmb3JjZSBwb3dlcnNhdmUgbW9kZS4gV2UgY2FuIHJlLWVuYWJsZSBpdCBu b3cNCisJCXdmeF9zZXRfcG0od3ZpZiwgJnd2aWYtPnBvd2Vyc2F2ZV9tb2RlKTsNCisJfQ0KIAly ZXR1cm4gMDsNCiB9DQogDQogdm9pZCB3ZnhfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywNCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQogew0KKwlzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Ow0KIAlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChz dHJ1Y3Qgd2Z4X3ZpZiAqKSB2aWYtPmRydl9wcml2Ow0KKwlpbnQgaTsNCiANCisJLy8gSWYgc2Nh biBpcyBpbiBwcm9ncmVzcywgc3RvcCBpdA0KKwl3aGlsZSAoZG93bl90cnlsb2NrKCZ3dmlmLT5z Y2FuLmxvY2spKQ0KKwkJc2NoZWR1bGUoKTsNCisJdXAoJnd2aWYtPnNjYW4ubG9jayk7DQorCXdh aXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUsIG1z ZWNzX3RvX2ppZmZpZXMoMzAwKSk7DQorDQorCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgp Ow0KKwlzd2l0Y2ggKHd2aWYtPnN0YXRlKSB7DQorCWNhc2UgV0ZYX1NUQVRFX1BSRV9TVEE6DQor CWNhc2UgV0ZYX1NUQVRFX1NUQToNCisJY2FzZSBXRlhfU1RBVEVfSUJTUzoNCisJCXdmeF90eF9s b2NrX2ZsdXNoKHdkZXYpOw0KKwkJaWYgKCFzY2hlZHVsZV93b3JrKCZ3dmlmLT51bmpvaW5fd29y aykpDQorCQkJd2Z4X3R4X3VubG9jayh3ZGV2KTsNCisJCWJyZWFrOw0KKwljYXNlIFdGWF9TVEFU RV9BUDoNCisJCWZvciAoaSA9IDA7IHd2aWYtPmxpbmtfaWRfbWFwOyArK2kpIHsNCisJCQlpZiAo d3ZpZi0+bGlua19pZF9tYXAgJiBCSVQoaSkpIHsNCisJCQkJd2Z4X3VubWFwX2xpbmsod3ZpZiwg aSk7DQorCQkJCXd2aWYtPmxpbmtfaWRfbWFwICY9IH5CSVQoaSk7DQorCQkJfQ0KKwkJfQ0KKwkJ bWVtc2V0KHd2aWYtPmxpbmtfaWRfZGIsIDAsIHNpemVvZih3dmlmLT5saW5rX2lkX2RiKSk7DQor CQl3dmlmLT5zdGFfYXNsZWVwX21hc2sgPSAwOw0KKwkJd3ZpZi0+ZW5hYmxlX2JlYWNvbiA9IGZh bHNlOw0KKwkJd3ZpZi0+bWNhc3RfdHggPSBmYWxzZTsNCisJCXd2aWYtPmFpZDBfYml0X3NldCA9 IGZhbHNlOw0KKwkJd3ZpZi0+bWNhc3RfYnVmZmVyZWQgPSBmYWxzZTsNCisJCXd2aWYtPnBzcG9s bF9tYXNrID0gMDsNCisJCS8qIHJlc2V0LmxpbmtfaWQgPSAwOyAqLw0KKwkJaGlmX3Jlc2V0KHd2 aWYsIGZhbHNlKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7DQorCX0NCisNCisJ d3ZpZi0+c3RhdGUgPSBXRlhfU1RBVEVfUEFTU0lWRTsNCiAJd2Z4X3R4X3F1ZXVlc193YWl0X2Vt cHR5X3ZpZih3dmlmKTsNCisJd2Z4X3R4X3VubG9jayh3ZGV2KTsNCisNCisJLyogRklYTUU6IElu IGFkZCB0byByZXNldCBNQUMgYWRkcmVzcywgdHJ5IHRvIHJlc2V0IGludGVyZmFjZSAqLw0KKwlo aWZfc2V0X21hY2FkZHIod3ZpZiwgTlVMTCk7DQorDQorCWNhbmNlbF9kZWxheWVkX3dvcmtfc3lu Yygmd3ZpZi0+c2Nhbi50aW1lb3V0KTsNCisNCisJd2Z4X2NxbV9ic3Nsb3NzX3NtKHd2aWYsIDAs IDAsIDApOw0KKwljYW5jZWxfd29ya19zeW5jKCZ3dmlmLT51bmpvaW5fd29yayk7DQogCWNhbmNl bF9kZWxheWVkX3dvcmtfc3luYygmd3ZpZi0+bGlua19pZF9nY193b3JrKTsNCiAJZGVsX3RpbWVy X3N5bmMoJnd2aWYtPm1jYXN0X3RpbWVvdXQpOw0KKwl3ZnhfZnJlZV9ldmVudF9xdWV1ZSh3dmlm KTsNCisNCisJd2Rldi0+dmlmW3d2aWYtPmlkXSA9IE5VTEw7DQorCXd2aWYtPnZpZiA9IE5VTEw7 DQorDQorCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7DQorCXd2aWYgPSBOVUxMOw0K Kwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpIHsNCisJ CS8vIENvbWJvIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBCbG9jayBBY2tzLiBXZSBjYW4gcmUtZW5h YmxlIHRoZW0NCisJCWlmICh3dmlmX2NvdW50KHdkZXYpID09IDEpDQorCQkJaGlmX3NldF9ibG9j a19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYpOw0KKwkJZWxzZQ0KKwkJCWhpZl9zZXRfYmxv Y2tfYWNrX3BvbGljeSh3dmlmLCAweDAwLCAweDAwKTsNCisJCS8vIENvbWJvIGZvcmNlIHBvd2Vy c2F2ZSBtb2RlLiBXZSBjYW4gcmUtZW5hYmxlIGl0IG5vdw0KKwkJd2Z4X3NldF9wbSh3dmlmLCAm d3ZpZi0+cG93ZXJzYXZlX21vZGUpOw0KKwl9DQogfQ0KIA0KIGludCB3Znhfc3RhcnQoc3RydWN0 IGllZWU4MDIxMV9odyAqaHcpDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEu aCBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmgNCmluZGV4IGRkMWI2YjNmYzJmMS4uMzA3ZWQw MTk2MTEwIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaA0KKysrIGIvZHJp dmVycy9zdGFnaW5nL3dmeC9zdGEuaA0KQEAgLTEyLDE0ICsxMiw0MCBAQA0KIA0KICNpbmNsdWRl ICJoaWZfYXBpX2NtZC5oIg0KIA0KK3N0cnVjdCB3ZnhfZGV2Ow0KIHN0cnVjdCB3ZnhfdmlmOw0K IA0KK2VudW0gd2Z4X3N0YXRlIHsNCisJV0ZYX1NUQVRFX1BBU1NJVkUgPSAwLA0KKwlXRlhfU1RB VEVfUFJFX1NUQSwNCisJV0ZYX1NUQVRFX1NUQSwNCisJV0ZYX1NUQVRFX0lCU1MsDQorCVdGWF9T VEFURV9BUCwNCit9Ow0KKw0KK3N0cnVjdCB3ZnhfaHRfaW5mbyB7DQorCXN0cnVjdCBpZWVlODAy MTFfc3RhX2h0X2NhcCBodF9jYXA7DQorCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5l bF90eXBlOw0KKwl1aW50MTZfdCBvcGVyYXRpb25fbW9kZTsNCit9Ow0KKw0KK3N0cnVjdCB3Znhf aGlmX2V2ZW50IHsNCisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOw0KKwlzdHJ1Y3QgaGlmX2luZF9l dmVudCBldnQ7DQorfTsNCisNCiBzdHJ1Y3Qgd2Z4X2VkY2FfcGFyYW1zIHsNCiAJLyogTk9URTog aW5kZXggaXMgYSBsaW51eCBxdWV1ZSBpZC4gKi8NCiAJc3RydWN0IGhpZl9yZXFfZWRjYV9xdWV1 ZV9wYXJhbXMgcGFyYW1zW0lFRUU4MDIxMV9OVU1fQUNTXTsNCiAJYm9vbCB1YXBzZF9lbmFibGVb SUVFRTgwMjExX05VTV9BQ1NdOw0KIH07DQogDQorc3RydWN0IHdmeF9ncnBfYWRkcl90YWJsZSB7 DQorCWJvb2wgZW5hYmxlOw0KKwlpbnQgbnVtX2FkZHJlc3NlczsNCisJdTggYWRkcmVzc19saXN0 WzhdW0VUSF9BTEVOXTsNCit9Ow0KKw0KIHN0cnVjdCB3Znhfc3RhX3ByaXYgew0KIAlpbnQgbGlu a19pZDsNCiAJaW50IHZpZl9pZDsNCkBAIC0yOCw5ICs1NCw0OCBAQCBzdHJ1Y3Qgd2Z4X3N0YV9w cml2IHsNCiAvLyBtYWM4MDIxMSBpbnRlcmZhY2UNCiBpbnQgd2Z4X3N0YXJ0KHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3KTsNCiB2b2lkIHdmeF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsN CitpbnQgd2Z4X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpOw0K K2ludCB3Znhfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2 YWx1ZSk7DQordTY0IHdmeF9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywNCisJCQkgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptY19saXN0KTsNCit2b2lkIHdm eF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQg Y2hhbmdlZF9mbGFncywNCisJCQkgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsIHU2NCB1bnVz ZWQpOw0KKw0KIGludCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7DQogdm9pZCB3ZnhfcmVtb3ZlX2ludGVyZmFjZShz dHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7DQordm9p ZCB3ZnhfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYsDQorCSAgICAgICB1MzIgcXVldWVzLCBib29sIGRyb3ApOw0KK2ludCB3ZnhfY29uZl90 eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJ CXUxNiBxdWV1ZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFt cyk7DQordm9pZCB3ZnhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2Nv bmYgKmluZm8sIHUzMiBjaGFuZ2VkKTsNCitpbnQgd2Z4X3N0YV9hZGQoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQlzdHJ1Y3QgaWVlZTgwMjEx X3N0YSAqc3RhKTsNCitpbnQgd2Z4X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAq c3RhKTsNCit2b2lkIHdmeF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1 Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLCBz dHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsNCitpbnQgd2Z4X3NldF90aW0oc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0KTsNCitpbnQg d2Z4X2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZiwNCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFt cyk7DQoraW50IHdmeF9hZGRfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCSAg ICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZik7DQordm9pZCB3ZnhfcmVtb3Zl X2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJc3RydWN0IGllZWU4MDIxMV9j aGFuY3R4X2NvbmYgKmNvbmYpOw0KK3ZvaWQgd2Z4X2NoYW5nZV9jaGFuY3R4KHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LA0KKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mLCB1 MzIgY2hhbmdlZCk7DQoraW50IHdmeF9hc3NpZ25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkJICAgc3RydWN0IGllZWU4 MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpOw0KK3ZvaWQgd2Z4X3VuYXNzaWduX3ZpZl9jaGFuY3R4 KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJ CSAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKTsNCiANCisvLyBXU00g Q2FsbGJhY2tzDQordm9pZCB3Znhfc3VzcGVuZF9yZXN1bWUoc3RydWN0IHdmeF92aWYgKnd2aWYs IHN0cnVjdCBoaWZfaW5kX3N1c3BlbmRfcmVzdW1lX3R4ICphcmcpOw0KKw0KKy8vIE90aGVyIEhl bHBlcnMNCit2b2lkIHdmeF9jcW1fYnNzbG9zc19zbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50 IGluaXQsIGludCBnb29kLCBpbnQgYmFkKTsNCit2b2lkIHdmeF91cGRhdGVfZmlsdGVyaW5nKHN0 cnVjdCB3ZnhfdmlmICp3dmlmKTsNCitpbnQgd2Z4X3NldF9wbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwgY29uc3Qgc3RydWN0IGhpZl9yZXFfc2V0X3BtX21vZGUgKmFyZyk7DQogaW50IHdmeF9md2Rf cHJvYmVfcmVxKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGVuYWJsZSk7DQogDQogI2VuZGlm IC8qIFdGWF9TVEFfSCAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93Zngvd2Z4Lmgg Yi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oDQppbmRleCBhODZkZGZhZWQ4MjUuLjQ4OTgzNjgz N2IwYSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93Zngvd2Z4LmgNCisrKyBiL2RyaXZl cnMvc3RhZ2luZy93Zngvd2Z4LmgNCkBAIC0xMSw2ICsxMSw4IEBADQogI2RlZmluZSBXRlhfSA0K IA0KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+DQorI2luY2x1ZGUgPGxpbnV4L3dvcmtx dWV1ZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KICNpbmNsdWRlIDxuZXQvbWFjODAy MTEuaD4NCiANCiAjaW5jbHVkZSAiYmguaCINCkBAIC02MSw4ICs2MywxNSBAQCBzdHJ1Y3Qgd2Z4 X2RldiB7DQogc3RydWN0IHdmeF92aWYgew0KIAlzdHJ1Y3Qgd2Z4X2RldgkJKndkZXY7DQogCXN0 cnVjdCBpZWVlODAyMTFfdmlmCSp2aWY7DQorCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hh bm5lbDsNCiAJaW50CQkJaWQ7DQorCWVudW0gd2Z4X3N0YXRlCQlzdGF0ZTsNCiANCisJaW50CQkJ ZGVsYXllZF9saW5rX2xvc3M7DQorCWludAkJCWJzc19sb3NzX3N0YXRlOw0KKwl1MzIJCQlic3Nf bG9zc19jb25maXJtX2lkOw0KKwlzdHJ1Y3QgbXV0ZXgJCWJzc19sb3NzX2xvY2s7DQorCXN0cnVj dCBkZWxheWVkX3dvcmsJYnNzX2xvc3Nfd29yazsNCiANCiAJdTMyCQkJbGlua19pZF9tYXA7DQog CXN0cnVjdCB3ZnhfbGlua19lbnRyeQlsaW5rX2lkX2RiW1dGWF9NQVhfU1RBX0lOX0FQX01PREVd Ow0KQEAgLTcyLDYgKzgxLDcgQEAgc3RydWN0IHdmeF92aWYgew0KIAlib29sCQkJYWlkMF9iaXRf c2V0Ow0KIAlib29sCQkJbWNhc3RfdHg7DQogCWJvb2wJCQltY2FzdF9idWZmZXJlZDsNCisJc3Ry dWN0IHdmeF9ncnBfYWRkcl90YWJsZSBtY2FzdF9maWx0ZXI7DQogCXN0cnVjdCB0aW1lcl9saXN0 CW1jYXN0X3RpbWVvdXQ7DQogCXN0cnVjdCB3b3JrX3N0cnVjdAltY2FzdF9zdGFydF93b3JrOw0K IAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbWNhc3Rfc3RvcF93b3JrOw0KQEAgLTg2LDEzICs5Niw0MCBA QCBzdHJ1Y3Qgd2Z4X3ZpZiB7DQogCXUzMgkJCXN0YV9hc2xlZXBfbWFzazsNCiAJdTMyCQkJcHNw b2xsX21hc2s7DQogCXNwaW5sb2NrX3QJCXBzX3N0YXRlX2xvY2s7DQorCXN0cnVjdCB3b3JrX3N0 cnVjdAlzZXRfdGltX3dvcms7DQorDQorCWludAkJCWR0aW1fcGVyaW9kOw0KKwlpbnQJCQliZWFj b25faW50Ow0KKwlib29sCQkJZW5hYmxlX2JlYWNvbjsNCisJc3RydWN0IHdvcmtfc3RydWN0CXNl dF9iZWFjb25fd2FrZXVwX3BlcmlvZF93b3JrOw0KIA0KIAlib29sCQkJZmlsdGVyX2Jzc2lkOw0K IAlib29sCQkJZndkX3Byb2JlX3JlcTsNCisJYm9vbAkJCWRpc2FibGVfYmVhY29uX2ZpbHRlcjsN CisJc3RydWN0IHdvcmtfc3RydWN0CXVwZGF0ZV9maWx0ZXJpbmdfd29yazsNCiANCisJdTMyCQkJ ZXJwX2luZm87DQorCWludAkJCWNxbV9yc3NpX3Rob2xkOw0KKwlib29sCQkJc2V0YnNzcGFyYW1z X2RvbmU7DQorCXN0cnVjdCB3ZnhfaHRfaW5mbwlodF9pbmZvOw0KIAlzdHJ1Y3Qgd2Z4X2VkY2Ff cGFyYW1zCWVkY2E7DQorCXN0cnVjdCBoaWZfbWliX3NldF91YXBzZF9pbmZvcm1hdGlvbiB1YXBz ZF9pbmZvOw0KKwlzdHJ1Y3QgaGlmX3JlcV9zZXRfYnNzX3BhcmFtcyBic3NfcGFyYW1zOw0KKwlz dHJ1Y3Qgd29ya19zdHJ1Y3QJYnNzX3BhcmFtc193b3JrOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJ c2V0X2N0c193b3JrOw0KKw0KKwlpbnQJCQlqb2luX2NvbXBsZXRlX3N0YXR1czsNCisJYm9vbAkJ CWRlbGF5ZWRfdW5qb2luOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdW5qb2luX3dvcms7DQogDQog CXN0cnVjdCB3Znhfc2NhbgkJc2NhbjsNCisNCisJc3RydWN0IGhpZl9yZXFfc2V0X3BtX21vZGUg cG93ZXJzYXZlX21vZGU7DQorCXN0cnVjdCBjb21wbGV0aW9uCXNldF9wbV9tb2RlX2NvbXBsZXRl Ow0KKw0KKwlzdHJ1Y3QgbGlzdF9oZWFkCWV2ZW50X3F1ZXVlOw0KKwlzcGlubG9ja190CQlldmVu dF9xdWV1ZV9sb2NrOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJZXZlbnRfaGFuZGxlcl93b3JrOw0K IH07DQogDQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgd2Z4X3ZpZiAqd2Rldl90b193dmlmKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlmX2lkKQ0KQEAgLTEyNiw2ICsxNjMsMjAgQEAgc3RhdGlj IGlubGluZSBzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZl9pdGVyYXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCBzdHJ1Y3Qgd2Z4X3ZpZg0KIAlyZXR1cm4gTlVMTDsNCiB9DQogDQorc3RhdGljIGlubGluZSBp bnQgd3ZpZl9jb3VudChzdHJ1Y3Qgd2Z4X2RldiAqd2RldikNCit7DQorCWludCBpOw0KKwlpbnQg cmV0ID0gMDsNCisJc3RydWN0IHdmeF92aWYgKnd2aWY7DQorDQorCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKHdkZXYtPnZpZik7IGkrKykgew0KKwkJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2 LCBpKTsNCisJCWlmICh3dmlmKQ0KKwkJCXJldCsrOw0KKwl9DQorCXJldHVybiByZXQ7DQorfQ0K Kw0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1yZXZlcnNlKHVpbnQ4X3QgKnNyYywgdWludDhfdCBs ZW5ndGgpDQogew0KIAl1aW50OF90ICpsbyA9IHNyYzsNCi0tIA0KMi4yMC4xDQo=