From: Eric Anholt Subject: [PATCH v2 3/7] drm/vc4: Switch DPI to using the panel-bridge helper. Date: Thu, 11 May 2017 11:31:24 -0700 Message-ID: <20170511183128.25085-3-eric@anholt.net> References: <20170511183128.25085-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from anholt.net (anholt.net [50.246.234.109]) by gabe.freedesktop.org (Postfix) with ESMTP id B29016E595 for ; Thu, 11 May 2017 18:31:37 +0000 (UTC) In-Reply-To: <20170511183128.25085-1-eric@anholt.net> 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, Boris Brezillon , Archit Taneja , Andrzej Hajda , Laurent Pinchart , CK Hu , Philipp Zabel , Yannick Fertre , Philippe Cornu Cc: linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org QW5vdGhlciAxMDAgbGluZXMgb2YgYm9pbGVycGxhdGUgZ29uZSwgd2hpbGUgYWxsb3dpbmcgZm9y IGJyaWRnZXMgdG8KYmUgY29ubmVjdGVkIGluIHRoZSBkaXNwbGF5IGNoYWluLgoKU2lnbmVkLW9m Zi1ieTogRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KLS0tCiBkcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9kcGkuYyB8IDE2NCArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAxMzQgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHBpLmMgYi9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9kcGkuYwppbmRleCBjNmQ3MDM5MDNmZDkuLjk4NTMyZTJjZDJiNyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHBpLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfZHBpLmMKQEAgLTIzLDggKzIzLDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImRy bV9hdG9taWNfaGVscGVyLmgiCisjaW5jbHVkZSAiZHJtX2JyaWRnZS5oIgogI2luY2x1ZGUgImRy bV9jcnRjX2hlbHBlci5oIgogI2luY2x1ZGUgImRybV9lZGlkLmgiCisjaW5jbHVkZSAiZHJtX29m LmgiCiAjaW5jbHVkZSAiZHJtX3BhbmVsLmgiCiAjaW5jbHVkZSAibGludXgvY2xrLmgiCiAjaW5j bHVkZSAibGludXgvY29tcG9uZW50LmgiCkBAIC05NSw3ICs5Nyw4IEBAIHN0cnVjdCB2YzRfZHBp IHsKIAogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yOwotCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2U7CisJYm9vbCBpc19wYW5lbF9icmlkZ2U7CiAKIAl2b2lkIF9faW9tZW0gKnJl Z3M7CiAKQEAgLTExOCwyNCArMTIxLDYgQEAgdG9fdmM0X2RwaV9lbmNvZGVyKHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcikKIAlyZXR1cm4gY29udGFpbmVyX29mKGVuY29kZXIsIHN0cnVjdCB2 YzRfZHBpX2VuY29kZXIsIGJhc2UuYmFzZSk7CiB9CiAKLS8qIFZDNCBEUEkgY29ubmVjdG9yIEtN UyBzdHJ1Y3QgKi8KLXN0cnVjdCB2YzRfZHBpX2Nvbm5lY3RvciB7Ci0Jc3RydWN0IGRybV9jb25u ZWN0b3IgYmFzZTsKLQlzdHJ1Y3QgdmM0X2RwaSAqZHBpOwotCi0JLyogU2luY2UgdGhlIGNvbm5l Y3RvciBpcyBhdHRhY2hlZCB0byBqdXN0IHRoZSBvbmUgZW5jb2RlciwKLQkgKiB0aGlzIGlzIHRo ZSByZWZlcmVuY2UgdG8gaXQgc28gd2UgY2FuIGRvIHRoZSBiZXN0X2VuY29kZXIoKQotCSAqIGhv b2suCi0JICovCi0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotfTsKLQotc3RhdGljIGlu bGluZSBzdHJ1Y3QgdmM0X2RwaV9jb25uZWN0b3IgKgotdG9fdmM0X2RwaV9jb25uZWN0b3Ioc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGNv bm5lY3Rvciwgc3RydWN0IHZjNF9kcGlfY29ubmVjdG9yLCBiYXNlKTsKLX0KLQogI2RlZmluZSBE UElfUkVHKHJlZykgeyByZWcsICNyZWcgfQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJdTMyIHJl ZzsKQEAgLTE2Nyw4MCArMTUyLDYgQEAgaW50IHZjNF9kcGlfZGVidWdmc19yZWdzKHN0cnVjdCBz ZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogfQogI2VuZGlmCiAKLXN0YXRpYyBlbnVtIGRybV9j b25uZWN0b3Jfc3RhdHVzCi12YzRfZHBpX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKLXsKLQlzdHJ1Y3QgdmM0X2RwaV9jb25uZWN0 b3IgKnZjNF9jb25uZWN0b3IgPQotCQl0b192YzRfZHBpX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwot CXN0cnVjdCB2YzRfZHBpICpkcGkgPSB2YzRfY29ubmVjdG9yLT5kcGk7Ci0KLQlpZiAoZHBpLT5w YW5lbCkKLQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwotCWVsc2UKLQkJcmV0 dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwotfQotCi1zdGF0aWMgdm9pZCB2YzRf ZHBpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17 Ci0JZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7Ci0JZHJtX2Nvbm5lY3Rvcl9j bGVhbnVwKGNvbm5lY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbnQgdmM0X2RwaV9jb25uZWN0b3JfZ2V0 X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IHZjNF9k cGlfY29ubmVjdG9yICp2YzRfY29ubmVjdG9yID0KLQkJdG9fdmM0X2RwaV9jb25uZWN0b3IoY29u bmVjdG9yKTsKLQlzdHJ1Y3QgdmM0X2RwaSAqZHBpID0gdmM0X2Nvbm5lY3Rvci0+ZHBpOwotCi0J aWYgKGRwaS0+cGFuZWwpCi0JCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRwaS0+cGFuZWwp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9m dW5jcyB2YzRfZHBpX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKLQkuZHBtcyA9IGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9kcG1zLAotCS5kZXRlY3QgPSB2YzRfZHBpX2Nvbm5lY3Rvcl9kZXRlY3Qs Ci0JLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMs Ci0JLmRlc3Ryb3kgPSB2YzRfZHBpX2Nvbm5lY3Rvcl9kZXN0cm95LAotCS5yZXNldCA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9 IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCi0JLmF0b21pY19k ZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUs Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHZj NF9kcGlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKLQkuZ2V0X21vZGVzID0gdmM0X2RwaV9j b25uZWN0b3JfZ2V0X21vZGVzLAotfTsKLQotc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yICp2 YzRfZHBpX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJCQkgICAg c3RydWN0IHZjNF9kcGkgKmRwaSkKLXsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y ID0gTlVMTDsKLQlzdHJ1Y3QgdmM0X2RwaV9jb25uZWN0b3IgKmRwaV9jb25uZWN0b3I7Ci0KLQlk cGlfY29ubmVjdG9yID0gZGV2bV9remFsbG9jKGRldi0+ZGV2LCBzaXplb2YoKmRwaV9jb25uZWN0 b3IpLAotCQkJCSAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkcGlfY29ubmVjdG9yKQotCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWNvbm5lY3RvciA9ICZkcGlfY29ubmVjdG9yLT5iYXNl OwotCi0JZHBpX2Nvbm5lY3Rvci0+ZW5jb2RlciA9IGRwaS0+ZW5jb2RlcjsKLQlkcGlfY29ubmVj dG9yLT5kcGkgPSBkcGk7Ci0KLQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZ2 YzRfZHBpX2Nvbm5lY3Rvcl9mdW5jcywKLQkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EUEkpOwot CWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZ2YzRfZHBpX2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MpOwotCi0JY29ubmVjdG9yLT5wb2xsZWQgPSAwOwotCWNvbm5lY3Rvci0+aW50 ZXJsYWNlX2FsbG93ZWQgPSAwOwotCWNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxvd2VkID0gMDsK LQotCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGRwaS0+ZW5j b2Rlcik7Ci0KLQlyZXR1cm4gY29ubmVjdG9yOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9lbmNvZGVyX2Z1bmNzIHZjNF9kcGlfZW5jb2Rlcl9mdW5jcyA9IHsKIAkuZGVzdHJveSA9IGRy bV9lbmNvZGVyX2NsZWFudXAsCiB9OwpAQCAtMjUwLDExICsxNjEsNyBAQCBzdGF0aWMgdm9pZCB2 YzRfZHBpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiAJc3Ry dWN0IHZjNF9kcGlfZW5jb2RlciAqdmM0X2VuY29kZXIgPSB0b192YzRfZHBpX2VuY29kZXIoZW5j b2Rlcik7CiAJc3RydWN0IHZjNF9kcGkgKmRwaSA9IHZjNF9lbmNvZGVyLT5kcGk7CiAKLQlkcm1f cGFuZWxfZGlzYWJsZShkcGktPnBhbmVsKTsKLQogCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcGkt PnBpeGVsX2Nsb2NrKTsKLQotCWRybV9wYW5lbF91bnByZXBhcmUoZHBpLT5wYW5lbCk7CiB9CiAK IHN0YXRpYyB2b2lkIHZjNF9kcGlfZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyKQpAQCAtMjY1LDEyICsxNzIsNiBAQCBzdGF0aWMgdm9pZCB2YzRfZHBpX2VuY29kZXJf ZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIAl1MzIgZHBpX2MgPSBEUElfRU5B QkxFIHwgRFBJX09VVFBVVF9FTkFCTEVfTU9ERTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZHJtX3Bh bmVsX3ByZXBhcmUoZHBpLT5wYW5lbCk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoIlBhbmVs IGZhaWxlZCB0byBwcmVwYXJlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChkcGktPmNvbm5l Y3Rvci0+ZGlzcGxheV9pbmZvLm51bV9idXNfZm9ybWF0cykgewogCQl1MzIgYnVzX2Zvcm1hdCA9 IGRwaS0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8uYnVzX2Zvcm1hdHNbMF07CiAKQEAgLTMyMSwx MyArMjIyLDYgQEAgc3RhdGljIHZvaWQgdmM0X2RwaV9lbmNvZGVyX2VuYWJsZShzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIpCiAJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRwaS0+cGl4ZWxf Y2xvY2spOwogCWlmIChyZXQpCiAJCURSTV9FUlJPUigiRmFpbGVkIHRvIHNldCBjbG9jayByYXRl OiAlZFxuIiwgcmV0KTsKLQotCXJldCA9IGRybV9wYW5lbF9lbmFibGUoZHBpLT5wYW5lbCk7Ci0J aWYgKHJldCkgewotCQlEUk1fRVJST1IoIlBhbmVsIGZhaWxlZCB0byBlbmFibGVcbiIpOwotCQlk cm1fcGFuZWxfdW5wcmVwYXJlKGRwaS0+cGFuZWwpOwotCQlyZXR1cm47Ci0JfQogfQogCiBzdGF0 aWMgYm9vbCB2YzRfZHBpX2VuY29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIsCkBAIC0zNTEsMjQgKzI0NSwzNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCB2YzRfZHBpX2R0X21hdGNoW10gPSB7CiAJe30KIH07CiAKLS8qIFdhbGtzIHRoZSBPRiBn cmFwaCB0byBmaW5kIHRoZSBwYW5lbCBub2RlIGFuZCB0aGVuIGFza3MgRFJNIHRvIGxvb2sKLSAq IHVwIHRoZSBwYW5lbC4KKy8qIFNldHMgdXAgdGhlIG5leHQgbGluayBpbiB0aGUgZGlzcGxheSBj aGFpbiwgd2hldGhlciBpdCdzIGEgcGFuZWwgb3IKKyAqIGEgYnJpZGdlLgogICovCi1zdGF0aWMg c3RydWN0IGRybV9wYW5lbCAqdmM0X2RwaV9nZXRfcGFuZWwoc3RydWN0IGRldmljZSAqZGV2KQor c3RhdGljIGludCB2YzRfZHBpX2luaXRfYnJpZGdlKHN0cnVjdCB2YzRfZHBpICpkcGkpCiB7Ci0J c3RydWN0IGRldmljZV9ub2RlICpwYW5lbF9ub2RlOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAg PSBkZXYtPm9mX25vZGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRwaS0+cGRldi0+ZGV2Owog CXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCWludCByZXQ7CiAKLQkvKiBkb24ndCBwcm9jZWVk IGlmIHdlIGhhdmUgYW4gZW5kcG9pbnQgYnV0IG5vIHBhbmVsX25vZGUgdGllZCB0byBpdCAqLwot CXBhbmVsX25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUobnAsIDAsIDApOwotCWlmICgh cGFuZWxfbm9kZSkKLQkJcmV0dXJuIE5VTEw7CisJcmV0ID0gZHJtX29mX2ZpbmRfcGFuZWxfb3Jf YnJpZGdlKGRldi0+b2Zfbm9kZSwgMCwgMCwKKwkJCQkJICAmcGFuZWwsICZkcGktPmJyaWRnZSk7 CisJaWYgKHJldCkgeworCQkvKiBJZiBub3RoaW5nIHdhcyBjb25uZWN0ZWQgaW4gdGhlIERULCB0 aGF0J3Mgbm90IGFuCisJCSAqIGVycm9yLgorCQkgKi8KKwkJaWYgKHJldCA9PSAtRU5PREVWKQor CQkJcmV0dXJuIDA7CisJCWVsc2UKKwkJCXJldHVybiByZXQ7CisJfQogCi0JcGFuZWwgPSBvZl9k cm1fZmluZF9wYW5lbChwYW5lbF9ub2RlKTsKLQlvZl9ub2RlX3B1dChwYW5lbF9ub2RlKTsKKwlp ZiAocGFuZWwpIHsKKwkJZHBpLT5icmlkZ2UgPSBkcm1fcGFuZWxfYnJpZGdlX2FkZChwYW5lbCwK KwkJCQkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EUEkpOworCQlkcGktPmlzX3BhbmVsX2JyaWRn ZSA9IHRydWU7CisJfQogCi0JcmV0dXJuIHBhbmVsOworCXJldHVybiBkcm1fYnJpZGdlX2F0dGFj aChkcGktPmVuY29kZXIsIGRwaS0+YnJpZGdlLCBOVUxMKTsKIH0KIAogc3RhdGljIGludCB2YzRf ZHBpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQg KmRhdGEpCkBAIC00MjIsMjAgKzMyNiwxMyBAQCBzdGF0aWMgaW50IHZjNF9kcGlfYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKIAlpZiAo cmV0KQogCQlEUk1fRVJST1IoIkZhaWxlZCB0byB0dXJuIG9uIGNvcmUgY2xvY2s6ICVkXG4iLCBy ZXQpOwogCi0JZHBpLT5wYW5lbCA9IHZjNF9kcGlfZ2V0X3BhbmVsKGRldik7Ci0KIAlkcm1fZW5j b2Rlcl9pbml0KGRybSwgZHBpLT5lbmNvZGVyLCAmdmM0X2RwaV9lbmNvZGVyX2Z1bmNzLAogCQkJ IERSTV9NT0RFX0VOQ09ERVJfRFBJLCBOVUxMKTsKIAlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGRw aS0+ZW5jb2RlciwgJnZjNF9kcGlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOwogCi0JZHBpLT5jb25u ZWN0b3IgPSB2YzRfZHBpX2Nvbm5lY3Rvcl9pbml0KGRybSwgZHBpKTsKLQlpZiAoSVNfRVJSKGRw aS0+Y29ubmVjdG9yKSkgewotCQlyZXQgPSBQVFJfRVJSKGRwaS0+Y29ubmVjdG9yKTsKKwlyZXQg PSB2YzRfZHBpX2luaXRfYnJpZGdlKGRwaSk7CisJaWYgKHJldCkKIAkJZ290byBlcnJfZGVzdHJv eV9lbmNvZGVyOwotCX0KLQotCWlmIChkcGktPnBhbmVsKQotCQlkcm1fcGFuZWxfYXR0YWNoKGRw aS0+cGFuZWwsIGRwaS0+Y29ubmVjdG9yKTsKIAogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRwaSk7 CiAKQEAgLTQ1NiwxMCArMzUzLDkgQEAgc3RhdGljIHZvaWQgdmM0X2RwaV91bmJpbmQoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCiAJc3RydWN0IHZjNF9kZXYgKnZj NCA9IHRvX3ZjNF9kZXYoZHJtKTsKIAlzdHJ1Y3QgdmM0X2RwaSAqZHBpID0gZGV2X2dldF9kcnZk YXRhKGRldik7CiAKLQlpZiAoZHBpLT5wYW5lbCkKLQkJZHJtX3BhbmVsX2RldGFjaChkcGktPnBh bmVsKTsKKwlpZiAoZHBpLT5pc19wYW5lbF9icmlkZ2UpCisJCWRybV9wYW5lbF9icmlkZ2VfcmVt b3ZlKGRwaS0+YnJpZGdlKTsKIAotCXZjNF9kcGlfY29ubmVjdG9yX2Rlc3Ryb3koZHBpLT5jb25u ZWN0b3IpOwogCWRybV9lbmNvZGVyX2NsZWFudXAoZHBpLT5lbmNvZGVyKTsKIAogCWNsa19kaXNh YmxlX3VucHJlcGFyZShkcGktPmNvcmVfY2xvY2spOwotLSAKMi4xMS4wCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK