From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 851F8C43219 for ; Wed, 1 May 2019 14:24:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E9833205F4 for ; Wed, 1 May 2019 14:24:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726744AbfEAOYg convert rfc822-to-8bit (ORCPT ); Wed, 1 May 2019 10:24:36 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:52746 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726732AbfEAOYf (ORCPT ); Wed, 1 May 2019 10:24:35 -0400 Received: from pps.filterd (m0098393.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x41ENQhQ080370 for ; Wed, 1 May 2019 10:24:34 -0400 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0a-001b2d01.pphosted.com with ESMTP id 2s7d0ugbfk-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 01 May 2019 10:24:34 -0400 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 1 May 2019 15:24:32 +0100 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp01.uk.ibm.com (192.168.101.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Wed, 1 May 2019 15:24:28 +0100 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x41EOREu48824320 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 1 May 2019 14:24:27 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C0E6B52054; Wed, 1 May 2019 14:24:27 +0000 (GMT) Received: from localhost.localdomain (unknown [9.199.33.136]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id A9BF852051; Wed, 1 May 2019 14:24:25 +0000 (GMT) From: Chandan Rajendra To: Eric Biggers Cc: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-fscrypt@vger.kernel.org, tytso@mit.edu, adilger.kernel@dilger.ca, jaegeuk@kernel.org, yuchao0@huawei.com, hch@infradead.org Subject: Re: [PATCH V2 02/13] Consolidate "read callbacks" into a new file Date: Wed, 01 May 2019 18:02:39 +0530 Organization: IBM In-Reply-To: <20190430180507.GD48973@gmail.com> References: <20190428043121.30925-1-chandan@linux.ibm.com> <20190428043121.30925-3-chandan@linux.ibm.com> <20190430180507.GD48973@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8BIT Content-Type: text/plain; charset="UTF-8" X-TM-AS-GCONF: 00 x-cbid: 19050114-4275-0000-0000-000003304E9A X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19050114-4276-0000-0000-0000383FAAE7 Message-Id: <8267479.irDUbO2F3m@localhost.localdomain> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-05-01_07:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1905010092 Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org On Tuesday, April 30, 2019 11:35:08 PM IST Eric Biggers wrote: > On Sun, Apr 28, 2019 at 10:01:10AM +0530, Chandan Rajendra wrote: > > The "read callbacks" code is used by both Ext4 and F2FS. Hence to > > remove duplicity, this commit moves the code into > > include/linux/read_callbacks.h and fs/read_callbacks.c. > > > > The corresponding decrypt and verity "work" functions have been moved > > inside fscrypt and fsverity sources. With these in place, the read > > callbacks code now has to just invoke enqueue functions provided by > > fscrypt and fsverity. > > > > Signed-off-by: Chandan Rajendra > > --- > > fs/Kconfig | 4 + > > fs/Makefile | 4 + > > fs/crypto/Kconfig | 1 + > > fs/crypto/bio.c | 23 ++--- > > fs/crypto/crypto.c | 17 +-- > > fs/crypto/fscrypt_private.h | 3 + > > fs/ext4/ext4.h | 2 - > > fs/ext4/readpage.c | 183 +++++---------------------------- > > fs/ext4/super.c | 9 +- > > fs/f2fs/data.c | 148 ++++---------------------- > > fs/f2fs/super.c | 9 +- > > fs/read_callbacks.c | 136 ++++++++++++++++++++++++ > > fs/verity/Kconfig | 1 + > > fs/verity/verify.c | 12 +++ > > include/linux/fscrypt.h | 20 +--- > > include/linux/read_callbacks.h | 21 ++++ > > 16 files changed, 251 insertions(+), 342 deletions(-) > > create mode 100644 fs/read_callbacks.c > > create mode 100644 include/linux/read_callbacks.h > > > > diff --git a/fs/Kconfig b/fs/Kconfig > > index 97f9eb8df713..03084f2dbeaf 100644 > > --- a/fs/Kconfig > > +++ b/fs/Kconfig > > @@ -308,6 +308,10 @@ config NFS_COMMON > > depends on NFSD || NFS_FS || LOCKD > > default y > > > > +config FS_READ_CALLBACKS > > + bool > > + default n > > + > > source "net/sunrpc/Kconfig" > > source "fs/ceph/Kconfig" > > source "fs/cifs/Kconfig" > > This shouldn't be under the 'if NETWORK_FILESYSTEMS' block, since it has nothing > to do with network filesystems. When trying to compile this I got: > > WARNING: unmet direct dependencies detected for FS_READ_CALLBACKS > Depends on [n]: NETWORK_FILESYSTEMS [=n] > Selected by [y]: > - FS_ENCRYPTION [=y] > - FS_VERITY [=y] > > Perhaps put it just below FS_IOMAP? > > > diff --git a/fs/Makefile b/fs/Makefile > > index 9dd2186e74b5..e0c0fce8cf40 100644 > > --- a/fs/Makefile > > +++ b/fs/Makefile > > @@ -21,6 +21,10 @@ else > > obj-y += no-block.o > > endif > > > > +ifeq ($(CONFIG_FS_READ_CALLBACKS),y) > > +obj-y += read_callbacks.o > > +endif > > + > > obj-$(CONFIG_PROC_FS) += proc_namespace.o > > > > obj-y += notify/ > > diff --git a/fs/crypto/Kconfig b/fs/crypto/Kconfig > > index f0de238000c0..163c328bcbd4 100644 > > --- a/fs/crypto/Kconfig > > +++ b/fs/crypto/Kconfig > > @@ -8,6 +8,7 @@ config FS_ENCRYPTION > > select CRYPTO_CTS > > select CRYPTO_SHA256 > > select KEYS > > + select FS_READ_CALLBACKS > > help > > Enable encryption of files and directories. This > > feature is similar to ecryptfs, but it is more memory > > This selection needs to be conditional on BLOCK. > > select FS_READ_CALLBACKS if BLOCK > > Otherwise, building without BLOCK and with UBIFS encryption support fails. > > fs/read_callbacks.c: In function ‘end_read_callbacks’: > fs/read_callbacks.c:34:23: error: storage size of ‘iter_all’ isn’t known > struct bvec_iter_all iter_all; > ^~~~~~~~ > fs/read_callbacks.c:37:20: error: dereferencing pointer to incomplete type ‘struct buffer_head’ > if (!PageError(bh->b_page)) > > [...] > I will fix this in the next version of this patchset. -- chandan From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chandan Rajendra Subject: Re: [PATCH V2 02/13] Consolidate "read callbacks" into a new file Date: Wed, 01 May 2019 18:02:39 +0530 Message-ID: <8267479.irDUbO2F3m@localhost.localdomain> References: <20190428043121.30925-1-chandan@linux.ibm.com> <20190428043121.30925-3-chandan@linux.ibm.com> <20190430180507.GD48973@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1hLqA6-0004lS-7q for linux-f2fs-devel@lists.sourceforge.net; Wed, 01 May 2019 14:24:42 +0000 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5] helo=mx0a-001b2d01.pphosted.com) by sfi-mx-4.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) id 1hLqA4-001ih6-Bp for linux-f2fs-devel@lists.sourceforge.net; Wed, 01 May 2019 14:24:42 +0000 Received: from pps.filterd (m0098414.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x41EM8OV005694 for ; Wed, 1 May 2019 10:24:34 -0400 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0b-001b2d01.pphosted.com with ESMTP id 2s7cyprdyb-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 01 May 2019 10:24:34 -0400 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 1 May 2019 15:24:32 +0100 In-Reply-To: <20190430180507.GD48973@gmail.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net To: Eric Biggers Cc: tytso@mit.edu, linux-f2fs-devel@lists.sourceforge.net, hch@infradead.org, linux-fscrypt@vger.kernel.org, adilger.kernel@dilger.ca, linux-fsdevel@vger.kernel.org, jaegeuk@kernel.org, linux-ext4@vger.kernel.org T24gVHVlc2RheSwgQXByaWwgMzAsIDIwMTkgMTE6MzU6MDggUE0gSVNUIEVyaWMgQmlnZ2VycyB3 cm90ZToKPiBPbiBTdW4sIEFwciAyOCwgMjAxOSBhdCAxMDowMToxMEFNICswNTMwLCBDaGFuZGFu IFJhamVuZHJhIHdyb3RlOgo+ID4gVGhlICJyZWFkIGNhbGxiYWNrcyIgY29kZSBpcyB1c2VkIGJ5 IGJvdGggRXh0NCBhbmQgRjJGUy4gSGVuY2UgdG8KPiA+IHJlbW92ZSBkdXBsaWNpdHksIHRoaXMg Y29tbWl0IG1vdmVzIHRoZSBjb2RlIGludG8KPiA+IGluY2x1ZGUvbGludXgvcmVhZF9jYWxsYmFj a3MuaCBhbmQgZnMvcmVhZF9jYWxsYmFja3MuYy4KPiA+IAo+ID4gVGhlIGNvcnJlc3BvbmRpbmcg ZGVjcnlwdCBhbmQgdmVyaXR5ICJ3b3JrIiBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vdmVkCj4gPiBp bnNpZGUgZnNjcnlwdCBhbmQgZnN2ZXJpdHkgc291cmNlcy4gV2l0aCB0aGVzZSBpbiBwbGFjZSwg dGhlIHJlYWQKPiA+IGNhbGxiYWNrcyBjb2RlIG5vdyBoYXMgdG8ganVzdCBpbnZva2UgZW5xdWV1 ZSBmdW5jdGlvbnMgcHJvdmlkZWQgYnkKPiA+IGZzY3J5cHQgYW5kIGZzdmVyaXR5Lgo+ID4gCj4g PiBTaWduZWQtb2ZmLWJ5OiBDaGFuZGFuIFJhamVuZHJhIDxjaGFuZGFuQGxpbnV4LmlibS5jb20+ Cj4gPiAtLS0KPiA+ICBmcy9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKwo+ID4g IGZzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgNCArCj4gPiAgZnMvY3J5cHRvL0tj b25maWcgICAgICAgICAgICAgIHwgICAxICsKPiA+ICBmcy9jcnlwdG8vYmlvLmMgICAgICAgICAg ICAgICAgfCAgMjMgKystLS0KPiA+ICBmcy9jcnlwdG8vY3J5cHRvLmMgICAgICAgICAgICAgfCAg MTcgKy0tCj4gPiAgZnMvY3J5cHRvL2ZzY3J5cHRfcHJpdmF0ZS5oICAgIHwgICAzICsKPiA+ICBm cy9leHQ0L2V4dDQuaCAgICAgICAgICAgICAgICAgfCAgIDIgLQo+ID4gIGZzL2V4dDQvcmVhZHBh Z2UuYyAgICAgICAgICAgICB8IDE4MyArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K PiA+ICBmcy9leHQ0L3N1cGVyLmMgICAgICAgICAgICAgICAgfCAgIDkgKy0KPiA+ICBmcy9mMmZz L2RhdGEuYyAgICAgICAgICAgICAgICAgfCAxNDggKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K PiA+ICBmcy9mMmZzL3N1cGVyLmMgICAgICAgICAgICAgICAgfCAgIDkgKy0KPiA+ICBmcy9yZWFk X2NhbGxiYWNrcy5jICAgICAgICAgICAgfCAxMzYgKysrKysrKysrKysrKysrKysrKysrKysrCj4g PiAgZnMvdmVyaXR5L0tjb25maWcgICAgICAgICAgICAgIHwgICAxICsKPiA+ICBmcy92ZXJpdHkv dmVyaWZ5LmMgICAgICAgICAgICAgfCAgMTIgKysrCj4gPiAgaW5jbHVkZS9saW51eC9mc2NyeXB0 LmggICAgICAgIHwgIDIwICstLS0KPiA+ICBpbmNsdWRlL2xpbnV4L3JlYWRfY2FsbGJhY2tzLmgg fCAgMjEgKysrKwo+ID4gIDE2IGZpbGVzIGNoYW5nZWQsIDI1MSBpbnNlcnRpb25zKCspLCAzNDIg ZGVsZXRpb25zKC0pCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGZzL3JlYWRfY2FsbGJhY2tzLmMK PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9yZWFkX2NhbGxiYWNrcy5oCj4g PiAKPiA+IGRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwo+ID4gaW5kZXggOTdm OWViOGRmNzEzLi4wMzA4NGYyZGJlYWYgMTAwNjQ0Cj4gPiAtLS0gYS9mcy9LY29uZmlnCj4gPiAr KysgYi9mcy9LY29uZmlnCj4gPiBAQCAtMzA4LDYgKzMwOCwxMCBAQCBjb25maWcgTkZTX0NPTU1P Tgo+ID4gIAlkZXBlbmRzIG9uIE5GU0QgfHwgTkZTX0ZTIHx8IExPQ0tECj4gPiAgCWRlZmF1bHQg eQo+ID4gIAo+ID4gK2NvbmZpZyBGU19SRUFEX0NBTExCQUNLUwo+ID4gKyAgICAgICBib29sCj4g PiArICAgICAgIGRlZmF1bHQgbgo+ID4gKwo+ID4gIHNvdXJjZSAibmV0L3N1bnJwYy9LY29uZmln Igo+ID4gIHNvdXJjZSAiZnMvY2VwaC9LY29uZmlnIgo+ID4gIHNvdXJjZSAiZnMvY2lmcy9LY29u ZmlnIgo+IAo+IFRoaXMgc2hvdWxkbid0IGJlIHVuZGVyIHRoZSAnaWYgTkVUV09SS19GSUxFU1lT VEVNUycgYmxvY2ssIHNpbmNlIGl0IGhhcyBub3RoaW5nCj4gdG8gZG8gd2l0aCBuZXR3b3JrIGZp bGVzeXN0ZW1zLiAgV2hlbiB0cnlpbmcgdG8gY29tcGlsZSB0aGlzIEkgZ290Ogo+IAo+IAlXQVJO SU5HOiB1bm1ldCBkaXJlY3QgZGVwZW5kZW5jaWVzIGRldGVjdGVkIGZvciBGU19SRUFEX0NBTExC QUNLUwo+IAkgIERlcGVuZHMgb24gW25dOiBORVRXT1JLX0ZJTEVTWVNURU1TIFs9bl0KPiAJICBT ZWxlY3RlZCBieSBbeV06Cj4gCSAgLSBGU19FTkNSWVBUSU9OIFs9eV0KPiAJICAtIEZTX1ZFUklU WSBbPXldCj4gCj4gUGVyaGFwcyBwdXQgaXQganVzdCBiZWxvdyBGU19JT01BUD8KPiAKPiA+IGRp ZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCj4gPiBpbmRleCA5ZGQyMTg2ZTc0 YjUuLmUwYzBmY2U4Y2Y0MCAxMDA2NDQKPiA+IC0tLSBhL2ZzL01ha2VmaWxlCj4gPiArKysgYi9m cy9NYWtlZmlsZQo+ID4gQEAgLTIxLDYgKzIxLDEwIEBAIGVsc2UKPiA+ICBvYmoteSArPQluby1i bG9jay5vCj4gPiAgZW5kaWYKPiA+ICAKPiA+ICtpZmVxICgkKENPTkZJR19GU19SRUFEX0NBTExC QUNLUykseSkKPiA+ICtvYmoteSArPQlyZWFkX2NhbGxiYWNrcy5vCj4gPiArZW5kaWYKPiA+ICsK PiA+ICBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvY19uYW1lc3BhY2Uubwo+ID4gIAo+ID4g IG9iai15CQkJCSs9IG5vdGlmeS8KPiA+IGRpZmYgLS1naXQgYS9mcy9jcnlwdG8vS2NvbmZpZyBi L2ZzL2NyeXB0by9LY29uZmlnCj4gPiBpbmRleCBmMGRlMjM4MDAwYzAuLjE2M2MzMjhiY2JkNCAx MDA2NDQKPiA+IC0tLSBhL2ZzL2NyeXB0by9LY29uZmlnCj4gPiArKysgYi9mcy9jcnlwdG8vS2Nv bmZpZwo+ID4gQEAgLTgsNiArOCw3IEBAIGNvbmZpZyBGU19FTkNSWVBUSU9OCj4gPiAgCXNlbGVj dCBDUllQVE9fQ1RTCj4gPiAgCXNlbGVjdCBDUllQVE9fU0hBMjU2Cj4gPiAgCXNlbGVjdCBLRVlT Cj4gPiArCXNlbGVjdCBGU19SRUFEX0NBTExCQUNLUwo+ID4gIAloZWxwCj4gPiAgCSAgRW5hYmxl IGVuY3J5cHRpb24gb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLiAgVGhpcwo+ID4gIAkgIGZlYXR1 cmUgaXMgc2ltaWxhciB0byBlY3J5cHRmcywgYnV0IGl0IGlzIG1vcmUgbWVtb3J5Cj4gCj4gVGhp cyBzZWxlY3Rpb24gbmVlZHMgdG8gYmUgY29uZGl0aW9uYWwgb24gQkxPQ0suCj4gCj4gCXNlbGVj dCBGU19SRUFEX0NBTExCQUNLUyBpZiBCTE9DSwo+IAo+IE90aGVyd2lzZSwgYnVpbGRpbmcgd2l0 aG91dCBCTE9DSyBhbmQgd2l0aCBVQklGUyBlbmNyeXB0aW9uIHN1cHBvcnQgZmFpbHMuCj4gCj4g CWZzL3JlYWRfY2FsbGJhY2tzLmM6IEluIGZ1bmN0aW9uIOKAmGVuZF9yZWFkX2NhbGxiYWNrc+KA mToKPiAJZnMvcmVhZF9jYWxsYmFja3MuYzozNDoyMzogZXJyb3I6IHN0b3JhZ2Ugc2l6ZSBvZiDi gJhpdGVyX2FsbOKAmSBpc27igJl0IGtub3duCj4gCSAgc3RydWN0IGJ2ZWNfaXRlcl9hbGwgaXRl cl9hbGw7Cj4gCQkJICAgICAgIF5+fn5+fn5+Cj4gCWZzL3JlYWRfY2FsbGJhY2tzLmM6Mzc6MjA6 IGVycm9yOiBkZXJlZmVyZW5jaW5nIHBvaW50ZXIgdG8gaW5jb21wbGV0ZSB0eXBlIOKAmHN0cnVj dCBidWZmZXJfaGVhZOKAmQo+IAkgICBpZiAoIVBhZ2VFcnJvcihiaC0+Yl9wYWdlKSkKPiAKPiAJ Wy4uLl0KPgoKSSB3aWxsIGZpeCB0aGlzIGluIHRoZSBuZXh0IHZlcnNpb24gb2YgdGhpcyBwYXRj aHNldC4KCi0tIApjaGFuZGFuCgoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KTGludXgtZjJmcy1kZXZlbCBtYWlsaW5nIGxpc3QKTGludXgtZjJmcy1k ZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQv bGlzdHMvbGlzdGluZm8vbGludXgtZjJmcy1kZXZlbAo=