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 0A8D341D9B; Tue, 28 Feb 2023 10:57:16 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EA0E540EE4; Tue, 28 Feb 2023 10:57:15 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 62B0B4021F for ; Tue, 28 Feb 2023 10:57:14 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31S6S2Oa018851; Tue, 28 Feb 2023 01:57:13 -0800 Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2169.outbound.protection.outlook.com [104.47.55.169]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3nyjqtw15b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 28 Feb 2023 01:57:13 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=P8LhJtZg6rMQr5AI0poTWbZVLwy8BDxEJvEpCjSdwBLNMw3IO6GbmdW1JbQP08x75nYS287aIE5Adt9H5VHayTohTdZkQIaLxoRlj/5/kl7WJNHj5W6k0bH7iJ2Zs5rf79TQRH9Ms0qpdLRqfFqFFBFb4UxhGdnFTs6IxW9bHGyrjQ7C9L9p6Zpl4gyJHM6RntheEuCv4M8eiht/0eU4SySDNsrHK2gSkrHh/fV5fPMyuiS4H5EDksMQIq5/UDad6HXRruBdJ8dnnhl71Rzm6Y6+6ZO6w/p+ocRDPp3lZvGI+uC8WJwyaWlmuSmwGOQoJLUj6aoGXSA0rgff9ISBxQ== 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=UE8uMUii6Ob5ROXcPsELeamEG4Tg/CqBBoIgET9Mz74=; b=ZmoZjQJInCRkpvuQQ4wk+VQKzp88TbolC0YEnqZimK4C9pZ4l12E8T6y8ypAG78QTjTODlHRzfyYDoM0ZR9BvSkl5cWaztzukGgsl1p8EMViai1C30G5jiGHjsCTWiARaxd0d0S5j036IxQrHeoHQOxPHuc+jSCXfp/ZKOoTSq3itxjHLkpgsraXcd4haF2KBvEGV3PwLNMr55PUnabG3jx+waeVhkCf6sGiBP01qpYrx+h+jjoKvUz6xGWPCxSurhrTRGuYyhsh9BuR5I4lsRfr0FzC/V06C6fNDOgkt6o5V4pLBMiVUWHXEQTeOWYz9M0tRAsbDesdoPwoQz6jxg== 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=UE8uMUii6Ob5ROXcPsELeamEG4Tg/CqBBoIgET9Mz74=; b=ci8spTZdB50BTq0e7i9iKKbBuOeKSheKvu8HodHmpg7wMHjliORr9Uhq/1BIu6SndaKm0eac1tJF8UyDqDFyMS9bOtMwAZgdJxWm4CozFBZG9wNafnoXfKr8Brg1rab05meGoidpoploNOxT0BfLiW6QZoUhnXmsU+tT+tLbQnQ= Received: from DM4PR18MB4368.namprd18.prod.outlook.com (2603:10b6:5:39d::6) by SJ0PR18MB5140.namprd18.prod.outlook.com (2603:10b6:a03:43b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6134.27; Tue, 28 Feb 2023 09:57:11 +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.6134.030; Tue, 28 Feb 2023 09:57:10 +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+gbr3w2CIfa7YsNGAgAnSLtCAANOxAIAAy38Q Date: Tue, 28 Feb 2023 09:57:10 +0000 Message-ID: References: <20230213113156.385482-1-tduszynski@marvell.com> <20230216175502.3164820-1-tduszynski@marvell.com> <20230216175502.3164820-2-tduszynski@marvell.com> <5dfb1803-ae7f-5361-6453-70f767041928@yandex.ru> <2be9393cdbb94b9dad5bb7340ab9bca0@huawei.com> In-Reply-To: <2be9393cdbb94b9dad5bb7340ab9bca0@huawei.com> 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_|SJ0PR18MB5140:EE_ x-ms-office365-filtering-correlation-id: 45f35d23-51b2-4234-2ae8-08db19722908 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: zIDTvuUu+X3gOk8MxQ1upL7usyOGkv/6wZW6Hifevy3U+tVzVcxPW35H3P+J1SVOWCopalakGZK4QXbIXNhUt9gsrWZQ0k4pcDIPnaIpbcDu5Uhqkk9E7cunrggxEMB5ocFSIxJe8Fk6VVWEjrXPP6HpqqWa1p8q68VlJAg8YnGbduvFXBY6GHylrqnQZfpmruGscSZlPRXWK/3cv5H2xjSD3gyDTGCEHCjubcLOAoqyPOaUwLh13BcbmmJv2HKP1Wo3WYENXwyg7+vwZnionzuLVwrqK0W04u0N5YSQFm+FdVNAMbIBtocpUFmZmnWrQwvKkjRQ/5Z9vrF+TPBrs3UHpWD25LoGChgPmayGDzsi1sS2WeO9NAFV2e45fC44FUj9OH5ImhwTyadAbGOeAgdqqbTTzd8VKB6+L5n5IZY0bOBXFHejQz7OdffkZy2ZsdDJoEIX48EgENmX7sM+LIt92Ir7/KoRshtOAZas1NTLMZfEW4cvk1Q5fK+sDY70gY/k6pD92K4hyu3u5PjlbvBE33G0QD9Ka/ogw4gEkdFvqJSfxbaSfqftwWtqUtUuEwapYloWuv7YYLRSav17XRK1Y7AKnLvzJW2j4tNhnTyfk/szDf4arEiGvm1W7ObCPJhGb3+2MTg7K2DV4AgaBfACmIDyrUoZhYnN62YkRR1c8tX4RVMLxb7zgW223fVgCP4WzrNecQtzLW4CrcUGA5EtFdsa/mclK0xo1FCtxZA= 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)(136003)(39860400002)(376002)(346002)(396003)(366004)(451199018)(478600001)(71200400001)(110136005)(86362001)(9686003)(316002)(66574015)(38070700005)(7696005)(6506007)(186003)(38100700002)(30864003)(66446008)(2906002)(64756008)(8676002)(66476007)(76116006)(8936002)(41300700001)(33656002)(52536014)(83380400001)(66556008)(55016003)(66946007)(122000001)(5660300002)(41533002)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?THlrU1BjemkzUnUydjNQWVhXMVZSa1BQa1FjTXBOb1RmWDJOajJibU10VW1I?= =?utf-8?B?RzU4Q2M1RHpKYjFtOWI4MzUzK1ArOHpCTk5YaDFEOEM1NVNrTmJMT2dUV2dk?= =?utf-8?B?bW92TmM4b0h2NTlLR1cxMXNkZWxjMHNsSkZPUnRFbjA1SHgwemxpenpyMk1s?= =?utf-8?B?aGxxSkRaRnk3Y2FjRGp2VldFS01ydTFKNVRwUno0Qm50WUk4RXdvNzhtWlVq?= =?utf-8?B?ZnFLSGNjbUZaeEE4YnJOUnBPMlVYSWlNcnhjd09PdVZFcWpIbHcrckVCTi85?= =?utf-8?B?a3B4eWJuR3BjOTczSG4vTDk2V0c0TVZOeEEvTHlmYlNqQXNYMUpaa09GVzFj?= =?utf-8?B?U1k2TjhObHRLckt3TlcvaVNPT0Mvb3lSaC9UVWdOUE1NdXhBRDBFU0dUTGZD?= =?utf-8?B?NVpwbW9jdzY4dE5XWm85T1V3ZkpDdmJSaTdFbWVPN25ISFZ3M1FNKzMzeGcx?= =?utf-8?B?RVNqT0ozbGdqNnVYeTlycVJRcUJ4SWRxMmNoaUg3UFNSY3BaYzJ5bCtrM1ls?= =?utf-8?B?RmttT3JpSEJPSVdCREwwMUlySGduWVVPQmdkZzYwRUR4T3p0bjNSdUFOT2tK?= =?utf-8?B?bm5pS3YzN1h1L1BWbjVEK2FFZVpOSkpQdENsV0pqVmlPaEJIVVdUd3lsanlN?= =?utf-8?B?UTFYWDVTa3A5SmI1VFlGSThqK2pzK0tIY0kwZWNnZ1ZTcnZPM21UbTJkb2d0?= =?utf-8?B?V3E3Vno2VzVYQ2tnc0o4ZkhVQytSN0FaQ0VwTUY1a29VNTZpREdCcGhFM2N3?= =?utf-8?B?M1ZqUDJyb3A0NUcwN1JMdHlsYWI0bEtnTC9lZ0xmdTFqNGt5R2JOVnRCb0FS?= =?utf-8?B?NytqMlF1MjBoUXBEWXZ3ZGF4Z1Fzbk9vRHpaenJ6RUFwOGdEb1VjbFlZVUdj?= =?utf-8?B?UmtWT0tOZWVFWHlacDU5NEdHQkR6TVBTMkpYMCswUG1Ma05qbjlXejA4N09k?= =?utf-8?B?ZitHZzZJbDgyb0NFS3dtMGl4NUFZd2U1NWI3akl4UDlLMTRqMk5XUjZGSnNa?= =?utf-8?B?Vnl6NmUrdjVPYkpQRkJNbEZjV24zNXpsd0tlSzJtTEpoTmVXdWNkaU5STjlQ?= =?utf-8?B?Njk1Tk5XV0RoVE5FVWdDbnlhYkRaOWRneVhXZkJVTHBBNldzbFlTMHpsQi9w?= =?utf-8?B?ZWFKa3ZBektjcFFOL01zb2xDS2JKSjd2RWRLT1RqMlQ2Qnh1bDJTdTJUMHI2?= =?utf-8?B?UktWTDJuaE9jNXkxV29wa1loYXVtK1JINHdHZ0pZbDRMTkxHYmdXazQ1Qng5?= =?utf-8?B?UEdYZUFod1MzRjJERU8weTBGSGtWKzVkaWxCb0lpUkw0eFNaYU9rNWxFMWpQ?= =?utf-8?B?OExISS9wMno1Mzl2bDhVQ2pPT0Z1bUd0NGIzN2Q1b2taaFpFMkR1TE53UjJz?= =?utf-8?B?S09GTFpaR2lWUzYzT1NHSkxhOXhXY3V3TnB4VGtFMkMzbXltTGhZMFk1cUtt?= =?utf-8?B?Tm5aTUtyRUZrWllJMlllRmhTV2t2OStpamtEQVpVOXAxM3kvSTh0MzZmaHQ0?= =?utf-8?B?SFdzSUJkeG5RcmZXZktkTkVEL0pyTDNybU03YTQ0WnBCTXd1ZzU5VnYrVEdw?= =?utf-8?B?a05CV2xQUW9zaW5HMHhTcUJ6eWJsVzRuQlZhK3REUkZ4MDNzQnpqaFdQNUNK?= =?utf-8?B?UklXbmJKNzFjeEsvVytVbnhrVWw2NThYTEthUmRMOSsvVzJ1OXZYSHhndGsz?= =?utf-8?B?S1FWWlpOVWNzZ084RnV5UHNzOGxZbjhPdjgvdkszYmczQXhoWkI1czJEZmpM?= =?utf-8?B?NnNoZWlub1o2enRFTGhqK0VKbzFBZzl2bER6VHROTEpTZjNWRzNDbzkzOW85?= =?utf-8?B?alBpUmdxNzZEUjhJTTBJOUxuc0poV3pzVVlnWDhQbXIranY0bkxEaGhYbWlX?= =?utf-8?B?UCtQMVRTOEQ2ZmcrclNjbCtDd2NNREZyd0swbytLUUs2L0VwVHdtRFlJSHND?= =?utf-8?B?ME9yWlRDT3ZDQUc2N1U0WkRqNTVrOHg5eWpUSkRVd20weUQ2Z0lqYnNKcmdX?= =?utf-8?B?M0ozTDR0Tm1LcXcvOXd6Y3BMbEpNQ0p3SXpFM0NZbXhRQzBtai9TWG9Da2VC?= =?utf-8?B?TVRWNlZrR0R0cXFFTW9qdVdjTWxSL2s3SzNGYlJXVWp4M0VRbGRjeUx5QjFv?= =?utf-8?Q?7u5I=3D?= 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: 45f35d23-51b2-4234-2ae8-08db19722908 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Feb 2023 09:57:10.8268 (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: 9GPEjkpGkZiPlXdA441PueAGQNR3ZqaNkbwkEojgkVAbbTE6F6jGFO7dvneKS3g8ahRLWc6nd/FsSCNZTtTlMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR18MB5140 X-Proofpoint-ORIG-GUID: CdnznD2RveBO-8pk-a27vnUNcl-wsBXr X-Proofpoint-GUID: CdnznD2RveBO-8pk-a27vnUNcl-wsBXr 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-28_06,2023-02-27_01,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 eSAyNywgMjAyMyA5OjUzIFBNDQo+VG86IFRvbWFzeiBEdXN6eW5za2kgPHRkdXN6eW5za2lAbWFy dmVsbC5jb20+OyBLb25zdGFudGluIEFuYW55ZXYgPGtvbnN0YW50aW4udi5hbmFueWV2QHlhbmRl eC5ydT47DQo+ZGV2QGRwZGsub3JnDQo+U3ViamVjdDogUkU6IFtFWFRdIFJlOiBbUEFUQ0ggdjEx IDEvNF0gbGliOiBhZGQgZ2VuZXJpYyBzdXBwb3J0IGZvciByZWFkaW5nIFBNVSBldmVudHMNCj4N Cj4NCj4NCj4+ID4+IEFkZCBzdXBwb3J0IGZvciBwcm9ncmFtbWluZyBQTVUgY291bnRlcnMgYW5k IHJlYWRpbmcgdGhlaXIgdmFsdWVzDQo+PiA+PiBpbiBydW50aW1lIGJ5cGFzc2luZyBrZXJuZWwg Y29tcGxldGVseS4NCj4+ID4+DQo+PiA+PiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGluIGNh c2VzIHdoZXJlIENQVSBjb3JlcyBhcmUgaXNvbGF0ZWQgaS5lDQo+PiA+PiBydW4gZGVkaWNhdGVk IHRhc2tzLiBJbiBzdWNoIGNhc2VzIG9uZSBjYW5ub3QgdXNlIHN0YW5kYXJkIHBlcmYNCj4+ID4+ IHV0aWxpdHkgd2l0aG91dCBzYWNyaWZpY2luZyBsYXRlbmN5IGFuZCBwZXJmb3JtYW5jZS4NCj4+ ID4+DQo+PiA+PiBTaWduZWQtb2ZmLWJ5OiBUb21hc3ogRHVzenluc2tpIDx0ZHVzenluc2tpQG1h cnZlbGwuY29tPg0KPj4gPj4gQWNrZWQtYnk6IE1vcnRlbiBCcsO4cnVwIDxtYkBzbWFydHNoYXJl c3lzdGVtcy5jb20+DQo+PiA+DQo+PiA+RmV3IG1vcmUgY29tbWVudHMvcXVlc3Rpb25zIGJlbG93 Lg0KPj4gPg0KPj4gPg0KPj4gPj4gZGlmZiAtLWdpdCBhL2xpYi9wbXUvcnRlX3BtdS5jIGIvbGli L3BtdS9ydGVfcG11LmMgbmV3IGZpbGUgbW9kZQ0KPj4gPj4gMTAwNjQ0IGluZGV4IDAwMDAwMDAw MDAuLjk1MGY5OTljYjcNCj4+ID4+IC0tLSAvZGV2L251bGwNCj4+ID4+ICsrKyBiL2xpYi9wbXUv cnRlX3BtdS5jDQo+PiA+PiBAQCAtMCwwICsxLDQ2MCBAQA0KPj4gPj4gKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4+ID4+ICsgKiBDb3B5cmlnaHQoQykgMjAyMyBN YXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KPj4gPj4gKyAqLw0KPj4gPj4gKw0KPj4gPj4gKyNp bmNsdWRlIDxjdHlwZS5oPg0KPj4gPj4gKyNpbmNsdWRlIDxkaXJlbnQuaD4NCj4+ID4+ICsjaW5j bHVkZSA8ZXJybm8uaD4NCj4+ID4+ICsjaW5jbHVkZSA8cmVnZXguaD4NCj4+ID4+ICsjaW5jbHVk ZSA8c3RkbGliLmg+DQo+PiA+PiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPj4gPj4gKyNpbmNsdWRl IDxzeXMvaW9jdGwuaD4NCj4+ID4+ICsjaW5jbHVkZSA8c3lzL21tYW4uaD4NCj4+ID4+ICsjaW5j bHVkZSA8c3lzL3F1ZXVlLmg+DQo+PiA+PiArI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+DQo+PiA+ PiArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KPj4gPj4gKw0KPj4gPj4gKyNpbmNsdWRlIDxydGVfYXRv bWljLmg+DQo+PiA+PiArI2luY2x1ZGUgPHJ0ZV9wZXJfbGNvcmUuaD4NCj4+ID4+ICsjaW5jbHVk ZSA8cnRlX3BtdS5oPg0KPj4gPj4gKyNpbmNsdWRlIDxydGVfc3BpbmxvY2suaD4NCj4+ID4+ICsj aW5jbHVkZSA8cnRlX3RhaWxxLmg+DQo+PiA+PiArDQo+PiA+PiArI2luY2x1ZGUgInBtdV9wcml2 YXRlLmgiDQo+PiA+PiArDQo+PiA+PiArI2RlZmluZSBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRI ICIvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcyINCj4+ID4+ICsNCj4+ID4+ICsjZGVmaW5l IEdFTk1BU0tfVUxMKGgsIGwpICgofjBVTEwgLSAoMVVMTCA8PCAobCkpICsgMSkgJiAofjBVTEwg Pj4NCj4+ID4+ICsoKDY0IC0gMSAtIChoKSkpKSkgI2RlZmluZSBGSUVMRF9QUkVQKG0sIHYpICgo KHVpbnQ2NF90KSh2KSA8PA0KPj4gPj4gKyhfX2J1aWx0aW5fZmZzbGwobSkgLSAxKSkgJiAobSkp DQo+PiA+PiArDQo+PiA+PiArUlRFX0RFRklORV9QRVJfTENPUkUoc3RydWN0IHJ0ZV9wbXVfZXZl bnRfZ3JvdXAsIF9ldmVudF9ncm91cCk7DQo+PiA+PiArc3RydWN0IHJ0ZV9wbXUgcnRlX3BtdTsN Cj4+ID4+ICsNCj4+ID4+ICsvKg0KPj4gPj4gKyAqIEZvbGxvd2luZyBfX3J0ZV93ZWFrIGZ1bmN0 aW9ucyBwcm92aWRlIGRlZmF1bHQgbm8tb3AuDQo+PiA+PiArQXJjaGl0ZWN0dXJlcyBzaG91bGQg b3ZlcnJpZGUgdGhlbSBpZg0KPj4gPj4gKyAqIG5lY2Vzc2FyeS4NCj4+ID4+ICsgKi8NCj4+ID4+ ICsNCj4+ID4+ICtpbnQNCj4+ID4+ICtfX3J0ZV93ZWFrIHBtdV9hcmNoX2luaXQodm9pZCkNCj4+ ID4+ICt7DQo+PiA+PiArCXJldHVybiAwOw0KPj4gPj4gK30NCj4+ID4+ICsNCj4+ID4+ICt2b2lk DQo+PiA+PiArX19ydGVfd2VhayBwbXVfYXJjaF9maW5pKHZvaWQpDQo+PiA+PiArew0KPj4gPj4g K30NCj4+ID4+ICsNCj4+ID4+ICt2b2lkDQo+PiA+PiArX19ydGVfd2VhayBwbXVfYXJjaF9maXh1 cF9jb25maWcodWludDY0X3QgX19ydGVfdW51c2VkIGNvbmZpZ1szXSkNCj4+ID4+ICt7IH0NCj4+ ID4+ICsNCj4+ID4+ICtzdGF0aWMgaW50DQo+PiA+PiArZ2V0X3Rlcm1fZm9ybWF0KGNvbnN0IGNo YXIgKm5hbWUsIGludCAqbnVtLCB1aW50NjRfdCAqbWFzaykgew0KPj4gPj4gKwljaGFyIHBhdGhb UEFUSF9NQVhdOw0KPj4gPj4gKwljaGFyICpjb25maWcgPSBOVUxMOw0KPj4gPj4gKwlpbnQgaGln aCwgbG93LCByZXQ7DQo+PiA+PiArCUZJTEUgKmZwOw0KPj4gPj4gKw0KPj4gPj4gKwkqbnVtID0g Km1hc2sgPSAwOw0KPj4gPj4gKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIEVWRU5UX1NP VVJDRV9ERVZJQ0VTX1BBVEggIi8lcy9mb3JtYXQvJXMiLCBydGVfcG11Lm5hbWUsDQo+bmFtZSk7 DQo+PiA+PiArCWZwID0gZm9wZW4ocGF0aCwgInIiKTsNCj4+ID4+ICsJaWYgKGZwID09IE5VTEwp DQo+PiA+PiArCQlyZXR1cm4gLWVycm5vOw0KPj4gPj4gKw0KPj4gPj4gKwllcnJubyA9IDA7DQo+ PiA+PiArCXJldCA9IGZzY2FuZihmcCwgIiVtW146XTolZC0lZCIsICZjb25maWcsICZsb3csICZo aWdoKTsNCj4+ID4+ICsJaWYgKHJldCA8IDIpIHsNCj4+ID4+ICsJCXJldCA9IC1FTk9EQVRBOw0K Pj4gPj4gKwkJZ290byBvdXQ7DQo+PiA+PiArCX0NCj4+ID4+ICsJaWYgKGVycm5vKSB7DQo+PiA+ PiArCQlyZXQgPSAtZXJybm87DQo+PiA+PiArCQlnb3RvIG91dDsNCj4+ID4+ICsJfQ0KPj4gPj4g Kw0KPj4gPj4gKwlpZiAocmV0ID09IDIpDQo+PiA+PiArCQloaWdoID0gbG93Ow0KPj4gPj4gKw0K Pj4gPj4gKwkqbWFzayA9IEdFTk1BU0tfVUxMKGhpZ2gsIGxvdyk7DQo+PiA+PiArCS8qIExhc3Qg ZGlnaXQgc2hvdWxkIGJlIFswMTJdLiBJZiBsYXN0IGRpZ2l0IGlzIG1pc3NpbmcgMCBpcyBpbXBs aWVkLiAqLw0KPj4gPj4gKwkqbnVtID0gY29uZmlnW3N0cmxlbihjb25maWcpIC0gMV07DQo+PiA+ PiArCSpudW0gPSBpc2RpZ2l0KCpudW0pID8gKm51bSAtICcwJyA6IDA7DQo+PiA+PiArDQo+PiA+ PiArCXJldCA9IDA7DQo+PiA+PiArb3V0Og0KPj4gPj4gKwlmcmVlKGNvbmZpZyk7DQo+PiA+PiAr CWZjbG9zZShmcCk7DQo+PiA+PiArDQo+PiA+PiArCXJldHVybiByZXQ7DQo+PiA+PiArfQ0KPj4g Pj4gKw0KPj4gPj4gK3N0YXRpYyBpbnQNCj4+ID4+ICtwYXJzZV9ldmVudChjaGFyICpidWYsIHVp bnQ2NF90IGNvbmZpZ1szXSkgew0KPj4gPj4gKwljaGFyICp0b2tlbiwgKnRlcm07DQo+PiA+PiAr CWludCBudW0sIHJldCwgdmFsOw0KPj4gPj4gKwl1aW50NjRfdCBtYXNrOw0KPj4gPj4gKw0KPj4g Pj4gKwljb25maWdbMF0gPSBjb25maWdbMV0gPSBjb25maWdbMl0gPSAwOw0KPj4gPj4gKw0KPj4g Pj4gKwl0b2tlbiA9IHN0cnRvayhidWYsICIsIik7DQo+PiA+PiArCXdoaWxlICh0b2tlbikgew0K Pj4gPj4gKwkJZXJybm8gPSAwOw0KPj4gPj4gKwkJLyogPHRlcm0+PTx2YWx1ZT4gKi8NCj4+ID4+ ICsJCXJldCA9IHNzY2FuZih0b2tlbiwgIiVtW149XT0laSIsICZ0ZXJtLCAmdmFsKTsNCj4+ID4+ ICsJCWlmIChyZXQgPCAxKQ0KPj4gPj4gKwkJCXJldHVybiAtRU5PREFUQTsNCj4+ID4+ICsJCWlm IChlcnJubykNCj4+ID4+ICsJCQlyZXR1cm4gLWVycm5vOw0KPj4gPj4gKwkJaWYgKHJldCA9PSAx KQ0KPj4gPj4gKwkJCXZhbCA9IDE7DQo+PiA+PiArDQo+PiA+PiArCQlyZXQgPSBnZXRfdGVybV9m b3JtYXQodGVybSwgJm51bSwgJm1hc2spOw0KPj4gPj4gKwkJZnJlZSh0ZXJtKTsNCj4+ID4+ICsJ CWlmIChyZXQpDQo+PiA+PiArCQkJcmV0dXJuIHJldDsNCj4+ID4+ICsNCj4+ID4+ICsJCWNvbmZp Z1tudW1dIHw9IEZJRUxEX1BSRVAobWFzaywgdmFsKTsNCj4+ID4+ICsJCXRva2VuID0gc3RydG9r KE5VTEwsICIsIik7DQo+PiA+PiArCX0NCj4+ID4+ICsNCj4+ID4+ICsJcmV0dXJuIDA7DQo+PiA+ PiArfQ0KPj4gPj4gKw0KPj4gPj4gK3N0YXRpYyBpbnQNCj4+ID4+ICtnZXRfZXZlbnRfY29uZmln KGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQ2NF90IGNvbmZpZ1szXSkgew0KPj4gPj4gKwljaGFyIHBh dGhbUEFUSF9NQVhdLCBidWZbQlVGU0laXTsNCj4+ID4+ICsJRklMRSAqZnA7DQo+PiA+PiArCWlu dCByZXQ7DQo+PiA+PiArDQo+PiA+PiArCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgRVZF TlRfU09VUkNFX0RFVklDRVNfUEFUSCAiLyVzL2V2ZW50cy8lcyIsIHJ0ZV9wbXUubmFtZSwNCj5u YW1lKTsNCj4+ID4+ICsJZnAgPSBmb3BlbihwYXRoLCAiciIpOw0KPj4gPj4gKwlpZiAoZnAgPT0g TlVMTCkNCj4+ID4+ICsJCXJldHVybiAtZXJybm87DQo+PiA+PiArDQo+PiA+PiArCXJldCA9IGZy ZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIGZwKTsNCj4+ID4+ICsJaWYgKHJldCA9PSAwKSB7DQo+ PiA+PiArCQlmY2xvc2UoZnApOw0KPj4gPj4gKw0KPj4gPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ PiA+PiArCX0NCj4+ID4+ICsJZmNsb3NlKGZwKTsNCj4+ID4+ICsJYnVmW3JldF0gPSAnXDAnOw0K Pj4gPj4gKw0KPj4gPj4gKwlyZXR1cm4gcGFyc2VfZXZlbnQoYnVmLCBjb25maWcpOw0KPj4gPj4g K30NCj4+ID4+ICsNCj4+ID4+ICtzdGF0aWMgaW50DQo+PiA+PiArZG9fcGVyZl9ldmVudF9vcGVu KHVpbnQ2NF90IGNvbmZpZ1szXSwgaW50IGdyb3VwX2ZkKSB7DQo+PiA+PiArCXN0cnVjdCBwZXJm X2V2ZW50X2F0dHIgYXR0ciA9IHsNCj4+ID4+ICsJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJm X2V2ZW50X2F0dHIpLA0KPj4gPj4gKwkJLnR5cGUgPSBQRVJGX1RZUEVfUkFXLA0KPj4gPj4gKwkJ LmV4Y2x1ZGVfa2VybmVsID0gMSwNCj4+ID4+ICsJCS5leGNsdWRlX2h2ID0gMSwNCj4+ID4+ICsJ CS5kaXNhYmxlZCA9IDEsDQo+PiA+PiArCX07DQo+PiA+PiArDQo+PiA+PiArCXBtdV9hcmNoX2Zp eHVwX2NvbmZpZyhjb25maWcpOw0KPj4gPj4gKw0KPj4gPj4gKwlhdHRyLmNvbmZpZyA9IGNvbmZp Z1swXTsNCj4+ID4+ICsJYXR0ci5jb25maWcxID0gY29uZmlnWzFdOw0KPj4gPj4gKwlhdHRyLmNv bmZpZzIgPSBjb25maWdbMl07DQo+PiA+PiArDQo+PiA+PiArCXJldHVybiBzeXNjYWxsKFNZU19w ZXJmX2V2ZW50X29wZW4sICZhdHRyLCAwLCAtMSwgZ3JvdXBfZmQsIDApOyB9DQo+PiA+PiArDQo+ PiA+PiArc3RhdGljIGludA0KPj4gPj4gK29wZW5fZXZlbnRzKHN0cnVjdCBydGVfcG11X2V2ZW50 X2dyb3VwICpncm91cCkgew0KPj4gPj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQ7DQo+ PiA+PiArCXVpbnQ2NF90IGNvbmZpZ1szXTsNCj4+ID4+ICsJaW50IG51bSA9IDAsIHJldDsNCj4+ ID4+ICsNCj4+ID4+ICsJLyogZ3JvdXAgbGVhZGVyIGdldHMgY3JlYXRlZCBmaXJzdCwgd2l0aCBm ZCA9IC0xICovDQo+PiA+PiArCWdyb3VwLT5mZHNbMF0gPSAtMTsNCj4+ID4+ICsNCj4+ID4+ICsJ VEFJTFFfRk9SRUFDSChldmVudCwgJnJ0ZV9wbXUuZXZlbnRfbGlzdCwgbmV4dCkgew0KPj4gPj4g KwkJcmV0ID0gZ2V0X2V2ZW50X2NvbmZpZyhldmVudC0+bmFtZSwgY29uZmlnKTsNCj4+ID4+ICsJ CWlmIChyZXQpDQo+PiA+PiArCQkJY29udGludWU7DQo+PiA+PiArDQo+PiA+PiArCQlyZXQgPSBk b19wZXJmX2V2ZW50X29wZW4oY29uZmlnLCBncm91cC0+ZmRzWzBdKTsNCj4+ID4+ICsJCWlmIChy ZXQgPT0gLTEpIHsNCj4+ID4+ICsJCQlyZXQgPSAtZXJybm87DQo+PiA+PiArCQkJZ290byBvdXQ7 DQo+PiA+PiArCQl9DQo+PiA+PiArDQo+PiA+PiArCQlncm91cC0+ZmRzW2V2ZW50LT5pbmRleF0g PSByZXQ7DQo+PiA+PiArCQludW0rKzsNCj4+ID4+ICsJfQ0KPj4gPj4gKw0KPj4gPj4gKwlyZXR1 cm4gMDsNCj4+ID4+ICtvdXQ6DQo+PiA+PiArCWZvciAoLS1udW07IG51bSA+PSAwOyBudW0tLSkg ew0KPj4gPj4gKwkJY2xvc2UoZ3JvdXAtPmZkc1tudW1dKTsNCj4+ID4+ICsJCWdyb3VwLT5mZHNb bnVtXSA9IC0xOw0KPj4gPj4gKwl9DQo+PiA+PiArDQo+PiA+PiArDQo+PiA+PiArCXJldHVybiBy ZXQ7DQo+PiA+PiArfQ0KPj4gPj4gKw0KPj4gPj4gK3N0YXRpYyBpbnQNCj4+ID4+ICttbWFwX2V2 ZW50cyhzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCAqZ3JvdXApIHsNCj4+ID4+ICsJbG9uZyBw YWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpOw0KPj4gPj4gKwl1bnNpZ25lZCBpbnQg aTsNCj4+ID4+ICsJdm9pZCAqYWRkcjsNCj4+ID4+ICsJaW50IHJldDsNCj4+ID4+ICsNCj4+ID4+ ICsJZm9yIChpID0gMDsgaSA8IHJ0ZV9wbXUubnVtX2dyb3VwX2V2ZW50czsgaSsrKSB7DQo+PiA+ PiArCQlhZGRyID0gbW1hcCgwLCBwYWdlX3NpemUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZ3Jv dXAtPmZkc1tpXSwgMCk7DQo+PiA+PiArCQlpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7DQo+PiA+ PiArCQkJcmV0ID0gLWVycm5vOw0KPj4gPj4gKwkJCWdvdG8gb3V0Ow0KPj4gPj4gKwkJfQ0KPj4g Pj4gKw0KPj4gPj4gKwkJZ3JvdXAtPm1tYXBfcGFnZXNbaV0gPSBhZGRyOw0KPj4gPj4gKwkJaWYg KCFncm91cC0+bW1hcF9wYWdlc1tpXS0+Y2FwX3VzZXJfcmRwbWMpIHsNCj4+ID4+ICsJCQlyZXQg PSAtRVBFUk07DQo+PiA+PiArCQkJZ290byBvdXQ7DQo+PiA+PiArCQl9DQo+PiA+PiArCX0NCj4+ ID4+ICsNCj4+ID4+ICsJcmV0dXJuIDA7DQo+PiA+PiArb3V0Og0KPj4gPj4gKwlmb3IgKDsgaTsg aS0tKSB7DQo+PiA+PiArCQltdW5tYXAoZ3JvdXAtPm1tYXBfcGFnZXNbaSAtIDFdLCBwYWdlX3Np emUpOw0KPj4gPj4gKwkJZ3JvdXAtPm1tYXBfcGFnZXNbaSAtIDFdID0gTlVMTDsNCj4+ID4+ICsJ fQ0KPj4gPj4gKw0KPj4gPj4gKwlyZXR1cm4gcmV0Ow0KPj4gPj4gK30NCj4+ID4+ICsNCj4+ID4+ ICtzdGF0aWMgdm9pZA0KPj4gPj4gK2NsZWFudXBfZXZlbnRzKHN0cnVjdCBydGVfcG11X2V2ZW50 X2dyb3VwICpncm91cCkgew0KPj4gPj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4+ID4+ICsNCj4+ID4+ ICsJaWYgKGdyb3VwLT5mZHNbMF0gIT0gLTEpDQo+PiA+PiArCQlpb2N0bChncm91cC0+ZmRzWzBd LCBQRVJGX0VWRU5UX0lPQ19ESVNBQkxFLA0KPj4gPj4gK1BFUkZfSU9DX0ZMQUdfR1JPVVApOw0K Pj4gPj4gKw0KPj4gPj4gKwlmb3IgKGkgPSAwOyBpIDwgcnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRz OyBpKyspIHsNCj4+ID4+ICsJCWlmIChncm91cC0+bW1hcF9wYWdlc1tpXSkgew0KPj4gPj4gKwkJ CW11bm1hcChncm91cC0+bW1hcF9wYWdlc1tpXSwgc3lzY29uZihfU0NfUEFHRV9TSVpFKSk7DQo+ PiA+PiArCQkJZ3JvdXAtPm1tYXBfcGFnZXNbaV0gPSBOVUxMOw0KPj4gPj4gKwkJfQ0KPj4gPj4g Kw0KPj4gPj4gKwkJaWYgKGdyb3VwLT5mZHNbaV0gIT0gLTEpIHsNCj4+ID4+ICsJCQljbG9zZShn cm91cC0+ZmRzW2ldKTsNCj4+ID4+ICsJCQlncm91cC0+ZmRzW2ldID0gLTE7DQo+PiA+PiArCQl9 DQo+PiA+PiArCX0NCj4+ID4+ICsNCj4+ID4+ICsJZ3JvdXAtPmVuYWJsZWQgPSBmYWxzZTsNCj4+ ID4+ICt9DQo+PiA+PiArDQo+PiA+PiAraW50DQo+PiA+PiArX19ydGVfcG11X2VuYWJsZV9ncm91 cCh2b2lkKQ0KPj4gPj4gK3sNCj4+ID4+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgKmdy b3VwID0gJlJURV9QRVJfTENPUkUoX2V2ZW50X2dyb3VwKTsNCj4+ID4+ICsJaW50IHJldDsNCj4+ ID4+ICsNCj4+ID4+ICsJaWYgKHJ0ZV9wbXUubnVtX2dyb3VwX2V2ZW50cyA9PSAwKQ0KPj4gPj4g KwkJcmV0dXJuIC1FTk9ERVY7DQo+PiA+PiArDQo+PiA+PiArCXJldCA9IG9wZW5fZXZlbnRzKGdy b3VwKTsNCj4+ID4+ICsJaWYgKHJldCkNCj4+ID4+ICsJCWdvdG8gb3V0Ow0KPj4gPj4gKw0KPj4g Pj4gKwlyZXQgPSBtbWFwX2V2ZW50cyhncm91cCk7DQo+PiA+PiArCWlmIChyZXQpDQo+PiA+PiAr CQlnb3RvIG91dDsNCj4+ID4+ICsNCj4+ID4+ICsJaWYgKGlvY3RsKGdyb3VwLT5mZHNbMF0sIFBF UkZfRVZFTlRfSU9DX1JFU0VULCBQRVJGX0lPQ19GTEFHX0dST1VQKSA9PSAtMSkgew0KPj4gPj4g KwkJcmV0ID0gLWVycm5vOw0KPj4gPj4gKwkJZ290byBvdXQ7DQo+PiA+PiArCX0NCj4+ID4+ICsN Cj4+ID4+ICsJaWYgKGlvY3RsKGdyb3VwLT5mZHNbMF0sIFBFUkZfRVZFTlRfSU9DX0VOQUJMRSwg UEVSRl9JT0NfRkxBR19HUk9VUCkgPT0gLTEpIHsNCj4+ID4+ICsJCXJldCA9IC1lcnJubzsNCj4+ ID4+ICsJCWdvdG8gb3V0Ow0KPj4gPj4gKwl9DQo+PiA+PiArDQo+PiA+PiArCXJ0ZV9zcGlubG9j a19sb2NrKCZydGVfcG11LmxvY2spOw0KPj4gPj4gKwlUQUlMUV9JTlNFUlRfVEFJTCgmcnRlX3Bt dS5ldmVudF9ncm91cF9saXN0LCBncm91cCwgbmV4dCk7DQo+PiA+DQo+PiA+SG1tLi4gc28gd2Ug aW5zZXJ0IHBvaW50ZXIgdG8gVExTIHZhcmlhYmxlIGludG8gdGhlIGdsb2JhbCBsaXN0Pw0KPj4g PldvbmRlciB3aGF0IHdvdWxkIGhhcHBlbiBpZiB0aGF0IHRocmVhZCBnZXQgdGVybWluYXRlZD8N Cj4+DQo+PiBOb3RoaW5nIHNwZWNpYWwuIEFueSBwb2ludGVycyB0byB0aGF0IHRocmVhZC1sb2Nh bCBpbiB0aGF0IHRocmVhZCBhcmUgaW52YWxpZGVkLg0KPj4NCj4+ID5DYW4gbWVtb3J5IGZyb20g aXRzIFRMUyBibG9jayBnZXQgcmUtdXNlZCAoYnkgb3RoZXIgdGhyZWFkIG9yIGZvciBvdGhlciBw dXJwb3Nlcyk/DQo+PiA+DQo+Pg0KPj4gV2h5IHdvdWxkIGFueSBvdGhlciB0aHJlYWQgcmV1c2Ug dGhhdD8NCj4+IEV2ZW50dWFsbHkgbWFpbiB0aHJlYWQgd2lsbCBuZWVkIHRoYXQgZGF0YSB0byBk byB0aGUgY2xlYW51cC4NCj4NCj5JIHVuZGVyc3RhbmQgdGhhdCBtYWluIHRocmVhZCB3b3VsZCBu ZWVkIHRvIGFjY2VzcyB0aGF0IGRhdGEuDQo+SSBhbSBub3Qgc3VyZSB0aGF0IGl0IHdvdWxkIGJl IGFibGUgdG8uDQo+SW1hZ2luZSB0aHJlYWQgY2FsbHMgcnRlX3BtdV9yZWFkKC4uLikgYW5kIHRo ZW4gdGVybWluYXRlcywgd2hpbGUgcHJvZ3JhbSBjb250aW51ZXMgdG8gcnVuLg0KPkFzIEkgdW5k ZXJzdGFuZCBhZGRyZXNzIG9mIGl0cyBSVEVfUEVSX0xDT1JFKF9ldmVudF9ncm91cCkgd2lsbCBz dGlsbCByZW1haW4gaW4NCj5ydGVfcG11LmV2ZW50X2dyb3VwX2xpc3QsIGV2ZW4gaWYgaXQgaXMg cHJvYmFibHkgbm90IHZhbGlkIGFueSBtb3JlLg0KPg0KDQpPa2F5IGdvdCB5b3VyIHBvaW50LiBJ biBEUERLIHRoYXQgd2lsbCBub3QgaGFwcGVuLiBXZSBkbyBub3Qgc3Bhd24va2lsbCBsY29yZXMg aW4gcnVudGltZS4gDQpJbiBvdGhlciBzY2VuYXJpb3Mgc3VjaCBhcHByb2FjaCB3aWxsIG5vdCB3 b3JrIGJlY2F1c2Ugb25jZSB0aHJlYWQgdGVybWluYXRlcyBpdCdzIHBlci10aHJlYWQtZGF0YQ0K YmVjb21lcyBpbnZhbGlkLiANCg0KPj4gPg0KPj4gPj4gKwlydGVfc3BpbmxvY2tfdW5sb2NrKCZy dGVfcG11LmxvY2spOw0KPj4gPj4gKwlncm91cC0+ZW5hYmxlZCA9IHRydWU7DQo+PiA+PiArDQo+ PiA+PiArCXJldHVybiAwOw0KPj4gPj4gKw0KPj4gPj4gK291dDoNCj4+ID4+ICsJY2xlYW51cF9l dmVudHMoZ3JvdXApOw0KPj4gPj4gKw0KPj4gPj4gKwlyZXR1cm4gcmV0Ow0KPj4gPj4gK30NCj4+ ID4+ICsNCj4+ID4+ICtzdGF0aWMgaW50DQo+PiA+PiArc2Nhbl9wbXVzKHZvaWQpDQo+PiA+PiAr ew0KPj4gPj4gKwljaGFyIHBhdGhbUEFUSF9NQVhdOw0KPj4gPj4gKwlzdHJ1Y3QgZGlyZW50ICpk ZW50Ow0KPj4gPj4gKwljb25zdCBjaGFyICpuYW1lOw0KPj4gPj4gKwlESVIgKmRpcnA7DQo+PiA+ PiArDQo+PiA+PiArCWRpcnAgPSBvcGVuZGlyKEVWRU5UX1NPVVJDRV9ERVZJQ0VTX1BBVEgpOw0K Pj4gPj4gKwlpZiAoZGlycCA9PSBOVUxMKQ0KPj4gPj4gKwkJcmV0dXJuIC1lcnJubzsNCj4+ID4+ ICsNCj4+ID4+ICsJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXJwKSkpIHsNCj4+ID4+ICsJCW5h bWUgPSBkZW50LT5kX25hbWU7DQo+PiA+PiArCQlpZiAobmFtZVswXSA9PSAnLicpDQo+PiA+PiAr CQkJY29udGludWU7DQo+PiA+PiArDQo+PiA+PiArCQkvKiBzeXNmcyBlbnRyeSBzaG91bGQgZWl0 aGVyIGNvbnRhaW4gY3B1cyBvciBiZSBhIGNwdSAqLw0KPj4gPj4gKwkJaWYgKCFzdHJjbXAobmFt ZSwgImNwdSIpKQ0KPj4gPj4gKwkJCWJyZWFrOw0KPj4gPj4gKw0KPj4gPj4gKwkJc25wcmludGYo cGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvY3B1cyIs IG5hbWUpOw0KPj4gPj4gKwkJaWYgKGFjY2VzcyhwYXRoLCBGX09LKSA9PSAwKQ0KPj4gPj4gKwkJ CWJyZWFrOw0KPj4gPj4gKwl9DQo+PiA+PiArDQo+PiA+PiArCWlmIChkZW50KSB7DQo+PiA+PiAr CQlydGVfcG11Lm5hbWUgPSBzdHJkdXAobmFtZSk7DQo+PiA+PiArCQlpZiAocnRlX3BtdS5uYW1l ID09IE5VTEwpIHsNCj4+ID4+ICsJCQljbG9zZWRpcihkaXJwKTsNCj4+ID4+ICsNCj4+ID4+ICsJ CQlyZXR1cm4gLUVOT01FTTsNCj4+ID4+ICsJCX0NCj4+ID4+ICsJfQ0KPj4gPj4gKw0KPj4gPj4g KwljbG9zZWRpcihkaXJwKTsNCj4+ID4+ICsNCj4+ID4+ICsJcmV0dXJuIHJ0ZV9wbXUubmFtZSA/ IDAgOiAtRU5PREVWOyB9DQo+PiA+PiArDQo+PiA+PiArc3RhdGljIHN0cnVjdCBydGVfcG11X2V2 ZW50ICoNCj4+ID4+ICtuZXdfZXZlbnQoY29uc3QgY2hhciAqbmFtZSkNCj4+ID4+ICt7DQo+PiA+ PiArCXN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVudDsNCj4+ID4+ICsNCj4+ID4+ICsJZXZlbnQg PSBjYWxsb2MoMSwgc2l6ZW9mKCpldmVudCkpOw0KPj4gPj4gKwlpZiAoZXZlbnQgPT0gTlVMTCkN Cj4+ID4+ICsJCWdvdG8gb3V0Ow0KPj4gPj4gKw0KPj4gPj4gKwlldmVudC0+bmFtZSA9IHN0cmR1 cChuYW1lKTsNCj4+ID4+ICsJaWYgKGV2ZW50LT5uYW1lID09IE5VTEwpIHsNCj4+ID4+ICsJCWZy ZWUoZXZlbnQpOw0KPj4gPj4gKwkJZXZlbnQgPSBOVUxMOw0KPj4gPj4gKwl9DQo+PiA+PiArDQo+ PiA+PiArb3V0Og0KPj4gPj4gKwlyZXR1cm4gZXZlbnQ7DQo+PiA+PiArfQ0KPj4gPj4gKw0KPj4g Pj4gK3N0YXRpYyB2b2lkDQo+PiA+PiArZnJlZV9ldmVudChzdHJ1Y3QgcnRlX3BtdV9ldmVudCAq ZXZlbnQpIHsNCj4+ID4+ICsJZnJlZShldmVudC0+bmFtZSk7DQo+PiA+PiArCWZyZWUoZXZlbnQp Ow0KPj4gPj4gK30NCj4+ID4+ICsNCj4+ID4+ICtpbnQNCj4+ID4+ICtydGVfcG11X2FkZF9ldmVu dChjb25zdCBjaGFyICpuYW1lKSB7DQo+PiA+PiArCXN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVu dDsNCj4+ID4+ICsJY2hhciBwYXRoW1BBVEhfTUFYXTsNCj4+ID4+ICsNCj4+ID4+ICsJaWYgKHJ0 ZV9wbXUubmFtZSA9PSBOVUxMKQ0KPj4gPj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+PiA+PiArDQo+ PiA+PiArCWlmIChydGVfcG11Lm51bV9ncm91cF9ldmVudHMgKyAxID49IE1BWF9OVU1fR1JPVVBf RVZFTlRTKQ0KPj4gPj4gKwkJcmV0dXJuIC1FTk9TUEM7DQo+PiA+PiArDQo+PiA+PiArCXNucHJp bnRmKHBhdGgsIHNpemVvZihwYXRoKSwgRVZFTlRfU09VUkNFX0RFVklDRVNfUEFUSCAiLyVzL2V2 ZW50cy8lcyIsIHJ0ZV9wbXUubmFtZSwNCj5uYW1lKTsNCj4+ID4+ICsJaWYgKGFjY2VzcyhwYXRo LCBSX09LKSkNCj4+ID4+ICsJCXJldHVybiAtRU5PREVWOw0KPj4gPj4gKw0KPj4gPj4gKwlUQUlM UV9GT1JFQUNIKGV2ZW50LCAmcnRlX3BtdS5ldmVudF9saXN0LCBuZXh0KSB7DQo+PiA+PiArCQlp ZiAoIXN0cmNtcChldmVudC0+bmFtZSwgbmFtZSkpDQo+PiA+PiArCQkJcmV0dXJuIGV2ZW50LT5p bmRleDsNCj4+ID4+ICsJCWNvbnRpbnVlOw0KPj4gPj4gKwl9DQo+PiA+PiArDQo+PiA+PiArCWV2 ZW50ID0gbmV3X2V2ZW50KG5hbWUpOw0KPj4gPj4gKwlpZiAoZXZlbnQgPT0gTlVMTCkNCj4+ID4+ ICsJCXJldHVybiAtRU5PTUVNOw0KPj4gPj4gKw0KPj4gPj4gKwlldmVudC0+aW5kZXggPSBydGVf cG11Lm51bV9ncm91cF9ldmVudHMrKzsNCj4+ID4+ICsJVEFJTFFfSU5TRVJUX1RBSUwoJnJ0ZV9w bXUuZXZlbnRfbGlzdCwgZXZlbnQsIG5leHQpOw0KPj4gPj4gKw0KPj4gPj4gKwlyZXR1cm4gZXZl bnQtPmluZGV4Ow0KPj4gPj4gK30NCj4+ID4+ICsNCj4+ID4+ICtpbnQNCj4+ID4+ICtydGVfcG11 X2luaXQodm9pZCkNCj4+ID4+ICt7DQo+PiA+PiArCWludCByZXQ7DQo+PiA+PiArDQo+PiA+PiAr CS8qIEFsbG93IGNhbGxpbmcgaW5pdCBmcm9tIG11bHRpcGxlIGNvbnRleHRzIHdpdGhpbiBhIHNp bmdsZSB0aHJlYWQuIFRoaXMgc2ltcGxpZmllcw0KPj4gPj4gKwkgKiByZXNvdXJjZSBtYW5hZ2Vt ZW50IGEgYml0IGUuZyBpbiBjYXNlIGZhc3QtcGF0aCB0cmFjZXBvaW50IGhhcyBhbHJlYWR5IGJl ZW4gZW5hYmxlZA0KPj4gPj4gKwkgKiB2aWEgY29tbWFuZCBsaW5lIGJ1dCBhcHBsaWNhdGlvbiBk b2Vzbid0IGNhcmUgZW5vdWdoIGFuZCBwZXJmb3JtcyBpbml0L2ZpbmkgYWdhaW4uDQo+PiA+PiAr CSAqLw0KPj4gPj4gKwlpZiAocnRlX3BtdS5pbml0aWFsaXplZCAhPSAwKSB7DQo+PiA+PiArCQly dGVfcG11LmluaXRpYWxpemVkKys7DQo+PiA+PiArCQlyZXR1cm4gMDsNCj4+ID4+ICsJfQ0KPj4g Pj4gKw0KPj4gPj4gKwlyZXQgPSBzY2FuX3BtdXMoKTsNCj4+ID4+ICsJaWYgKHJldCkNCj4+ID4+ ICsJCWdvdG8gb3V0Ow0KPj4gPj4gKw0KPj4gPj4gKwlyZXQgPSBwbXVfYXJjaF9pbml0KCk7DQo+ PiA+PiArCWlmIChyZXQpDQo+PiA+PiArCQlnb3RvIG91dDsNCj4+ID4+ICsNCj4+ID4+ICsJVEFJ TFFfSU5JVCgmcnRlX3BtdS5ldmVudF9saXN0KTsNCj4+ID4+ICsJVEFJTFFfSU5JVCgmcnRlX3Bt dS5ldmVudF9ncm91cF9saXN0KTsNCj4+ID4+ICsJcnRlX3NwaW5sb2NrX2luaXQoJnJ0ZV9wbXUu bG9jayk7DQo+PiA+PiArCXJ0ZV9wbXUuaW5pdGlhbGl6ZWQgPSAxOw0KPj4gPj4gKw0KPj4gPj4g KwlyZXR1cm4gMDsNCj4+ID4+ICtvdXQ6DQo+PiA+PiArCWZyZWUocnRlX3BtdS5uYW1lKTsNCj4+ ID4+ICsJcnRlX3BtdS5uYW1lID0gTlVMTDsNCj4+ID4+ICsNCj4+ID4+ICsJcmV0dXJuIHJldDsN Cj4+ID4+ICt9DQo+PiA+PiArDQo+PiA+PiArdm9pZA0KPj4gPj4gK3J0ZV9wbXVfZmluaSh2b2lk KQ0KPj4gPj4gK3sNCj4+ID4+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgKmdyb3VwLCAq dG1wX2dyb3VwOw0KPj4gPj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQsICp0bXBfZXZl bnQ7DQo+PiA+PiArDQo+PiA+PiArCS8qIGNsZWFudXAgb25jZSBpbml0IGNvdW50IGRyb3BzIHRv IHplcm8gKi8NCj4+ID4+ICsJaWYgKHJ0ZV9wbXUuaW5pdGlhbGl6ZWQgPT0gMCB8fCAtLXJ0ZV9w bXUuaW5pdGlhbGl6ZWQgIT0gMCkNCj4+ID4+ICsJCXJldHVybjsNCj4+ID4+ICsNCj4+ID4+ICsJ UlRFX1RBSUxRX0ZPUkVBQ0hfU0FGRShldmVudCwgJnJ0ZV9wbXUuZXZlbnRfbGlzdCwgbmV4dCwg dG1wX2V2ZW50KSB7DQo+PiA+PiArCQlUQUlMUV9SRU1PVkUoJnJ0ZV9wbXUuZXZlbnRfbGlzdCwg ZXZlbnQsIG5leHQpOw0KPj4gPj4gKwkJZnJlZV9ldmVudChldmVudCk7DQo+PiA+PiArCX0NCj4+ ID4+ICsNCj4+ID4+ICsJUlRFX1RBSUxRX0ZPUkVBQ0hfU0FGRShncm91cCwgJnJ0ZV9wbXUuZXZl bnRfZ3JvdXBfbGlzdCwgbmV4dCwgdG1wX2dyb3VwKSB7DQo+PiA+PiArCQlUQUlMUV9SRU1PVkUo JnJ0ZV9wbXUuZXZlbnRfZ3JvdXBfbGlzdCwgZ3JvdXAsIG5leHQpOw0KPj4gPj4gKwkJY2xlYW51 cF9ldmVudHMoZ3JvdXApOw0KPj4gPj4gKwl9DQo+PiA+PiArDQo+PiA+PiArCXBtdV9hcmNoX2Zp bmkoKTsNCj4+ID4+ICsJZnJlZShydGVfcG11Lm5hbWUpOw0KPj4gPj4gKwlydGVfcG11Lm5hbWUg PSBOVUxMOw0KPj4gPj4gKwlydGVfcG11Lm51bV9ncm91cF9ldmVudHMgPSAwOw0KPj4gPj4gK30N Cj4+ID4+IGRpZmYgLS1naXQgYS9saWIvcG11L3J0ZV9wbXUuaCBiL2xpYi9wbXUvcnRlX3BtdS5o IG5ldyBmaWxlIG1vZGUNCj4+ID4+IDEwMDY0NCBpbmRleCAwMDAwMDAwMDAwLi42YjY2NGMzMzM2 DQo+PiA+PiAtLS0gL2Rldi9udWxsDQo+PiA+PiArKysgYi9saWIvcG11L3J0ZV9wbXUuaA0KPj4g Pj4gQEAgLTAsMCArMSwyMTIgQEANCj4+ID4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTMtQ2xhdXNlDQo+PiA+PiArICogQ29weXJpZ2h0KGMpIDIwMjMgTWFydmVsbA0KPj4gPj4g KyAqLw0KPj4gPj4gKw0KPj4gPj4gKyNpZm5kZWYgX1JURV9QTVVfSF8NCj4+ID4+ICsjZGVmaW5l IF9SVEVfUE1VX0hfDQo+PiA+PiArDQo+PiA+PiArLyoqDQo+PiA+PiArICogQGZpbGUNCj4+ID4+ ICsgKg0KPj4gPj4gKyAqIFBNVSBldmVudCB0cmFjaW5nIG9wZXJhdGlvbnMNCj4+ID4+ICsgKg0K Pj4gPj4gKyAqIFRoaXMgZmlsZSBkZWZpbmVzIGdlbmVyaWMgQVBJIGFuZCB0eXBlcyBuZWNlc3Nh cnkgdG8gc2V0dXAgUE1VDQo+PiA+PiArYW5kDQo+PiA+PiArICogcmVhZCBzZWxlY3RlZCBjb3Vu dGVycyBpbiBydW50aW1lLg0KPj4gPj4gKyAqLw0KPj4gPj4gKw0KPj4gPj4gKyNpZmRlZiBfX2Nw bHVzcGx1cw0KPj4gPj4gK2V4dGVybiAiQyIgew0KPj4gPj4gKyNlbmRpZg0KPj4gPj4gKw0KPj4g Pj4gKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+DQo+PiA+PiArDQo+PiA+PiArI2luY2x1 ZGUgPHJ0ZV9hdG9taWMuaD4NCj4+ID4+ICsjaW5jbHVkZSA8cnRlX2JyYW5jaF9wcmVkaWN0aW9u Lmg+ICNpbmNsdWRlIDxydGVfY29tbW9uLmg+DQo+PiA+PiArI2luY2x1ZGUgPHJ0ZV9jb21wYXQu aD4gI2luY2x1ZGUgPHJ0ZV9zcGlubG9jay5oPg0KPj4gPj4gKw0KPj4gPj4gKy8qKiBNYXhpbXVt IG51bWJlciBvZiBldmVudHMgaW4gYSBncm91cCAqLyAjZGVmaW5lDQo+PiA+PiArTUFYX05VTV9H Uk9VUF9FVkVOVFMgOA0KPj4gPg0KPj4gPmZvcmdvdCBSVEVfIHByZWZpeC4NCj4+ID5JbiBmYWN0 LCBkbyB5b3UgcmVhbGx5IG5lZWQgbnVtYmVyIG9mIGV2ZW50cyBpbiBncm91cCB0byBiZSBoYXJk LWNvZGVkPw0KPj4gPkNvdWxkbid0IG1tYXBfcGFnZXNbXSBhbmQgZmRzW10gYmUgYWxsb2NhdGVk IGR5bmFtaWNhbGx5IGJ5IGVuYWJsZV9ncm91cCgpPw0KPj4gPg0KPj4NCj4+IDggaXMgcmVhc29u YWJsZSBudW1iZXIgSSB0aGluay4gWDg2L0FSTSBoYXZlIGFjdHVhbGx5IGxlc3MgdGhhdCB0aGF0 ICh3YXMgdGhhdCBzb21ldGhpbmcgbGlrZQ0KPjQ/KS4NCj4+IE1vcmVvdmVyIGV2ZW50cyBhcmUg c2NoZWR1bGVkIGFzIGEgZ3JvdXAgc28gdGhlcmUgbXVzdCBiZSBlbm91Z2ggaHcNCj4+IGNvdW50 ZXJzIGF2YWlsYWJsZSBmb3IgdGhhdCB0byBzdWNjZWVkLiBTbyB0aGlzIG51bWJlciBzaG91bGQg Y292ZXIgY3VycmVudCBuZWVkcy4NCj4NCj5JZiB5b3UgdGhpbmsgOCB3aWxsIGJlIGVub3VnaCB0 byBjb3ZlciBhbGwgcG9zc2libGUgZnV0dXJlIGNhc2VzIC0gSSBhbSBvayBlaXRoZXIgd2F5Lg0K PlN0aWxsIG5lZWQgUlRFXyBwcmVmaXggZm9yIGl0Lg0KPg0KDQpPa2F5IHRoYXQgY2FuIGJlIGFk ZGVkLiANCg0KPj4gPj4gKw0KPj4gPj4gKy8qKg0KPj4gPj4gKyAqIEEgc3RydWN0dXJlIGRlc2Ny aWJpbmcgYSBncm91cCBvZiBldmVudHMuDQo+PiA+PiArICovDQo+PiA+PiArc3RydWN0IHJ0ZV9w bXVfZXZlbnRfZ3JvdXAgew0KPj4gPj4gKwlzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKm1t YXBfcGFnZXNbTUFYX05VTV9HUk9VUF9FVkVOVFNdOyAvKio8IGFycmF5IG9mIHVzZXIgcGFnZXMN Cj4qLw0KPj4gPj4gKwlpbnQgZmRzW01BWF9OVU1fR1JPVVBfRVZFTlRTXTsgLyoqPCBhcnJheSBv ZiBldmVudCBkZXNjcmlwdG9ycyAqLw0KPj4gPj4gKwlib29sIGVuYWJsZWQ7IC8qKjwgdHJ1ZSBp ZiBncm91cCB3YXMgZW5hYmxlZCBvbiBwYXJ0aWN1bGFyIGxjb3JlICovDQo+PiA+PiArCVRBSUxR X0VOVFJZKHJ0ZV9wbXVfZXZlbnRfZ3JvdXApIG5leHQ7IC8qKjwgbGlzdCBlbnRyeSAqLyB9DQo+ PiA+PiArX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4+ID4+ICsNCj4+ID4NCj4+ID5FdmVuIGlmIHdl J2QgZGVjaWRlIHRvIGtlZXAgcnRlX3BtdV9yZWFkKCkgYXMgc3RhdGljIGlubGluZSAoc3RpbGwN Cj4+ID5ub3Qgc3VyZSBpdCBpcyBhIGdvb2QgaWRlYSksDQo+Pg0KPj4gV2Ugd2FudCB0byBzYXZl IGFzIG11Y2ggY3B1IGN5Y2xlcyBhcyB3ZSBwb3NzaWJseSBjYW4gYW5kIGlubGluaW5nDQo+PiBk b2VzIGhlbHBzIGluIHRoYXQgbWF0dGVyLg0KPg0KPk9rLCBzbyBhc2tpbmcgc2FtZSBxdWVzdGlv biBmcm9tIGRpZmZlcmVudCB0aHJlYWQ6IGhvdyBtYW55IGN5Y2xlcyBpdCB3aWxsIHNhdmU/DQo+ V2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSB3aGVuIHlvdSBo YXZlIHRoaXMgZnVuY3Rpb24gaW5saW5lZCB2cyBub3QgaW5saW5lZD8NCj4NCg0KT24geDg2IHNl dHVwIHdoaWNoIGlzIG5vdCB1bmRlciBsb2FkLCBubyBjcHVzZXRzIGNvbmZpZ3VyZWQsIGV0YyAq anVzdCogbm90IGlubGluaW5nIHJ0ZV9wbXVfcmVhZCgpIA0KZGVjcmVhc2VzIHBlcmZvcm1hbmNl IGJ5IHJvdWdobHkgMjQlICg0NCB2cyA1OCBjcHUgY3ljbGVzKS4gQXQgbGVhc3QgdGhhdCBpcyBy ZXBvcnRlZCBieSANCnRyYWNlX3BlcmZfYXV0b3Rlc3QuIA0KDQoNCj4+ID53aHkgdGhlc2UgdHdv IHN0cnVjdCBiZWxvdyAocnRlX3BtdV9ldmVudCBhbmQgcnRlX3BtdSkgaGF2ZSB0byBiZSBwdWJs aWM/DQo+PiA+SSB0aGluayBib3RoIGNhbiBiZSBzYWZlbHkgbW92ZWQgYXdheSBmcm9tIHB1Ymxp YyBoZWFkZXJzLg0KPj4gPg0KPj4NCj4+IHN0cnVjdCBydGVfcG11X2V2ZW50IGNhbiBiZSBoaWRk ZW4gSSBndWVzcy4NCj4+IHN0cnVjdCBydGVfcG11IGlzIHVzZWQgaW4gdGhpcyBoZWFkZXIgaGVu Y2UgY2Fubm90IGJlIG1vdmVkIGVsc2V3aGVyZS4NCj4NCj5Ob3Qgc3VyZSB3aHk/DQo+SXMgdGhh dCBiZWNhdXNlIHlvdSB1c2UgaXQgaW5zaWRlIHJ0ZV9wbXVfcmVhZCgpPw0KPkJ1dCB0aGF0IGNo ZWNrIEkgdGhpbmsgY2FuIGJlIHNhZmVseSBtb3ZlZCBpbnRvIF9fcnRlX3BtdV9lbmFibGVfZ3Jv dXAoKSBvciBwcm9iYWJseSBldmVuIGludG8NCj5ydGVfcG11X2FkZF9ldmVudCgpLg0KDQpObywg d2Ugc2hvdWxkIG5vdCBkbyB0aGF0LiBPdGhlcndpc2Ugd2UnbGwgbmVlZCB0byBjYWxsIGZ1bmN0 aW9uLiBFdmVuIHRob3VnaCBjaGVjayB3aWxsIGhhcHBlbg0KZWFybHkgb24gc3RpbGwgZnVuY3Rp b24gcHJvbG9ndWUvZXBpbG9ndWUgd2lsbCBoYXBwZW4uIFRoaXMgdGFrZXMgY3ljbGVzLiANCg0K Pg0KPj4gPg0KPj4gPj4gKy8qKg0KPj4gPj4gKyAqIEEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYW4g ZXZlbnQuDQo+PiA+PiArICovDQo+PiA+PiArc3RydWN0IHJ0ZV9wbXVfZXZlbnQgew0KPj4gPj4g KwljaGFyICpuYW1lOyAvKio8IG5hbWUgb2YgYW4gZXZlbnQgKi8NCj4+ID4+ICsJdW5zaWduZWQg aW50IGluZGV4OyAvKio8IGV2ZW50IGluZGV4IGludG8gZmRzL21tYXBfcGFnZXMgKi8NCj4+ID4+ ICsJVEFJTFFfRU5UUlkocnRlX3BtdV9ldmVudCkgbmV4dDsgLyoqPCBsaXN0IGVudHJ5ICovIH07 DQo+PiA+DQo+PiA+PiArDQo+PiA+PiArLyoqDQo+PiA+PiArICogQSBQTVUgc3RhdGUgY29udGFp bmVyLg0KPj4gPj4gKyAqLw0KPj4gPj4gK3N0cnVjdCBydGVfcG11IHsNCj4+ID4+ICsJY2hhciAq bmFtZTsgLyoqPCBuYW1lIG9mIGNvcmUgUE1VIGxpc3RlZCB1bmRlciAvc3lzL2J1cy9ldmVudF9z b3VyY2UvZGV2aWNlcyAqLw0KPj4gPj4gKwlydGVfc3BpbmxvY2tfdCBsb2NrOyAvKio8IHNlcmlh bGl6ZSBhY2Nlc3MgdG8gZXZlbnQgZ3JvdXAgbGlzdCAqLw0KPj4gPj4gKwlUQUlMUV9IRUFEKCwg cnRlX3BtdV9ldmVudF9ncm91cCkgZXZlbnRfZ3JvdXBfbGlzdDsgLyoqPCBsaXN0IG9mIGV2ZW50 IGdyb3VwcyAqLw0KPj4gPj4gKwl1bnNpZ25lZCBpbnQgbnVtX2dyb3VwX2V2ZW50czsgLyoqPCBu dW1iZXIgb2YgZXZlbnRzIGluIGEgZ3JvdXAgKi8NCj4+ID4+ICsJVEFJTFFfSEVBRCgsIHJ0ZV9w bXVfZXZlbnQpIGV2ZW50X2xpc3Q7IC8qKjwgbGlzdCBvZiBtYXRjaGluZyBldmVudHMgKi8NCj4+ ID4+ICsJdW5zaWduZWQgaW50IGluaXRpYWxpemVkOyAvKio8IGluaXRpYWxpemF0aW9uIGNvdW50 ZXIgKi8gfTsNCj4+ID4+ICsNCj4+ID4+ICsvKiogbGNvcmUgZXZlbnQgZ3JvdXAgKi8NCj4+ID4+ ICtSVEVfREVDTEFSRV9QRVJfTENPUkUoc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAsIF9ldmVu dF9ncm91cCk7DQo+PiA+PiArDQo+PiA+PiArLyoqIFBNVSBzdGF0ZSBjb250YWluZXIgKi8NCj4+ ID4+ICtleHRlcm4gc3RydWN0IHJ0ZV9wbXUgcnRlX3BtdTsNCj4+ID4+ICsNCj4+ID4+ICsvKiog RWFjaCBhcmNoaXRlY3R1cmUgc3VwcG9ydGluZyBQTVUgbmVlZHMgdG8gcHJvdmlkZSBpdHMgb3du DQo+PiA+PiArdmVyc2lvbiAqLyAjaWZuZGVmIHJ0ZV9wbXVfcG1jX3JlYWQgI2RlZmluZQ0KPj4g Pj4gK3J0ZV9wbXVfcG1jX3JlYWQoaW5kZXgpICh7IDA7IH0pICNlbmRpZg0KPj4gPj4gKw0KPj4g Pj4gKy8qKg0KPj4gPj4gKyAqIEB3YXJuaW5nDQo+PiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0 aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+PiA+PiArICoNCj4+ID4+ ICsgKiBSZWFkIFBNVSBjb3VudGVyLg0KPj4gPj4gKyAqDQo+PiA+PiArICogQHdhcm5pbmcgVGhp cyBzaG91bGQgYmUgbm90IGNhbGxlZCBkaXJlY3RseS4NCj4+ID4+ICsgKg0KPj4gPj4gKyAqIEBw YXJhbSBwYw0KPj4gPj4gKyAqICAgUG9pbnRlciB0byB0aGUgbW1hcHBlZCB1c2VyIHBhZ2UuDQo+ PiA+PiArICogQHJldHVybg0KPj4gPj4gKyAqICAgQ291bnRlciB2YWx1ZSByZWFkIGZyb20gaGFy ZHdhcmUuDQo+PiA+PiArICovDQo+PiA+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWlu dDY0X3QgX19ydGVfcG11X3JlYWRfdXNlcnBhZ2Uoc3RydWN0DQo+PiA+PiArcGVyZl9ldmVudF9t bWFwX3BhZ2UgKnBjKSB7DQo+PiA+PiArCXVpbnQ2NF90IHdpZHRoLCBvZmZzZXQ7DQo+PiA+PiAr CXVpbnQzMl90IHNlcSwgaW5kZXg7DQo+PiA+PiArCWludDY0X3QgcG1jOw0KPj4gPj4gKw0KPj4g Pj4gKwlmb3IgKDs7KSB7DQo+PiA+PiArCQlzZXEgPSBwYy0+bG9jazsNCj4+ID4+ICsJCXJ0ZV9j b21waWxlcl9iYXJyaWVyKCk7DQo+PiA+PiArCQlpbmRleCA9IHBjLT5pbmRleDsNCj4+ID4+ICsJ CW9mZnNldCA9IHBjLT5vZmZzZXQ7DQo+PiA+PiArCQl3aWR0aCA9IHBjLT5wbWNfd2lkdGg7DQo+ PiA+PiArDQo+PiA+PiArCQkvKiBpbmRleCBzZXQgdG8gMCBtZWFucyB0aGF0IHBhcnRpY3VsYXIg Y291bnRlciBjYW5ub3QgYmUgdXNlZCAqLw0KPj4gPj4gKwkJaWYgKGxpa2VseShwYy0+Y2FwX3Vz ZXJfcmRwbWMgJiYgaW5kZXgpKSB7DQo+PiA+DQo+PiA+SW4gbW1hcF9ldmVudHMoKSB5b3UgcmV0 dXJuIEVQRVJNIGlmIGNhcF91c2VyX3JkcG1jIGlzIG5vdCBlbmFibGVkLg0KPj4gPkRvIHlvdSBu ZWVkIGFub3RoZXIgY2hlY2sgaGVyZT8gT3IgdGhpcyBjYXBhYmlsaXR5IGNhbiBiZSBkaXNhYmxl ZCBieQ0KPj4gPmtlcm5lbCBhdCBydW4tdGltZT8NCj4+ID4NCj4+DQo+PiBUaGF0IGV4dHJhIGNo ZWNrIGluIG1tYXBfZXZlbnQoKSBtYXkgYmUgcmVtb3ZlZCBhY3R1YWxseS4gU29tZSBhcmNocw0K Pj4gYWxsb3cgZGlzYWJsaW5nIHJlYWRpbmcgcmRwbWMgKEkgdGhpbmsgdGhhdCBvbiB4ODYgb25l IGNhbiBkbyB0aGF0KSBzbyB0aGlzIGNoZWNrIG5lZWRzIHRvIHN0YXkuDQo+Pg0KPj4gPg0KPj4g Pj4gKwkJCXBtYyA9IHJ0ZV9wbXVfcG1jX3JlYWQoaW5kZXggLSAxKTsNCj4+ID4+ICsJCQlwbWMg PDw9IDY0IC0gd2lkdGg7DQo+PiA+PiArCQkJcG1jID4+PSA2NCAtIHdpZHRoOw0KPj4gPj4gKwkJ CW9mZnNldCArPSBwbWM7DQo+PiA+PiArCQl9DQo+PiA+PiArDQo+PiA+PiArCQlydGVfY29tcGls ZXJfYmFycmllcigpOw0KPj4gPj4gKw0KPj4gPj4gKwkJaWYgKGxpa2VseShwYy0+bG9jayA9PSBz ZXEpKQ0KPj4gPj4gKwkJCXJldHVybiBvZmZzZXQ7DQo+PiA+PiArCX0NCj4+ID4+ICsNCj4+ID4+ ICsJcmV0dXJuIDA7DQo+PiA+PiArfQ0KPj4gPj4gKw0KPj4gPj4gKy8qKg0KPj4gPj4gKyAqIEB3 YXJuaW5nDQo+PiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdp dGhvdXQgcHJpb3Igbm90aWNlDQo+PiA+PiArICoNCj4+ID4+ICsgKiBFbmFibGUgZ3JvdXAgb2Yg ZXZlbnRzIG9uIHRoZSBjYWxsaW5nIGxjb3JlLg0KPj4gPj4gKyAqDQo+PiA+PiArICogQHdhcm5p bmcgVGhpcyBzaG91bGQgYmUgbm90IGNhbGxlZCBkaXJlY3RseS4NCj4+ID4NCj4+ID5fX3J0ZV9p bnRlcm5hbCA/DQo+PiA+DQo+Pg0KPj4gTm8gdGhpcyBjYW5ub3QgYmUgaW50ZXJuYWwgYmVjYXVz ZSB0aGF0IHdpbGwgbWFrZSBmdW5jdGlvbnMgY2FsbGluZyBpdA0KPj4gaW50ZXJuYWwgYXMgd2Vs bCBoZW5jZSBhcHBzIHdvbid0IGJlIGFibGUgdG8gdXNlIHRoYXQuIFRoaXMgaGFzDQo+PiBhbHJl YWR5IGJlZW4gYnJvdWdodCB1cCBieSBvbmUgb2YgdGhlIHJldmlld2Vycy4NCj4NCj5PaywgdGhl biB3ZSBwcm9iYWJseSBjYW4gbWFyayBpdCB3aXRoICcgQGludGVybmFsJyB0YWcgaW4gZm9ybWFs IGNvbW1lbnRzPw0KPg0KDQpJIGFkZGVkIGEgd2FybmluZyBub3QgdG8gY2FsbCB0aGF0IGRpcmVj dGx5LiBTaW5jZSBmdW5jdGlvbiBpcyBub3QgaW50ZXJuYWwgKGluIERQREsgcGFybGFuY2UpIHBl ciBzZQ0KSSBkb27igJl0IHRoaW5rIHdlIHNob3VsZCBhZGQgbW9yZSBjb25mdXNpb24gdGhhdCBl eHRyYSB0YWcuIA0KDQo+Pg0KPj4gPj4gKyAqDQo+PiA+PiArICogQHJldHVybg0KPj4gPj4gKyAq ICAgMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4+ID4+ ICsgKi8NCj4+ID4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4+ID4+ICtpbnQNCj4+ID4+ICtfX3J0 ZV9wbXVfZW5hYmxlX2dyb3VwKHZvaWQpOw0KPj4gPj4gKw0KPj4gPj4gKy8qKg0KPj4gPj4gKyAq IEB3YXJuaW5nDQo+PiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdl IHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+PiA+PiArICoNCj4+ID4+ICsgKiBJbml0aWFsaXplIFBN VSBsaWJyYXJ5Lg0KPj4gPj4gKyAqDQo+PiA+PiArICogQHdhcm5pbmcgVGhpcyBzaG91bGQgYmUg bm90IGNhbGxlZCBkaXJlY3RseS4NCj4+ID4NCj4+ID5IbW0uLiB0aGVuIHdobyBzaG91bGQgY2Fs bCBpdD8NCj4+ID5JZiBpdCBub3Qgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LCB3aHkg dG8gZGVjbGFyZSBpdCBoZXJlPw0KPj4gPg0KPj4NCj4+IFRoaXMgaXMgaW5saW5lZCBhbmQgaGFz IG9uZSBjYWxsZXIgaS5lIHJ0ZV9wbXVfcmVhZCgpLg0KPg0KPkkgdGhvdWdodCB3ZSBhcmUgdGFs a2luZyBoZXJlIGFib3V0IHJ0ZV9wbXVfaW5pdCgpLg0KPkkgZG9uJ3Qgc2VlIHdoZXJlIGl0IGlz IGlubGluZWQgYW5kIHN0aWxsIG5vdCBjbGVhciB3aHkgaXQgY2FuJ3QgYmUgY2FsbGVkIGRpcmVj dGx5Lg0KPg0KDQpObyB0aGlzIGNhbm5vdCBiZSBjYWxsZWQgYnkgaW5pdCBiZWNhdXNlIGdyb3Vw cyBhcmUgY29uZmlndXJlZCBpbiBydW50aW1lLiBUaGF0IGlzIHdoeQ0KX19ydGVfcG11X2VuYWJs ZV9ncm91cCgpIGlzIGNhbGxlZCBvbmNlIGluIHJ0ZV9wbXVfcmVhZCgpLg0KDQoqT3RoZXIqIGNv ZGUgc2hvdWxkIG5vdCBjYWxsIHRoYXQgZGlyZWN0bHkuIEFuZCB5ZXMsIHRoYXQgaXMgbm90IGlu bGluZWQgLSBteSBtaXN0YWtlLiANCg0KPj4gPj4gKyAqDQo+PiA+PiArICogQHJldHVybg0KPj4g Pj4gKyAqICAgMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4N Cj4+ID4+ICsgKi8NCj4+ID4NCj4+ID5Qcm9iYWJseSB3b3J0aCB0byBtZW50aW9uIHRoYXQgdGhp cyBmdW5jdGlvbiBpcyBub3QgTVQgc2FmZS4NCj4+ID5TYW1lIGZvciBfZmluaV8gYW5kIGFkZF9l dmVudC4NCj4+ID5BbHNvIHdvcnRoIHRvIG1lbnRpb24gdGhhdCBhbGwgY29udHJvbC1wYXRoIGZ1 bmN0aW9ucw0KPj4gPihpbml0L2ZpbmkvYWRkX2V2ZW50KSBhbmQgZGF0YS1wYXRoIChwbXVfcmVh ZCkgY2FuJ3QgYmUgY2FsbGVkIGNvbmN1cnJlbnRseS4NCj4+ID4NCj4+DQo+PiBZZXMgdGhleSBh cmUgbWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gbWFpbiB0aHJlYWQuDQo+DQo+T2ssIHRoZW4gcGxl YXNlIGFkZCB0aGF0IGludG8gZm9ybWFsIEFQSSBjb21tZW50cy4NCj4NCj4+ID4+ICtfX3J0ZV9l eHBlcmltZW50YWwNCj4+ID4+ICtpbnQNCj4+ID4+ICtydGVfcG11X2luaXQodm9pZCk7DQo+PiA+ PiArDQo=