From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: [PATCH v14 10/11] common: add a new mappable resource type: XENMEM_resource_grant_table Date: Tue, 28 Nov 2017 15:08:52 +0000 Message-ID: <20171128150853.1927-11-paul.durrant@citrix.com> References: <20171128150853.1927-1-paul.durrant@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eJhoB-00030a-C6 for xen-devel@lists.xenproject.org; Tue, 28 Nov 2017 15:28:27 +0000 In-Reply-To: <20171128150853.1927-1-paul.durrant@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Paul Durrant List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBhbGxvd3MgZ3JhbnQgdGFibGUgZnJhbWVzIHRvIGJlIG1hcHBlZCB1c2luZyB0 aGUKWEVOTUVNX2FjcXVpcmVfcmVzb3VyY2UgbWVtb3J5IG9wLgoKTk9URTogVGhpcyBwYXRjaCBl eHBhbmRzIHRoZSBvbi1zdGFjayBtZm5fbGlzdCBhcnJheSBpbiBhY3F1aXJlX3Jlc291cmNlKCkK ICAgICAgYnV0IGl0IGlzIHN0aWxsIHNtYWxsIGVub3VnaCB0byByZW1haW4gb24tc3RhY2suCgpT aWduZWQtb2ZmLWJ5OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgpSZXZp ZXdlZC1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgotLS0KQ2M6IEFuZHJldyBD b29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+CkNjOiBHZW9yZ2UgRHVubGFwIDxHZW9y Z2UuRHVubGFwQGV1LmNpdHJpeC5jb20+CkNjOiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUu Y2l0cml4LmNvbT4KQ2M6IEtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xl LmNvbT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KQ2M6 IFRpbSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgpDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNv bT4KCnYxMzoKIC0gUmUtd29yayB0aGUgaW50ZXJuYWxzIHRvIGF2b2lkIHVzaW5nIHRoZSBYRU5N QVBJRFhfZ3JhbnRfdGFibGVfc3RhdHVzCiAgIGhhY2suCgp2MTI6CiAtIERyb3BwZWQgbGltaXQg Y2hlY2tzIGFzIHJlcXVlc3RlZCBieSBKYW4uCgp2MTA6CiAtIEFkZHJlc3NlZCBjb21tZW50cyBm cm9tIEphbi4KCnY4OgogLSBUaGUgZnVuY3Rpb25hbGl0eSB3YXMgb3JpZ2luYWxseSBpbmNvcnBv cmF0ZWQgaW50byB0aGUgZWFybGllciBwYXRjaAogICAieDg2L21tOiBhZGQgSFlQRVJWSVNPUl9t ZW1vcnlfb3AgdG8gYWNxdWlyZSBndWVzdCByZXNvdXJjZXMiLgotLS0KIHhlbi9jb21tb24vZ3Jh bnRfdGFibGUuYyAgICAgIHwgNjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLQogeGVuL2NvbW1vbi9tZW1vcnkuYyAgICAgICAgICAgfCA0NSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKystCiB4ZW4vaW5jbHVkZS9wdWJsaWMvbWVtb3J5LmggICB8ICA2ICsr KysrCiB4ZW4vaW5jbHVkZS94ZW4vZ3JhbnRfdGFibGUuaCB8ICA0ICsrKwogNCBmaWxlcyBjaGFu Z2VkLCAxMDkgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4v Y29tbW9uL2dyYW50X3RhYmxlLmMgYi94ZW4vY29tbW9uL2dyYW50X3RhYmxlLmMKaW5kZXggYzU5 NTBmMmIzZi4uNmRjNTQ4OWE0NyAxMDA2NDQKLS0tIGEveGVuL2NvbW1vbi9ncmFudF90YWJsZS5j CisrKyBiL3hlbi9jb21tb24vZ3JhbnRfdGFibGUuYwpAQCAtMzc3MiwyMSArMzc3MiwyMSBAQCBp bnQgbWVtX3NoYXJpbmdfZ3JlZl90b19nZm4oc3RydWN0IGdyYW50X3RhYmxlICpndCwgZ3JhbnRf cmVmX3QgcmVmLAogfQogI2VuZGlmCiAKLWludCBnbnR0YWJfbWFwX2ZyYW1lKHN0cnVjdCBkb21h aW4gKmQsIHVuc2lnbmVkIGxvbmcgaWR4LCBnZm5fdCBnZm4sCi0gICAgICAgICAgICAgICAgICAg ICBtZm5fdCAqbWZuKQorLyogQ2FsbGVyIG11c3QgaG9sZCB3cml0ZSBsb2NrIGFzIHZlcnNpb24g bWF5IGNoYW5nZSBhbmQgdGFibGUgbWF5IGdyb3cgKi8KK3N0YXRpYyBpbnQgZ250dGFiX2dldF9m cmFtZShzdHJ1Y3QgZG9tYWluICpkLCBib29sIGlzX3N0YXR1cywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGlkeCwgbWZuX3QgKm1mbikKIHsKLSAgICBpbnQgcmMg PSAwOwogICAgIHN0cnVjdCBncmFudF90YWJsZSAqZ3QgPSBkLT5ncmFudF90YWJsZTsKLQotICAg IGdyYW50X3dyaXRlX2xvY2soZ3QpOworICAgIGludCByYyA9IDA7CiAKICAgICBpZiAoIGd0LT5n dF92ZXJzaW9uID09IDAgKQogICAgICAgICBndC0+Z3RfdmVyc2lvbiA9IDE7CiAKLSAgICBpZiAo IGd0LT5ndF92ZXJzaW9uID09IDIgJiYKLSAgICAgICAgIChpZHggJiBYRU5NQVBJRFhfZ3JhbnRf dGFibGVfc3RhdHVzKSApCisgICAgaWYgKCBpc19zdGF0dXMgKQogICAgIHsKLSAgICAgICAgaWR4 ICY9IH5YRU5NQVBJRFhfZ3JhbnRfdGFibGVfc3RhdHVzOworICAgICAgICBpZiAoIGd0LT5ndF92 ZXJzaW9uICE9IDIgKQorICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKICAgICAgICAgaWYg KCBpZHggPCBucl9zdGF0dXNfZnJhbWVzKGd0KSApCiAgICAgICAgICAgICAqbWZuID0gX21mbih2 aXJ0X3RvX21mbihndC0+c3RhdHVzW2lkeF0pKTsKICAgICAgICAgZWxzZQpAQCAtMzgwMyw2ICsz ODAzLDI1IEBAIGludCBnbnR0YWJfbWFwX2ZyYW1lKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVk IGxvbmcgaWR4LCBnZm5fdCBnZm4sCiAgICAgICAgICAgICByYyA9IC1FSU5WQUw7CiAgICAgfQog CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgZ250dGFiX21hcF9mcmFtZShzdHJ1Y3QgZG9tYWlu ICpkLCB1bnNpZ25lZCBsb25nIGlkeCwgZ2ZuX3QgZ2ZuLAorICAgICAgICAgICAgICAgICAgICAg bWZuX3QgKm1mbikKK3sKKyAgICBzdHJ1Y3QgZ3JhbnRfdGFibGUgKmd0ID0gZC0+Z3JhbnRfdGFi bGU7CisgICAgYm9vbCBpc19zdGF0dXMgPSBmYWxzZTsKKyAgICBpbnQgcmM7CisKKyAgICBncmFu dF93cml0ZV9sb2NrKGd0KTsKKworICAgIGlmICggaWR4ICYgWEVOTUFQSURYX2dyYW50X3RhYmxl X3N0YXR1cyApCisgICAgeworICAgICAgICBpc19zdGF0dXMgPSB0cnVlOworICAgICAgICBpZHgg Jj0gflhFTk1BUElEWF9ncmFudF90YWJsZV9zdGF0dXM7CisgICAgfQorCisgICAgcmMgPSBnbnR0 YWJfZ2V0X2ZyYW1lKGQsIGlzX3N0YXR1cywgaWR4LCBtZm4pOwogICAgIGlmICggIXJjICkKICAg ICAgICAgZ250dGFiX3NldF9mcmFtZV9nZm4oZ3QsIGlkeCwgZ2ZuKTsKIApAQCAtMzgxMSw2ICsz ODMwLDM0IEBAIGludCBnbnR0YWJfbWFwX2ZyYW1lKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVk IGxvbmcgaWR4LCBnZm5fdCBnZm4sCiAgICAgcmV0dXJuIHJjOwogfQogCitpbnQgZ250dGFiX2dl dF9ncmFudF9mcmFtZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGlkeCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1mbl90ICptZm4pCit7CisgICAgc3RydWN0IGdyYW50X3Rh YmxlICpndCA9IGQtPmdyYW50X3RhYmxlOworICAgIGludCByYzsKKworICAgIC8qIHdyaXRlIGxv Y2sgcmVxdWlyZWQgYXMgdmVyc2lvbiBtYXkgY2hhbmdlIGFuZC9vciB0YWJsZSBtYXkgZ3JvdyAq LworICAgIGdyYW50X3dyaXRlX2xvY2soZ3QpOworICAgIHJjID0gZ250dGFiX2dldF9mcmFtZShk LCBmYWxzZSwgaWR4LCBtZm4pOworICAgIGdyYW50X3dyaXRlX3VubG9jayhndCk7CisKKyAgICBy ZXR1cm4gcmM7Cit9CisKK2ludCBnbnR0YWJfZ2V0X3N0YXR1c19mcmFtZShzdHJ1Y3QgZG9tYWlu ICpkLCB1bnNpZ25lZCBsb25nIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZm5f dCAqbWZuKQoreworICAgIHN0cnVjdCBncmFudF90YWJsZSAqZ3QgPSBkLT5ncmFudF90YWJsZTsK KyAgICBpbnQgcmM7CisKKyAgICAvKiB3cml0ZSBsb2NrIHJlcXVpcmVkIGFzIHZlcnNpb24gbWF5 IGNoYW5nZSBhbmQvb3IgdGFibGUgbWF5IGdyb3cgKi8KKyAgICBncmFudF93cml0ZV9sb2NrKGd0 KTsKKyAgICByYyA9IGdudHRhYl9nZXRfZnJhbWUoZCwgdHJ1ZSwgaWR4LCBtZm4pOworICAgIGdy YW50X3dyaXRlX3VubG9jayhndCk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKIHN0YXRpYyB2b2lk IGdudHRhYl91c2FnZV9wcmludChzdHJ1Y3QgZG9tYWluICpyZCkKIHsKICAgICBpbnQgZmlyc3Qg PSAxOwpkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9tZW1vcnkuYyBiL3hlbi9jb21tb24vbWVtb3J5 LmMKaW5kZXggMDE2N2Q5Nzg4Yi4uNDBkNDI2NGQ1ZiAxMDA2NDQKLS0tIGEveGVuL2NvbW1vbi9t ZW1vcnkuYworKysgYi94ZW4vY29tbW9uL21lbW9yeS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5j bHVkZSA8eGVuL251bWEuaD4KICNpbmNsdWRlIDx4ZW4vbWVtX2FjY2Vzcy5oPgogI2luY2x1ZGUg PHhlbi90cmFjZS5oPgorI2luY2x1ZGUgPHhlbi9ncmFudF90YWJsZS5oPgogI2luY2x1ZGUgPGFz bS9jdXJyZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KICNpbmNsdWRlIDxhc20vcDJt Lmg+CkBAIC05NzAsNiArOTcxLDQzIEBAIHN0YXRpYyBsb25nIHhhdHBfcGVybWlzc2lvbl9jaGVj ayhzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc3BhY2UpCiAgICAgcmV0dXJuIHhzbV9h ZGRfdG9fcGh5c21hcChYU01fVEFSR0VULCBjdXJyZW50LT5kb21haW4sIGQpOwogfQogCitzdGF0 aWMgaW50IGFjcXVpcmVfZ3JhbnRfdGFibGUoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50 IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZnJhbWUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5yX2ZyYW1lcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZW5fcGZuX3QgbWZuX2xpc3RbXSkKK3sK KyAgICB1bnNpZ25lZCBpbnQgaSA9IG5yX2ZyYW1lczsKKworICAgIC8qIEl0ZXJhdGUgYmFja3dh cmRzIGluIGNhc2UgdGFibGUgbmVlZHMgdG8gZ3JvdyAqLworICAgIHdoaWxlICggaS0tICE9IDAg KQorICAgIHsKKyAgICAgICAgbWZuX3QgbWZuID0gSU5WQUxJRF9NRk47CisgICAgICAgIGludCBy YzsKKworICAgICAgICBzd2l0Y2ggKCBpZCApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBYRU5N RU1fcmVzb3VyY2VfZ3JhbnRfdGFibGVfaWRfZ3JhbnQ6CisgICAgICAgICAgICByYyA9IGdudHRh Yl9nZXRfZ3JhbnRfZnJhbWUoZCwgZnJhbWUgKyBpLCAmbWZuKTsKKyAgICAgICAgICAgIGJyZWFr OworCisgICAgICAgIGNhc2UgWEVOTUVNX3Jlc291cmNlX2dyYW50X3RhYmxlX2lkX3N0YXR1czoK KyAgICAgICAgICAgIHJjID0gZ250dGFiX2dldF9zdGF0dXNfZnJhbWUoZCwgZnJhbWUgKyBpLCAm bWZuKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg ICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg IGlmICggcmMgKQorICAgICAgICAgICAgcmV0dXJuIHJjOworCisgICAgICAgIG1mbl9saXN0W2ld ID0gbWZuX3gobWZuKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBh Y3F1aXJlX3Jlc291cmNlKAogICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX21lbV9hY3F1 aXJlX3Jlc291cmNlX3QpIGFyZykKIHsKQEAgLTk4MCw3ICsxMDE4LDcgQEAgc3RhdGljIGludCBh Y3F1aXJlX3Jlc291cmNlKAogICAgICAqIG1vbWVudCBzaW5jZSB0aGV5IGFyZSBzbWFsbCwgYnV0 IGlmIHRoZXkgbmVlZCB0byBncm93IGluIGZ1dHVyZQogICAgICAqIHVzZS1jYXNlcyB0aGVuIHBl ci1DUFUgYXJyYXlzIG9yIGhlYXAgYWxsb2NhdGlvbnMgbWF5IGJlIHJlcXVpcmVkLgogICAgICAq LwotICAgIHhlbl9wZm5fdCBtZm5fbGlzdFsyXTsKKyAgICB4ZW5fcGZuX3QgbWZuX2xpc3RbMzJd OwogICAgIGludCByYzsKIAogICAgIGlmICggY29weV9mcm9tX2d1ZXN0KCZ4bWFyLCBhcmcsIDEp ICkKQEAgLTEwMTUsNiArMTA1MywxMSBAQCBzdGF0aWMgaW50IGFjcXVpcmVfcmVzb3VyY2UoCiAK ICAgICBzd2l0Y2ggKCB4bWFyLnR5cGUgKQogICAgIHsKKyAgICBjYXNlIFhFTk1FTV9yZXNvdXJj ZV9ncmFudF90YWJsZToKKyAgICAgICAgcmMgPSBhY3F1aXJlX2dyYW50X3RhYmxlKGQsIHhtYXIu aWQsIHhtYXIuZnJhbWUsIHhtYXIubnJfZnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWZuX2xpc3QpOworICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAg ICAgIHJjID0gYXJjaF9hY3F1aXJlX3Jlc291cmNlKGQsIHhtYXIudHlwZSwgeG1hci5pZCwgeG1h ci5mcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1hci5ucl9mcmFt ZXMsIG1mbl9saXN0KTsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3B1YmxpYy9tZW1vcnkuaCBi L3hlbi9pbmNsdWRlL3B1YmxpYy9tZW1vcnkuaAppbmRleCA4MzhmMjQ4YTU5Li5kNGVkOGJhODg5 IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9wdWJsaWMvbWVtb3J5LmgKKysrIGIveGVuL2luY2x1 ZGUvcHVibGljL21lbW9yeS5oCkBAIC02MTEsMTQgKzYxMSwyMCBAQCBzdHJ1Y3QgeGVuX21lbV9h Y3F1aXJlX3Jlc291cmNlIHsKICAgICB1aW50MTZfdCB0eXBlOwogCiAjZGVmaW5lIFhFTk1FTV9y ZXNvdXJjZV9pb3JlcV9zZXJ2ZXIgMAorI2RlZmluZSBYRU5NRU1fcmVzb3VyY2VfZ3JhbnRfdGFi bGUgMQogCiAgICAgLyoKICAgICAgKiBJTiAtIGEgdHlwZS1zcGVjaWZpYyByZXNvdXJjZSBpZGVu dGlmaWVyLCB3aGljaCBtdXN0IGJlIHplcm8KICAgICAgKiAgICAgIHVubGVzcyBzdGF0ZWQgb3Ro ZXJ3aXNlLgogICAgICAqCiAgICAgICogdHlwZSA9PSBYRU5NRU1fcmVzb3VyY2VfaW9yZXFfc2Vy dmVyIC0+IGlkID09IGlvcmVxIHNlcnZlciBpZAorICAgICAqIHR5cGUgPT0gWEVOTUVNX3Jlc291 cmNlX2dyYW50X3RhYmxlIC0+IGlkIGRlZmluZWQgYmVsb3cKICAgICAgKi8KICAgICB1aW50MzJf dCBpZDsKKworI2RlZmluZSBYRU5NRU1fcmVzb3VyY2VfZ3JhbnRfdGFibGVfaWRfZ3JhbnQgMAor I2RlZmluZSBYRU5NRU1fcmVzb3VyY2VfZ3JhbnRfdGFibGVfaWRfc3RhdHVzIDEKKwogICAgIC8q IElOL09VVCAtIEFzIGFuIElOIHBhcmFtZXRlciBudW1iZXIgb2YgZnJhbWVzIG9mIHRoZSByZXNv dXJjZQogICAgICAqICAgICAgICAgIHRvIGJlIG1hcHBlZC4gSG93ZXZlciwgaWYgdGhlIHNwZWNp ZmllZCB2YWx1ZSBpcyAwIGFuZAogICAgICAqICAgICAgICAgIGZyYW1lX2xpc3QgaXMgTlVMTCB0 aGVuIHRoaXMgZmllbGQgd2lsbCBiZSBzZXQgdG8gdGhlCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVk ZS94ZW4vZ3JhbnRfdGFibGUuaCBiL3hlbi9pbmNsdWRlL3hlbi9ncmFudF90YWJsZS5oCmluZGV4 IGIzYTk1ZmRhNTguLmU5MTI1ZTQzZTcgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL3hlbi9ncmFu dF90YWJsZS5oCisrKyBiL3hlbi9pbmNsdWRlL3hlbi9ncmFudF90YWJsZS5oCkBAIC01NSw2ICs1 NSwxMCBAQCBpbnQgbWVtX3NoYXJpbmdfZ3JlZl90b19nZm4oc3RydWN0IGdyYW50X3RhYmxlICpn dCwgZ3JhbnRfcmVmX3QgcmVmLAogCiBpbnQgZ250dGFiX21hcF9mcmFtZShzdHJ1Y3QgZG9tYWlu ICpkLCB1bnNpZ25lZCBsb25nIGlkeCwgZ2ZuX3QgZ2ZuLAogICAgICAgICAgICAgICAgICAgICAg bWZuX3QgKm1mbik7CitpbnQgZ250dGFiX2dldF9ncmFudF9mcmFtZShzdHJ1Y3QgZG9tYWluICpk LCB1bnNpZ25lZCBsb25nIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbl90ICpt Zm4pOworaW50IGdudHRhYl9nZXRfc3RhdHVzX2ZyYW1lKHN0cnVjdCBkb21haW4gKmQsIHVuc2ln bmVkIGxvbmcgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbl90ICptZm4pOwog CiB1bnNpZ25lZCBpbnQgZ250dGFiX2RvbTBfZnJhbWVzKHZvaWQpOwogCi0tIAoyLjExLjAKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs