From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: [PATCH v3 18/19] libxl/acpi: Build ACPI tables for HVMlite guests Date: Wed, 7 Sep 2016 14:59:28 -0400 Message-ID: <1473274769-19129-19-git-send-email-boris.ostrovsky@oracle.com> References: <1473274769-19129-1-git-send-email-boris.ostrovsky@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1473274769-19129-1-git-send-email-boris.ostrovsky@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: wei.liu2@citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, julien.grall@arm.com, jbeulich@suse.com, zhaoshenglong@huawei.com, boris.ostrovsky@oracle.com, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogQm9yaXMgT3N0cm92c2t5IDxib3Jpcy5vc3Ryb3Zza3lAb3JhY2xlLmNv bT4KLS0tCkNoYW5nZXMgaW4gdjM6CiogU29tZSBjb25zdGlmaWNhdGlvbiBvZiBjYWxsIHBhcmFt ZXRlcnMKKiBGb3JtYXQgYWRqdXN0bWVudHMKKiBOZXcgYWNwaV9tZW1fZnJlZSBob29rIChhIG5v cCkKKiBDaGFuZ2VzIGluIGluaXRfYWNwaV9jb25maWcoKSB0byBkZWFsIHdpdGggY29uc3RpZmll ZCBhY3BpX251bWEncwogIHBvaW50ZXJzIChpbml0aWFsaXplIHBvaW50ZXJzIGFzIHRlbXAgdmFy aWFiYWxlcykKKiBBZGQgJy1pbmNsdWRlIGFjcGknIGRpcmVjdGl2ZSBpbiBNYWtlZmlsZSB0byBt YWtlIHN1cmUgYWNwaQogIHRhcmdldCBpcyBidWlsdCBiZWZvcmUgYnVpbGQubyBkZXBlbmRlbmNp ZXMgYXJlIHByb2Nlc3NlZAogIChzcGVjaWZpY2FsbHksIHNzZHRfKi5oIGZpbGVzIG5lZWQgdG8g ZXhpc3QpCgoKIC5naXRpZ25vcmUgICAgICAgICAgICAgICAgICAgfCAgMTIgKystCiB0b29scy9s aWJhY3BpL2J1aWxkLmMgICAgICAgIHwgICA3ICstCiB0b29scy9saWJhY3BpL2xpYmFjcGkuaCAg ICAgIHwgIDE1ICsrLQogdG9vbHMvbGlieGwvTWFrZWZpbGUgICAgICAgICB8ICAxOCArKystCiB0 b29scy9saWJ4bC9saWJ4bF9hcmNoLmggICAgIHwgICAzICsKIHRvb2xzL2xpYnhsL2xpYnhsX3g4 Ni5jICAgICAgfCAgMzAgKysrKy0tCiB0b29scy9saWJ4bC9saWJ4bF94ODZfYWNwaS5jIHwgMjE4 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRvb2xzL2xpYnhs L2xpYnhsX3g4Nl9hY3BpLmggfCAgMzUgKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAzMTggaW5z ZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbGli eGwvbGlieGxfeDg2X2FjcGkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL2xpYnhs X3g4Nl9hY3BpLmgKCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCA5 YjJjNDA1Li45ZjViZDhjIDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUK QEAgLTE3MywxNSArMTczLDE5IEBAIHRvb2xzL2luY2x1ZGUveGVuLyoKIHRvb2xzL2luY2x1ZGUv eGVuLXhzbS8qCiB0b29scy9pbmNsdWRlL3hlbi1mb3JlaWduLyouKGN8aHxzaXplKQogdG9vbHMv aW5jbHVkZS94ZW4tZm9yZWlnbi9jaGVja2VyCi10b29scy9saWJ4bC9saWJ4bHVfY2ZnX3kub3V0 cHV0Cit0b29scy9saWJ4bC9fbGlieGwuYXBpLWZvci1jaGVjawordG9vbHMvbGlieGwvKi5hcGkt b2sKIHRvb2xzL2xpYnhsLyoucGMKIHRvb2xzL2xpYnhsLyoucGMuaW4KLXRvb2xzL2xpYnhsL3hs Cit0b29scy9saWJ4bC9kc2R0Ki5jCit0b29scy9saWJ4bC9kc2R0XyouYXNsCit0b29scy9saWJ4 bC9saWJ4bHVfY2ZnX3kub3V0cHV0Cit0b29scy9saWJ4bC9ta19kc2R0Cit0b29scy9saWJ4bC9z c2R0XyouaAogdG9vbHMvbGlieGwvdGVzdGVudW0KIHRvb2xzL2xpYnhsL3Rlc3RlbnVtLmMKIHRv b2xzL2xpYnhsL3RtcC4qCi10b29scy9saWJ4bC9fbGlieGwuYXBpLWZvci1jaGVjawotdG9vbHMv bGlieGwvKi5hcGktb2sKK3Rvb2xzL2xpYnhsL3hsCiB0b29scy9taXNjL2NwdXBlcmYvY3B1cGVy Zi1wZXJmY250cgogdG9vbHMvbWlzYy9jcHVwZXJmL2NwdXBlcmYteGVuCiB0b29scy9taXNjL3hj X3NoYWRvdwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliYWNwaS9idWlsZC5jIGIvdG9vbHMvbGliYWNw aS9idWlsZC5jCmluZGV4IDFjZDY0MGQuLmVlNWY3NzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYmFj cGkvYnVpbGQuYworKysgYi90b29scy9saWJhY3BpL2J1aWxkLmMKQEAgLTIwLDYgKzIwLDcgQEAK ICNpbmNsdWRlICJzc2R0X3M0LmgiCiAjaW5jbHVkZSAic3NkdF90cG0uaCIKICNpbmNsdWRlICJz c2R0X3BtLmgiCisjaW5jbHVkZSA8eGVuL2h2bS9odm1faW5mb190YWJsZS5oPgogI2luY2x1ZGUg PHhlbi9odm0vaHZtX3hzX3N0cmluZ3MuaD4KICNpbmNsdWRlIDx4ZW4vaHZtL3BhcmFtcy5oPgog CkBAIC00OTUsNyArNDk2LDcgQEAgc3RhdGljIGludCBuZXdfdm1fZ2lkKHN0cnVjdCBhY3BpX2N0 eHQgKmN0eHQsCiAgICAgcmV0dXJuIDE7CiB9CiAKLXZvaWQgYWNwaV9idWlsZF90YWJsZXMoc3Ry dWN0IGFjcGlfY3R4dCAqY3R4dCwgc3RydWN0IGFjcGlfY29uZmlnICpjb25maWcpCitpbnQgYWNw aV9idWlsZF90YWJsZXMoc3RydWN0IGFjcGlfY3R4dCAqY3R4dCwgc3RydWN0IGFjcGlfY29uZmln ICpjb25maWcpCiB7CiAgICAgc3RydWN0IGFjcGlfaW5mbyAqYWNwaV9pbmZvOwogICAgIHN0cnVj dCBhY3BpXzIwX3JzZHAgKnJzZHA7CkBAIC02MzAsMTEgKzYzMSwxMSBAQCB2b2lkIGFjcGlfYnVp bGRfdGFibGVzKHN0cnVjdCBhY3BpX2N0eHQgKmN0eHQsIHN0cnVjdCBhY3BpX2NvbmZpZyAqY29u ZmlnKQogICAgIGlmICggIW5ld192bV9naWQoY3R4dCwgY29uZmlnLCBhY3BpX2luZm8pICkKICAg ICAgICAgZ290byBvb207CiAKLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKIG9vbToKICAg ICBwcmludGYoInVuYWJsZSB0byBidWlsZCBBQ1BJIHRhYmxlczogb3V0IG9mIG1lbW9yeVxuIik7 Ci0KKyAgICByZXR1cm4gLTE7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS90b29scy9saWJhY3BpL2xp YmFjcGkuaCBiL3Rvb2xzL2xpYmFjcGkvbGliYWNwaS5oCmluZGV4IGQ4MDMxMzkuLmIwZmY1YWEg MTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYmFjcGkvbGliYWNwaS5oCisrKyBiL3Rvb2xzL2xpYmFjcGkv bGliYWNwaS5oCkBAIC00OCw2ICs0OCwxNSBAQCBzdHJ1Y3QgYWNwaV9jdHh0IHsKICAgICAgICAg dm9pZCAoKmZyZWUpKHN0cnVjdCBhY3BpX2N0eHQgKmN0eHQsIHZvaWQgKnYsIHVpbnQzMl90IHNp emUpOwogICAgICAgICB1bnNpZ25lZCBsb25nICgqdjJwKShzdHJ1Y3QgYWNwaV9jdHh0ICpjdHh0 LCB2b2lkICp2KTsKICAgICB9IG1lbV9vcHM7CisKKyAgICB1bnNpZ25lZCBpbnQgcGFnZV9zaXpl OworICAgIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0OworCisgICAgLyogTWVtb3J5IGFsbG9jYXRv ciAqLworICAgIHVuc2lnbmVkIGxvbmcgYWxsb2NfYmFzZV9wYWRkcjsKKyAgICB1bnNpZ25lZCBs b25nIGFsbG9jX2Jhc2VfdmFkZHI7CisgICAgdW5zaWduZWQgbG9uZyBhbGxvY19jdXJycDsKKyAg ICB1bnNpZ25lZCBsb25nIGFsbG9jX2VuZDsKIH07CiAKIHN0cnVjdCBhY3BpX2NvbmZpZyB7CkBA IC04MCwxMCArODksMTAgQEAgc3RydWN0IGFjcGlfY29uZmlnIHsKICAgICAgKiBUaGlzIG11c3Qg bWF0Y2ggdGhlIE9wZXJhdGlvblJlZ2lvbihCSU9TLCBTeXN0ZW1NZW1vcnksIC4uLi4pCiAgICAg ICogZGVmaW5pdGlvbiBpbiB0aGUgRFNEVAogICAgICAqLwotICAgIHVuc2lnbmVkIGludCBpbmZv cDsKKyAgICB1bnNpZ25lZCBsb25nIGluZm9wOwogCiAgICAgLyogUlNEUCBhZGRyZXNzICovCi0g ICAgdW5zaWduZWQgaW50IHJzZHA7CisgICAgdW5zaWduZWQgbG9uZyByc2RwOwogCiAgICAgLyog eDg2LXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KICAgICB1aW50MTZfdCAoKmxhcGljX2lkKSh1bnNp Z25lZCBjcHUpOwpAQCAtOTMsNyArMTAyLDcgQEAgc3RydWN0IGFjcGlfY29uZmlnIHsKICAgICB1 aW50OF90IGlvYXBpY19pZDsKIH07CiAKLXZvaWQgYWNwaV9idWlsZF90YWJsZXMoc3RydWN0IGFj cGlfY3R4dCAqY3R4dCwgc3RydWN0IGFjcGlfY29uZmlnICpjb25maWcpOworaW50IGFjcGlfYnVp bGRfdGFibGVzKHN0cnVjdCBhY3BpX2N0eHQgKmN0eHQsIHN0cnVjdCBhY3BpX2NvbmZpZyAqY29u ZmlnKTsKIAogI2VuZGlmIC8qIF9fTElCQUNQSV9IX18gKi8KIApkaWZmIC0tZ2l0IGEvdG9vbHMv bGlieGwvTWFrZWZpbGUgYi90b29scy9saWJ4bC9NYWtlZmlsZQppbmRleCAxZjNiNDBmLi5lZTMy YmM3IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9NYWtlZmlsZQorKysgYi90b29scy9saWJ4bC9N YWtlZmlsZQpAQCAtNzUsNyArNzUsMjEgQEAgZWxzZQogTElCWExfT0JKUy15ICs9IGxpYnhsX25v X2NvbG8ubwogZW5kaWYKIAotTElCWExfT0JKUy0kKENPTkZJR19YODYpICs9IGxpYnhsX2NwdWlk Lm8gbGlieGxfeDg2Lm8gbGlieGxfcHNyLm8KK0FDUElfUEFUSCAgPSAkKFhFTl9ST09UKS90b29s cy9saWJhY3BpCitBQ1BJX0ZJTEVTID0gZHNkdF9wdmguYworQUNQSV9PQkpTICA9ICQocGF0c3Vi c3QgJS5jLCUubywkKEFDUElfRklMRVMpKSBidWlsZC5vIHN0YXRpY190YWJsZXMubworJChBQ1BJ X0ZJTEVTKTogYWNwaQorJChBQ1BJX09CSlMpOiBDRkxBR1MgKz0gLUkuIC1ETElCQUNQSV9TVERV VElMUz1cIiQoQ1VSRElSKS9saWJ4bF94ODZfYWNwaS5oXCIKK3ZwYXRoIGJ1aWxkLmMgJChBQ1BJ X1BBVEgpLwordnBhdGggc3RhdGljX3RhYmxlcy5jICQoQUNQSV9QQVRIKS8KK0xJQlhMX09CSlMt JChDT05GSUdfWDg2KSArPSAkKEFDUElfT0JKUykKKworLlBIT05ZOiBhY3BpCithY3BpOgorCSQo TUFLRSkgLUMgJChBQ1BJX1BBVEgpIEFDUElfQlVJTERfRElSPSQoQ1VSRElSKQorLWluY2x1ZGUg YWNwaQorCitMSUJYTF9PQkpTLSQoQ09ORklHX1g4NikgKz0gbGlieGxfY3B1aWQubyBsaWJ4bF94 ODYubyBsaWJ4bF9wc3IubyBsaWJ4bF94ODZfYWNwaS5vCiBMSUJYTF9PQkpTLSQoQ09ORklHX0FS TSkgKz0gbGlieGxfbm9jcHVpZC5vIGxpYnhsX2FybS5vIGxpYnhsX2xpYmZkdF9jb21wYXQubwog CiBpZmVxICgkKENPTkZJR19OZXRCU0QpLHkpCkBAIC0xNjcsNiArMTgxLDcgQEAgJChYTF9PQkpT KTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX1hMKQogJChYTF9PQkpTKTogQ0ZMQUdTICs9IC1pbmNsdWRl ICQoWEVOX1JPT1QpL3Rvb2xzL2NvbmZpZy5oICMgbGlieGxfanNvbi5oIG5lZWRzIGl0LgogCiBs aWJ4bF9kb20ubzogQ0ZMQUdTICs9IC1JJChYRU5fUk9PVCkvdG9vbHMgICMgaW5jbHVkZSBsaWJh Y3BpL3g4Ni5oCitsaWJ4bF94ODZfYWNwaS5vOiBDRkxBR1MgKz0gLUkkKFhFTl9ST09UKS90b29s cwogCiBTQVZFX0hFTFBFUl9PQkpTID0gbGlieGxfc2F2ZV9oZWxwZXIubyBfbGlieGxfc2F2ZV9t c2dzX2hlbHBlci5vCiAkKFNBVkVfSEVMUEVSX09CSlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfbGli eGVuY3RybCkgJChDRkxBR1NfbGlieGVuZXZ0Y2huKQpAQCAtMzA5LDYgKzMyNCw3IEBAIGNsZWFu OgogCSQoUk0pIC1mIHRlc3RpZGwuYy5uZXcgdGVzdGlkbC5jICouYXBpLW9rCiAJJChSTSkgLWYg eGVubGlnaHQucGMKIAkkKFJNKSAtZiB4bHV0aWwucGMKKwkkKE1BS0UpIC1DICQoQUNQSV9QQVRI KSBBQ1BJX0JVSUxEX0RJUj0kKENVUkRJUikgY2xlYW4KIAogZGlzdGNsZWFuOiBjbGVhbgogCSQo Uk0pIC1mIHhlbmxpZ2h0LnBjLmluIHhsdXRpbC5wYy5pbgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGli eGwvbGlieGxfYXJjaC5oIGIvdG9vbHMvbGlieGwvbGlieGxfYXJjaC5oCmluZGV4IDI1M2EwMzcu LjdhNzBiMDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaAorKysgYi90b29s cy9saWJ4bC9saWJ4bF9hcmNoLmgKQEAgLTY2LDYgKzY2LDkgQEAgaW50IGxpYnhsX19hcmNoX2Rv bWFpbl9jb25zdHJ1Y3RfbWVtbWFwKGxpYnhsX19nYyAqZ2MsCiAKICNkZWZpbmUgTEFQSUNfQkFT RV9BRERSRVNTICAweGZlZTAwMDAwCiAKK2ludCBsaWJ4bF9fZG9tX2xvYWRfYWNwaShsaWJ4bF9f Z2MgKmdjLAorCQkJIGNvbnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8sCisJCQkg c3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKTsKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBh L3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMKaW5kZXgg MmIyMjFhYS4uZDEwYjA0YiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMKKysr IGIvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMKQEAgLTgsMTUgKzgsMTkgQEAgaW50IGxpYnhsX19h cmNoX2RvbWFpbl9wcmVwYXJlX2NvbmZpZyhsaWJ4bF9fZ2MgKmdjLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB4Y19kb21haW5fY29uZmlndXJhdGlvbl90ICp4Y19jb25m aWcpCiB7CiAKLSAgICBpZiAoZF9jb25maWctPmNfaW5mby50eXBlID09IExJQlhMX0RPTUFJTl9U WVBFX0hWTSAmJgotICAgICAgICBkX2NvbmZpZy0+Yl9pbmZvLmRldmljZV9tb2RlbF92ZXJzaW9u ICE9Ci0gICAgICAgIExJQlhMX0RFVklDRV9NT0RFTF9WRVJTSU9OX05PTkUpIHsKLSAgICAgICAg LyogSFZNIGRvbWFpbnMgd2l0aCBhIGRldmljZSBtb2RlbC4gKi8KLSAgICAgICAgeGNfY29uZmln LT5lbXVsYXRpb25fZmxhZ3MgPSBYRU5fWDg2X0VNVV9BTEw7Ci0gICAgfSBlbHNlIHsKLSAgICAg ICAgLyogUFYgb3IgSFZNIGRvbWFpbnMgd2l0aG91dCBhIGRldmljZSBtb2RlbC4gKi8KKyAgICBp ZiAoZF9jb25maWctPmNfaW5mby50eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX0hWTSkgeworICAg ICAgICBpZiAoZF9jb25maWctPmJfaW5mby5kZXZpY2VfbW9kZWxfdmVyc2lvbiAhPQorICAgICAg ICAgICAgTElCWExfREVWSUNFX01PREVMX1ZFUlNJT05fTk9ORSkgeworICAgICAgICAgICAgeGNf Y29uZmlnLT5lbXVsYXRpb25fZmxhZ3MgPSBYRU5fWDg2X0VNVV9BTEw7CisgICAgICAgIH0gZWxz ZSBpZiAobGlieGxfZGVmYm9vbF92YWwoZF9jb25maWctPmJfaW5mby51Lmh2bS5hcGljKSkgewor ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEhWTSBndWVzdHMgd2l0aG91dCBkZXZpY2Ug bW9kZWwgbWF5IHdhbnQKKyAgICAgICAgICAgICAqIHRvIGhhdmUgTEFQSUMgZW11bGF0aW9uLgor ICAgICAgICAgICAgICovCisgICAgICAgICAgICB4Y19jb25maWctPmVtdWxhdGlvbl9mbGFncyA9 IFhFTl9YODZfRU1VX0xBUElDOworICAgICAgICB9CisgICAgfSBlbHNlIAogICAgICAgICB4Y19j b25maWctPmVtdWxhdGlvbl9mbGFncyA9IDA7Ci0gICAgfQogCiAgICAgcmV0dXJuIDA7CiB9CkBA IC0zNjYsNyArMzcwLDE1IEBAIGludCBsaWJ4bF9fYXJjaF9kb21haW5fZmluYWxpc2VfaHdfZGVz Y3JpcHRpb24obGlieGxfX2djICpnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmluZm8sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4Y19kb21faW1hZ2Ug KmRvbSkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGlmICgoaW5m by0+dHlwZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9IVk0pICYmCisgICAgICAgIChpbmZvLT5kZXZp Y2VfbW9kZWxfdmVyc2lvbiA9PSBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9OT05FKSkgewor ICAgICAgICBpZiAoIChyZXQgPSBsaWJ4bF9fZG9tX2xvYWRfYWNwaShnYywgaW5mbywgZG9tKSkg IT0gMCApCisgICAgICAgICAgICBMT0dFKEVSUk9SLCAibGlieGxfZG9tX2xvYWRfYWNwaSBmYWls ZWQiKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OwogfQogCiAvKiBSZXR1cm4gMCBvbiBzdWNj ZXNzLCBFUlJPUl8qIG9uIGZhaWx1cmUuICovCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4 bF94ODZfYWNwaS5jIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2X2FjcGkuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2M3ZDQyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMv bGlieGwvbGlieGxfeDg2X2FjcGkuYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwKKyAqIGV4Y2VwdGlvbiBvbiBs aW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2IE9yYWNsZSBhbmQvb3IgaXRzIGFm ZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgImxpYnhsX2lu dGVybmFsLmgiCisjaW5jbHVkZSAibGlieGxfYXJjaC5oIgorI2luY2x1ZGUgPHhlbi9odm0vaHZt X2luZm9fdGFibGUuaD4KKyNpbmNsdWRlIDx4ZW4vaHZtL2U4MjAuaD4KKyNpbmNsdWRlICJsaWJh Y3BpL2xpYmFjcGkuaCIKKworI2luY2x1ZGUgPHhjX2RvbS5oPgorCisgLyogTnVtYmVyIG9mIHBh Z2VzIGhvbGRpbmcgQUNQSSB0YWJsZXMgKi8KKyNkZWZpbmUgTlVNX0FDUElfUEFHRVMgMTYKKy8q IFN0b3JlIFJTRFAgaW4gdGhlIGxhc3QgNjQgYnl0ZXMgb2YgQklPUyBSTyBtZW1vcnkgKi8KKyNk ZWZpbmUgUlNEUF9BRERSRVNTICgweDEwMDAwMCAtIDY0KQorI2RlZmluZSBBQ1BJX0lORk9fUEhZ U0lDQUxfQUREUkVTUyAweGZjMDAwMDAwCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGRz ZHRfcHZoW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IGRzZHRfcHZoX2xlbjsKKworLyog QXNzdW1lcyBjb250aWd1b3VzIHBoeXNpY2FsIHNwYWNlICovCitzdGF0aWMgdW5zaWduZWQgbG9u ZyB2aXJ0X3RvX3BoeXMoc3RydWN0IGFjcGlfY3R4dCAqY3R4dCwgdm9pZCAqdikKK3sKKyAgICBy ZXR1cm4gKCgodW5zaWduZWQgbG9uZyl2IC0gY3R4dC0+YWxsb2NfYmFzZV92YWRkcikgKworICAg ICAgICAgICAgY3R4dC0+YWxsb2NfYmFzZV9wYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkICptZW1f YWxsb2Moc3RydWN0IGFjcGlfY3R4dCAqY3R4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCit7CisgICAgdW5zaWduZWQgbG9uZyBzLCBlOwor CisgICAgLyogQWxpZ24gdG8gYXQgbGVhc3QgMTYgYnl0ZXMuICovCisgICAgaWYgKGFsaWduIDwg MTYpCisgICAgICAgIGFsaWduID0gMTY7CisKKyAgICBzID0gKGN0eHQtPmFsbG9jX2N1cnJwICsg YWxpZ24pICYgfigodW5zaWduZWQgbG9uZylhbGlnbiAtIDEpOworICAgIGUgPSBzICsgc2l6ZSAt IDE7CisKKyAgICAvKiBUT0RPOiBSZWFsbG9jYXRlIG1lbW9yeSAqLworICAgIGlmICgoZSA8IHMp IHx8IChlID49IGN0eHQtPmFsbG9jX2VuZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAg d2hpbGUgKGN0eHQtPmFsbG9jX2N1cnJwID4+IGN0eHQtPnBhZ2Vfc2hpZnQgIT0gCisgICAgICAg ICAgIGUgPj4gY3R4dC0+cGFnZV9zaGlmdCkKKyAgICAgICAgY3R4dC0+YWxsb2NfY3VycnAgKz0g Y3R4dC0+cGFnZV9zaXplOworCisgICAgY3R4dC0+YWxsb2NfY3VycnAgPSBlOworCisgICAgcmV0 dXJuICh2b2lkICopczsKK30KKworc3RhdGljIHZvaWQgYWNwaV9tZW1fZnJlZShzdHJ1Y3QgYWNw aV9jdHh0ICpjdHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp2LCB1aW50MzJf dCBzaXplKQoreworfQorCitzdGF0aWMgdWludDE2X3QgYWNwaV9sYXBpY19pZCh1bnNpZ25lZCBj cHUpCit7CisgICAgcmV0dXJuIGNwdSAqIDI7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9hY3BpX2Nv bmZpZyhsaWJ4bF9fZ2MgKmdjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg eGNfZG9tX2ltYWdlICpkb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGli eGxfZG9tYWluX2J1aWxkX2luZm8gKmJfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgYWNwaV9jb25maWcgKmNvbmZpZykKK3sKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCA9 IGRvbS0+eGNoOworICAgIHVpbnQzMl90IGRvbWlkID0gZG9tLT5ndWVzdF9kb21pZDsKKyAgICB4 Y19kb21pbmZvX3QgaW5mbzsKKyAgICBpbnQgaSwgcmM7CisKKyAgICBjb25maWctPmRzZHRfYW55 Y3B1ID0gY29uZmlnLT5kc2R0XzE1Y3B1ID0gZHNkdF9wdmg7CisgICAgY29uZmlnLT5kc2R0X2Fu eWNwdV9sZW4gPSBjb25maWctPmRzZHRfMTVjcHVfbGVuID0gZHNkdF9wdmhfbGVuOworCisgICAg cmMgPSB4Y19kb21haW5fZ2V0aW5mbyh4Y2gsIGRvbWlkLCAxLCAmaW5mbyk7CisgICAgaWYgKHJj IDwgMCkgeworICAgICAgICBMT0coRVJST1IsICIlczogZ2V0ZG9tYWluaW5mbyBmYWlsZWQgKHJj PSVkKSIsIF9fRlVOQ1RJT05fXywgcmMpOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisg ICAgY29uZmlnLT5odm1pbmZvID0gbGlieGxfX3phbGxvYyhnYywgc2l6ZW9mKCpjb25maWctPmh2 bWluZm8pKTsKKworICAgIGNvbmZpZy0+aHZtaW5mby0+YXBpY19tb2RlID0gbGlieGxfZGVmYm9v bF92YWwoYl9pbmZvLT51Lmh2bS5hcGljKTsKKworICAgIGlmIChkb20tPm5yX3Zub2Rlcykgewor ICAgICAgICB1bnNpZ25lZCBpbnQgKnZjcHVfdG9fdm5vZGUsICp2ZGlzdGFuY2U7CisgICAgICAg IHN0cnVjdCB4ZW5fdm1lbXJhbmdlICp2bWVtcmFuZ2U7CisgICAgICAgIHN0cnVjdCBhY3BpX251 bWEgKm51bWEgPSAmY29uZmlnLT5udW1hOworCisgICAgICAgIHJjID0geGNfZG9tYWluX2dldHZu dW1hKHhjaCwgZG9taWQsICZudW1hLT5ucl92bm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZudW1hLT5ucl92bWVtcmFuZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmY29uZmlnLT5odm1pbmZvLT5ucl92Y3B1cywgTlVMTCwgTlVMTCwgTlVMTCk7Cisg ICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgTE9HKEVSUk9SLCAiJXM6IHhjX2RvbWFpbl9n ZXR2bnVtYSBmYWlsZWQgKHJjPSVkKSIsCisgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBy Yyk7CisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIH0KKworICAgICAgICB2bWVtcmFu Z2UgPSBsaWJ4bF9femFsbG9jKGdjLCBkb20tPm5yX3ZtZW1yYW5nZXMgKiBzaXplb2YoKnZtZW1y YW5nZSkpOworICAgICAgICB2ZGlzdGFuY2UgPSBsaWJ4bF9femFsbG9jKGdjLCBkb20tPm5yX3Zu b2RlcyAqIHNpemVvZigqdmRpc3RhbmNlKSk7CisgICAgICAgIHZjcHVfdG9fdm5vZGUgPSBsaWJ4 bF9femFsbG9jKGdjLCBjb25maWctPmh2bWluZm8tPm5yX3ZjcHVzICoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqdmNwdV90b192bm9kZSkpOwor ICAgICAgICByYyA9IHhjX2RvbWFpbl9nZXR2bnVtYSh4Y2gsIGRvbWlkLCAmbnVtYS0+bnJfdm5v ZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtYS0+bnJfdm1lbXJhbmdl cywgJmNvbmZpZy0+aHZtaW5mby0+bnJfdmNwdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZtZW1yYW5nZSwgdmRpc3RhbmNlLCB2Y3B1X3RvX3Zub2RlKTsKKwlpZiAocmMpIHsK KyAgICAgICAgICAgIExPRyhFUlJPUiwgIiVzOiB4Y19kb21haW5fZ2V0dm51bWEgZmFpbGVkIChy Yz0lZCkiLAorICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcmMpOworICAgICAgICAgICAg cmV0dXJuIHJjOworICAgICAgICB9CisgICAgICAgIG51bWEtPnZtZW1yYW5nZSA9IHZtZW1yYW5n ZTsKKyAgICAgICAgbnVtYS0+dmRpc3RhbmNlID0gdmRpc3RhbmNlOworICAgICAgICBudW1hLT52 Y3B1X3RvX3Zub2RlID0gdmNwdV90b192bm9kZTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBj b25maWctPmh2bWluZm8tPm5yX3ZjcHVzID0gaW5mby5tYXhfdmNwdV9pZCArIDE7CisKKyAgICBm b3IgKGk9MDsgaTxjb25maWctPmh2bWluZm8tPm5yX3ZjcHVzOyBpKyspCisgICAgICAgIGNvbmZp Zy0+aHZtaW5mby0+dmNwdV9vbmxpbmVbaSAvIDhdIHw9IDEgPDwgKGkgJiA3KTsKKworCisgICAg Y29uZmlnLT5sYXBpY19iYXNlX2FkZHJlc3MgPSBMQVBJQ19CQVNFX0FERFJFU1M7CisgICAgY29u ZmlnLT5sYXBpY19pZCA9IGFjcGlfbGFwaWNfaWQ7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50 IGxpYnhsX19kb21fbG9hZF9hY3BpKGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJfaW5mbywKKyAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCit7CisgICAgc3RydWN0IGFj cGlfY29uZmlnIGNvbmZpZyA9IHswfTsKKyAgICBzdHJ1Y3QgYWNwaV9jdHh0IGN0eHQ7CisgICAg aW50IHJjLCBhY3BpX3BhZ2VzX251bTsKKyAgICB2b2lkICphY3BpX3BhZ2VzOworICAgIHVuc2ln bmVkIGxvbmcgcGFnZV9tYXNrOworCisgICAgaWYgKChiX2luZm8tPnR5cGUgIT0gTElCWExfRE9N QUlOX1RZUEVfSFZNKSB8fAorICAgICAgICAoYl9pbmZvLT5kZXZpY2VfbW9kZWxfdmVyc2lvbiAh PSBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9OT05FKSkKKyAgICAgICAgcmV0dXJuIDA7CisK KyAgICBjdHh0LnBhZ2Vfc2l6ZSA9IFhDX0RPTV9QQUdFX1NJWkUoZG9tKTsKKyAgICBjdHh0LnBh Z2Vfc2hpZnQgPSAgWENfRE9NX1BBR0VfU0hJRlQoZG9tKTsKKyAgICBwYWdlX21hc2sgPSAoMVVM IDw8IGN0eHQucGFnZV9zaGlmdCkgLSAxOworCisgICAgY3R4dC5tZW1fb3BzLmFsbG9jID0gbWVt X2FsbG9jOworICAgIGN0eHQubWVtX29wcy52MnAgPSB2aXJ0X3RvX3BoeXM7CisgICAgY3R4dC5t ZW1fb3BzLmZyZWUgPSBhY3BpX21lbV9mcmVlOworCisgICAgcmMgPSBpbml0X2FjcGlfY29uZmln KGdjLCBkb20sIGJfaW5mbywgJmNvbmZpZyk7CisgICAgaWYgKHJjKSB7CisgICAgICAgIExPRyhF UlJPUiwgIiVzOiBpbml0X2FjcGlfY29uZmlnIGZhaWxlZCAocmM9JWQpIiwgX19GVU5DVElPTl9f LCByYyk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBjb25maWcucnNkcCA9ICh1 bnNpZ25lZCBsb25nKWxpYnhsX19tYWxsb2MoZ2MsIGN0eHQucGFnZV9zaXplKTsKKyAgICBjb25m aWcuaW5mb3AgPSAodW5zaWduZWQgbG9uZylsaWJ4bF9fbWFsbG9jKGdjLCBjdHh0LnBhZ2Vfc2l6 ZSk7CisgICAgLyogUGFnZXMgdG8gaG9sZCBBQ1BJIHRhYmxlcyAqLworICAgIGFjcGlfcGFnZXMg PSAgbGlieGxfX21hbGxvYyhnYywgKE5VTV9BQ1BJX1BBR0VTICsgMSkgKiBjdHh0LnBhZ2Vfc2l6 ZSk7CisKKyAgICAvKgorICAgICAqIFNldCB1cCBhbGxvY2F0b3IgbWVtb3J5LgorICAgICAqIFN0 YXJ0IG5leHQgdG8gYWNwaV9pbmZvIHBhZ2UgdG8gYXZvaWQgZnJhY3R1cmluZyBlODIwLgorICAg ICAqLworICAgIGN0eHQuYWxsb2NfYmFzZV9wYWRkciA9IEFDUElfSU5GT19QSFlTSUNBTF9BRERS RVNTICsgY3R4dC5wYWdlX3NpemU7CisgICAgY3R4dC5hbGxvY19iYXNlX3ZhZGRyID0gY3R4dC5h bGxvY19jdXJycCA9ICh1bnNpZ25lZCBsb25nKWFjcGlfcGFnZXM7CisgICAgY3R4dC5hbGxvY19l bmQgPSAodW5zaWduZWQgbG9uZylhY3BpX3BhZ2VzICsKKyAgICAgICAgKE5VTV9BQ1BJX1BBR0VT ICogY3R4dC5wYWdlX3NpemUpOworCisgICAgLyogQnVpbGQgdGhlIHRhYmxlcy4gKi8KKyAgICBy YyA9IGFjcGlfYnVpbGRfdGFibGVzKCZjdHh0LCAmY29uZmlnKTsKKyAgICBpZiAocmMpIHsKKyAg ICAgICAgTE9HKEVSUk9SLCAiJXM6IGFjcGlfYnVpbGRfdGFibGVzIGZhaWxlZCB3aXRoICVkIiwK KyAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcmMpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9 CisKKyAgICAvKiBDYWxjdWxhdGUgaG93IG1hbnkgcGFnZXMgYXJlIG5lZWRlZCBmb3IgdGhlIHRh Ymxlcy4gKi8KKyAgICBhY3BpX3BhZ2VzX251bSA9CisgICAgICAgICgoY3R4dC5hbGxvY19jdXJy cCAtICh1bnNpZ25lZCBsb25nKWFjcGlfcGFnZXMpID4+IGN0eHQucGFnZV9zaGlmdCkgKworICAg ICAgICAoKGN0eHQuYWxsb2NfY3VycnAgJiBwYWdlX21hc2spID8gMSA6IDApOworCisgICAgZG9t LT5hY3BpX21vZHVsZXNbMF0uZGF0YSA9ICh2b2lkICopY29uZmlnLnJzZHA7CisgICAgZG9tLT5h Y3BpX21vZHVsZXNbMF0ubGVuZ3RoID0gNjQ7CisgICAgZG9tLT5hY3BpX21vZHVsZXNbMF0uZ3Vl c3RfYWRkcl9vdXQgPSBSU0RQX0FERFJFU1M7CisKKyAgICBkb20tPmFjcGlfbW9kdWxlc1sxXS5k YXRhID0gKHZvaWQgKiljb25maWcuaW5mb3A7CisgICAgZG9tLT5hY3BpX21vZHVsZXNbMV0ubGVu Z3RoID0gNDA5NjsKKyAgICBkb20tPmFjcGlfbW9kdWxlc1sxXS5ndWVzdF9hZGRyX291dCA9IEFD UElfSU5GT19QSFlTSUNBTF9BRERSRVNTOworCisgICAgZG9tLT5hY3BpX21vZHVsZXNbMl0uZGF0 YSA9IGFjcGlfcGFnZXM7CisgICAgZG9tLT5hY3BpX21vZHVsZXNbMl0ubGVuZ3RoID0gYWNwaV9w YWdlc19udW0gIDw8IGN0eHQucGFnZV9zaGlmdDsKKyAgICBkb20tPmFjcGlfbW9kdWxlc1syXS5n dWVzdF9hZGRyX291dCA9IEFDUElfSU5GT19QSFlTSUNBTF9BRERSRVNTICsgY3R4dC5wYWdlX3Np emU7CisKK291dDoKKworICAgIHJldHVybiByYzsKKworfQorLyoKKyAqIExvY2FsIHZhcmlhYmxl czoKKyAqIG1vZGU6IEMKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2Rl OiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfeDg2X2Fj cGkuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMTdhOGJkNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnhsL2xp YnhsX3g4Nl9hY3BpLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNp b24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwKKyAqIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRl c2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMu IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBMSUJYTF9YODZfQUNQSV9ICisj ZGVmaW5lIExJQlhMX1g4Nl9BQ1BJX0gKKworI2luY2x1ZGUgImxpYnhsX2ludGVybmFsLmgiCisK KyNkZWZpbmUgQVNTRVJUKHgpIGFzc2VydCh4KQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2Jp dCh1bnNpZ25lZCBpbnQgYiwgdm9pZCAqcCkKK3sKKyAgICByZXR1cm4gISEoKCh1aW50OF90ICop cClbYj4+M10gJiAoMXU8PChiJjcpKSk7Cit9CisKKyNlbmRpZiAvKiBMSUJYTF9YXzg2X0FDUElf SCAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1v ZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCi0tIAoxLjgu My4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVu LWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3Rz Lnhlbi5vcmcveGVuLWRldmVsCg==