From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 34C43A0562; Tue, 31 Mar 2020 17:37:16 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2EA362C15; Tue, 31 Mar 2020 17:37:15 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 4EE26F12 for ; Tue, 31 Mar 2020 17:37:13 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02VFVbju011021; Tue, 31 Mar 2020 08:37:12 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=pfpt0818; bh=K7PxUqbM9mLmHVT+feL1E+LQxBhV9YGSFqGnZxmSnhQ=; b=CKZaIUHXnxlarVfv0UJ49Q13CfOHAwPe8Y7WEA14CAoqTaClTOC41QWByEK41L2h714P def0THA2gBIFW9/337stXGmd9K8YSX8nCY3RDFUkC4GyzQ0uL8iLgjPFAwONRRP375DB 7BPZ6ooM7jSNSfGQ8OQmhhta1EqsX9zJ70wQCOqvIaeeHO5F1tYmU6fVGI4tqyROFkK6 rJBMfgXx6r/JwwN9SgyrekCgrKx0C3qMDPuwE9/9sGT3rZibPFyB/ebO6yl9VotUbJSd d6/qD2cAWuLtWRElKFvtRIKOrRt5F7V/OJwYQgmK83wgMWQrlwoUvvjZ06g8+wWNgEzQ gg== Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0a-0016f401.pphosted.com with ESMTP id 304855g4sw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 31 Mar 2020 08:37:11 -0700 Received: from SC-EXCH02.marvell.com (10.93.176.82) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 31 Mar 2020 08:37:10 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.175) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Tue, 31 Mar 2020 08:37:10 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YKCvYjOz/MaCjfhvyEt6ORfgsj6vJuS8TRp5mwgVmptmRRn0Ib8OsPNRGdsYInWdOIThy0xVCEby/p2NxH3Km7n4UUBD2sQmVWxqI5r/jThfcmDxXNgagfczmIHNa864ClLPkJGXFyEXgFq+Zy+G6opOyW8kyP+gnoNP9/gRa9SmqMDCiqqGxYZIEjAKY/jggfrSOR77VgBnY6vxz4p4pHe8f8bjz6PE7wiu24RdQIpaPhYOfHYymdEr6OU03s2xysRL9hmoB8Kwior4spJhAeBSDe0LEuOcXh7CK6K72Z+aekU0euWFv9Owf/nuYINf6FBZRQkQgw/rTWC2hE83LQ== 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-SenderADCheck; bh=K7PxUqbM9mLmHVT+feL1E+LQxBhV9YGSFqGnZxmSnhQ=; b=WFsbOe7oVYtWartpArvIkXdAfudTIOoHxcop5/WhP/VSFpI4cpQ+4YRcnMFfqbkChHN3xPvlNzNpT2sRCgFZibHW6bHwDp2k5B77WX42trWW4GqOHyYs2VFOiA5JWDTexCyUIX6oy0dH74XIPjkhwFXxe1i/+w7C5NCwazqSR15U3RIbnRwHHI/moFVnXV2gLregC0KydtJAp7uB0QUeV0Tc/1mWAdpRb7C7GbYLc69+5cn6A8f04mhhqn0qEwbeusySWuxd5+lHdwOiINSadkJzmGlWu301XP+w4DYPkS3a/pTrM3qsrnjoMW1cPmcxNE31y6jpP/a3YOhUaCcN6Q== 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=K7PxUqbM9mLmHVT+feL1E+LQxBhV9YGSFqGnZxmSnhQ=; b=D+Tj8vhdxkWB3KnO+0CJF5qOz7YXwFsjTKpSvsxyt2A2dFZJKdViV4uuUt/DhMIIIvFwIbYN0gpjYDNUOAvWUDvOZBan05VO/sobeAyrIr0MoGXml5YdhgqXW0wXWekRrcSDJUgmCDoU5k+ukyAohOAQrF1FyJjZFU4Lfuvvsgw= Received: from DM6PR18MB3004.namprd18.prod.outlook.com (2603:10b6:5:18c::18) by DM6PR18MB3225.namprd18.prod.outlook.com (2603:10b6:5:1cc::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2856.20; Tue, 31 Mar 2020 15:37:08 +0000 Received: from DM6PR18MB3004.namprd18.prod.outlook.com ([fe80::d5ea:e0a6:a026:2d46]) by DM6PR18MB3004.namprd18.prod.outlook.com ([fe80::d5ea:e0a6:a026:2d46%5]) with mapi id 15.20.2856.019; Tue, 31 Mar 2020 15:37:08 +0000 From: "Andrzej Ostruszka [C]" To: Harman Kalra , "Andrzej Ostruszka [C]" CC: "dev@dpdk.org" , Thomas Monjalon Thread-Topic: [dpdk-dev] [PATCH 1/4] lib: introduce IF Proxy library Thread-Index: AQHWB1kMzmfsVNiozE+8/FKVjCVLdqhi1caA Date: Tue, 31 Mar 2020 15:37:08 +0000 Message-ID: <15e8b028-a95a-18dc-812e-0263a2c3bd4b@marvell.com> References: <20200306164104.15528-1-aostruszka@marvell.com> <20200306164104.15528-2-aostruszka@marvell.com> <20200331123627.GA10566@outlook.office365.com> In-Reply-To: <20200331123627.GA10566@outlook.office365.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [199.233.58.37] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 11c2a49b-69ad-42ce-9bb7-08d7d5895fa7 x-ms-traffictypediagnostic: DM6PR18MB3225: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0359162B6D x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR18MB3004.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10009020)(4636009)(39860400002)(136003)(366004)(376002)(346002)(396003)(6486002)(5660300002)(71200400001)(6512007)(53546011)(30864003)(6506007)(81156014)(8936002)(2906002)(4326008)(8676002)(81166006)(110136005)(86362001)(64756008)(316002)(36756003)(478600001)(31696002)(66476007)(31686004)(66556008)(2616005)(66946007)(54906003)(76116006)(186003)(66446008)(26005); DIR:OUT; SFP:1101; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: le5zDsJUQiCWe3ti3zdd0JIz5u1hXyHo8KitcEbA7+OdkfpV6ppie5dCHYvmIlK6XNZSHCtKrG99RE6ZqX1drlqIJwb6ruCVbePxk/imCDGABeCxEJtc1KNDqi/AyoOZXCK2QhwA7iOIZM1LaY31Y37NI1zazoETCm1UsSyMG7qSeCpKxKtw+e7FASfrIts+CRxQeNEtP3Movw4k9YKwpsaRCzmYzm78hO/NUSqSX6wDSwMkr+E7j5ID3bL3pKQDWFLJa5VEmreyQV0krB1slhomd9UjSWPVJIZO0STPuZ6d0fdyUztafvjyw5vn9xjro0mDLS23JLXHTkXcKkE1rw41SjxMjONf+nC8kw0bqZcNF/o0NxY2louOHEAaWTIlS1KwX+wEeTQDOorXZZWs66YbvDkBsRwg0Qsy7d2um0gMtZzW/bmRN6+vVRz8ZgON x-ms-exchange-antispam-messagedata: B1IGO4fLO6YprOfNWowKD7JzHu2dsbxlzZWSK8ztZktTDRo+SSfdYOK2FPIqaNgFY4Lh5IDjZIwzQdT4x/s57SLSO7bwFDJiHslaXK9OgODx8Np/QG/h/sCP31bFepc8ryWYP/bz6vFiWhsf6OHf/Q== Content-Type: text/plain; charset="utf-8" Content-ID: <553B07822651524DB7745AD25B8F1D6C@namprd18.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 11c2a49b-69ad-42ce-9bb7-08d7d5895fa7 X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Mar 2020 15:37:08.6471 (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: weo+87n7G+0WWiIkN5JxFJJWrJjqKcCF+ypBmwO9Uhz5DQ510+kJlICUW4TWPMPe4dznIwPQrF/0NIUe2ogsTQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR18MB3225 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.676 definitions=2020-03-31_05:2020-03-31, 2020-03-31 signatures=0 Subject: Re: [dpdk-dev] [PATCH 1/4] lib: introduce IF Proxy library X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" T24gMy8zMS8yMCAyOjM2IFBNLCBIYXJtYW4gS2FscmEgd3JvdGU6DQo+IE9uIEZyaSwgTWFyIDA2 LCAyMDIwIGF0IDA1OjQxOjAxUE0gKzAxMDAsIEFuZHJ6ZWogT3N0cnVzemthIHdyb3RlOg0KWy4u Ll0NCj4+ICt2b2lkIGlmcHhfbm90aWZ5X2V2ZW50KHN0cnVjdCBydGVfaWZweF9ldmVudCAqZXYs IHN0cnVjdCBpZnB4X3Byb3h5X25vZGUgKnB4KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlmcHhfcXVl dWVfbm9kZSAqcTsNCj4+ICsJaW50IGRvbmUgPSAwOw0KPj4gKwl1aW50MTZfdCBwLCBwcm94eV9p ZDsNCj4+ICsNCj4+ICsJaWYgKHB4KSB7DQo+PiArCQlpZiAocHgtPnN0YXRlICYgREVMX1BFTkRJ TkcpDQo+PiArCQkJcmV0dXJuOw0KPj4gKwkJcHJveHlfaWQgPSBweC0+cHJveHlfaWQ7DQo+PiAr CQlSVEVfQVNTRVJUKHByb3h5X2lkICE9IFJURV9NQVhfRVRIUE9SVFMpOw0KPj4gKwkJcHgtPnN0 YXRlIHw9IElOX1VTRTsNCj4+ICsJfSBlbHNlDQo+PiArCQlwcm94eV9pZCA9IFJURV9NQVhfRVRI UE9SVFM7DQo+PiArDQo+PiArCVJURV9BU1NFUlQoZXYpOw0KPj4gKwkvKiBUaGlzIGZ1bmN0aW9u IGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCB3aXRoIGEgbG9jayBoZWxkLiAqLw0KPj4gKwlSVEVf QVNTRVJUKHJ0ZV9zcGlubG9ja190cnlsb2NrKCZpZnB4X2xvY2spID09IDApOw0KPj4gKw0KPj4g KwlpZiAoaWZweF9jYWxsYmFja3MuZnVuY3NbZXYtPnR5cGVdLmZfcHRyKSB7DQo+PiArCQl1bmlv biBjYl9wdHJfdCBjYiA9IGlmcHhfY2FsbGJhY2tzLmZ1bmNzW2V2LT50eXBlXTsNCj4+ICsNCj4+ ICsJCS8qIERyb3AgdGhlIGxvY2sgZm9yIHRoZSB0aW1lIG9mIGNhbGxiYWNrIGNhbGwuICovDQo+ PiArCQlydGVfc3BpbmxvY2tfdW5sb2NrKCZpZnB4X2xvY2spOw0KPj4gKwkJaWYgKHB4KSB7DQo+ PiArCQkJZm9yIChwID0gMDsgcCA8IFJURV9ESU0oaWZweF9wb3J0cyk7ICsrcCkgew0KPj4gKwkJ CQlpZiAoaWZweF9wb3J0c1twXSAhPSBwcm94eV9pZCB8fA0KPj4gKwkJCQkgICAgaWZweF9wb3J0 c1twXSA9PSBwKQ0KPj4gKwkJCQkJY29udGludWU7DQo+PiArCQkJCWV2LT5kYXRhLnBvcnRfaWQg PSBwOw0KPj4gKwkJCQlkb25lID0gY2IuZl9wdHIoJmV2LT5kYXRhKSB8fCBkb25lOw0KPiBTaW5j ZSBjYWxsYmFjayBhcmUgaGFuZGxlZCBhcyBEUERLIGludGVycnVwdHMsIGhvcGUgdGhlcmUgaXMg bm8gZXZlbnQNCj4gd2hpY2ggZ2V0cyBsb3N0LiBDYW5ub3QgYWZmb3JkIHRvIGxvb3NlIGEgcm91 dGUgY2hhbmdlIGV2ZW50IGFzIGtlcm5lbA0KPiBtaWdodCBub3Qgc2VuZCBpdCBhZ2Fpbi4gDQoN CldlIGhhdmUgc29tZSBwcm90ZWN0aW9uIGFnYWluc3QgdGhpcyBpbiBmb3JtIG9mIG5ldGxpbmsg c29ja2V0IGJ1ZmZlci4NCkluIGdlbmVyYWwsIGNhbGxiYWNrcyAoYXMgbm90ZWQgcHJldmlvdXNs eSBieSBNb3J0ZW4pIGNhbid0IGJsb2NrIHNvDQp0aGlzIHNob3VsZCBiZSBmaW5lIC0gd2UgbWln aHQgbmVlZCB0byBwbGF5IGFyb3VuZCB3aXRoIFNPX1JDVkJVRiBzb2NrZXQNCm9wdGlvbiBvZiB0 aGUgbmV0bGluayBzb2NrZXQgYnV0IHNvIGZhciBJIGhhdmUgbm90IGV4cGVyaWVuY2VkIGFueSBw cm9ibGVtLg0KDQo+IA0KPj4gKwkJCX0NCj4+ICsJCX0gZWxzZSB7DQo+PiArCQkJUlRFX0FTU0VS VChldi0+dHlwZSA9PSBSVEVfSUZQWF9DRkdfRE9ORSk7DQo+PiArCQkJZG9uZSA9IGNiLmNmZ19k b25lKCk7DQo+PiArCQl9DQo+PiArCQlydGVfc3BpbmxvY2tfbG9jaygmaWZweF9sb2NrKTsNCj4+ ICsJfQ0KPj4gKwlpZiAoZG9uZSkNCj4+ICsJCWdvdG8gZXhpdDsNCj4+ICsNCj4+ICsJLyogRXZl bnQgbm90ICJjb25zdW1lZCIgeWV0IHNvIHRyeSB0byBub3RpZnkgdmlhIHF1ZXVlcy4gKi8NCj4+ ICsJVEFJTFFfRk9SRUFDSChxLCAmaWZweF9xdWV1ZXMsIGVsZW0pIHsNCj4+ICsJCWlmIChweCkg ew0KPj4gKwkJCWZvciAocCA9IDA7IHAgPCBSVEVfRElNKGlmcHhfcG9ydHMpOyArK3ApIHsNCj4+ ICsJCQkJaWYgKGlmcHhfcG9ydHNbcF0gIT0gcHJveHlfaWQgfHwNCj4+ICsJCQkJICAgIGlmcHhf cG9ydHNbcF0gPT0gcCkNCj4+ICsJCQkJCWNvbnRpbnVlOw0KPj4gKwkJCQkvKiBTZXQgdGhlIHBv cnRfaWQgLSB0aGUgcmVtYWluaW5nIHBhcmFtcyBzaG91bGQNCj4+ICsJCQkJICogYmUgZmlsbGVk IGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uDQo+PiArCQkJCSAqLw0KPj4gKwkJCQlldi0+ ZGF0YS5wb3J0X2lkID0gcDsNCj4+ICsJCQkJcXVldWVfZXZlbnQoZXYsIHEtPnIpOw0KPj4gKwkJ CX0NCj4+ICsJCX0gZWxzZQ0KPj4gKwkJCXF1ZXVlX2V2ZW50KGV2LCBxLT5yKTsNCj4+ICsJfQ0K Pj4gK2V4aXQ6DQo+PiArCWlmIChweCkNCj4+ICsJCXB4LT5zdGF0ZSAmPSB+SU5fVVNFOw0KPj4g K30NCj4+ICsNCj4+ICt2b2lkIGlmcHhfY2xlYW51cF9wcm94aWVzKHZvaWQpDQo+PiArew0KPj4g KwlzdHJ1Y3QgaWZweF9wcm94eV9ub2RlICpweCwgKm5leHQ7DQo+PiArCWZvciAocHggPSBUQUlM UV9GSVJTVCgmaWZweF9wcm94aWVzKTsgcHg7IHB4ID0gbmV4dCkgew0KPj4gKwkJbmV4dCA9IFRB SUxRX05FWFQocHgsIGVsZW0pOw0KPj4gKwkJaWYgKHB4LT5zdGF0ZSAmIERFTF9QRU5ESU5HKQ0K Pj4gKwkJCWlmcHhfcHJveHlfZGVzdHJveShweCk7DQo+PiArCX0NCj4+ICt9DQo+PiArDQo+PiAr aW50IHJ0ZV9pZnB4X2xpc3Rlbih2b2lkKQ0KPj4gK3sNCj4+ICsJaW50IGVjOw0KPj4gKw0KPj4g KwlpZiAoIWlmcHhfcGxhdGZvcm0ubGlzdGVuKQ0KPj4gKwkJcmV0dXJuIC1FTk9UU1VQOw0KPj4g Kw0KPj4gKwllYyA9IGlmcHhfcGxhdGZvcm0ubGlzdGVuKCk7DQo+PiArCWlmIChlYyA9PSAwICYm IGlmcHhfcGxhdGZvcm0uZ2V0X2luZm8pDQo+PiArCQlpZnB4X3BsYXRmb3JtLmdldF9pbmZvKDAp Ow0KPiBubGlua19nZXRfaW5mbyBjYWxscyByZXF1ZXN0X2luZm8gd2l0aCBhIGlmX2luZGV4LCBw YXNzaW5nIDAgbWlnaHQNCj4gYmUgZ29vZCBpbiBjdXJyZW50IHNjZW5hcmlvIGJ1dCB2YWxpZCBp bmRleCBzaG91bGQgYmUgcGFzc2VkIHRvDQo+IGdldF9pbmZvLg0KDQowIGlzIGFuIGludmFsaWQg aWZfaW5kZXggKG9uIFdpbmRvd3MgdG9vKSBzbyBJJ3ZlIHVzZWQgaXQgdG8gZW5jb2RlICJhbGwN CmludGVyZmFjZXMiLiAgVGhpcyBpcyByZWxhdGVkIHRvIHlvdXIgbmV4dCBjb21tZW50LiAgU28g SSdsbCBleHBhbmQgb24NCnRoaXMgdGhlcmUuDQoNClsuLi5dDQo+PiArc3RhdGljDQo+PiAraW50 IHJlcXVlc3RfaW5mbyhpbnQgdHlwZSwgaW50IGluZGV4KQ0KPj4gK3sNCj4+ICsJc3RhdGljIHJ0 ZV9zcGlubG9ja190IHNlbmRfbG9jayA9IFJURV9TUElOTE9DS19JTklUSUFMSVpFUjsNCj4+ICsJ c3RydWN0IGluZm9fZ2V0IHsNCj4+ICsJCXN0cnVjdCBubG1zZ2hkciBoOw0KPj4gKwkJdW5pb24g ew0KPj4gKwkJCXN0cnVjdCBpZmluZm9tc2cgaWZtOw0KPj4gKwkJCXN0cnVjdCBpZmFkZHJtc2cg aWZhOw0KPj4gKwkJCXN0cnVjdCBydG1zZyBydG07DQo+PiArCQkJc3RydWN0IG5kbXNnIG5kbTsN Cj4+ICsJCX0gX19ydGVfYWxpZ25lZChOTE1TR19BTElHTlRPKTsNCj4+ICsJfSBpbmZvX3JlcTsN Cj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJbWVtc2V0KCZpbmZvX3JlcSwgMCwgc2l6ZW9mKGlu Zm9fcmVxKSk7DQo+PiArCS8qIEZpcnN0IGJ5dGUgb2YgdGhlc2UgbWVzc2FnZXMgaXMgZmFtaWx5 LCBzbyBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMNCj4+ICsJICogbWVtc2V0IGlzIGVub3VnaCB0 byBnZXQgYWxsIGZhbWlsaWVzLg0KPj4gKwkgKi8NCj4+ICsJUlRFX0FTU0VSVChBRl9VTlNQRUMg PT0gMCk7DQo+PiArDQo+PiArCWluZm9fcmVxLmgubmxtc2dfcGlkID0gaWZweF9waWQ7DQo+PiAr CWluZm9fcmVxLmgubmxtc2dfdHlwZSA9IHR5cGU7DQo+PiArCWluZm9fcmVxLmgubmxtc2dfZmxh Z3MgPSBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfRFVNUDsNCj4+ICsJaW5mb19yZXEuaC5ubG1zZ19s ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgaW5mb19nZXQsIGlmbSk7DQo+PiArDQo+PiArCXN3aXRjaCAo dHlwZSkgew0KPj4gKwljYXNlIFJUTV9HRVRMSU5LOg0KPj4gKwkJaW5mb19yZXEuaC5ubG1zZ19s ZW4gKz0gc2l6ZW9mKGluZm9fcmVxLmlmbSk7DQo+PiArCQlpbmZvX3JlcS5pZm0uaWZpX2luZGV4 ID0gaW5kZXg7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSBSVE1fR0VUQUREUjoNCj4+ICsJCWlu Zm9fcmVxLmgubmxtc2dfbGVuICs9IHNpemVvZihpbmZvX3JlcS5pZmEpOw0KPj4gKwkJaW5mb19y ZXEuaWZhLmlmYV9pbmRleCA9IGluZGV4Ow0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgUlRNX0dF VFJPVVRFOg0KPj4gKwkJaW5mb19yZXEuaC5ubG1zZ19sZW4gKz0gc2l6ZW9mKGluZm9fcmVxLnJ0 bSk7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSBSVE1fR0VUTkVJR0g6DQo+PiArCQlpbmZvX3Jl cS5oLm5sbXNnX2xlbiArPSBzaXplb2YoaW5mb19yZXEubmRtKTsNCj4+ICsJCWJyZWFrOw0KPj4g KwlkZWZhdWx0Og0KPj4gKwkJSUZQWF9MT0coV0FSTklORywgIlVuaGFuZGxlZCBtZXNzYWdlIHR5 cGU6ICVkIiwgdHlwZSk7DQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsJfQ0KPj4gKwkvKiBT dG9yZSByZXF1ZXN0IHR5cGUgKGFuZCBpZiBpdCBpcyBnbG9iYWwgb3IgbGluayBzcGVjaWZpYykg aW4gJ3NlcScuDQo+PiArCSAqIExhdGVyIGl0IGlzIHVzZWQgZHVyaW5nIGhhbmRsaW5nIG9mIHJl cGx5IHRvIGNvbnRpbnVlIHJlcXVlc3Rpbmcgb2YNCj4+ICsJICogaW5mb3JtYXRpb24gZHVtcCBm cm9tIHN5c3RlbSAtIGlmIG5lZWRlZC4NCj4+ICsJICovDQo+PiArCWluZm9fcmVxLmgubmxtc2df c2VxID0gaW5kZXggPDwgOCB8IHR5cGU7DQo+PiArDQo+PiArCUlGUFhfTE9HKERFQlVHLCAiXHRS ZXF1ZXN0aW5nIG1zZyAlZCBmb3I6ICV1IiwgdHlwZSwgaW5kZXgpOw0KPj4gKw0KPj4gKwlydGVf c3BpbmxvY2tfbG9jaygmc2VuZF9sb2NrKTsNCj4+ICsJcmV0ID0gc2VuZChpZnB4X2lycS5mZCwg JmluZm9fcmVxLCBpbmZvX3JlcS5oLm5sbXNnX2xlbiwgMCk7DQo+PiArCWlmIChyZXQgPCAwKSB7 DQo+PiArCQlJRlBYX0xPRyhFUlIsICJGYWlsZWQgdG8gc2VuZCBuZXRsaW5rIG1zZzogJWQiLCBl cnJubyk7DQo+PiArCQlydGVfZXJybm8gPSBlcnJubzsNCj4+ICsJfQ0KPj4gKwlydGVfc3Bpbmxv Y2tfdW5sb2NrKCZzZW5kX2xvY2spOw0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCg0K Wy4uLl0NCg0KPj4gK3N0YXRpYw0KPj4gK3ZvaWQgaWZfcHJveHlfaW50cl9jYWxsYmFjayh2b2lk ICphcmcgX19ydGVfdW51c2VkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IG5sbXNnaGRyICpoOw0KPj4g KwlzdHJ1Y3Qgc29ja2FkZHJfbmwgYWRkcjsNCj4+ICsJc29ja2xlbl90IGFkZHJfbGVuOw0KPj4g KwljaGFyIGJ1Zls4MTkyXTsNCj4+ICsJc3NpemVfdCBsZW47DQo+PiArDQo+PiArcmVzdGFydDoN Cj4+ICsJbGVuID0gcmVjdmZyb20oaWZweF9pcnEuZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDAsDQo+ PiArCQkgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCAmYWRkcl9sZW4pOw0KPj4gKwlp ZiAobGVuIDwgMCkgew0KPj4gKwkJaWYgKGVycm5vID09IEVJTlRSKSB7DQo+PiArCQkJSUZQWF9M T0coREVCVUcsICJyZWN2bXNnKCkgaW50ZXJydXB0ZWQiKTsNCj4+ICsJCQlnb3RvIHJlc3RhcnQ7 DQo+PiArCQl9DQo+PiArCQlJRlBYX0xPRyhFUlIsICJGYWlsZWQgdG8gcmVhZCBuZXRsaW5rIG1z ZzogJWxkIChlcnJubyAlZCkiLA0KPj4gKwkJCSBsZW4sIGVycm5vKTsNCj4+ICsJCXJldHVybjsN Cj4+ICsJfQ0KPj4gKwlpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKGFkZHIpKSB7DQo+PiArCQlJRlBY X0xPRyhFUlIsICJJbnZhbGlkIG5ldGxpbmsgYWRkciBzaXplOiAlZCIsIGFkZHJfbGVuKTsNCj4+ ICsJCXJldHVybjsNCj4+ICsJfQ0KPj4gKwlJRlBYX0xPRyhERUJVRywgIlJlYWQgJWx1IGJ5dGVz IChidWYgJWx1KSBmcm9tICV1LyV1IiwgbGVuLA0KPj4gKwkJIHNpemVvZihidWYpLCBhZGRyLm5s X3BpZCwgYWRkci5ubF9ncm91cHMpOw0KPj4gKw0KPj4gKwlmb3IgKGggPSAoc3RydWN0IG5sbXNn aGRyICopYnVmOyBOTE1TR19PSyhoLCBsZW4pOw0KPj4gKwkJCQkJIGggPSBOTE1TR19ORVhUKGgs IGxlbikpIHsNCj4+ICsJCUlGUFhfTE9HKERFQlVHLCAiUmVjdiBtc2c6ICV1ICgldS8ldS8ldSBz ZXEvZmxhZ3MvcGlkKSIsDQo+PiArCQkJIGgtPm5sbXNnX3R5cGUsIGgtPm5sbXNnX3NlcSwgaC0+ bmxtc2dfZmxhZ3MsDQo+PiArCQkJIGgtPm5sbXNnX3BpZCk7DQo+PiArDQo+PiArCQlzd2l0Y2gg KGgtPm5sbXNnX3R5cGUpIHsNCj4+ICsJCWNhc2UgUlRNX05FV0xJTks6DQo+PiArCQljYXNlIFJU TV9ERUxMSU5LOg0KPj4gKwkJCWhhbmRsZV9saW5rKGgpOw0KPj4gKwkJCWJyZWFrOw0KPj4gKwkJ Y2FzZSBSVE1fTkVXQUREUjoNCj4+ICsJCWNhc2UgUlRNX0RFTEFERFI6DQo+PiArCQkJaGFuZGxl X2FkZHIoaCwgaC0+bmxtc2dfdHlwZSA9PSBSVE1fREVMQUREUik7DQo+PiArCQkJYnJlYWs7DQo+ PiArCQljYXNlIFJUTV9ORVdST1VURToNCj4+ICsJCWNhc2UgUlRNX0RFTFJPVVRFOg0KPj4gKwkJ CWhhbmRsZV9yb3V0ZShoLCBoLT5ubG1zZ190eXBlID09IFJUTV9ERUxST1VURSk7DQo+PiArCQkJ YnJlYWs7DQo+PiArCQljYXNlIFJUTV9ORVdORUlHSDoNCj4+ICsJCWNhc2UgUlRNX0RFTE5FSUdI Og0KPj4gKwkJCWhhbmRsZV9uZWlnaChoLCBoLT5ubG1zZ190eXBlID09IFJUTV9ERUxORUlHSCk7 DQo+PiArCQkJYnJlYWs7DQo+PiArCQl9DQo+PiArDQo+PiArCQkvKiBJZiB0aGlzIGlzIGEgcmVw bHkgZm9yIGdsb2JhbCByZXF1ZXN0IHRoZW4gZm9sbG93IHVwIHdpdGgNCj4+ICsJCSAqIGFkZGl0 aW9uYWwgcmVxdWVzdHMgYW5kIG5vdGlmeSBhYm91dCBmaW5pc2guDQo+PiArCQkgKi8NCj4+ICsJ CWlmIChoLT5ubG1zZ19waWQgPT0gaWZweF9waWQgJiYgKGgtPm5sbXNnX3NlcSA+PiA4KSA9PSAw ICYmDQo+PiArCQkgICAgaC0+bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKSB7DQo+IFNvcnJ5LCBi dXQgaW4gd2hhdCBzY2VuYXJpbyB3aWxsIHRoZSBmbG93IHJlYWNoIGhlcmUuDQoNCk9LLiAgU28g bGV0IG1lIGRlc2NyaWJlIHRoZSBpbml0aWFsaXphdGlvbiBmbG93IG9uIExpbnV4ICh0aGUgb25s eQ0KYXZhaWxhYmxlIGltcGxlbWVudGF0aW9uIHJpZ2h0IG5vdykuICBXaGVuIHdlIHN0YXJ0IGxp c3RlbmluZyB3ZSBmaXJzdA0KcmVxdWVzdCBkdW1waW5nIG9mIHRoZSB3aG9sZSBjb25maWd1cmF0 aW9uLiAgV2UgY2FsbCBnZXRfaW5mbygwKS4gIEFnYWluDQp0aGlzICcwJyBpcyBpbnZhbGlkIGlm X2luZGV4IHNvIGlzIHVzZWQgYXMgImFsbCBpbnRlZmFjZXMiIHZhbHVlLg0KDQpUaGlzIGluZGV4 IGlzIHdyaXR0ZW4gaW4gTmV0bGluayBtc2cgaGVhZGVycyBhbmQgaXMgY291cGxlZCB3aXRoDQpw b3NzaWJsZSBmaWx0ZXJpbmcgb2YgbWVzc2FnZXMgb24ga2VybmVsIHNpZGUgKHNlZSBjb21tZW50 IGluDQpubGlua19saXN0ZW4oKSBiZWxvdykuICBXaGVuIHdlIHJlcXVlc3QgaW5mbyB3ZSBhbHdh eXMgdXNlIFJFUVVFU1R8RFVNUA0KZmxhZ3MgYnV0IG9uIG5ld2VyIGtlcm5lbHMgdGhlcmUgaXMg YW4gb3B0aW9uICh3aGVuIGlmX2luZGV4IGlzDQpub24temVybykgdG8gc2VuZCBvdXQgb25seSBp bmZvcm1hdGlvbiBmb3IgdGhhdCBpbnRlcmFjZSBpbnN0ZWFkIG9mDQpkdW1waW5nIGFsbCBpbmZv LiAgSW4gYWRkaXRpb24gaXQgaXMgZW5jb2RlZCBpbiBubG1zZ19zZXEuDQoNClNvIHRoZXJlIGFy ZSBkaWZmZXJlbnQgdHlwZXMgb2YgaW5mbyB3ZSBnZXQgZnJvbSBrZXJuZWw6DQpsaW5rL2FkZHJl c3Mvcm91dGluZy9uZWlnaGJvdXJpbmcuICBJbnN0ZWFkIG9mIHJlcXVlc3RpbmcgdGhlbSBhbGwg YXQNCm9uY2UgSSBkbyB0aGF0IHNlcXVlbnRpYWxseSBhbmQgaW4gZ2V0X2luZm8oKSBJIHN0YXJ0 IHdpdGggYSByZXF1ZXN0IGZvcg0KbGluayBpbmZvLg0KDQpUaGlzIGNvZGUgdGhhdCB5b3UgYXNr ZWQgYWJvdXQgYWJvdmUgaXMgYSBjaGVjayB0aGF0Og0KLSB0aGlzIG1lc3NhZ2UgaXMgYSBkaXJl Y3QgcmVwbHkgdG8gdXMgKHBpZCkNCi0gYW5kIHJlcGx5IGZvciBnbG9iYWwgcmVxdWVzdCAoaW5k ZXggPSAwKQ0KLSBhbmQgdGhpcyBpcyB0aGUgbGFzdCBwYXJ0IG9mIG11bHRpLXNlZ21lbnRlZCBt ZXNzYWdlICh0aGlzIGlzIGhvdw0KTGludXggZHVtcHMgaW5mbyAtIHNlbmRzIGNvdXBsZSBvZiBt ZXNzYWdlcyB3aXRoIHRoZSBhZGRpdGlvbmFsICJET05FIg0KbXNnIGF0IHRoZSBlbmQpLg0KDQpB bmQgdGhlIGxvZ2ljIGJlbG93IGlzIHNlcXVlbmNpbmcgTElOSy0+QUREUi0+Uk9VVEUtPk5FSUdI LT4gd2UgYXJlIGRvbmUNCnNvIG5vdGlmeSB0aGUgdXNlciBhYm91dCB0aGF0LiAgVGhhdCB3YXkg d2UgaGF2ZSBhdCBtb3N0IG9uZSBhY3RpdmUNCiJ0cmFuc2FjdGlvbiIgd2l0aCBrZXJuZWwuDQoN Cj4+ICsJCQlpZiAoKGgtPm5sbXNnX3NlcSAmIDB4RkYpID09IFJUTV9HRVRMSU5LKQ0KPj4gKwkJ CQlyZXF1ZXN0X2luZm8oUlRNX0dFVEFERFIsIDApOw0KPj4gKwkJCWVsc2UgaWYgKChoLT5ubG1z Z19zZXEgJiAweEZGKSA9PSBSVE1fR0VUQUREUikNCj4+ICsJCQkJcmVxdWVzdF9pbmZvKFJUTV9H RVRST1VURSwgMCk7DQo+PiArCQkJZWxzZSBpZiAoKGgtPm5sbXNnX3NlcSAmIDB4RkYpID09IFJU TV9HRVRST1VURSkNCj4+ICsJCQkJcmVxdWVzdF9pbmZvKFJUTV9HRVRORUlHSCwgMCk7DQo+PiAr CQkJZWxzZSB7DQo+PiArCQkJCXN0cnVjdCBydGVfaWZweF9ldmVudCBldiA9IHsNCj4+ICsJCQkJ CS50eXBlID0gUlRFX0lGUFhfQ0ZHX0RPTkUNCj4+ICsJCQkJfTsNCj4+ICsNCj4+ICsJCQkJUlRF X0FTU0VSVCgoaC0+bmxtc2dfc2VxICYgMHhGRikgPT0NCj4+ICsJCQkJCQlSVE1fR0VUTkVJR0gp Ow0KPj4gKwkJCQlydGVfc3BpbmxvY2tfbG9jaygmaWZweF9sb2NrKTsNCj4+ICsJCQkJaWZweF9u b3RpZnlfZXZlbnQoJmV2LCBOVUxMKTsNCj4+ICsJCQkJcnRlX3NwaW5sb2NrX3VubG9jaygmaWZw eF9sb2NrKTsNCj4+ICsJCQl9DQo+PiArCQl9DQo+PiArCX0NCj4+ICsJSUZQWF9MT0coREVCVUcs ICJGaW5pc2hlZCBtc2cgbG9vcDogJWxkIGJ5dGVzIGxlZnQiLCBsZW4pOw0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMNCj4+ICtpbnQgbmxpbmtfbGlzdGVuKHZvaWQpDQo+PiArew0KPj4gKwlzdHJ1 Y3Qgc29ja2FkZHJfbmwgYWRkciA9IHsNCj4+ICsJCS5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LLA0K Pj4gKwkJLm5sX3BpZCA9IDAsDQo+PiArCX07DQo+PiArCXNvY2tsZW5fdCBhZGRyX2xlbiA9IHNp emVvZihhZGRyKTsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJaWYgKGlmcHhfaXJxLmZkICE9 IC0xKSB7DQo+PiArCQlydGVfZXJybm8gPSBFQlVTWTsNCj4+ICsJCXJldHVybiAtMTsNCj4+ICsJ fQ0KPj4gKw0KPj4gKwlhZGRyLm5sX2dyb3VwcyA9IDEgPDwgKFJUTkxHUlBfTElOSy0xKQ0KPj4g KwkJCXwgMSA8PCAoUlROTEdSUF9ORUlHSC0xKQ0KPj4gKwkJCXwgMSA8PCAoUlROTEdSUF9JUFY0 X0lGQUREUi0xKQ0KPj4gKwkJCXwgMSA8PCAoUlROTEdSUF9JUFY2X0lGQUREUi0xKQ0KPj4gKwkJ CXwgMSA8PCAoUlROTEdSUF9JUFY0X1JPVVRFLTEpDQo+PiArCQkJfCAxIDw8IChSVE5MR1JQX0lQ VjZfUk9VVEUtMSk7DQo+PiArDQo+PiArCWlmcHhfaXJxLmZkID0gc29ja2V0KEFGX05FVExJTkss IFNPQ0tfUkFXIHwgU09DS19DTE9FWEVDLA0KPj4gKwkJCQkgTkVUTElOS19ST1VURSk7DQo+PiAr CWlmIChpZnB4X2lycS5mZCA9PSAtMSkgew0KPj4gKwkJSUZQWF9MT0coRVJSLCAiRmFpbGVkIHRv IGNyZWF0ZSBuZXRsaW5rIHNvY2tldDogJWQiLCBlcnJubyk7DQo+PiArCQlnb3RvIGVycm9yOw0K Pj4gKwl9DQo+PiArCS8qIFN0YXJ0aW5nIHdpdGgga2VybmVsIDQuMTkgeW91IGNhbiByZXF1ZXN0 IGR1bXAgZm9yIGEgc3BlY2lmaWMNCj4+ICsJICogaW50ZXJmYWNlIGFuZCBrZXJuZWwgd2lsbCBm aWx0ZXIgb3V0IGFuZCBzZW5kIG9ubHkgcmVsZXZhbnQgaW5mby4NCj4+ICsJICogT3RoZXJ3aXNl IE5MTV9GX0RVTVAgd2lsbCBnZW5lcmF0ZSBpbmZvIGZvciBhbGwgaW50ZXJmYWNlcyBhbmQgeW91 DQo+PiArCSAqIG5lZWQgdG8gZmlsdGVyIHRoZW0geW91cnNlbGYuDQo+PiArCSAqLw0KPj4gKyNp ZmRlZiBORVRMSU5LX0RVTVBfU1RSSUNUX0NISw0KPj4gKwlyZXQgPSAxOyAvKiB1c2UgdGhpcyB2 YXIgYWxzbyBhcyBhbiBpbnB1dCBwYXJhbSAqLw0KPj4gKwlyZXQgPSBzZXRzb2Nrb3B0KGlmcHhf aXJxLmZkLCBTT0xfU09DS0VULCBORVRMSU5LX0RVTVBfU1RSSUNUX0NISywNCj4+ICsJCQkgJnJl dCwgc2l6ZW9mKHJldCkpOw0KPj4gKwlpZiAocmV0IDwgMCkgew0KPj4gKwkJSUZQWF9MT0coRVJS LCAiRmFpbGVkIHRvIHNldCBzb2NrZXQgb3B0aW9uOiAlZCIsIGVycm5vKTsNCj4+ICsJCWdvdG8g ZXJyb3I7DQo+PiArCX0NCj4+ICsjZW5kaWYNCj4+ICsNCj4+ICsJcmV0ID0gYmluZChpZnB4X2ly cS5mZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBhZGRyX2xlbik7DQo+PiArCWlmIChyZXQg PCAwKSB7DQo+PiArCQlJRlBYX0xPRyhFUlIsICJGYWlsZWQgdG8gYmluZCBzb2NrZXQ6ICVkIiwg ZXJybm8pOw0KPj4gKwkJZ290byBlcnJvcjsNCj4+ICsJfQ0KPj4gKwlyZXQgPSBnZXRzb2NrbmFt ZShpZnB4X2lycS5mZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCAmYWRkcl9sZW4pOw0KPj4g KwlpZiAocmV0IDwgMCkgew0KPj4gKwkJSUZQWF9MT0coRVJSLCAiRmFpbGVkIHRvIGdldCBzb2Nr ZXQgYWRkcjogJWQiLCBlcnJubyk7DQo+PiArCQlnb3RvIGVycm9yOw0KPj4gKwl9IGVsc2Ugew0K Pj4gKwkJaWZweF9waWQgPSBhZGRyLm5sX3BpZDsNCj4+ICsJCUlGUFhfTE9HKERFQlVHLCAiQXNz aWduZWQgcG9ydCBJRDogJXUiLCBhZGRyLm5sX3BpZCk7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0 ID0gcnRlX2ludHJfY2FsbGJhY2tfcmVnaXN0ZXIoJmlmcHhfaXJxLCBpZl9wcm94eV9pbnRyX2Nh bGxiYWNrLA0KPj4gKwkJCQkJIE5VTEwpOw0KPj4gKwlpZiAocmV0ID09IDApDQo+PiArCQlyZXR1 cm4gMDsNCj4+ICsNCj4+ICtlcnJvcjoNCj4+ICsJcnRlX2Vycm5vID0gZXJybm87DQo+PiArCWlm IChpZnB4X2lycS5mZCAhPSAtMSkgew0KPj4gKwkJY2xvc2UoaWZweF9pcnEuZmQpOw0KPj4gKwkJ aWZweF9pcnEuZmQgPSAtMTsNCj4+ICsJfQ0KPj4gKwlyZXR1cm4gLTE7DQo+PiArfQ0KWy4uLl0N CklmIHlvdSBhcmUgcGxheWluZyB3aXRoIHRoaXMgbGlicmFyeSAocnVubmluZyB0ZXN0IGNhc2Ug b3IgdGhlIGV4ZW1wbGFyeQ0KYXBwbGljYXRpb24pIGFuZCB3b3VsZCBsaWtlIHRvIGhhdmUgYmV0 dGVyIHZpZXcgd2hhdCBpcyBnb2luZyBvbiB5b3UgY2FuDQphZGQgIi0tbG9nPWxpYi5pZl9wcm94 eTpkZWJ1ZyIgdG8gdGhlIGFyZ3VtZW50cyBsaXN0Lg0KDQpUaGFua3MgZm9yIHRha2luZyBhIGxv b2sgYXQgdGhpcy4gIFRoZSBtb3JlIHBlb3BsZSBkbyB0aGlzIHRoZSBiZXR0ZXINCnRoaXMgc2hv dWxkIGJlLiAgRS5nLiBleHBsYWluaW5nIGluaXRpYWxpemF0aW9uIGZsb3cgdG8geW91IG1hZGUg bWUNCnJlYWxpemUgdGhhdCB0aGUgdGhlcmUgaXMgYW5vdGhlciBjYXNlIHdoZXJlIEkgcmVxdWVz dCBpbmZvIHdoaWNoIGlzIG5vdA0KaGFuZGxlZCB3ZWxsIC0gbm9ybWFsbHkgdXNlciBzaG91bGQg YmluZCB0aGUgcHJveGllcyBhbmQgc3RhcnQNCmxpc3RlbmluZy4gIEJ1dCBpZiBmb3Igc29tZSBy ZWFzb24gdXNlciBiaW5kcyBwcm94eSBsYXRlciwgZHVyaW5nDQpsaXN0ZW5pbmcsIEkgcmVxdWVz dCBpbmZvIGZvciB0aGF0IHBhcnRpY3VsYXIgaW50ZXJmYWNlIGJ1dA0KaW1wbGVtZW50YXRpb24g d2lsbCByZXF1ZXN0IG9ubHkgbGluayBsZXZlbCBhbmQgd2lsbCBub3QgZm9sbG93IHdpdGgNCnJl cXVlc3QgZm9yIG90aGVyIGluZm8uICBJIHdpbGwgZml4IHRoaXMgaW4gdGhlIG5leHQgdmVyc2lv bi4NCg0KV2l0aCByZWdhcmRzDQpBbmRyemVqIE9zdHJ1c3prYQ0K