From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v3 5/9] xen/9pfs: connect to the frontend Date: Thu, 16 Mar 2017 13:01:54 -0700 Message-ID: <1489694518-16978-5-git-send-email-sstabellini@kernel.org> References: <1489694518-16978-1-git-send-email-sstabellini@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cobbE-00065R-V2 for xen-devel@lists.xenproject.org; Thu, 16 Mar 2017 20:02:17 +0000 In-Reply-To: <1489694518-16978-1-git-send-email-sstabellini@kernel.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: qemu-devel@nongnu.org Cc: jgross@suse.com, sstabellini@kernel.org, groug@kaod.org, Stefano Stabellini , "Aneesh Kumar K.V" , anthony.perard@citrix.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org V3JpdGUgdGhlIGxpbWl0cyBvZiB0aGUgYmFja2VuZCB0byB4ZW5zdG9yZS4gQ29ubmVjdCB0byB0 aGUgZnJvbnRlbmQuClVwb24gY29ubmVjdGlvbiwgYWxsb2NhdGUgdGhlIHJpbmdzIGFjY29yZGlu ZyB0byB0aGUgcHJvdG9jb2wKc3BlY2lmaWNhdGlvbi4KCkluaXRpYWxpemUgYSBRRU1VQkggdG8g c2NoZWR1bGUgd29yayB1cG9uIHJlY2VpdmluZyBhbiBldmVudCBjaGFubmVsCm5vdGlmaWNhdGlv biBmcm9tIHRoZSBmcm9udGVuZC4KClNpZ25lZC1vZmYtYnk6IFN0ZWZhbm8gU3RhYmVsbGluaSA8 c3RlZmFub0BhcG9yZXRvLmNvbT4KQ0M6IGFudGhvbnkucGVyYXJkQGNpdHJpeC5jb20KQ0M6IGpn cm9zc0BzdXNlLmNvbQpDQzogQW5lZXNoIEt1bWFyIEsuViA8YW5lZXNoLmt1bWFyQGxpbnV4LnZu ZXQuaWJtLmNvbT4KQ0M6IEdyZWcgS3VyeiA8Z3JvdWdAa2FvZC5vcmc+Ci0tLQogaHcvOXBmcy94 ZW4tOXAtYmFja2VuZC5jIHwgMTgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgMTgxIGluc2VydGlvbnMoKyksIDEgZGVsZXRp b24oLSkKCmRpZmYgLS1naXQgYS9ody85cGZzL3hlbi05cC1iYWNrZW5kLmMgYi9ody85cGZzL3hl bi05cC1iYWNrZW5kLmMKaW5kZXggOTJiYjgwNS4uM2ZkMjBmZiAxMDA2NDQKLS0tIGEvaHcvOXBm cy94ZW4tOXAtYmFja2VuZC5jCisrKyBiL2h3LzlwZnMveGVuLTlwLWJhY2tlbmQuYwpAQCAtMjMs OCArMjMsMzkgQEAKICNkZWZpbmUgWEVOXzlQRlNfUklOR19TSVpFICBYRU5fRkxFWF9SSU5HX1NJ WkUoWEVOXzlQRlNfUklOR19PUkRFUikKIERFRklORV9YRU5fRkxFWF9SSU5HX0FORF9JTlRGKHhl bl85cGZzKTsKIAorI2RlZmluZSBWRVJTSU9OUyAiMSIKKyNkZWZpbmUgTUFYX1JJTkdTIDgKKyNk ZWZpbmUgTUFYX1JJTkdfT1JERVIgOAorCit0eXBlZGVmIHN0cnVjdCBYZW45cGZzUmluZyB7Cisg ICAgc3RydWN0IFhlbjlwZnNEZXYgKnByaXY7CisKKyAgICBpbnQgcmVmOworICAgIHhlbmV2dGNo bl9oYW5kbGUgICAqZXZ0Y2huZGV2OworICAgIGludCBldnRjaG47CisgICAgaW50IGxvY2FsX3Bv cnQ7CisgICAgc3RydWN0IHhlbl85cGZzX2RhdGFfaW50ZiAqaW50ZjsKKyAgICB1bnNpZ25lZCBj aGFyICpkYXRhOworICAgIHN0cnVjdCB4ZW5fOXBmc19kYXRhIHJpbmc7CisKKyAgICBRRU1VQkgg KmJoOworCisgICAgLyogbG9jYWwgY29waWVzLCBzbyB0aGF0IHdlIGNhbiByZWFkL3dyaXRlIFBE VSBkYXRhIGRpcmVjdGx5IGZyb20KKyAgICAgKiB0aGUgcmluZyAqLworICAgIFJJTkdfSURYIG91 dF9jb25zLCBvdXRfc2l6ZSwgaW5fY29uczsKKyAgICBib29sIGlucHJvZ3Jlc3M7Cit9IFhlbjlw ZnNSaW5nOworCiB0eXBlZGVmIHN0cnVjdCBYZW45cGZzRGV2IHsKICAgICBzdHJ1Y3QgWGVuRGV2 aWNlIHhlbmRldjsgIC8qIG11c3QgYmUgZmlyc3QgKi8KKyAgICBWOWZzU3RhdGUgc3RhdGU7Cisg ICAgY2hhciAqcGF0aDsKKyAgICBjaGFyICpzZWN1cml0eV9tb2RlbDsKKyAgICBjaGFyICp0YWc7 CisgICAgY2hhciAqaWQ7CisKKyAgICBpbnQgbnVtX3JpbmdzOworICAgIFhlbjlwZnNSaW5nICpy aW5nczsKIH0gWGVuOXBmc0RldjsKIAogc3RhdGljIHNzaXplX3QgeGVuXzlwZnNfcGR1X3ZtYXJz aGFsKFY5ZnNQRFUgKnBkdSwKQEAgLTczLDIyICsxMDQsMTcxIEBAIHN0YXRpYyBpbnQgeGVuXzlw ZnNfaW5pdChzdHJ1Y3QgWGVuRGV2aWNlICp4ZW5kZXYpCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0 YXRpYyB2b2lkIHhlbl85cGZzX2JoKHZvaWQgKm9wYXF1ZSkKK3sKK30KKworc3RhdGljIHZvaWQg eGVuXzlwZnNfZXZ0Y2huX2V2ZW50KHZvaWQgKm9wYXF1ZSkKK3sKK30KKwogc3RhdGljIGludCB4 ZW5fOXBmc19mcmVlKHN0cnVjdCBYZW5EZXZpY2UgKnhlbmRldikKIHsKLSAgICByZXR1cm4gLTE7 CisgICAgaW50IGk7CisgICAgWGVuOXBmc0RldiAqeGVuXzlwZGV2ID0gY29udGFpbmVyX29mKHhl bmRldiwgWGVuOXBmc0RldiwgeGVuZGV2KTsKKworICAgIGlmICh4ZW5fOXBkZXYtPmlkICE9IE5V TEwpIHsKKyAgICAgICAgZ19mcmVlKHhlbl85cGRldi0+aWQpOworICAgIH0KKyAgICBpZiAoeGVu XzlwZGV2LT50YWcgIT0gTlVMTCkgeworICAgICAgICBnX2ZyZWUoeGVuXzlwZGV2LT50YWcpOwor ICAgIH0KKyAgICBpZiAoeGVuXzlwZGV2LT5wYXRoICE9IE5VTEwpIHsKKyAgICAgICAgZ19mcmVl KHhlbl85cGRldi0+cGF0aCk7CisgICAgfQorICAgIGlmICh4ZW5fOXBkZXYtPnNlY3VyaXR5X21v ZGVsICE9IE5VTEwpIHsKKyAgICAgICAgZ19mcmVlKHhlbl85cGRldi0+c2VjdXJpdHlfbW9kZWwp OworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCB4ZW5fOXBkZXYtPm51bV9yaW5nczsgaSsr KSB7CisgICAgICAgIGlmICh4ZW5fOXBkZXYtPnJpbmdzW2ldLmRhdGEgIT0gTlVMTCkgeworICAg ICAgICAgICAgeGVuZ250dGFiX3VubWFwKHhlbl85cGRldi0+eGVuZGV2LmdudHRhYmRldiwKKyAg ICAgICAgICAgICAgICAgICAgeGVuXzlwZGV2LT5yaW5nc1tpXS5kYXRhLAorICAgICAgICAgICAg ICAgICAgICAoMSA8PCBYRU5fOVBGU19SSU5HX09SREVSKSk7CisgICAgICAgIH0KKyAgICAgICAg aWYgKHhlbl85cGRldi0+cmluZ3NbaV0uaW50ZiAhPSBOVUxMKSB7CisgICAgICAgICAgICB4ZW5n bnR0YWJfdW5tYXAoeGVuXzlwZGV2LT54ZW5kZXYuZ250dGFiZGV2LAorICAgICAgICAgICAgICAg ICAgICB4ZW5fOXBkZXYtPnJpbmdzW2ldLmludGYsCisgICAgICAgICAgICAgICAgICAgIDEpOwor ICAgICAgICB9CisgICAgICAgIGlmICh4ZW5fOXBkZXYtPnJpbmdzW2ldLmV2dGNobmRldiA+IDAp IHsKKyAgICAgICAgICAgIHFlbXVfc2V0X2ZkX2hhbmRsZXIoeGVuZXZ0Y2huX2ZkKHhlbl85cGRl di0+cmluZ3NbaV0uZXZ0Y2huZGV2KSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwg TlVMTCk7CisgICAgICAgICAgICB4ZW5ldnRjaG5fdW5iaW5kKHhlbl85cGRldi0+cmluZ3NbaV0u ZXZ0Y2huZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZW5fOXBkZXYtPnJpbmdz W2ldLmxvY2FsX3BvcnQpOworICAgICAgICB9CisgICAgICAgIGlmICh4ZW5fOXBkZXYtPnJpbmdz W2ldLmJoICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHFlbXVfYmhfZGVsZXRlKHhlbl85cGRldi0+ cmluZ3NbaV0uYmgpOworICAgICAgICB9CisgICAgfQorICAgIGdfZnJlZSh4ZW5fOXBkZXYtPnJp bmdzKTsKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB4ZW5fOXBmc19jb25uZWN0KHN0 cnVjdCBYZW5EZXZpY2UgKnhlbmRldikKIHsKKyAgICBpbnQgaTsKKyAgICBYZW45cGZzRGV2ICp4 ZW5fOXBkZXYgPSBjb250YWluZXJfb2YoeGVuZGV2LCBYZW45cGZzRGV2LCB4ZW5kZXYpOworICAg IFY5ZnNTdGF0ZSAqcyA9ICZ4ZW5fOXBkZXYtPnN0YXRlOworICAgIFFlbXVPcHRzICpmc2RldjsK KworICAgIGlmICh4ZW5zdG9yZV9yZWFkX2ZlX2ludCgmeGVuXzlwZGV2LT54ZW5kZXYsICJudW0t cmluZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeGVuXzlwZGV2LT5udW1fcmlu Z3MpID09IC0xIHx8CisgICAgICAgIHhlbl85cGRldi0+bnVtX3JpbmdzID4gTUFYX1JJTkdTIHx8 IHhlbl85cGRldi0+bnVtX3JpbmdzIDwgMSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQor CisgICAgeGVuXzlwZGV2LT5yaW5ncyA9IGdfbWFsbG9jMCh4ZW5fOXBkZXYtPm51bV9yaW5ncyAq IHNpemVvZihYZW45cGZzUmluZykpOworICAgIGZvciAoaSA9IDA7IGkgPCB4ZW5fOXBkZXYtPm51 bV9yaW5nczsgaSsrKSB7CisgICAgICAgIGNoYXIgKnN0cjsKKworICAgICAgICB4ZW5fOXBkZXYt PnJpbmdzW2ldLnByaXYgPSB4ZW5fOXBkZXY7CisgICAgICAgIHhlbl85cGRldi0+cmluZ3NbaV0u ZXZ0Y2huID0gLTE7CisgICAgICAgIHhlbl85cGRldi0+cmluZ3NbaV0ubG9jYWxfcG9ydCA9IC0x OworCisgICAgICAgIHN0ciA9IGdfc3RyZHVwX3ByaW50ZigicmluZy1yZWYldSIsIGkpOworICAg ICAgICBpZiAoeGVuc3RvcmVfcmVhZF9mZV9pbnQoJnhlbl85cGRldi0+eGVuZGV2LCBzdHIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeGVuXzlwZGV2LT5yaW5nc1tpXS5yZWYp ID09IC0xKSB7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgICAgICBnX2Zy ZWUoc3RyKTsKKyAgICAgICAgc3RyID0gZ19zdHJkdXBfcHJpbnRmKCJldmVudC1jaGFubmVsLSV1 IiwgaSk7CisgICAgICAgIGlmICh4ZW5zdG9yZV9yZWFkX2ZlX2ludCgmeGVuXzlwZGV2LT54ZW5k ZXYsIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4ZW5fOXBkZXYtPnJp bmdzW2ldLmV2dGNobikgPT0gLTEpIHsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9 CisgICAgICAgIGdfZnJlZShzdHIpOworCisgICAgICAgIHhlbl85cGRldi0+cmluZ3NbaV0uaW50 ZiA9ICB4ZW5nbnR0YWJfbWFwX2dyYW50X3JlZigKKyAgICAgICAgICAgICAgICB4ZW5fOXBkZXYt PnhlbmRldi5nbnR0YWJkZXYsCisgICAgICAgICAgICAgICAgeGVuXzlwZGV2LT54ZW5kZXYuZG9t LAorICAgICAgICAgICAgICAgIHhlbl85cGRldi0+cmluZ3NbaV0ucmVmLAorICAgICAgICAgICAg ICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgICAgICBpZiAoIXhlbl85cGRldi0+cmlu Z3NbaV0uaW50ZikgeworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAg eGVuXzlwZGV2LT5yaW5nc1tpXS5kYXRhID0geGVuZ250dGFiX21hcF9kb21haW5fZ3JhbnRfcmVm cygKKyAgICAgICAgICAgICAgICB4ZW5fOXBkZXYtPnhlbmRldi5nbnR0YWJkZXYsCisgICAgICAg ICAgICAgICAgKDEgPDwgWEVOXzlQRlNfUklOR19PUkRFUiksCisgICAgICAgICAgICAgICAgeGVu XzlwZGV2LT54ZW5kZXYuZG9tLAorICAgICAgICAgICAgICAgIHhlbl85cGRldi0+cmluZ3NbaV0u aW50Zi0+cmVmLAorICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAg ICAgICBpZiAoIXhlbl85cGRldi0+cmluZ3NbaV0uZGF0YSkgeworICAgICAgICAgICAgZ290byBv dXQ7CisgICAgICAgIH0KKyAgICAgICAgeGVuXzlwZGV2LT5yaW5nc1tpXS5yaW5nLmluID0geGVu XzlwZGV2LT5yaW5nc1tpXS5kYXRhOworICAgICAgICB4ZW5fOXBkZXYtPnJpbmdzW2ldLnJpbmcu b3V0ID0geGVuXzlwZGV2LT5yaW5nc1tpXS5kYXRhICsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFhFTl85UEZTX1JJTkdfU0laRTsKKworICAgICAgICB4ZW5fOXBkZXYt PnJpbmdzW2ldLmJoID0gcWVtdV9iaF9uZXcoeGVuXzlwZnNfYmgsICZ4ZW5fOXBkZXYtPnJpbmdz W2ldKTsKKyAgICAgICAgeGVuXzlwZGV2LT5yaW5nc1tpXS5vdXRfY29ucyA9IDA7CisgICAgICAg IHhlbl85cGRldi0+cmluZ3NbaV0ub3V0X3NpemUgPSAwOworICAgICAgICB4ZW5fOXBkZXYtPnJp bmdzW2ldLmlucHJvZ3Jlc3MgPSBmYWxzZTsKKworCisgICAgICAgIHhlbl85cGRldi0+cmluZ3Nb aV0uZXZ0Y2huZGV2ID0geGVuZXZ0Y2huX29wZW4oTlVMTCwgMCk7CisgICAgICAgIGlmICh4ZW5f OXBkZXYtPnJpbmdzW2ldLmV2dGNobmRldiA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIG91 dDsKKyAgICAgICAgfQorICAgICAgICBmY250bCh4ZW5ldnRjaG5fZmQoeGVuXzlwZGV2LT5yaW5n c1tpXS5ldnRjaG5kZXYpLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKKyAgICAgICAgeGVuXzlwZGV2 LT5yaW5nc1tpXS5sb2NhbF9wb3J0ID0geGVuZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHhlbl85cGRldi0+cmluZ3Nb aV0uZXZ0Y2huZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeGVuZGV2LT5kb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB4ZW5fOXBkZXYtPnJpbmdzW2ldLmV2dGNobik7CisgICAgICAgIGlmICh4ZW5fOXBkZXYt PnJpbmdzW2ldLmxvY2FsX3BvcnQgPT0gLTEpIHsKKyAgICAgICAgICAgIHhlbl9wdl9wcmludGYo eGVuZGV2LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAieGVuZXZ0Y2huX2JpbmRfaW50 ZXJkb21haW4gZmFpbGVkIHBvcnQ9JWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHhl bl85cGRldi0+cmluZ3NbaV0uZXZ0Y2huKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAg ICB9CisgICAgICAgIHhlbl9wdl9wcmludGYoeGVuZGV2LCAyLCAiYmluZCBldnRjaG4gcG9ydCAl ZFxuIiwgeGVuZGV2LT5sb2NhbF9wb3J0KTsKKyAgICAgICAgcWVtdV9zZXRfZmRfaGFuZGxlcih4 ZW5ldnRjaG5fZmQoeGVuXzlwZGV2LT5yaW5nc1tpXS5ldnRjaG5kZXYpLAorICAgICAgICAgICAg ICAgIHhlbl85cGZzX2V2dGNobl9ldmVudCwgTlVMTCwgJnhlbl85cGRldi0+cmluZ3NbaV0pOwor ICAgIH0KKworICAgIHhlbl85cGRldi0+c2VjdXJpdHlfbW9kZWwgPSB4ZW5zdG9yZV9yZWFkX2Jl X3N0cih4ZW5kZXYsICJzZWN1cml0eV9tb2RlbCIpOworICAgIHhlbl85cGRldi0+cGF0aCA9IHhl bnN0b3JlX3JlYWRfYmVfc3RyKHhlbmRldiwgInBhdGgiKTsKKyAgICB4ZW5fOXBkZXYtPmlkID0g cy0+ZnNjb25mLmZzZGV2X2lkID0KKyAgICAgICAgZ19zdHJkdXBfcHJpbnRmKCJ4ZW45cCVkIiwg eGVuZGV2LT5kZXYpOworICAgIHhlbl85cGRldi0+dGFnID0gcy0+ZnNjb25mLnRhZyA9IHhlbnN0 b3JlX3JlYWRfZmVfc3RyKHhlbmRldiwgInRhZyIpOworICAgIHY5ZnNfcmVnaXN0ZXJfdHJhbnNw b3J0KHMsICZ4ZW5fOXBfdHJhbnNwb3J0KTsKKyAgICBmc2RldiA9IHFlbXVfb3B0c19jcmVhdGUo cWVtdV9maW5kX29wdHMoImZzZGV2IiksCisgICAgICAgICAgICBzLT5mc2NvbmYudGFnLAorICAg ICAgICAgICAgMSwgTlVMTCk7CisgICAgcWVtdV9vcHRfc2V0KGZzZGV2LCAiZnNkcml2ZXIiLCAi bG9jYWwiLCBOVUxMKTsKKyAgICBxZW11X29wdF9zZXQoZnNkZXYsICJwYXRoIiwgeGVuXzlwZGV2 LT5wYXRoLCBOVUxMKTsKKyAgICBxZW11X29wdF9zZXQoZnNkZXYsICJzZWN1cml0eV9tb2RlbCIs IHhlbl85cGRldi0+c2VjdXJpdHlfbW9kZWwsIE5VTEwpOworICAgIHFlbXVfb3B0c19zZXRfaWQo ZnNkZXYsIHMtPmZzY29uZi5mc2Rldl9pZCk7CisgICAgcWVtdV9mc2Rldl9hZGQoZnNkZXYpOwor ICAgIHY5ZnNfZGV2aWNlX3JlYWxpemVfY29tbW9uKHMsIE5VTEwpOworCiAgICAgcmV0dXJuIDA7 CisKK291dDoKKyAgICB4ZW5fOXBmc19mcmVlKHhlbmRldik7CisgICAgcmV0dXJuIC0xOwogfQog CiBzdGF0aWMgdm9pZCB4ZW5fOXBmc19hbGxvYyhzdHJ1Y3QgWGVuRGV2aWNlICp4ZW5kZXYpCiB7 CisgICAgeGVuc3RvcmVfd3JpdGVfYmVfc3RyKHhlbmRldiwgInZlcnNpb25zIiwgVkVSU0lPTlMp OworICAgIHhlbnN0b3JlX3dyaXRlX2JlX2ludCh4ZW5kZXYsICJtYXgtcmluZ3MiLCBNQVhfUklO R1MpOworICAgIHhlbnN0b3JlX3dyaXRlX2JlX2ludCh4ZW5kZXYsICJtYXgtcmluZy1wYWdlLW9y ZGVyIiwgTUFYX1JJTkdfT1JERVIpOwogfQogCiBzdGF0aWMgdm9pZCB4ZW5fOXBmc19kaXNjb25u ZWN0KHN0cnVjdCBYZW5EZXZpY2UgKnhlbmRldikKIHsKKyAgICAvKiBEeW5hbWljIGhvdHBsdWcg b2YgUFYgZmlsZXN5c3RlbXMgYXQgcnVudGltZSBpcyBub3Qgc3VwcG9ydGVkLiAqLwogfQogCiBz dHJ1Y3QgWGVuRGV2T3BzIHhlbl85cGZzX29wcyA9IHsKLS0gCjEuOS4xCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==