From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 10/12] drm/fb-helper: Support deferred setup Date: Wed, 21 Jun 2017 20:28:13 +0200 Message-ID: <20170621182815.14602-11-daniel.vetter@ffwll.ch> References: <20170621182815.14602-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170621182815.14602-1-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: DRI Development Cc: Daniel Vetter , Intel Graphics Development , Thierry Reding , John Stultz List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KCkZCIGhlbHBlciBjb2Rl IGZhbGxzIGJhY2sgdG8gYSAxMDI0eDc2OCBtb2RlIGlmIG5vIG91dHB1dHMgYXJlIGNvbm5lY3Rl ZApvciBkb24ndCByZXBvcnQgYmFjayBhbnkgbW9kZXMgdXBvbiBpbml0aWFsaXphdGlvbi4gVGhp cyBjYW4gYmUgYW5ub3lpbmcKYmVjYXVzZSBvdXRwdXRzIHRoYXQgYXJlIGFkZGVkIHRvIEZCIGhl bHBlciBsYXRlciBvbiBjYW4ndCBiZSB1c2VkIHdpdGgKRkIgaGVscGVyIGlmIHRoZXkgZG9uJ3Qg c3VwcG9ydCBhIG1hdGNoaW5nIG1vZGUuCgpUaGUgZmFsbGJhY2sgaXMgaW4gcGxhY2UgYmVjYXVz ZSBWR0EgY29ubmVjdG9ycyBjYW4gaGFwcGVuIHRvIHJlcG9ydCBhbgp1bmtub3duIGNvbm5lY3Rp b24gc3RhdHVzIGV2ZW4gd2hlbiB0aGV5IGFyZSBpbiBmYWN0IGNvbm5lY3RlZC4KClNvbWUgZHJp dmVycyBoYXZlIGN1c3RvbSBzb2x1dGlvbnMgaW4gcGxhY2UgdG8gZGVmZXIgRkIgaGVscGVyIHNl dHVwCnVudGlsIGF0IGxlYXN0IG9uZSBvdXRwdXQgaXMgY29ubmVjdGVkLiBCdXQgdGhlIGxvZ2lj IGJlaGluZCB0aGVzZQpzb2x1dGlvbnMgaXMgYWx3YXlzIHRoZSBzYW1lIGFuZCB0aGVyZSBpcyBu b3RoaW5nIGRyaXZlci1zcGVjaWZpYyBhYm91dAppdCwgc28gYSBiZXR0ZXIgYWx0ZXJhdGl2ZSBp cyB0byBmaXggdGhlIEZCIGhlbHBlciBjb3JlIGFuZCBhZGQgc3VwcG9ydApmb3IgYWxsIGRyaXZl cnMgYXV0b21hdGljYWxseS4KClRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkZWZlcnJlZCBG QiBoZWxwZXIgc2V0dXAuIEl0IGNoZWNrcyBhbGwgdGhlCmNvbm5lY3RvcnMgZm9yIHRoZWlyIGNv bm5lY3Rpb24gc3RhdHVzLCBhbmQgaWYgYWxsIG9mIHRoZW0gcmVwb3J0IHRvIGJlCmRpc2Nvbm5l Y3RlZCBtYXJrcyB0aGUgRkIgaGVscGVyIGFzIG5lZWRpbmcgZGVmZXJyZWQgc2V0dXAuIFdoZXQg c2V0dXAKaXMgZGVmZXJyZWQsIHRoZSBGQiBoZWxwZXIgY29yZSB3aWxsIGF1dG9tYXRpY2FsbHkg cmV0cnkgc2V0dXAgYWZ0ZXIgYQpob3RwbHVnIGV2ZW50LCBhbmQgaXQgd2lsbCBrZWVwIHRyeWlu ZyB1bnRpbCBpdCBzdWNjZWVkcy4KCnYyOiBSZWJhc2Ugb250byBteSBlbnRpcmVseSByZXdvcmtl ZCBmYmRldiBoZWxwZXIgbG9ja2luZy4gT25lIGJpZwpkaWZmZXJlbmNlIGlzIHRoYXQgdGhpcyB2 ZXJzaW9uIGFnYWluIGRyb3BzJnJlYWNxdWlyZXMgdGhlIGZiZGV2IGxvY2sKKHdoaWNoIGlzIG5v dyBmYl9oZWxwZXItPmxvY2ssIGJ1dCBiZWZvcmUgdGhpcyBwYXRjaCBzZXJpZXMgaXQgd2FzCm1v ZGVfY29uZmlnLT5tdXRleCksIGJlY2F1c2UgcmVnaXN0ZXJfZnJhbWVidWZmZXIgbXVzdCBiZSBh YmxlIHRvCnJlY3Vyc2UgYmFjayBpbnRvIGZiZGV2IGhlbHBlciBjb2RlIGZvciB0aGUgaW5pdGlh bCBzY3JlZW4gc2V0dXAuCgpDYzogSm9obiBTdHVsdHogPGpvaG4uc3R1bHR6QGxpbmFyby5vcmc+ CkNjOiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPiAodjEpClRlc3RlZC1ieTog Sm9obiBTdHVsdHogPGpvaG4uc3R1bHR6QGxpbmFyby5vcmc+ClNpZ25lZC1vZmYtYnk6IFRoaWVy cnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+ICh2MSkKU2lnbmVkLW9mZi1ieTogRGFuaWVs IFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJt X2ZiX2hlbHBlci5jIHwgMTExICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0KIGluY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCAgICAgfCAgMjMgKysrKysrKysrCiAyIGZp bGVzIGNoYW5nZWQsIDEwNyBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9mYl9oZWxwZXIuYwppbmRleCBlM2QwMzNkZjA2OGYuLmE0Y2ZlZjliY2ZhNyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2ZiX2hlbHBlci5jCkBAIC01MjEsNiArNTIxLDkgQEAgaW50IGRybV9mYl9oZWxwZXJfcmVz dG9yZV9mYmRldl9tb2RlX3VubG9ja2VkKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIp CiAJaWYgKCFkcm1fZmJkZXZfZW11bGF0aW9uKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlmIChS RUFEX09OQ0UoZmJfaGVscGVyLT5kZWZlcnJlZF9zZXR1cCkpCisJCXJldHVybiAwOworCiAJbXV0 ZXhfbG9jaygmZmJfaGVscGVyLT5sb2NrKTsKIAlyZXQgPSByZXN0b3JlX2ZiZGV2X21vZGUoZmJf aGVscGVyKTsKIApAQCAtMTY5Myw2ICsxNjk2LDIzIEBAIGludCBkcm1fZmJfaGVscGVyX3Bhbl9k aXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogfQogRVhQT1JUX1NZTUJPTChk cm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5KTsKIAorc3RhdGljIGJvb2wgZHJtX2ZiX2hlbHBlcl9t YXliZV9jb25uZWN0ZWQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlcikKK3sKKwlib29sIGNv bm5lY3RlZCA9IGZhbHNlOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGhl bHBlci0+Y29ubmVjdG9yX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9mYl9oZWxwZXJfY29u bmVjdG9yICpmYiA9IGhlbHBlci0+Y29ubmVjdG9yX2luZm9baV07CisKKwkJaWYgKGZiLT5jb25u ZWN0b3ItPnN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZCkgeworCQkJY29u bmVjdGVkID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGNvbm5lY3RlZDsK K30KKwogLyoKICAqIEFsbG9jYXRlcyB0aGUgYmFja2luZyBzdG9yYWdlIGFuZCBzZXRzIHVwIHRo ZSBmYmRldiBpbmZvIHN0cnVjdHVyZSB0aHJvdWdoCiAgKiB0aGUgLT5mYl9wcm9iZSBjYWxsYmFj ayBhbmQgdGhlbiByZWdpc3RlcnMgdGhlIGZiZGV2IGFuZCBzZXRzIHVwIHRoZSBwYW5pYwpAQCAt MjM1Miw4ICsyMzcyLDYgQEAgc3RhdGljIHZvaWQgZHJtX3NldHVwX2NydGNzKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJaW50IGk7CiAKIAlEUk1fREVCVUdfS01TKCJcbiIpOwot CWlmIChkcm1fZmJfaGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyhmYl9oZWxwZXIsIHdpZHRo LCBoZWlnaHQpID09IDApCi0JCURSTV9ERUJVR19LTVMoIk5vIGNvbm5lY3RvcnMgcmVwb3J0ZWQg Y29ubmVjdGVkIHdpdGggbW9kZXNcbiIpOwogCiAJLyogcHJldmVudCBjb25jdXJyZW50IG1vZGlm aWNhdGlvbiBvZiBjb25uZWN0b3JfY291bnQgYnkgaG90cGx1ZyAqLwogCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJmZiX2hlbHBlci0+bG9jayk7CkBAIC0yNDMxLDYgKzI0NDksNjEgQEAgc3RhdGljIHZv aWQgZHJtX3NldHVwX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJa2Zy ZWUoZW5hYmxlZCk7CiB9CiAKKy8qIE5vdGU6IERyb3BzJnJlYWNxdWlyZXMgZmJfaGVscGVyLT5s b2NrICovCitzdGF0aWMgaW50IF9fZHJtX2ZiX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAorCQkJCQkgIGludCBicHBfc2VsKQoreworCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5m bzsKKwl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKKwlpbnQgcmV0OworCisJd2lkdGggPSBk ZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aDsKKwloZWlnaHQgPSBkZXYtPm1vZGVfY29uZmlnLm1h eF9oZWlnaHQ7CisKKwlpZiAoZHJtX2ZiX2hlbHBlcl9wcm9iZV9jb25uZWN0b3JfbW9kZXMoZmJf aGVscGVyLCB3aWR0aCwgaGVpZ2h0KSA9PSAwKQorCQlEUk1fREVCVUdfS01TKCJObyBjb25uZWN0 b3JzIHJlcG9ydGVkIGNvbm5lY3RlZCB3aXRoIG1vZGVzXG4iKTsKKworCS8qCisJICogSWYgZXZl cnl0aGluZydzIGRpc2Nvbm5lY3RlZCwgdGhlcmUncyBubyB1c2UgaW4gYXR0ZW1wdGluZyB0byBz ZXQKKwkgKiB1cCBmYmRldi4KKwkgKi8KKwlpZiAoIWRybV9mYl9oZWxwZXJfbWF5YmVfY29ubmVj dGVkKGZiX2hlbHBlcikpIHsKKwkJRFJNX0lORk8oIk5vIG91dHB1dHMgY29ubmVjdGVkLCBkZWZl cnJpbmcgc2V0dXBcbiIpOworCQlmYl9oZWxwZXItPnByZWZlcnJlZF9icHAgPSBicHBfc2VsOwor CQlmYl9oZWxwZXItPmRlZmVycmVkX3NldHVwID0gdHJ1ZTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYt Pm1vZGVfY29uZmlnLm11dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJZHJtX3NldHVwX2NydGNz KGZiX2hlbHBlciwgd2lkdGgsIGhlaWdodCk7CisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVf ZmJfcHJvYmUoZmJfaGVscGVyLCBicHBfc2VsKTsKKwlpZiAocmV0KSB7CisJCW11dGV4X3VubG9j aygmZmJfaGVscGVyLT5sb2NrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmYl9oZWxwZXItPmRl ZmVycmVkX3NldHVwID0gZmFsc2U7CisJbXV0ZXhfdW5sb2NrKCZmYl9oZWxwZXItPmxvY2spOwor CisJaW5mbyA9IGZiX2hlbHBlci0+ZmJkZXY7CisJaW5mby0+dmFyLnBpeGNsb2NrID0gMDsKKwly ZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJu IHJldDsKKworCWRldl9pbmZvKGRldi0+ZGV2LCAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmlj ZVxuIiwKKwkJIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCk7CisKKwltdXRleF9sb2NrKCZrZXJu ZWxfZmJfaGVscGVyX2xvY2spOworCWlmIChsaXN0X2VtcHR5KCZrZXJuZWxfZmJfaGVscGVyX2xp c3QpKQorCQlyZWdpc3Rlcl9zeXNycV9rZXkoJ3YnLCAmc3lzcnFfZHJtX2ZiX2hlbHBlcl9yZXN0 b3JlX29wKTsKKworCWxpc3RfYWRkKCZmYl9oZWxwZXItPmtlcm5lbF9mYl9saXN0LCAma2VybmVs X2ZiX2hlbHBlcl9saXN0KTsKKworCXJldHVybiAwOworfQorCiAvKioKICAqIGRybV9mYl9oZWxw ZXJfaW5pdGlhbF9jb25maWcgLSBzZXR1cCBhIHNhbmUgaW5pdGlhbCBjb25uZWN0b3IgY29uZmln dXJhdGlvbgogICogQGZiX2hlbHBlcjogZmJfaGVscGVyIGRldmljZSBzdHJ1Y3QKQEAgLTI0NzUs MzkgKzI1NDgsMTYgQEAgc3RhdGljIHZvaWQgZHJtX3NldHVwX2NydGNzKHN0cnVjdCBkcm1fZmJf aGVscGVyICpmYl9oZWxwZXIsCiAgKi8KIGludCBkcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmln KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsIGludCBicHBfc2VsKQogewotCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5m bzsKIAlpbnQgcmV0OwogCiAJaWYgKCFkcm1fZmJkZXZfZW11bGF0aW9uKQogCQlyZXR1cm4gMDsK IAogCW11dGV4X2xvY2soJmZiX2hlbHBlci0+bG9jayk7Ci0JZHJtX3NldHVwX2NydGNzKGZiX2hl bHBlciwKLQkJCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoLAotCQkJZGV2LT5tb2RlX2NvbmZp Zy5tYXhfaGVpZ2h0KTsKLQlyZXQgPSBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShmYl9o ZWxwZXIsIGJwcF9zZWwpOwotCW11dGV4X3VubG9jaygmZmJfaGVscGVyLT5sb2NrKTsKLQlpZiAo cmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaW5mbyA9IGZiX2hlbHBlci0+ZmJkZXY7Ci0JaW5mby0+ dmFyLnBpeGNsb2NrID0gMDsKLQlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKLQlp ZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWRldl9pbmZvKGRldi0+ZGV2LCAiZmIlZDog JXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKLQkJIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCk7 Ci0KLQltdXRleF9sb2NrKCZrZXJuZWxfZmJfaGVscGVyX2xvY2spOwotCWlmIChsaXN0X2VtcHR5 KCZrZXJuZWxfZmJfaGVscGVyX2xpc3QpKQotCQlyZWdpc3Rlcl9zeXNycV9rZXkoJ3YnLCAmc3lz cnFfZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX29wKTsKLQotCWxpc3RfYWRkKCZmYl9oZWxwZXItPmtl cm5lbF9mYl9saXN0LCAma2VybmVsX2ZiX2hlbHBlcl9saXN0KTsKKwlyZXQgPSBfX2RybV9mYl9o ZWxwZXJfaW5pdGlhbF9jb25maWcoZmJfaGVscGVyLCBicHBfc2VsKTsKIAltdXRleF91bmxvY2so Jmtlcm5lbF9mYl9oZWxwZXJfbG9jayk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQog RVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmlnKTsKIApAQCAtMjU0MCw2 ICsyNTkwLDEzIEBAIGludCBkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQoc3RydWN0IGRybV9m Yl9oZWxwZXIgKmZiX2hlbHBlcikKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZmYl9oZWxw ZXItPmxvY2spOworCWlmIChmYl9oZWxwZXItPmRlZmVycmVkX3NldHVwKSB7CisJCWVyciA9IF9f ZHJtX2ZiX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhmYl9oZWxwZXIsCisJCQkJCQkgICAgIGZiX2hl bHBlci0+cHJlZmVycmVkX2JwcCk7CisJCW11dGV4X3VubG9jaygmZmJfaGVscGVyLT5sb2NrKTsK KwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoIWZiX2hlbHBlci0+ZmIgfHwgIWRybV9mYl9oZWxw ZXJfaXNfYm91bmQoZmJfaGVscGVyKSkgewogCQlmYl9oZWxwZXItPmRlbGF5ZWRfaG90cGx1ZyA9 IHRydWU7CiAJCW11dGV4X3VubG9jaygmZmJfaGVscGVyLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaApp bmRleCBlYTE3MGI5NmU4OGQuLmE1ZWE2ZmZkZmVjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0v ZHJtX2ZiX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaApAQCAtMjMy LDYgKzIzMiwyOSBAQCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlciB7CiAJICogbmVlZHMgdG8gYmUgcmVw cm9iZSB3aGVuIGZiZGV2IGlzIGluIGNvbnRyb2wgYWdhaW4uCiAJICovCiAJYm9vbCBkZWxheWVk X2hvdHBsdWc7CisKKwkvKioKKwkgKiBAZGVmZXJyZWRfc2V0dXA6CisJICoKKwkgKiBJZiBubyBv dXRwdXRzIGFyZSBjb25uZWN0ZWQgKGRpc2Nvbm5lY3RlZCBvciB1bmtub3duKSB0aGUgRkIgaGVs cGVyCisJICogY29kZSB3aWxsIGRlZmVyIHNldHVwIHVudGlsIGF0IGxlYXN0IG9uZSBvZiB0aGUg b3V0cHV0cyBzaG93cyB1cC4KKwkgKiBUaGlzIGZpZWxkIGtlZXBzIHRyYWNrIG9mIHRoZSBzdGF0 dXMgc28gdGhhdCBzZXR1cCBjYW4gYmUgcmV0cmllZAorCSAqIGF0IGV2ZXJ5IGhvdHBsdWcgZXZl bnQgdW50aWwgaXQgc3VjY2VlZHMgZXZlbnR1YWxseS4KKwkgKgorCSAqIFByb3RlY3RlZCBieSBA bG9jay4KKwkgKi8KKwlib29sIGRlZmVycmVkX3NldHVwOworCisJLyoqCisJICogQHByZWZlcnJl ZF9icHA6CisJICoKKwkgKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3IgdGhlIGRyaXZlcidzIHByZWZl cnJlZCBCUFAgc2V0dGluZyBwYXNzZWQgdG8KKwkgKiBGQiBoZWxwZXIgaW5pdGlhbGl6YXRpb24u IFRoaXMgbmVlZHMgdG8gYmUgdHJhY2tlZCBzbyB0aGF0IGRlZmVycmVkCisJICogRkIgaGVscGVy IHNldHVwIGNhbiBwYXNzIHRoaXMgb24uCisJICoKKwkgKiBTZWUgYWxzbzogQGRlZmVycmVkX3Nl dHVwCisJICovCisJaW50IHByZWZlcnJlZF9icHA7CiB9OwogCiAvKioKLS0gCjIuMTEuMAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==