From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiaoguang Chen Subject: [PATCH v9 6/7] drm/i915/gvt: Dmabuf support for GVT-g Date: Thu, 15 Jun 2017 16:00:10 +0800 Message-ID: <1497513611-2814-7-git-send-email-xiaoguang.chen@intel.com> References: <1497513611-2814-1-git-send-email-xiaoguang.chen@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1497513611-2814-1-git-send-email-xiaoguang.chen@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: alex.williamson@redhat.com, kraxel@redhat.com, chris@chris-wilson.co.uk, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, zhenyuw@linux.intel.com, zhiyuan.lv@intel.com, intel-gvt-dev@lists.freedesktop.org, zhi.a.wang@intel.com, kevin.tian@intel.com Cc: Xiaoguang Chen List-Id: intel-gfx@lists.freedesktop.org ZG1hYnVmIGZvciBHVlQtZyBjYW4gYmUgZXhwb3J0ZWQgdG8gdXNlcnMgd2hvIGNhbiB1c2UgdGhl IGRtYWJ1ZiB0byBzaG93CnRoZSBkZXNrdG9wIG9mIHZtIHdoaWNoIHVzZSBpbnRlbCB2Z3B1LgoK Q3VycmVudGx5IHdlIHByb3ZpZGUgcXVlcnkgYW5kIGNyZWF0ZSBuZXcgZG1hYnVmIG9wZXJhdGlv bnMuCgpVc2VycyBvZiBkbWFidWYgY2FuIGNhY2hlIHNvbWUgY3JlYXRlZCBkbWFidWZzIGFuZCBy ZWxhdGVkIGluZm9ybWF0aW9uCnN1Y2ggYXMgdGhlIGZyYW1lYnVmZmVyJ3MgYWRkcmVzcywgc2l6 ZSwgdGlsaW5nIG1vZGUsIHdpZHRoLCBoZWlnaHQgZXRjLgpXaGVuIHJlZnJlc2ggdGhlIHNjcmVl biBmaXJzdCBxdWVyeSB0aGUgY3Vycm5ldCB2Z3B1J3MgZnJhbWJ1ZmZlciBhbmQKY29tcGFyZSB3 aXRoIHRoZSBjYWNoZWQgb25lcyhhZGRyZXNzLCBzaXplLCB0aWxpbmcsIHdpZHRoLCBoZWlnaHQg ZXRjKQppZiBmb3VuZCBvbmUgdGhlbiByZXVzZSB0aGUgZm91bmQgZG1hYnVmIHRvIGdhaW4gcGVy Zm9ybWFuY2UgaW1wcm92bWVudC4KCklmIHRoZXJlIGlzIG5vIGRtYWJ1ZiBjcmVhdGVkIHlldCBv ciBub3QgZm91bmQgaW4gdGhlIGNhY2hlZCBkbWFidWZzIHRoZW4KbmVlZCB0byBjcmVhdGUgYSBu ZXcgZG1hYnVmLiBUbyBjcmVhdGUgYSBkbWFidWYgZmlyc3QgYSBnZW0gb2JqZWN0IHdpbGwKYmUg Y3JlYXRlZCBhbmQgdGhlIGJhY2tpbmcgc3RvcmFnZSBvZiB0aGlzIGdlbSBvYmplY3QgaXMgdGhl IHZncHUncwpmcmFtZWJ1ZmZlcihwcmltYXJ5L2N1cnNvcikuClNldCBjYWNoaW5nIG1vZGUsIGNo YW5nZSB0aWxpbmcgbW9kZSBhbmQgc2V0IGRvbWFpbnMgb2YgdGhpcyBnZW0gb2JqZWN0CmlzIG5v dCBzdXBwb3J0ZWQuClRoZW4gYXNzb2NpYXRlIHRoaXMgZ2VtIG9iamVjdCB0byBhIGRtYWJ1ZiBh bmQgZXhwb3J0IHRoaXMgZG1hYnVmLgpBIGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIGdlbmVyYXRl ZCBmb3IgdGhpcyBkbWFidWYgYW5kIHRoaXMgZmlsZQpkZXNjcmlwdG9yIGNhbiBiZSBzZW50IHRv IHVzZXIgc3BhY2UgdG8gZG8gZGlzcGxheS4KClNpZ25lZC1vZmYtYnk6IFhpYW9ndWFuZyBDaGVu IDx4aWFvZ3VhbmcuY2hlbkBpbnRlbC5jb20+ClRlc3RlZC1ieTogS2VjaGVuIEx1IDxrZWNoZW4u bHVAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZSAgICAg IHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMgICAgICB8IDI2NCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2 dC9kbWFidWYuaCAgICAgIHwgIDM3ICsrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0 LmggICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAg ICB8ICAyNiArKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaCB8ICAg OSArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgfCAgIDUgKwogNyBm aWxlcyBjaGFuZ2VkLCAzNDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmgKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvTWFrZWZpbGUKaW5kZXggMTkyY2EyNi4uZTQ4MGY3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9N YWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAgR1ZUX0RJUiA6PSBndnQKIEdWVF9TT1VSQ0UgOj0gZ3Z0 Lm8gYXBlcnR1cmVfZ20ubyBoYW5kbGVycy5vIHZncHUubyB0cmFjZV9wb2ludHMubyBmaXJtd2Fy ZS5vIFwKIAlpbnRlcnJ1cHQubyBndHQubyBjZmdfc3BhY2UubyBvcHJlZ2lvbi5vIG1taW8ubyBk aXNwbGF5Lm8gZWRpZC5vIFwKIAlleGVjbGlzdC5vIHNjaGVkdWxlci5vIHNjaGVkX3BvbGljeS5v IHJlbmRlci5vIGNtZF9wYXJzZXIubyBcCi0JZmJfZGVjb2Rlci5vCisJZmJfZGVjb2Rlci5vIGRt YWJ1Zi5vCiAKIGNjZmxhZ3MteQkJCQkrPSAtSSQoc3JjKSAtSSQoc3JjKS8kKEdWVF9ESVIpIC1X YWxsCiBpOTE1LXkJCQkJCSs9ICQoYWRkcHJlZml4ICQoR1ZUX0RJUikvLCAkKEdWVF9TT1VSQ0Up KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjZlZjRmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvZG1hYnVmLmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNyBJbnRl bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIFpoaXl1YW4g THYgPHpoaXl1YW4ubHZAaW50ZWwuY29tPgorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgIFhp YW9ndWFuZyBDaGVuIDx4aWFvZ3VhbmcuY2hlbkBpbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGxpbnV4 L3ZmaW8uaD4KKworI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiZ3Z0LmgiCisKKyNk ZWZpbmUgR0VOOF9ERUNPREVfUFRFKHB0ZSkgKHB0ZSAmIEdFTk1BU0tfVUxMKDYzLCAxMikpCisK K3N0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKmludGVsX3ZncHVfZ2VtX2dldF9wYWdlcygKKwkJc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOworCXN0cnVjdCBzZ190YWJsZSAq c3Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaSwgcmV0OworCWdlbjhfcHRlX3Qg X19pb21lbSAqZ3R0X2VudHJpZXM7CisJc3RydWN0IGludGVsX3ZncHVfZmJfaW5mbyAqZmJfaW5m bzsKKworCWZiX2luZm8gPSAoc3RydWN0IGludGVsX3ZncHVfZmJfaW5mbyAqKW9iai0+Z3Z0X2lu Zm87CisJaWYgKFdBUk5fT04oIWZiX2luZm8pKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsK KworCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdCkKKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXQgPSBzZ19hbGxvY190YWJsZShzdCwgZmJf aW5mby0+ZmJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCkgeworCQlrZnJlZShzdCk7CisJ CXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCWd0dF9lbnRyaWVzID0gKGdlbjhfcHRlX3QgX19p b21lbSAqKWRldl9wcml2LT5nZ3R0LmdzbSArCisJCShmYl9pbmZvLT5mYl9hZGRyID4+IFBBR0Vf U0hJRlQpOworCWZvcl9lYWNoX3NnKHN0LT5zZ2wsIHNnLCBmYl9pbmZvLT5mYl9zaXplLCBpKSB7 CisJCXNnLT5vZmZzZXQgPSAwOworCQlzZy0+bGVuZ3RoID0gUEFHRV9TSVpFOworCQlzZ19kbWFf YWRkcmVzcyhzZykgPQorCQkJR0VOOF9ERUNPREVfUFRFKHJlYWRxKCZndHRfZW50cmllc1tpXSkp OworCQlzZ19kbWFfbGVuKHNnKSA9IFBBR0VfU0laRTsKKwl9CisKKwlyZXR1cm4gc3Q7Cit9CisK K3N0YXRpYyB2b2lkIGludGVsX3ZncHVfZ2VtX3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAorCQlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKQoreworCXNnX2ZyZWVfdGFi bGUocGFnZXMpOworCWtmcmVlKHBhZ2VzKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfdmdwdV9n ZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCWtmcmVlKG9i ai0+Z3Z0X2luZm8pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3Rfb3BzIGludGVsX3ZncHVfZ2VtX29wcyA9IHsKKwkuZmxhZ3MgPSBJOTE1X0dFTV9PQkpFQ1Rf SVNfUFJPWFksCisJLmdldF9wYWdlcyA9IGludGVsX3ZncHVfZ2VtX2dldF9wYWdlcywKKwkucHV0 X3BhZ2VzID0gaW50ZWxfdmdwdV9nZW1fcHV0X3BhZ2VzLAorCS5yZWxlYXNlID0gaW50ZWxfdmdw dV9nZW1fcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq aW50ZWxfdmdwdV9jcmVhdGVfZ2VtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCXN0cnVjdCB2 ZmlvX2RtYWJ1Zl9tZ3JfcGxhbmVfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iajsKKworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9hbGxvYyhkZXZfcHJpdik7CisJaWYg KG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWRybV9nZW1fcHJpdmF0ZV9vYmplY3Rf aW5pdChkZXYsICZvYmotPmJhc2UsCisJCWluZm8tPnNpemUgPDwgUEFHRV9TSElGVCk7CisJaTkx NV9nZW1fb2JqZWN0X2luaXQob2JqLCAmaW50ZWxfdmdwdV9nZW1fb3BzKTsKKworCW9iai0+YmFz ZS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fR1RUOworCW9iai0+YmFzZS53cml0ZV9k b21haW4gPSAwOworCWlmIChJU19TS1lMQUtFKGRldl9wcml2KSkgeworCQl1bnNpZ25lZCBpbnQg dGlsaW5nX21vZGUgPSAwOworCQl1bnNpZ25lZCBpbnQgc3RyaWRlID0gMDsKKworCQlzd2l0Y2gg KGluZm8tPmRybV9mb3JtYXRfbW9kIDw8IDEwKSB7CisJCWNhc2UgUExBTkVfQ1RMX1RJTEVEX0xJ TkVBUjoKKwkJCXRpbGluZ19tb2RlID0gSTkxNV9USUxJTkdfTk9ORTsKKwkJCWJyZWFrOworCQlj YXNlIFBMQU5FX0NUTF9USUxFRF9YOgorCQkJdGlsaW5nX21vZGUgPSBJOTE1X1RJTElOR19YOwor CQkJc3RyaWRlID0gaW5mby0+c3RyaWRlOworCQkJYnJlYWs7CisJCWNhc2UgUExBTkVfQ1RMX1RJ TEVEX1k6CisJCQl0aWxpbmdfbW9kZSA9IEk5MTVfVElMSU5HX1k7CisJCQlzdHJpZGUgPSBpbmZv LT5zdHJpZGU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWd2dF9kYmdfY29yZSgibm90IHN1 cHBvcnRlZCB0aWxpbmcgbW9kZVxuIik7CisJCX0KKwkJb2JqLT50aWxpbmdfYW5kX3N0cmlkZSA9 IHRpbGluZ19tb2RlIHwgc3RyaWRlOworCX0gZWxzZSB7CisJCW9iai0+dGlsaW5nX2FuZF9zdHJp ZGUgPSBpbmZvLT5kcm1fZm9ybWF0X21vZCA/CisJCQkJCUk5MTVfVElMSU5HX1ggOiAwOworCX0K KworCXJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfdmdwdV9nZXRfcGxhbmVfaW5m byhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwKKwkJ c3RydWN0IHZmaW9fZG1hYnVmX21ncl9wbGFuZV9pbmZvICppbmZvLAorCQlpbnQgcGxhbmVfaWQp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwor CXN0cnVjdCBpbnRlbF92Z3B1X3ByaW1hcnlfcGxhbmVfZm9ybWF0IHA7CisJc3RydWN0IGludGVs X3ZncHVfY3Vyc29yX3BsYW5lX2Zvcm1hdCBjOworCWludCByZXQ7CisKKwlpZiAocGxhbmVfaWQg PT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkgeworCQlyZXQgPSBpbnRlbF92Z3B1X2RlY29kZV9w cmltYXJ5X3BsYW5lKHZncHUsICZwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWlu Zm8tPnN0YXJ0ID0gcC5iYXNlOworCQlpbmZvLT53aWR0aCA9IHAud2lkdGg7CisJCWluZm8tPmhl aWdodCA9IHAuaGVpZ2h0OworCQlpbmZvLT5zdHJpZGUgPSBwLnN0cmlkZTsKKwkJaW5mby0+ZHJt X2Zvcm1hdCA9IHAuZHJtX2Zvcm1hdDsKKwkJaW5mby0+ZHJtX2Zvcm1hdF9tb2QgPSBwLnRpbGVk OworCQlpbmZvLT5zaXplID0gKCgocC5zdHJpZGUgKiBwLmhlaWdodCAqIHAuYnBwKSAvIDgpICsK KwkJCQkoUEFHRV9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7CisJfSBlbHNlIGlmIChwbGFuZV9p ZCA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpIHsKKwkJcmV0ID0gaW50ZWxfdmdwdV9kZWNvZGVf Y3Vyc29yX3BsYW5lKHZncHUsICZjKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWlu Zm8tPnN0YXJ0ID0gYy5iYXNlOworCQlpbmZvLT53aWR0aCA9IGMud2lkdGg7CisJCWluZm8tPmhl aWdodCA9IGMuaGVpZ2h0OworCQlpbmZvLT5zdHJpZGUgPSBjLndpZHRoICogKGMuYnBwIC8gOCk7 CisJCWluZm8tPmRybV9mb3JtYXQgPSBjLmRybV9mb3JtYXQ7CisJCWluZm8tPmRybV9mb3JtYXRf bW9kID0gMDsKKwkJaW5mby0+eF9wb3MgPSBjLnhfcG9zOworCQlpbmZvLT55X3BvcyA9IGMueV9w b3M7CisJCWluZm8tPnNpemUgPSAoKChpbmZvLT5zdHJpZGUgKiBjLmhlaWdodCAqIGMuYnBwKSAv IDgpCisJCQkJKyAoUEFHRV9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7CisJfSBlbHNlIHsKKwkJ Z3Z0X3ZncHVfZXJyKCJpbnZhbGlkIHBsYW5lIGlkOiVkXG4iLCBwbGFuZV9pZCk7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWlmIChpbmZvLT5zaXplID09IDApIHsKKwkJZ3Z0X3ZncHVfZXJy KCJmYiBzaXplIGlzIHplcm9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaW5m by0+c3RhcnQgJiAoUEFHRV9TSVpFIC0gMSkpIHsKKwkJZ3Z0X3ZncHVfZXJyKCJOb3QgYWxpZ25l ZCBmYiBhZGRyZXNzOjB4JWxseFxuIiwgaW5mby0+c3RhcnQpOworCQlyZXR1cm4gLUVGQVVMVDsK Kwl9CisJaWYgKCgoaW5mby0+c3RhcnQgPj4gUEFHRV9TSElGVCkgKyBpbmZvLT5zaXplKSA+CisJ CWdndHRfdG90YWxfZW50cmllcygmZGV2X3ByaXYtPmdndHQpKSB7CisJCWd2dF92Z3B1X2Vycigi SW52YWxpZCBHVFQgb2Zmc2V0IG9yIHNpemVcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisK KwlpZiAoIWludGVsX2d2dF9nZ3R0X3ZhbGlkYXRlX3JhbmdlKHZncHUsIGluZm8tPnN0YXJ0LCBp bmZvLT5zaXplKSkgeworCQlndnRfdmdwdV9lcnIoImludmFsaWQgZ21hIGFkZHJcbiIpOworCQly ZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGludGVsX3ZncHVfcXVl cnlfcGxhbmUoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHZvaWQgKmFyZ3MpCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9ICZ2Z3B1LT5ndnQtPmRldl9wcml2LT5kcm07CisJc3RydWN0IHZm aW9fZG1hYnVmX21ncl9xdWVyeV9wbGFuZSAqcGxhbmUgPSBhcmdzOworCisJcmV0dXJuIGludGVs X3ZncHVfZ2V0X3BsYW5lX2luZm8oZGV2LCB2Z3B1LCAmcGxhbmUtPnBsYW5lX2luZm8sCisJCQkJ CXBsYW5lLT5wbGFuZV9pZCk7Cit9CisKK2ludCBpbnRlbF92Z3B1X2NyZWF0ZV9kbWFidWYoc3Ry dWN0IGludGVsX3ZncHUgKnZncHUsIHZvaWQgKmFyZ3MpCit7CisJc3RydWN0IGRtYV9idWYgKmRt YWJ1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSAmdmdwdS0+Z3Z0LT5kZXZfcHJpdi0+ZHJtOworCXN0cnVjdCB2ZmlvX2RtYWJ1 Zl9tZ3JfY3JlYXRlX2RtYWJ1ZiAqZ3Z0X2RtYWJ1ZiA9IGFyZ3M7CisJc3RydWN0IGludGVsX3Zn cHVfZmJfaW5mbyAqZmJfaW5mbzsKKwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfdmdwdV9nZXRf cGxhbmVfaW5mbyhkZXYsIHZncHUsICZndnRfZG1hYnVmLT5wbGFuZV9pbmZvLAorCQkJCQlndnRf ZG1hYnVmLT5wbGFuZV9pZCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJb2Jq ID0gaW50ZWxfdmdwdV9jcmVhdGVfZ2VtKGRldiwgJmd2dF9kbWFidWYtPnBsYW5lX2luZm8pOwor CWlmIChvYmogPT0gTlVMTCkgeworCQlndnRfdmdwdV9lcnIoImNyZWF0ZSBndnQgZ2VtIG9iaiBm YWlsZWQ6JWRcbiIsIHZncHUtPmlkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZiX2luZm8g PSBrbWFsbG9jKHNpemVvZigqZmJfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghZmJfaW5mbykg eworCQlndnRfdmdwdV9lcnIoImFsbG9jYXRlIGludGVsIHZncHUgZmIgaW5mbyBmYWlsZWRcbiIp OworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJZmJfaW5mby0+ZmJfYWRkciA9 IGd2dF9kbWFidWYtPnBsYW5lX2luZm8uc3RhcnQ7CisJZmJfaW5mby0+ZmJfc2l6ZSA9IGd2dF9k bWFidWYtPnBsYW5lX2luZm8uc2l6ZTsKKwlmYl9pbmZvLT52Z3B1ID0gdmdwdTsKKwlvYmotPmd2 dF9pbmZvID0gZmJfaW5mbzsKKworCWRtYWJ1ZiA9IGk5MTVfZ2VtX3ByaW1lX2V4cG9ydChkZXYs ICZvYmotPmJhc2UsIERSTV9DTE9FWEVDIHwgRFJNX1JEV1IpOworCisJaWYgKElTX0VSUihkbWFi dWYpKSB7CisJCWd2dF92Z3B1X2VycigiZXhwb3J0IGRtYS1idWYgZmFpbGVkXG4iKTsKKwkJcmV0 ID0gUFRSX0VSUihkbWFidWYpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXJldCA9IGRtYV9i dWZfZmQoZG1hYnVmLCBEUk1fQ0xPRVhFQyB8IERSTV9SRFdSKTsKKwlpZiAocmV0IDwgMCkgewor CQlndnRfdmdwdV9lcnIoImNyZWF0ZSBkbWEtYnVmIGZkIGZhaWxlZCByZXQ6JWRcbiIsIHJldCk7 CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJZ3Z0X2RtYWJ1Zi0+ZmQgPSByZXQ7CisKKwlyZXR1 cm4gMDsKK291dF9mcmVlOgorCWtmcmVlKGZiX2luZm8pOworb3V0OgorCWk5MTVfZ2VtX29iamVj dF9wdXQob2JqKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvZG1hYnVmLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlOTk3OQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaApAQCAtMCwwICsxLDM3IEBA CisvKgorICogQ29weXJpZ2h0KGMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgor ICoKKyAqLworCisjaWZuZGVmIF9HVlRfRE1BQlVGX0hfCisjZGVmaW5lIF9HVlRfRE1BQlVGX0hf CisKK3N0cnVjdCBpbnRlbF92Z3B1X2ZiX2luZm8geworCXN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1 OworCXVpbnQzMl90IGZiX2FkZHI7CisJdWludDMyX3QgZmJfc2l6ZTsKK307CisKK2ludCBpbnRl bF92Z3B1X3F1ZXJ5X3BsYW5lKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCB2b2lkICphcmdzKTsK K2ludCBpbnRlbF92Z3B1X2NyZWF0ZV9kbWFidWYoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHZv aWQgKmFyZ3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2 dC9ndnQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaAppbmRleCBjNDIyNjZjLi43 NjNhOGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVk ZSAicmVuZGVyLmgiCiAjaW5jbHVkZSAiY21kX3BhcnNlci5oIgogI2luY2x1ZGUgImZiX2RlY29k ZXIuaCIKKyNpbmNsdWRlICJkbWFidWYuaCIKIAogI2RlZmluZSBHVlRfTUFYX1ZHUFUgOAogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCAwYzFjYmU5Li5mOTEzNDJiIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMKQEAgLTE2MDksNiArMTYwOSwxMiBAQCBpOTE1X2dlbV9zZXRfZG9tYWluX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJaWYgKCFvYmopCiAJCXJl dHVybiAtRU5PRU5UOwogCisJLyogcHJveHkgZ2VtIG9iamVjdCBkb2VzIG5vdCBzdXBwb3J0IHNl dHRpbmcgZG9tYWluICovCisJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19wcm94eShvYmopKSB7CisJ CWVyciA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CisJfQorCiAJLyogVHJ5IHRvIGZsdXNoIHRoZSBv YmplY3Qgb2ZmIHRoZSBHUFUgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLgogCSAqIFdlIHdpbGwg cmVwZWF0IHRoZSBmbHVzaCBob2xkaW5nIHRoZSBsb2NrIGluIHRoZSBub3JtYWwgbWFubmVyCiAJ ICogdG8gY2F0Y2ggY2FzZXMgd2hlcmUgd2UgYXJlIGdhenVtcGVkLgpAQCAtMTY3Nyw2ICsxNjgz LDEyIEBAIGk5MTVfZ2VtX3N3X2ZpbmlzaF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkICpkYXRhLAogCWlmICghb2JqKQogCQlyZXR1cm4gLUVOT0VOVDsKIAorCS8qIHByb3h5IGdl bSBvYmogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiAqLworCWlmIChpOTE1X2dlbV9v YmplY3RfaXNfcHJveHkob2JqKSkgeworCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJCXJl dHVybiAtRVBFUk07CisJfQorCiAJLyogUGlubmVkIGJ1ZmZlcnMgbWF5IGJlIHNjYW5vdXQsIHNv IGZsdXNoIHRoZSBjYWNoZSAqLwogCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9pZl9kaXNwbGF5KG9i aik7CiAJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwpAQCAtMTcyNyw3ICsxNzM5LDcgQEAgaTkx NV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCSAq LwogCWlmICghb2JqLT5iYXNlLmZpbHApIHsKIAkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwot CQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKIAlhZGRyID0gdm1fbW1h cChvYmotPmJhc2UuZmlscCwgMCwgYXJncy0+c2l6ZSwKQEAgLTM3MTcsNiArMzcyOSwxMiBAQCBp bnQgaTkxNV9nZW1fc2V0X2NhY2hpbmdfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKIAlpZiAoIW9iaikKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKKwkvKiBwcm94eSBnZW0g b2JqIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBjYWNoaW5nIG1vZGUgKi8KKwlpZiAoaTkxNV9n ZW1fb2JqZWN0X2lzX3Byb3h5KG9iaikpIHsKKwkJcmV0ID0gLUVQRVJNOworCQlnb3RvIG91dDsK Kwl9CisKIAlpZiAob2JqLT5jYWNoZV9sZXZlbCA9PSBsZXZlbCkKIAkJZ290byBvdXQ7CiAKQEAg LTQxNjgsNiArNDE4NiwxMiBAQCBpOTE1X2dlbV9tYWR2aXNlX2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJaWYgKCFvYmopCiAJCXJldHVybiAtRU5PRU5UOwogCisJ LyogcHJveHkgZ2VtIG9iaiBkb2VzIG5vdCBzdXBwb3J0IGNoYW5naW5nIGJhY2tkaW5nIHN0b3Jh Z2UgKi8KKwlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX3Byb3h5KG9iaikpIHsKKwkJZXJyID0gLUVQ RVJNOworCQlnb3RvIG91dDsKKwl9CisKIAllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUo Jm9iai0+bW0ubG9jayk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX29iamVjdC5oCmluZGV4IDE3NGNmOTIuLmJlMThhNDMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCkBAIC0zOSw2ICszOSw3IEBAIHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0X29wcyB7CiAJdW5zaWduZWQgaW50IGZsYWdzOwogI2RlZmluZSBJOTE1X0dF TV9PQkpFQ1RfSEFTX1NUUlVDVF9QQUdFIDB4MQogI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNf U0hSSU5LQUJMRSAgIDB4MgorI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNfUFJPWFkJMHg0CiAK IAkvKiBJbnRlcmZhY2UgYmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQgaXRzIGJhY2tpbmcgc3Rv cmFnZS4KIAkgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBwcmlvciB0byB0aGUgdXNlIG9m IHRoZSBhc3NvY2lhdGVkIHNldApAQCAtMTg0LDYgKzE4NSw4IEBAIHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0IHsKIAkJfSB1c2VycHRyOwogCiAJCXVuc2lnbmVkIGxvbmcgc2NyYXRjaDsKKwor CQl2b2lkICpndnRfaW5mbzsKIAl9OwogCiAJLyoqIGZvciBwaHlzIGFsbG9jYXRlZCBvYmplY3Rz ICovCkBAIC0yODYsNiArMjg5LDEyIEBAIGk5MTVfZ2VtX29iamVjdF9pc19zaHJpbmthYmxlKGNv bnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB9CiAKIHN0YXRpYyBpbmxpbmUg Ym9vbAoraTkxNV9nZW1fb2JqZWN0X2lzX3Byb3h5KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmopCit7CisJcmV0dXJuIG9iai0+b3BzLT5mbGFncyAmIEk5MTVfR0VNX09CSkVD VF9JU19QUk9YWTsKK30KKworc3RhdGljIGlubGluZSBib29sCiBpOTE1X2dlbV9vYmplY3RfaXNf YWN0aXZlKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJcmV0dXJu IG9iai0+YWN0aXZlX2NvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpp bmRleCBhMGQ2ZDQzLi4yZWNmNWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV90aWxpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxp bmcuYwpAQCAtMzQ1LDYgKzM0NSwxMSBAQCBpOTE1X2dlbV9zZXRfdGlsaW5nX2lvY3RsKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJaWYgKCFvYmopCiAJCXJldHVybiAtRU5P RU5UOwogCisJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19wcm94eShvYmopKSB7CisJCWVyciA9IC1F UEVSTTsKKwkJZ290byBlcnI7CisJfQorCiAJaWYgKCFpOTE1X3RpbGluZ19vayhvYmosIGFyZ3Mt PnRpbGluZ19tb2RlLCBhcmdzLT5zdHJpZGUpKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8g ZXJyOwotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=