From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 19A38A00E6 for ; Fri, 14 Jun 2019 20:41:30 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 002861D5C8; Fri, 14 Jun 2019 20:41:28 +0200 (CEST) Received: from us-smtp-delivery-181.mimecast.com (us-smtp-delivery-181.mimecast.com [216.205.24.181]) by dpdk.org (Postfix) with ESMTP id 96B831D5C3 for ; Fri, 14 Jun 2019 20:41:27 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rbbn.com; s=mimecast20180816; t=1560537686; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=bQWrOqs7gxcnDAW18uJ5GwlzMK7ohHa2Dc9iMUJD/8w=; b=RaafWERZU80PylWijHvk1WTER/wJ5+eFqit/kr6N3RmVQ+w8Y2Nf94mFduz+QV5rp5d7xD +S/IBR4/5/h9AdGAU3nI4cw4/6qS25pTxb2B0Lo0xCOXgIa2/xibtzx20s+TFkfTZ9b2H8 BzLMZEfZcG/6AuB1N9yA9PUvpGnJG1Y= Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02lp2056.outbound.protection.outlook.com [104.47.36.56]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-177-waoipy-4Mym2atSGH52xYg-1; Fri, 14 Jun 2019 14:41:25 -0400 Received: from BN7PR03MB3892.namprd03.prod.outlook.com (20.176.177.22) by BN7PR03MB3777.namprd03.prod.outlook.com (20.176.26.214) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1987.11; Fri, 14 Jun 2019 18:41:21 +0000 Received: from BN7PR03MB3892.namprd03.prod.outlook.com ([fe80::29e6:3f50:b4a6:9a08]) by BN7PR03MB3892.namprd03.prod.outlook.com ([fe80::29e6:3f50:b4a6:9a08%3]) with mapi id 15.20.1987.012; Fri, 14 Jun 2019 18:41:21 +0000 From: "Dey, Souvik" To: Ferruh Yigit , Yangchao Zhou , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH] kni: fix possible kernel crash with va2pa Thread-Index: AQHUzzee/hbS2GbBNE6F1G6CwlV8H6X+5mSAgJ08WkA= Date: Fri, 14 Jun 2019 18:41:21 +0000 Message-ID: References: <20190228073010.49716-1-zhouyates@gmail.com> <9c7dcfd6-d55c-f5f6-b82c-461bc773dee4@intel.com> In-Reply-To: <9c7dcfd6-d55c-f5f6-b82c-461bc773dee4@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [208.45.178.4] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c21b5cd1-6790-4ab0-8aed-08d6f0f7e54c x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020); SRVR:BN7PR03MB3777; x-ms-traffictypediagnostic: BN7PR03MB3777: x-ms-exchange-purlcount: 2 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-forefront-prvs: 0068C7E410 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(346002)(396003)(376002)(39860400002)(136003)(199004)(189003)(25786009)(99286004)(68736007)(102836004)(2501003)(2906002)(476003)(11346002)(8676002)(6246003)(81166006)(3846002)(6116002)(790700001)(446003)(8936002)(6436002)(7696005)(81156014)(76176011)(6506007)(53546011)(26005)(73956011)(76116006)(64756008)(66476007)(66556008)(33656002)(236005)(66446008)(9686003)(229853002)(7736002)(53936002)(186003)(66066001)(74316002)(6306002)(55016002)(54896002)(14444005)(52536014)(256004)(316002)(478600001)(14454004)(71190400001)(71200400001)(486006)(86362001)(110136005)(66946007)(5660300002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN7PR03MB3777; H:BN7PR03MB3892.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: edAgq15+vblc+rfM/Ztq5saibhdV4Ssm+arcXbQW7IPPySJtXBza8jHjqZHQ3p9RSOkL8eNBiIHJegTimOWcQMdNpJZBNBLWNJwK+rXva22UJr/M/UtXHCDJ8+W95bGHwqvuUwX4snxML3JoRz87NvUYo58hnEtRCoBkoA1tPGnoUQ35W1utK2yNXfcc4OZajGMPMb2zhDkRcJLu45QCDy0U19DdoTwY1GbA98uOUPApCjnJ9w/vibEPLQYFSSKXPnHCD9spyytaOHaedk3rbCVr9kInEEMirVTpP1nwH2zYBWsiIET7X132bXproRNgK19FBOpR32lcXK4ziHXWVYkWsh7j3UcIwO/EL+AVR/jROtc6rsGquIKON9XnenPb1XaRt7HQQIEM8IP4mv3HCMmJeK8cGYke1SRjafF+Liw= MIME-Version: 1.0 X-OriginatorOrg: rbbn.com X-MS-Exchange-CrossTenant-Network-Message-Id: c21b5cd1-6790-4ab0-8aed-08d6f0f7e54c X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jun 2019 18:41:21.3351 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 29a671dc-ed7e-4a54-b1e5-8da1eb495dc3 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: sodey@rbbn.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PR03MB3777 X-MC-Unique: waoipy-4Mym2atSGH52xYg-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH] kni: fix possible kernel crash with va2pa 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" V2FzIHRoZXJlIGFueSB1cGRhdGUgdG8gdGhpcyBwYXRjaCAsIEkgYW0gYWxzbyBzZWVpbmcga2Vy bmVsIGNyYXNoIGluIGtuaV9uZXRfcnhfbm9ybWFsIGR1ZWluZyBza2JfcHV0IHdoaWNoIGlzIGhh cHBlbmluZyBmb3IgY2hhaW5lZCBtYnVmcy4NCg0KLS0NClJlZ2FyZHMsDQpTb3V2aWsNCg0KDQpG cm9tOiBkZXYgPGRldi1ib3VuY2VzQGRwZGsub3JnPiBPbiBCZWhhbGYgT2YgRmVycnVoIFlpZ2l0 DQpTZW50OiBXZWRuZXNkYXksIE1hcmNoIDYsIDIwMTkgMTI6MzEgUE0NClRvOiBZYW5nY2hhbyBa aG91IDx6aG91eWF0ZXNAZ21haWwuY29tPjsgZGV2QGRwZGsub3JnDQpTdWJqZWN0OiBSZTogW2Rw ZGstZGV2XSBbUEFUQ0hdIGtuaTogZml4IHBvc3NpYmxlIGtlcm5lbCBjcmFzaCB3aXRoIHZhMnBh DQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpOT1RJQ0U6IFRoaXMgZW1haWwg d2FzIHJlY2VpdmVkIGZyb20gYW4gRVhURVJOQUwgc2VuZGVyDQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXw0KDQpPbiAyLzI4LzIwMTkgNzozMCBBTSwgWWFuZ2NoYW8gWmhvdSB3cm90 ZToNCj4gdmEycGEgZGVwZW5kcyBvbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhbmQgdmlydHVhbCBh ZGRyZXNzIG9mZnNldCBvZg0KPiBjdXJyZW50IG1idWYuIEl0IG1heSBnZXQgdGhlIHdyb25nIHBo eXNpY2FsIGFkZHJlc3Mgb2YgbmV4dCBtYnVmIHdoaWNoDQo+IGFsbG9jYXRlZCBpbiBhbm90aGVy IGh1Z2VwYWdlIHNlZ21lbnQuDQoNCkhpIFlhbmdjaGFvLA0KDQpUaGUgcHJvYmxlbSB5b3UgZGVz Y3JpYmVkIHNlZW1zIHZhbGlkLCB3aGVuIGN1cnJlbnQgbWJ1ZiBhbmQgdGhlIG1idWYgcG9pbnRl ZCBidQ0KbmV4dCBwb2ludGVyIGZyb20gZGlmZmVyZW50IChodWdlKXBhZ2VzLCBhZGRyZXNzIGNh bGN1bGF0aW9uIHdpbGwgYmUgd3JvbmcuDQoNCkNhbiB5b3UgYWJsZSB0byByZXByb2R1Y2UgdGhl IGlzc3VlLCBvciByZWNvZ25pemVkIHRoZSBwcm9ibGVtIHRoZW9yZXRpY2FsbHk/DQoNCj4NCj4g U2lnbmVkLW9mZi1ieTogWWFuZ2NoYW8gWmhvdSA8emhvdXlhdGVzQGdtYWlsLmNvbTxtYWlsdG86 emhvdXlhdGVzQGdtYWlsLmNvbT4+DQo+IC0tLQ0KPiBrZXJuZWwvbGludXgva25pL2tuaV9uZXQu YyB8IDE2ICsrLS0tLS0tLS0tLS0tLS0NCj4gLi4uL2VhbC9pbmNsdWRlL2V4ZWMtZW52L3J0ZV9r bmlfY29tbW9uLmggfCA0ICsrKysNCj4gbGliL2xpYnJ0ZV9rbmkvcnRlX2tuaS5jIHwgMTUgKysr KysrKysrKysrKystDQo+IDMgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTUgZGVs ZXRpb25zKC0pDQo+DQo+IGRpZmYgLS1naXQgYS9rZXJuZWwvbGludXgva25pL2tuaV9uZXQuYyBi L2tlcm5lbC9saW51eC9rbmkva25pX25ldC5jDQo+IGluZGV4IDczNzFiNmQ1OC4uY2FlZjg3NTRm IDEwMDY0NA0KPiAtLS0gYS9rZXJuZWwvbGludXgva25pL2tuaV9uZXQuYw0KPiArKysgYi9rZXJu ZWwvbGludXgva25pL2tuaV9uZXQuYw0KPiBAQCAtNjEsMTggKzYxLDYgQEAga3ZhMmRhdGFfa3Zh KHN0cnVjdCBydGVfa25pX21idWYgKm0pDQo+IHJldHVybiBwaHlzX3RvX3ZpcnQobS0+YnVmX3Bo eXNhZGRyICsgbS0+ZGF0YV9vZmYpOw0KPiB9DQo+DQo+IC0vKiB2aXJ0dWFsIGFkZHJlc3MgdG8g cGh5c2ljYWwgYWRkcmVzcyAqLw0KPiAtc3RhdGljIHZvaWQgKg0KPiAtdmEycGEodm9pZCAqdmEs IHN0cnVjdCBydGVfa25pX21idWYgKm0pDQo+IC17DQo+IC0gdm9pZCAqcGE7DQo+IC0NCj4gLSBw YSA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXZhIC0NCj4gLSAoKHVuc2lnbmVkIGxvbmcpbS0+ YnVmX2FkZHIgLQ0KPiAtICh1bnNpZ25lZCBsb25nKW0tPmJ1Zl9waHlzYWRkcikpOw0KPiAtIHJl dHVybiBwYTsNCj4gLX0NCj4gLQ0KPiAvKg0KPiAqIEl0IGNhbiBiZSBjYWxsZWQgdG8gcHJvY2Vz cyB0aGUgcmVxdWVzdC4NCj4gKi8NCj4gQEAgLTM2Myw3ICszNTEsNyBAQCBrbmlfbmV0X3J4X25v cm1hbChzdHJ1Y3Qga25pX2RldiAqa25pKQ0KPiBpZiAoIWt2YS0+bmV4dCkNCj4gYnJlYWs7DQo+ DQo+IC0ga3ZhID0gcGEya3ZhKHZhMnBhKGt2YS0+bmV4dCwga3ZhKSk7DQo+ICsga3ZhID0gcGEy a3ZhKGt2YS0+bmV4dF9wYSk7DQo+IGRhdGFfa3ZhID0ga3ZhMmRhdGFfa3ZhKGt2YSk7DQo+IH0N Cj4gfQ0KPiBAQCAtNTQ1LDcgKzUzMyw3IEBAIGtuaV9uZXRfcnhfbG9fZmlmb19za2Ioc3RydWN0 IGtuaV9kZXYgKmtuaSkNCj4gaWYgKCFrdmEtPm5leHQpDQo+IGJyZWFrOw0KPg0KPiAtIGt2YSA9 IHBhMmt2YSh2YTJwYShrdmEtPm5leHQsIGt2YSkpOw0KPiArIGt2YSA9IHBhMmt2YShrdmEtPm5l eHRfcGEpOw0KPiBkYXRhX2t2YSA9IGt2YTJkYXRhX2t2YShrdmEpOw0KPiB9DQo+IH0NCj4gZGlm ZiAtLWdpdCBhL2xpYi9saWJydGVfZWFsL2xpbnV4YXBwL2VhbC9pbmNsdWRlL2V4ZWMtZW52L3J0 ZV9rbmlfY29tbW9uLmggYi9saWIvbGlicnRlX2VhbC9saW51eGFwcC9lYWwvaW5jbHVkZS9leGVj LWVudi9ydGVfa25pX2NvbW1vbi5oDQo+IGluZGV4IDVhZmEwODcxMy4uNjA4ZjVjMTNmIDEwMDY0 NA0KPiAtLS0gYS9saWIvbGlicnRlX2VhbC9saW51eGFwcC9lYWwvaW5jbHVkZS9leGVjLWVudi9y dGVfa25pX2NvbW1vbi5oDQo+ICsrKyBiL2xpYi9saWJydGVfZWFsL2xpbnV4YXBwL2VhbC9pbmNs dWRlL2V4ZWMtZW52L3J0ZV9rbmlfY29tbW9uLmgNCj4gQEAgLTg3LDYgKzg3LDEwIEBAIHN0cnVj dCBydGVfa25pX21idWYgew0KPiBjaGFyIHBhZDNbOF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVk X18oUlRFX0NBQ0hFX0xJTkVfTUlOX1NJWkUpKSk7DQo+IHZvaWQgKnBvb2w7DQo+IHZvaWQgKm5l eHQ7DQo+ICsgdW5pb24gew0KPiArIHVpbnQ2NF90IHR4X29mZmxvYWQ7DQo+ICsgdm9pZCAqbmV4 dF9wYTsgLyoqPCBQaHlzaWNhbCBhZGRyZXNzIG9mIG5leHQgbWJ1Zi4gKi8NCj4gKyB9Ow0KDQpU aGlzIHdpbGwgY2F1c2Ugb3ZlcndyaXRlIHRoZSAndHhfb2ZmbG9hZCcgdmlhICduZXh0X3BhJywg d2UgZG9uJ3QgdXNlDQp0eF9vZmZsb2FkIGluIEtOSSBidXQgbm90IHN1cmUgYWJvdXQgcmVtb3Zp bmcgcG90ZW50aWFsIHVzZSBmb3IgZnV0dXJlLg0KDQpXaGF0IGRvIHlvdSB0aGluayBhYm91dCBj b252ZXJ0aW5nICdtLT5uZXh0JyB0byBwaHlzaWNhbCBhZGRyZXNzIGJlZm9yZSBwdXR0aW5nDQp0 aGVtIGludG8gJ3J4X3EnLCBhbmQgaW4ga2VybmVsIHNpZGUgYWZ0ZXIgZGF0YSBjb3BpZWQgdG8g c2tiIGNvbnZlcnQgJ20tPm5leHQnDQpiYWNrIHRvIHZpcnR1YWwgYWRkcmVzcyBiZWZvcmUgcHV0 dGluZyBpdCBpbnRvICdmcmVlX3EnID8NCkkgdGhpbmsgYm90aCBhZGRyZXNzIGNvbnZlcnNpb24g Y2FuIGJlIHBvc3NpYmxlIHRvIGRvLCBhIGxpdHRsZSB0cmlja3kgYmVjYXVzZQ0KYWRkcmVzcyBj b252ZXJzaW9uIHNob3VsZCBiZSBjYWxjdWxhdGVkIGluIG5leHQgbWJ1ZiBhbmQgcHJldmlvdXMg bWJ1Zi0+bmV4dCBpbg0KdGhlIGNoYWluIHNob3VsZCBiZSB1cGRhdGVkLg0KDQo+IH07DQo+DQo+ IC8qDQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2tuaS9ydGVfa25pLmMgYi9saWIvbGlicnRl X2tuaS9ydGVfa25pLmMNCj4gaW5kZXggNzNhZWNjY2NmLi4xYWFlYmNmYTEgMTAwNjQ0DQo+IC0t LSBhL2xpYi9saWJydGVfa25pL3J0ZV9rbmkuYw0KPiArKysgYi9saWIvbGlicnRlX2tuaS9ydGVf a25pLmMNCj4gQEAgLTM1Myw2ICszNTMsMTcgQEAgdmEycGEoc3RydWN0IHJ0ZV9tYnVmICptKQ0K PiAodW5zaWduZWQgbG9uZyltLT5idWZfaW92YSkpOw0KPiB9DQo+DQo+ICtzdGF0aWMgdm9pZCAq DQo+ICt2YTJwYV9hbGwoc3RydWN0IHJ0ZV9tYnVmICptKQ0KPiArew0KPiArIHN0cnVjdCBydGVf a25pX21idWYgKm1idWYgPSAoc3RydWN0IHJ0ZV9rbmlfbWJ1ZiAqKW07DQo+ICsgd2hpbGUgKG1i dWYtPm5leHQpIHsNCj4gKyBtYnVmLT5uZXh0X3BhID0gdmEycGEobWJ1Zi0+bmV4dCk7DQo+ICsg bWJ1ZiA9IG1idWYtPm5leHQ7DQo+ICsgfQ0KPiArIHJldHVybiB2YTJwYShtKTsNCj4gK30NCj4g Kw0KPiBzdGF0aWMgdm9pZA0KPiBvYmpfZnJlZShzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wIF9fcnRl X3VudXNlZCwgdm9pZCAqb3BhcXVlLCB2b2lkICpvYmosDQo+IHVuc2lnbmVkIG9ial9pZHggX19y dGVfdW51c2VkKQ0KPiBAQCAtNTUwLDcgKzU2MSw3IEBAIHJ0ZV9rbmlfdHhfYnVyc3Qoc3RydWN0 IHJ0ZV9rbmkgKmtuaSwgc3RydWN0IHJ0ZV9tYnVmICoqbWJ1ZnMsIHVuc2lnbmVkIG51bSkNCj4g dW5zaWduZWQgaW50IGk7DQo+DQo+IGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykNCj4gLSBwaHlf bWJ1ZnNbaV0gPSB2YTJwYShtYnVmc1tpXSk7DQo+ICsgcGh5X21idWZzW2ldID0gdmEycGFfYWxs KG1idWZzW2ldKTsNCj4NCj4gcmV0ID0ga25pX2ZpZm9fcHV0KGtuaS0+cnhfcSwgcGh5X21idWZz LCBudW0pOw0KPg0KPiBAQCAtNjA3LDYgKzYxOCw4IEBAIGtuaV9hbGxvY2F0ZV9tYnVmcyhzdHJ1 Y3QgcnRlX2tuaSAqa25pKQ0KPiBvZmZzZXRvZihzdHJ1Y3QgcnRlX2tuaV9tYnVmLCBwa3RfbGVu KSk7DQo+IFJURV9CVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHJ0ZV9tYnVmLCBvbF9mbGFn cykgIT0NCj4gb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9rbmlfbWJ1Ziwgb2xfZmxhZ3MpKTsNCj4gKyBS VEVfQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBydGVfbWJ1ZiwgdHhfb2ZmbG9hZCkgIT0N Cj4gKyBvZmZzZXRvZihzdHJ1Y3QgcnRlX2tuaV9tYnVmLCB0eF9vZmZsb2FkKSk7DQo+DQo+IC8q IENoZWNrIGlmIHBrdG1idWYgcG9vbCBoYXMgYmVlbiBjb25maWd1cmVkICovDQo+IGlmIChrbmkt PnBrdG1idWZfcG9vbCA9PSBOVUxMKSB7DQo+DQoNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCk5vdGljZTogVGhpcyBlLW1h aWwgdG9nZXRoZXIgd2l0aCBhbnkgYXR0YWNobWVudHMgbWF5IGNvbnRhaW4gaW5mb3JtYXRpb24g b2YgUmliYm9uIENvbW11bmljYXRpb25zIEluYy4gdGhhdA0KaXMgY29uZmlkZW50aWFsIGFuZC9v ciBwcm9wcmlldGFyeSBmb3IgdGhlIHNvbGUgdXNlIG9mIHRoZSBpbnRlbmRlZCByZWNpcGllbnQu ICBBbnkgcmV2aWV3LCBkaXNjbG9zdXJlLCByZWxpYW5jZSBvcg0KZGlzdHJpYnV0aW9uIGJ5IG90 aGVycyBvciBmb3J3YXJkaW5nIHdpdGhvdXQgZXhwcmVzcyBwZXJtaXNzaW9uIGlzIHN0cmljdGx5 IHByb2hpYml0ZWQuICBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQNCnJlY2lwaWVudCwgcGxl YXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFuZCB0aGVuIGRlbGV0ZSBhbGwgY29w aWVzLCBpbmNsdWRpbmcgYW55IGF0dGFjaG1lbnRzLg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg==