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 2E7EC41CF0; Mon, 20 Feb 2023 21:42:14 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 13C58430E4; Mon, 20 Feb 2023 21:42:14 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id A414240395 for ; Mon, 20 Feb 2023 21:42:12 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31KK1QAB015719; Mon, 20 Feb 2023 12:42:11 -0800 Received: from nam04-mw2-obe.outbound.protection.outlook.com (mail-mw2nam04lp2172.outbound.protection.outlook.com [104.47.73.172]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3ntvwune8n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 20 Feb 2023 12:42:11 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kD9eXLXir4Dz9y3knoRFVFk93nyjk1+4cT6EjddJct+YvTTKMLy3rZwhS3KuvY5AiibuFOIUJHVI9YeTgoJceAI9Wgbf6tfQ1lcFrhqZmwFZero+n8g/O5Uqq1509+fZ0TSXDwjikzJ+OVMLD96VnggGpWE9dPXe2Wu4Zziw69ulrQzHGQ/CYx9iRgnx04wsza9wOM+RopXZ6kSz9bznzHUbuZpT3F+HzMxCyp5tY8yMS74R3k7jBJqsriA6/cx3ZmeuFSo/OqjnFB40+srPIqUHeRRiRcURa56YSppv8B1GScsXxM4Zl4H1RCvt3usPdE/u/KQCZQlHSW6+d3I56Q== 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=p9BMZBM+cezc3F4KFg2aVf1AuSGCkADLviqXGQ0tgmU=; b=MQeAQtaYJXDhgqw0lxuV7naCyxg62YjUb9+Q1KWUBiHs9wl7DmKXMtMvPrfNiMUP4xTMGxj5kk7fEVKLTi069hvcI6l08XKx1hrtxEPD3ZVhhP8msFf5DJ/JmnyIBpkXq29xSGGOUr4lSvV7LIBMnV9WenF2rQ3LCo40ZBDxXaKxeLVfigqg1nI+pkvf4iFhwKH3y9D6f7VFNWMXIIVjmXNUYksGXKIzmCG4pWEGEKdjzU8r4L9DjoTmeiGjVS8usIJVd03Hb1iPWIhaJGACtDs5cynjZ/WgQpeObTGUpIhyyqK6VvxqNTJmhJVsa70f4188sQmgRSy1t+NbfYQILA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=p9BMZBM+cezc3F4KFg2aVf1AuSGCkADLviqXGQ0tgmU=; b=EVukM06c/KgO+W2yAfMHkld0foGH3h8Pn906PG3iH9xEA5qTQ5ZKpgQS95DAyWXBT2DrU0LfH+QsS8NoP/jZt+1pQm0gmTOv9TujtqJ4zii1quKOKcNGdU8mVzioCMyF2z5n+iQvJ9hKjbdvx1P9A+X/sREYBkum7so3XIxrLwQ= Received: from DM4PR18MB4368.namprd18.prod.outlook.com (2603:10b6:5:39d::6) by PH0PR18MB4922.namprd18.prod.outlook.com (2603:10b6:510:121::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.20; Mon, 20 Feb 2023 20:42:08 +0000 Received: from DM4PR18MB4368.namprd18.prod.outlook.com ([fe80::6d6a:99da:de:ea6b]) by DM4PR18MB4368.namprd18.prod.outlook.com ([fe80::6d6a:99da:de:ea6b%7]) with mapi id 15.20.6111.020; Mon, 20 Feb 2023 20:42:08 +0000 From: Tomasz Duszynski To: Konstantin Ananyev , Konstantin Ananyev , "dev@dpdk.org" Subject: RE: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading PMU events Thread-Topic: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading PMU events Thread-Index: AQHZQi/ugndN0uHRZEy+gbr3w2CIfa7SPocAgAB/jGCAAC7XAIADOSHQgAHFjQCAAB7GUIAAEK+AgAAF7wA= Date: Mon, 20 Feb 2023 20:42:08 +0000 Message-ID: References: <20230213113156.385482-1-tduszynski@marvell.com> <20230216175502.3164820-1-tduszynski@marvell.com> <20230216175502.3164820-2-tduszynski@marvell.com> <4b055bbc-36e5-671c-8117-fb0ee7307d55@yandex.ru> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM4PR18MB4368:EE_|PH0PR18MB4922:EE_ x-ms-office365-filtering-correlation-id: 1e0db296-7b95-4c4f-38ee-08db1382ef60 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /Yop76dJ1m4WQYSaPCuOtLrnesgUWT9/fkHqUZD0oCHQ8LjIqLv9lte6Dv7fPXArrkFVlw2CFlebYJfw6N8zUipHWoA8xqx+nmuwL49Sp5xd0VkzwmPlGiSLu3Piwqvvwi0DuMDRfxvgvhOKDj4aEO+lklEupuw5QPqPSrhUrqXWm/1hKxk9c8bFgogfUG1ZwApJ8y5sf27bHZKmO6Uid6p2Vzv8mkxI3Axa3Q+DKikcwKqbP861XK+qrv2oBCE/7vIZNxtAdpaSgbdAsgMhksFQie1BF0KvNkyKoGzD8Zom5wMvsxjnLzXEeh0XtoBHi5zwtCHDPaepMz+XUA7tH6PUI9nFpuN1b6tXQoY/1qy8UcbCBDqvFedCxaXiy3kCRIAfxQ79iGn3bE1JNn2mOEptiW7FQchcoN40gfCCFs7KeFSKuQqNqVOcif60Dc/RzTzQPSwS13WarEaIQpmNk+SY7TJvwhtLvyiJpEg9B2FKTQ6mQXMs7Hf1ejJE/VeWc8kv54GMZ8vdIl2TqdPzpUbQJsCijkAUMM/LcUfJVeMpMG194Gnhm/7L1WpEhxkM0DRuexy3q4rKFihCUtoTfrQ4gPRj6dIwe+LPWAUP70l3OZ6XSjzkWIr6WIkp2Rzb7JiDHpc8o3aNS7JsF9wyPgYfa0dJG2q6mrerqYLkjMUFy2OJt5bItVUecPjOQ4Jvl2J67tp3dPrk5MxN6P+LK+3JyqtIUGjGNVe6tIPL2t8= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR18MB4368.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(4636009)(396003)(366004)(136003)(346002)(376002)(39860400002)(451199018)(6506007)(38100700002)(9686003)(186003)(38070700005)(7696005)(55016003)(122000001)(26005)(2906002)(33656002)(316002)(41300700001)(83380400001)(478600001)(30864003)(5660300002)(8936002)(71200400001)(52536014)(66946007)(66476007)(8676002)(66556008)(76116006)(66446008)(110136005)(64756008)(86362001)(41533002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bnN6ZklUZVp6azVaMkk2TGcxNlY3emdWZ0tTWkk1Q0xhMWlzY1JEQ2NrMEVJ?= =?utf-8?B?dTIyb05wOUNNNk1WUUh5bXkxWjQzUng4WGVETStFTFpSUHJnSjZXMzB0UXl5?= =?utf-8?B?alJrZTVyenRQQVJDYnhNaEtZNGl1amJWZVpkZENCOVpSd2ZJREJIYmJrWVEx?= =?utf-8?B?c3ZTVlVpdlgxQ3J3SWQzd1ROckg5V1lpL2l1dmpWM3p3RmIxNEJLSWRLc3Jt?= =?utf-8?B?NDQ1NytBRVpHeWNTSVcwVUZ1L1F5eEluMnRVS3BRemxET0UvVmlEWXpVSlla?= =?utf-8?B?VEpIRndETUhCNkZaN2tlTGwwRXYydHBVMkVEbkNab2ZxWjIyUmN5VlNpZVUy?= =?utf-8?B?STZ1NmFaZ053RFgrZzd5QmkzOU8vd3U2QnFlYXdEWEQxdkhxRHRWKzE1dzlV?= =?utf-8?B?RjVrK2xKRHhYQk5BZ2lYSEx2RU5mbURDT3hpeHJ3SXpaYVZLRmYwd2QzeEFz?= =?utf-8?B?K3NCT3Y3eDhRQmR6eEg5Sjlxb0tvTWRidm5ZaGJCNFhSNHl0Tms1SXBUdDlY?= =?utf-8?B?bnhzaHMrSC8xOE94WmV4c3M5L2wyT2ovN3E1UzBjeUtPZUNscXkzQnVyL2l2?= =?utf-8?B?bUhiYVJqMHlyM0RVeTBhZFdDaG5DcXhSOXFHcVdlQ3BLR2ZJU25RdkluQ2x4?= =?utf-8?B?SzZzMHpxQ2w5WElKVGJ3akx4c1QvRmU0NzAvTWhrT0F1a0tYTjl3bW85UnNz?= =?utf-8?B?cXhqejBoYkZ5K0NhenJLeDhWWkozQ1V3UlphYjB0QzlSNVdySGxjbUgxcEpO?= =?utf-8?B?TDhsVnBqR0l4SGFGMEpMQ2FaR3pSZDdrOFMxVUtucTNva1NQQjczT2kyL2tK?= =?utf-8?B?R3orcUkxeS8yOUQ2S2FQMDJjVEZzODF2OE1xVnZXQnc5ZjZnNmlYNWY0NENI?= =?utf-8?B?SlpPSFZOekVxS2hxRzVvbWswMGNCSEFTS1owN1JpRWxSTlJka1BhVVlhMk45?= =?utf-8?B?WDJZWXJhc091MUxhRDlEV28yUGV6cHR4VUM3Ui9odnUrRlYvWCtEc2xIR3cy?= =?utf-8?B?VmFPbUZoZUdraHNSMDRFWENXbkd6Y1Y2QjhENDRGd0tESEFDeWptcFljTG52?= =?utf-8?B?WFc3Q1VKWkhnWlNrUW01czlCbjA5eUpzdHd6NzFoT2FaVmNRVXlaOXo0SHl5?= =?utf-8?B?VjBoUExXUXRWcW5wTHdYbVpmY0N2bEhESGlCb3hBRXBJNnR3SDY0cXgwQVUw?= =?utf-8?B?c0Q0Z2lCaGxxRTZrdjJOTzBjenFaUmowSmhIYnJnR0lnVDA1bHhNNk5iSDhJ?= =?utf-8?B?d3pEeTFTZGtUSVVhWkFpbWV4R29admJSOWtmZHhXbjNrbFFDaisyNzVQUTl0?= =?utf-8?B?UzdPR2R4RWFBVlljK0ZWRFlpeHBJRTVCREhyOVd2TndWSXk3M0pUSEhLTlFr?= =?utf-8?B?SFAvVFpaZmFqbGwva21STDZiVDRQTjJZVnRualdNK0R4TDliMEwzR2VZTThY?= =?utf-8?B?YXY2aWVGZWJUVURaTmFLZTZ1REdFTTVKay9ndEFoMEI1VTJrclFOSitRLzB5?= =?utf-8?B?WjRoR29hNlJtSFFqMUpoZmR2dWtnczlDR2ppaGR5dVlaTk5OOUVUck1oUThM?= =?utf-8?B?SW9nV2dvcWFHa1U4UHV3RmlQeGtOOEd6U21sdU0rOU1vRVMwcWt5cUpuZ0tu?= =?utf-8?B?cUYwY0hWUi9jK0lWeFlNVnFTa282RE9nWXAvYnYzMHZ5cnU0TnVhMVl5QzdQ?= =?utf-8?B?cmsyOXFtU3ZQNXpvcUozd3ZHeHRpQXdETXpPeGRKVDNnbnNwblpHK0JKNXhS?= =?utf-8?B?emt4cVRMOCt3RjU2ZVJnVWdXMnpZc05IdVUyZWhzV2cxWENUU3Z6R1hWcHhz?= =?utf-8?B?MzYwZGlOckpJR2F4UHdZWURrWlV4dEdlZ0ZGekU5aWptd0tNTndySGlXS0R2?= =?utf-8?B?bjZVSThXK01OQXg3bHZwMC9rRDBiMWFQOXNHNzhUSmxDK1M3SFpURHFFM1RJ?= =?utf-8?B?bXJJYW5iUEROMXNITkZoWnQwY1NXQ3ZrSVVxYjNPcU1SdEIvZXFvSzFpdk9w?= =?utf-8?B?WnR0S2N2WlBqd0p2MjR0MXoySVdYNlJZWE93azlRWDhDUlJ2VGw5N1dOZnJi?= =?utf-8?B?NmU3eFIyc25OTUJtbFF6M3BPaGJuNGg0N2tUZ0xuaEVzd2VZSEJkSHdRVGUr?= =?utf-8?Q?yHh/XW4n86nrN+aJyesRKELjR?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: marvell.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR18MB4368.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1e0db296-7b95-4c4f-38ee-08db1382ef60 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Feb 2023 20:42:08.5637 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: jv1jn++1LB9PT87ghhaAHak/K53CgN3Zg0psbKl/Yk+Rkm0YMg0e6oI81l//tLtxYCXdYNZRRKXS7uxvzIwFRA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR18MB4922 X-Proofpoint-GUID: eybQXWXAOHzVUhUJuJXRLNLcGTQo_3re X-Proofpoint-ORIG-GUID: eybQXWXAOHzVUhUJuJXRLNLcGTQo_3re X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-20_17,2023-02-20_02,2023-02-09_01 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 DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IEtvbnN0YW50aW4gQW5hbnll diA8a29uc3RhbnRpbi5hbmFueWV2QGh1YXdlaS5jb20+DQo+U2VudDogTW9uZGF5LCBGZWJydWFy eSAyMCwgMjAyMyA2OjIxIFBNDQo+VG86IFRvbWFzeiBEdXN6eW5za2kgPHRkdXN6eW5za2lAbWFy dmVsbC5jb20+OyBLb25zdGFudGluIEFuYW55ZXYgPGtvbnN0YW50aW4udi5hbmFueWV2QHlhbmRl eC5ydT47DQo+ZGV2QGRwZGsub3JnDQo+U3ViamVjdDogUkU6IFtFWFRdIFJlOiBbUEFUQ0ggdjEx IDEvNF0gbGliOiBhZGQgZ2VuZXJpYyBzdXBwb3J0IGZvciByZWFkaW5nIFBNVSBldmVudHMNCj4N Cj4NCj4+ID4+ID4+ID4+IGRpZmYgLS1naXQgYS9saWIvcG11L3J0ZV9wbXUuaCBiL2xpYi9wbXUv cnRlX3BtdS5oIG5ldyBmaWxlDQo+PiA+PiA+PiA+PiBtb2RlDQo+PiA+PiA+PiA+PiAxMDA2NDQg aW5kZXggMDAwMDAwMDAwMC4uNmI2NjRjMzMzNg0KPj4gPj4gPj4gPj4gLS0tIC9kZXYvbnVsbA0K Pj4gPj4gPj4gPj4gKysrIGIvbGliL3BtdS9ydGVfcG11LmgNCj4+ID4+ID4+ID4+IEBAIC0wLDAg KzEsMjEyIEBADQo+PiA+PiA+PiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0z LUNsYXVzZQ0KPj4gPj4gPj4gPj4gKyAqIENvcHlyaWdodChjKSAyMDIzIE1hcnZlbGwgICovDQo+ PiA+PiA+PiA+PiArDQo+PiA+PiA+PiA+PiArI2lmbmRlZiBfUlRFX1BNVV9IXw0KPj4gPj4gPj4g Pj4gKyNkZWZpbmUgX1JURV9QTVVfSF8NCj4+ID4+ID4+ID4+ICsNCj4+ID4+ID4+ID4+ICsvKioN Cj4+ID4+ID4+ID4+ICsgKiBAZmlsZQ0KPj4gPj4gPj4gPj4gKyAqDQo+PiA+PiA+PiA+PiArICog UE1VIGV2ZW50IHRyYWNpbmcgb3BlcmF0aW9ucw0KPj4gPj4gPj4gPj4gKyAqDQo+PiA+PiA+PiA+ PiArICogVGhpcyBmaWxlIGRlZmluZXMgZ2VuZXJpYyBBUEkgYW5kIHR5cGVzIG5lY2Vzc2FyeSB0 bw0KPj4gPj4gPj4gPj4gK3NldHVwIFBNVSBhbmQNCj4+ID4+ID4+ID4+ICsgKiByZWFkIHNlbGVj dGVkIGNvdW50ZXJzIGluIHJ1bnRpbWUuDQo+PiA+PiA+PiA+PiArICovDQo+PiA+PiA+PiA+PiAr DQo+PiA+PiA+PiA+PiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+PiA+PiA+PiA+PiArZXh0ZXJuICJD IiB7DQo+PiA+PiA+PiA+PiArI2VuZGlmDQo+PiA+PiA+PiA+PiArDQo+PiA+PiA+PiA+PiArI2lu Y2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4NCj4+ID4+ID4+ID4+ICsNCj4+ID4+ID4+ID4+ICsj aW5jbHVkZSA8cnRlX2F0b21pYy5oPg0KPj4gPj4gPj4gPj4gKyNpbmNsdWRlIDxydGVfYnJhbmNo X3ByZWRpY3Rpb24uaD4gI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD4NCj4+ID4+ID4+ID4+ICsjaW5j bHVkZSA8cnRlX2NvbXBhdC5oPiAjaW5jbHVkZSA8cnRlX3NwaW5sb2NrLmg+DQo+PiA+PiA+PiA+ PiArDQo+PiA+PiA+PiA+PiArLyoqIE1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBpbiBhIGdyb3Vw ICovICNkZWZpbmUNCj4+ID4+ID4+ID4+ICtNQVhfTlVNX0dST1VQX0VWRU5UUyA4DQo+PiA+PiA+ PiA+PiArDQo+PiA+PiA+PiA+PiArLyoqDQo+PiA+PiA+PiA+PiArICogQSBzdHJ1Y3R1cmUgZGVz Y3JpYmluZyBhIGdyb3VwIG9mIGV2ZW50cy4NCj4+ID4+ID4+ID4+ICsgKi8NCj4+ID4+ID4+ID4+ ICtzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCB7DQo+PiA+PiA+PiA+PiArCXN0cnVjdCBwZXJm X2V2ZW50X21tYXBfcGFnZQ0KPj4gPj4gPj4gPj4gKyptbWFwX3BhZ2VzW01BWF9OVU1fR1JPVVBf RVZFTlRTXTsNCj4+ID4+ID4+ID4+ICsvKio8IGFycmF5IG9mIHVzZXIgcGFnZXMNCj4+ID4+ID4q Lw0KPj4gPj4gPj4gPj4gKwlpbnQgZmRzW01BWF9OVU1fR1JPVVBfRVZFTlRTXTsgLyoqPCBhcnJh eSBvZiBldmVudCBkZXNjcmlwdG9ycyAqLw0KPj4gPj4gPj4gPj4gKwlib29sIGVuYWJsZWQ7IC8q KjwgdHJ1ZSBpZiBncm91cCB3YXMgZW5hYmxlZCBvbiBwYXJ0aWN1bGFyIGxjb3JlICovDQo+PiA+ PiA+PiA+PiArCVRBSUxRX0VOVFJZKHJ0ZV9wbXVfZXZlbnRfZ3JvdXApIG5leHQ7IC8qKjwgbGlz dCBlbnRyeSAqLyB9DQo+PiA+PiA+PiA+PiArX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4+ID4+ID4+ ID4+ICsNCj4+ID4+ID4+ID4+ICsvKioNCj4+ID4+ID4+ID4+ICsgKiBBIHN0cnVjdHVyZSBkZXNj cmliaW5nIGFuIGV2ZW50Lg0KPj4gPj4gPj4gPj4gKyAqLw0KPj4gPj4gPj4gPj4gK3N0cnVjdCBy dGVfcG11X2V2ZW50IHsNCj4+ID4+ID4+ID4+ICsJY2hhciAqbmFtZTsgLyoqPCBuYW1lIG9mIGFu IGV2ZW50ICovDQo+PiA+PiA+PiA+PiArCXVuc2lnbmVkIGludCBpbmRleDsgLyoqPCBldmVudCBp bmRleCBpbnRvIGZkcy9tbWFwX3BhZ2VzICovDQo+PiA+PiA+PiA+PiArCVRBSUxRX0VOVFJZKHJ0 ZV9wbXVfZXZlbnQpIG5leHQ7IC8qKjwgbGlzdCBlbnRyeSAqLyB9Ow0KPj4gPj4gPj4gPj4gKw0K Pj4gPj4gPj4gPj4gKy8qKg0KPj4gPj4gPj4gPj4gKyAqIEEgUE1VIHN0YXRlIGNvbnRhaW5lci4N Cj4+ID4+ID4+ID4+ICsgKi8NCj4+ID4+ID4+ID4+ICtzdHJ1Y3QgcnRlX3BtdSB7DQo+PiA+PiA+ PiA+PiArCWNoYXIgKm5hbWU7IC8qKjwgbmFtZSBvZiBjb3JlIFBNVSBsaXN0ZWQgdW5kZXIgL3N5 cy9idXMvZXZlbnRfc291cmNlL2RldmljZXMgKi8NCj4+ID4+ID4+ID4+ICsJcnRlX3NwaW5sb2Nr X3QgbG9jazsgLyoqPCBzZXJpYWxpemUgYWNjZXNzIHRvIGV2ZW50IGdyb3VwIGxpc3QgKi8NCj4+ ID4+ID4+ID4+ICsJVEFJTFFfSEVBRCgsIHJ0ZV9wbXVfZXZlbnRfZ3JvdXApIGV2ZW50X2dyb3Vw X2xpc3Q7IC8qKjwgbGlzdCBvZiBldmVudCBncm91cHMgKi8NCj4+ID4+ID4+ID4+ICsJdW5zaWdu ZWQgaW50IG51bV9ncm91cF9ldmVudHM7IC8qKjwgbnVtYmVyIG9mIGV2ZW50cyBpbiBhIGdyb3Vw ICovDQo+PiA+PiA+PiA+PiArCVRBSUxRX0hFQUQoLCBydGVfcG11X2V2ZW50KSBldmVudF9saXN0 OyAvKio8IGxpc3Qgb2YgbWF0Y2hpbmcgZXZlbnRzICovDQo+PiA+PiA+PiA+PiArCXVuc2lnbmVk IGludCBpbml0aWFsaXplZDsgLyoqPCBpbml0aWFsaXphdGlvbiBjb3VudGVyICovIH07DQo+PiA+ PiA+PiA+PiArDQo+PiA+PiA+PiA+PiArLyoqIGxjb3JlIGV2ZW50IGdyb3VwICovDQo+PiA+PiA+ PiA+PiArUlRFX0RFQ0xBUkVfUEVSX0xDT1JFKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwLA0K Pj4gPj4gPj4gPj4gK19ldmVudF9ncm91cCk7DQo+PiA+PiA+PiA+PiArDQo+PiA+PiA+PiA+PiAr LyoqIFBNVSBzdGF0ZSBjb250YWluZXIgKi8NCj4+ID4+ID4+ID4+ICtleHRlcm4gc3RydWN0IHJ0 ZV9wbXUgcnRlX3BtdTsNCj4+ID4+ID4+ID4+ICsNCj4+ID4+ID4+ID4+ICsvKiogRWFjaCBhcmNo aXRlY3R1cmUgc3VwcG9ydGluZyBQTVUgbmVlZHMgdG8gcHJvdmlkZSBpdHMNCj4+ID4+ID4+ID4+ ICtvd24gdmVyc2lvbiAqLyAjaWZuZGVmIHJ0ZV9wbXVfcG1jX3JlYWQgI2RlZmluZQ0KPj4gPj4g Pj4gPj4gK3J0ZV9wbXVfcG1jX3JlYWQoaW5kZXgpICh7IDA7IH0pICNlbmRpZg0KPj4gPj4gPj4g Pj4gKw0KPj4gPj4gPj4gPj4gKy8qKg0KPj4gPj4gPj4gPj4gKyAqIEB3YXJuaW5nDQo+PiA+PiA+ PiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJp b3Igbm90aWNlDQo+PiA+PiA+PiA+PiArICoNCj4+ID4+ID4+ID4+ICsgKiBSZWFkIFBNVSBjb3Vu dGVyLg0KPj4gPj4gPj4gPj4gKyAqDQo+PiA+PiA+PiA+PiArICogQHdhcm5pbmcgVGhpcyBzaG91 bGQgYmUgbm90IGNhbGxlZCBkaXJlY3RseS4NCj4+ID4+ID4+ID4+ICsgKg0KPj4gPj4gPj4gPj4g KyAqIEBwYXJhbSBwYw0KPj4gPj4gPj4gPj4gKyAqICAgUG9pbnRlciB0byB0aGUgbW1hcHBlZCB1 c2VyIHBhZ2UuDQo+PiA+PiA+PiA+PiArICogQHJldHVybg0KPj4gPj4gPj4gPj4gKyAqICAgQ291 bnRlciB2YWx1ZSByZWFkIGZyb20gaGFyZHdhcmUuDQo+PiA+PiA+PiA+PiArICovDQo+PiA+PiA+ PiA+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDY0X3QNCj4+ID4+ID4+ID4+ICtf X3J0ZV9wbXVfcmVhZF91c2VycGFnZShzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKnBjKSB7 DQo+PiA+PiA+PiA+PiArCXVpbnQ2NF90IHdpZHRoLCBvZmZzZXQ7DQo+PiA+PiA+PiA+PiArCXVp bnQzMl90IHNlcSwgaW5kZXg7DQo+PiA+PiA+PiA+PiArCWludDY0X3QgcG1jOw0KPj4gPj4gPj4g Pj4gKw0KPj4gPj4gPj4gPj4gKwlmb3IgKDs7KSB7DQo+PiA+PiA+PiA+PiArCQlzZXEgPSBwYy0+ bG9jazsNCj4+ID4+ID4+ID4+ICsJCXJ0ZV9jb21waWxlcl9iYXJyaWVyKCk7DQo+PiA+PiA+PiA+ DQo+PiA+PiA+PiA+QXJlIHlvdSBzdXJlIHRoYXQgY29tcGlsZXJfYmFycmllcigpIGlzIGVub3Vn aCBoZXJlPw0KPj4gPj4gPj4gPk9uIHNvbWUgYXJjaHMgQ1BVIGl0c2VsZiBoYXMgZnJlZWRvbSB0 byByZS1vcmRlciByZWFkcy4NCj4+ID4+ID4+ID5PciBJIGFtIG1pc3Npbmcgc29tZXRoaW5nIG9i dmlvdXMgaGVyZT8NCj4+ID4+ID4+ID4NCj4+ID4+ID4+DQo+PiA+PiA+PiBJdCdzIGEgbWF0dGVy IG9mIG5vdCBrZWVwaW5nIG9sZCBzdHVmZiBjYWNoZWQgaW4gcmVnaXN0ZXJzIGFuZA0KPj4gPj4g Pj4gbWFraW5nIHN1cmUgdGhhdCB3ZSBoYXZlIHR3byByZWFkcyBvZiBsb2NrLiBDUFUgcmVvcmRl cmluZyB3b24ndA0KPj4gPj4gPj4gZG8gYW55IGhhcm0gaGVyZS4NCj4+ID4+ID4NCj4+ID4+ID5T b3JyeSwgSSBkaWRuJ3QgZ2V0IHlvdSBoZXJlOg0KPj4gPj4gPlN1cHBvc2UgQ1BVIHdpbGwgcmUt b3JkZXIgcmVhZHMgYW5kIHdpbGwgcmVhZCBsb2NrICphZnRlciogaW5kZXggb3Igb2Zmc2V0IHZh bHVlLg0KPj4gPj4gPldvdWxkbid0IGl0IG1lYW4gdGhhdCBpbiB0aGF0IGNhc2UgaW5kZXggYW5k L29yIG9mZnNldCBjYW4gY29udGFpbiBvbGQvaW52YWxpZCB2YWx1ZXM/DQo+PiA+PiA+DQo+PiA+ Pg0KPj4gPj4gVGhpcyBudW1iZXIgaXMganVzdCBhbiBpbmRpY2F0b3Igd2hldGhlciBrZXJuZWwg ZGlkIGNoYW5nZSBzb21ldGhpbmcgb3Igbm90Lg0KPj4gPg0KPj4gPllvdSBhcmUgdGFsa2luZyBh Ym91dCBwYy0+bG9jaywgcmlnaHQ/DQo+PiA+WWVzLCBJIGRvIHVuZGVyc3RhbmQgdGhhdCBpdCBp cyBzb3J0IG9mIHNlcWxvY2suDQo+PiA+VGhhdCdzIHdoeSBJIGFtIHB1enpsZWQgd2h5IHdlIGRv IG5vdCBjYXJlIGFib3V0IHBvc3NpYmxlIGNwdSByZWFkLXJlb3JkZXJpbmcuDQo+PiA+TWFudWFs IGZvciBwZXJmX2V2ZW50X29wZW4oKSBhbHNvIGhhcyBhIGNvZGUgc25pcHBldCB3aXRoIGNvbXBp bGVyIGJhcnJpZXIgb25seS4uLg0KPj4gPg0KPj4gPj4gSWYgY3B1IHJlb3JkZXJpbmcgd2lsbCBj b21lIGludG8gcGxheSB0aGVuIHRoaXMgd2lsbCBub3QgY2hhbmdlIGFueXRoaW5nIGZyb20gcG92 IG9mIHRoaXMNCj5sb29wLg0KPj4gPj4gQWxsIHdlIHdhbnQgaXMgZnJlc2ggZGF0YSB3aGVuIG5l ZWRlZCBhbmQgbm8gaW52b2x2ZW1lbnQgb2YNCj4+ID4+IGNvbXBpbGVyIHdoZW4gaXQgY29tZXMg dG8gcmVvcmRlcmluZyBjb2RlLg0KPj4gPg0KPj4gPk9rLCBjYW4geW91IHByb2JhYmx5IGV4cGxh aW4gdG8gbWUgd2h5IHRoZSBmb2xsb3dpbmcgY291bGQgbm90IGhhcHBlbjoNCj4+ID5UMDoNCj4+ ID5wYy0+c2VxbG9jaz09MDsgcGMtPmluZGV4PT1JMTsgcGMtPm9mZnNldD09TzE7DQo+PiA+VDE6 DQo+PiA+ICAgICAgY3B1ICMwIHJlYWQgcG11IChkdWUgdG8gY3B1IHJlYWQgcmVvcmRlciwgd2Ug Z2V0IGluZGV4IHZhbHVlIGJlZm9yZSBzZXFsb2NrKToNCj4+ID4gICAgICAgaW5kZXg9cGMtPmlu ZGV4OyAgLy9pbmRleD09STE7DQo+PiA+IFQyOg0KPj4gPiAgICAgIGNwdSAjMSBrZXJuZWwgdmVu dF91cGRhdGVfdXNlcnBhZ2U6DQo+PiA+ICAgICAgcGMtPmxvY2srKzsgLy8gcGMtPmxvY2s9PTEN Cj4+ID4gICAgICBwYy0+aW5kZXg9STI7DQo+PiA+ICAgICAgcGMtPm9mZnNldD1PMjsNCj4+ID4g ICAgICAuLi4NCj4+ID4gICAgICBwYy0+bG9jaysrOyAvL3BjLT5sb2NrPT0yDQo+PiA+VDM6DQo+ PiA+ICAgICAgY3B1ICMwIGNvbnRpbnVlIHdpdGggcmVhZCBwbXU6DQo+PiA+ICAgICAgc2VxPXBj LT5sb2NrOyAvL3NlcSA9PSAyDQo+PiA+ICAgICAgIG9mZnNldD1wYy0+b2Zmc2V0OyAvLyBvZmZz ZXQgPT0gTzINCj4+ID4gICAgICAgLi4uLg0KPj4gPiAgICAgICBwbWMgPSBydGVfcG11X3BtY19y ZWFkKGluZGV4IC0gMSk7ICAvLyBOb3RlIHRoYXQgd2UgcmVhZCBhdCBJMSwgbm90IEkyDQo+PiA+ ICAgICAgIG9mZnNldCArPSBwbWM7IC8vb2Zmc2V0ID09IE8yICsgcG1jcmVhZChJMS0xKTsNCj4+ ID4gICAgICAgaWYgKHBjLT5sb2NrID09IHNlcSkgLy8gdGhleSBhcmUgZXF1YWwsIHJldHVybg0K Pj4gPiAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0Ow0KPj4gPg0KPj4gPk9yLCBpdCBjYW4gaGFw cGVuLCBidXQgYnkgc29tZSByZWFzb24gd2UgZG9uJ3QgY2FyZSBtdWNoPw0KPj4gPg0KPj4NCj4+ IFRoaXMgY29kZSBkb2VzIHNlbGYtbW9uaXRvcmluZyBhbmQgdXNlciBwYWdlICh3aG9sZSBncm91 cCBhY3R1YWxseSkgaXMNCj4+IHBlciB0aHJlYWQgcnVubmluZyBvbiBjdXJyZW50IGNwdS4gSGVu Y2UgSSBhbSBub3Qgc3VyZSB3aGF0IGFyZSB5b3UgdHJ5aW5nIHRvIHByb3ZlIHdpdGggdGhhdA0K PmV4YW1wbGUuDQo+DQo+SSBhbSBub3QgdHJ5aW5nIHRvIHByb3ZlIGFueXRoaW5nIHNvIGZhci4N Cj5JIGFtIGFza2luZyBpcyBzdWNoIHNpdHVhdGlvbiBwb3NzaWJsZSBvciBub3QsIGFuZCBpZiBu b3QsIHdoeT8NCj5NeSBjdXJyZW50IHVuZGVyc3RhbmRpbmcgKHBvc3NpYmx5IHdyb25nKSBpcyB0 aGF0IGFmdGVyIHlvdSBtbWFwZWQgdGhlc2UgcGFnZXMsIGtlcm5lbCBzdGlsbCBjYW4NCj5hc3lu Y2hyb25vdXNseSB1cGRhdGUgdGhlbS4NCj5Tbywgd2hlbiByZWFkaW5nIHRoZSBkYXRhIGZyb20g dGhlc2UgcGFnZXMgeW91IGhhdmUgdG8gY2hlY2sgJ2xvY2snIHZhbHVlIGJlZm9yZSBhbmQgYWZ0 ZXINCj5hY2Nlc3Npbmcgb3RoZXIgZGF0YS4NCj5JZiBzbywgd2h5IHBvc3NpYmxlIGNwdSByZWFk LXJlb3JkZXJpbmcgZG9lc24ndCBtYXR0ZXI/DQo+DQoNCkxvb2suIEknbGwgcmVpdGVyYXRlIHRo YXQuDQoNCjEuIFRoYXQgdXNlciBwYWdlL2dyb3VwL1BNVSBjb25maWcgaXMgcGVyIHByb2Nlc3Mu IE90aGVyIHByb2Nlc3NlcyBkbyBub3QgYWNjZXNzIHRoYXQuDQogICBBbGwgdGhpcyBoYXBwZW5z IG9uIHRoZSB2ZXJ5IHNhbWUgQ1BVIHdoZXJlIGN1cnJlbnQgdGhyZWFkIGlzIHJ1bm5pbmcuDQoy LiBTdXBwb3NlIHlvdSd2ZSBhbHJlYWR5IHJlYWQgc2VxLiBOb3cgZm9yIHNvbWUgcmVhc29uIGtl cm5lbCB1cGRhdGVzIGRhdGEgaW4gcGFnZSBzZXEgd2FzIHJlYWQgZnJvbS4gDQozLiBLZXJuZWwg d2lsbCBlbnRlciBjcml0aWNhbCBzZWN0aW9uIGR1cmluZyB1cGRhdGUuIHNlcSBjaGFuZ2VzIGFs b25nIHdpdGggb3RoZXIgZGF0YSB3aXRob3V0IGFwcCBrbm93aW5nIGFib3V0IGl0LiANCiAgIElm IHlvdSB3YW50IG5pdHR5IGdyaXR0eSBkZXRhaWxzIGNvbnN1bHQga2VybmVsIHNvdXJjZXMuIA0K NC4gYXBwIHJlc3VtZXMgYW5kIGhhcyBzb21lIHN0YWxlIGRhdGEgYnV0ICpXSUxMKiByZWFkIG5l dyBzZXEuIENvZGUgbG9vcHMgYWdhaW4gYmVjYXVzZSB2YWx1ZXMgZG8gbm90IG1hdGNoLiAgDQo1 LiBPdGhlcndpc2Ugc2VxIHZhbHVlcyBtYXRjaCBhbmQgZGF0YSBpcyB2YWxpZC4gDQoNCj5BbHNv IHRoZXJlIHdhcyBhbm90aGVyIHF1ZXN0aW9uIGJlbG93LCB3aGljaCB5b3UgcHJvYmFibHkgIG1p c3NlZCwgc28gSSBjb3BpZWQgaXQgaGVyZToNCj5Bbm90aGVyIHF1ZXN0aW9uIC0gZG8gd2UgcmVh bGx5IG5lZWQgIHRvIGhhdmUgX19ydGVfcG11X3JlYWRfdXNlcnBhZ2UoKSBhbmQgcnRlX3BtdV9y ZWFkKCkgYXMNCj5zdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBwdWJsaWMgaGVhZGVyPw0KPkFz IEkgdW5kZXJzdGFuZCwgYmVjYXVzZSBvZiB0aGF0IHdlIGFsc28gaGF2ZSB0byBtYWtlICdzdHJ1 Y3QgcnRlX3BtdV8qJw0KPmRlZmluaXRpb25zIGFsc28gcHVibGljLg0KPg0KDQpUaGVzZSBmdW5j dGlvbnMgbmVlZCB0byBiZSBpbmxpbmVkIG90aGVyd2lzZSBwZXJmb3JtYW5jZSB0YWtlcyBhIGhp dC4gDQoNCj4+DQo+PiA+PiA+Pg0KPj4gPj4gPj4gPj4gKwkJaW5kZXggPSBwYy0+aW5kZXg7DQo+ PiA+PiA+PiA+PiArCQlvZmZzZXQgPSBwYy0+b2Zmc2V0Ow0KPj4gPj4gPj4gPj4gKwkJd2lkdGgg PSBwYy0+cG1jX3dpZHRoOw0KPj4gPj4gPj4gPj4gKw0KPj4gPj4gPj4gPj4gKwkJLyogaW5kZXgg c2V0IHRvIDAgbWVhbnMgdGhhdCBwYXJ0aWN1bGFyIGNvdW50ZXIgY2Fubm90IGJlIHVzZWQgKi8N Cj4+ID4+ID4+ID4+ICsJCWlmIChsaWtlbHkocGMtPmNhcF91c2VyX3JkcG1jICYmIGluZGV4KSkg ew0KPj4gPj4gPj4gPj4gKwkJCXBtYyA9IHJ0ZV9wbXVfcG1jX3JlYWQoaW5kZXggLSAxKTsNCj4+ ID4+ID4+ID4+ICsJCQlwbWMgPDw9IDY0IC0gd2lkdGg7DQo+PiA+PiA+PiA+PiArCQkJcG1jID4+ PSA2NCAtIHdpZHRoOw0KPj4gPj4gPj4gPj4gKwkJCW9mZnNldCArPSBwbWM7DQo+PiA+PiA+PiA+ PiArCQl9DQo+PiA+PiA+PiA+PiArDQo+PiA+PiA+PiA+PiArCQlydGVfY29tcGlsZXJfYmFycmll cigpOw0KPj4gPj4gPj4gPj4gKw0KPj4gPj4gPj4gPj4gKwkJaWYgKGxpa2VseShwYy0+bG9jayA9 PSBzZXEpKQ0KPj4gPj4gPj4gPj4gKwkJCXJldHVybiBvZmZzZXQ7DQo+PiA+PiA+PiA+PiArCX0N Cj4+ID4+ID4+ID4+ICsNCj4+ID4+ID4+ID4+ICsJcmV0dXJuIDA7DQo+PiA+PiA+PiA+PiArfQ0K Pj4gPj4gPj4gPj4gKw0KPj4gPj4gPj4gPj4gKy8qKg0KPj4gPj4gPj4gPj4gKyAqIEB3YXJuaW5n DQo+PiA+PiA+PiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdp dGhvdXQgcHJpb3Igbm90aWNlDQo+PiA+PiA+PiA+PiArICoNCj4+ID4+ID4+ID4+ICsgKiBFbmFi bGUgZ3JvdXAgb2YgZXZlbnRzIG9uIHRoZSBjYWxsaW5nIGxjb3JlLg0KPj4gPj4gPj4gPj4gKyAq DQo+PiA+PiA+PiA+PiArICogQHdhcm5pbmcgVGhpcyBzaG91bGQgYmUgbm90IGNhbGxlZCBkaXJl Y3RseS4NCj4+ID4+ID4+ID4+ICsgKg0KPj4gPj4gPj4gPj4gKyAqIEByZXR1cm4NCj4+ID4+ID4+ ID4+ICsgKiAgIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2Uu DQo+PiA+PiA+PiA+PiArICovDQo+PiA+PiA+PiA+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+PiA+ PiA+PiA+PiAraW50DQo+PiA+PiA+PiA+PiArX19ydGVfcG11X2VuYWJsZV9ncm91cCh2b2lkKTsN Cj4+ID4+ID4+ID4+ICsNCj4+ID4+ID4+ID4+ICsvKioNCj4+ID4+ID4+ID4+ICsgKiBAd2Fybmlu Zw0KPj4gPj4gPj4gPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3 aXRob3V0IHByaW9yIG5vdGljZQ0KPj4gPj4gPj4gPj4gKyAqDQo+PiA+PiA+PiA+PiArICogSW5p dGlhbGl6ZSBQTVUgbGlicmFyeS4NCj4+ID4+ID4+ID4+ICsgKg0KPj4gPj4gPj4gPj4gKyAqIEB3 YXJuaW5nIFRoaXMgc2hvdWxkIGJlIG5vdCBjYWxsZWQgZGlyZWN0bHkuDQo+PiA+PiA+PiA+PiAr ICoNCj4+ID4+ID4+ID4+ICsgKiBAcmV0dXJuDQo+PiA+PiA+PiA+PiArICogICAwIGluIGNhc2Ug b2Ygc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLg0KPj4gPj4gPj4gPj4gKyAqLw0K Pj4gPj4gPj4gPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPj4gPj4gPj4gPj4gK2ludA0KPj4gPj4g Pj4gPj4gK3J0ZV9wbXVfaW5pdCh2b2lkKTsNCj4+ID4+ID4+ID4+ICsNCj4+ID4+ID4+ID4+ICsv KioNCj4+ID4+ID4+ID4+ICsgKiBAd2FybmluZw0KPj4gPj4gPj4gPj4gKyAqIEBiIEVYUEVSSU1F TlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPj4gPj4gPj4g Pj4gKyAqDQo+PiA+PiA+PiA+PiArICogRmluYWxpemUgUE1VIGxpYnJhcnkuIFRoaXMgc2hvdWxk IGJlIGNhbGxlZCBhZnRlciBQTVUNCj4+ID4+ID4+ID4+ICtjb3VudGVycyBhcmUgbm8gbG9uZ2Vy IGJlaW5nDQo+PiA+cmVhZC4NCj4+ID4+ID4+ID4+ICsgKi8NCj4+ID4+ID4+ID4+ICtfX3J0ZV9l eHBlcmltZW50YWwNCj4+ID4+ID4+ID4+ICt2b2lkDQo+PiA+PiA+PiA+PiArcnRlX3BtdV9maW5p KHZvaWQpOw0KPj4gPj4gPj4gPj4gKw0KPj4gPj4gPj4gPj4gKy8qKg0KPj4gPj4gPj4gPj4gKyAq IEB3YXJuaW5nDQo+PiA+PiA+PiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkg Y2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+PiA+PiA+PiA+PiArICoNCj4+ID4+ID4+ID4+ ICsgKiBBZGQgZXZlbnQgdG8gdGhlIGdyb3VwIG9mIGVuYWJsZWQgZXZlbnRzLg0KPj4gPj4gPj4g Pj4gKyAqDQo+PiA+PiA+PiA+PiArICogQHBhcmFtIG5hbWUNCj4+ID4+ID4+ID4+ICsgKiAgIE5h bWUgb2YgYW4gZXZlbnQgbGlzdGVkIHVuZGVyIC9zeXMvYnVzL2V2ZW50X3NvdXJjZS9kZXZpY2Vz L3BtdS9ldmVudHMuDQo+PiA+PiA+PiA+PiArICogQHJldHVybg0KPj4gPj4gPj4gPj4gKyAqICAg RXZlbnQgaW5kZXggaW4gY2FzZSBvZiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2Uu DQo+PiA+PiA+PiA+PiArICovDQo+PiA+PiA+PiA+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+PiA+ PiA+PiA+PiAraW50DQo+PiA+PiA+PiA+PiArcnRlX3BtdV9hZGRfZXZlbnQoY29uc3QgY2hhciAq bmFtZSk7DQo+PiA+PiA+PiA+PiArDQo+PiA+PiA+PiA+PiArLyoqDQo+PiA+PiA+PiA+PiArICog QHdhcm5pbmcNCj4+ID4+ID4+ID4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBj aGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4+ID4+ID4+ID4+ICsgKg0KPj4gPj4gPj4gPj4g KyAqIFJlYWQgaGFyZHdhcmUgY291bnRlciBjb25maWd1cmVkIHRvIGNvdW50IG9jY3VycmVuY2Vz IG9mIGFuIGV2ZW50Lg0KPj4gPj4gPj4gPj4gKyAqDQo+PiA+PiA+PiA+PiArICogQHBhcmFtIGlu ZGV4DQo+PiA+PiA+PiA+PiArICogICBJbmRleCBvZiBhbiBldmVudCB0byBiZSByZWFkLg0KPj4g Pj4gPj4gPj4gKyAqIEByZXR1cm4NCj4+ID4+ID4+ID4+ICsgKiAgIEV2ZW50IHZhbHVlIHJlYWQg ZnJvbSByZWdpc3Rlci4gSW4gY2FzZSBvZiBlcnJvcnMgb3IgbGFjayBvZiBzdXBwb3J0DQo+PiA+ PiA+PiA+PiArICogICAwIGlzIHJldHVybmVkLiBJbiBvdGhlciB3b3Jkcywgc3RyZWFtIG9mIHpl cm9zIGluIGEgdHJhY2UgZmlsZQ0KPj4gPj4gPj4gPj4gKyAqICAgaW5kaWNhdGVzIHByb2JsZW0g d2l0aCByZWFkaW5nIHBhcnRpY3VsYXIgUE1VIGV2ZW50IHJlZ2lzdGVyLg0KPj4gPj4gPj4gPj4g KyAqLw0KPj4gPg0KPj4gPkFub3RoZXIgcXVlc3Rpb24gLSBkbyB3ZSByZWFsbHkgbmVlZCAgdG8g aGF2ZQ0KPj4gPl9fcnRlX3BtdV9yZWFkX3VzZXJwYWdlKCkgYW5kIHJ0ZV9wbXVfcmVhZCgpIGFz IHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGluIHB1YmxpYyBoZWFkZXI/DQo+PiA+QXMgSSB1bmRl cnN0YW5kLCBiZWNhdXNlIG9mIHRoYXQgd2UgYWxzbyBoYXZlIHRvIG1ha2UgJ3N0cnVjdCBydGVf cG11XyonDQo+PiA+ZGVmaW5pdGlvbnMgYWxzbyBwdWJsaWMuDQo+PiA+DQo+PiA+PiA+PiA+PiAr X19ydGVfZXhwZXJpbWVudGFsDQo+PiA+PiA+PiA+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxp bmUgdWludDY0X3QgcnRlX3BtdV9yZWFkKHVuc2lnbmVkDQo+PiA+PiA+PiA+PiAraW50DQo+PiA+ PiA+PiA+PiAraW5kZXgpIHsNCj4+ID4+ID4+ID4+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3Jv dXAgKmdyb3VwID0gJlJURV9QRVJfTENPUkUoX2V2ZW50X2dyb3VwKTsNCj4+ID4+ID4+ID4+ICsJ aW50IHJldDsNCj4+ID4+ID4+ID4+ICsNCj4+ID4+ID4+ID4+ICsJaWYgKHVubGlrZWx5KCFydGVf cG11LmluaXRpYWxpemVkKSkNCj4+ID4+ID4+ID4+ICsJCXJldHVybiAwOw0KPj4gPj4gPj4gPj4g Kw0KPj4gPj4gPj4gPj4gKwlpZiAodW5saWtlbHkoIWdyb3VwLT5lbmFibGVkKSkgew0KPj4gPj4g Pj4gPj4gKwkJcmV0ID0gX19ydGVfcG11X2VuYWJsZV9ncm91cCgpOw0KPj4gPj4gPj4gPj4gKwkJ aWYgKHJldCkNCj4+ID4+ID4+ID4+ICsJCQlyZXR1cm4gMDsNCj4+ID4+ID4+ID4+ICsJfQ0KPj4g Pj4gPj4gPj4gKw0KPj4gPj4gPj4gPj4gKwlpZiAodW5saWtlbHkoaW5kZXggPj0gcnRlX3BtdS5u dW1fZ3JvdXBfZXZlbnRzKSkNCj4+ID4+ID4+ID4+ICsJCXJldHVybiAwOw0KPj4gPj4gPj4gPj4g Kw0KPj4gPj4gPj4gPj4gKwlyZXR1cm4gX19ydGVfcG11X3JlYWRfdXNlcnBhZ2UoZ3JvdXAtPm1t YXBfcGFnZXNbaW5kZXhdKTsNCj4+ID4+ID4+ID4+ICt9DQo+PiA+PiA+PiA+PiArDQo+PiA+PiA+ PiA+PiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+PiA+PiA+PiA+PiArfQ0KPj4gPj4gPj4gPj4gKyNl bmRpZg0KPj4gPj4gPj4gPj4gKw0KDQo=