Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp664139imm; Tue, 5 Jun 2018 02:19:33 -0700 (PDT) X-Google-Smtp-Source: ADUXVKL2abR4kA7nYizuNEqZovGtYrFEoYVdu7EqZk3SBTHYd6GTvj9idrA+XAWPlak9oHdi1o+9 X-Received: by 2002:a17:902:9309:: with SMTP id bc9-v6mr7613523plb.189.1528190373153; Tue, 05 Jun 2018 02:19:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528190373; cv=none; d=google.com; s=arc-20160816; b=Xz3EtnSTgJwtufy9b+HAD8+WCb6ewwwJek07I8elmYCpZeB0C268FY3A7LaLJtw2xD x4o1LO9NO2bL/0Ox/tlG5LJSiVK8MZ7Ph6jM6GK58yo1W62fsJk6nJuYPOt0XxC3sc39 mHY6/Aa+8CSDF+KNLb7jajNwbxy5KZoxRxVZeMIJNbmE6zryX5TtU9Q5Z0QXNeKxs8OL unM0GNBLFU5guJKDQrjxzQpj2v8gskrkMdmMTacfXrXxXqwNecErFJii3XKOCavz1832 WycRmlSDywK2klnIsm//FDKPrggzfuMMHfDsQ1wOKXMNQxEfWQhoD1vhELEKvY+/vqM9 QdAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from :arc-authentication-results; bh=RakwdyN7e/MjUuIA9OCLHfCGqF7yuPKsoENFpt1U0Fw=; b=EPREMv/Lz96Vf+OGJfPKJVRAAviYymMRK/pUlrZGxq2f1yTgWHxA6oaUY/ERi8GYtV JRFcYlazHpjIjHtzB8m7uiL4O9clfZ+l6Cp3S806/WMT4UzzHzZzAV7mL+TO9VQ4Ixzp 2i5g15JjPAbGbRApEXXcrcIvf8BP0Jl1B49iiU+sSM1YOqkHckS9fHJ9PskcYdPmWAf8 hD+ACy37hSbTa7fH0Gla2fJw3FsTVNYMXUEApAm+qMumdhlL/6neqN4G6Y/0akZCQ6xB 95BpMMCgkrb+rJxgkE8IVuhzK7ciY/wk9DQMBpWnaqWGBgLIub/VsycaIoGghT3CgPZ/ fbxA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i197-v6si3815000pgc.161.2018.06.05.02.19.18; Tue, 05 Jun 2018 02:19:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751856AbeFEJSs (ORCPT + 99 others); Tue, 5 Jun 2018 05:18:48 -0400 Received: from mga06.intel.com ([134.134.136.31]:47667 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751822AbeFEJSq (ORCPT ); Tue, 5 Jun 2018 05:18:46 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Jun 2018 02:18:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,478,1520924400"; d="scan'208";a="60474742" Received: from irsmsx151.ger.corp.intel.com ([163.33.192.59]) by fmsmga004.fm.intel.com with ESMTP; 05 Jun 2018 02:18:43 -0700 Received: from irsmsx155.ger.corp.intel.com (163.33.192.3) by IRSMSX151.ger.corp.intel.com (163.33.192.59) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 5 Jun 2018 10:18:43 +0100 Received: from irsmsx109.ger.corp.intel.com ([169.254.13.225]) by irsmsx155.ger.corp.intel.com ([169.254.14.241]) with mapi id 14.03.0319.002; Tue, 5 Jun 2018 10:18:42 +0100 From: "Dziegielewski, Marcin" To: Javier Gonzalez CC: Matias Bjorling , Jens Axboe , "linux-block@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "Konopko, Igor J" Subject: RE: [GIT PULL 18/20] lightnvm: pblk: handle case when mw_cunits equals to 0 Thread-Topic: [GIT PULL 18/20] lightnvm: pblk: handle case when mw_cunits equals to 0 Thread-Index: AQHT9mJJ9Oeppdx29kSrRWdMkH84gaRE6UWAgArugQCAAAZRAIAAExfA///8EwCAAGqKcIAA48AAgAAilnA= Date: Tue, 5 Jun 2018 09:18:41 +0000 Message-ID: <9FC4315EA6BEAA449828D92CF173A10D3E3848A8@IRSMSX109.ger.corp.intel.com> References: <20180528085841.26684-1-mb@lightnvm.io> <20180528085841.26684-19-mb@lightnvm.io> <54B2CCDB-B869-4087-8AE2-2AC73381B1FF@cnexlabs.com> <9FC4315EA6BEAA449828D92CF173A10D3E382351@IRSMSX109.ger.corp.intel.com> <3B216FC2-D5EB-4A36-8946-27307DA3D1B1@cnexlabs.com> <9FC4315EA6BEAA449828D92CF173A10D3E3833ED@IRSMSX109.ger.corp.intel.com> <3A87DF02-6471-4B92-9DDC-4E0FD98249A4@cnexlabs.com> <9FC4315EA6BEAA449828D92CF173A10D3E38365C@IRSMSX109.ger.corp.intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMGEyODhjNDEtYTU3NC00OTdmLTgwZGUtZDE4ZDA5MGM5YjA4IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiVzNhaFBHVm45Q05FbHJCSWNMMlRxeTJYa2pFT0NsZkduZ3oyVmI5a3dhZ2ZvWnlWTTNtRTc1clgxeWVzQXpRZSJ9 x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiBGcm9tOiBKYXZpZXIgR29uemFsZXogW21haWx0bzpqYXZpZXJAY25leGxhYnMuY29tXQ0KPiBT ZW50OiBUdWVzZGF5LCBKdW5lIDUsIDIwMTggOToxMiBBTQ0KPiBUbzogRHppZWdpZWxld3NraSwg TWFyY2luIDxtYXJjaW4uZHppZWdpZWxld3NraUBpbnRlbC5jb20+DQo+IENjOiBNYXRpYXMgQmrD uHJsaW5nIDxtYkBsaWdodG52bS5pbz47IEplbnMgQXhib2UgPGF4Ym9lQGZiLmNvbT47IGxpbnV4 LQ0KPiBibG9ja0B2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7 IEtvbm9wa28sIElnb3IgSg0KPiA8aWdvci5qLmtvbm9wa29AaW50ZWwuY29tPg0KPiBTdWJqZWN0 OiBSZTogW0dJVCBQVUxMIDE4LzIwXSBsaWdodG52bTogcGJsazogaGFuZGxlIGNhc2Ugd2hlbiBt d19jdW5pdHMNCj4gZXF1YWxzIHRvIDANCj4gDQo+ID4gT24gNCBKdW4gMjAxOCwgYXQgMTkuMTcs IER6aWVnaWVsZXdza2ksIE1hcmNpbg0KPiA8bWFyY2luLmR6aWVnaWVsZXdza2lAaW50ZWwuY29t PiB3cm90ZToNCj4gPg0KPiA+PiBGcm9tOiBKYXZpZXIgR29uemFsZXogW21haWx0bzpqYXZpZXJA Y25leGxhYnMuY29tXQ0KPiA+PiBTZW50OiBNb25kYXksIEp1bmUgNCwgMjAxOCAxOjE2IFBNDQo+ ID4+IFRvOiBEemllZ2llbGV3c2tpLCBNYXJjaW4gPG1hcmNpbi5kemllZ2llbGV3c2tpQGludGVs LmNvbT4NCj4gPj4gQ2M6IE1hdGlhcyBCasO4cmxpbmcgPG1iQGxpZ2h0bnZtLmlvPjsgSmVucyBB eGJvZSA8YXhib2VAZmIuY29tPjsNCj4gPj4gbGludXgtIGJsb2NrQHZnZXIua2VybmVsLm9yZzsg bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgS29ub3BrbywNCj4gPj4gSWdvciBKIDxpZ29y Lmoua29ub3Brb0BpbnRlbC5jb20+DQo+ID4+IFN1YmplY3Q6IFJlOiBbR0lUIFBVTEwgMTgvMjBd IGxpZ2h0bnZtOiBwYmxrOiBoYW5kbGUgY2FzZSB3aGVuDQo+ID4+IG13X2N1bml0cyBlcXVhbHMg dG8gMA0KPiA+Pg0KPiA+Pg0KPiA+Pj4gT24gNCBKdW4gMjAxOCwgYXQgMTMuMTEsIER6aWVnaWVs ZXdza2ksIE1hcmNpbg0KPiA+PiA8bWFyY2luLmR6aWVnaWVsZXdza2lAaW50ZWwuY29tPiB3cm90 ZToNCj4gPj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+Pj4+IEZyb206IEphdmll ciBHb256YWxleiBbbWFpbHRvOmphdmllckBjbmV4bGFicy5jb21dDQo+ID4+Pj4gU2VudDogTW9u ZGF5LCBKdW5lIDQsIDIwMTggMTI6MjIgUE0NCj4gPj4+PiBUbzogRHppZWdpZWxld3NraSwgTWFy Y2luIDxtYXJjaW4uZHppZWdpZWxld3NraUBpbnRlbC5jb20+DQo+ID4+Pj4gQ2M6IE1hdGlhcyBC asO4cmxpbmcgPG1iQGxpZ2h0bnZtLmlvPjsgSmVucyBBeGJvZSA8YXhib2VAZmIuY29tPjsNCj4g Pj4+PiBsaW51eC0gYmxvY2tAdmdlci5rZXJuZWwub3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJu ZWwub3JnOw0KPiA+Pj4+IEtvbm9wa28sIElnb3IgSiA8aWdvci5qLmtvbm9wa29AaW50ZWwuY29t Pg0KPiA+Pj4+IFN1YmplY3Q6IFJlOiBbR0lUIFBVTEwgMTgvMjBdIGxpZ2h0bnZtOiBwYmxrOiBo YW5kbGUgY2FzZSB3aGVuDQo+ID4+Pj4gbXdfY3VuaXRzIGVxdWFscyB0byAwDQo+ID4+Pj4NCj4g Pj4+Pj4gT24gNCBKdW4gMjAxOCwgYXQgMTIuMDksIER6aWVnaWVsZXdza2ksIE1hcmNpbg0KPiA+ Pj4+IDxtYXJjaW4uZHppZWdpZWxld3NraUBpbnRlbC5jb20+IHdyb3RlOg0KPiA+Pj4+PiBGcmlz dCBvZiBhbGwgSSB3YW50IHRvIHNheSBzb3JyeSBmb3IgbGF0ZSByZXNwb25zZSAtIEkgd2FzIG9u IGhvbGlkYXkuDQo+ID4+Pj4+DQo+ID4+Pj4+PiBGcm9tOiBKYXZpZXIgR29uemFsZXogW21haWx0 bzpqYXZpZXJAY25leGxhYnMuY29tXQ0KPiA+Pj4+Pj4gU2VudDogTW9uZGF5LCBNYXkgMjgsIDIw MTggMTowMyBQTQ0KPiA+Pj4+Pj4gVG86IE1hdGlhcyBCasO4cmxpbmcgPG1iQGxpZ2h0bnZtLmlv Pg0KPiA+Pj4+Pj4gQ2M6IEplbnMgQXhib2UgPGF4Ym9lQGZiLmNvbT47IGxpbnV4LWJsb2NrQHZn ZXIua2VybmVsLm9yZzsNCj4gPj4+Pj4+IGxpbnV4LSBrZXJuZWxAdmdlci5rZXJuZWwub3JnOyBE emllZ2llbGV3c2tpLCBNYXJjaW4NCj4gPj4+Pj4+IDxtYXJjaW4uZHppZWdpZWxld3NraUBpbnRl bC5jb20+OyBLb25vcGtvLCBJZ29yIEoNCj4gPj4+Pj4+IDxpZ29yLmoua29ub3Brb0BpbnRlbC5j b20+DQo+ID4+Pj4+PiBTdWJqZWN0OiBSZTogW0dJVCBQVUxMIDE4LzIwXSBsaWdodG52bTogcGJs azogaGFuZGxlIGNhc2Ugd2hlbg0KPiA+Pj4+Pj4gbXdfY3VuaXRzIGVxdWFscyB0byAwDQo+ID4+ Pj4+Pg0KPiA+Pj4+Pj4+IE9uIDI4IE1heSAyMDE4LCBhdCAxMC41OCwgTWF0aWFzIEJqw7hybGlu ZyA8bWJAbGlnaHRudm0uaW8+IHdyb3RlOg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gRnJvbTogTWFy Y2luIER6aWVnaWVsZXdza2kgPG1hcmNpbi5kemllZ2llbGV3c2tpQGludGVsLmNvbT4NCj4gPj4+ Pj4+Pg0KPiA+Pj4+Pj4+IFNvbWUgZGV2aWNlcyBjYW4gZXhwb3NlIG13X2N1bml0cyBlcXVhbCB0 byAwLCBpdCBjYW4gY2F1c2UNCj4gPj4+Pj4+PiBjcmVhdGlvbiBvZiB0b28gc21hbGwgd3JpdGUg YnVmZmVyIGFuZCBjYXVzZSBwZXJmb3JtYW5jZSB0byBkcm9wDQo+ID4+Pj4+Pj4gb24gd3JpdGUg d29ya2xvYWRzLg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gVG8gaGFuZGxlIHRoYXQsIHdlIHVzZSB0 aGUgZGVmYXVsdCB2YWx1ZSBmb3IgTUxDIGFuZCBiZWFjYXVzZSBpdA0KPiA+Pj4+Pj4+IGNvdmVy cyBib3RoIDEuMiBhbmQgMi4wIE9DIHNwZWNpZmljYXRpb24sIHNldHRpbmcgdXAgbXdfY3VuaXRz DQo+ID4+Pj4+Pj4gaW4NCj4gPj4+Pj4+PiBudm1lX252bV9zZXR1cF8xMiBmdW5jdGlvbiBpc24n dCBsb25nZXIgbmVjZXNzYXJ5Lg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTog TWFyY2luIER6aWVnaWVsZXdza2kNCj4gPj4+Pj4+PiA8bWFyY2luLmR6aWVnaWVsZXdza2lAaW50 ZWwuY29tPg0KPiA+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IElnb3IgS29ub3BrbyA8aWdvci5qLmtv bm9wa29AaW50ZWwuY29tPg0KPiA+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IE1hdGlhcyBCasO4cmxp bmcgPG1iQGxpZ2h0bnZtLmlvPg0KPiA+Pj4+Pj4+IC0tLQ0KPiA+Pj4+Pj4+IGRyaXZlcnMvbGln aHRudm0vcGJsay1pbml0LmMgfCAxMCArKysrKysrKystDQo+ID4+Pj4+Pj4gZHJpdmVycy9udm1l L2hvc3QvbGlnaHRudm0uYyB8ICAxIC0NCj4gPj4+Pj4+PiAyIGZpbGVzIGNoYW5nZWQsIDkgaW5z ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkNCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2xpZ2h0bnZtL3BibGstaW5pdC5jDQo+ID4+Pj4+Pj4gYi9kcml2ZXJzL2xp Z2h0bnZtL3BibGstaW5pdC5jIGluZGV4IGQ2NWQyZjk3MmNjZi4uMGYyNzc3NDQyNjZiDQo+ID4+ Pj4+Pj4gMTAwNjQ0DQo+ID4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9saWdodG52bS9wYmxrLWluaXQu Yw0KPiA+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvbGlnaHRudm0vcGJsay1pbml0LmMNCj4gPj4+Pj4+ PiBAQCAtMzU2LDcgKzM1NiwxNSBAQCBzdGF0aWMgaW50IHBibGtfY29yZV9pbml0KHN0cnVjdCBw YmxrICpwYmxrKQ0KPiA+Pj4+Pj4+IAlhdG9taWM2NF9zZXQoJnBibGstPm5yX2ZsdXNoLCAwKTsN Cj4gPj4+Pj4+PiAJcGJsay0+bnJfZmx1c2hfcnN0ID0gMDsNCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+ IC0JcGJsay0+cGdzX2luX2J1ZmZlciA9IGdlby0+bXdfY3VuaXRzICogZ2VvLT5hbGxfbHVuczsN Cj4gPj4+Pj4+PiArCWlmIChnZW8tPm13X2N1bml0cykgew0KPiA+Pj4+Pj4+ICsJCXBibGstPnBn c19pbl9idWZmZXIgPSBnZW8tPm13X2N1bml0cyAqIGdlby0NCj4gPj4+IGFsbF9sdW5zOw0KPiA+ Pj4+Pj4+ICsJfSBlbHNlIHsNCj4gPj4+Pj4+PiArCQlwYmxrLT5wZ3NfaW5fYnVmZmVyID0gKGdl by0+d3Nfb3B0IDw8IDMpICogZ2VvLQ0KPiA+Pj4gYWxsX2x1bnM7DQo+ID4+Pj4+Pj4gKwkJLyoN Cj4gPj4+Pj4+PiArCQkgKiBTb21lIGRldmljZXMgY2FuIGV4cG9zZSBtd19jdW5pdHMgZXF1YWwg dG8gMCwgc28NCj4gPj4gbGV0J3MNCj4gPj4+Pj4+IHVzZQ0KPiA+Pj4+Pj4+ICsJCSAqIGhlcmUg ZGVmYXVsdCBzYWZlIHZhbHVlIGZvciBNTEMuDQo+ID4+Pj4+Pj4gKwkJICovDQo+ID4+Pj4+Pj4g Kwl9DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiAJcGJsay0+bWluX3dyaXRlX3BncyA9IGdlby0+d3Nf b3B0ICogKGdlby0+Y3NlY3MgLw0KPiBQQUdFX1NJWkUpOw0KPiA+Pj4+Pj4+IAltYXhfd3JpdGVf cHBhcyA9IHBibGstPm1pbl93cml0ZV9wZ3MgKiBnZW8tPmFsbF9sdW5zOyBkaWZmDQo+ID4+Pj4+ Pj4gLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9saWdodG52bS5jDQo+ID4+Pj4+Pj4gYi9kcml2 ZXJzL252bWUvaG9zdC9saWdodG52bS5jIGluZGV4DQo+ID4+Pj4+Pj4gNDEyNzlkYTc5OWVkLi5j NzQ3NzkyZGE5MTUgMTAwNjQ0DQo+ID4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbGln aHRudm0uYw0KPiA+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2xpZ2h0bnZtLmMNCj4g Pj4+Pj4+PiBAQCAtMzM4LDcgKzMzOCw2IEBAIHN0YXRpYyBpbnQgbnZtZV9udm1fc2V0dXBfMTIo c3RydWN0DQo+ID4+Pj4+PiBudm1lX252bV9pZDEyDQo+ID4+Pj4+Pj4gKmlkLA0KPiA+Pj4+Pj4+ DQo+ID4+Pj4+Pj4gCWdlby0+d3NfbWluID0gc2VjX3Blcl9wZzsNCj4gPj4+Pj4+PiAJZ2VvLT53 c19vcHQgPSBzZWNfcGVyX3BnOw0KPiA+Pj4+Pj4+IC0JZ2VvLT5td19jdW5pdHMgPSBnZW8tPndz X29wdCA8PCAzOwkvKiBkZWZhdWx0IHRvIE1MQw0KPiA+PiBzYWZlIHZhbHVlcw0KPiA+Pj4+Pj4g Ki8NCj4gPj4+Pj4+PiAvKiBEbyBub3QgaW1wb3NlIHZhbHVlcyBmb3IgbWF4aW11bSBudW1iZXIg b2Ygb3BlbiBibG9ja3MgYXMgaXQNCj4gaXMNCj4gPj4+Pj4+PiAJICogdW5zcGVjaWZpZWQgaW4g MS4yLiBVc2VycyBvZiAxLjIgbXVzdCBiZSBhd2FyZSBvZiB0aGlzIGFuZA0KPiA+Pj4+Pj4+IGV2 ZW50dWFsbHkNCj4gPj4+Pj4+PiAtLQ0KPiA+Pj4+Pj4+IDIuMTEuMA0KPiA+Pj4+Pj4NCj4gPj4+ Pj4+IEJ5IGRvaW5nIHRoaXMsIDEuMiBmdXR1cmUgdXNlcnMgKGJleW9uZCBwYmxrKSwgd2lsbCBm YWlsIHRvIGhhdmUNCj4gPj4+Pj4+IGEgdmFsaWQgbXdfY3VuaXRzIHZhbHVlLiBJdCdzIG9rIHRv IGRlYWwgd2l0aCB0aGUgMCBjYXNlIGluIHBibGssDQo+ID4+Pj4+PiBidXQgSSBiZWxpZXZlIHRo YXQgd2Ugc2hvdWxkIGhhdmUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIDEuMiBlaXRoZXINCj4gd2F5 Lg0KPiA+Pj4+Pg0KPiA+Pj4+PiBJJ20gbm90IHN1cmUuIEZyb20gbXkgdW5kZXJzdGFuZGluZywg c2V0dGluZyBvZiBkZWZhdWx0IHZhbHVlIHdhcw0KPiA+Pj4+PiB3b3JrYXJvdW5kIGZvciBwYmxr IGNhc2UsIGFtIEkgcmlnaHQgPy4NCj4gPj4+Pg0KPiA+Pj4+IFRoZSBkZWZhdWx0IHZhbHVlIGNv dmVycyB0aGUgTUxDIGNhc2UgZGlyZWN0bHkgYXQgdGhlIGxpZ2h0bnZtDQo+ID4+Pj4gbGF5ZXIs IGFzIG9wcG9zZWQgdG8gZG9pbmcgaXQgZGlyZWN0bHkgaW4gcGJsay4gU2luY2UgcGJsayBpcyB0 aGUNCj4gPj4+PiBvbmx5IHVzZXIgbm93LCB5b3UgY2FuIGFyZ3VlIHRoYXQgYWxsIGNoYW5nZXMg aW4gdGhlIGxpZ2h0bnZtIGxheWVyDQo+ID4+Pj4gYXJlIHRvIHNvbHZlIHBibGsgaXNzdWVzLCBi dXQgdGhlIGlkZWEgaXMgdGhhdCB0aGUgZ2VvbWV0cnkgc2hvdWxkIGJlDQo+IGdlbmVyaWMuDQo+ ID4+Pj4NCj4gPj4+Pj4gSW4gbXkgb3BpbmlvbiBhbnkgdXNlciBvZiAxLjINCj4gPj4+Pj4gc3Bl YyBzaG91bGQgYmUgYXdhcmUgdGhhdCB0aGVyZSBpcyBub3QgbXdfY3VuaXQgdmFsdWUuIEZyb20g bXkNCj4gPj4+Pj4gcG9pbnQgb2YgdmlldywgbGVhdmluZyBoZXJlIDAgKGFuZCBkZWNpc2lvbiB3 aGF0IGRvIHdpdGggaXQgdG8NCj4gPj4+Pj4gbGlnaHRudm0NCj4gPj4+Pj4gdXNlcikgaXMgbW9y ZSBzYWZlciB3YXksIGJ1dCBtYXliZSBJJ20gd3JvbmcuIEkgYmVsaWV2ZSB0aGF0IGl0IGlzDQo+ ID4+Pj4+IHRvcGljIHRvIHdpZGVyIGRpc2N1c3Npb24gd2l0aCBtYWludGFpbmVycy4NCj4gPj4+ Pg0KPiA+Pj4+IDEuMiBhbmQgMi4wIGhhdmUgZGlmZmVyZW50IGdlb21ldHJpZXMsIGJ1dCB3aGVu IHdlIGRlc2lnbmVkIHRoZQ0KPiA+Pj4+IGNvbW1vbiBudm1fZ2VvIHN0cnVjdHVyZSwgdGhlIGlk ZWEgd2FzIHRvIGFic3RyYWN0IGJvdGggc3BlY3MgYW5kDQo+ID4+Pj4gYWxsb3cgdGhlIHVwcGVy IGxheWVycyB0byB1c2UgdGhlIGdlb21ldHJ5IHRyYW5zcGFyZW50bHkuDQo+ID4+Pj4NCj4gPj4+ PiBTcGVjaWZpY2FsbHkgaW4gcGJsaywgSSB3b3VsZCBwcmVmZXIgdG8ga2VlcCBpdCBpbiBzdWNo IGEgd2F5IHRoYXQNCj4gPj4+PiB3ZSBkb24ndCBuZWVkIHRvIG1lZGlhIHNwZWNpZmljIHBvbGlj aWVzIChlLmcuLCBzZXQgZGVmYXVsdCB2YWx1ZXMNCj4gPj4+PiBmb3IgTUxDIG1lbW9yaWVzKSwg YXMgYSBnZW5lcmFsIGRlc2lnbiBwcmluY2lwbGUuIFdlIGFscmVhZHkgZG8NCj4gPj4+PiBzb21l IGdlb21ldHJ5IHZlcnNpb24gY2hlY2tzIHRvIGF2b2lkIGRlcmVmZXJlbmNpbmcgdW5uZWNlc3Nh cnkNCj4gPj4+PiBwb2ludGVycyBvbiB0aGUgZmFzdCBwYXRoLCB3aGljaCBJIHdvdWxkIGV2ZW50 dWFsbHkgbGlrZSB0byByZW1vdmUuDQo+ID4+Pg0KPiA+Pj4gT2ssIG5vdyBJIHVuZGVyc3RhbmQg eW91ciBwb2ludCBvZiB2aWV3IGFuZCBhZ3JlZSB3aXRoIHRoYXQsIEkgd2lsbA0KPiA+Pj4gcHJl cGFyZSBzZWNvbmQgdmVyc2lvbiBvZiB0aGlzIHBhdGNoIHdpdGhvdXQgdGhpcyBjaGFuZ2UuDQo+ ID4+DQo+ID4+IFNvdW5kcyBnb29kLg0KPiA+Pg0KPiA+Pj4gVGhhbmtzIGZvcg0KPiA+Pj4gdGhl IGNsYXJpZmljYXRpb24uDQo+ID4+DQo+ID4+IFN1cmUgOikNCj4gPj4NCj4gPj4+Pj4+IEEgbW9y ZSBnZW5lcmljIHdheSBvZiBkb2luZyB0aGlzIHdvdWxkIGJlIHRvIGhhdmUgYSBkZWZhdWx0IHZh bHVlDQo+ID4+Pj4+PiBmb3INCj4gPj4+Pj4+IDIuMCB0b28sIGluIGNhc2UgbXdfY3VuaXRzIGlz IHJlcG9ydGVkIGFzIDAuDQo+ID4+Pj4+DQo+ID4+Pj4+IFNpbmNlIDAgaXMgY29ycmVjdCB2YWx1 ZSBhbmQgdXNlcnMgY2FuIG1ha2UgZGlmZmVyZW50IGRlY2lzaW9ucw0KPiA+Pj4+PiBiYXNlZCBv biBpdCwgSSB0aGluayB3ZSBzaG91bGRuJ3Qgb3ZlcndyaXRlIGl0IGJ5IGRlZmF1bHQgdmFsdWUu DQo+ID4+Pj4+IElzIGl0IG1ha2Ugc2Vuc2U/DQo+ID4+Pj4NCj4gPj4+PiBIZXJlIEkgbWVhbnQg YXQgYSBwYmxrIGxldmVsIC0gSSBzaG91bGQgaGF2ZSBzcGVjaWZpZWQgaXQuIEF0IHRoZQ0KPiA+ Pj4+IGdlb21ldHJ5IGxldmVsLCB3ZSBzaG91bGQgbm90IGNoYW5nZSBpdC4NCj4gPj4+Pg0KPiA+ Pj4+IFRoZSBjYXNlIEkgYW0gdGhpbmtpbmcgaXMgaWYgbXdfY3VpbnRzIHJlcG9pbnRzIDAsIGJ1 dCB3c19taW4gPiAwLg0KPiA+Pj4+IEluIHRoaXMgY2FzZSwgd2Ugc3RpbGwgbmVlZCBhIGhvc3Qg c2lkZSBidWZmZXIgdG8gc2VydmUgPCB3c19taW4NCj4gPj4+PiBJL09zLCBldmVuIHRob3VnaCB0 aGUgZGV2aWNlIGRvZXMgbm90IHJlcXVpcmUgdGhlIGJ1ZmZlciB0byBndWFyYW50ZWUNCj4gcmVh ZHMuDQo+ID4+Pg0KPiA+Pj4gT2gsIG9rIG5vdyB3ZSBhcmUgb24gdGhlIHNhbWUgcGFnZS4gSW4g dGhpcyBwYXRjaCBJIHdhcyB0cnlpbmcgdG8NCj4gPj4+IGFkZHJlc3Mgc3VjaCBjYXNlLiBEbyB5 b3UgaGF2ZSBvdGhlciBpZGVhIGhvdyB0byBkbyBpdCBvciBoZXJlIGFyZQ0KPiA+Pj4geW91IHRo aW5raW5nIG9ubHkgb24gdmFsdWUgb2YgZGVmYXVsdCB2YXJpYWJsZT8NCj4gPj4NCj4gPj4gSWYg ZG9pbmcgdGhpcywgSSBndWVzcyB0aGF0IHNvbWV0aGluZyBpbiB0aGUgbGluZSBvZiB3aGF0IHlv dSBkaWQNCj4gPj4gd2l0aCBpbmNyZWFzaW5nIHRoZSBzaXplIG9mIHRoZSB3cml0ZSBidWZmZXIg dmlhIGEgbW9kdWxlIHBhcmFtZXRlci4NCj4gPj4gRm9yIGV4YW1wbGUsIGNoZWNraW5nIGlmIHRo ZSBzaXplIG9mIHRoZSB3cml0ZSBidWZmZXIgYmFzZWQgb24NCj4gPj4gbXdfY3VpbnRzIGlzIGVu b3VnaCB0byBjb3ZlciB3c19taW4sIHdoaWNoIG5vcm1hbGx5IHdvdWxkIG9ubHkgYmUgYW4NCj4g Pj4gaXNzdWUgd2hlbiBtd19jdWludHMgPT0gMCBvciB3aGVuIHRoZSBudW1iZXIgb2YgUFVzIHVz ZWQgZm9yIHRoZSBwYmxrDQo+ID4+IGluc3RhbmNlIGlzIHZlcnkgc21hbGwgYW5kIG13X2N1aW50 cyA8IG5yX2x1bnMgKiB3c19taW4uDQo+ID4NCj4gPg0KPiA+IEkgc2VlIGhlcmUgdHdvIGNhc2Vz Og0KPiA+IC0gd2hlbiBtd19jdW5pdHMgPiAwIGJ1ZmZlciBzaXplIHNob3VsZCBoYXZlIG51bWJl ciBvZiBlbnRyaWVzIGF0DQo+ID4gbGVhc3QgbWF4KG13X2N1bml0cywgd3NfbWluKSAqIG5yX2x1 bnMgYW5kIGhlcmUgd2UgYXJlIHRha2luZyBjYXJlIG9mDQo+ID4gYm90aCBjYXNlcyBtd19jdW5p dHMgPiB3c19taW4gYW5kIG13X2N1bml0cyA8IHdzX21pbi4NCj4gPiAtIHdoZW4gbXdfY3VuaXQg PT0gMCBidWZmZXIgc2l6ZSBzaG91bGQgaGF2ZSBudW1iZXIgb2YgZW50cmllcyBhdA0KPiA+IGxl YXN0IHdzX21pbiAqIG5yIF9sdW5zIGFuZCB3ZSBjYW4gdXNlIHRoZSBzYW1lIHB1c2V1ZG9jb2Rl IGFzIGFib3ZlLg0KPiA+DQo+IA0KPiBBZ3JlZS4NCj4gDQo+ID4gRG8geW91IHNlZSBhbnkgb3Ro ZXIgY2FzZT8gQ291bGQgeW91IGNsYXJpZnkgc2Vjb25kIGNhc2UgbWVudGlvbmVkIGJ5DQo+ID4g eW91IG9yIG1heWJlIGRpZCB5b3UgbWVhbiBvcHBvc2l0ZSBjYXNlPyBJZiB5ZXMsIEkgYmVsaWV2 ZSB0aGF0IGFib3ZlDQo+ID4gcHNldWRvIGNvZGUgd2lsbCBoYW5kbGUgc3VjaCBjYXNlIHRvby4N Cj4gPg0KPiANCj4gWWVzLCBpdCBpcyB0aGUgc2FtZSBjYXNlLg0KPiANCj4gT25lIHRoaW5nIHRv IGNvbnNpZGVyIGlzIHdoZXRoZXIgdGhlIGJ1ZmZlciBzaG91bGQgYXQgbGVhc3QgYmUgd3Nfb3B0 ICoNCj4gbnJfbHVucyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gU2luY2UgdGhlIHdyaXRlIHRo cmVhZCB3aWxsIGFsd2F5cyB0cnkgdG8NCj4gc2VuZCB3c19vcHQsIGluIHRoZSBjYXNlIHRoYXQg d3Nfb3B0ID4gd3NfbWluLCB0aGVuIGEgYnVmZmVyIHNpemUgb2YNCj4gd3NfbWluICogbnJfbHVu cyB3aWxsIG5vdCBtYWtlIHVzZSBvZiB0aGUgd2hvbGUgcGFyYWxsZWxpc20gZXhwb3NlZCBieSB0 aGUNCj4gZGV2aWNlLg0KPiANCg0KQWdyZWUuIEFmdGVyIEkgaGFkIHNlbnQgbGFzdCBlbWFpbCBJ IGFsc28gdGhvdWdodCAgdGhhdCBzaG91bGQgYmUgd3Nfb3B0IGluc3RlYWQgb2Ygd3NfbWluLg0K DQo+IFRoZXJlZm9yZSwgSSB3b3VsZCBwcm9iYWJseSBnbyBmb3Igd3Nfb3B0ICogbnJfbHVucyBh cyB0aGUgZGVmYXVsdCB2YWx1ZQ0KPiB3aGVuIG13X2N1aW50cyAqIG5yX2x1bnMgPCB3c19vcHQg KiBucl9sdW5zICh3aGljaCBjb3ZlcnMgbXdfY3VpbnRzID09DQo+IDApLCBhbmQgdGhlbiBrZWVw IHdzX21pbiAqIG5yX2x1bnMgYXMgdGhlIG1pbmltdW0gcmVxdWlyZW1lbnQgd2hlbg0KPiBzZXR0 aW5nIHRoZSBidWZmZXIgc2l6ZSBtYW51YWxseS4NCg0KU291bmRzIGdvb2QuDQo+IA0KPiBEb2Vz IHRoaXMgY292ZXIgeW91ciB1c2UgY2FzZT8NCj4gDQoNClllcywgSSB0aGluayB0aGF0IGNvdmVy IGFsbCBjYXNlcyByZWxhdGVkIHRvIHRoaXMgdG9waWMuIEkgd2lsbCBwcmVwYXJlIHBhdGNoIGlu IHRoZSBhZnRlcm5vb24uDQoNCk1hbnkgdGhhbmtzIGZvciBwZXJmZWN0IGNvb3BlcmF0aW9uIQ0K TWFyY2luDQo+ID4+Pj4+PiBKYXZpZXINCj4gPj4+Pj4NCj4gPj4+Pj4gVGhhbmtzLA0KPiA+Pj4+ PiBNYXJjaW4NCj4gPj4+Pg0KPiA+Pj4+IEphdmllcg0KPiA+Pj4gVGhhbmtzLA0KPiA+Pj4gTWFy Y2luDQo+ID4gVGhhbmtzISwNCj4gPiBNYXJjaW4NCg==