From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH 9/9] drm/i915: Pass atomic states to fbc update functions. Date: Thu, 26 May 2016 12:38:05 +0200 Message-ID: <1464259085-13604-10-git-send-email-maarten.lankhorst@linux.intel.com> References: <1464259085-13604-1-git-send-email-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [IPv6:2a02:2308::216:3eff:fe92:dfa3]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9981C6EA94 for ; Thu, 26 May 2016 10:38:11 +0000 (UTC) In-Reply-To: <1464259085-13604-1-git-send-email-maarten.lankhorst@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhpcyBpcyByZXF1aXJlZCB0byBsZXQgZmJjIHVwZGF0ZXMgcnVuIGFzeW5jLiBJdCBoYXMgYSBs b3Qgb2YKY2hlY2tzIHdoZXRoZXIgY2VydGFpbiBsb2NrcyBhcmUgdGFrZW4sIHdoaWNoIGNhbiBi ZSByZW1vdmVkIHdoZW4KdGhlIHJlbGV2YW50IHN0YXRlcyBhcmUgcGFzc2VkIGluIGFzIHBvaW50 ZXJzLgoKU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0 QGxpbnV4LmludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IFBhdHJpayBKYWtvYnNzb24gPHBhdHJpay5q YWtvYnNzb25AbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYyB8ICA4ICsrKysrLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aCAgICAgfCAgOCArKysrKystLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJjLmMgICAg IHwgMzkgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiAzIGZpbGVzIGNoYW5n ZWQsIDI5IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYwppbmRleCBlNmQzNzIxZWVkYTMuLmY3ZjJjYTI0ZDA2MiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtNDU5MCw3ICs0NTkwLDcgQEAgc3RhdGljIHZv aWQgaW50ZWxfcHJlX3BsYW5lX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2Ny dGNfc3RhdGUpCiAJCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3ByaW1hcnlfc3RhdGUg PQogCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUob2xkX3ByaV9zdGF0ZSk7CiAKLQkJaW50ZWxfZmJj X3ByZV91cGRhdGUoY3J0Yyk7CisJCWludGVsX2ZiY19wcmVfdXBkYXRlKGNydGMsIHBpcGVfY29u ZmlnLCBwcmltYXJ5X3N0YXRlKTsKIAogCQlpZiAob2xkX3ByaW1hcnlfc3RhdGUtPnZpc2libGUg JiYKIAkJICAgIChtb2Rlc2V0IHx8ICFwcmltYXJ5X3N0YXRlLT52aXNpYmxlKSkKQEAgLTExMjc4 LDcgKzExMjc4LDkgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCiAJaWYgKG9iai0+YmFzZS5kbWFfYnVmKQogCQl3b3JrLT5vbGRfcGxhbmVf c3RhdGVbMF0tPmJhc2UuZmVuY2UgPSBpbnRlbF9nZXRfZXhjbF9mZW5jZShvYmopOwogCi0JaW50 ZWxfZmJjX3ByZV91cGRhdGUoaW50ZWxfY3J0Yyk7CisJaW50ZWxfZmJjX3ByZV91cGRhdGUoaW50 ZWxfY3J0YywKKwkJCSAgICAgdG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfY3J0Y19zdGF0ZSksCisJ CQkgICAgIHRvX2ludGVsX3BsYW5lX3N0YXRlKG5ld19zdGF0ZSkpOwogCiAJc2NoZWR1bGVfd29y aygmd29yay0+bW1pb193b3JrKTsKIApAQCAtMTMyNDcsNyArMTMyNDksNyBAQCBzdGF0aWMgaW50 IGludGVsX2F0b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAogCQlpZiAoY3J0 Yy0+c3RhdGUtPmFjdGl2ZSAmJgogCQkgICAgZHJtX2F0b21pY19nZXRfZXhpc3RpbmdfcGxhbmVf c3RhdGUoc3RhdGUsIGNydGMtPnByaW1hcnkpKQotCQkJaW50ZWxfZmJjX2VuYWJsZShpbnRlbF9j cnRjKTsKKwkJCWludGVsX2ZiY19lbmFibGUoaW50ZWxfY3J0YywgcGlwZV9jb25maWcsIHRvX2lu dGVsX3BsYW5lX3N0YXRlKGNydGMtPnByaW1hcnktPnN0YXRlKSk7CiAKIAkJaWYgKGNydGMtPnN0 YXRlLT5hY3RpdmUgJiYKIAkJICAgIChjcnRjLT5zdGF0ZS0+cGxhbmVzX2NoYW5nZWQgfHwgdXBk YXRlX3BpcGUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCA0MGY3OTI1NjIzZmQuLjA3 MGI2MDJhYzU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTE0MjQsMTEgKzE0MjQs MTUgQEAgc3RhdGljIGlubGluZSB2b2lkIGludGVsX2ZiZGV2X3Jlc3RvcmVfbW9kZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQogdm9pZCBpbnRlbF9mYmNfY2hvb3NlX2NydGMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlKTsKIGJvb2wgaW50ZWxfZmJjX2lzX2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwotdm9pZCBpbnRlbF9mYmNfcHJlX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0Yyk7Cit2b2lkIGludGVsX2ZiY19wcmVfdXBkYXRlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj LAorCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7CiB2b2lkIGludGVsX2ZiY19wb3N0X3Vw ZGF0ZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7CiB2b2lkIGludGVsX2ZiY19pbml0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGludGVsX2ZiY19pbml0X3BpcGVf c3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaW50ZWxfZmJj X2VuYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7Cit2b2lkIGludGVsX2ZiY19lbmFibGUo c3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAorCQkgICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKTsKIHZvaWQgaW50ZWxfZmJjX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpOwog dm9pZCBpbnRlbF9mYmNfZ2xvYmFsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKIHZvaWQgaW50ZWxfZmJjX2ludmFsaWRhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJj LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmMuYwppbmRleCAwZGVhNWZiY2Q4YWEu LmQyYjAyNjliMmZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJj LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJjLmMKQEAgLTQ4MCwxMCArNDgw LDEwIEBAIHN0YXRpYyB2b2lkIGludGVsX2ZiY19kZWFjdGl2YXRlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKIAkJaW50ZWxfZmJjX2h3X2RlYWN0aXZhdGUoZGV2X3ByaXYpOwog fQogCi1zdGF0aWMgYm9vbCBtdWx0aXBsZV9waXBlc19vayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YykKK3N0YXRpYyBib29sIG11bHRpcGxlX3BpcGVzX29rKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj LAorCQkJICAgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIHsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjcnRjLT5iYXNlLmRldi0+ZGV2X3By aXZhdGU7Ci0Jc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSA9IGNydGMtPmJhc2UucHJpbWFyeTsK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2Uu ZGV2KTsKIAlzdHJ1Y3QgaW50ZWxfZmJjICpmYmMgPSAmZGV2X3ByaXYtPmZiYzsKIAllbnVtIHBp cGUgcGlwZSA9IGNydGMtPnBpcGU7CiAKQEAgLTQ5MSw5ICs0OTEsNyBAQCBzdGF0aWMgYm9vbCBt dWx0aXBsZV9waXBlc19vayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAlpZiAoIW5vX2ZiY19v bl9tdWx0aXBsZV9waXBlcyhkZXZfcHJpdikpCiAJCXJldHVybiB0cnVlOwogCi0JV0FSTl9PTigh ZHJtX21vZGVzZXRfaXNfbG9ja2VkKCZwcmltYXJ5LT5tdXRleCkpOwotCi0JaWYgKHRvX2ludGVs X3BsYW5lX3N0YXRlKHByaW1hcnktPnN0YXRlKS0+dmlzaWJsZSkKKwlpZiAocGxhbmVfc3RhdGUt PnZpc2libGUpCiAJCWZiYy0+dmlzaWJsZV9waXBlc19tYXNrIHw9ICgxIDw8IHBpcGUpOwogCWVs c2UKIAkJZmJjLT52aXNpYmxlX3BpcGVzX21hc2sgJj0gfigxIDw8IHBpcGUpOwpAQCAtNzA4LDIx ICs3MDYsMTYgQEAgc3RhdGljIGJvb2wgaW50ZWxfZmJjX2h3X3RyYWNraW5nX2NvdmVyc19zY3Jl ZW4oc3RydWN0IGludGVsX2NydGMgKmNydGMpCiAJcmV0dXJuIGVmZmVjdGl2ZV93IDw9IG1heF93 ICYmIGVmZmVjdGl2ZV9oIDw9IG1heF9oOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9mYmNfdXBk YXRlX3N0YXRlX2NhY2hlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQorc3RhdGljIHZvaWQgaW50 ZWxfZmJjX3VwZGF0ZV9zdGF0ZV9jYWNoZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCQkJ IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCQkgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBjcnRjLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVsX2Zi YyAqZmJjID0gJmRldl9wcml2LT5mYmM7CiAJc3RydWN0IGludGVsX2ZiY19zdGF0ZV9jYWNoZSAq Y2FjaGUgPSAmZmJjLT5zdGF0ZV9jYWNoZTsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSA9Ci0JCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSk7Ci0Jc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Ci0JCXRvX2ludGVsX3BsYW5lX3N0 YXRlKGNydGMtPmJhc2UucHJpbWFyeS0+c3RhdGUpOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKIAotCVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgmY3J0Yy0+YmFzZS5tdXRl eCkpOwotCVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgmY3J0Yy0+YmFzZS5wcmltYXJ5 LT5tdXRleCkpOwotCiAJY2FjaGUtPmNydGMubW9kZV9mbGFncyA9IGNydGNfc3RhdGUtPmJhc2Uu YWRqdXN0ZWRfbW9kZS5mbGFnczsKIAlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJP QURXRUxMKGRldl9wcml2KSkKIAkJY2FjaGUtPmNydGMuaHN3X2Jkd19waXhlbF9yYXRlID0KQEAg LTg4Nyw3ICs4ODAsOSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9mYmNfcmVnX3BhcmFtc19lcXVhbChz dHJ1Y3QgaW50ZWxfZmJjX3JlZ19wYXJhbXMgKnBhcmFtczEsCiAJcmV0dXJuIG1lbWNtcChwYXJh bXMxLCBwYXJhbXMyLCBzaXplb2YoKnBhcmFtczEpKSA9PSAwOwogfQogCi12b2lkIGludGVsX2Zi Y19wcmVfdXBkYXRlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQordm9pZCBpbnRlbF9mYmNfcHJl X3VwZGF0ZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCSAgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCisJCQkgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gY3J0Yy0+YmFz ZS5kZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9mYmMgKmZiYyA9ICZkZXZfcHJpdi0+ ZmJjOwpAQCAtODk3LDcgKzg5Miw3IEBAIHZvaWQgaW50ZWxfZmJjX3ByZV91cGRhdGUoc3RydWN0 IGludGVsX2NydGMgKmNydGMpCiAKIAltdXRleF9sb2NrKCZmYmMtPmxvY2spOwogCi0JaWYgKCFt dWx0aXBsZV9waXBlc19vayhjcnRjKSkgeworCWlmICghbXVsdGlwbGVfcGlwZXNfb2soY3J0Yywg cGxhbmVfc3RhdGUpKSB7CiAJCWZiYy0+bm9fZmJjX3JlYXNvbiA9ICJtb3JlIHRoYW4gb25lIHBp cGUgYWN0aXZlIjsKIAkJZ290byBkZWFjdGl2YXRlOwogCX0KQEAgLTkwNSw3ICs5MDAsNyBAQCB2 b2lkIGludGVsX2ZiY19wcmVfdXBkYXRlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogCWlmICgh ZmJjLT5lbmFibGVkIHx8IGZiYy0+Y3J0YyAhPSBjcnRjKQogCQlnb3RvIHVubG9jazsKIAotCWlu dGVsX2ZiY191cGRhdGVfc3RhdGVfY2FjaGUoY3J0Yyk7CisJaW50ZWxfZmJjX3VwZGF0ZV9zdGF0 ZV9jYWNoZShjcnRjLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7CiAKIGRlYWN0aXZhdGU6CiAJ aW50ZWxfZmJjX2RlYWN0aXZhdGUoZGV2X3ByaXYpOwpAQCAtMTA4OSw3ICsxMDg0LDkgQEAgb3V0 OgogICogaW50ZWxfZmJjX2VuYWJsZSBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWUgcGlwZSB3 aXRob3V0IGFuCiAgKiBpbnRlbF9mYmNfZGlzYWJsZSBpbiB0aGUgbWlkZGxlLCBhcyBsb25nIGFz IGl0IGlzIGRlYWN0aXZhdGVkLgogICovCi12b2lkIGludGVsX2ZiY19lbmFibGUoc3RydWN0IGlu dGVsX2NydGMgKmNydGMpCit2b2lkIGludGVsX2ZiY19lbmFibGUoc3RydWN0IGludGVsX2NydGMg KmNydGMsCisJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkg ICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogewogCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNydGMtPmJhc2UuZGV2LT5kZXZfcHJpdmF0ZTsK IAlzdHJ1Y3QgaW50ZWxfZmJjICpmYmMgPSAmZGV2X3ByaXYtPmZiYzsKQEAgLTExMDIsMTkgKzEw OTksMTkgQEAgdm9pZCBpbnRlbF9mYmNfZW5hYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQog CWlmIChmYmMtPmVuYWJsZWQpIHsKIAkJV0FSTl9PTihmYmMtPmNydGMgPT0gTlVMTCk7CiAJCWlm IChmYmMtPmNydGMgPT0gY3J0YykgewotCQkJV0FSTl9PTighY3J0Yy0+Y29uZmlnLT5lbmFibGVf ZmJjKTsKKwkJCVdBUk5fT04oIWNydGNfc3RhdGUtPmVuYWJsZV9mYmMpOwogCQkJV0FSTl9PTihm YmMtPmFjdGl2ZSk7CiAJCX0KIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCFjcnRjLT5jb25maWct PmVuYWJsZV9mYmMpCisJaWYgKCFjcnRjX3N0YXRlLT5lbmFibGVfZmJjKQogCQlnb3RvIG91dDsK IAogCVdBUk5fT04oZmJjLT5hY3RpdmUpOwogCVdBUk5fT04oZmJjLT5jcnRjICE9IE5VTEwpOwog Ci0JaW50ZWxfZmJjX3VwZGF0ZV9zdGF0ZV9jYWNoZShjcnRjKTsKKwlpbnRlbF9mYmNfdXBkYXRl X3N0YXRlX2NhY2hlKGNydGMsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKIAlpZiAoaW50ZWxf ZmJjX2FsbG9jX2NmYihjcnRjKSkgewogCQlmYmMtPm5vX2ZiY19yZWFzb24gPSAibm90IGVub3Vn aCBzdG9sZW4gbWVtb3J5IjsKIAkJZ290byBvdXQ7Ci0tIAoyLjUuNQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==