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 CD6A441D8D; Mon, 27 Feb 2023 09:12:58 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 69E9240A84; Mon, 27 Feb 2023 09:12:58 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 3035D40A7D for ; Mon, 27 Feb 2023 09:12:57 +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 31R7THE0001480; Mon, 27 Feb 2023 00:12:56 -0800 Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2171.outbound.protection.outlook.com [104.47.55.171]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3nyjqtprfh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 27 Feb 2023 00:12:56 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nHgZDQVq+amKCN3uI4+9F62YQC8POkkkSxO1PaL2846aUJXoOnXJUE0ePkwekxwbKh1jVGXqH+m749WS9HB+59Ubf2xFSEogtUP/QdwaA5096gfPobNJrCJD4tAB0W+XT6Ag4PsOhJT+3sMuBq14vpFR2Fk4fk8ERiBTFglNlU3wRHin9eE2byGsYjWsRIZsqOm629hf/551feka++/lF9TC8tR9xLPa0NvGwV5ZXoy5s4fGBV/0T4UWCB8089o4bZfSsakE/YlDnoOYWkDn2OCKPz2uHSkSYXU2zUKdzPZdlPoj6cjWpGKwym6R5ilkDorMEWDaqQKFEaYQtjrebw== 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=Y/9OBcoEeaoiW87HFtOYFRVc1UKbs7YUNLqR1yFLCVQ=; b=oYzV0Kgb40cg4cxixOGSNjPcAZw0oBLAf1D7TmqLK1DDRCJXzwVq/5cJdgMUC1VNP/a4dL7Ih6YGj4CMZ87CUMDZRDuTyy6BqFoIVPa+jaGcNb1qHy4GctSSergLN/v+e01MhDJ7fNEDqoVY4mlS444wmOG2PpLaAxTFHAGXZ9uCWJJ0oBfi9rpXdCPNeZnnSxKLp2ecfG4zS+aXYuZVOEO5YHwsSd8gwqPMhMzNVxc3njVEfFXiq8bwkDrh9/apg9ztMOySvrwvJru2EQrqm5bYRXLSH2HIqM+2R8eJAF7Xo+3QhZDzoKlGwCgbdLU77CdrpjOiNxE6BqBChwGsAg== 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=Y/9OBcoEeaoiW87HFtOYFRVc1UKbs7YUNLqR1yFLCVQ=; b=uRvXtwI4Xy/mm39KyKsQtbHC3N/U4u3K9oILRge3cgMiBEPpiBBR25P+12OOks6uz64ibCcXGUvnIz8JOYDPyoX6KZSbcXnHyDP0Dc9VIxpgOh496LBQo6n+awWux/zpU9WyaI5evZKUNK7aIEk4VZOX2EpIgFCYrxKZBpJbGbo= Received: from DM4PR18MB4368.namprd18.prod.outlook.com (2603:10b6:5:39d::6) by IA1PR18MB5516.namprd18.prod.outlook.com (2603:10b6:208:451::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6134.29; Mon, 27 Feb 2023 08:12:52 +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.029; Mon, 27 Feb 2023 08:12:52 +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+AgAAF7wCAAHbvAIAJ4WHg Date: Mon, 27 Feb 2023 08:12:52 +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_|IA1PR18MB5516:EE_ x-ms-office365-filtering-correlation-id: 01cc586d-ab70-4151-b8f3-08db189a6c7b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: L974OKuMrvmadxb0cxz6LdFmTjS8vXtt8Mf2JVCM6yNLqnUBkT1gS8MKe2UC9IEP7vDAHFFT4FUKYHpQhq1VzxuXf1DcFaHdh6Xg/a0R95z5nINsOSOKtKj7K6/ZoMYXGCC7yVtNTCHW+dvCNDgQnJGiVRg8UTG9C6GQoB2jzk/OkQPQtkee2oDqKcr79H0vhUk4FPFu9s42S5TOgu5osKOQT02p826PYYqe2BH0XYwE8MmhskjRrld6oN875ReLVyOugyL67qYGfhO20YKfEbq6/UsmG4j0lmBBJNukPjQb4O9PaaDfBrsjP26xQ3jA+yo2hsODN0AEvX0iRmpIVJLAziDHd2gbovxcqyOa6bUpbNF7TZEFbRVlqtxD046+eIxxiseXKq+FdqmV7GFNM5il07blrkAG6PbIevPBbE4b1iYBhu16n5cB+xpuW2sy7wfzWN6+474HO/HGvYo2PsdnM9o6MfeLpu9hOAL9TioxUz8bV9XboozOBEZFLnIOX5RNoacKaHK9HQ06d9nESWe6hTjChvLULW2j0QUS7oOt6/ToJzPCB4c68RI4u+8xzsNxO+zpCPKyvlA89Fx1CDRZMVcQj9fe7m3jqmRlorA/T5NZlETIgBxSkgZw9KzF2vh3gzH02XHv7bkliWj42E6AE7P0j3dMCi6N6h5vy0ox/YiBXiCTYO8XuGO4Vk3q05GzmzXl7u0xUJ52OszelZWWAarTg80YKNRGnqqjrIU= 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)(396003)(39860400002)(366004)(346002)(376002)(451199018)(9686003)(186003)(38100700002)(122000001)(83380400001)(38070700005)(52536014)(8936002)(66946007)(66556008)(66476007)(66446008)(76116006)(41300700001)(8676002)(2906002)(5660300002)(30864003)(71200400001)(7696005)(55016003)(478600001)(6506007)(64756008)(26005)(316002)(33656002)(110136005)(86362001)(66899018)(41533002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?dXYrOFc4S2Y1STV5T1d3RTRkYWdoNy9kVkx5MWQrT1Z0aUJ6TVhJdWhsL2JI?= =?utf-8?B?aC85RTVKN2srUVcvZjVSb2xPVDMzQytUdHd3R1ZhWU5ZUXBQYjhMV2RROFJG?= =?utf-8?B?L0JqZkwwS3J2a1lwdE5iQ0wwQWZMQU1raDVySDVDQUdZWnVmZ3M2Z3M0eVNw?= =?utf-8?B?T0RHbGt4L01KajVjekNVZU8yU0RNMWwvOXZqcy9BT2lQT3ArV0J0NzhOSE56?= =?utf-8?B?R2tQZ0pna25rblVHeStEVmZJUXNSY2d0N2NaNWJxMVBYdnZrU0Nhb2o1c25N?= =?utf-8?B?elF0cUdlRTN0UXNpbDh0VDZnbHM3amhlYUNxS0JtRktic2xBeWFoOWc4TjdS?= =?utf-8?B?b2tTWldBM1V1STVXSjBzVTdiRHZoRHYwRERCaWZlU0JLalROaGc0ckZ6YTlY?= =?utf-8?B?dXF6YTdaOEt3TUY4TmEya3RvbG9HdFgxc3VNN0lid1JpYmZvWlVHMkg0WWVw?= =?utf-8?B?RXpLS2RmQWtGcFM0YmhwRnM0UFRxUFpDMUtEMEdNK2Q1cVZpclVlN1BnMzdz?= =?utf-8?B?WWhDYnRiakJ5T2tUZkRhQ296NXFPdXdsK2dwN3pDVDB4anNGb0U2UDgyT1dK?= =?utf-8?B?bnNJcjVkZnF0TkRTN3JWUStpWkk2M05XT0tnWGtvdVFwOEw4cjVKVTF2NXlk?= =?utf-8?B?bjliT2VEcG9oT3kzaWd3VVpQOGwxWHBoNHo2QkNLZE9lbzc0R3RhNGdTVUJ1?= =?utf-8?B?TVhHMHdnQUVTTmhjbVBqRklJNjFITkhJT3VDT00yaXRNNjYzYkFlRjJHMUNq?= =?utf-8?B?aDVEd3loSlFQTmsxMnpmOEM0VWJnY1orTlhhS0hzV3FqL3B3V3RxeGFqR0Zt?= =?utf-8?B?QWwyaHJ4WGFsSEFRTUkxRjdOeG5ybmJGRUdvMzc3MnNZWW9oVHRBcGhROTVv?= =?utf-8?B?NFNtRUZNdG9FUnNxUkNyWlhFaVJpbGdwTEFER0g4U3FJcmJhWXhVV3JDa1cx?= =?utf-8?B?aG5ucEFaUUpEbkJaZWo1MnhLMUtsL1BXbzZ6S2R0Ymc4cHNDc1l5M3FqaUtW?= =?utf-8?B?bHlTYVB1M0x0S2VORnNFNmh4cWRDaE83NWFReTAyYTN4UGFKZ25vbEFSRFdl?= =?utf-8?B?d0NsY3hlQjQvTTNKNUJzbm96VXRsM0lBcWRPK0RUTzEza2l3WnlhajBoMjVa?= =?utf-8?B?V2IrU0xrNTQ5M244VHBpZWUvV0RtUHpmSk40UUtsTWppcHNHdkN1U0hHb1RK?= =?utf-8?B?QXptU3FPamttU01JNzRKWkptV0F0OTIzMmJPSitDTGtTcXBSOEg5bG5kSC9X?= =?utf-8?B?UDJ2akQ4VXdsdG1JNnp3aFVtOWpLUU1SMEJZN055aWJ4Y2NMNCs2Y3h5R0Rr?= =?utf-8?B?L29IQ0VjTEZGYU1lZ1hZK1FqSjltcUprdFd2Smcwb0JXNkZwWVhJdy9lL1pV?= =?utf-8?B?bGFkS0M0aVBqLzFTQXZYaXVsWjFYaXR4RnJJNnJHdndmaE9uQW1ON2VSRUdS?= =?utf-8?B?L05ObjZ4WU1NS1gybmx5bGFVK0llWkowRWJUL1RSTUxUV0lJYWlvRUE1RjhY?= =?utf-8?B?SkNmOHFsSE9uYVpFRmxCWDNkOTNLR0NLelRPMnk4RTZoWjFXMzF5c0NpNnMw?= =?utf-8?B?MWZ4UHJ0WndRSERMZlFnWEhndGVBdTRTb0o5eGsvWXVLM0MrZ1BYYlk4cWhC?= =?utf-8?B?elExeHpWNDhsTGV3TnNaMjRKUHpiZGFPY045eDZnUmlBcGdrRVMzbXhQd0M5?= =?utf-8?B?Z0xsMmJrKzBxeGp5Wk1ZRldOK3dLai91cUpBNUR4OXBEZyt4U3BMcWJoWFBy?= =?utf-8?B?b2VuUkZGaVEzTWJtaXZvYmVOczEwcVYxN0djaFhHSnU3R2c1R0ZCZEhhUkQr?= =?utf-8?B?eUdlZUxxcFVvakYwVDlVV09ZeEFaWUhmalpkN3JlZnE2OUZ3MFVENWRFVVFT?= =?utf-8?B?TzkxYUZwb3dkWnpvS3BPUVlGOEpZVDVwSlJnK1JVRnluVkt5cjFRbzY2MjhG?= =?utf-8?B?WFJ0dW9LS293WnJGbWFhM2U0WU9mY2VPdXdwOE9wMHgyQU1Rd1ZFbEVOc3N3?= =?utf-8?B?OW0zd2ZHY2pqbFh0V21veklDUllIaGRlelNJYTBaOXdadlUrSHgzVTNmMGJU?= =?utf-8?B?eTFOTUJWYnlSWWU3dmN4cUM0WW51M0JTZFRqQk9JQ3ZiNlNtRUd1cyttcHM2?= =?utf-8?Q?dOFpBSBnInpdZzHjGBMDw2r99?= 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: 01cc586d-ab70-4151-b8f3-08db189a6c7b X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Feb 2023 08:12:52.6509 (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: 5P7mM8qUt1/Tsf5QiJS6v3o9wjDU0poXgdyRqfHWQfzTV//elo1mW4R2QasjsRyc9887J3KxmGoCWUOXv5kq0w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR18MB5516 X-Proofpoint-ORIG-GUID: 4xSTdEEj3PmvgB1g7gvz-m1AfrXHXc2a X-Proofpoint-GUID: 4xSTdEEj3PmvgB1g7gvz-m1AfrXHXc2a 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-26_22,2023-02-24_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 diA8a29uc3RhbnRpbi52LmFuYW55ZXZAeWFuZGV4LnJ1Pg0KPlNlbnQ6IFR1ZXNkYXksIEZlYnJ1 YXJ5IDIxLCAyMDIzIDE6NDggQU0NCj5UbzogVG9tYXN6IER1c3p5bnNraSA8dGR1c3p5bnNraUBt YXJ2ZWxsLmNvbT47IEtvbnN0YW50aW4gQW5hbnlldiA8a29uc3RhbnRpbi5hbmFueWV2QGh1YXdl aS5jb20+Ow0KPmRldkBkcGRrLm9yZw0KPlN1YmplY3Q6IFJlOiBbRVhUXSBSZTogW1BBVENIIHYx MSAxLzRdIGxpYjogYWRkIGdlbmVyaWMgc3VwcG9ydCBmb3IgcmVhZGluZyBQTVUgZXZlbnRzDQo+ DQo+DQo+Pj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9saWIvcG11L3J0ZV9wbXUuaCBiL2xpYi9wbXUv cnRlX3BtdS5oIG5ldyBmaWxlDQo+Pj4+Pj4+Pj4+IG1vZGUNCj4+Pj4+Pj4+Pj4gMTAwNjQ0IGlu ZGV4IDAwMDAwMDAwMDAuLjZiNjY0YzMzMzYNCj4+Pj4+Pj4+Pj4gLS0tIC9kZXYvbnVsbA0KPj4+ Pj4+Pj4+PiArKysgYi9saWIvcG11L3J0ZV9wbXUuaA0KPj4+Pj4+Pj4+PiBAQCAtMCwwICsxLDIx MiBAQA0KPj4+Pj4+Pj4+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVz ZQ0KPj4+Pj4+Pj4+PiArICogQ29weXJpZ2h0KGMpIDIwMjMgTWFydmVsbCAgKi8NCj4+Pj4+Pj4+ Pj4gKw0KPj4+Pj4+Pj4+PiArI2lmbmRlZiBfUlRFX1BNVV9IXw0KPj4+Pj4+Pj4+PiArI2RlZmlu ZSBfUlRFX1BNVV9IXw0KPj4+Pj4+Pj4+PiArDQo+Pj4+Pj4+Pj4+ICsvKioNCj4+Pj4+Pj4+Pj4g KyAqIEBmaWxlDQo+Pj4+Pj4+Pj4+ICsgKg0KPj4+Pj4+Pj4+PiArICogUE1VIGV2ZW50IHRyYWNp bmcgb3BlcmF0aW9ucw0KPj4+Pj4+Pj4+PiArICoNCj4+Pj4+Pj4+Pj4gKyAqIFRoaXMgZmlsZSBk ZWZpbmVzIGdlbmVyaWMgQVBJIGFuZCB0eXBlcyBuZWNlc3NhcnkgdG8gc2V0dXANCj4+Pj4+Pj4+ Pj4gK1BNVSBhbmQNCj4+Pj4+Pj4+Pj4gKyAqIHJlYWQgc2VsZWN0ZWQgY291bnRlcnMgaW4gcnVu dGltZS4NCj4+Pj4+Pj4+Pj4gKyAqLw0KPj4+Pj4+Pj4+PiArDQo+Pj4+Pj4+Pj4+ICsjaWZkZWYg X19jcGx1c3BsdXMNCj4+Pj4+Pj4+Pj4gK2V4dGVybiAiQyIgew0KPj4+Pj4+Pj4+PiArI2VuZGlm DQo+Pj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+ DQo+Pj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+Pj4gKyNpbmNsdWRlIDxydGVfYXRvbWljLmg+DQo+Pj4+ Pj4+Pj4+ICsjaW5jbHVkZSA8cnRlX2JyYW5jaF9wcmVkaWN0aW9uLmg+ICNpbmNsdWRlIDxydGVf Y29tbW9uLmg+DQo+Pj4+Pj4+Pj4+ICsjaW5jbHVkZSA8cnRlX2NvbXBhdC5oPiAjaW5jbHVkZSA8 cnRlX3NwaW5sb2NrLmg+DQo+Pj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+Pj4gKy8qKiBNYXhpbXVtIG51 bWJlciBvZiBldmVudHMgaW4gYSBncm91cCAqLyAjZGVmaW5lDQo+Pj4+Pj4+Pj4+ICtNQVhfTlVN X0dST1VQX0VWRU5UUyA4DQo+Pj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+Pj4gKy8qKg0KPj4+Pj4+Pj4+ PiArICogQSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIGdyb3VwIG9mIGV2ZW50cy4NCj4+Pj4+Pj4+ Pj4gKyAqLw0KPj4+Pj4+Pj4+PiArc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgew0KPj4+Pj4+ Pj4+PiArCXN0cnVjdCBwZXJmX2V2ZW50X21tYXBfcGFnZQ0KPj4+Pj4+Pj4+PiArKm1tYXBfcGFn ZXNbTUFYX05VTV9HUk9VUF9FVkVOVFNdOw0KPj4+Pj4+Pj4+PiArLyoqPCBhcnJheSBvZiB1c2Vy IHBhZ2VzDQo+Pj4+Pj4+ICovDQo+Pj4+Pj4+Pj4+ICsJaW50IGZkc1tNQVhfTlVNX0dST1VQX0VW RU5UU107IC8qKjwgYXJyYXkgb2YgZXZlbnQgZGVzY3JpcHRvcnMgKi8NCj4+Pj4+Pj4+Pj4gKwli b29sIGVuYWJsZWQ7IC8qKjwgdHJ1ZSBpZiBncm91cCB3YXMgZW5hYmxlZCBvbiBwYXJ0aWN1bGFy IGxjb3JlICovDQo+Pj4+Pj4+Pj4+ICsJVEFJTFFfRU5UUlkocnRlX3BtdV9ldmVudF9ncm91cCkg bmV4dDsgLyoqPCBsaXN0IGVudHJ5ICovIH0NCj4+Pj4+Pj4+Pj4gK19fcnRlX2NhY2hlX2FsaWdu ZWQ7DQo+Pj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+Pj4gKy8qKg0KPj4+Pj4+Pj4+PiArICogQSBzdHJ1 Y3R1cmUgZGVzY3JpYmluZyBhbiBldmVudC4NCj4+Pj4+Pj4+Pj4gKyAqLw0KPj4+Pj4+Pj4+PiAr c3RydWN0IHJ0ZV9wbXVfZXZlbnQgew0KPj4+Pj4+Pj4+PiArCWNoYXIgKm5hbWU7IC8qKjwgbmFt ZSBvZiBhbiBldmVudCAqLw0KPj4+Pj4+Pj4+PiArCXVuc2lnbmVkIGludCBpbmRleDsgLyoqPCBl dmVudCBpbmRleCBpbnRvIGZkcy9tbWFwX3BhZ2VzICovDQo+Pj4+Pj4+Pj4+ICsJVEFJTFFfRU5U UlkocnRlX3BtdV9ldmVudCkgbmV4dDsgLyoqPCBsaXN0IGVudHJ5ICovIH07DQo+Pj4+Pj4+Pj4+ ICsNCj4+Pj4+Pj4+Pj4gKy8qKg0KPj4+Pj4+Pj4+PiArICogQSBQTVUgc3RhdGUgY29udGFpbmVy Lg0KPj4+Pj4+Pj4+PiArICovDQo+Pj4+Pj4+Pj4+ICtzdHJ1Y3QgcnRlX3BtdSB7DQo+Pj4+Pj4+ Pj4+ICsJY2hhciAqbmFtZTsgLyoqPCBuYW1lIG9mIGNvcmUgUE1VIGxpc3RlZCB1bmRlciAvc3lz L2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcyAqLw0KPj4+Pj4+Pj4+PiArCXJ0ZV9zcGlubG9ja190 IGxvY2s7IC8qKjwgc2VyaWFsaXplIGFjY2VzcyB0byBldmVudCBncm91cCBsaXN0ICovDQo+Pj4+ Pj4+Pj4+ICsJVEFJTFFfSEVBRCgsIHJ0ZV9wbXVfZXZlbnRfZ3JvdXApIGV2ZW50X2dyb3VwX2xp c3Q7IC8qKjwgbGlzdCBvZiBldmVudCBncm91cHMgKi8NCj4+Pj4+Pj4+Pj4gKwl1bnNpZ25lZCBp bnQgbnVtX2dyb3VwX2V2ZW50czsgLyoqPCBudW1iZXIgb2YgZXZlbnRzIGluIGEgZ3JvdXAgKi8N Cj4+Pj4+Pj4+Pj4gKwlUQUlMUV9IRUFEKCwgcnRlX3BtdV9ldmVudCkgZXZlbnRfbGlzdDsgLyoq PCBsaXN0IG9mIG1hdGNoaW5nIGV2ZW50cyAqLw0KPj4+Pj4+Pj4+PiArCXVuc2lnbmVkIGludCBp bml0aWFsaXplZDsgLyoqPCBpbml0aWFsaXphdGlvbiBjb3VudGVyICovIH07DQo+Pj4+Pj4+Pj4+ ICsNCj4+Pj4+Pj4+Pj4gKy8qKiBsY29yZSBldmVudCBncm91cCAqLw0KPj4+Pj4+Pj4+PiArUlRF X0RFQ0xBUkVfUEVSX0xDT1JFKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwLA0KPj4+Pj4+Pj4+ PiArX2V2ZW50X2dyb3VwKTsNCj4+Pj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4+PiArLyoqIFBNVSBzdGF0 ZSBjb250YWluZXIgKi8NCj4+Pj4+Pj4+Pj4gK2V4dGVybiBzdHJ1Y3QgcnRlX3BtdSBydGVfcG11 Ow0KPj4+Pj4+Pj4+PiArDQo+Pj4+Pj4+Pj4+ICsvKiogRWFjaCBhcmNoaXRlY3R1cmUgc3VwcG9y dGluZyBQTVUgbmVlZHMgdG8gcHJvdmlkZSBpdHMgb3duDQo+Pj4+Pj4+Pj4+ICt2ZXJzaW9uICov ICNpZm5kZWYgcnRlX3BtdV9wbWNfcmVhZCAjZGVmaW5lDQo+Pj4+Pj4+Pj4+ICtydGVfcG11X3Bt Y19yZWFkKGluZGV4KSAoeyAwOyB9KSAjZW5kaWYNCj4+Pj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4+PiAr LyoqDQo+Pj4+Pj4+Pj4+ICsgKiBAd2FybmluZw0KPj4+Pj4+Pj4+PiArICogQGIgRVhQRVJJTUVO VEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+Pj4+Pj4+Pj4+ ICsgKg0KPj4+Pj4+Pj4+PiArICogUmVhZCBQTVUgY291bnRlci4NCj4+Pj4+Pj4+Pj4gKyAqDQo+ Pj4+Pj4+Pj4+ICsgKiBAd2FybmluZyBUaGlzIHNob3VsZCBiZSBub3QgY2FsbGVkIGRpcmVjdGx5 Lg0KPj4+Pj4+Pj4+PiArICoNCj4+Pj4+Pj4+Pj4gKyAqIEBwYXJhbSBwYw0KPj4+Pj4+Pj4+PiAr ICogICBQb2ludGVyIHRvIHRoZSBtbWFwcGVkIHVzZXIgcGFnZS4NCj4+Pj4+Pj4+Pj4gKyAqIEBy ZXR1cm4NCj4+Pj4+Pj4+Pj4gKyAqICAgQ291bnRlciB2YWx1ZSByZWFkIGZyb20gaGFyZHdhcmUu DQo+Pj4+Pj4+Pj4+ICsgKi8NCj4+Pj4+Pj4+Pj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5l IHVpbnQ2NF90DQo+Pj4+Pj4+Pj4+ICtfX3J0ZV9wbXVfcmVhZF91c2VycGFnZShzdHJ1Y3QgcGVy Zl9ldmVudF9tbWFwX3BhZ2UgKnBjKSB7DQo+Pj4+Pj4+Pj4+ICsJdWludDY0X3Qgd2lkdGgsIG9m ZnNldDsNCj4+Pj4+Pj4+Pj4gKwl1aW50MzJfdCBzZXEsIGluZGV4Ow0KPj4+Pj4+Pj4+PiArCWlu dDY0X3QgcG1jOw0KPj4+Pj4+Pj4+PiArDQo+Pj4+Pj4+Pj4+ICsJZm9yICg7Oykgew0KPj4+Pj4+ Pj4+PiArCQlzZXEgPSBwYy0+bG9jazsNCj4+Pj4+Pj4+Pj4gKwkJcnRlX2NvbXBpbGVyX2JhcnJp ZXIoKTsNCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IEFyZSB5b3Ugc3VyZSB0aGF0IGNvbXBpbGVyX2Jh cnJpZXIoKSBpcyBlbm91Z2ggaGVyZT8NCj4+Pj4+Pj4+PiBPbiBzb21lIGFyY2hzIENQVSBpdHNl bGYgaGFzIGZyZWVkb20gdG8gcmUtb3JkZXIgcmVhZHMuDQo+Pj4+Pj4+Pj4gT3IgSSBhbSBtaXNz aW5nIHNvbWV0aGluZyBvYnZpb3VzIGhlcmU/DQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+DQo+Pj4+Pj4+ PiBJdCdzIGEgbWF0dGVyIG9mIG5vdCBrZWVwaW5nIG9sZCBzdHVmZiBjYWNoZWQgaW4gcmVnaXN0 ZXJzIGFuZA0KPj4+Pj4+Pj4gbWFraW5nIHN1cmUgdGhhdCB3ZSBoYXZlIHR3byByZWFkcyBvZiBs b2NrLiBDUFUgcmVvcmRlcmluZyB3b24ndA0KPj4+Pj4+Pj4gZG8gYW55IGhhcm0gaGVyZS4NCj4+ Pj4+Pj4NCj4+Pj4+Pj4gU29ycnksIEkgZGlkbid0IGdldCB5b3UgaGVyZToNCj4+Pj4+Pj4gU3Vw cG9zZSBDUFUgd2lsbCByZS1vcmRlciByZWFkcyBhbmQgd2lsbCByZWFkIGxvY2sgKmFmdGVyKiBp bmRleCBvciBvZmZzZXQgdmFsdWUuDQo+Pj4+Pj4+IFdvdWxkbid0IGl0IG1lYW4gdGhhdCBpbiB0 aGF0IGNhc2UgaW5kZXggYW5kL29yIG9mZnNldCBjYW4gY29udGFpbiBvbGQvaW52YWxpZCB2YWx1 ZXM/DQo+Pj4+Pj4+DQo+Pj4+Pj4NCj4+Pj4+PiBUaGlzIG51bWJlciBpcyBqdXN0IGFuIGluZGlj YXRvciB3aGV0aGVyIGtlcm5lbCBkaWQgY2hhbmdlIHNvbWV0aGluZyBvciBub3QuDQo+Pj4+Pg0K Pj4+Pj4gWW91IGFyZSB0YWxraW5nIGFib3V0IHBjLT5sb2NrLCByaWdodD8NCj4+Pj4+IFllcywg SSBkbyB1bmRlcnN0YW5kIHRoYXQgaXQgaXMgc29ydCBvZiBzZXFsb2NrLg0KPj4+Pj4gVGhhdCdz IHdoeSBJIGFtIHB1enpsZWQgd2h5IHdlIGRvIG5vdCBjYXJlIGFib3V0IHBvc3NpYmxlIGNwdSBy ZWFkLXJlb3JkZXJpbmcuDQo+Pj4+PiBNYW51YWwgZm9yIHBlcmZfZXZlbnRfb3BlbigpIGFsc28g aGFzIGEgY29kZSBzbmlwcGV0IHdpdGggY29tcGlsZXIgYmFycmllciBvbmx5Li4uDQo+Pj4+Pg0K Pj4+Pj4+IElmIGNwdSByZW9yZGVyaW5nIHdpbGwgY29tZSBpbnRvIHBsYXkgdGhlbiB0aGlzIHdp bGwgbm90IGNoYW5nZQ0KPj4+Pj4+IGFueXRoaW5nIGZyb20gcG92IG9mIHRoaXMNCj4+PiBsb29w Lg0KPj4+Pj4+IEFsbCB3ZSB3YW50IGlzIGZyZXNoIGRhdGEgd2hlbiBuZWVkZWQgYW5kIG5vIGlu dm9sdmVtZW50IG9mDQo+Pj4+Pj4gY29tcGlsZXIgd2hlbiBpdCBjb21lcyB0byByZW9yZGVyaW5n IGNvZGUuDQo+Pj4+Pg0KPj4+Pj4gT2ssIGNhbiB5b3UgcHJvYmFibHkgZXhwbGFpbiB0byBtZSB3 aHkgdGhlIGZvbGxvd2luZyBjb3VsZCBub3QgaGFwcGVuOg0KPj4+Pj4gVDA6DQo+Pj4+PiBwYy0+ c2VxbG9jaz09MDsgcGMtPmluZGV4PT1JMTsgcGMtPm9mZnNldD09TzE7DQo+Pj4+PiBUMToNCj4+ Pj4+ICAgICAgIGNwdSAjMCByZWFkIHBtdSAoZHVlIHRvIGNwdSByZWFkIHJlb3JkZXIsIHdlIGdl dCBpbmRleCB2YWx1ZSBiZWZvcmUgc2VxbG9jayk6DQo+Pj4+PiAgICAgICAgaW5kZXg9cGMtPmlu ZGV4OyAgLy9pbmRleD09STE7DQo+Pj4+PiBUMjoNCj4+Pj4+ICAgICAgIGNwdSAjMSBrZXJuZWwg dmVudF91cGRhdGVfdXNlcnBhZ2U6DQo+Pj4+PiAgICAgICBwYy0+bG9jaysrOyAvLyBwYy0+bG9j az09MQ0KPj4+Pj4gICAgICAgcGMtPmluZGV4PUkyOw0KPj4+Pj4gICAgICAgcGMtPm9mZnNldD1P MjsNCj4+Pj4+ICAgICAgIC4uLg0KPj4+Pj4gICAgICAgcGMtPmxvY2srKzsgLy9wYy0+bG9jaz09 Mg0KPj4+Pj4gVDM6DQo+Pj4+PiAgICAgICBjcHUgIzAgY29udGludWUgd2l0aCByZWFkIHBtdToN Cj4+Pj4+ICAgICAgIHNlcT1wYy0+bG9jazsgLy9zZXEgPT0gMg0KPj4+Pj4gICAgICAgIG9mZnNl dD1wYy0+b2Zmc2V0OyAvLyBvZmZzZXQgPT0gTzINCj4+Pj4+ICAgICAgICAuLi4uDQo+Pj4+PiAg ICAgICAgcG1jID0gcnRlX3BtdV9wbWNfcmVhZChpbmRleCAtIDEpOyAgLy8gTm90ZSB0aGF0IHdl IHJlYWQgYXQgSTEsIG5vdCBJMg0KPj4+Pj4gICAgICAgIG9mZnNldCArPSBwbWM7IC8vb2Zmc2V0 ID09IE8yICsgcG1jcmVhZChJMS0xKTsNCj4+Pj4+ICAgICAgICBpZiAocGMtPmxvY2sgPT0gc2Vx KSAvLyB0aGV5IGFyZSBlcXVhbCwgcmV0dXJuDQo+Pj4+PiAgICAgICAgICAgICAgcmV0dXJuIG9m ZnNldDsNCj4+Pj4+DQo+Pj4+PiBPciwgaXQgY2FuIGhhcHBlbiwgYnV0IGJ5IHNvbWUgcmVhc29u IHdlIGRvbid0IGNhcmUgbXVjaD8NCj4+Pj4+DQo+Pj4+DQo+Pj4+IFRoaXMgY29kZSBkb2VzIHNl bGYtbW9uaXRvcmluZyBhbmQgdXNlciBwYWdlICh3aG9sZSBncm91cCBhY3R1YWxseSkNCj4+Pj4g aXMgcGVyIHRocmVhZCBydW5uaW5nIG9uIGN1cnJlbnQgY3B1LiBIZW5jZSBJIGFtIG5vdCBzdXJl IHdoYXQgYXJlDQo+Pj4+IHlvdSB0cnlpbmcgdG8gcHJvdmUgd2l0aCB0aGF0DQo+Pj4gZXhhbXBs ZS4NCj4+Pg0KPj4+IEkgYW0gbm90IHRyeWluZyB0byBwcm92ZSBhbnl0aGluZyBzbyBmYXIuDQo+ Pj4gSSBhbSBhc2tpbmcgaXMgc3VjaCBzaXR1YXRpb24gcG9zc2libGUgb3Igbm90LCBhbmQgaWYg bm90LCB3aHk/DQo+Pj4gTXkgY3VycmVudCB1bmRlcnN0YW5kaW5nIChwb3NzaWJseSB3cm9uZykg aXMgdGhhdCBhZnRlciB5b3UgbW1hcGVkDQo+Pj4gdGhlc2UgcGFnZXMsIGtlcm5lbCBzdGlsbCBj YW4gYXN5bmNocm9ub3VzbHkgdXBkYXRlIHRoZW0uDQo+Pj4gU28sIHdoZW4gcmVhZGluZyB0aGUg ZGF0YSBmcm9tIHRoZXNlIHBhZ2VzIHlvdSBoYXZlIHRvIGNoZWNrICdsb2NrJw0KPj4+IHZhbHVl IGJlZm9yZSBhbmQgYWZ0ZXIgYWNjZXNzaW5nIG90aGVyIGRhdGEuDQo+Pj4gSWYgc28sIHdoeSBw b3NzaWJsZSBjcHUgcmVhZC1yZW9yZGVyaW5nIGRvZXNuJ3QgbWF0dGVyPw0KPj4+DQo+Pg0KPj4g TG9vay4gSSdsbCByZWl0ZXJhdGUgdGhhdC4NCj4+DQo+PiAxLiBUaGF0IHVzZXIgcGFnZS9ncm91 cC9QTVUgY29uZmlnIGlzIHBlciBwcm9jZXNzLiBPdGhlciBwcm9jZXNzZXMgZG8gbm90IGFjY2Vz cyB0aGF0Lg0KPg0KPk9rLCB0aGF0J3MgY2xlYXIuDQo+DQo+DQo+PiAgICAgQWxsIHRoaXMgaGFw cGVucyBvbiB0aGUgdmVyeSBzYW1lIENQVSB3aGVyZSBjdXJyZW50IHRocmVhZCBpcyBydW5uaW5n Lg0KPg0KPk9rLi4uIGJ1dCBjYW4ndCB0aGlzIHBhZ2UgYmUgdXBkYXRlZCBieSBrZXJuZWwgdGhy ZWFkIHJ1bm5pbmcgc2ltdWx0YW5lb3VzbHkgb24gZGlmZmVyZW50IENQVT8NCj4NCg0KSSBhbHJl YWR5IHBvaW50ZWQgb3V0IHRoYXQgZXZlbnQvY291bnRlciBjb25maWd1cmF0aW9uIGlzIGJvdW5k IHRvIGN1cnJlbnQgY3B1LiBIb3cgY2FuIHBvc3NpYmx5DQpvdGhlciBjcHUgdXBkYXRlIHRoYXQg Y29uZmlndXJhdGlvbj8gVGhpcyBjYW5ub3Qgd29yay4gDQoNCg0KSWYgeW91IHRoaW5rIHRoYXQg dGhlcmUncyBzb21lIHByb2JsZW0gd2l0aCB0aGUgY29kZSAob3IgaXMgc2ltcGx5IGJyb2tlbiBv biB5b3VyIHNldHVwKSBhbmQgbG9naWMgDQpoYXMgb2J2aW91cyBmbGF3IGFuZCB5b3UgY2FuIHBy b3ZpZGUgbWVhbmluZ2Z1bCBldmlkZW5jZSBvZiB0aGF0IHRoZW4gSSdkIGJlIG1vcmUgdGhhbiBo YXBweSB0byANCmFwcGx5IHRoYXQgZml4LiBPdGhlcndpc2UgdGhhdCBkaXNjdXNzaW9uIHdpbGwg Z2V0IHVzIG5vd2hlcmUuIA0KDQo+DQo+PiAyLiBTdXBwb3NlIHlvdSd2ZSBhbHJlYWR5IHJlYWQg c2VxLiBOb3cgZm9yIHNvbWUgcmVhc29uIGtlcm5lbCB1cGRhdGVzIGRhdGEgaW4gcGFnZSBzZXEg d2FzIHJlYWQNCj5mcm9tLg0KPj4gMy4gS2VybmVsIHdpbGwgZW50ZXIgY3JpdGljYWwgc2VjdGlv biBkdXJpbmcgdXBkYXRlLiBzZXEgY2hhbmdlcyBhbG9uZyB3aXRoIG90aGVyIGRhdGEgd2l0aG91 dA0KPmFwcCBrbm93aW5nIGFib3V0IGl0Lg0KPj4gICAgIElmIHlvdSB3YW50IG5pdHR5IGdyaXR0 eSBkZXRhaWxzIGNvbnN1bHQga2VybmVsIHNvdXJjZXMuDQo+DQo+TG9vaywgSSBkb24ndCBoYXZl IHRvIGJlZyB5b3UgdG8gYW5zd2VyIHRoZXNlIHF1ZXN0aW9ucy4NCj5JbiBmYWN0LCBJIGV4cGVj dCBsaWJyYXJ5IGF1dGhvciB0byBkb2N1bWVudCBhbGwgc3VjaCBuYXJyb3cgdGhpbmdzDQo+Y2xl YXJseSBlaXRoZXIgaW4gaW4gUEcsIG9yIGluIHNvdXJjZSBjb2RlIGNvbW1lbnRzIChpZGVhbGx5 IGluIGJvdGgpLg0KPklmIG5vdCwgdGhlbiBmcm9tIG15IHBlcnNwZWN0aXZlIHRoZSBwYXRjaCBp cyBub3QgcmVhZHkgc3RhZ2UgYW5kDQo+c2hvdWxkbid0IGJlIGFjY2VwdGVkLg0KPkkgZG9uJ3Qg a25vdyBpcyBjb21waWxlci1iYXJyaWVyIGlzIGVub3VnaCBoZXJlIG9yIG5vdCwgYnV0IEkgdGhp bmsgaXQNCj5pcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xlYXIgZXhwbGFuYXRpb24gaW4gdGhlIGRv Y3MuDQo+SSBzdXBwb3NlIGl0IHdvdWxkbid0IGJlIG9ubHkgbWUgd2hvIHdpbGwgZ2V0IGNvbmZ1 c2VkIGhlcmUuDQo+U28gcGxlYXNlIHRha2UgYW4gZWZmb3J0IGFuZCBkb2N1bWVudCBpdCBjbGVh cmx5IHdoeSB5b3UgYmVsaWV2ZSB0aGVyZQ0KPmlzIG5vIHJhY2UtY29uZGl0aW9uLg0KPg0KPj4g NC4gYXBwIHJlc3VtZXMgYW5kIGhhcyBzb21lIHN0YWxlIGRhdGEgYnV0ICpXSUxMKiByZWFkIG5l dyBzZXEuIENvZGUgbG9vcHMgYWdhaW4gYmVjYXVzZSB2YWx1ZXMNCj5kbyBub3QgbWF0Y2guDQo+ DQo+SWYgdGhlIGtlcm5lbCB3aWxsIGFsd2F5cyBleGVjdXRlIHVwZGF0ZSBmb3IgdGhpcyBwYWdl IGluIHRoZSBzYW1lDQo+dGhyZWFkIGNvbnRleHQsIHRoZW4geWVzLCAtIHVzZXIgY29kZSB3aWxs IGFsd2F5cyBub3RlIHRoZSBkaWZmZXJlbmNlDQo+YWZ0ZXIgcmVzdW1lLg0KPkJ1dCB3aHkgaXQg Y2FuJ3QgaGFwcGVuIHRoYXQgeW91ciB1c2VyLXRocmVhZCByZWFkcyB0aGlzIHBhZ2Ugb24gb25l DQo+Q1BVLCB3aGlsZSBzb21lIGtlcm5lbCBjb2RlIG9uIG90aGVyIENQVSB1cGRhdGVzIGl0IHNp bXVsdGFuZW91c2x5Pw0KPg0KPg0KPj4gNS4gT3RoZXJ3aXNlIHNlcSB2YWx1ZXMgbWF0Y2ggYW5k IGRhdGEgaXMgdmFsaWQuDQo+Pg0KPj4+IEFsc28gdGhlcmUgd2FzIGFub3RoZXIgcXVlc3Rpb24g YmVsb3csIHdoaWNoIHlvdSBwcm9iYWJseSAgbWlzc2VkLCBzbyBJIGNvcGllZCBpdCBoZXJlOg0K Pj4+IEFub3RoZXIgcXVlc3Rpb24gLSBkbyB3ZSByZWFsbHkgbmVlZCAgdG8gaGF2ZSBfX3J0ZV9w bXVfcmVhZF91c2VycGFnZSgpIGFuZCBydGVfcG11X3JlYWQoKSBhcw0KPj4+IHN0YXRpYyBpbmxp bmUgZnVuY3Rpb25zIGluIHB1YmxpYyBoZWFkZXI/DQo+Pj4gQXMgSSB1bmRlcnN0YW5kLCBiZWNh dXNlIG9mIHRoYXQgd2UgYWxzbyBoYXZlIHRvIG1ha2UgJ3N0cnVjdCBydGVfcG11XyonDQo+Pj4g ZGVmaW5pdGlvbnMgYWxzbyBwdWJsaWMuDQo+Pj4NCj4+DQo+PiBUaGVzZSBmdW5jdGlvbnMgbmVl ZCB0byBiZSBpbmxpbmVkIG90aGVyd2lzZSBwZXJmb3JtYW5jZSB0YWtlcyBhIGhpdC4NCj4NCj5J IHVuZGVyc3RhbmQgdGhhdCBwZXJmb21hbmNlIG1pZ2h0IGJlIGFmZmVjdGVkLCBidXQgaG93IGJp ZyBpcyBoaXQ/DQo+SSBleHBlY3QgYWN0dWFsIFBNVSByZWFkIHdpbGwgbm90IGJlIGZyZWUgYW55 d2F5LCByaWdodD8NCj5JZiB0aGUgZGlmZiBpcyBzbWFsbCwgbWlnaHQgYmUgaXQgaXMgd29ydGgg dG8gZ28gZm9yIHN1Y2ggY2hhbmdlLA0KPnJlbW92aW5nIHVubmVlZGVkIHN0cnVjdHVyZXMgZnJv bSBwdWJsaWMgaGVhZGVycyB3b3VsZCBoZWxwIGEgbG90IGluDQo+ZnV0dXJlIGluIHRlcm1zIG9m IEFCSS9BUEkgc3RhYmlsaXR5Lg0KPg0KPg0KPg0KPj4+Pg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4g KwkJaW5kZXggPSBwYy0+aW5kZXg7DQo+Pj4+Pj4+Pj4+ICsJCW9mZnNldCA9IHBjLT5vZmZzZXQ7 DQo+Pj4+Pj4+Pj4+ICsJCXdpZHRoID0gcGMtPnBtY193aWR0aDsNCj4+Pj4+Pj4+Pj4gKw0KPj4+ Pj4+Pj4+PiArCQkvKiBpbmRleCBzZXQgdG8gMCBtZWFucyB0aGF0IHBhcnRpY3VsYXIgY291bnRl ciBjYW5ub3QgYmUgdXNlZCAqLw0KPj4+Pj4+Pj4+PiArCQlpZiAobGlrZWx5KHBjLT5jYXBfdXNl cl9yZHBtYyAmJiBpbmRleCkpIHsNCj4+Pj4+Pj4+Pj4gKwkJCXBtYyA9IHJ0ZV9wbXVfcG1jX3Jl YWQoaW5kZXggLSAxKTsNCj4+Pj4+Pj4+Pj4gKwkJCXBtYyA8PD0gNjQgLSB3aWR0aDsNCj4+Pj4+ Pj4+Pj4gKwkJCXBtYyA+Pj0gNjQgLSB3aWR0aDsNCj4+Pj4+Pj4+Pj4gKwkJCW9mZnNldCArPSBw bWM7DQo+Pj4+Pj4+Pj4+ICsJCX0NCj4+Pj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4+PiArCQlydGVfY29t cGlsZXJfYmFycmllcigpOw0KPj4+Pj4+Pj4+PiArDQo+Pj4+Pj4+Pj4+ICsJCWlmIChsaWtlbHko cGMtPmxvY2sgPT0gc2VxKSkNCj4+Pj4+Pj4+Pj4gKwkJCXJldHVybiBvZmZzZXQ7DQo+Pj4+Pj4+ Pj4+ICsJfQ0KPj4+Pj4+Pj4+PiArDQo+Pj4+Pj4+Pj4+ICsJcmV0dXJuIDA7DQo+Pj4+Pj4+Pj4+ ICt9DQo+Pj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+Pj4gKy8qKg0KPj4+Pj4+Pj4+PiArICogQHdhcm5p bmcNCj4+Pj4+Pj4+Pj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3 aXRob3V0IHByaW9yIG5vdGljZQ0KPj4+Pj4+Pj4+PiArICoNCj4+Pj4+Pj4+Pj4gKyAqIEVuYWJs ZSBncm91cCBvZiBldmVudHMgb24gdGhlIGNhbGxpbmcgbGNvcmUuDQo+Pj4+Pj4+Pj4+ICsgKg0K Pj4+Pj4+Pj4+PiArICogQHdhcm5pbmcgVGhpcyBzaG91bGQgYmUgbm90IGNhbGxlZCBkaXJlY3Rs eS4NCj4+Pj4+Pj4+Pj4gKyAqDQo+Pj4+Pj4+Pj4+ICsgKiBAcmV0dXJuDQo+Pj4+Pj4+Pj4+ICsg KiAgIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuDQo+Pj4+ Pj4+Pj4+ICsgKi8NCj4+Pj4+Pj4+Pj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPj4+Pj4+Pj4+PiAr aW50DQo+Pj4+Pj4+Pj4+ICtfX3J0ZV9wbXVfZW5hYmxlX2dyb3VwKHZvaWQpOw0KPj4+Pj4+Pj4+ PiArDQo+Pj4+Pj4+Pj4+ICsvKioNCj4+Pj4+Pj4+Pj4gKyAqIEB3YXJuaW5nDQo+Pj4+Pj4+Pj4+ ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBu b3RpY2UNCj4+Pj4+Pj4+Pj4gKyAqDQo+Pj4+Pj4+Pj4+ICsgKiBJbml0aWFsaXplIFBNVSBsaWJy YXJ5Lg0KPj4+Pj4+Pj4+PiArICoNCj4+Pj4+Pj4+Pj4gKyAqIEB3YXJuaW5nIFRoaXMgc2hvdWxk IGJlIG5vdCBjYWxsZWQgZGlyZWN0bHkuDQo+Pj4+Pj4+Pj4+ICsgKg0KPj4+Pj4+Pj4+PiArICog QHJldHVybg0KPj4+Pj4+Pj4+PiArICogICAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgbmVnYXRpdmUg dmFsdWUgb3RoZXJ3aXNlLg0KPj4+Pj4+Pj4+PiArICovDQo+Pj4+Pj4+Pj4+ICtfX3J0ZV9leHBl cmltZW50YWwNCj4+Pj4+Pj4+Pj4gK2ludA0KPj4+Pj4+Pj4+PiArcnRlX3BtdV9pbml0KHZvaWQp Ow0KPj4+Pj4+Pj4+PiArDQo+Pj4+Pj4+Pj4+ICsvKioNCj4+Pj4+Pj4+Pj4gKyAqIEB3YXJuaW5n DQo+Pj4+Pj4+Pj4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0 aG91dCBwcmlvciBub3RpY2UNCj4+Pj4+Pj4+Pj4gKyAqDQo+Pj4+Pj4+Pj4+ICsgKiBGaW5hbGl6 ZSBQTVUgbGlicmFyeS4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIFBNVQ0KPj4+Pj4+Pj4+ PiArY291bnRlcnMgYXJlIG5vIGxvbmdlciBiZWluZw0KPj4+Pj4gcmVhZC4NCj4+Pj4+Pj4+Pj4g KyAqLw0KPj4+Pj4+Pj4+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+Pj4+Pj4+Pj4+ICt2b2lkDQo+ Pj4+Pj4+Pj4+ICtydGVfcG11X2Zpbmkodm9pZCk7DQo+Pj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+Pj4g Ky8qKg0KPj4+Pj4+Pj4+PiArICogQHdhcm5pbmcNCj4+Pj4+Pj4+Pj4gKyAqIEBiIEVYUEVSSU1F TlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPj4+Pj4+Pj4+ PiArICoNCj4+Pj4+Pj4+Pj4gKyAqIEFkZCBldmVudCB0byB0aGUgZ3JvdXAgb2YgZW5hYmxlZCBl dmVudHMuDQo+Pj4+Pj4+Pj4+ICsgKg0KPj4+Pj4+Pj4+PiArICogQHBhcmFtIG5hbWUNCj4+Pj4+ Pj4+Pj4gKyAqICAgTmFtZSBvZiBhbiBldmVudCBsaXN0ZWQgdW5kZXIgL3N5cy9idXMvZXZlbnRf c291cmNlL2RldmljZXMvcG11L2V2ZW50cy4NCj4+Pj4+Pj4+Pj4gKyAqIEByZXR1cm4NCj4+Pj4+ Pj4+Pj4gKyAqICAgRXZlbnQgaW5kZXggaW4gY2FzZSBvZiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1 ZSBvdGhlcndpc2UuDQo+Pj4+Pj4+Pj4+ICsgKi8NCj4+Pj4+Pj4+Pj4gK19fcnRlX2V4cGVyaW1l bnRhbA0KPj4+Pj4+Pj4+PiAraW50DQo+Pj4+Pj4+Pj4+ICtydGVfcG11X2FkZF9ldmVudChjb25z dCBjaGFyICpuYW1lKTsNCj4+Pj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4+PiArLyoqDQo+Pj4+Pj4+Pj4+ ICsgKiBAd2FybmluZw0KPj4+Pj4+Pj4+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBt YXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+Pj4+Pj4+Pj4+ICsgKg0KPj4+Pj4+Pj4+ PiArICogUmVhZCBoYXJkd2FyZSBjb3VudGVyIGNvbmZpZ3VyZWQgdG8gY291bnQgb2NjdXJyZW5j ZXMgb2YgYW4gZXZlbnQuDQo+Pj4+Pj4+Pj4+ICsgKg0KPj4+Pj4+Pj4+PiArICogQHBhcmFtIGlu ZGV4DQo+Pj4+Pj4+Pj4+ICsgKiAgIEluZGV4IG9mIGFuIGV2ZW50IHRvIGJlIHJlYWQuDQo+Pj4+ Pj4+Pj4+ICsgKiBAcmV0dXJuDQo+Pj4+Pj4+Pj4+ICsgKiAgIEV2ZW50IHZhbHVlIHJlYWQgZnJv bSByZWdpc3Rlci4gSW4gY2FzZSBvZiBlcnJvcnMgb3IgbGFjayBvZiBzdXBwb3J0DQo+Pj4+Pj4+ Pj4+ICsgKiAgIDAgaXMgcmV0dXJuZWQuIEluIG90aGVyIHdvcmRzLCBzdHJlYW0gb2YgemVyb3Mg aW4gYSB0cmFjZSBmaWxlDQo+Pj4+Pj4+Pj4+ICsgKiAgIGluZGljYXRlcyBwcm9ibGVtIHdpdGgg cmVhZGluZyBwYXJ0aWN1bGFyIFBNVSBldmVudCByZWdpc3Rlci4NCj4+Pj4+Pj4+Pj4gKyAqLw0K Pj4+Pj4NCj4+Pj4+IEFub3RoZXIgcXVlc3Rpb24gLSBkbyB3ZSByZWFsbHkgbmVlZCAgdG8gaGF2 ZQ0KPj4+Pj4gX19ydGVfcG11X3JlYWRfdXNlcnBhZ2UoKSBhbmQgcnRlX3BtdV9yZWFkKCkgYXMg c3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gcHVibGljIGhlYWRlcj8NCj4+Pj4+IEFzIEkgdW5k ZXJzdGFuZCwgYmVjYXVzZSBvZiB0aGF0IHdlIGFsc28gaGF2ZSB0byBtYWtlICdzdHJ1Y3QgcnRl X3BtdV8qJw0KPj4+Pj4gZGVmaW5pdGlvbnMgYWxzbyBwdWJsaWMuDQo+Pj4+Pg0KPj4+Pj4+Pj4+ PiArX19ydGVfZXhwZXJpbWVudGFsDQo+Pj4+Pj4+Pj4+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lu bGluZSB1aW50NjRfdCBydGVfcG11X3JlYWQodW5zaWduZWQNCj4+Pj4+Pj4+Pj4gK2ludA0KPj4+ Pj4+Pj4+PiAraW5kZXgpIHsNCj4+Pj4+Pj4+Pj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91 cCAqZ3JvdXAgPSAmUlRFX1BFUl9MQ09SRShfZXZlbnRfZ3JvdXApOw0KPj4+Pj4+Pj4+PiArCWlu dCByZXQ7DQo+Pj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+Pj4gKwlpZiAodW5saWtlbHkoIXJ0ZV9wbXUu aW5pdGlhbGl6ZWQpKQ0KPj4+Pj4+Pj4+PiArCQlyZXR1cm4gMDsNCj4+Pj4+Pj4+Pj4gKw0KPj4+ Pj4+Pj4+PiArCWlmICh1bmxpa2VseSghZ3JvdXAtPmVuYWJsZWQpKSB7DQo+Pj4+Pj4+Pj4+ICsJ CXJldCA9IF9fcnRlX3BtdV9lbmFibGVfZ3JvdXAoKTsNCj4+Pj4+Pj4+Pj4gKwkJaWYgKHJldCkN Cj4+Pj4+Pj4+Pj4gKwkJCXJldHVybiAwOw0KPj4+Pj4+Pj4+PiArCX0NCj4+Pj4+Pj4+Pj4gKw0K Pj4+Pj4+Pj4+PiArCWlmICh1bmxpa2VseShpbmRleCA+PSBydGVfcG11Lm51bV9ncm91cF9ldmVu dHMpKQ0KPj4+Pj4+Pj4+PiArCQlyZXR1cm4gMDsNCj4+Pj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4+PiAr CXJldHVybiBfX3J0ZV9wbXVfcmVhZF91c2VycGFnZShncm91cC0+bW1hcF9wYWdlc1tpbmRleF0p Ow0KPj4+Pj4+Pj4+PiArfQ0KPj4+Pj4+Pj4+PiArDQo+Pj4+Pj4+Pj4+ICsjaWZkZWYgX19jcGx1 c3BsdXMNCj4+Pj4+Pj4+Pj4gK30NCj4+Pj4+Pj4+Pj4gKyNlbmRpZg0KPj4+Pj4+Pj4+PiArDQo+ Pg0KDQo=