From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergej Proskurin Subject: [PATCH v4 8/9] arm/mem_access: Add short-descriptor based gpt Date: Tue, 20 Jun 2017 22:33:31 +0200 Message-ID: <20170620203332.17833-9-proskurin@sec.in.tum.de> References: <20170620203332.17833-1-proskurin@sec.in.tum.de> 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 1dNPqu-0007tS-7J for xen-devel@lists.xenproject.org; Tue, 20 Jun 2017 20:34:20 +0000 In-Reply-To: <20170620203332.17833-1-proskurin@sec.in.tum.de> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Sergej Proskurin , Julien Grall , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org VGhpcyBjb21taXQgYWRkcyBmdW5jdGlvbmFsaXR5IHRvIHdhbGsgdGhlIGd1ZXN0J3MgcGFnZSB0 YWJsZXMgdXNpbmcgdGhlCnNob3J0LWRlc2NyaXB0b3IgdHJhbnNsYXRpb24gdGFibGUgZm9ybWF0 IGZvciBib3RoIEFSTXY3IGFuZCBBUk12OC4gVGhlCmltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9u IEFSTSBEREkgMDQ4N0ItYSBKMS02MDAyIGFuZCBBUk0gRERJIDA0MDZDLWIKQjMtMTUwNi4KClNp Z25lZC1vZmYtYnk6IFNlcmdlaiBQcm9za3VyaW4gPHByb3NrdXJpbkBzZWMuaW4udHVtLmRlPgot LS0KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KQ2M6IEp1 bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+Ci0tLQp2MzogTW92ZSB0aGUgaW1wbGVt ZW50YXRpb24gdG8gLi94ZW4vYXJjaC9hcm0vZ3Vlc3RfY29weS5jLgoKICAgIFVzZSBkZWZpbmVz IGluc3RlYWQgb2YgaGFyZGNvZGVkIHZhbHVlcy4KCiAgICBDb3NtZXRpYyBmaXhlcyAmIEFkZGVk IG1vcmUgY29tZW50cy4KCnY0OiBBZGp1c3RlZCB0aGUgbmFtZXMgb2Ygc2hvcnQtZGVzY3JpcHRv ciBkYXRhLXR5cGVzLgoKICAgIEFkYXB0IHRoZSBmdW5jdGlvbiB0byB0aGUgbmV3IHBhcmFtZXRl ciBvZiB0eXBlICJzdHJ1Y3QgdmNwdSAqIi4KCiAgICBDb3NtZXRpYyBmaXhlcy4KLS0tCiB4ZW4v YXJjaC9hcm0vZ3Vlc3Rfd2Fsay5jICAgICAgICB8IDE2NyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0KIHhlbi9pbmNsdWRlL2FzbS1hcm0vZ3Vlc3Rfd2Fsay5oIHwgIDE2 ICsrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTgxIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2d1ZXN0X3dhbGsuYyBiL3hlbi9hcmNoL2FybS9n dWVzdF93YWxrLmMKaW5kZXggYzM3YzU5NTE1Ny4uOWNjMTY3YWY0OSAxMDA2NDQKLS0tIGEveGVu L2FyY2gvYXJtL2d1ZXN0X3dhbGsuYworKysgYi94ZW4vYXJjaC9hcm0vZ3Vlc3Rfd2Fsay5jCkBA IC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CiAjaW5jbHVkZSA8eGVuL2Rv bWFpbl9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2d1ZXN0X3dhbGsuaD4KKyNpbmNsdWRlIDxhc20v c2hvcnQtZGVzYy5oPgogCiAvKgogICogVGhlIGZ1bmN0aW9uIGd1ZXN0X3dhbGtfc2QgdHJhbnNs YXRlcyBhIGdpdmVuIEdWQSBpbnRvIGFuIElQQSB1c2luZyB0aGUKQEAgLTMwLDggKzMxLDE3MCBA QCBzdGF0aWMgaW50IGd1ZXN0X3dhbGtfc2QoY29uc3Qgc3RydWN0IHZjcHUgKnYsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgdmFkZHJfdCBndmEsIHBhZGRyX3QgKmlwYSwKICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnBlcm1zKQogewotICAgIC8qIE5vdCBpbXBsZW1l bnRlZCB5ZXQuICovCi0gICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgYm9vbCBkaXNhYmxlZCA9IHRy dWU7CisgICAgaW50NjRfdCB0dGJyOworICAgIHBhZGRyX3QgbWFzaywgcGFkZHI7CisgICAgc2hv cnRfZGVzY190IHB0ZSwgKnRhYmxlOworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAg cmVnaXN0ZXJfdCB0dGJjciA9IFJFQURfU1lTUkVHKFRDUl9FTDEpOworICAgIHVuc2lnbmVkIGlu dCBsZXZlbCA9IDAsIG4gPSB0dGJjciAmIFRUQkNSX05fTUFTSzsKKyAgICBzdHJ1Y3QgZG9tYWlu ICpkID0gdi0+ZG9tYWluOworCisgICAgY29uc3QgcGFkZHJfdCBvZmZzZXRzWzJdID0geworICAg ICAgICAoKHBhZGRyX3QpKGd2YSA+PiAyMCkgJiAoKDFVTEwgPDwgKDEyIC0gbikpIC0gMSkpLAor ICAgICAgICAoKHBhZGRyX3QpKGd2YSA+PiAxMikgJiAoKDFVTEwgPDwgOCkgLSAxKSkKKyAgICB9 OworCisgICAgbWFzayA9ICgoMVVMTCA8PCBCSVRTX1BFUl9XT1JEKSAtIDEpICYKKyAgICAgICAg ICAgfigoMVVMTCA8PCAoQklUU19QRVJfV09SRCAtIG4pKSAtIDEpOworCisgICAgaWYgKCBuID09 IDAgfHwgIShndmEgJiBtYXNrKSApCisgICAgeworICAgICAgICAvKiBVc2UgVFRCUjAgZm9yIEdW QSB0byBJUEEgdHJhbnNsYXRpb24uICovCisgICAgICAgIHR0YnIgPSBSRUFEX1NZU1JFRzY0KFRU QlIwX0VMMSk7CisKKyAgICAgICAgLyogSWYgVFRCQ1IuUEQwIGlzIHNldCwgdHJhbnNsYXRpb25z IHVzaW5nIFRUQlIwIGFyZSBkaXNhYmxlZC4gKi8KKyAgICAgICAgZGlzYWJsZWQgPSB0dGJjciAm IFRUQkNSX1BEMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogVXNlIFRUQlIx IGZvciBHVkEgdG8gSVBBIHRyYW5zbGF0aW9uLiAqLworICAgICAgICB0dGJyID0gUkVBRF9TWVNS RUc2NChUVEJSMV9FTDEpOworCisgICAgICAgIC8qIElmIFRUQkNSLlBEMSBpcyBzZXQsIHRyYW5z bGF0aW9ucyB1c2luZyBUVEJSMSBhcmUgZGlzYWJsZWQuICovCisgICAgICAgIGRpc2FibGVkID0g dHRiY3IgJiBUVEJDUl9QRDE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVFRCUjEgdHJhbnNs YXRpb24gYWx3YXlzIHdvcmtzIGxpa2Ugbj09MCBUVEJSMCB0cmFuc2xhdGlvbiAoQVJNIERESQor ICAgICAgICAgKiAwNDg3Qi5hIEoxLTYwMDMpLgorICAgICAgICAgKi8KKyAgICAgICAgbiA9IDA7 CisgICAgfQorCisgICAgaWYgKCBkaXNhYmxlZCApCisgICAgICAgIHJldHVybiAtRUZBVUxUOwor CisgICAgLyoKKyAgICAgKiBUaGUgYWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIGlu aXRpYWwgbG9va3VwIGhhcyB0aGUgZm9sbG93aW5nCisgICAgICogZm9ybWF0OiBbdHRicjwzMTox NC1uPjpndmE8MzEtbjoyMD46MDBdIChBUk0gRERJIDA0ODdCLmEgSjEtNjAwMykuIEluCisgICAg ICogdGhpcyB3YXksIHRoZSBmaXJzdCBsb29rdXAgbGV2ZWwgbWlnaHQgY29tcHJpc2UgdXAgdG8g Zm91ciBjb25zZWN1dGl2ZQorICAgICAqIHBhZ2VzLiBUbyBhdm9pZCBtYXBwaW5nIGFsbCBvZiB0 aGUgcGFnZXMsIHdlIHNpbXBseSBtYXAgdGhlIHBhZ2UgdGhhdCBpcworICAgICAqIG5lZWRlZCBi eSB0aGUgZmlyc3QgbGV2ZWwgdHJhbnNsYXRpb24gYnkgaW5jb3Jwb3JhdGluZyB1cCB0byAyIE1T QnMgb2YKKyAgICAgKiB0aGUgR1ZBLgorICAgICAqLworICAgIG1hc2sgPSAoMVVMTCA8PCAoMTQg LSBuKSkgLSAxOworICAgIHBhZGRyID0gKHR0YnIgJiB+bWFzaykgfCAob2Zmc2V0c1tsZXZlbF0g PDwgMik7CisKKyAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oZCwgcGFkZHJfdG9fcGZuKHBh ZGRyKSwgTlVMTCwgUDJNX0FMTE9DKTsKKyAgICBpZiAoICFwYWdlICkKKyAgICAgICAgcmV0dXJu IC1FRkFVTFQ7CisKKyAgICB0YWJsZSA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2UpOworCisgICAg LyoKKyAgICAgKiBDb25zaWRlciB0aGF0IHRoZSBmaXJzdCBsZXZlbCBhZGRyZXNzIHRyYW5zbGF0 aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUKKyAgICAgKiBwYWdlLWFsaWduZWQgaWYgbiA+IDIuCisg ICAgICovCisgICAgaWYgKCBuID4gMiApCisgICAgeworICAgICAgICAvKiBNYWtlIHN1cmUgdGhh dCB3ZSBjb25zaWRlciB0aGUgYml0cyB0dGJyPDEyOjE0LW4+IGlmIG4gPiAyLiAqLworICAgICAg ICBtYXNrID0gKCgxVUxMIDw8IDEyKSAtIDEpICYgfigoMVVMTCA8PCAoMTQgLSBuKSkgLSAxKTsK KyAgICAgICAgdGFibGUgPSAoc2hvcnRfZGVzY190ICopKCh1bnNpZ25lZCBsb25nKXRhYmxlIHwg KHVuc2lnbmVkIGxvbmcpKHR0YnIgJiBtYXNrKSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBB cyB3ZSBoYXZlIGNvbnNpZGVyZWQgdXAgdG8gMiBNU0JzIG9mIHRoZSBHVkEgZm9yIG1hcHBpbmcg dGhlIGZpcnN0CisgICAgICogbGV2ZWwgdHJhbnNsYXRpb24gdGFibGUsIHdlIG5lZWQgdG8gbWFr ZSBzdXJlIHRoYXQgd2UgbGltaXQgdGhlIHRhYmxlCisgICAgICogb2Zmc2V0IHRoYXQgaXMgaXMg aW5kZXhlZCBieSBHVkE8MzEtbjoyMD4gdG8gbWF4IDEwIGJpdHMgdG8gYXZvaWQKKyAgICAgKiBl eGNlZWRpbmcgdGhlIHBhZ2Ugc2l6ZSBsaW1pdC4KKyAgICAgKi8KKyAgICBtYXNrID0gKCgxVUxM IDw8IDEwKSAtIDEpOworICAgIHB0ZSA9IHRhYmxlW29mZnNldHNbbGV2ZWxdICYgbWFza107CisK KyAgICB1bm1hcF9kb21haW5fcGFnZSh0YWJsZSk7CisgICAgcHV0X3BhZ2UocGFnZSk7CisKKyAg ICBzd2l0Y2ggKCBwdGUud2Fsay5kdCApCisgICAgeworICAgIGNhc2UgTDFERVNDX0lOVkFMSUQ6 CisgICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgY2FzZSBMMURFU0NfUEFHRV9UQUJMRToK KyAgICAgICAgbGV2ZWwrKzsKKworICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oZCwg KHB0ZS53YWxrLmJhc2UgPj4gMiksIE5VTEwsIFAyTV9BTExPQyk7CisgICAgICAgIGlmICggIXBh Z2UgKQorICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICAgICAgdGFibGUgPSBfX21h cF9kb21haW5fcGFnZShwYWdlKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlIHNlY29uZCBs ZXZlbCB0cmFuc2xhdGlvbiB0YWJsZSBpcyBhZGRyZXNzZWQgYnkgUFRFPDMxOjEwPi4gSGVuY2UK KyAgICAgICAgICogaXQgZG9lcyBub3QgbmVlZCB0byBiZSBwYWdlIGFsaWduZWQuIE1ha2Ugc3Vy ZSB0aGF0IHdlIGFsc28gY29uc2lkZXIKKyAgICAgICAgICogdGhlIGJpdHMgUFRFPDExOjEwPi4K KyAgICAgICAgICovCisgICAgICAgIHRhYmxlID0gKHNob3J0X2Rlc2NfdCAqKSgodW5zaWduZWQg bG9uZyl0YWJsZSB8ICgocHRlLndhbGsuYmFzZSAmIDB4MykgPDwgMTApKTsKKworICAgICAgICBw dGUgPSB0YWJsZVtvZmZzZXRzW2xldmVsXV07CisKKyAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2Uo dGFibGUpOworICAgICAgICBwdXRfcGFnZShwYWdlKTsKKworICAgICAgICBpZiAoIHB0ZS53YWxr LmR0ID09IEwyREVTQ19JTlZBTElEICkKKyAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCisg ICAgICAgIGlmICggcHRlLnBnLnBhZ2UgKSAvKiBTbWFsbCBwYWdlLiAqLworICAgICAgICB7Cisg ICAgICAgICAgICBtYXNrID0gKDFVTEwgPDwgUEFHRV9TSElGVF80SykgLSAxOworCisgICAgICAg ICAgICAqaXBhID0gKHB0ZS5wZy5iYXNlIDw8IFBBR0VfU0hJRlRfNEspIHwgKGd2YSAmIG1hc2sp OworCisgICAgICAgICAgICAvKiBTZXQgZXhlY3V0ZSBwZXJtaXNzaW9ucyBhc3NvY2lhdGVkIHdp dGggdGhlIHNtYWxsIHBhZ2UuICovCisgICAgICAgICAgICBpZiAoICFwdGUucGcueG4gKQorICAg ICAgICAgICAgICAgICpwZXJtcyA9IEdWMk1fRVhFQzsKKyAgICAgICAgfQorICAgICAgICBlbHNl IC8qIExhcmdlIHBhZ2UuICovCisgICAgICAgIHsKKyAgICAgICAgICAgIG1hc2sgPSAoMVVMTCA8 PCBQQUdFX1NISUZUXzY0SykgLSAxOworCisgICAgICAgICAgICAqaXBhID0gKHB0ZS5scGcuYmFz ZSA8PCBQQUdFX1NISUZUXzY0SykgfCAoZ3ZhICYgbWFzayk7CisKKyAgICAgICAgICAgIC8qIFNl dCBleGVjdXRlIHBlcm1pc3Npb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGFyZ2UgcGFnZS4gKi8K KyAgICAgICAgICAgIGlmICggIXB0ZS5scGcueG4gKQorICAgICAgICAgICAgICAgICpwZXJtcyA9 IEdWMk1fRVhFQzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldCBwZXJtaXNzaW9ucyBzbyB0 aGF0IHRoZSBjYWxsZXIgY2FuIGNoZWNrIHRoZSBmbGFncyBieSBoZXJzZWxmLiAqLworICAgICAg ICBpZiAoICFwdGUucGcucm8gKQorICAgICAgICAgICAgKnBlcm1zIHw9IEdWMk1fV1JJVEU7CisK KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEwxREVTQ19TRUNUSU9OOgorICAgIGNhc2UgTDFE RVNDX1NFQ1RJT05fUFhOOgorICAgICAgICBpZiAoICFwdGUuc2VjLnN1cGVyc2VjICkgLyogU2Vj dGlvbiAqLworICAgICAgICB7CisgICAgICAgICAgICBtYXNrID0gKDFVTEwgPDwgTDFERVNDX1NF Q1RJT05fU0hJRlQpIC0gMTsKKworICAgICAgICAgICAgKmlwYSA9IChwdGUuc2VjLmJhc2UgPDwg TDFERVNDX1NFQ1RJT05fU0hJRlQpIHwgKGd2YSAmIG1hc2spOworICAgICAgICB9CisgICAgICAg IGVsc2UgLyogU3VwZXJzZWN0aW9uICovCisgICAgICAgIHsKKyAgICAgICAgICAgIG1hc2sgPSAo MVVMTCA8PCBMMURFU0NfU1VQRVJTRUNUSU9OX1NISUZUKSAtIDE7CisKKyAgICAgICAgICAgICpp cGEgPSBndmEgJiBtYXNrOworICAgICAgICAgICAgKmlwYSB8PSAocGFkZHJfdCkocHRlLnN1cGVy c2VjLmJhc2UpIDw8IEwxREVTQ19TVVBFUlNFQ1RJT05fU0hJRlQ7CisgICAgICAgICAgICAqaXBh IHw9IChwYWRkcl90KShwdGUuc3VwZXJzZWMuZXh0YmFzZTEpIDw8IEwxREVTQ19TVVBFUlNFQ1RJ T05fRVhUX0JBU0UxX1NISUZUOworICAgICAgICAgICAgKmlwYSB8PSAocGFkZHJfdCkocHRlLnN1 cGVyc2VjLmV4dGJhc2UyKSA8PCBMMURFU0NfU1VQRVJTRUNUSU9OX0VYVF9CQVNFMl9TSElGVDsK KyAgICAgICAgfQorCisgICAgICAgIC8qIFNldCBwZXJtaXNzaW9ucyBzbyB0aGF0IHRoZSBjYWxs ZXIgY2FuIGNoZWNrIHRoZSBmbGFncyBieSBoZXJzZWxmLiAqLworICAgICAgICBpZiAoICFwdGUu c2VjLnJvICkKKyAgICAgICAgICAgICpwZXJtcyA9IEdWMk1fV1JJVEU7CisgICAgICAgIGlmICgg IXB0ZS5zZWMueG4gKQorICAgICAgICAgICAgKnBlcm1zIHw9IEdWMk1fRVhFQzsKKyAgICB9CisK KyAgICByZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0v Z3Vlc3Rfd2Fsay5oIGIveGVuL2luY2x1ZGUvYXNtLWFybS9ndWVzdF93YWxrLmgKaW5kZXggNGVk ODQ3NmUwOC4uZDBiZWQwYzdhMiAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9ndWVz dF93YWxrLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS9ndWVzdF93YWxrLmgKQEAgLTEsNiAr MSwyMiBAQAogI2lmbmRlZiBfWEVOX0dVRVNUX1dBTEtfSAogI2RlZmluZSBfWEVOX0dVRVNUX1dB TEtfSAogCisvKiBGaXJzdCBsZXZlbCB0cmFuc2xhdGlvbiB0YWJsZSBkZXNjcmlwdG9yIHR5cGVz IHVzZWQgYnkgdGhlIEFBcmNoMzIKKyAqIHNob3J0LWRlc2NyaXB0b3IgdHJhbnNsYXRpb24gdGFi bGUgZm9ybWF0LiAqLworI2RlZmluZSBMMURFU0NfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAg ICAoMCkKKyNkZWZpbmUgTDFERVNDX1BBR0VfVEFCTEUgICAgICAgICAgICAgICAgICAgKDEpCisj ZGVmaW5lIEwxREVTQ19TRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICgyKQorI2RlZmluZSBM MURFU0NfU0VDVElPTl9QWE4gICAgICAgICAgICAgICAgICAoMykKKworLyogRGVmaW5lcyBmb3Ig c2VjdGlvbiBhbmQgc3VwZXJzZWN0aW9uIHNoaWZ0cy4gKi8KKyNkZWZpbmUgTDFERVNDX1NFQ1RJ T05fU0hJRlQgICAgICAgICAgICAgICAgKDIwKQorI2RlZmluZSBMMURFU0NfU1VQRVJTRUNUSU9O X1NISUZUICAgICAgICAgICAoMjQpCisjZGVmaW5lIEwxREVTQ19TVVBFUlNFQ1RJT05fRVhUX0JB U0UxX1NISUZUICgzMikKKyNkZWZpbmUgTDFERVNDX1NVUEVSU0VDVElPTl9FWFRfQkFTRTJfU0hJ RlQgKDM2KQorCisvKiBTZWNvbmQgbGV2ZWwgdHJhbnNsYXRpb24gdGFibGUgZGVzY3JpcHRvciB0 eXBlcy4gKi8KKyNkZWZpbmUgTDJERVNDX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgKDAp CisKIC8qIFdhbGsgdGhlIGd1ZXN0J3MgcGFnZSB0YWJsZXMgaW4gc29mdHdhcmUuICovCiBpbnQg Z3Vlc3Rfd2Fsa190YWJsZXMoY29uc3Qgc3RydWN0IHZjcHUgKnYsCiAgICAgICAgICAgICAgICAg ICAgICAgdmFkZHJfdCBndmEsCi0tIAoyLjEyLjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK