From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Szyprowski Subject: [RFC 2/2] drm/exynos: register rotator as fbproc instead of custom ipp framework Date: Mon, 22 Aug 2016 11:44:35 +0200 Message-ID: <1471859077-15679-3-git-send-email-m.szyprowski@samsung.com> References: <1471859077-15679-1-git-send-email-m.szyprowski@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <1471859077-15679-1-git-send-email-m.szyprowski@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org Cc: Enrico Weigelt , Bartlomiej Zolnierkiewicz , Seung-Woo Kim , Tobias Jakobi , Marek Szyprowski List-Id: linux-samsung-soc@vger.kernel.org VGhpcyBpcyBhIHF1aWNrIGNvbnZlcnNpb24gb2YgRXh5bm9zIERSTSByb3RhdG9yIGRyaXZlciBm cm9tCkV4eW5vcyBJUFAgZnJhbWV3b3JrIHRvIGdlbmVyaWMgRFJNIEZCUHJvYyBBUEkgdG8gZGVt b25zdHJhdGUgaG93IHRvIHVzZSBpdApmcm9tIHRoZSBkcml2ZXIgc2lkZS4KCk5vdC1mb3ItbWVy Z2UteWV0OiB0aGUgY29kZSBvZiB0aGUgZHJpdmVyIG11c3QgYmUgY2xlYW5lZCB1cCBmaXJzdCwg YmVjYXVzZQppdHMgaW50ZXJuYWxzIHN0aWxsIGRlcGVuZHMgb24gRXh5bm9zIElQUCBzdHJ1Y3R1 cmVzLgoKU2lnbmVkLW9mZi1ieTogTWFyZWsgU3p5cHJvd3NraSA8bS5zenlwcm93c2tpQHNhbXN1 bmcuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZyAgICAgICAgICAgICAg fCAgIDEgLQogZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jICAgICB8ICAg MyArLQogZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX3JvdGF0b3IuYyB8IDM1MyAr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5v c19kcm1fcm90YXRvci5oIHwgIDE5IC0tCiA0IGZpbGVzIGNoYW5nZWQsIDE5NCBpbnNlcnRpb25z KCspLCAxODIgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2V4eW5vcy9leHlub3NfZHJtX3JvdGF0b3IuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9leHlub3MvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZwppbmRleCA4 M2Y2MWM1MTNiN2UuLjZlZWJiYTliZTc5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4 eW5vcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZwpAQCAtMTA5 LDcgKzEwOSw2IEBAIGNvbmZpZyBEUk1fRVhZTk9TX0ZJTUMKIAogY29uZmlnIERSTV9FWFlOT1Nf Uk9UQVRPUgogCWJvb2wgIlJvdGF0b3IiCi0JZGVwZW5kcyBvbiBEUk1fRVhZTk9TX0lQUAogCWhl bHAKIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgRXh5bm9zIFJvdGF0 b3IgZm9yIERSTS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3Nf ZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jCmluZGV4 IDg3N2QyZWZhMjhlMi4uZjUzNmE2MzUzMWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v ZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlu b3NfZHJtX2Rydi5jCkBAIC0zOTUsNyArMzk1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxl X29wZXJhdGlvbnMgZXh5bm9zX2RybV9kcml2ZXJfZm9wcyA9IHsKIAogc3RhdGljIHN0cnVjdCBk cm1fZHJpdmVyIGV4eW5vc19kcm1fZHJpdmVyID0gewogCS5kcml2ZXJfZmVhdHVyZXMJPSBEUklW RVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUKLQkJCQkgIHwgRFJJVkVSX0FU T01JQyB8IERSSVZFUl9SRU5ERVIsCisJCQkJICB8IERSSVZFUl9BVE9NSUMgfCBEUklWRVJfUkVO REVSIHwgRFJJVkVSX0ZCUFJPQywKIAkubG9hZAkJCT0gZXh5bm9zX2RybV9sb2FkLAogCS51bmxv YWQJCQk9IGV4eW5vc19kcm1fdW5sb2FkLAogCS5vcGVuCQkJPSBleHlub3NfZHJtX29wZW4sCkBA IC01MzIsNiArNTMyLDcgQEAgc3RhdGljIHN0cnVjdCBleHlub3NfZHJtX2RyaXZlcl9pbmZvIGV4 eW5vc19kcm1fZHJpdmVyc1tdID0gewogCQlEUlZfUFRSKGZpbWNfZHJpdmVyLCBDT05GSUdfRFJN X0VYWU5PU19GSU1DKSwKIAl9LCB7CiAJCURSVl9QVFIocm90YXRvcl9kcml2ZXIsIENPTkZJR19E Uk1fRVhZTk9TX1JPVEFUT1IpLAorCQlEUk1fQ09NUE9ORU5UX0RSSVZFUgogCX0sIHsKIAkJRFJW X1BUUihnc2NfZHJpdmVyLCBDT05GSUdfRFJNX0VYWU5PU19HU0MpLAogCX0sIHsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9yb3RhdG9yLmMgYi9kcml2ZXJz L2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fcm90YXRvci5jCmluZGV4IDQwNDM2N2E0MzBiNS4u OGVjZDhkYjA2NDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19k cm1fcm90YXRvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9yb3Rh dG9yLmMKQEAgLTEwLDYgKzEwLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+ CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAj aW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTIx LDggKzIyLDEwIEBACiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vZXh5bm9z X2RybS5oPgogI2luY2x1ZGUgInJlZ3Mtcm90YXRvci5oIgorI2luY2x1ZGUgImV4eW5vc19kcm1f ZmIuaCIKICNpbmNsdWRlICJleHlub3NfZHJtX2Rydi5oIgogI2luY2x1ZGUgImV4eW5vc19kcm1f aXBwLmgiCisjaW5jbHVkZSAiZXh5bm9zX2RybV9pb21tdS5oIgogCiAvKgogICogUm90YXRvciBz dXBwb3J0cyBpbWFnZSBjcm9wL3JvdGF0b3IgYW5kIGlucHV0L291dHB1dCBETUEgb3BlcmF0aW9u cy4KQEAgLTkyLDcgKzk1LDkgQEAgc3RydWN0IHJvdF9saW1pdF90YWJsZSB7CiAgKiBAc3VzcGVu ZGVkOiBzdXNwZW5kZWQgc3RhdGUuCiAgKi8KIHN0cnVjdCByb3RfY29udGV4dCB7Ci0Jc3RydWN0 IGV4eW5vc19kcm1faXBwZHJ2CWlwcGRydjsKKwlzdHJ1Y3QgZHJtX2ZicHJvYyBmYnByb2M7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXY7CisJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVj dCByZXNvdXJjZQkqcmVnc19yZXM7CiAJdm9pZCBfX2lvbWVtCSpyZWdzOwogCXN0cnVjdCBjbGsJ KmNsb2NrOwpAQCAtMTAwLDYgKzEwNSwxMCBAQCBzdHJ1Y3Qgcm90X2NvbnRleHQgewogCWludAlp cnE7CiAJaW50CWN1cl9idWZfaWRbRVhZTk9TX0RSTV9PUFNfTUFYXTsKIAlib29sCXN1c3BlbmRl ZDsKKwlzcGlubG9ja190IAkJbG9jazsKKwlzdHJ1Y3QgZHJtX2ZicHJvY190YXNrCSp0YXNrOwor CXdhaXRfcXVldWVfaGVhZF90CWRvbmVfd3E7CisJYm9vbAkJCWRvbmU7CiB9OwogCiBzdGF0aWMg dm9pZCByb3RhdG9yX3JlZ19zZXRfaXJxKHN0cnVjdCByb3RfY29udGV4dCAqcm90LCBib29sIGVu YWJsZSkKQEAgLTEzOCw5ICsxNDcsNiBAQCBzdGF0aWMgZW51bSByb3RfaXJxX3N0YXR1cyByb3Rh dG9yX3JlZ19nZXRfaXJxX3N0YXR1cyhzdHJ1Y3Qgcm90X2NvbnRleHQgKnJvdCkKIHN0YXRpYyBp cnFyZXR1cm5fdCByb3RhdG9yX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIHsKIAlz dHJ1Y3Qgcm90X2NvbnRleHQgKnJvdCA9IGFyZzsKLQlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYg KmlwcGRydiA9ICZyb3QtPmlwcGRydjsKLQlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfY21kX25vZGUg KmNfbm9kZSA9IGlwcGRydi0+Y19ub2RlOwotCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9ldmVudF93 b3JrICpldmVudF93b3JrID0gY19ub2RlLT5ldmVudF93b3JrOwogCWVudW0gcm90X2lycV9zdGF0 dXMgaXJxX3N0YXR1czsKIAl1MzIgdmFsOwogCkBAIC0xNTIsMTIgKzE1OCwxNCBAQCBzdGF0aWMg aXJxcmV0dXJuX3Qgcm90YXRvcl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJdmFs IHw9IFJPVF9TVEFUVVNfSVJRX1BFTkRJTkcoKHUzMilpcnFfc3RhdHVzKTsKIAlyb3Rfd3JpdGUo dmFsLCBST1RfU1RBVFVTKTsKIAotCWlmIChpcnFfc3RhdHVzID09IFJPVF9JUlFfU1RBVFVTX0NP TVBMRVRFKSB7Ci0JCWV2ZW50X3dvcmstPmlwcGRydiA9IGlwcGRydjsKLQkJZXZlbnRfd29yay0+ YnVmX2lkW0VYWU5PU19EUk1fT1BTX0RTVF0gPQotCQkJcm90LT5jdXJfYnVmX2lkW0VYWU5PU19E Uk1fT1BTX0RTVF07Ci0JCXF1ZXVlX3dvcmsoaXBwZHJ2LT5ldmVudF93b3JrcSwgJmV2ZW50X3dv cmstPndvcmspOwotCX0gZWxzZSB7CisJc3Bpbl9sb2NrKCZyb3QtPmxvY2spOworCXJvdC0+dGFz ayA9IE5VTEw7CisJcm90LT5kb25lID0gdHJ1ZTsKKwlzcGluX3VubG9jaygmcm90LT5sb2NrKTsK KworCXdha2VfdXAoJnJvdC0+ZG9uZV93cSk7CisKKwlpZiAoaXJxX3N0YXR1cyAhPSBST1RfSVJR X1NUQVRVU19DT01QTEVURSkgewogCQlEUk1fRVJST1IoInRoZSBTRlIgaXMgc2V0IGlsbGVnYWxs eVxuIik7CiAJfQogCkBAIC00NTUsMzYgKzQ2Myw2IEBAIHN0YXRpYyBpbnQgcm90YXRvcl9kc3Rf c2V0X2FkZHIoc3RydWN0IGRldmljZSAqZGV2LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3Ry dWN0IGV4eW5vc19kcm1faXBwX29wcyByb3Rfc3JjX29wcyA9IHsKLQkuc2V0X2ZtdAk9CXJvdGF0 b3Jfc3JjX3NldF9mbXQsCi0JLnNldF9zaXplCT0Jcm90YXRvcl9zcmNfc2V0X3NpemUsCi0JLnNl dF9hZGRyCT0Jcm90YXRvcl9zcmNfc2V0X2FkZHIsCi19OwotCi1zdGF0aWMgc3RydWN0IGV4eW5v c19kcm1faXBwX29wcyByb3RfZHN0X29wcyA9IHsKLQkuc2V0X3RyYW5zZgk9CXJvdGF0b3JfZHN0 X3NldF90cmFuc2YsCi0JLnNldF9zaXplCT0Jcm90YXRvcl9kc3Rfc2V0X3NpemUsCi0JLnNldF9h ZGRyCT0Jcm90YXRvcl9kc3Rfc2V0X2FkZHIsCi19OwotCi1zdGF0aWMgaW50IHJvdGF0b3JfaW5p dF9wcm9wX2xpc3Qoc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYpCi17Ci0Jc3RydWN0 IGRybV9leHlub3NfaXBwX3Byb3BfbGlzdCAqcHJvcF9saXN0ID0gJmlwcGRydi0+cHJvcF9saXN0 OwotCi0JcHJvcF9saXN0LT52ZXJzaW9uID0gMTsKLQlwcm9wX2xpc3QtPmZsaXAgPSAoMSA8PCBF WFlOT1NfRFJNX0ZMSVBfVkVSVElDQUwpIHwKLQkJCQkoMSA8PCBFWFlOT1NfRFJNX0ZMSVBfSE9S SVpPTlRBTCk7Ci0JcHJvcF9saXN0LT5kZWdyZWUgPSAoMSA8PCBFWFlOT1NfRFJNX0RFR1JFRV8w KSB8Ci0JCQkJKDEgPDwgRVhZTk9TX0RSTV9ERUdSRUVfOTApIHwKLQkJCQkoMSA8PCBFWFlOT1Nf RFJNX0RFR1JFRV8xODApIHwKLQkJCQkoMSA8PCBFWFlOT1NfRFJNX0RFR1JFRV8yNzApOwotCXBy b3BfbGlzdC0+Y3NjID0gMDsKLQlwcm9wX2xpc3QtPmNyb3AgPSAwOwotCXByb3BfbGlzdC0+c2Nh bGUgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCByb3RhdG9yX2No ZWNrX2RybV9mbXQodTMyIGZtdCkKIHsKIAlzd2l0Y2ggKGZtdCkgewpAQCAtNTExLDkzICs0ODks NiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcm90YXRvcl9jaGVja19kcm1fZmxpcChlbnVtIGRybV9l eHlub3NfZmxpcCBmbGlwKQogCX0KIH0KIAotc3RhdGljIGludCByb3RhdG9yX2lwcGRydl9jaGVj a19wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9w cm9wZXJ0eSAqcHJvcGVydHkpCi17Ci0Jc3RydWN0IGRybV9leHlub3NfaXBwX2NvbmZpZyAqc3Jj X2NvbmZpZyA9Ci0JCQkJCSZwcm9wZXJ0eS0+Y29uZmlnW0VYWU5PU19EUk1fT1BTX1NSQ107Ci0J c3RydWN0IGRybV9leHlub3NfaXBwX2NvbmZpZyAqZHN0X2NvbmZpZyA9Ci0JCQkJCSZwcm9wZXJ0 eS0+Y29uZmlnW0VYWU5PU19EUk1fT1BTX0RTVF07Ci0Jc3RydWN0IGRybV9leHlub3NfcG9zICpz cmNfcG9zID0gJnNyY19jb25maWctPnBvczsKLQlzdHJ1Y3QgZHJtX2V4eW5vc19wb3MgKmRzdF9w b3MgPSAmZHN0X2NvbmZpZy0+cG9zOwotCXN0cnVjdCBkcm1fZXh5bm9zX3N6ICpzcmNfc3ogPSAm c3JjX2NvbmZpZy0+c3o7Ci0Jc3RydWN0IGRybV9leHlub3Nfc3ogKmRzdF9zeiA9ICZkc3RfY29u ZmlnLT5zejsKLQlib29sIHN3YXAgPSBmYWxzZTsKLQotCS8qIENoZWNrIGZvcm1hdCBjb25maWd1 cmF0aW9uICovCi0JaWYgKHNyY19jb25maWctPmZtdCAhPSBkc3RfY29uZmlnLT5mbXQpIHsKLQkJ RFJNX0RFQlVHX0tNUygibm90IHN1cHBvcnQgY3NjIGZlYXR1cmVcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQlpZiAoIXJvdGF0b3JfY2hlY2tfZHJtX2ZtdChkc3RfY29uZmlnLT5mbXQp KSB7Ci0JCURSTV9ERUJVR19LTVMoImludmFsaWQgZm9ybWF0XG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JLyogQ2hlY2sgdHJhbnNmb3JtIGNvbmZpZ3VyYXRpb24gKi8KLQlpZiAoc3Jj X2NvbmZpZy0+ZGVncmVlICE9IEVYWU5PU19EUk1fREVHUkVFXzApIHsKLQkJRFJNX0RFQlVHX0tN Uygibm90IHN1cHBvcnQgc291cmNlLXNpZGUgcm90YXRpb25cbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQlzd2l0Y2ggKGRzdF9jb25maWctPmRlZ3JlZSkgewotCWNhc2UgRVhZTk9TX0RS TV9ERUdSRUVfOTA6Ci0JY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8yNzA6Ci0JCXN3YXAgPSB0cnVl OwotCWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfMDoKLQljYXNlIEVYWU5PU19EUk1fREVHUkVFXzE4 MDoKLQkJLyogTm8gcHJvYmxlbSAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fREVCVUdf S01TKCJpbnZhbGlkIGRlZ3JlZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChz cmNfY29uZmlnLT5mbGlwICE9IEVYWU5PU19EUk1fRkxJUF9OT05FKSB7Ci0JCURSTV9ERUJVR19L TVMoIm5vdCBzdXBwb3J0IHNvdXJjZS1zaWRlIGZsaXBcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlpZiAoIXJvdGF0b3JfY2hlY2tfZHJtX2ZsaXAoZHN0X2NvbmZpZy0+ZmxpcCkpIHsK LQkJRFJNX0RFQlVHX0tNUygiaW52YWxpZCBmbGlwXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JLyogQ2hlY2sgc2l6ZSBjb25maWd1cmF0aW9uICovCi0JaWYgKChzcmNfcG9zLT54ICsg c3JjX3Bvcy0+dyA+IHNyY19zei0+aHNpemUpIHx8Ci0JCShzcmNfcG9zLT55ICsgc3JjX3Bvcy0+ aCA+IHNyY19zei0+dnNpemUpKSB7Ci0JCURSTV9ERUJVR19LTVMoIm91dCBvZiBzb3VyY2UgYnVm ZmVyIGJvdW5kXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHN3YXApIHsKLQkJ aWYgKChkc3RfcG9zLT54ICsgZHN0X3Bvcy0+aCA+IGRzdF9zei0+dnNpemUpIHx8Ci0JCQkoZHN0 X3Bvcy0+eSArIGRzdF9wb3MtPncgPiBkc3Rfc3otPmhzaXplKSkgewotCQkJRFJNX0RFQlVHX0tN Uygib3V0IG9mIGRlc3RpbmF0aW9uIGJ1ZmZlciBib3VuZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZB TDsKLQkJfQotCi0JCWlmICgoc3JjX3Bvcy0+dyAhPSBkc3RfcG9zLT5oKSB8fCAoc3JjX3Bvcy0+ aCAhPSBkc3RfcG9zLT53KSkgewotCQkJRFJNX0RFQlVHX0tNUygibm90IHN1cHBvcnQgc2NhbGUg ZmVhdHVyZVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICgo ZHN0X3Bvcy0+eCArIGRzdF9wb3MtPncgPiBkc3Rfc3otPmhzaXplKSB8fAotCQkJKGRzdF9wb3Mt PnkgKyBkc3RfcG9zLT5oID4gZHN0X3N6LT52c2l6ZSkpIHsKLQkJCURSTV9ERUJVR19LTVMoIm91 dCBvZiBkZXN0aW5hdGlvbiBidWZmZXIgYm91bmRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0J CX0KLQotCQlpZiAoKHNyY19wb3MtPncgIT0gZHN0X3Bvcy0+dykgfHwgKHNyY19wb3MtPmggIT0g ZHN0X3Bvcy0+aCkpIHsKLQkJCURSTV9ERUJVR19LTVMoIm5vdCBzdXBwb3J0IHNjYWxlIGZlYXR1 cmVcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQog c3RhdGljIGludCByb3RhdG9yX2lwcGRydl9zdGFydChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0g ZHJtX2V4eW5vc19pcHBfY21kIGNtZCkKIHsKIAlzdHJ1Y3Qgcm90X2NvbnRleHQgKnJvdCA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtNjkyLDI0ICs1ODMsMTg0IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIGV4eW5vc19yb3RhdG9yX21hdGNoW10gPSB7CiB9OwogTU9EVUxF X0RFVklDRV9UQUJMRShvZiwgZXh5bm9zX3JvdGF0b3JfbWF0Y2gpOwogCitzdGF0aWMgaW50IHJv dGF0b3JfZ2V0X2V4Y2x1c2l2ZV9hY2Nlc3Moc3RydWN0IHJvdF9jb250ZXh0ICpyb3QsCisJCQkJ CXN0cnVjdCBkcm1fZmJwcm9jX3Rhc2sgKnRhc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK KwlpbnQgZ290X2FjY2VzcyA9IGZhbHNlOworCWludCByZXQgPSAwOworCit0cnlfYWdhaW46CisJ c3Bpbl9sb2NrX2lycXNhdmUoJnJvdC0+bG9jaywgZmxhZ3MpOworCWlmIChyb3QtPnRhc2sgPT0g TlVMTCkgeworCQlyb3QtPnRhc2sgPSB0YXNrOworCQlnb3RfYWNjZXNzID0gdHJ1ZTsKKwl9CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm90LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWdvdF9h Y2Nlc3MpIHsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJvdC0+ZG9uZV93cSwg cm90LT5kb25lKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWdvdG8gdHJ5X2FnYWlu OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJvdGF0b3JfY29tbWl0KHN0cnVj dCBkcm1fZmJwcm9jICpmYnByb2MsCisJCQkgIHN0cnVjdCBkcm1fZmJwcm9jX3Rhc2sgKnRhc2sp Cit7CisJc3RydWN0IHJvdF9jb250ZXh0ICpyb3QgPQorCQkJY29udGFpbmVyX29mKGZicHJvYywg c3RydWN0IHJvdF9jb250ZXh0LCBmYnByb2MpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJvdC0+ ZGV2OworCWRtYV9hZGRyX3Qgc3JjX2RtYSA9IGV4eW5vc19kcm1fZmJfZG1hX2FkZHIodGFzay0+ c3JjX2ZiLCAwKTsKKwlkbWFfYWRkcl90IGRzdF9kbWEgPSBleHlub3NfZHJtX2ZiX2RtYV9hZGRy KHRhc2stPmRzdF9mYiwgMCk7CisJaW50IHIgPSB0YXNrLT5yb3RhdGlvbjsKKwlpbnQgdyA9IHRh c2stPnNyY193ID4+IDE2OworCWludCBoID0gdGFzay0+c3JjX2ggPj4gMTY7CisJaW50IHN4ID0g dGFzay0+c3JjX3ggPj4gMTY7CisJaW50IGR4ID0gdGFzay0+ZHN0X3ggPj4gMTY7CisJaW50IHN5 ID0gdGFzay0+c3JjX3kgPj4gMTY7CisJaW50IGR5ID0gdGFzay0+ZHN0X3kgPj4gMTY7CisJaW50 IHNwID0gdGFzay0+c3JjX2ZiLT5waXRjaGVzWzBdOworCWludCBkcCA9IHRhc2stPmRzdF9mYi0+ cGl0Y2hlc1swXTsKKworCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9idWZfaW5mbyBzcmNfYnVmX2lu Zm8gPSB7IC5iYXNlWzBdID0gc3JjX2RtYSwgfTsKKwlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfYnVm X2luZm8gZHN0X2J1Zl9pbmZvID0geyAuYmFzZVswXSA9IGRzdF9kbWEsIH07CisJc3RydWN0IGRy bV9leHlub3NfcG9zIHNyY19wb3MgPSB7IHN4LCBzeSwgdywgaCwgfTsKKwlzdHJ1Y3QgZHJtX2V4 eW5vc19wb3MgZHN0X3BvcyA9IHsgZHgsIGR5LCB3LCBoLCB9OworCXN0cnVjdCBkcm1fZXh5bm9z X3N6IHNyY19zeiA9IHsgc3AvNCwgaCtzeSwgfTsKKwlzdHJ1Y3QgZHJtX2V4eW5vc19zeiBkc3Rf c3ogPSB7IGRwLzQsIGgrZHksIH07CisJaW50IHJldDsKKwlpbnQgcm90YXRpb24gPSAwLCBmbGlw ID0gMDsKKwlib29sIHN3YXA7CisKKwlpZiAociAmIERSTV9ST1RBVEVfMTgwKQorCQlyb3RhdGlv biA9IEVYWU5PU19EUk1fREVHUkVFXzE4MDsKKwllbHNlIGlmIChyICYgRFJNX1JPVEFURV85MCkK KwkJcm90YXRpb24gPSBFWFlOT1NfRFJNX0RFR1JFRV85MDsKKwllbHNlIGlmIChyICYgRFJNX1JP VEFURV8yNzApCisJCXJvdGF0aW9uID0gRVhZTk9TX0RSTV9ERUdSRUVfMjcwOworCisJaWYgKHIg JiBEUk1fUkVGTEVDVF9YKQorCQlmbGlwIHw9IEVYWU5PU19EUk1fRkxJUF9IT1JJWk9OVEFMOwor CWlmIChyICYgRFJNX1JFRkxFQ1RfWSkKKwkJZmxpcCB8PSBFWFlOT1NfRFJNX0ZMSVBfVkVSVElD QUw7CisKKwlyZXQgPSByb3RhdG9yX2dldF9leGNsdXNpdmVfYWNjZXNzKHJvdCwgdGFzayk7CisJ aWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7 CisKKwlkZXZfZGJnKGRldiwgInIgJWQgdyAlZCBoICVkIHN4ICVkIHN5ICVkIHNwICVkIGR4ICVk IGR5ICVkIHBkICVkXG4iLAorCQlyLCB3LCBoLCBzeCwgc3ksIHNwLCBkeCwgZHksIGRwKTsKKwly b3QtPmRvbmUgPSAwOworCisJcmV0ID0gcm90YXRvcl9zcmNfc2V0X2ZtdChkZXYsIERSTV9GT1JN QVRfWFJHQjg4ODgpOworCWlmIChyZXQpCisJCXByaW50aygiZXJyb3Igc2V0dGluZyByb3RhdG9y ICVkXG4iLCBfX0xJTkVfXyk7CisJcmV0ID0gcm90YXRvcl9zcmNfc2V0X3NpemUoZGV2LCAwLCAm c3JjX3BvcywgJnNyY19zeik7CisJaWYgKHJldCkKKwkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHJv dGF0b3IgJWRcbiIsIF9fTElORV9fKTsKKwlyZXQgPSByb3RhdG9yX3NyY19zZXRfYWRkcihkZXYs ICZzcmNfYnVmX2luZm8sIDAsIElQUF9CVUZfRU5RVUVVRSk7CisJaWYgKHJldCkKKwkJcHJpbnRr KCJlcnJvciBzZXR0aW5nIHJvdGF0b3IgJWRcbiIsIF9fTElORV9fKTsKKworCXJldCA9IHJvdGF0 b3JfZHN0X3NldF90cmFuc2YoZGV2LCByb3RhdGlvbiwgZmxpcCwgJnN3YXApOworCWlmIChyZXQp CisJCXByaW50aygiZXJyb3Igc2V0dGluZyByb3RhdG9yICVkXG4iLCBfX0xJTkVfXyk7CisKKwlp ZiAoc3dhcCkgeworCQlzd2FwKGRzdF9wb3MudywgZHN0X3Bvcy5oKTsKKwkJZHN0X3N6LnZzaXpl ID0gdytkeTsKKwl9CisJcmV0ID0gcm90YXRvcl9kc3Rfc2V0X3NpemUoZGV2LCAwLCAmZHN0X3Bv cywgJmRzdF9zeik7CisJaWYgKHJldCkKKwkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHJvdGF0b3Ig JWRcbiIsIF9fTElORV9fKTsKKwlyZXQgPSByb3RhdG9yX2RzdF9zZXRfYWRkcihkZXYsICZkc3Rf YnVmX2luZm8sIDAsIElQUF9CVUZfRU5RVUVVRSk7CisJaWYgKHJldCkKKwkJcHJpbnRrKCJlcnJv ciBzZXR0aW5nIHJvdGF0b3IgJWRcbiIsIF9fTElORV9fKTsKKworCXJvdGF0b3JfaXBwZHJ2X3N0 YXJ0KGRldiwgSVBQX0NNRF9NMk0pOworCisJd2FpdF9ldmVudChyb3QtPmRvbmVfd3EsIHJvdC0+ ZG9uZSk7CisKKwlwbV9ydW50aW1lX3B1dChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVj dCBkcm1fZmJwcm9jX2Z1bmNzIGZicHJvY19mdW5jcyA9IHsKKwkuY29tbWl0ID0gcm90YXRvcl9j b21taXQsCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3Qgcm90YXRvcl9mb3JtYXRzW10gPSB7 CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKK307CisKK3N0YXRpYyBpbnQgcm90YXRvcl9iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQorewor CXN0cnVjdCByb3RfY29udGV4dCAqcm90ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCXN0cnVjdCBkcm1fZmJwcm9jICpmYnByb2Mg PSAmcm90LT5mYnByb2M7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKKworCXJvdC0+ZHJt X2RldiA9IGRybV9kZXY7CisJZHJtX2lvbW11X2F0dGFjaF9kZXZpY2UoZHJtX2RldiwgZGV2KTsK KworCisJZHJtX2ZicHJvY19pbml0KGRybV9kZXYsIGZicHJvYywgJmZicHJvY19mdW5jcywKKwkJ CSAgIERSTV9GQlBST0NfQ0FQX0NST1AgfCBEUk1fRkJQUk9DX0NBUF9ST1RBVEUsCisJCQkgICBy b3RhdG9yX2Zvcm1hdHMsIEFSUkFZX1NJWkUocm90YXRvcl9mb3JtYXRzKSwKKwkJCSAgIHJvdGF0 b3JfZm9ybWF0cywgQVJSQVlfU0laRShyb3RhdG9yX2Zvcm1hdHMpLAorCQkJICAgInJvdGF0b3Ii KTsKKworCXByb3AgPSBkcm1fbW9kZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoZHJtX2RldiwK KwkJCURSTV9ST1RBVEVfMCB8IERSTV9ST1RBVEVfOTAgfCBEUk1fUk9UQVRFXzE4MCB8CisJCQlE Uk1fUk9UQVRFXzI3MCB8IERSTV9SRUZMRUNUX1ggfCBEUk1fUkVGTEVDVF9ZKTsKKworCWZicHJv Yy0+cm90YXRpb25fcHJvcGVydHkgPSBwcm9wOworCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5 KCZmYnByb2MtPmJhc2UsIHByb3AsIERSTV9ST1RBVEVfMCk7CisKKwlkZXZfaW5mbyhkZXYsICJU aGUgZXh5bm9zIHJvdGF0b3IgaXMgcHJvYmVkIHN1Y2Nlc3NmdWxseVxuIik7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgcm90YXRvcl91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQl2b2lkICpkYXRhKQoreworCXN0cnVjdCByb3RfY29u dGV4dCAqcm90ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkcm1faW9tbXVfZGV0YWNoX2Rl dmljZShyb3QtPmRybV9kZXYsIHJvdC0+ZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBj b21wb25lbnRfb3BzIHJvdGF0b3JfY29tcG9uZW50X29wcyA9IHsKKwkuYmluZAk9IHJvdGF0b3Jf YmluZCwKKwkudW5iaW5kID0gcm90YXRvcl91bmJpbmQsCit9OworCiBzdGF0aWMgaW50IHJvdGF0 b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCByb3RfY29udGV4dCAqcm90OwotCXN0cnVjdCBl eHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2OworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1h dGNoOwogCWludCByZXQ7CiAKLQlpZiAoIWRldi0+b2Zfbm9kZSkgewotCQlkZXZfZXJyKGRldiwg ImNhbm5vdCBmaW5kIG9mX25vZGUuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJcm90 ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpyb3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJv dCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyb3QtPmxpbWl0X3RibCA9IChzdHJ1Y3Qgcm90X2xp bWl0X3RhYmxlICopCi0JCQkJb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7CisJbWF0Y2gg PSBvZl9tYXRjaF9ub2RlKGV4eW5vc19yb3RhdG9yX21hdGNoLCBkZXYtPm9mX25vZGUpOworCWlm ICghbWF0Y2gpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gbWF0Y2ggbm9kZVxuIik7CisJ CXJldHVybiAtRU5PREVWOworCX0KKworCXNwaW5fbG9ja19pbml0KCZyb3QtPmxvY2spOworCXJv dC0+bGltaXRfdGJsID0gKHN0cnVjdCByb3RfbGltaXRfdGFibGUgKiltYXRjaC0+ZGF0YTsKKwly b3QtPmRldiA9IGRldjsKIAlyb3QtPnJlZ3NfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBk ZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlyb3QtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3Vy Y2UoZGV2LCByb3QtPnJlZ3NfcmVzKTsKIAlpZiAoSVNfRVJSKHJvdC0+cmVncykpCkBAIC03MjEs NiArNzcyLDggQEAgc3RhdGljIGludCByb3RhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCiAJCXJldHVybiByb3QtPmlycTsKIAl9CiAKKwlpbml0X3dhaXRxdWV1ZV9oZWFk KCZyb3QtPmRvbmVfd3EpOworCiAJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYs IHJvdC0+aXJxLCBOVUxMLAogCQkJcm90YXRvcl9pcnFfaGFuZGxlciwgSVJRRl9PTkVTSE9ULCAi ZHJtX3JvdGF0b3IiLCByb3QpOwogCWlmIChyZXQgPCAwKSB7CkBAIC03MzQsMzEgKzc4NywxMiBA QCBzdGF0aWMgaW50IHJvdGF0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK IAkJcmV0dXJuIFBUUl9FUlIocm90LT5jbG9jayk7CiAJfQogCi0JcG1fcnVudGltZV9lbmFibGUo ZGV2KTsKLQotCWlwcGRydiA9ICZyb3QtPmlwcGRydjsKLQlpcHBkcnYtPmRldiA9IGRldjsKLQlp cHBkcnYtPm9wc1tFWFlOT1NfRFJNX09QU19TUkNdID0gJnJvdF9zcmNfb3BzOwotCWlwcGRydi0+ b3BzW0VYWU5PU19EUk1fT1BTX0RTVF0gPSAmcm90X2RzdF9vcHM7Ci0JaXBwZHJ2LT5jaGVja19w cm9wZXJ0eSA9IHJvdGF0b3JfaXBwZHJ2X2NoZWNrX3Byb3BlcnR5OwotCWlwcGRydi0+c3RhcnQg PSByb3RhdG9yX2lwcGRydl9zdGFydDsKLQlyZXQgPSByb3RhdG9yX2luaXRfcHJvcF9saXN0KGlw cGRydik7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCBw cm9wZXJ0eSBsaXN0LlxuIik7Ci0JCWdvdG8gZXJyX2lwcGRydl9yZWdpc3RlcjsKLQl9Ci0KLQlE Uk1fREVCVUdfS01TKCJpcHBkcnZbJXBdXG4iLCBpcHBkcnYpOwotCiAJcGxhdGZvcm1fc2V0X2Ry dmRhdGEocGRldiwgcm90KTsKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwogCi0JcmV0ID0gZXh5 bm9zX2RybV9pcHBkcnZfcmVnaXN0ZXIoaXBwZHJ2KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZf ZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBkcm0gcm90YXRvciBkZXZpY2VcbiIpOworCXJl dCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmcm90YXRvcl9jb21wb25lbnRfb3BzKTsKKwlpZiAocmV0 KQogCQlnb3RvIGVycl9pcHBkcnZfcmVnaXN0ZXI7Ci0JfQotCi0JZGV2X2luZm8oZGV2LCAiVGhl IGV4eW5vcyByb3RhdG9yIGlzIHByb2JlZCBzdWNjZXNzZnVsbHlcbiIpOwogCiAJcmV0dXJuIDA7 CiAKQEAgLTc3MCwxMSArODA0LDggQEAgZXJyX2lwcGRydl9yZWdpc3RlcjoKIHN0YXRpYyBpbnQg cm90YXRvcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwotCXN0cnVjdCByb3RfY29udGV4dCAqcm90ID0gZGV2 X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAm cm90LT5pcHBkcnY7Ci0KLQlleHlub3NfZHJtX2lwcGRydl91bnJlZ2lzdGVyKGlwcGRydik7CiAK Kwljb21wb25lbnRfZGVsKGRldiwgJnJvdGF0b3JfY29tcG9uZW50X29wcyk7CiAJcG1fcnVudGlt ZV9kaXNhYmxlKGRldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9leHlub3MvZXh5bm9zX2RybV9yb3RhdG9yLmggYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4 eW5vc19kcm1fcm90YXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWEwYjRj MGMxZTguLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19k cm1fcm90YXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoKLSAqIENvcHly aWdodCAoYykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICoKLSAqIEF1dGhv cnM6Ci0gKglZb3VuZ0p1biBDaG8gPHlqNDQuY2hvQHNhbXN1bmcuY29tPgotICoJRXVuY2h1bCBL aW0gPGNodWxzcHJvLmtpbUBzYW1zdW5nLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAq IHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYJX0VYWU5PU19EUk1fUk9UQVRPUl9IXwotI2RlZmlu ZQlfRVhZTk9TX0RSTV9ST1RBVE9SX0hfCi0KLS8qIFRPRE8gKi8KLQotI2VuZGlmCi0tIAoxLjku MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==