From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6475592721521180672 X-Received: by 10.101.88.207 with SMTP id e15mr2131589pgu.118.1507734482519; Wed, 11 Oct 2017 08:08:02 -0700 (PDT) X-BeenThere: outreachy-kernel@googlegroups.com Received: by 10.98.25.216 with SMTP id 207ls448014pfz.3.gmail; Wed, 11 Oct 2017 08:08:01 -0700 (PDT) X-Google-Smtp-Source: AOwi7QAYAalIu30IzhHwWi4Pk1GD+o4TANmn6HrBYc2t0dAALlT/mnL6h3EIt4RzJlGwvRrPuu46 X-Received: by 10.101.80.140 with SMTP id r12mr1212481pgp.136.1507734481281; Wed, 11 Oct 2017 08:08:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1507734481; cv=none; d=google.com; s=arc-20160816; b=ujWWjxX/2Gponcy+V65ZxJPEFOc6T1+U+De01xTT0Fky87ulfWBGe/y1EeHq6ouJuH wq8Z3r7xLoROOHu93B1vROXbEmaHS9PHgUgsb8cAGAJfzAwQRVAk3gvK8zoBd0ikZ0bX K6DjgTxcD02+ghvkYDEmFdjADgTP1tknQXdM+QP7kbAE4dJVMiOcBCm9HV2kzwxVtdX7 3n9gKdF8BK/oh2cQbVQDUSBqokq4X2YPb1+FitYo0G86eHGQK8/vowubAnrwK6lQyUYC rjVhvpIpm2oeBDheo3Rqg3bdmklm0LBfiMCdkcCHMmOSXasfDIo2OSvaDYflRkxfBLB1 jLfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:message-id:date:references:organization:in-reply-to :subject:to:from:arc-authentication-results; bh=0jw0Vx4CjVmvEb1Lb7cPn2/Hntg4evsfQWEstlQozBk=; b=az+jNyzJivWIzx+6vg6dv9DNVW7VBHW9c80UoZ77UrUVk9xll7UTONUxP30ijPnmS1 eoEZicPlI+XT8MzAO2tzrRZ5Q2DNz1BpGfoG2MQw9dE+lNnvyz3t2y70lDdH0KsjUOMW KZC90+fmLpyrf6uCz4xrnoYSKG5YkdJ/+55+Q1TK/t95Scd2Gn1aeS2nD8stCQbrCiuF u2Ik6S5oHVaLFrYcqvj4xyTcaApLh6cnLioy7OTPBlcB9jh+qw2ilGaYY4noJMKCr8L5 wrS7J5fvQajI54VExb227EXnfhnSzK8Nw0CMiXYdYVh5QMKX9cSzouGuDalMmw2WcL9v lwyg== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of jani.nikula@intel.com designates 134.134.136.31 as permitted sender) smtp.mailfrom=jani.nikula@intel.com Return-Path: Received: from mga06.intel.com (mga06.intel.com. [134.134.136.31]) by gmr-mx.google.com with ESMTPS id n63si1480471pfb.10.2017.10.11.08.08.01 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Oct 2017 08:08:01 -0700 (PDT) Received-SPF: pass (google.com: domain of jani.nikula@intel.com designates 134.134.136.31 as permitted sender) client-ip=134.134.136.31; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of jani.nikula@intel.com designates 134.134.136.31 as permitted sender) smtp.mailfrom=jani.nikula@intel.com Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP; 11 Oct 2017 08:08:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.43,361,1503385200"; d="scan'208";a="908940312" Received: from mklemm-mobl4.ger.corp.intel.com (HELO localhost) ([10.252.56.2]) by FMSMGA003.fm.intel.com with ESMTP; 11 Oct 2017 08:07:57 -0700 From: Jani Nikula To: Meghana Madhyastha , daniel@ffwll.ch, noralf@tronnes.org, outreachy-kernel@googlegroups.com, dri-devel@lists.freedesktop.org, daniel.thompson@linaro.org Subject: Re: [PATCH v8 3/3] drm/tinydrm: Add devres versions of backlight_get In-Reply-To: <20171011141807.GA28100@meghana-HP-Pavilion-Notebook> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <6dd8ab4eb88a75613a7bd69c9ff7278f03dd6ea4.1507714297.git.meghana.madhyastha@gmail.com> <87tvz5pz3q.fsf@intel.com> <20171011141807.GA28100@meghana-HP-Pavilion-Notebook> Date: Wed, 11 Oct 2017 18:07:43 +0300 Message-ID: <87o9pdpvsw.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain On Wed, 11 Oct 2017, Meghana Madhyastha wrote: > On Wed, Oct 11, 2017 at 04:56:25PM +0300, Jani Nikula wrote: >> On Wed, 11 Oct 2017, Meghana Madhyastha wrote: >> > Add devm_backlight_get and the corresponding release >> > function because some drivers use devres versions of functions >> > for requiring device resources. >> > >> > Signed-off-by: Meghana Madhyastha >> > --- >> > Changes in v8: >> > -Put the devres version to backlight.c along with backlight_get. >> > >> > drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- >> > drivers/video/backlight/backlight.c | 31 +++++++++++++++++++++++++++++++ >> > include/linux/backlight.h | 16 ++++++++++++++++ >> > 3 files changed, 48 insertions(+), 1 deletion(-) >> > >> > diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c >> > index edf9502..03fec36 100644 >> > --- a/drivers/gpu/drm/tinydrm/mi0283qt.c >> > +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c >> > @@ -190,7 +190,7 @@ static int mi0283qt_probe(struct spi_device *spi) >> > if (IS_ERR(mipi->regulator)) >> > return PTR_ERR(mipi->regulator); >> > >> > - mipi->backlight = backlight_get(dev); >> > + mipi->backlight = devm_backlight_get(dev); >> > if (IS_ERR(mipi->backlight)) >> > return PTR_ERR(mipi->backlight); >> > >> > diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c >> > index 1debb60..9b24dc2 100644 >> > --- a/drivers/video/backlight/backlight.c >> > +++ b/drivers/video/backlight/backlight.c >> > @@ -618,6 +618,37 @@ struct backlight_device *backlight_get(struct device *dev) >> > return bd; >> > } >> > EXPORT_SYMBOL(backlight_get); >> > + >> > +static void devm_backlight_get_release(void *data) >> >> I think that's a confusing name because of the "get", maybe just call it >> devm_backlight_put? > > backlight_put is already in use as a helper function so wouldn't > devm_backlight_put be confusing as there is already a backlight_put? I'd think not, as it literally is a devm version of the same thing. BR, Jani. > > Regards, > Meghana > >> BR, >> Jani. >> >> >> >> > +{ >> > + backlight_put(data); >> > +} >> > + >> > +/** >> > + * devm_backlight_get - Resource-managed backlight_get() >> > + * @dev: Device >> > + * >> > + * Device managed version of backlight_get(). The reference on the backlight >> > + * device is automatically dropped on driver detach. >> > + */ >> > +struct backlight_device *devm_backlight_get(struct device *dev) >> > +{ >> > + struct backlight_device *bd; >> > + int ret; >> > + >> > + bd = backlight_get(dev); >> > + if (!bd) >> > + return NULL; >> > + >> > + ret = devm_add_action(dev, devm_backlight_get_release, bd); >> > + if (ret) { >> > + backlight_put(bd); >> > + return ERR_PTR(ret); >> > + } >> > + >> > + return bd; >> > +} >> > +EXPORT_SYMBOL(devm_backlight_get); >> > #endif >> > >> > static void __exit backlight_class_exit(void) >> > diff --git a/include/linux/backlight.h b/include/linux/backlight.h >> > index 1d713b3..0bfadb6 100644 >> > --- a/include/linux/backlight.h >> > +++ b/include/linux/backlight.h >> > @@ -183,6 +183,16 @@ static inline int backlight_disable(struct backlight_device *bd) >> > return backlight_update_status(bd); >> > } >> > >> > +/** >> > + ** backlight_put - Drop backlight reference >> > + ** @bd: the backlight device to put >> > + **/ >> > +static inline void backlight_put(struct backlight_device *bd) >> > +{ >> > + if (bd) >> > + put_device(&bd->dev); >> > +} >> > + >> > struct generic_bl_info { >> > const char *name; >> > int max_intensity; >> > @@ -204,11 +214,17 @@ of_find_backlight_by_node(struct device_node *node) >> > >> > #if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) >> > struct backlight_device *backlight_get(struct device *dev); >> > +struct backlight_device *devm_backlight_get(struct device *dev); >> > #else >> > static inline struct backlight_device *backlight_get(struct device *dev) >> > { >> > return NULL; >> > } >> > + >> > +static inline struct backlight_device *devm_backlight_get(struct device *dev) >> > +{ >> > + return NULL; >> > +} >> > #endif >> > >> > #endif >> >> -- >> Jani Nikula, Intel Open Source Technology Center -- Jani Nikula, Intel Open Source Technology Center From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH v8 3/3] drm/tinydrm: Add devres versions of backlight_get Date: Wed, 11 Oct 2017 18:07:43 +0300 Message-ID: <87o9pdpvsw.fsf@intel.com> References: <6dd8ab4eb88a75613a7bd69c9ff7278f03dd6ea4.1507714297.git.meghana.madhyastha@gmail.com> <87tvz5pz3q.fsf@intel.com> <20171011141807.GA28100@meghana-HP-Pavilion-Notebook> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id A53066E02D for ; Wed, 11 Oct 2017 15:08:02 +0000 (UTC) In-Reply-To: <20171011141807.GA28100@meghana-HP-Pavilion-Notebook> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Meghana Madhyastha , daniel@ffwll.ch, noralf@tronnes.org, outreachy-kernel@googlegroups.com, dri-devel@lists.freedesktop.org, daniel.thompson@linaro.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCAxMSBPY3QgMjAxNywgTWVnaGFuYSBNYWRoeWFzdGhhIDxtZWdoYW5hLm1hZGh5YXN0 aGFAZ21haWwuY29tPiB3cm90ZToKPiBPbiBXZWQsIE9jdCAxMSwgMjAxNyBhdCAwNDo1NjoyNVBN ICswMzAwLCBKYW5pIE5pa3VsYSB3cm90ZToKPj4gT24gV2VkLCAxMSBPY3QgMjAxNywgTWVnaGFu YSBNYWRoeWFzdGhhIDxtZWdoYW5hLm1hZGh5YXN0aGFAZ21haWwuY29tPiB3cm90ZToKPj4gPiBB ZGQgZGV2bV9iYWNrbGlnaHRfZ2V0IGFuZCB0aGUgY29ycmVzcG9uZGluZyByZWxlYXNlCj4+ID4g ZnVuY3Rpb24gYmVjYXVzZSBzb21lIGRyaXZlcnMgdXNlIGRldnJlcyB2ZXJzaW9ucyBvZiBmdW5j dGlvbnMKPj4gPiBmb3IgcmVxdWlyaW5nIGRldmljZSByZXNvdXJjZXMuCj4+ID4KPj4gPiBTaWdu ZWQtb2ZmLWJ5OiBNZWdoYW5hIE1hZGh5YXN0aGEgPG1lZ2hhbmEubWFkaHlhc3RoYUBnbWFpbC5j b20+Cj4+ID4gLS0tCj4+ID4gQ2hhbmdlcyBpbiB2ODoKPj4gPiAtUHV0IHRoZSBkZXZyZXMgdmVy c2lvbiB0byBiYWNrbGlnaHQuYyBhbG9uZyB3aXRoIGJhY2tsaWdodF9nZXQuCj4+ID4KPj4gPiAg ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vbWkwMjgzcXQuYyAgfCAgMiArLQo+PiA+ICBkcml2ZXJz L3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYyB8IDMxICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPj4gPiAgaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaCAgICAgICAgICAgfCAxNiAr KysrKysrKysrKysrKysrCj4+ID4gIDMgZmlsZXMgY2hhbmdlZCwgNDggaW5zZXJ0aW9ucygrKSwg MSBkZWxldGlvbigtKQo+PiA+Cj4+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55 ZHJtL21pMDI4M3F0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9taTAyODNxdC5jCj4+ID4g aW5kZXggZWRmOTUwMi4uMDNmZWMzNiAxMDA2NDQKPj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v dGlueWRybS9taTAyODNxdC5jCj4+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vbWkw MjgzcXQuYwo+PiA+IEBAIC0xOTAsNyArMTkwLDcgQEAgc3RhdGljIGludCBtaTAyODNxdF9wcm9i ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+PiA+ICAJaWYgKElTX0VSUihtaXBpLT5yZWd1bGF0 b3IpKQo+PiA+ICAJCXJldHVybiBQVFJfRVJSKG1pcGktPnJlZ3VsYXRvcik7Cj4+ID4gIAo+PiA+ IC0JbWlwaS0+YmFja2xpZ2h0ID0gYmFja2xpZ2h0X2dldChkZXYpOwo+PiA+ICsJbWlwaS0+YmFj a2xpZ2h0ID0gZGV2bV9iYWNrbGlnaHRfZ2V0KGRldik7Cj4+ID4gIAlpZiAoSVNfRVJSKG1pcGkt PmJhY2tsaWdodCkpCj4+ID4gIAkJcmV0dXJuIFBUUl9FUlIobWlwaS0+YmFja2xpZ2h0KTsKPj4g PiAgCj4+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5j IGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKPj4gPiBpbmRleCAxZGViYjYw Li45YjI0ZGMyIDEwMDY0NAo+PiA+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2ts aWdodC5jCj4+ID4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKPj4g PiBAQCAtNjE4LDYgKzYxOCwzNyBAQCBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0 X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ID4gIAlyZXR1cm4gYmQ7Cj4+ID4gIH0KPj4gPiAg RVhQT1JUX1NZTUJPTChiYWNrbGlnaHRfZ2V0KTsKPj4gPiArCj4+ID4gK3N0YXRpYyB2b2lkIGRl dm1fYmFja2xpZ2h0X2dldF9yZWxlYXNlKHZvaWQgKmRhdGEpCj4+IAo+PiBJIHRoaW5rIHRoYXQn cyBhIGNvbmZ1c2luZyBuYW1lIGJlY2F1c2Ugb2YgdGhlICJnZXQiLCBtYXliZSBqdXN0IGNhbGwg aXQKPj4gZGV2bV9iYWNrbGlnaHRfcHV0Pwo+Cj4gYmFja2xpZ2h0X3B1dCBpcyBhbHJlYWR5IGlu IHVzZSBhcyBhIGhlbHBlciBmdW5jdGlvbiBzbyB3b3VsZG4ndAo+IGRldm1fYmFja2xpZ2h0X3B1 dCBiZSBjb25mdXNpbmcgYXMgdGhlcmUgaXMgYWxyZWFkeSBhIGJhY2tsaWdodF9wdXQ/CgpJJ2Qg dGhpbmsgbm90LCBhcyBpdCBsaXRlcmFsbHkgaXMgYSBkZXZtIHZlcnNpb24gb2YgdGhlIHNhbWUg dGhpbmcuCgpCUiwKSmFuaS4KCgoKPgo+IFJlZ2FyZHMsCj4gTWVnaGFuYQo+ICAKPj4gQlIsCj4+ IEphbmkuCj4+IAo+PiAKPj4gCj4+ID4gK3sKPj4gPiArCWJhY2tsaWdodF9wdXQoZGF0YSk7Cj4+ ID4gK30KPj4gPiArCj4+ID4gKy8qKgo+PiA+ICsgKiBkZXZtX2JhY2tsaWdodF9nZXQgLSBSZXNv dXJjZS1tYW5hZ2VkIGJhY2tsaWdodF9nZXQoKQo+PiA+ICsgKiBAZGV2OiBEZXZpY2UKPj4gPiAr ICoKPj4gPiArICogRGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBiYWNrbGlnaHRfZ2V0KCkuIFRo ZSByZWZlcmVuY2Ugb24gdGhlIGJhY2tsaWdodAo+PiA+ICsgKiBkZXZpY2UgaXMgYXV0b21hdGlj YWxseSBkcm9wcGVkIG9uIGRyaXZlciBkZXRhY2guCj4+ID4gKyAqLwo+PiA+ICtzdHJ1Y3QgYmFj a2xpZ2h0X2RldmljZSAqZGV2bV9iYWNrbGlnaHRfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldikKPj4g PiArewo+PiA+ICsJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwo+PiA+ICsJaW50IHJldDsK Pj4gPiArCj4+ID4gKwliZCA9IGJhY2tsaWdodF9nZXQoZGV2KTsKPj4gPiArCWlmICghYmQpCj4+ ID4gKwkJcmV0dXJuIE5VTEw7Cj4+ID4gKwo+PiA+ICsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uKGRl diwgZGV2bV9iYWNrbGlnaHRfZ2V0X3JlbGVhc2UsIGJkKTsKPj4gPiArCWlmIChyZXQpIHsKPj4g PiArCQliYWNrbGlnaHRfcHV0KGJkKTsKPj4gPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+PiA+ ICsJfQo+PiA+ICsKPj4gPiArCXJldHVybiBiZDsKPj4gPiArfQo+PiA+ICtFWFBPUlRfU1lNQk9M KGRldm1fYmFja2xpZ2h0X2dldCk7Cj4+ID4gICNlbmRpZgo+PiA+ICAKPj4gPiAgc3RhdGljIHZv aWQgX19leGl0IGJhY2tsaWdodF9jbGFzc19leGl0KHZvaWQpCj4+ID4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGludXgvYmFja2xpZ2h0LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCj4+ID4g aW5kZXggMWQ3MTNiMy4uMGJmYWRiNiAxMDA2NDQKPj4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2Jh Y2tsaWdodC5oCj4+ID4gKysrIGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaAo+PiA+IEBAIC0x ODMsNiArMTgzLDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJhY2tsaWdodF9kaXNhYmxlKHN0cnVj dCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKPj4gPiAgCXJldHVybiBiYWNrbGlnaHRfdXBkYXRlX3N0 YXR1cyhiZCk7Cj4+ID4gIH0KPj4gPiAgCj4+ID4gKy8qKgo+PiA+ICsgKiogYmFja2xpZ2h0X3B1 dCAtIERyb3AgYmFja2xpZ2h0IHJlZmVyZW5jZQo+PiA+ICsgKiogQGJkOiB0aGUgYmFja2xpZ2h0 IGRldmljZSB0byBwdXQKPj4gPiArICoqLwo+PiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgYmFja2xp Z2h0X3B1dChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCj4+ID4gK3sKPj4gPiArCWlmIChi ZCkKPj4gPiArCQlwdXRfZGV2aWNlKCZiZC0+ZGV2KTsKPj4gPiArfQo+PiA+ICsKPj4gPiAgc3Ry dWN0IGdlbmVyaWNfYmxfaW5mbyB7Cj4+ID4gIAljb25zdCBjaGFyICpuYW1lOwo+PiA+ICAJaW50 IG1heF9pbnRlbnNpdHk7Cj4+ID4gQEAgLTIwNCwxMSArMjE0LDE3IEBAIG9mX2ZpbmRfYmFja2xp Z2h0X2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQo+PiA+ICAKPj4gPiAgI2lmIElT X0VOQUJMRUQoQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UpCj4+ID4gIHN0cnVjdCBiYWNr bGlnaHRfZGV2aWNlICpiYWNrbGlnaHRfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldik7Cj4+ID4gK3N0 cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpkZXZtX2JhY2tsaWdodF9nZXQoc3RydWN0IGRldmljZSAq ZGV2KTsKPj4gPiAgI2Vsc2UKPj4gPiAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYmFja2xpZ2h0X2Rl dmljZSAqYmFja2xpZ2h0X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ID4gIHsKPj4gPiAgCXJl dHVybiBOVUxMOwo+PiA+ICB9Cj4+ID4gKwo+PiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBiYWNr bGlnaHRfZGV2aWNlICpkZXZtX2JhY2tsaWdodF9nZXQoc3RydWN0IGRldmljZSAqZGV2KQo+PiA+ ICt7Cj4+ID4gKwlyZXR1cm4gTlVMTDsKPj4gPiArfQo+PiA+ICAjZW5kaWYKPj4gPiAgCj4+ID4g ICNlbmRpZgo+PiAKPj4gLS0gCj4+IEphbmkgTmlrdWxhLCBJbnRlbCBPcGVuIFNvdXJjZSBUZWNo bm9sb2d5IENlbnRlcgoKLS0gCkphbmkgTmlrdWxhLCBJbnRlbCBPcGVuIFNvdXJjZSBUZWNobm9s b2d5IENlbnRlcgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK