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 4F965A00C2; Wed, 4 Jan 2023 16:47:32 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 374B84067B; Wed, 4 Jan 2023 16:47:32 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 9BF7640041 for ; Wed, 4 Jan 2023 16:47:30 +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 3045OBE5005542; Wed, 4 Jan 2023 07:47:29 -0800 Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2103.outbound.protection.outlook.com [104.47.55.103]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3mtnftm55f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Jan 2023 07:47:29 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l9/FTy3OoAOG5yifJhTYJ1uOC+44C3ygR30NfC/jfslzD40sGviLBMLhawJgS2EKVv4E1J0d7Ee4lP9H5EbUXZ4qt+X7hKKG6cG/UZbURXSLGePEIsVmdhnvEqmgGdiDLgbmx7nSOizajGNZs5vtQgf6b514//6zmPlHzWf/LxLhhCQknFbJdl34vZeAj/G4x7r76v0AM9LCycOXrxC1YEYBtsIIbo6eFzc1DHhVSl879g2kgtoPmuH2Pk8PRLjiKmBLYu4IixtXRdqTVv/sJwCZWjc4ML0fk86V92fuJAYxy4Xw/f2a44JcT2DMcZCctFPkZ9fnCdREi7dWkGuAxA== 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=AQ4ZkNYg9iA7w0n7s0/M+VsB547wvIVVyKAYVk05I1s=; b=DdoQ6srosOofogItt/gPoTlNZpKZA/ioZA/9Cxvz0rM1a8cI1hL9BQ4AzFeGf1WwPeM7a7bqWLI5IlvUriTKY1rGTeZDBxAx71XAjEf/Hyq8iK5dT4kGevMn0IIwe5TVm8ibaWXFb5MWAY4BtxtyvMoufXsCIlHO84F5tFnZVj63HGsq7k5d1yGemSc/if0NoFbi4p9mFbK+pmI2ShnGmsTuN9Yx3fhdqrqHWhV/AZyC+m9E0p6B8/pNULZWCHLwq4mK/SJ7NefdsVLbS6WRkM0vDlAy9ZSWnDQryTZIVOSoOdyMCReTV1g+7cthrM8lzXNRvUf7Cj4CcqbEw3EZ5w== 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=AQ4ZkNYg9iA7w0n7s0/M+VsB547wvIVVyKAYVk05I1s=; b=QYKgKJ+UHCnzvpFMMJvSzb6bddcxxpqKbxmUiBLfabmOXfPrGn6uSfrrwqCzVpm35/qe2uM2rBKjfTFr3u0H+gd3gGBPaoZXfap0ZObrbBJK+AmYa0Lp+83nojEYTJwfIFCKmY8RKpJVTTDDCwyupEJDRFTu7EAfBIY4Sc9N88I= Received: from DM4PR18MB4368.namprd18.prod.outlook.com (2603:10b6:5:39d::6) by CO6PR18MB4084.namprd18.prod.outlook.com (2603:10b6:5:349::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.19; Wed, 4 Jan 2023 15:47:26 +0000 Received: from DM4PR18MB4368.namprd18.prod.outlook.com ([fe80::3117:f51c:37c2:fa05]) by DM4PR18MB4368.namprd18.prod.outlook.com ([fe80::3117:f51c:37c2:fa05%9]) with mapi id 15.20.5944.019; Wed, 4 Jan 2023 15:47:26 +0000 From: Tomasz Duszynski To: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , "dev@dpdk.org" CC: "thomas@monjalon.net" , Jerin Jacob Kollanukkaran , "mb@smartsharesystems.com" , "zhoumin@loongson.cn" Subject: RE: [PATCH v4 1/4] eal: add generic support for reading PMU events Thread-Topic: [PATCH v4 1/4] eal: add generic support for reading PMU events Thread-Index: AQHZDt/QEhRtFHSga0yHSOMIy5Zzs65upaMAgB/ZaWA= Date: Wed, 4 Jan 2023 15:47:25 +0000 Message-ID: References: <20221129092821.1304853-1-tduszynski@marvell.com> <20221213104350.3218167-1-tduszynski@marvell.com> <20221213104350.3218167-2-tduszynski@marvell.com> In-Reply-To: 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_|CO6PR18MB4084:EE_ x-ms-office365-filtering-correlation-id: 4877d054-9056-4f30-6a77-08daee6afa58 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: dUAu5HCuBTAzR2dXnwG+cGmKij6j3cQYoXxFna2BqAEtgr4PjykJBXtL256ZxdmiqfOoRSkUAMbewa56LZouAYWv1uW5sKDLVtw0uqkqPq7PRa7WfVVaPt0czvdf//UNhAqUdyCXsfr2BhkoUWODpW7Wwo2IirunKYqGqNcO6hL2J/8ijMpUeQywvQKioCGx4V//2Bf6Nvn9zANlqNanneNGkSRlN77xQ15s3+dXSR/qvLazaxRL380GpgnjTY36vdw/gqfUxMnKBoTT482E4XAAzYwM/p4GJMzLo+cUmGxE9yy8PQ2Iny+QvlB6TmNZiLtFVSu05HcDWUz0Nv8ZI1FzzWq7PDeWOa7C9xeAUkRNX4LcpI7HUd6wPVrzwy2oIIZ2oBOaPTtrjqssED7x+F8DxPZcx9G19UJWSlrK857lq0JR+nc1OcjDBeA9w/ZnAEJJ3iCq5UnT/s8xkV0YBBXkkI/0yyqJaNqrwy0OeYIZAd6naS19XkgHU2H56b9Fa94WP/gzIALT2uNMLZdMSCrKm47EvzuvAX70Hcxru+JjzNm89vXWy9gTnHyOUFWVcWo1uwNYrEzefN2xBW8duX/8MVKtAwy8a0HUBDSqeUTU6I4Wl/dfitPb646Y77qdRQhBL8IcdWOdc2TtCY/SQWGNkXwzQ3+Ww8sfAiKVQRxpwyRtNd3gDuH4M1nSMQXuFfO0qlPdY6NZFBAoJ6+Ys0aoW5neMHRkh56bwyEN3uo= 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:(13230022)(4636009)(136003)(346002)(396003)(376002)(39860400002)(366004)(451199015)(122000001)(38100700002)(64756008)(8676002)(33656002)(38070700005)(86362001)(66556008)(41300700001)(83380400001)(4326008)(66446008)(52536014)(66946007)(54906003)(76116006)(110136005)(55016003)(316002)(5660300002)(2906002)(4001150100001)(8936002)(30864003)(186003)(9686003)(26005)(478600001)(66574015)(6506007)(71200400001)(53546011)(7696005)(66476007)(66899015)(41533002)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VHFrSFI2TG9NUHJmOWltWWlRZVJVenFqdnduTXA3QXVMSmFQR3VaUGkrNEZZ?= =?utf-8?B?ODNvQUkzbUE4bFFCdWp1eWs5UkhBeThKYmZibVFOdHpQSEtCZndhZGM4eUhx?= =?utf-8?B?V2N3RzRLVnJQaVMzdEhqbnIwSlFaQ1dHaVNJT0l3SWF5eHByVkEwMkN5MGpF?= =?utf-8?B?L2E5QXZ4bWRGU20xakFUVUtidGw3WmJCTjNGNHovcE82d0p0ZmJGS3FZWThP?= =?utf-8?B?SWJ6akdaRWJ6UEVvNjRTRWhJK3BPUkZjUVluaXhWUVhEbis1Qnc2Mnp5dld4?= =?utf-8?B?MVBIencralhqSmRCYk1pYkJsZjRMZzl3SXFDUWpIQktlVzhJeHdxMEFsL3dJ?= =?utf-8?B?dlVuN2dVQnhtNzZIZkV6STM1RExPb0UrdWU4OTJpM0dsaUh0ZVpoTllsdUFo?= =?utf-8?B?NXV5RVp0dDAzaytqYisrN08wUERJUURlOGV3Wmh2WUJISzhyOWFKdkQ2SmZ1?= =?utf-8?B?NmxHQWQrMW9BSGwzSjZjRDhjOFlkRUhORERtV2p0S2x4Nk1hbmU4eFRsK0Rj?= =?utf-8?B?alY3R09hOHVSc29KN3dsNmQwaTdKVVJ6NVdpODZ1NTBvTHI4VWVLZjNyNllh?= =?utf-8?B?RE5sRkJWc21XWTRrZi82QkZ3ZTVaSlMzbHBydzBZUE5mOTlYeGxtb3hCdFNJ?= =?utf-8?B?OWtidUhHVFRtNTJrQy81SEQwTkJNcjNZL09RK1NicU1tMDlNZTBsbks3czVP?= =?utf-8?B?bWFvbXJhRE9LN3J1cE1mLy9jTUoyc05mNWQ0eWMyWDFOSjUxVzR6M0MvTXNE?= =?utf-8?B?RTk4amgvVjN6TndsQ2dhcC9Bem9rZnJMM3QzYThOWVh6K2pyRFEvR2ZGTnI3?= =?utf-8?B?dVJZb21qSmJaTzJ2SWRpc0Z2dUk5ZjNWQXFON3hwaVNLMW10bFE1WjFHTllB?= =?utf-8?B?ZEpPV2tpZ1NNNTZKY1p6dHd5NkkxOUdjUm5PUDZtQi9reE5HQ2k3dVNzQ0NF?= =?utf-8?B?NE1FSjFmQWthTmlHZzdUbkc5eGVyMkc1b011MVVrMjc2S3hNOXdHNVZxa2VE?= =?utf-8?B?ZW5IaGRjdlh1QnJMNyt1c3FtUVlJdmdpZDJUZnNEWjRxRWt1Z2FKUFcrREYz?= =?utf-8?B?azJMTGNKcGE4WGpZR2JtbGFWbHQ2bnpKOUJjQmI3MHFBcG1EY2IvczNJdldU?= =?utf-8?B?S2tiK3dNeXVOZ1l1RWlzeFRNWG9vNWhUTFZiV3R3ZTVSalpLY3crcHlNZHg3?= =?utf-8?B?WkJkR2RIb0ppZU5pTGJ4a1Ivbmx6cDJMZnlWbVdHVm9Jbk9yMlhNN2lGQWs0?= =?utf-8?B?eEhqU3JWQmZyT3dZc3NYZVhkQWhscWhvbWNKL3pLNzVvdHppeFRudnJTbHU0?= =?utf-8?B?cS9BQjQzaEtSWjJUbWhwM0RKZnk2eVFQSGdBYUpIZVZTSWtZdW5aQm4rc1p1?= =?utf-8?B?RzdaenZtRktpYWRxYnNWM1Uzdnhrc0JDMVB1akpVUlRSckJjbVJJWTFNSjlS?= =?utf-8?B?KzI5ek93N0JIMFEzWFlhdUhoVVJCd1Q2TEVqWUFGRWI3bFBqOThBMzloUDR3?= =?utf-8?B?WE9ZamdYZDVkOVQvNnNNeVpzY2c0M1BEa0tOSVE2TStyM1ltQU9acUV0RFdr?= =?utf-8?B?OERJL2FyRzB0blZ0Q1ZVdHhmMDN3OU96UXA3RGVlMGp1RWp5QytRTHNTclVW?= =?utf-8?B?NnFUbzFCMTIrQ3laRU5XL2Y5eER2eVAyRlZPcnI0TlZHQlBLUDlvOUhNVzdG?= =?utf-8?B?dmFXRjNFQWdBVUNTRExaQzlHT1VuTDU0KzhqQk54NUplYmkwTWh6NzVJVk51?= =?utf-8?B?SHNJc3FVT0NDcWxvVTI3OHFQMFpQUzNGeE9neEpOQXl0b01YN1NwZDlMWTF0?= =?utf-8?B?ZlVrNEZMRHNvQ1Z4MW9VcjZzWnFweVhsN0tJRzdTMWQxNXV0TzcrMkxMeW5h?= =?utf-8?B?cVBocWo0WEFlWGh0MHJDSnlTQ2huRGt5ODd4ckpPVVZ3bUZ6ZFZDMWlOSzcr?= =?utf-8?B?cjVLaGxvUzlUa1VlNW01akt0R0trKzNCR0tJTzhWN3JrNmlHL2oveUNGbzlC?= =?utf-8?B?R2xXWlF5aitVK0NvaXdiYy8vdS9qTk9CR1pOVzRCQW5DVjJEVGhyZERPamhP?= =?utf-8?B?RnlMZG1LdkhFS2p1ZjEyWGhQZ3Nuelk4ci9DK09pZFp2VjZJbCtpd3ZUVUVS?= =?utf-8?Q?R3enpxOdjgr/5cpE0vk/ZZQns?= 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: 4877d054-9056-4f30-6a77-08daee6afa58 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Jan 2023 15:47:26.0232 (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: 6fLnk3C0R3WeVm57C+qBihx9dSMi11S9a6uFOzK2Eloed1GI7cODxVWOsjNhMHKv+WwK8745BAh9OMpxmJPGcw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR18MB4084 X-Proofpoint-GUID: cO80eM-V2SrA3cj-EpizqSiscRf7Z5xz X-Proofpoint-ORIG-GUID: cO80eM-V2SrA3cj-EpizqSiscRf7Z5xz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.923,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2023-01-04_07,2023-01-04_02,2022-06-22_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 PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNYXR0aWFzIFLDtm5uYmxvbSA8 bWF0dGlhcy5yb25uYmxvbUBlcmljc3Nvbi5jb20+DQo+IFNlbnQ6IFRodXJzZGF5LCBEZWNlbWJl ciAxNSwgMjAyMiA5OjQ2IEFNDQo+IFRvOiBUb21hc3ogRHVzenluc2tpIDx0ZHVzenluc2tpQG1h cnZlbGwuY29tPjsgZGV2QGRwZGsub3JnDQo+IENjOiB0aG9tYXNAbW9uamFsb24ubmV0OyBKZXJp biBKYWNvYiBLb2xsYW51a2thcmFuIDxqZXJpbmpAbWFydmVsbC5jb20+OyBtYkBzbWFydHNoYXJl c3lzdGVtcy5jb207DQo+IHpob3VtaW5AbG9vbmdzb24uY24NCj4gU3ViamVjdDogW0VYVF0gUmU6 IFtQQVRDSCB2NCAxLzRdIGVhbDogYWRkIGdlbmVyaWMgc3VwcG9ydCBmb3IgcmVhZGluZyBQTVUg ZXZlbnRzDQo+IA0KPiBFeHRlcm5hbCBFbWFpbA0KPiANCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiBPbiAy MDIyLTEyLTEzIDExOjQzLCBUb21hc3ogRHVzenluc2tpIHdyb3RlOg0KPiA+IEFkZCBzdXBwb3J0 IGZvciBwcm9ncmFtbWluZyBQTVUgY291bnRlcnMgYW5kIHJlYWRpbmcgdGhlaXIgdmFsdWVzIGlu DQo+ID4gcnVudGltZSBieXBhc3Npbmcga2VybmVsIGNvbXBsZXRlbHkuDQo+ID4NCj4gPiBUaGlz IGlzIGVzcGVjaWFsbHkgdXNlZnVsIGluIGNhc2VzIHdoZXJlIENQVSBjb3JlcyBhcmUgaXNvbGF0 ZWQNCj4gPiAobm9oel9mdWxsKSBpLmUgcnVuIGRlZGljYXRlZCB0YXNrcy4gSW4gc3VjaCBjYXNl cyBvbmUgY2Fubm90IHVzZQ0KPiA+IHN0YW5kYXJkIHBlcmYgdXRpbGl0eSB3aXRob3V0IHNhY3Jp ZmljaW5nIGxhdGVuY3kgYW5kIHBlcmZvcm1hbmNlLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTog VG9tYXN6IER1c3p5bnNraSA8dGR1c3p5bnNraUBtYXJ2ZWxsLmNvbT4NCj4gPiAtLS0NCj4gPiAg IGFwcC90ZXN0L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgIDEgKw0KPiA+ICAgYXBw L3Rlc3QvdGVzdF9wbXUuYyAgICAgICAgICAgICAgICAgICB8ICA0MSArKysNCj4gPiAgIGRvYy9n dWlkZXMvcHJvZ19ndWlkZS9wcm9maWxlX2FwcC5yc3QgfCAgIDggKw0KPiA+ICAgbGliL2VhbC9j b21tb24vbWVzb24uYnVpbGQgICAgICAgICAgICB8ICAgMyArDQo+ID4gICBsaWIvZWFsL2NvbW1v bi9wbXVfcHJpdmF0ZS5oICAgICAgICAgIHwgIDQxICsrKw0KPiA+ICAgbGliL2VhbC9jb21tb24v cnRlX3BtdS5jICAgICAgICAgICAgICB8IDQ1NiArKysrKysrKysrKysrKysrKysrKysrKysrKw0K PiA+ICAgbGliL2VhbC9pbmNsdWRlL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAgMSArDQo+ID4g ICBsaWIvZWFsL2luY2x1ZGUvcnRlX3BtdS5oICAgICAgICAgICAgIHwgMjA0ICsrKysrKysrKysr Kw0KPiA+ICAgbGliL2VhbC9saW51eC9lYWwuYyAgICAgICAgICAgICAgICAgICB8ICAgNCArDQo+ ID4gICBsaWIvZWFsL3ZlcnNpb24ubWFwICAgICAgICAgICAgICAgICAgIHwgICA2ICsNCj4gPiAg IDEwIGZpbGVzIGNoYW5nZWQsIDc2NSBpbnNlcnRpb25zKCspDQo+ID4gICBjcmVhdGUgbW9kZSAx MDA2NDQgYXBwL3Rlc3QvdGVzdF9wbXUuYw0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9l YWwvY29tbW9uL3BtdV9wcml2YXRlLmgNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZWFs L2NvbW1vbi9ydGVfcG11LmMNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZWFsL2luY2x1 ZGUvcnRlX3BtdS5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvYXBwL3Rlc3QvbWVzb24uYnVpbGQg Yi9hcHAvdGVzdC9tZXNvbi5idWlsZCBpbmRleA0KPiA+IGYzNGQxOWUzYzMuLjkzYjMzMDAzMDkg MTAwNjQ0DQo+ID4gLS0tIGEvYXBwL3Rlc3QvbWVzb24uYnVpbGQNCj4gPiArKysgYi9hcHAvdGVz dC9tZXNvbi5idWlsZA0KPiA+IEBAIC0xNDMsNiArMTQzLDcgQEAgdGVzdF9zb3VyY2VzID0gZmls ZXMoDQo+ID4gICAgICAgICAgICd0ZXN0X3RpbWVyX3JhY2Vjb25kLmMnLA0KPiA+ICAgICAgICAg ICAndGVzdF90aW1lcl9zZWNvbmRhcnkuYycsDQo+ID4gICAgICAgICAgICd0ZXN0X3RpY2tldGxv Y2suYycsDQo+ID4gKyAgICAgICAgJ3Rlc3RfcG11LmMnLA0KPiA+ICAgICAgICAgICAndGVzdF90 cmFjZS5jJywNCj4gPiAgICAgICAgICAgJ3Rlc3RfdHJhY2VfcmVnaXN0ZXIuYycsDQo+ID4gICAg ICAgICAgICd0ZXN0X3RyYWNlX3BlcmYuYycsDQo+ID4gZGlmZiAtLWdpdCBhL2FwcC90ZXN0L3Rl c3RfcG11LmMgYi9hcHAvdGVzdC90ZXN0X3BtdS5jIG5ldyBmaWxlIG1vZGUNCj4gPiAxMDA2NDQg aW5kZXggMDAwMDAwMDAwMC4uZmQzMzFhZjllZQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysg Yi9hcHAvdGVzdC90ZXN0X3BtdS5jDQo+ID4gQEAgLTAsMCArMSw0MSBAQA0KPiA+ICsvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ID4gKyAqIENvcHlyaWdodChDKSAy MDIyIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lu Y2x1ZGUgPHJ0ZV9wbXUuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJ0ZXN0LmgiDQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50DQo+ID4gK3Rlc3RfcG11X3JlYWQodm9pZCkNCj4gPiArew0KPiA+ICsJ dWludDY0X3QgdmFsID0gMDsNCj4gPiArCWludCB0cmllcyA9IDEwOw0KPiA+ICsJaW50IGV2ZW50 ID0gLTE7DQo+ID4gKw0KPiA+ICsJd2hpbGUgKHRyaWVzLS0pDQo+ID4gKwkJdmFsICs9IHJ0ZV9w bXVfcmVhZChldmVudCk7DQo+ID4gKw0KPiA+ICsJaWYgKHZhbCA9PSAwKQ0KPiA+ICsJCXJldHVy biBURVNUX0ZBSUxFRDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gVEVTVF9TVUNDRVNTOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHVuaXRfdGVzdF9zdWl0ZSBwbXVfdGVzdHMgPSB7 DQo+ID4gKwkuc3VpdGVfbmFtZSA9ICJwbXUgYXV0b3Rlc3QiLA0KPiA+ICsJLnNldHVwID0gTlVM TCwNCj4gPiArCS50ZWFyZG93biA9IE5VTEwsDQo+ID4gKwkudW5pdF90ZXN0X2Nhc2VzID0gew0K PiA+ICsJCVRFU1RfQ0FTRSh0ZXN0X3BtdV9yZWFkKSwNCj4gPiArCQlURVNUX0NBU0VTX0VORCgp DQo+ID4gKwl9DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK3Rlc3RfcG11 KHZvaWQpDQo+ID4gK3sNCj4gPiArCXJldHVybiB1bml0X3Rlc3Rfc3VpdGVfcnVubmVyKCZwbXVf dGVzdHMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtSRUdJU1RFUl9URVNUX0NPTU1BTkQocG11X2F1 dG90ZXN0LCB0ZXN0X3BtdSk7DQo+ID4gZGlmZiAtLWdpdCBhL2RvYy9ndWlkZXMvcHJvZ19ndWlk ZS9wcm9maWxlX2FwcC5yc3QNCj4gPiBiL2RvYy9ndWlkZXMvcHJvZ19ndWlkZS9wcm9maWxlX2Fw cC5yc3QNCj4gPiBpbmRleCAxNDI5MmQ0YzI1Li5hOGI1MDFmZTBjIDEwMDY0NA0KPiA+IC0tLSBh L2RvYy9ndWlkZXMvcHJvZ19ndWlkZS9wcm9maWxlX2FwcC5yc3QNCj4gPiArKysgYi9kb2MvZ3Vp ZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAucnN0DQo+ID4gQEAgLTcsNiArNywxNCBAQCBQcm9m aWxlIFlvdXIgQXBwbGljYXRpb24NCj4gPiAgIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3Jp YmUgbWV0aG9kcyBvZiBwcm9maWxpbmcgRFBESyBhcHBsaWNhdGlvbnMgb24NCj4gPiAgIGRpZmZl cmVudCBhcmNoaXRlY3R1cmVzLg0KPiA+DQo+ID4gK1BlcmZvcm1hbmNlIGNvdW50ZXIgYmFzZWQg cHJvZmlsaW5nDQo+ID4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4g Kw0KPiA+ICtNYWpvcml0eSBvZiBhcmNoaXRlY3R1cmVzIHN1cHBvcnQgc29tZSBzb3J0IGhhcmR3 YXJlIG1lYXN1cmVtZW50IHVuaXQNCj4gPiArd2hpY2ggcHJvdmlkZXMgYSBzZXQgb2YgcHJvZ3Jh bW1hYmxlIGNvdW50ZXJzIHRoYXQgbW9uaXRvciBzcGVjaWZpYw0KPiA+ICtldmVudHMuIFRoZXJl IGFyZSBkaWZmZXJlbnQgdG9vbHMgd2hpY2ggY2FuIGdhdGhlciB0aGF0IGluZm9ybWF0aW9uLA0K PiA+ICtwZXJmIGJlaW5nIGFuIGV4YW1wbGUgaGVyZS4gVGhvdWdoIGluIHNvbWUgc2NlbmFyaW9z LCBlZy4gd2hlbiBDUFUNCj4gPiArY29yZXMgYXJlIGlzb2xhdGVkIChub2h6X2Z1bGwpIGFuZCBy dW4gZGVkaWNhdGVkIHRhc2tzLCB1c2luZyBwZXJmIGlzIGxlc3MgdGhhbiBpZGVhbC4gSW4gc3Vj aA0KPiBjYXNlcyBvbmUgY2FuIHJlYWQgc3BlY2lmaWMgZXZlbnRzIGRpcmVjdGx5IGZyb20gYXBw bGljYXRpb24gdmlhIGBgcnRlX3BtdV9yZWFkKClgYC4NCj4gPg0KPiA+ICAgUHJvZmlsaW5nIG9u IHg4Ng0KPiA+ICAgLS0tLS0tLS0tLS0tLS0tLQ0KPiA+IGRpZmYgLS1naXQgYS9saWIvZWFsL2Nv bW1vbi9tZXNvbi5idWlsZCBiL2xpYi9lYWwvY29tbW9uL21lc29uLmJ1aWxkDQo+ID4gaW5kZXgg OTE3NzU4Y2M2NS4uZDZkMDViNTZmMyAxMDA2NDQNCj4gPiAtLS0gYS9saWIvZWFsL2NvbW1vbi9t ZXNvbi5idWlsZA0KPiA+ICsrKyBiL2xpYi9lYWwvY29tbW9uL21lc29uLmJ1aWxkDQo+ID4gQEAg LTM4LDYgKzM4LDkgQEAgc291cmNlcyArPSBmaWxlcygNCj4gPiAgICAgICAgICAgJ3J0ZV9zZXJ2 aWNlLmMnLA0KPiA+ICAgICAgICAgICAncnRlX3ZlcnNpb24uYycsDQo+ID4gICApDQo+ID4gK2lm IGlzX2xpbnV4DQo+ID4gKyAgICBzb3VyY2VzICs9IGZpbGVzKCdydGVfcG11LmMnKQ0KPiA+ICtl bmRpZg0KPiA+ICAgaWYgaXNfbGludXggb3IgaXNfd2luZG93cw0KPiA+ICAgICAgIHNvdXJjZXMg Kz0gZmlsZXMoJ2VhbF9jb21tb25fZHlubWVtLmMnKQ0KPiA+ICAgZW5kaWYNCj4gPiBkaWZmIC0t Z2l0IGEvbGliL2VhbC9jb21tb24vcG11X3ByaXZhdGUuaA0KPiA+IGIvbGliL2VhbC9jb21tb24v cG11X3ByaXZhdGUuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPiA+IDAwMDAwMDAwMDAu LmNhZGU0MjQ1ZTYNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvbGliL2VhbC9jb21tb24v cG11X3ByaXZhdGUuaA0KPiA+IEBAIC0wLDAgKzEsNDEgQEANCj4gPiArLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+ICsgKiBDb3B5cmlnaHQoYykgMjAyMiBNYXJ2 ZWxsDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBfUE1VX1BSSVZBVEVfSF8NCj4gPiAr I2RlZmluZSBfUE1VX1BSSVZBVEVfSF8NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBBcmNoaXRl Y3R1cmUgc3BlY2lmaWMgUE1VIGluaXQgY2FsbGJhY2suDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1 cm4NCj4gPiArICogICAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3 aXNlLg0KPiA+ICsgKi8NCj4gPiAraW50DQo+ID4gK3BtdV9hcmNoX2luaXQodm9pZCk7DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIFBNVSBjbGVhbnVwIGNh bGxiYWNrLg0KPiA+ICsgKi8NCj4gPiArdm9pZA0KPiA+ICtwbXVfYXJjaF9maW5pKHZvaWQpOw0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEFwcGx5IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBzZXR0 aW5ncyB0byBjb25maWcgYmVmb3JlIHBhc3NpbmcgaXQgdG8gc3lzY2FsbC4NCj4gPiArICovDQo+ ID4gK3ZvaWQNCj4gPiArcG11X2FyY2hfZml4dXBfY29uZmlnKHVpbnQ2NF90IGNvbmZpZ1szXSk7 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogSW5pdGlhbGl6ZSBQTVUgdHJhY2luZyBpbnRlcm5h bHMuDQo+ID4gKyAqLw0KPiA+ICt2b2lkDQo+ID4gK2VhbF9wbXVfaW5pdCh2b2lkKTsNCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgKiBDbGVhbnVwIFBNVSBpbnRlcm5hbHMuDQo+ID4gKyAqLw0KPiA+ ICt2b2lkDQo+ID4gK2VhbF9wbXVfZmluaSh2b2lkKTsNCj4gPiArDQo+ID4gKyNlbmRpZiAvKiBf UE1VX1BSSVZBVEVfSF8gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2VhbC9jb21tb24vcnRlX3Bt dS5jIGIvbGliL2VhbC9jb21tb24vcnRlX3BtdS5jIG5ldw0KPiA+IGZpbGUgbW9kZSAxMDA2NDQg aW5kZXggMDAwMDAwMDAwMC4uMDQ5ZmUxOWZlMw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysg Yi9saWIvZWFsL2NvbW1vbi9ydGVfcG11LmMNCj4gPiBAQCAtMCwwICsxLDQ1NiBAQA0KPiA+ICsv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ID4gKyAqIENvcHlyaWdo dChDKSAyMDIyIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ID4gKyAqLw0KPiA+ICsNCj4g PiArI2luY2x1ZGUgPGN0eXBlLmg+DQo+ID4gKyNpbmNsdWRlIDxkaXJlbnQuaD4NCj4gPiArI2lu Y2x1ZGUgPGVycm5vLmg+DQo+ID4gKyNpbmNsdWRlIDxyZWdleC5oPg0KPiA+ICsjaW5jbHVkZSA8 c3RkbGliLmg+DQo+ID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gPiArI2luY2x1ZGUgPHN5cy9p b2N0bC5oPg0KPiA+ICsjaW5jbHVkZSA8c3lzL21tYW4uaD4NCj4gPiArI2luY2x1ZGUgPHN5cy9x dWV1ZS5oPg0KPiA+ICsjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4NCj4gPiArI2luY2x1ZGUgPHVu aXN0ZC5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHJ0ZV9lYWxfcGFnaW5nLmg+DQo+ID4gKyNp bmNsdWRlIDxydGVfcG11Lmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfdGFpbHEuaD4NCj4gPiArDQo+ ID4gKyNpbmNsdWRlICJwbXVfcHJpdmF0ZS5oIg0KPiA+ICsNCj4gPiArI2RlZmluZSBFVkVOVF9T T1VSQ0VfREVWSUNFU19QQVRIICIvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcyINCj4gPiAr DQo+ID4gKyNpZm5kZWYgR0VOTUFTS19VTEwNCj4gPiArI2RlZmluZSBHRU5NQVNLX1VMTChoLCBs KSAoKH4wVUxMIC0gKDFVTEwgPDwgKGwpKSArIDEpICYgKH4wVUxMID4+DQo+ID4gKygoNjQgLSAx IC0gKGgpKSkpKSAjZW5kaWYNCj4gPiArDQo+ID4gKyNpZm5kZWYgRklFTERfUFJFUA0KPiA+ICsj ZGVmaW5lIEZJRUxEX1BSRVAobSwgdikgKCgodWludDY0X3QpKHYpIDw8IChfX2J1aWx0aW5fZmZz bGwobSkgLSAxKSkNCj4gPiArJiAobSkpICNlbmRpZg0KPiA+ICsNCj4gPiArc3RydWN0IHJ0ZV9w bXUgKnJ0ZV9wbXU7DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBGb2xsb3dpbmcgX19ydGVfd2Vh ayBmdW5jdGlvbnMgcHJvdmlkZSBkZWZhdWx0IG5vLW9wLg0KPiA+ICtBcmNoaXRlY3R1cmVzIHNo b3VsZCBvdmVycmlkZSB0aGVtIGlmDQo+ID4gKyAqIG5lY2Vzc2FyeS4NCj4gPiArICovDQo+ID4g Kw0KPiA+ICtpbnQNCj4gPiArX19ydGVfd2VhayBwbXVfYXJjaF9pbml0KHZvaWQpDQo+ID4gK3sN Cj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkDQo+ID4gK19fcnRlX3dl YWsgcG11X2FyY2hfZmluaSh2b2lkKQ0KPiA+ICt7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQN Cj4gPiArX19ydGVfd2VhayBwbXVfYXJjaF9maXh1cF9jb25maWcodWludDY0X3QgY29uZmlnWzNd KSB7DQo+ID4gKwlSVEVfU0VUX1VTRUQoY29uZmlnKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludA0KPiA+ICtnZXRfdGVybV9mb3JtYXQoY29uc3QgY2hhciAqbmFtZSwgaW50ICpudW0s IHVpbnQ2NF90ICptYXNrKSB7DQo+ID4gKwljaGFyICpjb25maWcgPSBOVUxMOw0KPiA+ICsJY2hh ciBwYXRoW1BBVEhfTUFYXTsNCj4gPiArCWludCBoaWdoLCBsb3csIHJldDsNCj4gPiArCUZJTEUg KmZwOw0KPiA+ICsNCj4gPiArCS8qIHF1aWVzY2UgLVdtYXliZS11bmluaXRpYWxpemVkIHdhcm5p bmcgKi8NCj4gPiArCSpudW0gPSAwOw0KPiA+ICsJKm1hc2sgPSAwOw0KPiA+ICsNCj4gPiArCXNu cHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgRVZFTlRfU09VUkNFX0RFVklDRVNfUEFUSA0KPiA+ ICsiLyVzL2Zvcm1hdC8lcyIsIHJ0ZV9wbXUtPm5hbWUsIG5hbWUpDQo+IA0KPiBUaGlzIGNvZGUg bWlnaHQgY3Jhc2ggaW4gY2FzZSBhIGxvbmcgbmFtZSBpcyBzdXBwbGllZCwgd2hpY2ggaXMgbWF5 YmUgbm90IHdhbnQgeW91IHdhbnQuIEENCj4gdHJ1bmFjdGUgYW5kIGEgImZpbGUgbm90IGZvdW5k IiBpcyBwcm9iYWJseSBiZXR0ZXIuDQo+IEkgYmVsaWV2ZSB0aGVyZSBpcyBhIHNucHJpbnRmIGxv b2thbGlrZSB3aXRoIHRoZXNlIHByb3BlcnRpZXMgaW4gRFBESy4NCj4gDQoNCkluIHNjZW5hcmlv LCB3aGljaCBpcyBwcmV0dHkgdW5saWtlbHkgZXNwZWNpYWxseSBiZWNhdXNlIHN5c2ZzIGZpbGVz IGhhdmUgc2FuZSBuYW1lcywgd2hlcmUgDQoncGF0aCcgY2Fubm90IGFjY29tbW9kYXRlIHRoZSB3 aG9sZSBzdHJpbmcgdGhlcmUgd2lsbCBiZSBOVUwgaW1wbGljaXRseSBhcHBlbmRlZCBieSBzbnBy aW50Zi4NCkhlbmNlIGZvcGVuIHdpbGwgZmFpbC4gTm90IHN1cmUgaG93IHRoaXMgbWF5IGdvIHdy b25nLiANCg0KPiA+ICsJZnAgPSBmb3BlbihwYXRoLCAiciIpOw0KPiA+ICsJaWYgKCFmcCkNCj4g PiArCQlyZXR1cm4gLWVycm5vOw0KPiA+ICsNCj4gPiArCWVycm5vID0gMDsNCj4gPiArCXJldCA9 IGZzY2FuZihmcCwgIiVtW146XTolZC0lZCIsICZjb25maWcsICZsb3csICZoaWdoKTsNCj4gPiAr CWlmIChyZXQgPCAyKSB7DQo+ID4gKwkJcmV0ID0gLUVOT0RBVEE7DQo+ID4gKwkJZ290byBvdXQ7 DQo+ID4gKwl9DQo+ID4gKwlpZiAoZXJybm8pIHsNCj4gPiArCQlyZXQgPSAtZXJybm87DQo+ID4g KwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHJldCA9PSAyKQ0KPiA+ICsJ CWhpZ2ggPSBsb3c7DQo+ID4gKw0KPiA+ICsJKm1hc2sgPSBHRU5NQVNLX1VMTChoaWdoLCBsb3cp Ow0KPiA+ICsJLyogTGFzdCBkaWdpdCBzaG91bGQgYmUgWzAxMl0uIElmIGxhc3QgZGlnaXQgaXMg bWlzc2luZyAwIGlzIGltcGxpZWQuICovDQo+ID4gKwkqbnVtID0gY29uZmlnW3N0cmxlbihjb25m aWcpIC0gMV07DQo+ID4gKwkqbnVtID0gaXNkaWdpdCgqbnVtKSA/ICpudW0gLSAnMCcgOiAwOw0K PiA+ICsNCj4gPiArCXJldCA9IDA7DQo+ID4gK291dDoNCj4gPiArCWZyZWUoY29uZmlnKTsNCj4g PiArCWZjbG9zZShmcCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGludA0KPiA+ICtwYXJzZV9ldmVudChjaGFyICpidWYsIHVpbnQ2NF90IGNv bmZpZ1szXSkgew0KPiA+ICsJY2hhciAqdG9rZW4sICp0ZXJtOw0KPiA+ICsJaW50IG51bSwgcmV0 LCB2YWw7DQo+ID4gKwl1aW50NjRfdCBtYXNrOw0KPiA+ICsNCj4gPiArCWNvbmZpZ1swXSA9IGNv bmZpZ1sxXSA9IGNvbmZpZ1syXSA9IDA7DQo+ID4gKw0KPiA+ICsJdG9rZW4gPSBzdHJ0b2soYnVm LCAiLCIpOw0KPiA+ICsJd2hpbGUgKHRva2VuKSB7DQo+ID4gKwkJZXJybm8gPSAwOw0KPiA+ICsJ CS8qIDx0ZXJtPj08dmFsdWU+ICovDQo+ID4gKwkJcmV0ID0gc3NjYW5mKHRva2VuLCAiJW1bXj1d PSVpIiwgJnRlcm0sICZ2YWwpOw0KPiA+ICsJCWlmIChyZXQgPCAxKQ0KPiA+ICsJCQlyZXR1cm4g LUVOT0RBVEE7DQo+ID4gKwkJaWYgKGVycm5vKQ0KPiA+ICsJCQlyZXR1cm4gLWVycm5vOw0KPiA+ ICsJCWlmIChyZXQgPT0gMSkNCj4gPiArCQkJdmFsID0gMTsNCj4gPiArDQo+ID4gKwkJcmV0ID0g Z2V0X3Rlcm1fZm9ybWF0KHRlcm0sICZudW0sICZtYXNrKTsNCj4gPiArCQlmcmVlKHRlcm0pOw0K PiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJCWNvbmZp Z1tudW1dIHw9IEZJRUxEX1BSRVAobWFzaywgdmFsKTsNCj4gPiArCQl0b2tlbiA9IHN0cnRvayhO VUxMLCAiLCIpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK2dldF9ldmVudF9jb25maWcoY29uc3QgY2hhciAqbmFt ZSwgdWludDY0X3QgY29uZmlnWzNdKSB7DQo+ID4gKwljaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZb QlVGU0laXTsNCj4gPiArCUZJTEUgKmZwOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlz bnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIEVWRU5UX1NPVVJDRV9ERVZJQ0VTX1BBVEggIi8l cy9ldmVudHMvJXMiLCBydGVfcG11LT5uYW1lLA0KPiBuYW1lKTsNCj4gPiArCWZwID0gZm9wZW4o cGF0aCwgInIiKTsNCj4gPiArCWlmICghZnApDQo+ID4gKwkJcmV0dXJuIC1lcnJubzsNCj4gPiAr DQo+ID4gKwlyZXQgPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBmcCk7DQo+ID4gKwlpZiAo cmV0ID09IDApIHsNCj4gPiArCQlmY2xvc2UoZnApOw0KPiA+ICsNCj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gPiArCX0NCj4gPiArCWZjbG9zZShmcCk7DQo+ID4gKwlidWZbcmV0XSA9ICdcMCc7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHBhcnNlX2V2ZW50KGJ1ZiwgY29uZmlnKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtkb19wZXJmX2V2ZW50X29wZW4odWludDY0X3Qg Y29uZmlnWzNdLCBpbnQgbGNvcmVfaWQsIGludCBncm91cF9mZCkgew0KPiA+ICsJc3RydWN0IHBl cmZfZXZlbnRfYXR0ciBhdHRyID0gew0KPiA+ICsJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJm X2V2ZW50X2F0dHIpLA0KPiA+ICsJCS50eXBlID0gUEVSRl9UWVBFX1JBVywNCj4gPiArCQkuZXhj bHVkZV9rZXJuZWwgPSAxLA0KPiA+ICsJCS5leGNsdWRlX2h2ID0gMSwNCj4gPiArCQkuZGlzYWJs ZWQgPSAxLA0KPiA+ICsJfTsNCj4gPiArDQo+ID4gKwlwbXVfYXJjaF9maXh1cF9jb25maWcoY29u ZmlnKTsNCj4gPiArDQo+ID4gKwlhdHRyLmNvbmZpZyA9IGNvbmZpZ1swXTsNCj4gPiArCWF0dHIu Y29uZmlnMSA9IGNvbmZpZ1sxXTsNCj4gPiArCWF0dHIuY29uZmlnMiA9IGNvbmZpZ1syXTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gc3lzY2FsbChTWVNfcGVyZl9ldmVudF9vcGVuLCAmYXR0ciwgcnRl X2dldHRpZCgpLCBydGVfbGNvcmVfdG9fY3B1X2lkKGxjb3JlX2lkKSwNCj4gPiArCQkgICAgICAg Z3JvdXBfZmQsIDApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK29wZW5f ZXZlbnRzKGludCBsY29yZV9pZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnRf Z3JvdXAgKmdyb3VwID0gJnJ0ZV9wbXUtPmdyb3VwW2xjb3JlX2lkXTsNCj4gPiArCXN0cnVjdCBy dGVfcG11X2V2ZW50ICpldmVudDsNCj4gPiArCXVpbnQ2NF90IGNvbmZpZ1szXTsNCj4gPiArCWlu dCBudW0gPSAwLCByZXQ7DQo+ID4gKw0KPiA+ICsJLyogZ3JvdXAgbGVhZGVyIGdldHMgY3JlYXRl ZCBmaXJzdCwgd2l0aCBmZCA9IC0xICovDQo+ID4gKwlncm91cC0+ZmRzWzBdID0gLTE7DQo+ID4g Kw0KPiA+ICsJVEFJTFFfRk9SRUFDSChldmVudCwgJnJ0ZV9wbXUtPmV2ZW50X2xpc3QsIG5leHQp IHsNCj4gPiArCQlyZXQgPSBnZXRfZXZlbnRfY29uZmlnKGV2ZW50LT5uYW1lLCBjb25maWcpOw0K PiA+ICsJCWlmIChyZXQpIHsNCj4gPiArCQkJUlRFX0xPRyhFUlIsIEVBTCwgImZhaWxlZCB0byBn ZXQgJXMgZXZlbnQgY29uZmlnXG4iLCBldmVudC0+bmFtZSk7DQo+ID4gKwkJCWNvbnRpbnVlOw0K PiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJcmV0ID0gZG9fcGVyZl9ldmVudF9vcGVuKGNvbmZpZywg bGNvcmVfaWQsIGdyb3VwLT5mZHNbMF0pOw0KPiA+ICsJCWlmIChyZXQgPT0gLTEpIHsNCj4gPiAr CQkJaWYgKGVycm5vID09IEVPUE5PVFNVUFApDQo+ID4gKwkJCQlSVEVfTE9HKEVSUiwgRUFMLCAi NjQgYml0IGNvdW50ZXJzIG5vdCBzdXBwb3J0ZWRcbiIpOw0KPiA+ICsNCj4gPiArCQkJcmV0ID0g LWVycm5vOw0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWdyb3Vw LT5mZHNbZXZlbnQtPmluZGV4XSA9IHJldDsNCj4gPiArCQludW0rKzsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArb3V0Og0KPiA+ICsJZm9yICgtLW51bTsgbnVtID49IDA7 IG51bS0tKSB7DQo+ID4gKwkJY2xvc2UoZ3JvdXAtPmZkc1tudW1dKTsNCj4gPiArCQlncm91cC0+ ZmRzW251bV0gPSAtMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICttbWFwX2V2ZW50cyhpbnQgbGNv cmVfaWQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91cCA9 ICZydGVfcG11LT5ncm91cFtsY29yZV9pZF07DQo+ID4gKwl2b2lkICphZGRyOw0KPiA+ICsJaW50 IHJldCwgaTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgcnRlX3BtdS0+bnVtX2dyb3Vw X2V2ZW50czsgaSsrKSB7DQo+ID4gKwkJYWRkciA9IG1tYXAoMCwgcnRlX21lbV9wYWdlX3NpemUo KSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBncm91cC0+ZmRzW2ldLCAwKTsNCj4gPiArCQlpZiAo YWRkciA9PSBNQVBfRkFJTEVEKSB7DQo+ID4gKwkJCXJldCA9IC1lcnJubzsNCj4gPiArCQkJZ290 byBvdXQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlncm91cC0+bW1hcF9wYWdlc1tpXSA9IGFk ZHI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK291dDoNCj4gPiArCWZv ciAoOyBpOyBpLS0pIHsNCj4gPiArCQltdW5tYXAoZ3JvdXAtPm1tYXBfcGFnZXNbaSAtIDFdLCBy dGVfbWVtX3BhZ2Vfc2l6ZSgpKTsNCj4gPiArCQlncm91cC0+bW1hcF9wYWdlc1tpIC0gMV0gPSBO VUxMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkDQo+ID4gK2NsZWFudXBfZXZlbnRzKGludCBsY29yZV9pZCkNCj4gDQo+ IGxjb3JlX2lkIGlzIGFuIHVuc2lnbmVkIGludC4NCj4gDQoNClRydWUsIHVuc2lnbmVkIHNlZW1z IHRvIGJlIG1vcmUgY29tbW9uLiANCg0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVu dF9ncm91cCAqZ3JvdXAgPSAmcnRlX3BtdS0+Z3JvdXBbbGNvcmVfaWRdOw0KPiA+ICsJaW50IGk7 DQo+ID4gKw0KPiA+ICsJaWYgKCFncm91cC0+ZmRzKQ0KPiA+ICsJCXJldHVybjsNCj4gDQo+IGdy b3VwLT5mZHMgPT0gTlVMTA0KPiANCj4gVGhpcyBjb2Rpbmcgc3R5bGUgdmlvbGF0aW5nIGFwcGVh cnMgdGhyb3VnaHB1dCB0aGUgcGF0Y2ggc2V0Lg0KPiANCg0KR29vZCBwb2ludC4gDQoNCj4gPiAr DQo+ID4gKwlpZiAoZ3JvdXAtPmZkc1swXSAhPSAtMSkNCj4gPiArCQlpb2N0bChncm91cC0+ZmRz WzBdLCBQRVJGX0VWRU5UX0lPQ19ESVNBQkxFLCBQRVJGX0lPQ19GTEFHX0dST1VQKTsNCj4gPiAr DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgcnRlX3BtdS0+bnVtX2dyb3VwX2V2ZW50czsgaSsrKSB7 DQo+ID4gKwkJaWYgKGdyb3VwLT5tbWFwX3BhZ2VzW2ldKSB7DQo+ID4gKwkJCW11bm1hcChncm91 cC0+bW1hcF9wYWdlc1tpXSwgcnRlX21lbV9wYWdlX3NpemUoKSk7DQo+ID4gKwkJCWdyb3VwLT5t bWFwX3BhZ2VzW2ldID0gTlVMTDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWlmIChncm91cC0+ ZmRzW2ldICE9IC0xKSB7DQo+ID4gKwkJCWNsb3NlKGdyb3VwLT5mZHNbaV0pOw0KPiA+ICsJCQln cm91cC0+ZmRzW2ldID0gLTE7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZyZWUo Z3JvdXAtPm1tYXBfcGFnZXMpOw0KPiA+ICsJZnJlZShncm91cC0+ZmRzKTsNCj4gPiArDQo+ID4g Kwlncm91cC0+bW1hcF9wYWdlcyA9IE5VTEw7DQo+ID4gKwlncm91cC0+ZmRzID0gTlVMTDsNCj4g PiArCWdyb3VwLT5lbmFibGVkID0gZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBfX3J0 ZV9ub2lubGluZQ0KPiA+ICtydGVfcG11X2VuYWJsZV9ncm91cChpbnQgbGNvcmVfaWQpDQo+IA0K PiB1bnNpZ25lZA0KPiANCj4gPiArew0KPiA+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAg Kmdyb3VwID0gJnJ0ZV9wbXUtPmdyb3VwW2xjb3JlX2lkXTsNCj4gPiArCWludCByZXQ7DQo+ID4g Kw0KPiA+ICsJaWYgKHJ0ZV9wbXUtPm51bV9ncm91cF9ldmVudHMgPT0gMCkgew0KPiA+ICsJCVJU RV9MT0coREVCVUcsIEVBTCwgIm5vIG1hdGNoaW5nIFBNVSBldmVudHNcbiIpOw0KPiA+ICsNCj4g PiArCQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlncm91cC0+ZmRzID0gY2FsbG9j KHJ0ZV9wbXUtPm51bV9ncm91cF9ldmVudHMsIHNpemVvZigqZ3JvdXAtPmZkcykpOw0KPiA+ICsJ aWYgKCFncm91cC0+ZmRzKSB7DQo+ID4gKwkJUlRFX0xPRyhFUlIsIEVBTCwgImZhaWxlZCB0byBh bGxvYyBkZXNjcmlwdG9yIG1lbW9yeVxuIik7DQo+ID4gKw0KPiA+ICsJCXJldHVybiAtRU5PTUVN Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWdyb3VwLT5tbWFwX3BhZ2VzID0gY2FsbG9jKHJ0ZV9w bXUtPm51bV9ncm91cF9ldmVudHMsIHNpemVvZigqZ3JvdXAtPm1tYXBfcGFnZXMpKTsNCj4gPiAr CWlmICghZ3JvdXAtPm1tYXBfcGFnZXMpIHsNCj4gPiArCQlSVEVfTE9HKEVSUiwgRUFMLCAiZmFp bGVkIHRvIGFsbG9jIHVzZXJwYWdlIG1lbW9yeVxuIik7DQo+ID4gKw0KPiA+ICsJCXJldCA9IC1F Tk9NRU07DQo+ID4gKwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gb3Bl bl9ldmVudHMobGNvcmVfaWQpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCVJURV9MT0coRVJS LCBFQUwsICJmYWlsZWQgdG8gb3BlbiBldmVudHMgb24gbGNvcmUtd29ya2VyLSVkXG4iLCBsY29y ZV9pZCk7DQo+ID4gKwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gbW1h cF9ldmVudHMobGNvcmVfaWQpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCVJURV9MT0coRVJS LCBFQUwsICJmYWlsZWQgdG8gbWFwIGV2ZW50cyBvbiBsY29yZS13b3JrZXItJWRcbiIsIGxjb3Jl X2lkKTsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoaW9jdGwo Z3JvdXAtPmZkc1swXSwgUEVSRl9FVkVOVF9JT0NfRU5BQkxFLCBQRVJGX0lPQ19GTEFHX0dST1VQ KSA9PSAtMSkgew0KPiA+ICsJCVJURV9MT0coRVJSLCBFQUwsICJmYWlsZWQgdG8gZW5hYmxlIGV2 ZW50cyBvbiBsY29yZS13b3JrZXItJWRcbiIsDQo+ID4gK2xjb3JlX2lkKTsNCj4gPiArDQo+ID4g KwkJcmV0ID0gLWVycm5vOw0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsJY2xlYW51cF9ldmVudHMobGNvcmVf aWQpOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQNCj4gPiArc2Nhbl9wbXVzKHZvaWQpDQo+ID4gK3sNCj4gPiArCWNoYXIgcGF0aFtQQVRI X01BWF07DQo+ID4gKwlzdHJ1Y3QgZGlyZW50ICpkZW50Ow0KPiA+ICsJY29uc3QgY2hhciAqbmFt ZTsNCj4gPiArCURJUiAqZGlycDsNCj4gPiArDQo+ID4gKwlkaXJwID0gb3BlbmRpcihFVkVOVF9T T1VSQ0VfREVWSUNFU19QQVRIKTsNCj4gPiArCWlmICghZGlycCkNCj4gPiArCQlyZXR1cm4gLWVy cm5vOw0KPiA+ICsNCj4gPiArCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZGlycCkpKSB7DQo+ID4g KwkJbmFtZSA9IGRlbnQtPmRfbmFtZTsNCj4gPiArCQlpZiAobmFtZVswXSA9PSAnLicpDQo+ID4g KwkJCWNvbnRpbnVlOw0KPiA+ICsNCj4gPiArCQkvKiBzeXNmcyBlbnRyeSBzaG91bGQgZWl0aGVy IGNvbnRhaW4gY3B1cyBvciBiZSBhIGNwdSAqLw0KPiA+ICsJCWlmICghc3RyY21wKG5hbWUsICJj cHUiKSkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCXNucHJpbnRmKHBhdGgsIHNpemVv ZihwYXRoKSwgRVZFTlRfU09VUkNFX0RFVklDRVNfUEFUSCAiLyVzL2NwdXMiLCBuYW1lKTsNCj4g PiArCQlpZiAoYWNjZXNzKHBhdGgsIEZfT0spID09IDApDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCWNsb3NlZGlyKGRpcnApOw0KPiA+ICsNCj4gPiArCWlmIChkZW50KSB7 DQo+ID4gKwkJcnRlX3BtdS0+bmFtZSA9IHN0cmR1cChuYW1lKTsNCj4gPiArCQlpZiAoIXJ0ZV9w bXUtPm5hbWUpDQo+ID4gKwkJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJldHVybiBydGVfcG11LT5uYW1lID8gMCA6IC1FTk9ERVY7DQo+ID4gK30NCj4gPiArDQo+ID4g K2ludA0KPiA+ICtydGVfcG11X2FkZF9ldmVudChjb25zdCBjaGFyICpuYW1lKQ0KPiA+ICt7DQo+ ID4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQ7DQo+ID4gKwljaGFyIHBhdGhbUEFUSF9N QVhdOw0KPiA+ICsNCj4gPiArCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgRVZFTlRfU09V UkNFX0RFVklDRVNfUEFUSCAiLyVzL2V2ZW50cy8lcyIsIHJ0ZV9wbXUtPm5hbWUsDQo+IG5hbWUp Ow0KPiA+ICsJaWYgKGFjY2VzcyhwYXRoLCBSX09LKSkNCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsN Cj4gPiArDQo+ID4gKwlUQUlMUV9GT1JFQUNIKGV2ZW50LCAmcnRlX3BtdS0+ZXZlbnRfbGlzdCwg bmV4dCkgew0KPiA+ICsJCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCBuYW1lKSkNCj4gPiArCQkJ cmV0dXJuIGV2ZW50LT5pbmRleDsNCj4gPiArCQljb250aW51ZTsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlldmVudCA9IGNhbGxvYygxLCBzaXplb2YoKmV2ZW50KSk7DQo+ID4gKwlpZiAoIWV2ZW50 KQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCWV2ZW50LT5uYW1lID0gc3Ry ZHVwKG5hbWUpOw0KPiA+ICsJaWYgKCFldmVudC0+bmFtZSkgew0KPiA+ICsJCWZyZWUoZXZlbnQp Ow0KPiA+ICsNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwll dmVudC0+aW5kZXggPSBydGVfcG11LT5udW1fZ3JvdXBfZXZlbnRzKys7DQo+ID4gKwlUQUlMUV9J TlNFUlRfVEFJTCgmcnRlX3BtdS0+ZXZlbnRfbGlzdCwgZXZlbnQsIG5leHQpOw0KPiA+ICsNCj4g PiArCVJURV9MT0coREVCVUcsIEVBTCwgIiVzIGV2ZW4gYWRkZWQgYXQgaW5kZXggJWRcbiIsIG5h bWUsDQo+ID4gK2V2ZW50LT5pbmRleCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGV2ZW50LT5pbmRl eDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZA0KPiA+ICtlYWxfcG11X2luaXQodm9pZCkNCj4g PiArew0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlydGVfcG11ID0gY2FsbG9jKDEsIHNp emVvZigqcnRlX3BtdSkpOw0KPiA+ICsJaWYgKCFydGVfcG11KSB7DQo+ID4gKwkJUlRFX0xPRyhF UlIsIEVBTCwgImZhaWxlZCB0byBhbGxvYyBQTVVcbiIpOw0KPiA+ICsNCj4gPiArCQlyZXR1cm47 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJVEFJTFFfSU5JVCgmcnRlX3BtdS0+ZXZlbnRfbGlzdCk7 DQo+ID4gKw0KPiA+ICsJcmV0ID0gc2Nhbl9wbXVzKCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4g KwkJUlRFX0xPRyhFUlIsIEVBTCwgImZhaWxlZCB0byBmaW5kIGNvcmUgcG11XG4iKTsNCj4gPiAr CQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBwbXVfYXJjaF9pbml0KCk7 DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJUlRFX0xPRyhFUlIsIEVBTCwgImZhaWxlZCB0byBz ZXR1cCBhcmNoIGZvciBQTVVcbiIpOw0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCXJldHVybjsNCj4gPiArb3V0Og0KPiA+ICsJZnJlZShydGVfcG11LT5uYW1lKTsNCj4g PiArCWZyZWUocnRlX3BtdSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQNCj4gPiArZWFsX3Bt dV9maW5pKHZvaWQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVudCwg KnRtcDsNCj4gPiArCWludCBsY29yZV9pZDsNCj4gPiArDQo+ID4gKwlSVEVfVEFJTFFfRk9SRUFD SF9TQUZFKGV2ZW50LCAmcnRlX3BtdS0+ZXZlbnRfbGlzdCwgbmV4dCwgdG1wKSB7DQo+ID4gKwkJ VEFJTFFfUkVNT1ZFKCZydGVfcG11LT5ldmVudF9saXN0LCBldmVudCwgbmV4dCk7DQo+ID4gKwkJ ZnJlZShldmVudC0+bmFtZSk7DQo+ID4gKwkJZnJlZShldmVudCk7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJUlRFX0xDT1JFX0ZPUkVBQ0hfV09SS0VSKGxjb3JlX2lkKQ0KPiA+ICsJCWNsZWFudXBf ZXZlbnRzKGxjb3JlX2lkKTsNCj4gDQo+IFdoeSBpcyB0aGUgbWFpbiBsY29yZSBsZWZ0IG91dD8N Cj4gDQoNCk1haW4gbGNvcmUgd2FzIG9taXR0ZWQgYmVjYXVzZSBpdCdzIHByZXR0eSB1bmNvbW1v biBmb3IgaXQgdG8gZG8gYSBoZWF2eS1saWZ0aW5nIHNvDQp1c2VmdWxuZXNzIG9mIHJlYWRpbmcg Y291bnRlcnMgaXMgcXVlc3Rpb25hYmxlLiBJdCBjYW4gYmUgYWRkZWQgZm9yIGNvbXBsZXRlbmVz cw0KdGhvdWdoLiANCg0KRG8geW91IGhhdmUgYW55IHNwZWNpZmljIHVzZSBjYXNlIG9uIHlvdXIg bWluZD8NCg0KPiA+ICsNCj4gPiArCXBtdV9hcmNoX2ZpbmkoKTsNCj4gPiArCWZyZWUocnRlX3Bt dS0+bmFtZSk7DQo+ID4gKwlmcmVlKHJ0ZV9wbXUpOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBh L2xpYi9lYWwvaW5jbHVkZS9tZXNvbi5idWlsZCBiL2xpYi9lYWwvaW5jbHVkZS9tZXNvbi5idWls ZA0KPiA+IGluZGV4IGNmY2Q0MGFhZWQuLjNiZjgzMGFkZWUgMTAwNjQ0DQo+ID4gLS0tIGEvbGli L2VhbC9pbmNsdWRlL21lc29uLmJ1aWxkDQo+ID4gKysrIGIvbGliL2VhbC9pbmNsdWRlL21lc29u LmJ1aWxkDQo+ID4gQEAgLTM2LDYgKzM2LDcgQEAgaGVhZGVycyArPSBmaWxlcygNCj4gPiAgICAg ICAgICAgJ3J0ZV9wY2lfZGV2X2ZlYXR1cmVzLmgnLA0KPiA+ICAgICAgICAgICAncnRlX3Blcl9s Y29yZS5oJywNCj4gPiAgICAgICAgICAgJ3J0ZV9wZmxvY2suaCcsDQo+ID4gKyAgICAgICAgJ3J0 ZV9wbXUuaCcsDQo+ID4gICAgICAgICAgICdydGVfcmFuZG9tLmgnLA0KPiA+ICAgICAgICAgICAn cnRlX3JlY2lwcm9jYWwuaCcsDQo+ID4gICAgICAgICAgICdydGVfc2VxY291bnQuaCcsDQo+ID4g ZGlmZiAtLWdpdCBhL2xpYi9lYWwvaW5jbHVkZS9ydGVfcG11LmggYi9saWIvZWFsL2luY2x1ZGUv cnRlX3BtdS5oIG5ldw0KPiA+IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXggMDAwMDAwMDAwMC4uZTRi NGY2YjA1Mg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvZWFsL2luY2x1ZGUvcnRl X3BtdS5oDQo+ID4gQEAgLTAsMCArMSwyMDQgQEANCj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+ICsgKiBDb3B5cmlnaHQoYykgMjAyMiBNYXJ2ZWxsDQo+ ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBfUlRFX1BNVV9IXw0KPiA+ICsjZGVmaW5lIF9S VEVfUE1VX0hfDQo+ID4gKw0KPiA+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gPiArZXh0ZXJuICJD IiB7DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD4NCj4g PiArI2luY2x1ZGUgPHJ0ZV9jb21wYXQuaD4NCj4gPiArDQo+ID4gKyNpZmRlZiBSVEVfRVhFQ19F TlZfTElOVVgNCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+DQo+ID4g Kw0KPiA+ICsjaW5jbHVkZSA8cnRlX2F0b21pYy5oPg0KPiA+ICsjaW5jbHVkZSA8cnRlX2JyYW5j aF9wcmVkaWN0aW9uLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfbGNvcmUuaD4NCj4gPiArI2luY2x1 ZGUgPHJ0ZV9sb2cuaD4NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAZmlsZQ0KPiA+ICsgKg0K PiA+ICsgKiBQTVUgZXZlbnQgdHJhY2luZyBvcGVyYXRpb25zDQo+ID4gKyAqDQo+ID4gKyAqIFRo aXMgZmlsZSBkZWZpbmVzIGdlbmVyaWMgQVBJIGFuZCB0eXBlcyBuZWNlc3NhcnkgdG8gc2V0dXAg UE1VIGFuZA0KPiA+ICsgKiByZWFkIHNlbGVjdGVkIGNvdW50ZXJzIGluIHJ1bnRpbWUuDQo+ID4g KyAqLw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBn cm91cCBvZiBldmVudHMuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91 cCB7DQo+ID4gKwlpbnQgKmZkczsgLyoqPCBhcnJheSBvZiBldmVudCBkZXNjcmlwdG9ycyAqLw0K PiA+ICsJdm9pZCAqKm1tYXBfcGFnZXM7IC8qKjwgYXJyYXkgb2YgcG9pbnRlcnMgdG8gbW1hcHBl ZCBwZXJmX2V2ZW50X2F0dHIgc3RydWN0dXJlcyAqLw0KPiA+ICsJYm9vbCBlbmFibGVkOyAvKio8 IHRydWUgaWYgZ3JvdXAgd2FzIGVuYWJsZWQgb24gcGFydGljdWxhciBsY29yZSAqLw0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYW4gZXZl bnQuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX3BtdV9ldmVudCB7DQo+ID4gKwljaGFyICpu YW1lOyAvKiogbmFtZSBvZiBhbiBldmVudCAqLw0KPiA+ICsJaW50IGluZGV4OyAvKiogZXZlbnQg aW5kZXggaW50byBmZHMvbW1hcF9wYWdlcyAqLw0KPiA+ICsJVEFJTFFfRU5UUlkocnRlX3BtdV9l dmVudCkgbmV4dDsgLyoqIGxpc3QgZW50cnkgKi8gfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg KiBBIFBNVSBzdGF0ZSBjb250YWluZXIuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX3BtdSB7 DQo+ID4gKwljaGFyICpuYW1lOyAvKiogbmFtZSBvZiBjb3JlIFBNVSBsaXN0ZWQgdW5kZXIgL3N5 cy9idXMvZXZlbnRfc291cmNlL2RldmljZXMgKi8NCj4gPiArCXN0cnVjdCBydGVfcG11X2V2ZW50 X2dyb3VwIGdyb3VwW1JURV9NQVhfTENPUkVdOyAvKio8IHBlciBsY29yZSBldmVudCBncm91cCBk YXRhICovDQo+ID4gKwlpbnQgbnVtX2dyb3VwX2V2ZW50czsgLyoqPCBudW1iZXIgb2YgZXZlbnRz IGluIGEgZ3JvdXAgKi8NCj4gPiArCVRBSUxRX0hFQUQoLCBydGVfcG11X2V2ZW50KSBldmVudF9s aXN0OyAvKio8IGxpc3Qgb2YgbWF0Y2hpbmcgZXZlbnRzDQo+ID4gKyovIH07DQo+ID4gKw0KPiA+ ICsvKiogUG9pbnRlciB0byB0aGUgUE1VIHN0YXRlIGNvbnRhaW5lciAqLyBleHRlcm4gc3RydWN0 IHJ0ZV9wbXUNCj4gPiArKnJ0ZV9wbXU7DQo+ID4gKw0KPiA+ICsvKiogRWFjaCBhcmNoaXRlY3R1 cmUgc3VwcG9ydGluZyBQTVUgbmVlZHMgdG8gcHJvdmlkZSBpdHMgb3duIHZlcnNpb24NCj4gPiAr Ki8gI2lmbmRlZiBydGVfcG11X3BtY19yZWFkICNkZWZpbmUgcnRlX3BtdV9wbWNfcmVhZChpbmRl eCkgKHsgMDsgfSkNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQGludGVy bmFsDQo+ID4gKyAqDQo+ID4gKyAqIFJlYWQgUE1VIGNvdW50ZXIuDQo+ID4gKyAqDQo+ID4gKyAq IEBwYXJhbSBwYw0KPiA+ICsgKiAgIFBvaW50ZXIgdG8gdGhlIG1tYXBwZWQgdXNlciBwYWdlLg0K PiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgQ291bnRlciB2YWx1ZSByZWFkIGZyb20gaGFyZHdh cmUuDQo+ID4gKyAqLw0KPiA+ICtfX3J0ZV9pbnRlcm5hbA0KPiA+ICtzdGF0aWMgX19ydGVfYWx3 YXlzX2lubGluZSB1aW50NjRfdA0KPiA+ICtydGVfcG11X3JlYWRfdXNlcnBhZ2Uoc3RydWN0IHBl cmZfZXZlbnRfbW1hcF9wYWdlICpwYykgew0KPiA+ICsJdWludDY0X3Qgb2Zmc2V0LCB3aWR0aCwg cG1jID0gMDsNCj4gPiArCXVpbnQzMl90IHNlcSwgaW5kZXg7DQo+ID4gKwlpbnQgdHJpZXMgPSAx MDA7DQo+ID4gKw0KPiA+ICsJZm9yICg7Oykgew0KPiA+ICsJCXNlcSA9IHBjLT5sb2NrOw0KPiA+ ICsJCXJ0ZV9jb21waWxlcl9iYXJyaWVyKCk7DQo+ID4gKwkJaW5kZXggPSBwYy0+aW5kZXg7DQo+ ID4gKwkJb2Zmc2V0ID0gcGMtPm9mZnNldDsNCj4gPiArCQl3aWR0aCA9IHBjLT5wbWNfd2lkdGg7 DQo+ID4gKw0KPiA+ICsJCWlmIChsaWtlbHkocGMtPmNhcF91c2VyX3JkcG1jICYmIGluZGV4KSkg ew0KPiA+ICsJCQlwbWMgPSBydGVfcG11X3BtY19yZWFkKGluZGV4IC0gMSk7DQo+ID4gKwkJCXBt YyA8PD0gNjQgLSB3aWR0aDsNCj4gPiArCQkJcG1jID4+PSA2NCAtIHdpZHRoOw0KPiA+ICsJCX0N Cj4gPiArDQo+ID4gKwkJcnRlX2NvbXBpbGVyX2JhcnJpZXIoKTsNCj4gPiArDQo+ID4gKwkJaWYg KGxpa2VseShwYy0+bG9jayA9PSBzZXEpKQ0KPiA+ICsJCQlyZXR1cm4gcG1jICsgb2Zmc2V0Ow0K PiA+ICsNCj4gPiArCQlpZiAoLS10cmllcyA9PSAwKSB7DQo+ID4gKwkJCVJURV9MT0coREVCVUcs IEVBTCwgImZhaWxlZCB0byBnZXQgcGVyZl9ldmVudF9tbWFwX3BhZ2UgbG9ja1xuIik7DQo+ID4g KwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEBpbnRlcm5hbA0KPiA+ICsgKg0KPiA+ICsg KiBFbmFibGUgZ3JvdXAgb2YgZXZlbnRzIGZvciBhIGdpdmVuIGxjb3JlLg0KPiA+ICsgKg0KPiA+ ICsgKiBAcGFyYW0gbGNvcmVfaWQNCj4gPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgbGNv cmUuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgbmVn YXRpdmUgdmFsdWUgb3RoZXJ3aXNlLg0KPiA+ICsgKi8NCj4gPiArX19ydGVfaW50ZXJuYWwNCj4g PiAraW50DQo+ID4gK3J0ZV9wbXVfZW5hYmxlX2dyb3VwKGludCBsY29yZV9pZCk7DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlz IEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIEFk ZCBldmVudCB0byB0aGUgZ3JvdXAgb2YgZW5hYmxlZCBldmVudHMuDQo+ID4gKyAqDQo+ID4gKyAq IEBwYXJhbSBuYW1lDQo+ID4gKyAqICAgTmFtZSBvZiBhbiBldmVudCBsaXN0ZWQgdW5kZXIgL3N5 cy9idXMvZXZlbnRfc291cmNlL2RldmljZXMvcG11L2V2ZW50cy4NCj4gPiArICogQHJldHVybg0K PiA+ICsgKiAgIEV2ZW50IGluZGV4IGluIGNhc2Ugb2Ygc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUg b3RoZXJ3aXNlLg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK2ludA0K PiA+ICtydGVfcG11X2FkZF9ldmVudChjb25zdCBjaGFyICpuYW1lKTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1h eSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiArICoNCj4gPiArICogUmVhZCBoYXJk d2FyZSBjb3VudGVyIGNvbmZpZ3VyZWQgdG8gY291bnQgb2NjdXJyZW5jZXMgb2YgYW4gZXZlbnQu DQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBpbmRleA0KPiA+ICsgKiAgIEluZGV4IG9mIGFuIGV2 ZW50IHRvIGJlIHJlYWQuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICBFdmVudCB2YWx1ZSBy ZWFkIGZyb20gcmVnaXN0ZXIuIEluIGNhc2Ugb2YgZXJyb3JzIG9yIGxhY2sgb2Ygc3VwcG9ydA0K PiA+ICsgKiAgIDAgaXMgcmV0dXJuZWQuIEluIG90aGVyIHdvcmRzLCBzdHJlYW0gb2YgemVyb3Mg aW4gYSB0cmFjZSBmaWxlDQo+ID4gKyAqICAgaW5kaWNhdGVzIHByb2JsZW0gd2l0aCByZWFkaW5n IHBhcnRpY3VsYXIgUE1VIGV2ZW50IHJlZ2lzdGVyLg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhw ZXJpbWVudGFsDQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVpbnQ2NF90DQo+ID4g K3J0ZV9wbXVfcmVhZChpbnQgaW5kZXgpDQo+ID4gK3sNCj4gPiArCWludCBsY29yZV9pZCA9IHJ0 ZV9sY29yZV9pZCgpOw0KPiA+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgKmdyb3VwOw0K PiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlpZiAoIXJ0ZV9wbXUpDQo+ID4gKwkJcmV0dXJu IDA7DQo+ID4gKw0KPiA+ICsJZ3JvdXAgPSAmcnRlX3BtdS0+Z3JvdXBbbGNvcmVfaWRdOw0KPiA+ ICsJaWYgKCFncm91cC0+ZW5hYmxlZCkgew0KPiA+ICsJCXJldCA9IHJ0ZV9wbXVfZW5hYmxlX2dy b3VwKGxjb3JlX2lkKTsNCj4gPiArCQlpZiAocmV0KQ0KPiA+ICsJCQlyZXR1cm4gMDsNCj4gPiAr DQo+ID4gKwkJZ3JvdXAtPmVuYWJsZWQgPSB0cnVlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlm IChpbmRleCA8IDAgfHwgaW5kZXggPj0gcnRlX3BtdS0+bnVtX2dyb3VwX2V2ZW50cykNCj4gPiAr CQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcnRlX3BtdV9yZWFkX3VzZXJwYWdlKChz dHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UNCj4gPiArKilncm91cC0+bW1hcF9wYWdlc1tpbmRl eF0pOyB9DQo+ID4gKw0KPiA+ICsjZWxzZSAvKiAhUlRFX0VYRUNfRU5WX0xJTlVYICovDQo+ID4g Kw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArc3RhdGljIGludCBfX3J0ZV91bnVzZWQN Cj4gPiArcnRlX3BtdV9hZGRfZXZlbnQoX19ydGVfdW51c2VkIGNvbnN0IGNoYXIgKm5hbWUpIHsN Cj4gPiArCXJldHVybiAtMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArX19ydGVfZXhwZXJpbWVudGFs DQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVpbnQ2NF90DQo+ID4gK3J0ZV9wbXVf cmVhZChfX3J0ZV91bnVzZWQgaW50IGluZGV4KQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArI2VuZGlmIC8qIFJURV9FWEVDX0VOVl9MSU5VWCAqLw0KPiA+ICsN Cj4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gK30NCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ ICsjZW5kaWYgLyogX1JURV9QTVVfSF8gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2VhbC9saW51 eC9lYWwuYyBiL2xpYi9lYWwvbGludXgvZWFsLmMgaW5kZXgNCj4gPiA4YzExOGQwZDlmLi43NTFh MTNiNTk3IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9lYWwvbGludXgvZWFsLmMNCj4gPiArKysgYi9s aWIvZWFsL2xpbnV4L2VhbC5jDQo+ID4gQEAgLTUzLDYgKzUzLDcgQEANCj4gPiAgICNpbmNsdWRl ICJlYWxfb3B0aW9ucy5oIg0KPiA+ICAgI2luY2x1ZGUgImVhbF92ZmlvLmgiDQo+ID4gICAjaW5j bHVkZSAiaG90cGx1Z19tcC5oIg0KPiA+ICsjaW5jbHVkZSAicG11X3ByaXZhdGUuaCINCj4gPg0K PiA+ICAgI2RlZmluZSBNRU1TSVpFX0lGX05PX0hVR0VfUEFHRSAoNjRVTEwgKiAxMDI0VUxMICog MTAyNFVMTCkNCj4gPg0KPiA+IEBAIC0xMjA2LDYgKzEyMDcsOCBAQCBydGVfZWFsX2luaXQoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQ0KPiA+ICAgCQlyZXR1cm4gLTE7DQo+ID4gICAJfQ0KPiA+DQo+ ID4gKwllYWxfcG11X2luaXQoKTsNCj4gPiArDQo+ID4gICAJaWYgKHJ0ZV9lYWxfdGFpbHFzX2lu aXQoKSA8IDApIHsNCj4gPiAgIAkJcnRlX2VhbF9pbml0X2FsZXJ0KCJDYW5ub3QgaW5pdCB0YWls IHF1ZXVlcyBmb3Igb2JqZWN0cyIpOw0KPiA+ICAgCQlydGVfZXJybm8gPSBFRkFVTFQ7DQo+ID4g QEAgLTEzNzIsNiArMTM3NSw3IEBAIHJ0ZV9lYWxfY2xlYW51cCh2b2lkKQ0KPiA+ICAgCWVhbF9i dXNfY2xlYW51cCgpOw0KPiA+ICAgCXJ0ZV90cmFjZV9zYXZlKCk7DQo+ID4gICAJZWFsX3RyYWNl X2ZpbmkoKTsNCj4gPiArCWVhbF9wbXVfZmluaSgpOw0KPiA+ICAgCS8qIGFmdGVyIHRoaXMgcG9p bnQsIGFueSBEUERLIHBvaW50ZXJzIHdpbGwgYmVjb21lIGRhbmdsaW5nICovDQo+ID4gICAJcnRl X2VhbF9tZW1vcnlfZGV0YWNoKCk7DQo+ID4gICAJZWFsX21wX2Rldl9ob3RwbHVnX2NsZWFudXAo KTsNCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2VhbC92ZXJzaW9uLm1hcCBiL2xpYi9lYWwvdmVyc2lv bi5tYXAgaW5kZXgNCj4gPiA3YWQxMmE3ZGM5Li45MjI1ZjQ2ZjY3IDEwMDY0NA0KPiA+IC0tLSBh L2xpYi9lYWwvdmVyc2lvbi5tYXANCj4gPiArKysgYi9saWIvZWFsL3ZlcnNpb24ubWFwDQo+ID4g QEAgLTQ0MCw2ICs0NDAsMTEgQEAgRVhQRVJJTUVOVEFMIHsNCj4gPiAgIAlydGVfdGhyZWFkX2Rl dGFjaDsNCj4gPiAgIAlydGVfdGhyZWFkX2VxdWFsOw0KPiA+ICAgCXJ0ZV90aHJlYWRfam9pbjsN Cj4gPiArDQo+ID4gKwkjIGFkZGVkIGluIDIzLjAzDQo+ID4gKwlydGVfcG11OyAjIFdJTkRPV1Nf Tk9fRVhQT1JUDQo+ID4gKwlydGVfcG11X2FkZF9ldmVudDsgIyBXSU5ET1dTX05PX0VYUE9SVA0K PiA+ICsJcnRlX3BtdV9yZWFkOyAjIFdJTkRPV1NfTk9fRVhQT1JUDQo+ID4gICB9Ow0KPiA+DQo+ ID4gICBJTlRFUk5BTCB7DQo+ID4gQEAgLTQ4Myw0ICs0ODgsNSBAQCBJTlRFUk5BTCB7DQo+ID4g ICAJcnRlX21lbV9tYXA7DQo+ID4gICAJcnRlX21lbV9wYWdlX3NpemU7DQo+ID4gICAJcnRlX21l bV91bm1hcDsNCj4gPiArCXJ0ZV9wbXVfZW5hYmxlX2dyb3VwOw0KPiA+ICAgfTsNCg0K