From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benoit Parrot Subject: [Patch 4/4] drm/omap: Add virtual plane support to omap_plane Date: Fri, 2 Mar 2018 07:48:04 -0600 Message-ID: <20180302134804.3690-5-bparrot@ti.com> References: <20180302134804.3690-1-bparrot@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180302134804.3690-1-bparrot@ti.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, Laurent Pinchart , devicetree@vger.kernel.org, Rob Herring Cc: Peter Ujfalusi , Tomi Valkeinen , Jyri Sarha List-Id: devicetree@vger.kernel.org QWRkIHZpcnR1YWwgcGxhbmUgc3VwcG9ydCBieSBhZGRpbmcgYW4gYXJyYXkgdG8gY29udGFpbgph bGwgb2YgdGhlIGFjdHVhbCBwbGFuZV9pZCBhICJvbWFwX3BsYW5lIiBjb3JyZXNwb25kIHRvLgoK V2hlbiBhdCBsZWFzdCBvbmUgJ3BsYW5lJyBjaGlsZCBub2RlIGlzIHByZXNlbnQgaW4gRFQgdGhl bgpvbWFwX3BsYW5lX2luaXQgd2lsbCBvbmx5IHVzZWQgdGhlIHBsYW5lIGRlc2NyaWJlZCBpbiBE VC4KU29tZSBvZiB0aGVzZSBub2RlcyBtYXkgYmUgYSB2aXJ0dWFsIHBsYW5lIGlmIHRoZXkgYXJl IGRlZmluZWQKYXMgdHdvIHBoeXNpY2FsIHBsYW5lcy4KUGxhbmVzIGNhbiBhbHNvIGJlIGFzc29j aWF0ZWQgd2l0aCB2YXJpb3VzIGNydGNzIGluZGVwZW5kZW50bHkuClRoZXJlZm9yZSB3ZSBjYW4g cmVzdHJpY3QgdGhlIHVzZSBvZiB2aXJ0dWFsIHBsYW5lIHRvIHNwZWNpZmljCkNSVEMvdmlkZW8g cG9ydCBpZiBuZWVkIGJlLCBpZiBjcnRjX21hc2sgaXMgbm90IHNwZWNpZmllZCB0aGVuCnRoZSBw bGFuZSB3aWxsIGJlIGF2YWlsYWJsZSB0byBhbGwgYXZhaWxhYmxlIGNydGNzLgpQaHlzaWNhbCBw bGFuZSB3aGljaCBhcmUgbm90IGRlc2NyaWJlZCB3aWxsIGVzc2VudGlhbGx5IGJlIGhpZGRlbgpm cm9tIHRoZSBkcml2ZXIuCgpJZiBubyAncGxhbmUnIGNoaWxkIG5vZGUgZXhpc3QgdGhlbiB0aGUg ZXhpc3RpbmcgcGxhbmUKYWxsb2NhdGlvbiB3aWxsIHRha2UgcGxhY2UuCgpTaWduZWQtb2ZmLWJ5 OiBCZW5vaXQgUGFycm90IDxicGFycm90QHRpLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vb21h cGRybS9vbWFwX2Rydi5jICAgfCAgMTggKysrLS0KIGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29t YXBfZmIuYyAgICB8ICA2NiArKysrKysrKysrKy0tLS0tLQogZHJpdmVycy9ncHUvZHJtL29tYXBk cm0vb21hcF9mYi5oICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX3Bs YW5lLmMgfCAxMzkgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIGRyaXZlcnMv Z3B1L2RybS9vbWFwZHJtL29tYXBfcGxhbmUuaCB8ICAgMyArLQogNSBmaWxlcyBjaGFuZ2VkLCAx NjIgaW5zZXJ0aW9ucygrKSwgNjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL29tYXBkcm0vb21hcF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBf ZHJ2LmMKaW5kZXggZGQ2OGIyNTU2ZjViLi43Mzc5NjM2NGE1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL29tYXBk cm0vb21hcF9kcnYuYwpAQCAtMTg4LDEwICsxODgsOSBAQCBzdGF0aWMgaW50IG9tYXBfY29ubmVj dF9kc3NkZXZzKHZvaWQpCiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF9tb2Rlc2V0 X2luaXRfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBvbWFw X21vZGVzZXRfaW5pdF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBudW1f cGxhbmVzKQogewogCXN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKLQl1bnNpZ25lZCBpbnQgbnVtX3BsYW5lcyA9IHByaXYtPmRpc3BjX29wcy0+Z2V0X251 bV9vdmxzKCk7CiAKIAlwcml2LT56b3JkZXJfcHJvcCA9IGRybV9wcm9wZXJ0eV9jcmVhdGVfcmFu Z2UoZGV2LCAwLCAiem9yZGVyIiwgMCwKIAkJCQkJCSAgICAgIG51bV9wbGFuZXMgLSAxKTsKQEAg LTIxMCwxMCArMjA5LDE5IEBAIHN0YXRpYyBpbnQgb21hcF9tb2Rlc2V0X2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKIAlpbnQgbnVtX2NydGNzLCBjcnRjX2lkeCwgcGxhbmVfaWR4OwogCWlu dCByZXQ7CiAJdTMyIHBsYW5lX2NydGNfbWFzazsKKwlzdHJ1Y3QgZGlzcGNfcGxhbmVfbWFwcGlu Z3MgcGxhbmVfbWFwcGluZ3MgPSB7MH07CiAKIAlkcm1fbW9kZV9jb25maWdfaW5pdChkZXYpOwog Ci0JcmV0ID0gb21hcF9tb2Rlc2V0X2luaXRfcHJvcGVydGllcyhkZXYpOworCXJldCA9IHByaXYt PmRpc3BjX29wcy0+Z2V0X3BsYW5lX21hcHBpbmcoJnBsYW5lX21hcHBpbmdzKTsKKwlpZiAocmV0 IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHVzZSBwbGFuZSBtYXBwaW5ncyBpbmZvICovCisJ aWYgKHBsYW5lX21hcHBpbmdzLm51bV9wbGFuZXMpCisJCW51bV9vdmxzID0gcGxhbmVfbWFwcGlu Z3MubnVtX3BsYW5lczsKKworCXJldCA9IG9tYXBfbW9kZXNldF9pbml0X3Byb3BlcnRpZXMoZGV2 LCBudW1fb3Zscyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTI2Niw3ICsy NzQsNyBAQCBzdGF0aWMgaW50IG9tYXBfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlwbGFuZSA9IG9tYXBfcGxhbmVfaW5pdChkZXYs IHBsYW5lX2lkeCwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSwKLQkJCQkJcGxhbmVfY3J0Y19tYXNr KTsKKwkJCQkJcGxhbmVfY3J0Y19tYXNrLCAmcGxhbmVfbWFwcGluZ3MpOwogCQlpZiAoSVNfRVJS KHBsYW5lKSkKIAkJCXJldHVybiBQVFJfRVJSKHBsYW5lKTsKIApAQCAtMjk2LDcgKzMwNCw3IEBA IHN0YXRpYyBpbnQgb21hcF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJ CXJldHVybiAtRUlOVkFMOwogCiAJCXBsYW5lID0gb21hcF9wbGFuZV9pbml0KGRldiwgcGxhbmVf aWR4LCBEUk1fUExBTkVfVFlQRV9PVkVSTEFZLAotCQkJcGxhbmVfY3J0Y19tYXNrKTsKKwkJCQkJ cGxhbmVfY3J0Y19tYXNrLCAmcGxhbmVfbWFwcGluZ3MpOwogCQlpZiAoSVNfRVJSKHBsYW5lKSkK IAkJCXJldHVybiBQVFJfRVJSKHBsYW5lKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L29tYXBkcm0vb21hcF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYi5jCmlu ZGV4IGIyNTM5YTkwZTFhNC4uODBiMjliN2Y1Njk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vb21hcGRybS9vbWFwX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9m Yi5jCkBAIC0xNTMsMjUgKzE1MywyNyBAQCBzdGF0aWMgdWludDMyX3QgZHJtX3JvdGF0aW9uX3Rv X3RpbGVyKHVuc2lnbmVkIGludCBkcm1fcm90KQogLyogdXBkYXRlIG92bCBpbmZvIGZvciBzY2Fu b3V0LCBoYW5kbGVzIGNhc2VzIG9mIG11bHRpLXBsYW5hciBmYidzLCBldGMuCiAgKi8KIHZvaWQg b21hcF9mcmFtZWJ1ZmZlcl91cGRhdGVfc2Nhbm91dChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwKLQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBvbWFwX292ZXJsYXlf aW5mbyAqaW5mbykKKwkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJCXN0cnVjdCBv bWFwX292ZXJsYXlfaW5mbyAqbWFpbl9pbmZvLAorCQlzdHJ1Y3Qgb21hcF9vdmVybGF5X2luZm8g KmF1eF9pbmZvKQogewogCXN0cnVjdCBvbWFwX2ZyYW1lYnVmZmVyICpvbWFwX2ZiID0gdG9fb21h cF9mcmFtZWJ1ZmZlcihmYik7CiAJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqZm9ybWF0 ID0gb21hcF9mYi0+Zm9ybWF0OwogCXN0cnVjdCBwbGFuZSAqcGxhbmUgPSAmb21hcF9mYi0+cGxh bmVzWzBdOwogCXVpbnQzMl90IHgsIHksIG9yaWVudCA9IDA7CiAKLQlpbmZvLT5mb3VyY2MgPSBm Yi0+Zm9ybWF0LT5mb3JtYXQ7CisJbWFpbl9pbmZvLT5mb3VyY2MgPSBmYi0+Zm9ybWF0LT5mb3Jt YXQ7CiAKLQlpbmZvLT5wb3NfeCAgICAgID0gc3RhdGUtPmNydGNfeDsKLQlpbmZvLT5wb3NfeSAg ICAgID0gc3RhdGUtPmNydGNfeTsKLQlpbmZvLT5vdXRfd2lkdGggID0gc3RhdGUtPmNydGNfdzsK LQlpbmZvLT5vdXRfaGVpZ2h0ID0gc3RhdGUtPmNydGNfaDsKLQlpbmZvLT53aWR0aCAgICAgID0g c3RhdGUtPnNyY193ID4+IDE2OwotCWluZm8tPmhlaWdodCAgICAgPSBzdGF0ZS0+c3JjX2ggPj4g MTY7CisJbWFpbl9pbmZvLT5wb3NfeCAgICAgID0gc3RhdGUtPmNydGNfeDsKKwltYWluX2luZm8t PnBvc195ICAgICAgPSBzdGF0ZS0+Y3J0Y195OworCW1haW5faW5mby0+b3V0X3dpZHRoICA9IHN0 YXRlLT5jcnRjX3c7CisJbWFpbl9pbmZvLT5vdXRfaGVpZ2h0ID0gc3RhdGUtPmNydGNfaDsKKwlt YWluX2luZm8tPndpZHRoICAgICAgPSBzdGF0ZS0+c3JjX3cgPj4gMTY7CisJbWFpbl9pbmZvLT5o ZWlnaHQgICAgID0gc3RhdGUtPnNyY19oID4+IDE2OwogCiAJLyogRFNTIGRyaXZlciB3YW50cyB0 aGUgdyAmIGggaW4gcm90YXRlZCBvcmllbnRhdGlvbiAqLwogCWlmIChkcm1fcm90YXRpb25fOTBf b3JfMjcwKHN0YXRlLT5yb3RhdGlvbikpCi0JCXN3YXAoaW5mby0+d2lkdGgsIGluZm8tPmhlaWdo dCk7CisJCXN3YXAobWFpbl9pbmZvLT53aWR0aCwgbWFpbl9pbmZvLT5oZWlnaHQpOwogCiAJeCA9 IHN0YXRlLT5zcmNfeCA+PiAxNjsKIAl5ID0gc3RhdGUtPnNyY195ID4+IDE2OwpAQCAtMjAyLDEx ICsyMDQsMTIgQEAgdm9pZCBvbWFwX2ZyYW1lYnVmZmVyX3VwZGF0ZV9zY2Fub3V0KHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiLAogCiAJCS8qIE5vdGU6IHggYW5kIHkgYXJlIGluIFRJTEVSIHVu aXRzLCBub3QgcGl4ZWxzICovCiAJCW9tYXBfZ2VtX3JvdGF0ZWRfZG1hX2FkZHIocGxhbmUtPmJv LCBvcmllbnQsIHgsIHksCi0JCQkJCSAgJmluZm8tPnBhZGRyKTsKLQkJaW5mby0+cm90YXRpb25f dHlwZSA9IE9NQVBfRFNTX1JPVF9USUxFUjsKLQkJaW5mby0+cm90YXRpb24gPSBzdGF0ZS0+cm90 YXRpb24gPzogRFJNX01PREVfUk9UQVRFXzA7CisJCQkJCSAgJm1haW5faW5mby0+cGFkZHIpOwor CQltYWluX2luZm8tPnJvdGF0aW9uX3R5cGUgPSBPTUFQX0RTU19ST1RfVElMRVI7CisJCW1haW5f aW5mby0+cm90YXRpb24gPSBzdGF0ZS0+cm90YXRpb24gPzogRFJNX01PREVfUk9UQVRFXzA7CiAJ CS8qIE5vdGU6IHN0cmlkZSBpbiBUSUxFUiB1bml0cywgbm90IHBpeGVscyAqLwotCQlpbmZvLT5z Y3JlZW5fd2lkdGggID0gb21hcF9nZW1fdGlsZWRfc3RyaWRlKHBsYW5lLT5ibywgb3JpZW50KTsK KwkJbWFpbl9pbmZvLT5zY3JlZW5fd2lkdGggID0KKwkJCQlvbWFwX2dlbV90aWxlZF9zdHJpZGUo cGxhbmUtPmJvLCBvcmllbnQpOwogCX0gZWxzZSB7CiAJCXN3aXRjaCAoc3RhdGUtPnJvdGF0aW9u ICYgRFJNX01PREVfUk9UQVRFX01BU0spIHsKIAkJY2FzZSAwOgpAQCAtMjIxLDI3ICsyMjQsNDYg QEAgdm9pZCBvbWFwX2ZyYW1lYnVmZmVyX3VwZGF0ZV9zY2Fub3V0KHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLAogCQkJYnJlYWs7CiAJCX0KIAotCQlpbmZvLT5wYWRkciAgICAgICAgID0gZ2V0 X2xpbmVhcl9hZGRyKHBsYW5lLCBmb3JtYXQsIDAsIHgsIHkpOwotCQlpbmZvLT5yb3RhdGlvbl90 eXBlID0gT01BUF9EU1NfUk9UX05PTkU7Ci0JCWluZm8tPnJvdGF0aW9uICAgICAgPSBEUk1fTU9E RV9ST1RBVEVfMDsKLQkJaW5mby0+c2NyZWVuX3dpZHRoICA9IHBsYW5lLT5waXRjaDsKKwkJbWFp bl9pbmZvLT5wYWRkciA9IGdldF9saW5lYXJfYWRkcihwbGFuZSwgZm9ybWF0LCAwLCB4LCB5KTsK KwkJbWFpbl9pbmZvLT5yb3RhdGlvbl90eXBlID0gT01BUF9EU1NfUk9UX05PTkU7CisJCW1haW5f aW5mby0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKKwkJbWFpbl9pbmZvLT5zY3JlZW5f d2lkdGggPSBwbGFuZS0+cGl0Y2g7CiAJfQogCiAJLyogY29udmVydCB0byBwaXhlbHM6ICovCi0J aW5mby0+c2NyZWVuX3dpZHRoIC89IGZvcm1hdC0+Y3BwWzBdOworCW1haW5faW5mby0+c2NyZWVu X3dpZHRoIC89IGZvcm1hdC0+Y3BwWzBdOwogCiAJaWYgKGZiLT5mb3JtYXQtPmZvcm1hdCA9PSBE Uk1fRk9STUFUX05WMTIpIHsKIAkJcGxhbmUgPSAmb21hcF9mYi0+cGxhbmVzWzFdOwogCi0JCWlm IChpbmZvLT5yb3RhdGlvbl90eXBlID09IE9NQVBfRFNTX1JPVF9USUxFUikgeworCQlpZiAobWFp bl9pbmZvLT5yb3RhdGlvbl90eXBlID09IE9NQVBfRFNTX1JPVF9USUxFUikgewogCQkJV0FSTl9P TighKG9tYXBfZ2VtX2ZsYWdzKHBsYW5lLT5ibykgJiBPTUFQX0JPX1RJTEVEKSk7CiAJCQlvbWFw X2dlbV9yb3RhdGVkX2RtYV9hZGRyKHBsYW5lLT5ibywgb3JpZW50LCB4LzIsIHkvMiwKLQkJCQkJ CSAgJmluZm8tPnBfdXZfYWRkcik7CisJCQkJCQkgICZtYWluX2luZm8tPnBfdXZfYWRkcik7CiAJ CX0gZWxzZSB7Ci0JCQlpbmZvLT5wX3V2X2FkZHIgPSBnZXRfbGluZWFyX2FkZHIocGxhbmUsIGZv cm1hdCwgMSwgeCwgeSk7CisJCQltYWluX2luZm8tPnBfdXZfYWRkciA9CisJCQkJZ2V0X2xpbmVh cl9hZGRyKHBsYW5lLCBmb3JtYXQsIDEsIHgsIHkpOwogCQl9CiAJfSBlbHNlIHsKLQkJaW5mby0+ cF91dl9hZGRyID0gMDsKKwkJbWFpbl9pbmZvLT5wX3V2X2FkZHIgPSAwOworCX0KKworCWlmIChh dXhfaW5mbykgeworCQltYWluX2luZm8tPndpZHRoIC89IDI7CisJCW1haW5faW5mby0+b3V0X3dp ZHRoIC89IDI7CisKKwkJKmF1eF9pbmZvID0gKm1haW5faW5mbzsKKworCQlhdXhfaW5mby0+cG9z X3ggPSBtYWluX2luZm8tPnBvc194ICsgbWFpbl9pbmZvLT5vdXRfd2lkdGg7CisKKwkJYXV4X2lu Zm8tPnBhZGRyID0KKwkJCQlnZXRfbGluZWFyX2FkZHIoJm9tYXBfZmItPnBsYW5lc1swXSwgZm9y bWF0LCAwLAorCQkJCQkJeCArIG1haW5faW5mby0+d2lkdGgsIHkpOworCQlpZiAoZmItPmZvcm1h dC0+Zm9ybWF0ID09IERSTV9GT1JNQVRfTlYxMikgeworCQkJYXV4X2luZm8tPnBfdXZfYWRkciA9 CisJCQkJZ2V0X2xpbmVhcl9hZGRyKCZvbWFwX2ZiLT5wbGFuZXNbMV0sIGZvcm1hdCwgMSwKKwkJ CQkJCXggKyBtYWluX2luZm8tPndpZHRoLCB5KTsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYi5oIGIvZHJpdmVycy9ncHUvZHJtL29tYXBk cm0vb21hcF9mYi5oCmluZGV4IDk0YWQ1ZjllNDQwNC4uZjY4ZTgxMzUzMjg4IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L29tYXBkcm0vb21hcF9mYi5oCkBAIC0zNyw3ICszNyw5IEBAIHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKm9tYXBfZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogaW50IG9t YXBfZnJhbWVidWZmZXJfcGluKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKIHZvaWQgb21h cF9mcmFtZWJ1ZmZlcl91bnBpbihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7CiB2b2lkIG9t YXBfZnJhbWVidWZmZXJfdXBkYXRlX3NjYW5vdXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs Ci0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLCBzdHJ1Y3Qgb21hcF9vdmVybGF5X2lu Zm8gKmluZm8pOworCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJc3RydWN0IG9t YXBfb3ZlcmxheV9pbmZvICptYWluX2luZm8sCisJCXN0cnVjdCBvbWFwX292ZXJsYXlfaW5mbyAq YXV4X2luZm8pOwogc3RydWN0IGRybV9jb25uZWN0b3IgKm9tYXBfZnJhbWVidWZmZXJfZ2V0X25l eHRfY29ubmVjdG9yKAogCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgc3RydWN0IGRybV9j b25uZWN0b3IgKmZyb20pOwogYm9vbCBvbWFwX2ZyYW1lYnVmZmVyX3N1cHBvcnRzX3JvdGF0aW9u KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9vbWFwZHJtL29tYXBfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfcGxh bmUuYwppbmRleCA3ZDc4OWQxNTUxYTEuLmUzZTY2MjNjNDA1ZCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL29tYXBkcm0vb21hcF9wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFw ZHJtL29tYXBfcGxhbmUuYwpAQCAtMzAsMTAgKzMwLDE0IEBACiAKIHN0cnVjdCBvbWFwX3BsYW5l IHsKIAlzdHJ1Y3QgZHJtX3BsYW5lIGJhc2U7Ci0JZW51bSBvbWFwX3BsYW5lX2lkIGlkOworCWVu dW0gb21hcF9wbGFuZV9pZCBtYWluX2lkOworCWVudW0gb21hcF9wbGFuZV9pZCBhdXhfaWQ7CiAJ Y29uc3QgY2hhciAqbmFtZTsKKwlib29sIHZpcnR1YWxfcGxhbmU7CiB9OwogCitzdGF0aWMgY29u c3QgY2hhciAqcGxhbmVfaWRfdG9fbmFtZVtdOworCiBzdGF0aWMgaW50IG9tYXBfcGxhbmVfcHJl cGFyZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJCQkgc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqbmV3X3N0YXRlKQogewpAQCAtNTYsMzggKzYwLDcwIEBAIHN0YXRpYyB2b2lkIG9tYXBf cGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlzdHJ1Y3Qgb21h cF9kcm1fcHJpdmF0ZSAqcHJpdiA9IHBsYW5lLT5kZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBv bWFwX3BsYW5lICpvbWFwX3BsYW5lID0gdG9fb21hcF9wbGFuZShwbGFuZSk7CiAJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBwbGFuZS0+c3RhdGU7Ci0Jc3RydWN0IG9tYXBfb3Zlcmxh eV9pbmZvIGluZm87CisJc3RydWN0IG9tYXBfb3ZlcmxheV9pbmZvIG1haW5faW5mbywgYXV4X2lu Zm87CiAJaW50IHJldDsKKwlib29sIGR1YWxfcGxhbmUgPSBvbWFwX3BsYW5lLT52aXJ0dWFsX3Bs YW5lOwogCiAJREJHKCIlcywgY3J0Yz0lcCBmYj0lcCIsIG9tYXBfcGxhbmUtPm5hbWUsIHN0YXRl LT5jcnRjLCBzdGF0ZS0+ZmIpOwogCi0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwot CWluZm8ucm90YXRpb25fdHlwZSA9IE9NQVBfRFNTX1JPVF9OT05FOwotCWluZm8ucm90YXRpb24g PSBEUk1fTU9ERV9ST1RBVEVfMDsKLQlpbmZvLmdsb2JhbF9hbHBoYSA9IDB4ZmY7Ci0JaW5mby56 b3JkZXIgPSBzdGF0ZS0+enBvczsKKwltZW1zZXQoJm1haW5faW5mbywgMCwgc2l6ZW9mKG1haW5f aW5mbykpOworCW1haW5faW5mby5yb3RhdGlvbl90eXBlID0gT01BUF9EU1NfUk9UX05PTkU7CisJ bWFpbl9pbmZvLnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzA7CisJbWFpbl9pbmZvLmdsb2Jh bF9hbHBoYSA9IDB4ZmY7CisJbWFpbl9pbmZvLnpvcmRlciA9IHN0YXRlLT56cG9zOwogCi0JLyog dXBkYXRlIHNjYW5vdXQ6ICovCi0Jb21hcF9mcmFtZWJ1ZmZlcl91cGRhdGVfc2Nhbm91dChzdGF0 ZS0+ZmIsIHN0YXRlLCAmaW5mbyk7CisJYXV4X2luZm8gPSBtYWluX2luZm87CiAKLQlEQkcoIiVk eCVkIC0+ICVkeCVkICglZCkiLCBpbmZvLndpZHRoLCBpbmZvLmhlaWdodCwKLQkJCWluZm8ub3V0 X3dpZHRoLCBpbmZvLm91dF9oZWlnaHQsCi0JCQlpbmZvLnNjcmVlbl93aWR0aCk7Ci0JREJHKCIl ZCwlZCAlcGFkICVwYWQiLCBpbmZvLnBvc194LCBpbmZvLnBvc195LAotCQkJJmluZm8ucGFkZHIs ICZpbmZvLnBfdXZfYWRkcik7CisJLyogdXBkYXRlIHNjYW5vdXQ6ICovCisJb21hcF9mcmFtZWJ1 ZmZlcl91cGRhdGVfc2Nhbm91dChzdGF0ZS0+ZmIsIHN0YXRlLCAmbWFpbl9pbmZvLAorCQkJCQlk dWFsX3BsYW5lID8gJmF1eF9pbmZvIDogTlVMTCk7CisKKwlEQkcoIiVzOiAlZHglZCAtPiAlZHgl ZCAoJWQpIiwKKwkgICAgcGxhbmVfaWRfdG9fbmFtZVtvbWFwX3BsYW5lLT5tYWluX2lkXSwKKwkg ICAgbWFpbl9pbmZvLndpZHRoLCBtYWluX2luZm8uaGVpZ2h0LAorCSAgICBtYWluX2luZm8ub3V0 X3dpZHRoLCBtYWluX2luZm8ub3V0X2hlaWdodCwKKwkgICAgbWFpbl9pbmZvLnNjcmVlbl93aWR0 aCk7CisJREJHKCIlZCwlZCAlcGFkICVwYWQiLCBtYWluX2luZm8ucG9zX3gsIG1haW5faW5mby5w b3NfeSwKKwkgICAgJm1haW5faW5mby5wYWRkciwgJm1haW5faW5mby5wX3V2X2FkZHIpOworCisJ aWYgKGR1YWxfcGxhbmUpIHsKKwkJYXV4X2luZm8uem9yZGVyID0gbWFpbl9pbmZvLnpvcmRlciAr IDE7IC8vIFhYWAorCisJCURCRygiJXM6ICVkeCVkIC0+ICVkeCVkICglZCkiLAorCQkgICAgcGxh bmVfaWRfdG9fbmFtZVtvbWFwX3BsYW5lLT5hdXhfaWRdLAorCQkgICAgYXV4X2luZm8ud2lkdGgs IGF1eF9pbmZvLmhlaWdodCwKKwkJICAgIGF1eF9pbmZvLm91dF93aWR0aCwgYXV4X2luZm8ub3V0 X2hlaWdodCwKKwkJICAgIGF1eF9pbmZvLnNjcmVlbl93aWR0aCk7CisJCURCRygiJWQsJWQgJXBh ZCAlcGFkIiwgYXV4X2luZm8ucG9zX3gsIGF1eF9pbmZvLnBvc195LAorCQkgICAgJmF1eF9pbmZv LnBhZGRyLCAmYXV4X2luZm8ucF91dl9hZGRyKTsKKwl9CiAKLQkvKiBhbmQgZmluYWxseSwgdXBk YXRlIG9tYXBkc3M6ICovCi0JcmV0ID0gcHJpdi0+ZGlzcGNfb3BzLT5vdmxfc2V0dXAob21hcF9w bGFuZS0+aWQsICZpbmZvLAorCXJldCA9IHByaXYtPmRpc3BjX29wcy0+b3ZsX3NldHVwKG9tYXBf cGxhbmUtPm1haW5faWQsICZtYWluX2luZm8sCiAJCQkgICAgICBvbWFwX2NydGNfdGltaW5ncyhz dGF0ZS0+Y3J0YyksIGZhbHNlLAogCQkJICAgICAgb21hcF9jcnRjX2NoYW5uZWwoc3RhdGUtPmNy dGMpKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIocGxhbmUtPmRldi0+ZGV2LCAiRmFpbGVkIHRv IHNldHVwIHBsYW5lICVzXG4iLAorCQlkZXZfZXJyKHBsYW5lLT5kZXYtPmRldiwgIkZhaWxlZCB0 byBzZXR1cCBwbGFuZTEgJXNcbiIsCiAJCQlvbWFwX3BsYW5lLT5uYW1lKTsKLQkJcHJpdi0+ZGlz cGNfb3BzLT5vdmxfZW5hYmxlKG9tYXBfcGxhbmUtPmlkLCBmYWxzZSk7CisJCXByaXYtPmRpc3Bj X29wcy0+b3ZsX2VuYWJsZShvbWFwX3BsYW5lLT5tYWluX2lkLCBmYWxzZSk7CiAJCXJldHVybjsK IAl9CiAKLQlwcml2LT5kaXNwY19vcHMtPm92bF9lbmFibGUob21hcF9wbGFuZS0+aWQsIHRydWUp OworCXByaXYtPmRpc3BjX29wcy0+b3ZsX2VuYWJsZShvbWFwX3BsYW5lLT5tYWluX2lkLCB0cnVl KTsKKworCWlmIChkdWFsX3BsYW5lKSB7CisJCXJldCA9IHByaXYtPmRpc3BjX29wcy0+b3ZsX3Nl dHVwKG9tYXBfcGxhbmUtPmF1eF9pZCwgJmF1eF9pbmZvLAorCQkJCSAgICAgIG9tYXBfY3J0Y190 aW1pbmdzKHN0YXRlLT5jcnRjKSwgZmFsc2UsCisJCQkJICAgICAgb21hcF9jcnRjX2NoYW5uZWwo c3RhdGUtPmNydGMpKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihwbGFuZS0+ZGV2LT5kZXYs ICJGYWlsZWQgdG8gc2V0dXAgcGxhbmUyICVzXG4iLAorCQkJCW9tYXBfcGxhbmUtPm5hbWUpOwor CQkJcHJpdi0+ZGlzcGNfb3BzLT5vdmxfZW5hYmxlKG9tYXBfcGxhbmUtPmF1eF9pZCwgZmFsc2Up OworCQkJcHJpdi0+ZGlzcGNfb3BzLT5vdmxfZW5hYmxlKG9tYXBfcGxhbmUtPm1haW5faWQsIGZh bHNlKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXByaXYtPmRpc3BjX29wcy0+b3ZsX2VuYWJsZShv bWFwX3BsYW5lLT5hdXhfaWQsIHRydWUpOworCX0KIH0KIAogc3RhdGljIHZvaWQgb21hcF9wbGFu ZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKQEAgLTk1LDEyICsxMzEs MTUgQEAgc3RhdGljIHZvaWQgb21hcF9wbGFuZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKIHsKIAlzdHJ1Y3Qgb21hcF9kcm1fcHJpdmF0ZSAqcHJpdiA9IHBsYW5lLT5k ZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBvbWFwX3BsYW5lICpvbWFwX3BsYW5lID0gdG9fb21h cF9wbGFuZShwbGFuZSk7CisJYm9vbCBkdWFsX3BsYW5lID0gb21hcF9wbGFuZS0+dmlydHVhbF9w bGFuZTsKIAogCXBsYW5lLT5zdGF0ZS0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKIAlw bGFuZS0+c3RhdGUtPnpwb3MgPSBwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZ Ci0JCQkgICA/IDAgOiBvbWFwX3BsYW5lLT5pZDsKKwkJCSAgID8gMCA6IG9tYXBfcGxhbmUtPm1h aW5faWQ7CiAKLQlwcml2LT5kaXNwY19vcHMtPm92bF9lbmFibGUob21hcF9wbGFuZS0+aWQsIGZh bHNlKTsKKwlwcml2LT5kaXNwY19vcHMtPm92bF9lbmFibGUob21hcF9wbGFuZS0+bWFpbl9pZCwg ZmFsc2UpOworCWlmIChkdWFsX3BsYW5lKQorCQlwcml2LT5kaXNwY19vcHMtPm92bF9lbmFibGUo b21hcF9wbGFuZS0+YXV4X2lkLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9wbGFuZV9h dG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCkBAIC0xOTUsNyArMjM0LDcgQEAg c3RhdGljIHZvaWQgb21hcF9wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAkg KiBwbGFuZS4KIAkgKi8KIAlwbGFuZS0+c3RhdGUtPnpwb3MgPSBwbGFuZS0+dHlwZSA9PSBEUk1f UExBTkVfVFlQRV9QUklNQVJZCi0JCQkgICA/IDAgOiBvbWFwX3BsYW5lLT5pZDsKKwkJCSAgID8g MCA6IG9tYXBfcGxhbmUtPm1haW5faWQ7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9wbGFuZV9hdG9t aWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLApAQCAtMjQ2LDQzICsyODUs NjUgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBsYW5lX2lkX3RvX25hbWVbXSA9IHsKIAlbT01BUF9E U1NfVklERU8zXSA9ICJ2aWQzIiwKIH07CiAKLXN0YXRpYyBjb25zdCBlbnVtIG9tYXBfcGxhbmVf aWQgcGxhbmVfaWR4X3RvX2lkW10gPSB7Ci0JT01BUF9EU1NfR0ZYLAotCU9NQVBfRFNTX1ZJREVP MSwKLQlPTUFQX0RTU19WSURFTzIsCi0JT01BUF9EU1NfVklERU8zLAorc3RhdGljIGNvbnN0IGNo YXIgKiBjb25zdCB2aXJ0dWFsX3BsYW5lX2lkX3RvX25hbWVbXSA9IHsKKwlbT01BUF9EU1NfR0ZY XSA9ICJ2aXJ0LWdmeCIsCisJW09NQVBfRFNTX1ZJREVPMV0gPSAidmlydC12aWQxIiwKKwlbT01B UF9EU1NfVklERU8yXSA9ICJ2aXJ0LXZpZDIiLAorCVtPTUFQX0RTU19WSURFTzNdID0gInZpcnQt dmlkMyIsCiB9OwogCi0vKiBpbml0aWFsaXplIHBsYW5lICovCiBzdHJ1Y3QgZHJtX3BsYW5lICpv bWFwX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJaW50IGlkeCwgZW51bSBk cm1fcGxhbmVfdHlwZSB0eXBlLAotCQl1MzIgcG9zc2libGVfY3J0Y3MpCisJCXUzMiBwb3NzaWJs ZV9jcnRjcywKKwkJc3RydWN0IGRpc3BjX3BsYW5lX21hcHBpbmdzICpwbGFuZV9tYXBwaW5ncykK IHsKIAlzdHJ1Y3Qgb21hcF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJ dW5zaWduZWQgaW50IG51bV9wbGFuZXMgPSBwcml2LT5kaXNwY19vcHMtPmdldF9udW1fb3Zscygp OwogCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwogCXN0cnVjdCBvbWFwX3BsYW5lICpvbWFwX3Bs YW5lOwotCWVudW0gb21hcF9wbGFuZV9pZCBpZDsKIAlpbnQgcmV0OwogCXUzMiBuZm9ybWF0czsK IAljb25zdCB1MzIgKmZvcm1hdHM7CiAKLQlpZiAoV0FSTl9PTihpZHggPj0gQVJSQVlfU0laRShw bGFuZV9pZHhfdG9faWQpKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKHBsYW5l X21hcHBpbmdzLT5udW1fcGxhbmVzKQorCQludW1fcGxhbmVzID0gcGxhbmVfbWFwcGluZ3MtPm51 bV9wbGFuZXM7CiAKLQlpZCA9IHBsYW5lX2lkeF90b19pZFtpZHhdOwotCi0JREJHKCIlczogdHlw ZT0lZCIsIHBsYW5lX2lkX3RvX25hbWVbaWRdLCB0eXBlKTsKKwlpZiAoV0FSTl9PTihpZHggPj0g bnVtX3BsYW5lcykpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJb21hcF9wbGFuZSA9 IGt6YWxsb2Moc2l6ZW9mKCpvbWFwX3BsYW5lKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvbWFwX3Bs YW5lKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWZvcm1hdHMgPSBwcml2LT5kaXNw Y19vcHMtPm92bF9nZXRfY29sb3JfbW9kZXMoaWQpOworCWlmIChwbGFuZV9tYXBwaW5ncy0+bnVt X3BsYW5lcykgeworCQkvKiBVc2UgcGxhbmUgZGF0YSBmcm9tIERUICovCisJCW9tYXBfcGxhbmUt Pm1haW5faWQgPSBwbGFuZV9tYXBwaW5ncy0+cGxhbmVbaWR4XS5tYWluX2lkOworCQlpZiAocGxh bmVfbWFwcGluZ3MtPnBsYW5lW2lkeF0uaXNfdmlydHVhbCkgeworCQkJb21hcF9wbGFuZS0+bmFt ZSA9CisJCQkJdmlydHVhbF9wbGFuZV9pZF90b19uYW1lW29tYXBfcGxhbmUtPm1haW5faWRdOwor CQkJb21hcF9wbGFuZS0+YXV4X2lkID0gcGxhbmVfbWFwcGluZ3MtPnBsYW5lW2lkeF0uYXV4X2lk OworCQkJb21hcF9wbGFuZS0+dmlydHVhbF9wbGFuZSA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlv bWFwX3BsYW5lLT5uYW1lID0KKwkJCQlwbGFuZV9pZF90b19uYW1lW29tYXBfcGxhbmUtPm1haW5f aWRdOworCQl9CisJCWlmIChwbGFuZV9tYXBwaW5ncy0+cGxhbmVbaWR4XS5jcnRjX21hc2spCisJ CQlwb3NzaWJsZV9jcnRjcyA9IHBsYW5lX21hcHBpbmdzLT5wbGFuZVtpZHhdLmNydGNfbWFzazsK Kwl9IGVsc2UgeworCQkvKiBVc2UgbGVnYWN5IHBsYW5lIGFsbG9jYXRpb24gKi8KKwkJb21hcF9w bGFuZS0+bWFpbl9pZCA9IGlkeDsKKwkJb21hcF9wbGFuZS0+bmFtZSA9IHBsYW5lX2lkX3RvX25h bWVbaWR4XTsKKwl9CisKKwlEQkcoIiVzOiB0eXBlPSVkIiwgb21hcF9wbGFuZS0+bmFtZSwgdHlw ZSk7CisJREJHKCIJb21hcF9wbGFuZS0+bWFpbl9pZDogJWQiLCBvbWFwX3BsYW5lLT5tYWluX2lk KTsKKwlpZiAob21hcF9wbGFuZS0+dmlydHVhbF9wbGFuZSkKKwkJREJHKCIJb21hcF9wbGFuZS0+ YXV4X2lkOiAlZCIsIG9tYXBfcGxhbmUtPmF1eF9pZCk7CisJREJHKCIJY3J0Y19tYXNrOiAweCUw NHgiLCBwb3NzaWJsZV9jcnRjcyk7CisKKwlmb3JtYXRzID0gcHJpdi0+ZGlzcGNfb3BzLT5vdmxf Z2V0X2NvbG9yX21vZGVzKG9tYXBfcGxhbmUtPm1haW5faWQpOwogCWZvciAobmZvcm1hdHMgPSAw OyBmb3JtYXRzW25mb3JtYXRzXTsgKytuZm9ybWF0cykKIAkJOwotCW9tYXBfcGxhbmUtPmlkID0g aWQ7Ci0Jb21hcF9wbGFuZS0+bmFtZSA9IHBsYW5lX2lkX3RvX25hbWVbaWRdOwogCiAJcGxhbmUg PSAmb21hcF9wbGFuZS0+YmFzZTsKIApAQCAtMzAxLDcgKzM2Miw3IEBAIHN0cnVjdCBkcm1fcGxh bmUgKm9tYXBfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCiBlcnJvcjoKIAlk ZXZfZXJyKGRldi0+ZGV2LCAiJXMoKTogY291bGQgbm90IGNyZWF0ZSBwbGFuZTogJXNcbiIsCi0J CV9fZnVuY19fLCBwbGFuZV9pZF90b19uYW1lW2lkXSk7CisJCV9fZnVuY19fLCBvbWFwX3BsYW5l LT5uYW1lKTsKIAogCWtmcmVlKG9tYXBfcGxhbmUpOwogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJt L29tYXBkcm0vb21hcF9wbGFuZS5oCmluZGV4IGRjNWU4MmFkMDYxZC4uYWQwOTQ3MWQ0NjAxIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX3BsYW5lLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9wbGFuZS5oCkBAIC0zMCw3ICszMCw4IEBAIHN0cnVj dCBkcm1fcGxhbmU7CiAKIHN0cnVjdCBkcm1fcGxhbmUgKm9tYXBfcGxhbmVfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAogCQlpbnQgaWR4LCBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUsCi0J CXUzMiBwb3NzaWJsZV9jcnRjcyk7CisJCXUzMiBwb3NzaWJsZV9jcnRjcywKKwkJc3RydWN0IGRp c3BjX3BsYW5lX21hcHBpbmdzICpwbGFuZV9tYXBwaW5ncyk7CiB2b2lkIG9tYXBfcGxhbmVfaW5z dGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQlzdHJ1Y3QgZHJtX21v ZGVfb2JqZWN0ICpvYmopOwogCi0tIAoyLjkuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==