From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 15577A0543; Thu, 15 Dec 2022 09:46:20 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A730840684; Thu, 15 Dec 2022 09:46:19 +0100 (CET) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on2044.outbound.protection.outlook.com [40.107.7.44]) by mails.dpdk.org (Postfix) with ESMTP id 9D38C40223 for ; Thu, 15 Dec 2022 09:46:18 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H9S3PNd/uj4v9ua0UxP7Y9LnPTqGnuFKY6RmmDjby4SL66WtAaE11VtbSuUtCNTES4aaw90wB8thg/HQTM7tPl2s6ETTKo3G5AiHjjdRXbETJygAtfWYTLSASEPcWWFplNUtBbcZJmQ93XUGtRkCsGr2GlIWZ4oGHsFQi7o8tcFEAGn1P5tVKjfSK34hCiBiEYFGCnyid2W1EZrvcdTT9/gt8OWivEarVDKyjISJmhajPGWcCUC3nIQtkXv0wyLjDSs1msR4MNFKpE2nYetI54F0QEhSZ5d13Qu2g8VlikH5+pJTAfhbMwS3h6jhxuhxbPjE5qwfMopYctLczdyMgA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=yWBWHtlazZtkyFEwZbAczVf0trTBdI3CVUpMQ7Hrfwk=; b=WkkzTkZDCPYW83SXOcZjpuEip4ct3r+L5t5F0ZPjyI/IOwVE6iaqZsTUaNnhR/+Ey58WGZ6ZF5xqo03NC0xHeRX0tRVF3unyq2zjYa5pyr9Q6Uorni4L6FLcs7NkMnt7uoqSjS71wbx59WQfcG/SuM5W2fUcHt7EKmI/1W2dTNWoZP2s+1zu26quNW2T1uZgVnui/gYSrhSgHeDFlqYS7o+stPFWK/K5CHWoqtRm0zonDWoo7LBIaA4Ldvz3JyaIAfl8knkWavH/DayzqjXHJKADAiTNHgAXEmEyI1Nu1QmHasoZlCigTU34cVmid6+COJk/EJ+DFxstd2RZosbj3w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ericsson.com; dmarc=pass action=none header.from=ericsson.com; dkim=pass header.d=ericsson.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yWBWHtlazZtkyFEwZbAczVf0trTBdI3CVUpMQ7Hrfwk=; b=uMxYInIUEBWjfJ6R2WC7/sttWMEu1+0fuBa+HtpSmnJPm049ccicv5tPpNzlofzwrNby7gOzekZYZfU9pCbbtfooD3kG4cnbFwEChoesPtEvGROotexi1GEf2WBVqXF+xawu6nmKB4xCmY4aa1jnMcvcO7ITyr0QtwD4jCvweN0= Received: from DB7PR07MB5978.eurprd07.prod.outlook.com (2603:10a6:10:80::15) by AS1PR07MB8525.eurprd07.prod.outlook.com (2603:10a6:20b:4db::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.19; Thu, 15 Dec 2022 08:46:16 +0000 Received: from DB7PR07MB5978.eurprd07.prod.outlook.com ([fe80::aa92:63bb:c47:f8e5]) by DB7PR07MB5978.eurprd07.prod.outlook.com ([fe80::aa92:63bb:c47:f8e5%4]) with mapi id 15.20.5924.012; Thu, 15 Dec 2022 08:46:16 +0000 From: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= To: Tomasz Duszynski , "dev@dpdk.org" CC: "thomas@monjalon.net" , "jerinj@marvell.com" , "mb@smartsharesystems.com" , "zhoumin@loongson.cn" Subject: Re: [PATCH v4 1/4] eal: add generic support for reading PMU events Thread-Topic: [PATCH v4 1/4] eal: add generic support for reading PMU events Thread-Index: AQHZDt/ZrdDJxK0+Nk+VnwiWfi+fiq5upaMA Date: Thu, 15 Dec 2022 08:46:16 +0000 Message-ID: References: <20221129092821.1304853-1-tduszynski@marvell.com> <20221213104350.3218167-1-tduszynski@marvell.com> <20221213104350.3218167-2-tduszynski@marvell.com> In-Reply-To: <20221213104350.3218167-2-tduszynski@marvell.com> Accept-Language: en-US, sv-SE Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ericsson.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DB7PR07MB5978:EE_|AS1PR07MB8525:EE_ x-ms-office365-filtering-correlation-id: bec04bd6-156d-40ab-433e-08dade78d41e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 9MpWEvOKuWE3bvgesxyRcmBZSeGv9PLH92M0u3zWCjrPJxy2x9TfVePKELHt7FhmctJnax4693BoTcBKPBOLnUAjv9qecELSaI+Z59b5omuweYp0Z6Tx1aCRudms8lNsDewtjvUDieM91a3bCvMSwjSg+zSI4McmFELyU9OI7buLGgWjLQwUm4BF4NcQnf0z8/iAgegAbhfPhCCGQC7NfkHM4JaZvS5FdPr28bUAlvl3V+E1MoRNADQSHZGOhZs1asKDaXS5Se5MHtv7uAw9Lmd49pPouzWrKegNRxn3AafKiDcgsCAJezqIrfmSVpM4tyT6eRt+qXe5u4N2KNfAyVtHLrYJXtOxx5my7j1isbmaChtAxiUnsEEfHoaI8TI5FnWXs+dg8X0qSBbzb7f9qw2iSf1M/mMbpeWN/f0uvHB80JNk0Ojt7uhvOElwVdvVZzMUaJnGy25BPii0dRNp4lKhgxBZVsVXsqa9cbnx3YPXwJrqgx7ZSXVyhAdH/QKs2lKycImb744/wKc3waEz5Ie+9ud2Z/yieroMAHvn7V/xoAdviAtAg46oeFe0GlhL4i5S6Fv8MVLe2dQF8Zoxm5wtHsBVVew2jLRLY0xu95/wPBCqquQ2HXg9TfpkVivyT7xqZJIL18SMrOAaMbJZOh8zdliWk8tDT2ayVvPVLghUB3+DzwpkpLyQa5NQzr2dwwQP4x+e04wjHQMeC2gDZ7R1grJkMHvWWVpbvoq7SfMZ9FiZjGqW8fjCs8lJrYkoqSh77gA/FlFtDXXdxqah8b5a8Dg8/p6B4g6GK1BbrqQ= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB7PR07MB5978.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(396003)(39860400002)(136003)(376002)(366004)(346002)(451199015)(38100700002)(38070700005)(64756008)(83380400001)(66556008)(5660300002)(8676002)(41300700001)(66446008)(86362001)(31696002)(76116006)(8936002)(82960400001)(4326008)(91956017)(66946007)(26005)(2906002)(30864003)(6512007)(71200400001)(186003)(316002)(53546011)(2616005)(6506007)(110136005)(6486002)(54906003)(66899015)(31686004)(4001150100001)(478600001)(66476007)(122000001)(36756003)(85182001)(85202003)(41533002)(45980500001)(43740500002)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VFpkNUM5akZiMWNIWmtxUzlBYksvNGFkWGI4OURudlk5VktyeEVKdzB6WVVR?= =?utf-8?B?YisxWVBRalg3U3BKMlBJYnpDKzhyWXBOcUlRTUpyc2FsbmdCK1BXYXU5am5S?= =?utf-8?B?MFVia1BqYm1kbzMvRTU2MndDTE04SDBGYjV3NXQxZUt4THVvM0lrd0RGbWpv?= =?utf-8?B?a0RDMHQxVnA3S2srMWw5R1JJODQ3NUpCRVE5OEJ1SUJuZS9vMWdicGpuajc3?= =?utf-8?B?eW9pMVRPV3FvUVlNM2JuWFFMamZHa2pRK0dzbElmU09aWUhHZjJscXhsS05h?= =?utf-8?B?ci9Ka1RKenIyUEJtakZ2SHYxOS8xYWg3WllxNnJmaHkrZE13Zkdxc2ZHRWFz?= =?utf-8?B?eFVRNEJJVW5aVmpmSnkyN3FkUUlOVzhTL3FRTldCNEZYT0VzR2RIZkFyK3F2?= =?utf-8?B?Y0xkZ1FwMWczWjFvTjMxaERqRVpCSTNrbVhuSlNCVDNEaHVTQzZGQktwSDBp?= =?utf-8?B?OVJwc050QW1xVzVRUFRuVjVWaUsvOWRPT2JaeXhjbDgvYTZldEQ5bm9lRjdI?= =?utf-8?B?TDN0a0pvVWs1Z1NPbXNMRGMxV0h4RWw1eUx4YTF3d2VzOXd6OGVSbWRTYjVx?= =?utf-8?B?Slo4M1UvUlZUdXpFNit4Vi91MlhVVHNvT0ZGaWZxMHd6QkpUQ3h4VW5sdCti?= =?utf-8?B?elEvNXRlQlJVdmR3cktmaXRjeHFwSGlJd3kyZXB4WCtNZTUyejM0azl1NkE5?= =?utf-8?B?ek42SVl2MDc1dkk1UHR4TUdXZGpQbnpIcjI5V1RZVS9FMTBGNWM2OFNUSjF6?= =?utf-8?B?bjB1YjRGS2hrdVo5WVRDRS96WlZkaU44UXh2WWd3NUJHdThuTm9OdllvS0E2?= =?utf-8?B?NU5CNXhwY09wdzRrbUZDKys1VEhMYUJ3NzhodldVdVMydTlFU05VQmZEeUQ4?= =?utf-8?B?a1N5OUFza2Y0K0FyNWxkbGNLYlZrSlYyWkNjeXRCN3JuS2hqMHRydEFEQXNN?= =?utf-8?B?VXFSelZESkVsNE5Da1E4K3lzTEwyQWw3aVlaS2YyVVh5WWY1Ry9hNEczUitv?= =?utf-8?B?UDMzRk1oUEZwN2NXUXFlSnN2UnZwdkZSdSt1T1VQT3hTL2dXZE1OM1NQWG5W?= =?utf-8?B?OE9vZ2JOKzc5QXJobVVxNHRCeEdyUFArazloVXd4bEV5Tm90RUF2VThiNjd1?= =?utf-8?B?Q0h0VkE0azRIWER5bFBHRGVtZEZxWlBsZzdkZXowdGI0UldOZkEvUTd4a1k3?= =?utf-8?B?enBLUkRIT2daYU9ENG5KZDJXTzhlYzlxSGRJM29wUTNSK1RjQVE5aVVILzFN?= =?utf-8?B?aWtVSCtYZ2F3eFp6QjI5M1g2M2Z0K0xZanNTeC9Td3hjWDRkR0J3MUMzclNj?= =?utf-8?B?R2J4TTdrL3lCWUdjMHYwUWxERVc5RW9VSmlFUXc3QU80NDVOL1NDVExQU3RM?= =?utf-8?B?SU40dlJDUytPd1dMUmhjejY5TmM3cHJrWXA0ZlVTSG9VMHNNTU92MXVDTGVu?= =?utf-8?B?Ym1nZzZVNmJQUWE0L3R0QVhCR3QvUkN1WDYrMm5obUdRM2dpdlBORXFUQXo3?= =?utf-8?B?eU5SQ0ZFcnRITWtjVjA0NDRoQnJnUHpFUWQwT3dHaDJ6RFA5NVhDNTY3bytW?= =?utf-8?B?RjRXcG9pbGF2MWdneW9xS0U3VGNha0NiZEFXQkJBZERqWk1NQjVHNm5MQm5v?= =?utf-8?B?RUlsTGNFclJkMGFBRzd6OXg5OE0vNEsvOFdOeklxZWdBVFErdnVPVzhpN1FJ?= =?utf-8?B?RkdJV1ZFVEJoRS8vVWtEVWlvU29xU1dJR2JxcEhaT1FKaEVqVkhCRUY3OHY1?= =?utf-8?B?R2lVWXBCVmVRbHlZaTZacXZsTUcxUTFlbFd1aUs4YTJ0TVZGdGZOUE5QTm9p?= =?utf-8?B?Rm5DVGJtb01mbnJ5ZmJYekZEYnc3T0VmU3laOVhwdy9UR2xJbU8vMzF2aksz?= =?utf-8?B?M3I5ZWdRdGxEUUZkR1JGSGZYV0RvU0dqY1UvNE9NczZUZ0c0ZVlHSmJFdmE2?= =?utf-8?B?YkkyUURpcXNiWEgrNldOakQxcmlkMUhvK0ZRaU14ZDgxTnEzeHcvUXFqTU1i?= =?utf-8?B?TTVtaldWcHVpRjIzd3RRZGZiZXpnWHRES1VBUWEvQ3BtZjRtM2JERnZGWVZ0?= =?utf-8?B?eStXMlZsV2N4d2loaGRFMndEZ3BEd1czQmUxeHkrR3UxdnZLb2JTQTAvOFlV?= =?utf-8?B?dXZVSklKb1kvMlAxVVZ4R0xOaVJPZEVUTGtEaWpSc2MzMzdOUWEyZlAxOUts?= =?utf-8?B?TGc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <8D5307A7096D2E4D90FFFE9E43BD265D@eurprd07.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB7PR07MB5978.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bec04bd6-156d-40ab-433e-08dade78d41e X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Dec 2022 08:46:16.1916 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Enebc9/ur5FBdBAyehPhvVYev1qR45b7YSDLnYfXCMTGdecl9LMadujn+yNKIsFXpzqv7ZTfRGKABKd63lOX/vMJNvqCNYbzzxLy6PUmsHc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR07MB8525 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org T24gMjAyMi0xMi0xMyAxMTo0MywgVG9tYXN6IER1c3p5bnNraSB3cm90ZToNCj4gQWRkIHN1cHBv cnQgZm9yIHByb2dyYW1taW5nIFBNVSBjb3VudGVycyBhbmQgcmVhZGluZyB0aGVpciB2YWx1ZXMN Cj4gaW4gcnVudGltZSBieXBhc3Npbmcga2VybmVsIGNvbXBsZXRlbHkuDQo+IA0KPiBUaGlzIGlz IGVzcGVjaWFsbHkgdXNlZnVsIGluIGNhc2VzIHdoZXJlIENQVSBjb3JlcyBhcmUgaXNvbGF0ZWQN Cj4gKG5vaHpfZnVsbCkgaS5lIHJ1biBkZWRpY2F0ZWQgdGFza3MuIEluIHN1Y2ggY2FzZXMgb25l IGNhbm5vdCB1c2UNCj4gc3RhbmRhcmQgcGVyZiB1dGlsaXR5IHdpdGhvdXQgc2FjcmlmaWNpbmcg bGF0ZW5jeSBhbmQgcGVyZm9ybWFuY2UuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBUb21hc3ogRHVz enluc2tpIDx0ZHVzenluc2tpQG1hcnZlbGwuY29tPg0KPiAtLS0NCj4gICBhcHAvdGVzdC9tZXNv bi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAxICsNCj4gICBhcHAvdGVzdC90ZXN0X3BtdS5j ICAgICAgICAgICAgICAgICAgIHwgIDQxICsrKw0KPiAgIGRvYy9ndWlkZXMvcHJvZ19ndWlkZS9w cm9maWxlX2FwcC5yc3QgfCAgIDggKw0KPiAgIGxpYi9lYWwvY29tbW9uL21lc29uLmJ1aWxkICAg ICAgICAgICAgfCAgIDMgKw0KPiAgIGxpYi9lYWwvY29tbW9uL3BtdV9wcml2YXRlLmggICAgICAg ICAgfCAgNDEgKysrDQo+ICAgbGliL2VhbC9jb21tb24vcnRlX3BtdS5jICAgICAgICAgICAgICB8 IDQ1NiArKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgIGxpYi9lYWwvaW5jbHVkZS9tZXNv bi5idWlsZCAgICAgICAgICAgfCAgIDEgKw0KPiAgIGxpYi9lYWwvaW5jbHVkZS9ydGVfcG11Lmgg ICAgICAgICAgICAgfCAyMDQgKysrKysrKysrKysrDQo+ICAgbGliL2VhbC9saW51eC9lYWwuYyAg ICAgICAgICAgICAgICAgICB8ICAgNCArDQo+ICAgbGliL2VhbC92ZXJzaW9uLm1hcCAgICAgICAg ICAgICAgICAgICB8ICAgNiArDQo+ICAgMTAgZmlsZXMgY2hhbmdlZCwgNzY1IGluc2VydGlvbnMo KykNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgYXBwL3Rlc3QvdGVzdF9wbXUuYw0KPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWIvZWFsL2NvbW1vbi9wbXVfcHJpdmF0ZS5oDQo+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi9lYWwvY29tbW9uL3J0ZV9wbXUuYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWIvZWFsL2luY2x1ZGUvcnRlX3BtdS5oDQo+IA0KPiBkaWZmIC0tZ2l0IGEvYXBwL3Rlc3Qv bWVzb24uYnVpbGQgYi9hcHAvdGVzdC9tZXNvbi5idWlsZA0KPiBpbmRleCBmMzRkMTllM2MzLi45 M2IzMzAwMzA5IDEwMDY0NA0KPiAtLS0gYS9hcHAvdGVzdC9tZXNvbi5idWlsZA0KPiArKysgYi9h cHAvdGVzdC9tZXNvbi5idWlsZA0KPiBAQCAtMTQzLDYgKzE0Myw3IEBAIHRlc3Rfc291cmNlcyA9 IGZpbGVzKA0KPiAgICAgICAgICAgJ3Rlc3RfdGltZXJfcmFjZWNvbmQuYycsDQo+ICAgICAgICAg ICAndGVzdF90aW1lcl9zZWNvbmRhcnkuYycsDQo+ICAgICAgICAgICAndGVzdF90aWNrZXRsb2Nr LmMnLA0KPiArICAgICAgICAndGVzdF9wbXUuYycsDQo+ICAgICAgICAgICAndGVzdF90cmFjZS5j JywNCj4gICAgICAgICAgICd0ZXN0X3RyYWNlX3JlZ2lzdGVyLmMnLA0KPiAgICAgICAgICAgJ3Rl c3RfdHJhY2VfcGVyZi5jJywNCj4gZGlmZiAtLWdpdCBhL2FwcC90ZXN0L3Rlc3RfcG11LmMgYi9h cHAvdGVzdC90ZXN0X3BtdS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMDAuLmZkMzMxYWY5ZWUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9hcHAvdGVzdC90ZXN0 X3BtdS5jDQo+IEBAIC0wLDAgKzEsNDEgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMy1DbGF1c2UNCj4gKyAqIENvcHlyaWdodChDKSAyMDIyIE1hcnZlbGwgSW50ZXJuYXRp b25hbCBMdGQuDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPHJ0ZV9wbXUuaD4NCj4gKw0KPiAr I2luY2x1ZGUgInRlc3QuaCINCj4gKw0KPiArc3RhdGljIGludA0KPiArdGVzdF9wbXVfcmVhZCh2 b2lkKQ0KPiArew0KPiArCXVpbnQ2NF90IHZhbCA9IDA7DQo+ICsJaW50IHRyaWVzID0gMTA7DQo+ ICsJaW50IGV2ZW50ID0gLTE7DQo+ICsNCj4gKwl3aGlsZSAodHJpZXMtLSkNCj4gKwkJdmFsICs9 IHJ0ZV9wbXVfcmVhZChldmVudCk7DQo+ICsNCj4gKwlpZiAodmFsID09IDApDQo+ICsJCXJldHVy biBURVNUX0ZBSUxFRDsNCj4gKw0KPiArCXJldHVybiBURVNUX1NVQ0NFU1M7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBzdHJ1Y3QgdW5pdF90ZXN0X3N1aXRlIHBtdV90ZXN0cyA9IHsNCj4gKwkuc3Vp dGVfbmFtZSA9ICJwbXUgYXV0b3Rlc3QiLA0KPiArCS5zZXR1cCA9IE5VTEwsDQo+ICsJLnRlYXJk b3duID0gTlVMTCwNCj4gKwkudW5pdF90ZXN0X2Nhc2VzID0gew0KPiArCQlURVNUX0NBU0UodGVz dF9wbXVfcmVhZCksDQo+ICsJCVRFU1RfQ0FTRVNfRU5EKCkNCj4gKwl9DQo+ICt9Ow0KPiArDQo+ ICtzdGF0aWMgaW50DQo+ICt0ZXN0X3BtdSh2b2lkKQ0KPiArew0KPiArCXJldHVybiB1bml0X3Rl c3Rfc3VpdGVfcnVubmVyKCZwbXVfdGVzdHMpOw0KPiArfQ0KPiArDQo+ICtSRUdJU1RFUl9URVNU X0NPTU1BTkQocG11X2F1dG90ZXN0LCB0ZXN0X3BtdSk7DQo+IGRpZmYgLS1naXQgYS9kb2MvZ3Vp ZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAucnN0IGIvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3By b2ZpbGVfYXBwLnJzdA0KPiBpbmRleCAxNDI5MmQ0YzI1Li5hOGI1MDFmZTBjIDEwMDY0NA0KPiAt LS0gYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAucnN0DQo+ICsrKyBiL2RvYy9n dWlkZXMvcHJvZ19ndWlkZS9wcm9maWxlX2FwcC5yc3QNCj4gQEAgLTcsNiArNywxNCBAQCBQcm9m aWxlIFlvdXIgQXBwbGljYXRpb24NCj4gICBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJl IG1ldGhvZHMgb2YgcHJvZmlsaW5nIERQREsgYXBwbGljYXRpb25zIG9uDQo+ICAgZGlmZmVyZW50 IGFyY2hpdGVjdHVyZXMuDQo+ICAgDQo+ICtQZXJmb3JtYW5jZSBjb3VudGVyIGJhc2VkIHByb2Zp bGluZw0KPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gKw0KPiArTWFq b3JpdHkgb2YgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IHNvbWUgc29ydCBoYXJkd2FyZSBtZWFzdXJl bWVudCB1bml0IHdoaWNoIHByb3ZpZGVzIGEgc2V0IG9mDQo+ICtwcm9ncmFtbWFibGUgY291bnRl cnMgdGhhdCBtb25pdG9yIHNwZWNpZmljIGV2ZW50cy4gVGhlcmUgYXJlIGRpZmZlcmVudCB0b29s cyB3aGljaCBjYW4gZ2F0aGVyDQo+ICt0aGF0IGluZm9ybWF0aW9uLCBwZXJmIGJlaW5nIGFuIGV4 YW1wbGUgaGVyZS4gVGhvdWdoIGluIHNvbWUgc2NlbmFyaW9zLCBlZy4gd2hlbiBDUFUgY29yZXMg YXJlDQo+ICtpc29sYXRlZCAobm9oel9mdWxsKSBhbmQgcnVuIGRlZGljYXRlZCB0YXNrcywgdXNp bmcgcGVyZiBpcyBsZXNzIHRoYW4gaWRlYWwuIEluIHN1Y2ggY2FzZXMgb25lIGNhbg0KPiArcmVh ZCBzcGVjaWZpYyBldmVudHMgZGlyZWN0bHkgZnJvbSBhcHBsaWNhdGlvbiB2aWEgYGBydGVfcG11 X3JlYWQoKWBgLg0KPiAgIA0KPiAgIFByb2ZpbGluZyBvbiB4ODYNCj4gICAtLS0tLS0tLS0tLS0t LS0tDQo+IGRpZmYgLS1naXQgYS9saWIvZWFsL2NvbW1vbi9tZXNvbi5idWlsZCBiL2xpYi9lYWwv Y29tbW9uL21lc29uLmJ1aWxkDQo+IGluZGV4IDkxNzc1OGNjNjUuLmQ2ZDA1YjU2ZjMgMTAwNjQ0 DQo+IC0tLSBhL2xpYi9lYWwvY29tbW9uL21lc29uLmJ1aWxkDQo+ICsrKyBiL2xpYi9lYWwvY29t bW9uL21lc29uLmJ1aWxkDQo+IEBAIC0zOCw2ICszOCw5IEBAIHNvdXJjZXMgKz0gZmlsZXMoDQo+ ICAgICAgICAgICAncnRlX3NlcnZpY2UuYycsDQo+ICAgICAgICAgICAncnRlX3ZlcnNpb24uYycs DQo+ICAgKQ0KPiAraWYgaXNfbGludXgNCj4gKyAgICBzb3VyY2VzICs9IGZpbGVzKCdydGVfcG11 LmMnKQ0KPiArZW5kaWYNCj4gICBpZiBpc19saW51eCBvciBpc193aW5kb3dzDQo+ICAgICAgIHNv dXJjZXMgKz0gZmlsZXMoJ2VhbF9jb21tb25fZHlubWVtLmMnKQ0KPiAgIGVuZGlmDQo+IGRpZmYg LS1naXQgYS9saWIvZWFsL2NvbW1vbi9wbXVfcHJpdmF0ZS5oIGIvbGliL2VhbC9jb21tb24vcG11 X3ByaXZhdGUuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5j YWRlNDI0NWU2DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL2VhbC9jb21tb24vcG11X3By aXZhdGUuaA0KPiBAQCAtMCwwICsxLDQxIEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyMiBNYXJ2ZWxsDQo+ICsgKi8N Cj4gKw0KPiArI2lmbmRlZiBfUE1VX1BSSVZBVEVfSF8NCj4gKyNkZWZpbmUgX1BNVV9QUklWQVRF X0hfDQo+ICsNCj4gKy8qKg0KPiArICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIFBNVSBpbml0IGNh bGxiYWNrLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgMCBpbiBjYXNlIG9mIHN1Y2Nl c3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4gKyAqLw0KPiAraW50DQo+ICtwbXVfYXJj aF9pbml0KHZvaWQpOw0KPiArDQo+ICsvKioNCj4gKyAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBQ TVUgY2xlYW51cCBjYWxsYmFjay4NCj4gKyAqLw0KPiArdm9pZA0KPiArcG11X2FyY2hfZmluaSh2 b2lkKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBBcHBseSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgc2V0 dGluZ3MgdG8gY29uZmlnIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHN5c2NhbGwuDQo+ICsgKi8NCj4g K3ZvaWQNCj4gK3BtdV9hcmNoX2ZpeHVwX2NvbmZpZyh1aW50NjRfdCBjb25maWdbM10pOw0KPiAr DQo+ICsvKioNCj4gKyAqIEluaXRpYWxpemUgUE1VIHRyYWNpbmcgaW50ZXJuYWxzLg0KPiArICov DQo+ICt2b2lkDQo+ICtlYWxfcG11X2luaXQodm9pZCk7DQo+ICsNCj4gKy8qKg0KPiArICogQ2xl YW51cCBQTVUgaW50ZXJuYWxzLg0KPiArICovDQo+ICt2b2lkDQo+ICtlYWxfcG11X2Zpbmkodm9p ZCk7DQo+ICsNCj4gKyNlbmRpZiAvKiBfUE1VX1BSSVZBVEVfSF8gKi8NCj4gZGlmZiAtLWdpdCBh L2xpYi9lYWwvY29tbW9uL3J0ZV9wbXUuYyBiL2xpYi9lYWwvY29tbW9uL3J0ZV9wbXUuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi4wNDlmZTE5ZmUzDQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvbGliL2VhbC9jb21tb24vcnRlX3BtdS5jDQo+IEBAIC0wLDAg KzEsNDU2IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ ICsgKiBDb3B5cmlnaHQoQykgMjAyMiBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KPiArICov DQo+ICsNCj4gKyNpbmNsdWRlIDxjdHlwZS5oPg0KPiArI2luY2x1ZGUgPGRpcmVudC5oPg0KPiAr I2luY2x1ZGUgPGVycm5vLmg+DQo+ICsjaW5jbHVkZSA8cmVnZXguaD4NCj4gKyNpbmNsdWRlIDxz dGRsaWIuaD4NCj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwu aD4NCj4gKyNpbmNsdWRlIDxzeXMvbW1hbi5oPg0KPiArI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPg0K PiArI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+DQo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQo+ICsN Cj4gKyNpbmNsdWRlIDxydGVfZWFsX3BhZ2luZy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9wbXUuaD4N Cj4gKyNpbmNsdWRlIDxydGVfdGFpbHEuaD4NCj4gKw0KPiArI2luY2x1ZGUgInBtdV9wcml2YXRl LmgiDQo+ICsNCj4gKyNkZWZpbmUgRVZFTlRfU09VUkNFX0RFVklDRVNfUEFUSCAiL3N5cy9idXMv ZXZlbnRfc291cmNlL2RldmljZXMiDQo+ICsNCj4gKyNpZm5kZWYgR0VOTUFTS19VTEwNCj4gKyNk ZWZpbmUgR0VOTUFTS19VTEwoaCwgbCkgKCh+MFVMTCAtICgxVUxMIDw8IChsKSkgKyAxKSAmICh+ MFVMTCA+PiAoKDY0IC0gMSAtIChoKSkpKSkNCj4gKyNlbmRpZg0KPiArDQo+ICsjaWZuZGVmIEZJ RUxEX1BSRVANCj4gKyNkZWZpbmUgRklFTERfUFJFUChtLCB2KSAoKCh1aW50NjRfdCkodikgPDwg KF9fYnVpbHRpbl9mZnNsbChtKSAtIDEpKSAmIChtKSkNCj4gKyNlbmRpZg0KPiArDQo+ICtzdHJ1 Y3QgcnRlX3BtdSAqcnRlX3BtdTsNCj4gKw0KPiArLyoNCj4gKyAqIEZvbGxvd2luZyBfX3J0ZV93 ZWFrIGZ1bmN0aW9ucyBwcm92aWRlIGRlZmF1bHQgbm8tb3AuIEFyY2hpdGVjdHVyZXMgc2hvdWxk IG92ZXJyaWRlIHRoZW0gaWYNCj4gKyAqIG5lY2Vzc2FyeS4NCj4gKyAqLw0KPiArDQo+ICtpbnQN Cj4gK19fcnRlX3dlYWsgcG11X2FyY2hfaW5pdCh2b2lkKQ0KPiArew0KPiArCXJldHVybiAwOw0K PiArfQ0KPiArDQo+ICt2b2lkDQo+ICtfX3J0ZV93ZWFrIHBtdV9hcmNoX2Zpbmkodm9pZCkNCj4g K3sNCj4gK30NCj4gKw0KPiArdm9pZA0KPiArX19ydGVfd2VhayBwbXVfYXJjaF9maXh1cF9jb25m aWcodWludDY0X3QgY29uZmlnWzNdKQ0KPiArew0KPiArCVJURV9TRVRfVVNFRChjb25maWcpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICtnZXRfdGVybV9mb3JtYXQoY29uc3QgY2hhciAq bmFtZSwgaW50ICpudW0sIHVpbnQ2NF90ICptYXNrKQ0KPiArew0KPiArCWNoYXIgKmNvbmZpZyA9 IE5VTEw7DQo+ICsJY2hhciBwYXRoW1BBVEhfTUFYXTsNCj4gKwlpbnQgaGlnaCwgbG93LCByZXQ7 DQo+ICsJRklMRSAqZnA7DQo+ICsNCj4gKwkvKiBxdWllc2NlIC1XbWF5YmUtdW5pbml0aWFsaXpl ZCB3YXJuaW5nICovDQo+ICsJKm51bSA9IDA7DQo+ICsJKm1hc2sgPSAwOw0KPiArDQo+ICsJc25w cmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMv Zm9ybWF0LyVzIiwgcnRlX3BtdS0+bmFtZSwgbmFtZSkNCg0KVGhpcyBjb2RlIG1pZ2h0IGNyYXNo IGluIGNhc2UgYSBsb25nIG5hbWUgaXMgc3VwcGxpZWQsIHdoaWNoIGlzIG1heWJlIA0Kbm90IHdh bnQgeW91IHdhbnQuIEEgdHJ1bmFjdGUgYW5kIGEgImZpbGUgbm90IGZvdW5kIiBpcyBwcm9iYWJs eSBiZXR0ZXIuIA0KSSBiZWxpZXZlIHRoZXJlIGlzIGEgc25wcmludGYgbG9va2FsaWtlIHdpdGgg dGhlc2UgcHJvcGVydGllcyBpbiBEUERLLg0KDQo+ICsJZnAgPSBmb3BlbihwYXRoLCAiciIpOw0K PiArCWlmICghZnApDQo+ICsJCXJldHVybiAtZXJybm87DQo+ICsNCj4gKwllcnJubyA9IDA7DQo+ ICsJcmV0ID0gZnNjYW5mKGZwLCAiJW1bXjpdOiVkLSVkIiwgJmNvbmZpZywgJmxvdywgJmhpZ2gp Ow0KPiArCWlmIChyZXQgPCAyKSB7DQo+ICsJCXJldCA9IC1FTk9EQVRBOw0KPiArCQlnb3RvIG91 dDsNCj4gKwl9DQo+ICsJaWYgKGVycm5vKSB7DQo+ICsJCXJldCA9IC1lcnJubzsNCj4gKwkJZ290 byBvdXQ7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHJldCA9PSAyKQ0KPiArCQloaWdoID0gbG93Ow0K PiArDQo+ICsJKm1hc2sgPSBHRU5NQVNLX1VMTChoaWdoLCBsb3cpOw0KPiArCS8qIExhc3QgZGln aXQgc2hvdWxkIGJlIFswMTJdLiBJZiBsYXN0IGRpZ2l0IGlzIG1pc3NpbmcgMCBpcyBpbXBsaWVk LiAqLw0KPiArCSpudW0gPSBjb25maWdbc3RybGVuKGNvbmZpZykgLSAxXTsNCj4gKwkqbnVtID0g aXNkaWdpdCgqbnVtKSA/ICpudW0gLSAnMCcgOiAwOw0KPiArDQo+ICsJcmV0ID0gMDsNCj4gK291 dDoNCj4gKwlmcmVlKGNvbmZpZyk7DQo+ICsJZmNsb3NlKGZwKTsNCj4gKw0KPiArCXJldHVybiBy ZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK3BhcnNlX2V2ZW50KGNoYXIgKmJ1Ziwg dWludDY0X3QgY29uZmlnWzNdKQ0KPiArew0KPiArCWNoYXIgKnRva2VuLCAqdGVybTsNCj4gKwlp bnQgbnVtLCByZXQsIHZhbDsNCj4gKwl1aW50NjRfdCBtYXNrOw0KPiArDQo+ICsJY29uZmlnWzBd ID0gY29uZmlnWzFdID0gY29uZmlnWzJdID0gMDsNCj4gKw0KPiArCXRva2VuID0gc3RydG9rKGJ1 ZiwgIiwiKTsNCj4gKwl3aGlsZSAodG9rZW4pIHsNCj4gKwkJZXJybm8gPSAwOw0KPiArCQkvKiA8 dGVybT49PHZhbHVlPiAqLw0KPiArCQlyZXQgPSBzc2NhbmYodG9rZW4sICIlbVtePV09JWkiLCAm dGVybSwgJnZhbCk7DQo+ICsJCWlmIChyZXQgPCAxKQ0KPiArCQkJcmV0dXJuIC1FTk9EQVRBOw0K PiArCQlpZiAoZXJybm8pDQo+ICsJCQlyZXR1cm4gLWVycm5vOw0KPiArCQlpZiAocmV0ID09IDEp DQo+ICsJCQl2YWwgPSAxOw0KPiArDQo+ICsJCXJldCA9IGdldF90ZXJtX2Zvcm1hdCh0ZXJtLCAm bnVtLCAmbWFzayk7DQo+ICsJCWZyZWUodGVybSk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1 cm4gcmV0Ow0KPiArDQo+ICsJCWNvbmZpZ1tudW1dIHw9IEZJRUxEX1BSRVAobWFzaywgdmFsKTsN Cj4gKwkJdG9rZW4gPSBzdHJ0b2soTlVMTCwgIiwiKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArZ2V0X2V2ZW50X2NvbmZpZyhjb25zdCBj aGFyICpuYW1lLCB1aW50NjRfdCBjb25maWdbM10pDQo+ICt7DQo+ICsJY2hhciBwYXRoW1BBVEhf TUFYXSwgYnVmW0JVRlNJWl07DQo+ICsJRklMRSAqZnA7DQo+ICsJaW50IHJldDsNCj4gKw0KPiAr CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgRVZFTlRfU09VUkNFX0RFVklDRVNfUEFUSCAi LyVzL2V2ZW50cy8lcyIsIHJ0ZV9wbXUtPm5hbWUsIG5hbWUpOw0KPiArCWZwID0gZm9wZW4ocGF0 aCwgInIiKTsNCj4gKwlpZiAoIWZwKQ0KPiArCQlyZXR1cm4gLWVycm5vOw0KPiArDQo+ICsJcmV0 ID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgZnApOw0KPiArCWlmIChyZXQgPT0gMCkgew0K PiArCQlmY2xvc2UoZnApOw0KPiArDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKwlm Y2xvc2UoZnApOw0KPiArCWJ1ZltyZXRdID0gJ1wwJzsNCj4gKw0KPiArCXJldHVybiBwYXJzZV9l dmVudChidWYsIGNvbmZpZyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2RvX3BlcmZf ZXZlbnRfb3Blbih1aW50NjRfdCBjb25maWdbM10sIGludCBsY29yZV9pZCwgaW50IGdyb3VwX2Zk KQ0KPiArew0KPiArCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0ciA9IHsNCj4gKwkJLnNpemUg PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksDQo+ICsJCS50eXBlID0gUEVSRl9UWVBF X1JBVywNCj4gKwkJLmV4Y2x1ZGVfa2VybmVsID0gMSwNCj4gKwkJLmV4Y2x1ZGVfaHYgPSAxLA0K PiArCQkuZGlzYWJsZWQgPSAxLA0KPiArCX07DQo+ICsNCj4gKwlwbXVfYXJjaF9maXh1cF9jb25m aWcoY29uZmlnKTsNCj4gKw0KPiArCWF0dHIuY29uZmlnID0gY29uZmlnWzBdOw0KPiArCWF0dHIu Y29uZmlnMSA9IGNvbmZpZ1sxXTsNCj4gKwlhdHRyLmNvbmZpZzIgPSBjb25maWdbMl07DQo+ICsN Cj4gKwlyZXR1cm4gc3lzY2FsbChTWVNfcGVyZl9ldmVudF9vcGVuLCAmYXR0ciwgcnRlX2dldHRp ZCgpLCBydGVfbGNvcmVfdG9fY3B1X2lkKGxjb3JlX2lkKSwNCj4gKwkJICAgICAgIGdyb3VwX2Zk LCAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArb3Blbl9ldmVudHMoaW50IGxjb3Jl X2lkKQ0KPiArew0KPiArCXN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91cCA9ICZydGVf cG11LT5ncm91cFtsY29yZV9pZF07DQo+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnQgKmV2ZW50Ow0K PiArCXVpbnQ2NF90IGNvbmZpZ1szXTsNCj4gKwlpbnQgbnVtID0gMCwgcmV0Ow0KPiArDQo+ICsJ LyogZ3JvdXAgbGVhZGVyIGdldHMgY3JlYXRlZCBmaXJzdCwgd2l0aCBmZCA9IC0xICovDQo+ICsJ Z3JvdXAtPmZkc1swXSA9IC0xOw0KPiArDQo+ICsJVEFJTFFfRk9SRUFDSChldmVudCwgJnJ0ZV9w bXUtPmV2ZW50X2xpc3QsIG5leHQpIHsNCj4gKwkJcmV0ID0gZ2V0X2V2ZW50X2NvbmZpZyhldmVu dC0+bmFtZSwgY29uZmlnKTsNCj4gKwkJaWYgKHJldCkgew0KPiArCQkJUlRFX0xPRyhFUlIsIEVB TCwgImZhaWxlZCB0byBnZXQgJXMgZXZlbnQgY29uZmlnXG4iLCBldmVudC0+bmFtZSk7DQo+ICsJ CQljb250aW51ZTsNCj4gKwkJfQ0KPiArDQo+ICsJCXJldCA9IGRvX3BlcmZfZXZlbnRfb3Blbihj b25maWcsIGxjb3JlX2lkLCBncm91cC0+ZmRzWzBdKTsNCj4gKwkJaWYgKHJldCA9PSAtMSkgew0K PiArCQkJaWYgKGVycm5vID09IEVPUE5PVFNVUFApDQo+ICsJCQkJUlRFX0xPRyhFUlIsIEVBTCwg IjY0IGJpdCBjb3VudGVycyBub3Qgc3VwcG9ydGVkXG4iKTsNCj4gKw0KPiArCQkJcmV0ID0gLWVy cm5vOw0KPiArCQkJZ290byBvdXQ7DQo+ICsJCX0NCj4gKw0KPiArCQlncm91cC0+ZmRzW2V2ZW50 LT5pbmRleF0gPSByZXQ7DQo+ICsJCW51bSsrOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0K PiArb3V0Og0KPiArCWZvciAoLS1udW07IG51bSA+PSAwOyBudW0tLSkgew0KPiArCQljbG9zZShn cm91cC0+ZmRzW251bV0pOw0KPiArCQlncm91cC0+ZmRzW251bV0gPSAtMTsNCj4gKwl9DQo+ICsN Cj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK21tYXBf ZXZlbnRzKGludCBsY29yZV9pZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91 cCAqZ3JvdXAgPSAmcnRlX3BtdS0+Z3JvdXBbbGNvcmVfaWRdOw0KPiArCXZvaWQgKmFkZHI7DQo+ ICsJaW50IHJldCwgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBydGVfcG11LT5udW1fZ3Jv dXBfZXZlbnRzOyBpKyspIHsNCj4gKwkJYWRkciA9IG1tYXAoMCwgcnRlX21lbV9wYWdlX3NpemUo KSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBncm91cC0+ZmRzW2ldLCAwKTsNCj4gKwkJaWYgKGFk ZHIgPT0gTUFQX0ZBSUxFRCkgew0KPiArCQkJcmV0ID0gLWVycm5vOw0KPiArCQkJZ290byBvdXQ7 DQo+ICsJCX0NCj4gKw0KPiArCQlncm91cC0+bW1hcF9wYWdlc1tpXSA9IGFkZHI7DQo+ICsJfQ0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICtvdXQ6DQo+ICsJZm9yICg7IGk7IGktLSkgew0KPiArCQlt dW5tYXAoZ3JvdXAtPm1tYXBfcGFnZXNbaSAtIDFdLCBydGVfbWVtX3BhZ2Vfc2l6ZSgpKTsNCj4g KwkJZ3JvdXAtPm1tYXBfcGFnZXNbaSAtIDFdID0gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1 cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArY2xlYW51cF9ldmVudHMoaW50 IGxjb3JlX2lkKQ0KDQpsY29yZV9pZCBpcyBhbiB1bnNpZ25lZCBpbnQuDQoNCj4gK3sNCj4gKwlz dHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCAqZ3JvdXAgPSAmcnRlX3BtdS0+Z3JvdXBbbGNvcmVf aWRdOw0KPiArCWludCBpOw0KPiArDQo+ICsJaWYgKCFncm91cC0+ZmRzKQ0KPiArCQlyZXR1cm47 DQoNCmdyb3VwLT5mZHMgPT0gTlVMTA0KDQpUaGlzIGNvZGluZyBzdHlsZSB2aW9sYXRpbmcgYXBw ZWFycyB0aHJvdWdocHV0IHRoZSBwYXRjaCBzZXQuDQoNCj4gKw0KPiArCWlmIChncm91cC0+ZmRz WzBdICE9IC0xKQ0KPiArCQlpb2N0bChncm91cC0+ZmRzWzBdLCBQRVJGX0VWRU5UX0lPQ19ESVNB QkxFLCBQRVJGX0lPQ19GTEFHX0dST1VQKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBydGVf cG11LT5udW1fZ3JvdXBfZXZlbnRzOyBpKyspIHsNCj4gKwkJaWYgKGdyb3VwLT5tbWFwX3BhZ2Vz W2ldKSB7DQo+ICsJCQltdW5tYXAoZ3JvdXAtPm1tYXBfcGFnZXNbaV0sIHJ0ZV9tZW1fcGFnZV9z aXplKCkpOw0KPiArCQkJZ3JvdXAtPm1tYXBfcGFnZXNbaV0gPSBOVUxMOw0KPiArCQl9DQo+ICsN Cj4gKwkJaWYgKGdyb3VwLT5mZHNbaV0gIT0gLTEpIHsNCj4gKwkJCWNsb3NlKGdyb3VwLT5mZHNb aV0pOw0KPiArCQkJZ3JvdXAtPmZkc1tpXSA9IC0xOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJ ZnJlZShncm91cC0+bW1hcF9wYWdlcyk7DQo+ICsJZnJlZShncm91cC0+ZmRzKTsNCj4gKw0KPiAr CWdyb3VwLT5tbWFwX3BhZ2VzID0gTlVMTDsNCj4gKwlncm91cC0+ZmRzID0gTlVMTDsNCj4gKwln cm91cC0+ZW5hYmxlZCA9IGZhbHNlOw0KPiArfQ0KPiArDQo+ICtpbnQgX19ydGVfbm9pbmxpbmUN Cj4gK3J0ZV9wbXVfZW5hYmxlX2dyb3VwKGludCBsY29yZV9pZCkNCg0KdW5zaWduZWQNCg0KPiAr ew0KPiArCXN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91cCA9ICZydGVfcG11LT5ncm91 cFtsY29yZV9pZF07DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmIChydGVfcG11LT5udW1fZ3Jv dXBfZXZlbnRzID09IDApIHsNCj4gKwkJUlRFX0xPRyhERUJVRywgRUFMLCAibm8gbWF0Y2hpbmcg UE1VIGV2ZW50c1xuIik7DQo+ICsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJZ3Jv dXAtPmZkcyA9IGNhbGxvYyhydGVfcG11LT5udW1fZ3JvdXBfZXZlbnRzLCBzaXplb2YoKmdyb3Vw LT5mZHMpKTsNCj4gKwlpZiAoIWdyb3VwLT5mZHMpIHsNCj4gKwkJUlRFX0xPRyhFUlIsIEVBTCwg ImZhaWxlZCB0byBhbGxvYyBkZXNjcmlwdG9yIG1lbW9yeVxuIik7DQo+ICsNCj4gKwkJcmV0dXJu IC1FTk9NRU07DQo+ICsJfQ0KPiArDQo+ICsJZ3JvdXAtPm1tYXBfcGFnZXMgPSBjYWxsb2MocnRl X3BtdS0+bnVtX2dyb3VwX2V2ZW50cywgc2l6ZW9mKCpncm91cC0+bW1hcF9wYWdlcykpOw0KPiAr CWlmICghZ3JvdXAtPm1tYXBfcGFnZXMpIHsNCj4gKwkJUlRFX0xPRyhFUlIsIEVBTCwgImZhaWxl ZCB0byBhbGxvYyB1c2VycGFnZSBtZW1vcnlcbiIpOw0KPiArDQo+ICsJCXJldCA9IC1FTk9NRU07 DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCXJldCA9IG9wZW5fZXZlbnRzKGxjb3Jl X2lkKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCVJURV9MT0coRVJSLCBFQUwsICJmYWlsZWQgdG8g b3BlbiBldmVudHMgb24gbGNvcmUtd29ya2VyLSVkXG4iLCBsY29yZV9pZCk7DQo+ICsJCWdvdG8g b3V0Ow0KPiArCX0NCj4gKw0KPiArCXJldCA9IG1tYXBfZXZlbnRzKGxjb3JlX2lkKTsNCj4gKwlp ZiAocmV0KSB7DQo+ICsJCVJURV9MT0coRVJSLCBFQUwsICJmYWlsZWQgdG8gbWFwIGV2ZW50cyBv biBsY29yZS13b3JrZXItJWRcbiIsIGxjb3JlX2lkKTsNCj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0K PiArDQo+ICsJaWYgKGlvY3RsKGdyb3VwLT5mZHNbMF0sIFBFUkZfRVZFTlRfSU9DX0VOQUJMRSwg UEVSRl9JT0NfRkxBR19HUk9VUCkgPT0gLTEpIHsNCj4gKwkJUlRFX0xPRyhFUlIsIEVBTCwgImZh aWxlZCB0byBlbmFibGUgZXZlbnRzIG9uIGxjb3JlLXdvcmtlci0lZFxuIiwgbGNvcmVfaWQpOw0K PiArDQo+ICsJCXJldCA9IC1lcnJubzsNCj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiArDQo+ICsJ cmV0dXJuIDA7DQo+ICsNCj4gK291dDoNCj4gKwljbGVhbnVwX2V2ZW50cyhsY29yZV9pZCk7DQo+ ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICtzY2FuX3Bt dXModm9pZCkNCj4gK3sNCj4gKwljaGFyIHBhdGhbUEFUSF9NQVhdOw0KPiArCXN0cnVjdCBkaXJl bnQgKmRlbnQ7DQo+ICsJY29uc3QgY2hhciAqbmFtZTsNCj4gKwlESVIgKmRpcnA7DQo+ICsNCj4g KwlkaXJwID0gb3BlbmRpcihFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIKTsNCj4gKwlpZiAoIWRp cnApDQo+ICsJCXJldHVybiAtZXJybm87DQo+ICsNCj4gKwl3aGlsZSAoKGRlbnQgPSByZWFkZGly KGRpcnApKSkgew0KPiArCQluYW1lID0gZGVudC0+ZF9uYW1lOw0KPiArCQlpZiAobmFtZVswXSA9 PSAnLicpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQkvKiBzeXNmcyBlbnRyeSBzaG91bGQg ZWl0aGVyIGNvbnRhaW4gY3B1cyBvciBiZSBhIGNwdSAqLw0KPiArCQlpZiAoIXN0cmNtcChuYW1l LCAiY3B1IikpDQo+ICsJCQlicmVhazsNCj4gKw0KPiArCQlzbnByaW50ZihwYXRoLCBzaXplb2Yo cGF0aCksIEVWRU5UX1NPVVJDRV9ERVZJQ0VTX1BBVEggIi8lcy9jcHVzIiwgbmFtZSk7DQo+ICsJ CWlmIChhY2Nlc3MocGF0aCwgRl9PSykgPT0gMCkNCj4gKwkJCWJyZWFrOw0KPiArCX0NCj4gKw0K PiArCWNsb3NlZGlyKGRpcnApOw0KPiArDQo+ICsJaWYgKGRlbnQpIHsNCj4gKwkJcnRlX3BtdS0+ bmFtZSA9IHN0cmR1cChuYW1lKTsNCj4gKwkJaWYgKCFydGVfcG11LT5uYW1lKQ0KPiArCQkJcmV0 dXJuIC1FTk9NRU07DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHJ0ZV9wbXUtPm5hbWUgPyAwIDog LUVOT0RFVjsNCj4gK30NCj4gKw0KPiAraW50DQo+ICtydGVfcG11X2FkZF9ldmVudChjb25zdCBj aGFyICpuYW1lKQ0KPiArew0KPiArCXN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVudDsNCj4gKwlj aGFyIHBhdGhbUEFUSF9NQVhdOw0KPiArDQo+ICsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgp LCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvZXZlbnRzLyVzIiwgcnRlX3BtdS0+bmFt ZSwgbmFtZSk7DQo+ICsJaWYgKGFjY2VzcyhwYXRoLCBSX09LKSkNCj4gKwkJcmV0dXJuIC1FTk9E RVY7DQo+ICsNCj4gKwlUQUlMUV9GT1JFQUNIKGV2ZW50LCAmcnRlX3BtdS0+ZXZlbnRfbGlzdCwg bmV4dCkgew0KPiArCQlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgbmFtZSkpDQo+ICsJCQlyZXR1 cm4gZXZlbnQtPmluZGV4Ow0KPiArCQljb250aW51ZTsNCj4gKwl9DQo+ICsNCj4gKwlldmVudCA9 IGNhbGxvYygxLCBzaXplb2YoKmV2ZW50KSk7DQo+ICsJaWYgKCFldmVudCkNCj4gKwkJcmV0dXJu IC1FTk9NRU07DQo+ICsNCj4gKwlldmVudC0+bmFtZSA9IHN0cmR1cChuYW1lKTsNCj4gKwlpZiAo IWV2ZW50LT5uYW1lKSB7DQo+ICsJCWZyZWUoZXZlbnQpOw0KPiArDQo+ICsJCXJldHVybiAtRU5P TUVNOw0KPiArCX0NCj4gKw0KPiArCWV2ZW50LT5pbmRleCA9IHJ0ZV9wbXUtPm51bV9ncm91cF9l dmVudHMrKzsNCj4gKwlUQUlMUV9JTlNFUlRfVEFJTCgmcnRlX3BtdS0+ZXZlbnRfbGlzdCwgZXZl bnQsIG5leHQpOw0KPiArDQo+ICsJUlRFX0xPRyhERUJVRywgRUFMLCAiJXMgZXZlbiBhZGRlZCBh dCBpbmRleCAlZFxuIiwgbmFtZSwgZXZlbnQtPmluZGV4KTsNCj4gKw0KPiArCXJldHVybiBldmVu dC0+aW5kZXg7DQo+ICt9DQo+ICsNCj4gK3ZvaWQNCj4gK2VhbF9wbXVfaW5pdCh2b2lkKQ0KPiAr ew0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlydGVfcG11ID0gY2FsbG9jKDEsIHNpemVvZigqcnRl X3BtdSkpOw0KPiArCWlmICghcnRlX3BtdSkgew0KPiArCQlSVEVfTE9HKEVSUiwgRUFMLCAiZmFp bGVkIHRvIGFsbG9jIFBNVVxuIik7DQo+ICsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiAr CVRBSUxRX0lOSVQoJnJ0ZV9wbXUtPmV2ZW50X2xpc3QpOw0KPiArDQo+ICsJcmV0ID0gc2Nhbl9w bXVzKCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlSVEVfTE9HKEVSUiwgRUFMLCAiZmFpbGVkIHRv IGZpbmQgY29yZSBwbXVcbiIpOw0KPiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwlyZXQg PSBwbXVfYXJjaF9pbml0KCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlSVEVfTE9HKEVSUiwgRUFM LCAiZmFpbGVkIHRvIHNldHVwIGFyY2ggZm9yIFBNVVxuIik7DQo+ICsJCWdvdG8gb3V0Ow0KPiAr CX0NCj4gKw0KPiArCXJldHVybjsNCj4gK291dDoNCj4gKwlmcmVlKHJ0ZV9wbXUtPm5hbWUpOw0K PiArCWZyZWUocnRlX3BtdSk7DQo+ICt9DQo+ICsNCj4gK3ZvaWQNCj4gK2VhbF9wbXVfZmluaSh2 b2lkKQ0KPiArew0KPiArCXN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVudCwgKnRtcDsNCj4gKwlp bnQgbGNvcmVfaWQ7DQo+ICsNCj4gKwlSVEVfVEFJTFFfRk9SRUFDSF9TQUZFKGV2ZW50LCAmcnRl X3BtdS0+ZXZlbnRfbGlzdCwgbmV4dCwgdG1wKSB7DQo+ICsJCVRBSUxRX1JFTU9WRSgmcnRlX3Bt dS0+ZXZlbnRfbGlzdCwgZXZlbnQsIG5leHQpOw0KPiArCQlmcmVlKGV2ZW50LT5uYW1lKTsNCj4g KwkJZnJlZShldmVudCk7DQo+ICsJfQ0KPiArDQo+ICsJUlRFX0xDT1JFX0ZPUkVBQ0hfV09SS0VS KGxjb3JlX2lkKQ0KPiArCQljbGVhbnVwX2V2ZW50cyhsY29yZV9pZCk7DQoNCldoeSBpcyB0aGUg bWFpbiBsY29yZSBsZWZ0IG91dD8NCg0KPiArDQo+ICsJcG11X2FyY2hfZmluaSgpOw0KPiArCWZy ZWUocnRlX3BtdS0+bmFtZSk7DQo+ICsJZnJlZShydGVfcG11KTsNCj4gK30NCj4gZGlmZiAtLWdp dCBhL2xpYi9lYWwvaW5jbHVkZS9tZXNvbi5idWlsZCBiL2xpYi9lYWwvaW5jbHVkZS9tZXNvbi5i dWlsZA0KPiBpbmRleCBjZmNkNDBhYWVkLi4zYmY4MzBhZGVlIDEwMDY0NA0KPiAtLS0gYS9saWIv ZWFsL2luY2x1ZGUvbWVzb24uYnVpbGQNCj4gKysrIGIvbGliL2VhbC9pbmNsdWRlL21lc29uLmJ1 aWxkDQo+IEBAIC0zNiw2ICszNiw3IEBAIGhlYWRlcnMgKz0gZmlsZXMoDQo+ICAgICAgICAgICAn cnRlX3BjaV9kZXZfZmVhdHVyZXMuaCcsDQo+ICAgICAgICAgICAncnRlX3Blcl9sY29yZS5oJywN Cj4gICAgICAgICAgICdydGVfcGZsb2NrLmgnLA0KPiArICAgICAgICAncnRlX3BtdS5oJywNCj4g ICAgICAgICAgICdydGVfcmFuZG9tLmgnLA0KPiAgICAgICAgICAgJ3J0ZV9yZWNpcHJvY2FsLmgn LA0KPiAgICAgICAgICAgJ3J0ZV9zZXFjb3VudC5oJywNCj4gZGlmZiAtLWdpdCBhL2xpYi9lYWwv aW5jbHVkZS9ydGVfcG11LmggYi9saWIvZWFsL2luY2x1ZGUvcnRlX3BtdS5oDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmU0YjRmNmIwNTINCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9saWIvZWFsL2luY2x1ZGUvcnRlX3BtdS5oDQo+IEBAIC0wLDAgKzEsMjA0 IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBD b3B5cmlnaHQoYykgMjAyMiBNYXJ2ZWxsDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBfUlRFX1BN VV9IXw0KPiArI2RlZmluZSBfUlRFX1BNVV9IXw0KPiArDQo+ICsjaWZkZWYgX19jcGx1c3BsdXMN Cj4gK2V4dGVybiAiQyIgew0KPiArI2VuZGlmDQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfY29tbW9u Lmg+DQo+ICsjaW5jbHVkZSA8cnRlX2NvbXBhdC5oPg0KPiArDQo+ICsjaWZkZWYgUlRFX0VYRUNf RU5WX0xJTlVYDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+DQo+ICsNCj4g KyNpbmNsdWRlIDxydGVfYXRvbWljLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2JyYW5jaF9wcmVkaWN0 aW9uLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2xvZy5o Pg0KPiArDQo+ICsvKioNCj4gKyAqIEBmaWxlDQo+ICsgKg0KPiArICogUE1VIGV2ZW50IHRyYWNp bmcgb3BlcmF0aW9ucw0KPiArICoNCj4gKyAqIFRoaXMgZmlsZSBkZWZpbmVzIGdlbmVyaWMgQVBJ IGFuZCB0eXBlcyBuZWNlc3NhcnkgdG8gc2V0dXAgUE1VIGFuZA0KPiArICogcmVhZCBzZWxlY3Rl ZCBjb3VudGVycyBpbiBydW50aW1lLg0KPiArICovDQo+ICsNCj4gKy8qKg0KPiArICogQSBzdHJ1 Y3R1cmUgZGVzY3JpYmluZyBhIGdyb3VwIG9mIGV2ZW50cy4NCj4gKyAqLw0KPiArc3RydWN0IHJ0 ZV9wbXVfZXZlbnRfZ3JvdXAgew0KPiArCWludCAqZmRzOyAvKio8IGFycmF5IG9mIGV2ZW50IGRl c2NyaXB0b3JzICovDQo+ICsJdm9pZCAqKm1tYXBfcGFnZXM7IC8qKjwgYXJyYXkgb2YgcG9pbnRl cnMgdG8gbW1hcHBlZCBwZXJmX2V2ZW50X2F0dHIgc3RydWN0dXJlcyAqLw0KPiArCWJvb2wgZW5h YmxlZDsgLyoqPCB0cnVlIGlmIGdyb3VwIHdhcyBlbmFibGVkIG9uIHBhcnRpY3VsYXIgbGNvcmUg Ki8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogQSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhbiBl dmVudC4NCj4gKyAqLw0KPiArc3RydWN0IHJ0ZV9wbXVfZXZlbnQgew0KPiArCWNoYXIgKm5hbWU7 IC8qKiBuYW1lIG9mIGFuIGV2ZW50ICovDQo+ICsJaW50IGluZGV4OyAvKiogZXZlbnQgaW5kZXgg aW50byBmZHMvbW1hcF9wYWdlcyAqLw0KPiArCVRBSUxRX0VOVFJZKHJ0ZV9wbXVfZXZlbnQpIG5l eHQ7IC8qKiBsaXN0IGVudHJ5ICovDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIEEgUE1VIHN0 YXRlIGNvbnRhaW5lci4NCj4gKyAqLw0KPiArc3RydWN0IHJ0ZV9wbXUgew0KPiArCWNoYXIgKm5h bWU7IC8qKiBuYW1lIG9mIGNvcmUgUE1VIGxpc3RlZCB1bmRlciAvc3lzL2J1cy9ldmVudF9zb3Vy Y2UvZGV2aWNlcyAqLw0KPiArCXN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwIGdyb3VwW1JURV9N QVhfTENPUkVdOyAvKio8IHBlciBsY29yZSBldmVudCBncm91cCBkYXRhICovDQo+ICsJaW50IG51 bV9ncm91cF9ldmVudHM7IC8qKjwgbnVtYmVyIG9mIGV2ZW50cyBpbiBhIGdyb3VwICovDQo+ICsJ VEFJTFFfSEVBRCgsIHJ0ZV9wbXVfZXZlbnQpIGV2ZW50X2xpc3Q7IC8qKjwgbGlzdCBvZiBtYXRj aGluZyBldmVudHMgKi8NCj4gK307DQo+ICsNCj4gKy8qKiBQb2ludGVyIHRvIHRoZSBQTVUgc3Rh dGUgY29udGFpbmVyICovDQo+ICtleHRlcm4gc3RydWN0IHJ0ZV9wbXUgKnJ0ZV9wbXU7DQo+ICsN Cj4gKy8qKiBFYWNoIGFyY2hpdGVjdHVyZSBzdXBwb3J0aW5nIFBNVSBuZWVkcyB0byBwcm92aWRl IGl0cyBvd24gdmVyc2lvbiAqLw0KPiArI2lmbmRlZiBydGVfcG11X3BtY19yZWFkDQo+ICsjZGVm aW5lIHJ0ZV9wbXVfcG1jX3JlYWQoaW5kZXgpICh7IDA7IH0pDQo+ICsjZW5kaWYNCj4gKw0KPiAr LyoqDQo+ICsgKiBAaW50ZXJuYWwNCj4gKyAqDQo+ICsgKiBSZWFkIFBNVSBjb3VudGVyLg0KPiAr ICoNCj4gKyAqIEBwYXJhbSBwYw0KPiArICogICBQb2ludGVyIHRvIHRoZSBtbWFwcGVkIHVzZXIg cGFnZS4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgQ291bnRlciB2YWx1ZSByZWFkIGZyb20gaGFy ZHdhcmUuDQo+ICsgKi8NCj4gK19fcnRlX2ludGVybmFsDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlz X2lubGluZSB1aW50NjRfdA0KPiArcnRlX3BtdV9yZWFkX3VzZXJwYWdlKHN0cnVjdCBwZXJmX2V2 ZW50X21tYXBfcGFnZSAqcGMpDQo+ICt7DQo+ICsJdWludDY0X3Qgb2Zmc2V0LCB3aWR0aCwgcG1j ID0gMDsNCj4gKwl1aW50MzJfdCBzZXEsIGluZGV4Ow0KPiArCWludCB0cmllcyA9IDEwMDsNCj4g Kw0KPiArCWZvciAoOzspIHsNCj4gKwkJc2VxID0gcGMtPmxvY2s7DQo+ICsJCXJ0ZV9jb21waWxl cl9iYXJyaWVyKCk7DQo+ICsJCWluZGV4ID0gcGMtPmluZGV4Ow0KPiArCQlvZmZzZXQgPSBwYy0+ b2Zmc2V0Ow0KPiArCQl3aWR0aCA9IHBjLT5wbWNfd2lkdGg7DQo+ICsNCj4gKwkJaWYgKGxpa2Vs eShwYy0+Y2FwX3VzZXJfcmRwbWMgJiYgaW5kZXgpKSB7DQo+ICsJCQlwbWMgPSBydGVfcG11X3Bt Y19yZWFkKGluZGV4IC0gMSk7DQo+ICsJCQlwbWMgPDw9IDY0IC0gd2lkdGg7DQo+ICsJCQlwbWMg Pj49IDY0IC0gd2lkdGg7DQo+ICsJCX0NCj4gKw0KPiArCQlydGVfY29tcGlsZXJfYmFycmllcigp Ow0KPiArDQo+ICsJCWlmIChsaWtlbHkocGMtPmxvY2sgPT0gc2VxKSkNCj4gKwkJCXJldHVybiBw bWMgKyBvZmZzZXQ7DQo+ICsNCj4gKwkJaWYgKC0tdHJpZXMgPT0gMCkgew0KPiArCQkJUlRFX0xP RyhERUJVRywgRUFMLCAiZmFpbGVkIHRvIGdldCBwZXJmX2V2ZW50X21tYXBfcGFnZSBsb2NrXG4i KTsNCj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICogQGludGVybmFsDQo+ICsgKg0KPiArICogRW5hYmxlIGdyb3Vw IG9mIGV2ZW50cyBmb3IgYSBnaXZlbiBsY29yZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gbGNvcmVf aWQNCj4gKyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGxjb3JlLg0KPiArICogQHJldHVybg0K PiArICogICAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLg0K PiArICovDQo+ICtfX3J0ZV9pbnRlcm5hbA0KPiAraW50DQo+ICtydGVfcG11X2VuYWJsZV9ncm91 cChpbnQgbGNvcmVfaWQpOw0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBF WFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4g KyAqDQo+ICsgKiBBZGQgZXZlbnQgdG8gdGhlIGdyb3VwIG9mIGVuYWJsZWQgZXZlbnRzLg0KPiAr ICoNCj4gKyAqIEBwYXJhbSBuYW1lDQo+ICsgKiAgIE5hbWUgb2YgYW4gZXZlbnQgbGlzdGVkIHVu ZGVyIC9zeXMvYnVzL2V2ZW50X3NvdXJjZS9kZXZpY2VzL3BtdS9ldmVudHMuDQo+ICsgKiBAcmV0 dXJuDQo+ICsgKiAgIEV2ZW50IGluZGV4IGluIGNhc2Ugb2Ygc3VjY2VzcywgbmVnYXRpdmUgdmFs dWUgb3RoZXJ3aXNlLg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK2ludA0KPiAr cnRlX3BtdV9hZGRfZXZlbnQoY29uc3QgY2hhciAqbmFtZSk7DQo+ICsNCj4gKy8qKg0KPiArICog QHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRo b3V0IHByaW9yIG5vdGljZQ0KPiArICoNCj4gKyAqIFJlYWQgaGFyZHdhcmUgY291bnRlciBjb25m aWd1cmVkIHRvIGNvdW50IG9jY3VycmVuY2VzIG9mIGFuIGV2ZW50Lg0KPiArICoNCj4gKyAqIEBw YXJhbSBpbmRleA0KPiArICogICBJbmRleCBvZiBhbiBldmVudCB0byBiZSByZWFkLg0KPiArICog QHJldHVybg0KPiArICogICBFdmVudCB2YWx1ZSByZWFkIGZyb20gcmVnaXN0ZXIuIEluIGNhc2Ug b2YgZXJyb3JzIG9yIGxhY2sgb2Ygc3VwcG9ydA0KPiArICogICAwIGlzIHJldHVybmVkLiBJbiBv dGhlciB3b3Jkcywgc3RyZWFtIG9mIHplcm9zIGluIGEgdHJhY2UgZmlsZQ0KPiArICogICBpbmRp Y2F0ZXMgcHJvYmxlbSB3aXRoIHJlYWRpbmcgcGFydGljdWxhciBQTVUgZXZlbnQgcmVnaXN0ZXIu DQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3RhdGljIF9fcnRlX2Fsd2F5c19p bmxpbmUgdWludDY0X3QNCj4gK3J0ZV9wbXVfcmVhZChpbnQgaW5kZXgpDQo+ICt7DQo+ICsJaW50 IGxjb3JlX2lkID0gcnRlX2xjb3JlX2lkKCk7DQo+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3Jv dXAgKmdyb3VwOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlpZiAoIXJ0ZV9wbXUpDQo+ICsJCXJl dHVybiAwOw0KPiArDQo+ICsJZ3JvdXAgPSAmcnRlX3BtdS0+Z3JvdXBbbGNvcmVfaWRdOw0KPiAr CWlmICghZ3JvdXAtPmVuYWJsZWQpIHsNCj4gKwkJcmV0ID0gcnRlX3BtdV9lbmFibGVfZ3JvdXAo bGNvcmVfaWQpOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0dXJuIDA7DQo+ICsNCj4gKwkJZ3Jv dXAtPmVuYWJsZWQgPSB0cnVlOw0KPiArCX0NCj4gKw0KPiArCWlmIChpbmRleCA8IDAgfHwgaW5k ZXggPj0gcnRlX3BtdS0+bnVtX2dyb3VwX2V2ZW50cykNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4g KwlyZXR1cm4gcnRlX3BtdV9yZWFkX3VzZXJwYWdlKChzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3Bh Z2UgKilncm91cC0+bW1hcF9wYWdlc1tpbmRleF0pOw0KPiArfQ0KPiArDQo+ICsjZWxzZSAvKiAh UlRFX0VYRUNfRU5WX0xJTlVYICovDQo+ICsNCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3Rh dGljIGludCBfX3J0ZV91bnVzZWQNCj4gK3J0ZV9wbXVfYWRkX2V2ZW50KF9fcnRlX3VudXNlZCBj b25zdCBjaGFyICpuYW1lKQ0KPiArew0KPiArCXJldHVybiAtMTsNCj4gK30NCj4gKw0KPiArX19y dGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50NjRfdA0K PiArcnRlX3BtdV9yZWFkKF9fcnRlX3VudXNlZCBpbnQgaW5kZXgpDQo+ICt7DQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gKyNlbmRpZiAvKiBSVEVfRVhFQ19FTlZfTElOVVggKi8NCj4gKw0K PiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ICt9DQo+ICsjZW5kaWYNCj4gKw0KPiArI2VuZGlmIC8q IF9SVEVfUE1VX0hfICovDQo+IGRpZmYgLS1naXQgYS9saWIvZWFsL2xpbnV4L2VhbC5jIGIvbGli L2VhbC9saW51eC9lYWwuYw0KPiBpbmRleCA4YzExOGQwZDlmLi43NTFhMTNiNTk3IDEwMDY0NA0K PiAtLS0gYS9saWIvZWFsL2xpbnV4L2VhbC5jDQo+ICsrKyBiL2xpYi9lYWwvbGludXgvZWFsLmMN Cj4gQEAgLTUzLDYgKzUzLDcgQEANCj4gICAjaW5jbHVkZSAiZWFsX29wdGlvbnMuaCINCj4gICAj aW5jbHVkZSAiZWFsX3ZmaW8uaCINCj4gICAjaW5jbHVkZSAiaG90cGx1Z19tcC5oIg0KPiArI2lu Y2x1ZGUgInBtdV9wcml2YXRlLmgiDQo+ICAgDQo+ICAgI2RlZmluZSBNRU1TSVpFX0lGX05PX0hV R0VfUEFHRSAoNjRVTEwgKiAxMDI0VUxMICogMTAyNFVMTCkNCj4gICANCj4gQEAgLTEyMDYsNiAr MTIwNyw4IEBAIHJ0ZV9lYWxfaW5pdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQo+ICAgCQlyZXR1 cm4gLTE7DQo+ICAgCX0NCj4gICANCj4gKwllYWxfcG11X2luaXQoKTsNCj4gKw0KPiAgIAlpZiAo cnRlX2VhbF90YWlscXNfaW5pdCgpIDwgMCkgew0KPiAgIAkJcnRlX2VhbF9pbml0X2FsZXJ0KCJD YW5ub3QgaW5pdCB0YWlsIHF1ZXVlcyBmb3Igb2JqZWN0cyIpOw0KPiAgIAkJcnRlX2Vycm5vID0g RUZBVUxUOw0KPiBAQCAtMTM3Miw2ICsxMzc1LDcgQEAgcnRlX2VhbF9jbGVhbnVwKHZvaWQpDQo+ ICAgCWVhbF9idXNfY2xlYW51cCgpOw0KPiAgIAlydGVfdHJhY2Vfc2F2ZSgpOw0KPiAgIAllYWxf dHJhY2VfZmluaSgpOw0KPiArCWVhbF9wbXVfZmluaSgpOw0KPiAgIAkvKiBhZnRlciB0aGlzIHBv aW50LCBhbnkgRFBESyBwb2ludGVycyB3aWxsIGJlY29tZSBkYW5nbGluZyAqLw0KPiAgIAlydGVf ZWFsX21lbW9yeV9kZXRhY2goKTsNCj4gICAJZWFsX21wX2Rldl9ob3RwbHVnX2NsZWFudXAoKTsN Cj4gZGlmZiAtLWdpdCBhL2xpYi9lYWwvdmVyc2lvbi5tYXAgYi9saWIvZWFsL3ZlcnNpb24ubWFw DQo+IGluZGV4IDdhZDEyYTdkYzkuLjkyMjVmNDZmNjcgMTAwNjQ0DQo+IC0tLSBhL2xpYi9lYWwv dmVyc2lvbi5tYXANCj4gKysrIGIvbGliL2VhbC92ZXJzaW9uLm1hcA0KPiBAQCAtNDQwLDYgKzQ0 MCwxMSBAQCBFWFBFUklNRU5UQUwgew0KPiAgIAlydGVfdGhyZWFkX2RldGFjaDsNCj4gICAJcnRl X3RocmVhZF9lcXVhbDsNCj4gICAJcnRlX3RocmVhZF9qb2luOw0KPiArDQo+ICsJIyBhZGRlZCBp biAyMy4wMw0KPiArCXJ0ZV9wbXU7ICMgV0lORE9XU19OT19FWFBPUlQNCj4gKwlydGVfcG11X2Fk ZF9ldmVudDsgIyBXSU5ET1dTX05PX0VYUE9SVA0KPiArCXJ0ZV9wbXVfcmVhZDsgIyBXSU5ET1dT X05PX0VYUE9SVA0KPiAgIH07DQo+ICAgDQo+ICAgSU5URVJOQUwgew0KPiBAQCAtNDgzLDQgKzQ4 OCw1IEBAIElOVEVSTkFMIHsNCj4gICAJcnRlX21lbV9tYXA7DQo+ICAgCXJ0ZV9tZW1fcGFnZV9z aXplOw0KPiAgIAlydGVfbWVtX3VubWFwOw0KPiArCXJ0ZV9wbXVfZW5hYmxlX2dyb3VwOw0KPiAg IH07DQoNCg==