From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 4/6] x86/hvm: Move hvm_funcs.cpuid_intercept() handling into hvm_cpuid() Date: Wed, 16 Nov 2016 12:31:48 +0000 Message-ID: <1479299510-700-5-git-send-email-andrew.cooper3@citrix.com> References: <1479299510-700-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1479299510-700-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Kevin Tian , Jan Beulich , Andrew Cooper , Jun Nakajima , Boris Ostrovsky , Suravee Suthikulpanit List-Id: xen-devel@lists.xenproject.org VGhpcyByZWR1Y2VzIHRoZSBuZXQgY29tcGxleGl0eSBvZiBDUFVJRCBoYW5kbGluZyBieSBoYXZp bmcgYWxsIGFkanVzdG1lbnRzIGluCmF0IHRoZSBzYW1lIHBsYWNlLiAgUmVtb3ZlIHRoZSBub3ct dW51c2VkIGh2bV9mdW5jcy5jcHVpZF9pbnRlcmNlcHQKaW5mcmFzdHJ1Y3R1cmUuCgpTaWduZWQt b2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgotLS0KQ0M6 IEphbiBCZXVsaWNoIDxKQmV1bGljaEBzdXNlLmNvbT4KQ0M6IEp1biBOYWthamltYSA8anVuLm5h a2FqaW1hQGludGVsLmNvbT4KQ0M6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgpD QzogQm9yaXMgT3N0cm92c2t5IDxib3Jpcy5vc3Ryb3Zza3lAb3JhY2xlLmNvbT4KQ0M6IFN1cmF2 ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+Ci0tLQogeGVu L2FyY2gveDg2L2h2bS9lbXVsYXRlLmMgICAgfCAgMiArLQogeGVuL2FyY2gveDg2L2h2bS9odm0u YyAgICAgICAgfCAyMSArKysrKysrKysrKysrKystLS0tLS0KIHhlbi9hcmNoL3g4Ni9odm0vc3Zt L3N2bS5jICAgIHwgMzkgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4 ZW4vYXJjaC94ODYvaHZtL3ZteC92bXguYyAgICB8IDMxICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIHhlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2h2bS5oIHwgIDMgLS0tCiA1IGZpbGVz IGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDc2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9odm0vZW11bGF0ZS5jIGIveGVuL2FyY2gveDg2L2h2bS9lbXVsYXRlLmMK aW5kZXggZTliOGY4Yy4uNTQwNDU4YyAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2h2bS9lbXVs YXRlLmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS9lbXVsYXRlLmMKQEAgLTE1NTgsNyArMTU1OCw3 IEBAIGludCBodm1lbXVsX2NwdWlkKAogICAgICAgICAgaHZtX2NoZWNrX2NwdWlkX2ZhdWx0aW5n KGN1cnJlbnQpICkKICAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOwogCi0gICAgaHZt X2Z1bmNzLmNwdWlkX2ludGVyY2VwdChlYXgsIGVieCwgZWN4LCBlZHgpOworICAgIGh2bV9jcHVp ZCgqZWF4LCBlYXgsIGVieCwgZWN4LCBlZHgpOwogICAgIHJldHVybiBYODZFTVVMX09LQVk7CiB9 CiAKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMgYi94ZW4vYXJjaC94ODYvaHZt L2h2bS5jCmluZGV4IGFmZDE0YzQuLjg2MmFiNzYgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9o dm0vaHZtLmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYwpAQCAtOTA2LDEyICs5MDYsNyBA QCBjb25zdCBjaGFyICpodm1fZWZlcl92YWxpZChjb25zdCBzdHJ1Y3QgdmNwdSAqdiwgdWludDY0 X3QgdmFsdWUsCiAgICAgICAgIEFTU0VSVCh2LT5kb21haW4gPT0gY3VycmVudC0+ZG9tYWluKTsK ICAgICAgICAgaHZtX2NwdWlkKDB4ODAwMDAwMDAsICZsZXZlbCwgTlVMTCwgTlVMTCwgTlVMTCk7 CiAgICAgICAgIGlmICggKGxldmVsID4+IDE2KSA9PSAweDgwMDAgJiYgbGV2ZWwgPiAweDgwMDAw MDAwICkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGR1bW15OwotCi0gICAg ICAgICAgICBsZXZlbCA9IDB4ODAwMDAwMDE7Ci0gICAgICAgICAgICBodm1fZnVuY3MuY3B1aWRf aW50ZXJjZXB0KCZsZXZlbCwgJmR1bW15LCAmZXh0MV9lY3gsICZleHQxX2VkeCk7Ci0gICAgICAg IH0KKyAgICAgICAgICAgIGh2bV9jcHVpZCgweDgwMDAwMDAxLCBOVUxMLCBOVUxMLCAmZXh0MV9l Y3gsICZleHQxX2VkeCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0zNjc2LDYgKzM2NzEs MTIgQEAgdm9pZCBodm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0LCB1bnNpZ25lZCBpbnQgKmVh eCwgdW5zaWduZWQgaW50ICplYngsCiAgICAgICAgICAgICBpZiAoICEoaHZtX3BhZV9lbmFibGVk KHYpIHx8IGh2bV9sb25nX21vZGVfZW5hYmxlZCh2KSkgKQogICAgICAgICAgICAgICAgICplZHgg Jj0gfmNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9QU0UzNik7CiAgICAgICAgIH0KKworICAgICAg ICAvKiBTWVNDQUxMIGlzIGhpZGRlbiBvdXRzaWRlIG9mIGxvbmcgbW9kZSBvbiBJbnRlbC4gKi8K KyAgICAgICAgaWYgKCBkLT5hcmNoLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCAmJgor ICAgICAgICAgICAgICFodm1fbG9uZ19tb2RlX2VuYWJsZWQodikpCisgICAgICAgICAgICAqZWR4 ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfU1lTQ0FMTCk7CisKICAgICAgICAgYnJlYWs7 CiAKICAgICBjYXNlIDB4ODAwMDAwMDc6CkBAIC0zNzAwLDYgKzM3MDEsMTQgQEAgdm9pZCBodm1f Y3B1aWQodW5zaWduZWQgaW50IGlucHV0LCB1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50 ICplYngsCiAKICAgICAgICAgKmVieCAmPSBodm1fZmVhdHVyZXNldFtGRUFUVVJFU0VUX2U4Yl07 CiAgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAweDgwMDAwMDFjOgorICAgICAgICBpZiAoICEo di0+YXJjaC54Y3IwICYgWFNUQVRFX0xXUCkgKQorICAgICAgICAgICAgKmVheCA9IDA7CisgICAg ICAgIGVsc2UgaWYgKCBjcHVfaGFzX3N2bSAmJiBjcHVfaGFzX2x3cCApCisgICAgICAgICAgICAv KiBUdXJuIG9uIGF2YWlsYWJsZSBiaXQgYW5kIG90aGVyIGZlYXR1cmVzIHNwZWNpZmllZCBpbiBs d3BfY2ZnLiAqLworICAgICAgICAgICAgKmVheCA9ICgqZWR4ICYgdi0+YXJjaC5odm1fc3ZtLmd1 ZXN0X2x3cF9jZmcpIHwgMTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCmRpZmYgLS1naXQg YS94ZW4vYXJjaC94ODYvaHZtL3N2bS9zdm0uYyBiL3hlbi9hcmNoL3g4Ni9odm0vc3ZtL3N2bS5j CmluZGV4IGM5ZGJiZWEuLjA2Njg3MTcgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vc3Zt L3N2bS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0vc3ZtL3N2bS5jCkBAIC0xNTYyLDQxICsxNTYy LDYgQEAgc3RhdGljIHZvaWQgc3ZtX2ZwdV9kaXJ0eV9pbnRlcmNlcHQodm9pZCkKICAgICAgICAg dm1jYl9zZXRfY3IwKHZtY2IsIHZtY2JfZ2V0X2NyMCh2bWNiKSAmIH5YODZfQ1IwX1RTKTsKIH0K IAotc3RhdGljIHZvaWQgc3ZtX2NwdWlkX2ludGVyY2VwdCgKLSAgICB1bnNpZ25lZCBpbnQgKmVh eCwgdW5zaWduZWQgaW50ICplYngsCi0gICAgdW5zaWduZWQgaW50ICplY3gsIHVuc2lnbmVkIGlu dCAqZWR4KQotewotICAgIHVuc2lnbmVkIGludCBpbnB1dCA9ICplYXg7Ci0gICAgc3RydWN0IHZj cHUgKnYgPSBjdXJyZW50OwotCi0gICAgaHZtX2NwdWlkKGlucHV0LCBlYXgsIGVieCwgZWN4LCBl ZHgpOwotCi0gICAgc3dpdGNoIChpbnB1dCkgewotICAgIGNhc2UgMHg4MDAwMDAxYzogCi0gICAg ewotICAgICAgICAvKiBMV1AgY2FwYWJpbGl0eSBDUFVJRCAqLwotICAgICAgICB1aW50NjRfdCBs d3BfY2ZnID0gdi0+YXJjaC5odm1fc3ZtLmd1ZXN0X2x3cF9jZmc7Ci0KLSAgICAgICAgaWYgKCBj cHVfaGFzX2x3cCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggISh2LT5hcmNoLnhjcjAg JiBYU1RBVEVfTFdQKSApCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqZWF4ID0gMHgw OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv KiB0dXJuIG9uIGF2YWlsYWJsZSBiaXQgYW5kIG90aGVyIGZlYXR1cmVzIHNwZWNpZmllZCBpbiBs d3BfY2ZnICovCi0gICAgICAgICAgICAqZWF4ID0gKCplZHggJiBsd3BfY2ZnKSB8IDB4MDAwMDAw MDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg ICAgIGJyZWFrOwotICAgIH0KLQotICAgIEhWTVRSQUNFXzVEIChDUFVJRCwgaW5wdXQsICplYXgs ICplYngsICplY3gsICplZHgpOwotfQotCiBzdGF0aWMgdm9pZCBzdm1fdm1leGl0X2RvX2NwdWlk KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQogewogICAgIHVuc2lnbmVkIGludCBlYXgsIGVi eCwgZWN4LCBlZHgsIGluc3RfbGVuOwpAQCAtMTYwOSw3ICsxNTc0LDggQEAgc3RhdGljIHZvaWQg c3ZtX3ZtZXhpdF9kb19jcHVpZChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKICAgICBlY3gg PSByZWdzLT5lY3g7CiAgICAgZWR4ID0gcmVncy0+ZWR4OwogCi0gICAgc3ZtX2NwdWlkX2ludGVy Y2VwdCgmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKyAgICBodm1fY3B1aWQocmVncy0+X2VheCwg JmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisgICAgSFZNVFJBQ0VfNUQoQ1BVSUQsIHJlZ3MtPl9l YXgsIGVheCwgZWJ4LCBlY3gsIGVkeCk7CiAKICAgICByZWdzLT5lYXggPSBlYXg7CiAgICAgcmVn cy0+ZWJ4ID0gZWJ4OwpAQCAtMjI1Myw3ICsyMjE5LDYgQEAgc3RhdGljIHN0cnVjdCBodm1fZnVu Y3Rpb25fdGFibGUgX19pbml0ZGF0YSBzdm1fZnVuY3Rpb25fdGFibGUgPSB7CiAgICAgLmluaXRf aHlwZXJjYWxsX3BhZ2UgID0gc3ZtX2luaXRfaHlwZXJjYWxsX3BhZ2UsCiAgICAgLmV2ZW50X3Bl bmRpbmcgICAgICAgID0gc3ZtX2V2ZW50X3BlbmRpbmcsCiAgICAgLmludmxwZyAgICAgICAgICAg ICAgID0gc3ZtX2ludmxwZywKLSAgICAuY3B1aWRfaW50ZXJjZXB0ICAgICAgPSBzdm1fY3B1aWRf aW50ZXJjZXB0LAogICAgIC53YmludmRfaW50ZXJjZXB0ICAgICA9IHN2bV93YmludmRfaW50ZXJj ZXB0LAogICAgIC5mcHVfZGlydHlfaW50ZXJjZXB0ICA9IHN2bV9mcHVfZGlydHlfaW50ZXJjZXB0 LAogICAgIC5tc3JfcmVhZF9pbnRlcmNlcHQgICA9IHN2bV9tc3JfcmVhZF9pbnRlcmNlcHQsCmRp ZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL3ZteC92bXguYyBiL3hlbi9hcmNoL3g4Ni9odm0v dm14L3ZteC5jCmluZGV4IDIyMzhkNzQuLjVhNzMwNzYgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4 Ni9odm0vdm14L3ZteC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0vdm14L3ZteC5jCkBAIC03Myw5 ICs3Myw2IEBAIHN0YXRpYyB2b2lkIHZteF9pbnN0YWxsX3ZsYXBpY19tYXBwaW5nKHN0cnVjdCB2 Y3B1ICp2KTsKIHN0YXRpYyB2b2lkIHZteF91cGRhdGVfZ3Vlc3RfY3Ioc3RydWN0IHZjcHUgKnYs IHVuc2lnbmVkIGludCBjcik7CiBzdGF0aWMgdm9pZCB2bXhfdXBkYXRlX2d1ZXN0X2VmZXIoc3Ry dWN0IHZjcHUgKnYpOwogc3RhdGljIHZvaWQgdm14X3VwZGF0ZV9ndWVzdF92ZW5kb3Ioc3RydWN0 IHZjcHUgKnYpOwotc3RhdGljIHZvaWQgdm14X2NwdWlkX2ludGVyY2VwdCgKLSAgICB1bnNpZ25l ZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCi0gICAgdW5zaWduZWQgaW50ICplY3gsIHVu c2lnbmVkIGludCAqZWR4KTsKIHN0YXRpYyB2b2lkIHZteF93YmludmRfaW50ZXJjZXB0KHZvaWQp Owogc3RhdGljIHZvaWQgdm14X2ZwdV9kaXJ0eV9pbnRlcmNlcHQodm9pZCk7CiBzdGF0aWMgaW50 IHZteF9tc3JfcmVhZF9pbnRlcmNlcHQodW5zaWduZWQgaW50IG1zciwgdWludDY0X3QgKm1zcl9j b250ZW50KTsKQEAgLTIxNjYsNyArMjE2Myw2IEBAIHN0YXRpYyBzdHJ1Y3QgaHZtX2Z1bmN0aW9u X3RhYmxlIF9faW5pdGRhdGEgdm14X2Z1bmN0aW9uX3RhYmxlID0gewogICAgIC5pbnZscGcgICAg ICAgICAgICAgICA9IHZteF9pbnZscGcsCiAgICAgLmNwdV91cCAgICAgICAgICAgICAgID0gdm14 X2NwdV91cCwKICAgICAuY3B1X2Rvd24gICAgICAgICAgICAgPSB2bXhfY3B1X2Rvd24sCi0gICAg LmNwdWlkX2ludGVyY2VwdCAgICAgID0gdm14X2NwdWlkX2ludGVyY2VwdCwKICAgICAud2JpbnZk X2ludGVyY2VwdCAgICAgPSB2bXhfd2JpbnZkX2ludGVyY2VwdCwKICAgICAuZnB1X2RpcnR5X2lu dGVyY2VwdCAgPSB2bXhfZnB1X2RpcnR5X2ludGVyY2VwdCwKICAgICAubXNyX3JlYWRfaW50ZXJj ZXB0ICAgPSB2bXhfbXNyX3JlYWRfaW50ZXJjZXB0LApAQCAtMjQwMiwzMCArMjM5OCw2IEBAIHN0 YXRpYyB2b2lkIHZteF9mcHVfZGlydHlfaW50ZXJjZXB0KHZvaWQpCiAgICAgfQogfQogCi1zdGF0 aWMgdm9pZCB2bXhfY3B1aWRfaW50ZXJjZXB0KAotICAgIHVuc2lnbmVkIGludCAqZWF4LCB1bnNp Z25lZCBpbnQgKmVieCwKLSAgICB1bnNpZ25lZCBpbnQgKmVjeCwgdW5zaWduZWQgaW50ICplZHgp Ci17Ci0gICAgdW5zaWduZWQgaW50IGlucHV0ID0gKmVheDsKLSAgICBzdHJ1Y3QgdmNwdSAqdiA9 IGN1cnJlbnQ7Ci0KLSAgICBodm1fY3B1aWQoaW5wdXQsIGVheCwgZWJ4LCBlY3gsIGVkeCk7Ci0K LSAgICBzd2l0Y2ggKCBpbnB1dCApCi0gICAgewotICAgICAgICBjYXNlIDB4ODAwMDAwMDE6Ci0g ICAgICAgICAgICAvKiBTWVNDQUxMIGlzIHZpc2libGUgaWZmIHJ1bm5pbmcgaW4gbG9uZyBtb2Rl LiAqLwotICAgICAgICAgICAgaWYgKCBodm1fbG9uZ19tb2RlX2VuYWJsZWQodikgKQotICAgICAg ICAgICAgICAgICplZHggfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1NZU0NBTEwpOwotICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICplZHggJj0gfihjcHVmZWF0X21hc2soWDg2 X0ZFQVRVUkVfU1lTQ0FMTCkpOwotCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBI Vk1UUkFDRV81RCAoQ1BVSUQsIGlucHV0LCAqZWF4LCAqZWJ4LCAqZWN4LCAqZWR4KTsKLX0KLQog c3RhdGljIGludCB2bXhfZG9fY3B1aWQoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCiB7CiAg ICAgdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsKQEAgLTI0NDUsNyArMjQxNyw4IEBA IHN0YXRpYyBpbnQgdm14X2RvX2NwdWlkKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQogICAg IGxlYWYgPSByZWdzLT5lYXg7CiAgICAgc3VibGVhZiA9IHJlZ3MtPmVjeDsKIAotICAgIHZteF9j cHVpZF9pbnRlcmNlcHQoJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisgICAgaHZtX2NwdWlkKGxl YWYsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworICAgIEhWTVRSQUNFXzVEKENQVUlELCBsZWFm LCBlYXgsIGVieCwgZWN4LCBlZHgpOwogCiAgICAgcmVncy0+ZWF4ID0gZWF4OwogICAgIHJlZ3Mt PmVieCA9IGVieDsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2h2bS5oIGIv eGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaHZtLmgKaW5kZXggN2U3NDYyZS4uOGUzNjZjMCAxMDA2 NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaHZtLmgKKysrIGIveGVuL2luY2x1ZGUv YXNtLXg4Ni9odm0vaHZtLmgKQEAgLTE2OSw5ICsxNjksNiBAQCBzdHJ1Y3QgaHZtX2Z1bmN0aW9u X3RhYmxlIHsKICAgICB1bnNpZ25lZCBpbnQgKCpnZXRfaW5zbl9ieXRlcykoc3RydWN0IHZjcHUg KnYsIHVpbnQ4X3QgKmJ1Zik7CiAKICAgICAvKiBJbnN0cnVjdGlvbiBpbnRlcmNlcHRzOiBub24t dm9pZCByZXR1cm4gdmFsdWVzIGFyZSBYODZFTVVMIGNvZGVzLiAqLwotICAgIHZvaWQgKCpjcHVp ZF9pbnRlcmNlcHQpKAotICAgICAgICB1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICpl YngsCi0gICAgICAgIHVuc2lnbmVkIGludCAqZWN4LCB1bnNpZ25lZCBpbnQgKmVkeCk7CiAgICAg dm9pZCAoKndiaW52ZF9pbnRlcmNlcHQpKHZvaWQpOwogICAgIHZvaWQgKCpmcHVfZGlydHlfaW50 ZXJjZXB0KSh2b2lkKTsKICAgICBpbnQgKCptc3JfcmVhZF9pbnRlcmNlcHQpKHVuc2lnbmVkIGlu dCBtc3IsIHVpbnQ2NF90ICptc3JfY29udGVudCk7Ci0tIAoyLjEuNAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=