From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville Syrjala Subject: [PATCH v2 4/9] drm/amdgpu: Use drm_connector_for_each_possible_encoder() Date: Thu, 28 Jun 2018 16:13:10 +0300 Message-ID: <20180628131315.14156-5-ville.syrjala@linux.intel.com> References: <20180628131315.14156-1-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180628131315.14156-1-ville.syrjala@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: dri-devel@lists.freedesktop.org Cc: "David (ChunMing) Zhou" , Daniel Vetter , intel-gfx@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, Alex Deucher , Harry Wentland , =?UTF-8?q?Christian=20K=C3=B6nig?= List-Id: dri-devel@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClVz ZSBkcm1fY29ubmVjdG9yX2Zvcl9lYWNoX3Bvc3NpYmxlX2VuY29kZXIoKSBmb3IgaXRlcmF0aW5n CmNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbXS4gQSBiaXQgbW9yZSBjb252ZW5pZW50IG5vdCBoYXZp bmcKdG8gZGVhbCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKdjI6IFJlcGxhY2Ug ZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9lbmNvZGVyX2lkcygpIHdpdGgKICAgIGRybV9jb25uZWN0 b3JfZm9yX2VhY2hfcG9zc2libGVfZW5jb2RlcigpIChEYW5pZWwpCgpDYzogRGFuaWVsIFZldHRl ciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KQ2M6IEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRl dWNoZXJAYW1kLmNvbT4KQ2M6ICJDaHJpc3RpYW4gS8O2bmlnIiA8Y2hyaXN0aWFuLmtvZW5pZ0Bh bWQuY29tPgpDYzogIkRhdmlkIChDaHVuTWluZykgWmhvdSIgPERhdmlkMS5aaG91QGFtZC5jb20+ CkNjOiBIYXJyeSBXZW50bGFuZCA8aGFycnkud2VudGxhbmRAYW1kLmNvbT4KQ2M6IGFtZC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ClJldmlld2VkLWJ5OiBBbGV4IERldWNoZXIgPGFs ZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+ICN2MQotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9jb25uZWN0b3JzLmMgfCA4MSArKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3ZpcnR1YWwuYyAgICAgICB8IDE1ICsrLS0t CiAyIGZpbGVzIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDcxIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jb25uZWN0b3JzLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY29ubmVjdG9ycy5jCmluZGV4IDhl NjY4NTFlYjQyNy4uODgxZjdjYjdhZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9jb25uZWN0b3JzLmMKQEAgLTIxMiwzMCArMjEyLDIxIEBAIHN0YXRpYyB2b2lk CiBhbWRncHVfY29ubmVjdG9yX3VwZGF0ZV9zY3JhdGNoX3JlZ3Moc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKIAkJCQkgICAgICBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1 cykKIHsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmJlc3RfZW5jb2RlciA9IE5VTEw7Ci0Jc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmJlc3Rf ZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzICpjb25uZWN0b3JfZnVuY3MgPSBjb25uZWN0b3ItPmhl bHBlcl9wcml2YXRlOwogCWJvb2wgY29ubmVjdGVkOwogCWludCBpOwogCiAJYmVzdF9lbmNvZGVy ID0gY29ubmVjdG9yX2Z1bmNzLT5iZXN0X2VuY29kZXIoY29ubmVjdG9yKTsKIAotCWZvciAoaSA9 IDA7IGkgPCBEUk1fQ09OTkVDVE9SX01BWF9FTkNPREVSOyBpKyspIHsKLQkJaWYgKGNvbm5lY3Rv ci0+ZW5jb2Rlcl9pZHNbaV0gPT0gMCkKLQkJCWJyZWFrOwotCi0JCWVuY29kZXIgPSBkcm1fZW5j b2Rlcl9maW5kKGNvbm5lY3Rvci0+ZGV2LCBOVUxMLAotCQkJCQljb25uZWN0b3ItPmVuY29kZXJf aWRzW2ldKTsKLQkJaWYgKCFlbmNvZGVyKQotCQkJY29udGludWU7Ci0KKwlkcm1fY29ubmVjdG9y X2Zvcl9lYWNoX3Bvc3NpYmxlX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyLCBpKSB7CiAJCWlm ICgoZW5jb2RlciA9PSBiZXN0X2VuY29kZXIpICYmIChzdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1 c19jb25uZWN0ZWQpKQogCQkJY29ubmVjdGVkID0gdHJ1ZTsKIAkJZWxzZQogCQkJY29ubmVjdGVk ID0gZmFsc2U7CiAKIAkJYW1kZ3B1X2F0b21iaW9zX2VuY29kZXJfc2V0X2Jpb3Nfc2NyYXRjaF9y ZWdzKGNvbm5lY3RvciwgZW5jb2RlciwgY29ubmVjdGVkKTsKLQogCX0KIH0KIApAQCAtMjQ2LDE3 ICsyMzcsMTEgQEAgYW1kZ3B1X2Nvbm5lY3Rvcl9maW5kX2VuY29kZXIoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciwKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJaW50IGk7 CiAKLQlmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUjsgaSsrKSB7Ci0J CWlmIChjb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldID09IDApCi0JCQlicmVhazsKLQkJZW5jb2Rl ciA9IGRybV9lbmNvZGVyX2ZpbmQoY29ubmVjdG9yLT5kZXYsIE5VTEwsCi0JCQkJCWNvbm5lY3Rv ci0+ZW5jb2Rlcl9pZHNbaV0pOwotCQlpZiAoIWVuY29kZXIpCi0JCQljb250aW51ZTsKLQorCWRy bV9jb25uZWN0b3JfZm9yX2VhY2hfcG9zc2libGVfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIs IGkpIHsKIAkJaWYgKGVuY29kZXItPmVuY29kZXJfdHlwZSA9PSBlbmNvZGVyX3R5cGUpCiAJCQly ZXR1cm4gZW5jb2RlcjsKIAl9CisKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMzYwLDExICszNDUs MTMgQEAgc3RhdGljIGludCBhbWRncHVfY29ubmVjdG9yX2RkY19nZXRfbW9kZXMoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHN0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXIgKgogYW1k Z3B1X2Nvbm5lY3Rvcl9iZXN0X3NpbmdsZV9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCiB7Ci0JaW50IGVuY19pZCA9IGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbMF07CisJ c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCWludCBpOworCisJLyogcGljayB0aGUgZmly c3Qgb25lICovCisJZHJtX2Nvbm5lY3Rvcl9mb3JfZWFjaF9wb3NzaWJsZV9lbmNvZGVyKGNvbm5l Y3RvciwgZW5jb2RlciwgaSkKKwkJcmV0dXJuIGVuY29kZXI7CiAKLQkvKiBwaWNrIHRoZSBlbmNv ZGVyIGlkcyAqLwotCWlmIChlbmNfaWQpCi0JCXJldHVybiBkcm1fZW5jb2Rlcl9maW5kKGNvbm5l Y3Rvci0+ZGV2LCBOVUxMLCBlbmNfaWQpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC05ODUsOSAr OTcyLDggQEAgYW1kZ3B1X2Nvbm5lY3Rvcl9kdmlfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5l Y3Rvci0+ZGV2OwogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKIAlzdHJ1Y3QgYW1kZ3B1X2Nvbm5lY3RvciAqYW1kZ3B1X2Nvbm5lY3RvciA9IHRvX2FtZGdw dV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBO VUxMOwogCWNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVu Y3M7Ci0JaW50IGksIHI7CisJaW50IHI7CiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQg PSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAlib29sIGRyZXQgPSBmYWxzZSwgYnJv a2VuX2VkaWQgPSBmYWxzZTsKIApAQCAtMTA3NywxNCArMTA2MywxMCBAQCBhbWRncHVfY29ubmVj dG9yX2R2aV9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3Jj ZSkKIAogCS8qIGZpbmQgYW5hbG9nIGVuY29kZXIgKi8KIAlpZiAoYW1kZ3B1X2Nvbm5lY3Rvci0+ ZGFjX2xvYWRfZGV0ZWN0KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBEUk1fQ09OTkVDVE9SX01BWF9F TkNPREVSOyBpKyspIHsKLQkJCWlmIChjb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldID09IDApCi0J CQkJYnJlYWs7Ci0KLQkJCWVuY29kZXIgPSBkcm1fZW5jb2Rlcl9maW5kKGNvbm5lY3Rvci0+ZGV2 LCBOVUxMLCBjb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldKTsKLQkJCWlmICghZW5jb2RlcikKLQkJ CQljb250aW51ZTsKKwkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCQlpbnQgaTsKIAor CQlkcm1fY29ubmVjdG9yX2Zvcl9lYWNoX3Bvc3NpYmxlX2VuY29kZXIoY29ubmVjdG9yLCBlbmNv ZGVyLCBpKSB7CiAJCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9IERSTV9NT0RFX0VOQ09E RVJfREFDICYmCiAJCQkgICAgZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9IERSTV9NT0RFX0VOQ09E RVJfVFZEQUMpCiAJCQkJY29udGludWU7CkBAIC0xMTMyLDE4ICsxMTE0LDExIEBAIGFtZGdwdV9j b25uZWN0b3JfZHZpX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29s IGZvcmNlKQogc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqCiBhbWRncHVfY29ubmVjdG9yX2R2 aV9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7Ci0JaW50IGVuY19p ZCA9IGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbMF07CiAJc3RydWN0IGFtZGdwdV9jb25uZWN0b3Ig KmFtZGdwdV9jb25uZWN0b3IgPSB0b19hbWRncHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7CiAJc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBEUk1f Q09OTkVDVE9SX01BWF9FTkNPREVSOyBpKyspIHsKLQkJaWYgKGNvbm5lY3Rvci0+ZW5jb2Rlcl9p ZHNbaV0gPT0gMCkKLQkJCWJyZWFrOwotCi0JCWVuY29kZXIgPSBkcm1fZW5jb2Rlcl9maW5kKGNv bm5lY3Rvci0+ZGV2LCBOVUxMLCBjb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldKTsKLQkJaWYgKCFl bmNvZGVyKQotCQkJY29udGludWU7CiAKKwlkcm1fY29ubmVjdG9yX2Zvcl9lYWNoX3Bvc3NpYmxl X2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyLCBpKSB7CiAJCWlmIChhbWRncHVfY29ubmVjdG9y LT51c2VfZGlnaXRhbCA9PSB0cnVlKSB7CiAJCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID09 IERSTV9NT0RFX0VOQ09ERVJfVE1EUykKIAkJCQlyZXR1cm4gZW5jb2RlcjsKQEAgLTExNTgsOCAr MTEzMyw5IEBAIGFtZGdwdV9jb25uZWN0b3JfZHZpX2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKIAogCS8qIHRoZW4gY2hlY2sgdXNlIGRpZ2l0aWFsICovCiAJLyogcGlj ayB0aGUgZmlyc3Qgb25lICovCi0JaWYgKGVuY19pZCkKLQkJcmV0dXJuIGRybV9lbmNvZGVyX2Zp bmQoY29ubmVjdG9yLT5kZXYsIE5VTEwsIGVuY19pZCk7CisJZHJtX2Nvbm5lY3Rvcl9mb3JfZWFj aF9wb3NzaWJsZV9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2RlciwgaSkKKwkJcmV0dXJuIGVuY29k ZXI7CisKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTI5NiwxNSArMTI3Miw3IEBAIHUxNiBhbWRn cHVfY29ubmVjdG9yX2VuY29kZXJfZ2V0X2RwX2JyaWRnZV9lbmNvZGVyX2lkKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uCiAJc3RydWN0IGFtZGdwdV9lbmNvZGVyICphbWRncHVfZW5jb2RlcjsK IAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBEUk1fQ09OTkVDVE9SX01BWF9FTkNPREVSOyBp KyspIHsKLQkJaWYgKGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbaV0gPT0gMCkKLQkJCWJyZWFrOwot Ci0JCWVuY29kZXIgPSBkcm1fZW5jb2Rlcl9maW5kKGNvbm5lY3Rvci0+ZGV2LCBOVUxMLAotCQkJ CQljb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldKTsKLQkJaWYgKCFlbmNvZGVyKQotCQkJY29udGlu dWU7Ci0KKwlkcm1fY29ubmVjdG9yX2Zvcl9lYWNoX3Bvc3NpYmxlX2VuY29kZXIoY29ubmVjdG9y LCBlbmNvZGVyLCBpKSB7CiAJCWFtZGdwdV9lbmNvZGVyID0gdG9fYW1kZ3B1X2VuY29kZXIoZW5j b2Rlcik7CiAKIAkJc3dpdGNoIChhbWRncHVfZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgewpAQCAtMTMy NiwxNCArMTI5NCw3IEBAIHN0YXRpYyBib29sIGFtZGdwdV9jb25uZWN0b3JfZW5jb2Rlcl9pc19o YnIyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiAJaW50IGk7CiAJYm9vbCBmb3Vu ZCA9IGZhbHNlOwogCi0JZm9yIChpID0gMDsgaSA8IERSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVI7 IGkrKykgewotCQlpZiAoY29ubmVjdG9yLT5lbmNvZGVyX2lkc1tpXSA9PSAwKQotCQkJYnJlYWs7 Ci0JCWVuY29kZXIgPSBkcm1fZW5jb2Rlcl9maW5kKGNvbm5lY3Rvci0+ZGV2LCBOVUxMLAotCQkJ CQljb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldKTsKLQkJaWYgKCFlbmNvZGVyKQotCQkJY29udGlu dWU7Ci0KKwlkcm1fY29ubmVjdG9yX2Zvcl9lYWNoX3Bvc3NpYmxlX2VuY29kZXIoY29ubmVjdG9y LCBlbmNvZGVyLCBpKSB7CiAJCWFtZGdwdV9lbmNvZGVyID0gdG9fYW1kZ3B1X2VuY29kZXIoZW5j b2Rlcik7CiAJCWlmIChhbWRncHVfZW5jb2Rlci0+Y2FwcyAmIEFUT01fRU5DT0RFUl9DQVBfUkVD T1JEX0hCUjIpCiAJCQlmb3VuZCA9IHRydWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9kY2VfdmlydHVhbC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNl X3ZpcnR1YWwuYwppbmRleCBkYmYyY2NkMGM3NDQuLjAxNmYxNTA5MzE3MyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3ZpcnR1YWwuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9kY2VfdmlydHVhbC5jCkBAIC0yNjksMjUgKzI2OSwxOCBAQCBzdGF0 aWMgaW50IGRjZV92aXJ0dWFsX2Vhcmx5X2luaXQodm9pZCAqaGFuZGxlKQogc3RhdGljIHN0cnVj dCBkcm1fZW5jb2RlciAqCiBkY2VfdmlydHVhbF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCiB7Ci0JaW50IGVuY19pZCA9IGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbMF07 CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCWludCBpOwogCi0JZm9yIChpID0gMDsg aSA8IERSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVI7IGkrKykgewotCQlpZiAoY29ubmVjdG9yLT5l bmNvZGVyX2lkc1tpXSA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJZW5jb2RlciA9IGRybV9lbmNvZGVy X2ZpbmQoY29ubmVjdG9yLT5kZXYsIE5VTEwsIGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbaV0pOwot CQlpZiAoIWVuY29kZXIpCi0JCQljb250aW51ZTsKLQorCWRybV9jb25uZWN0b3JfZm9yX2VhY2hf cG9zc2libGVfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIsIGkpIHsKIAkJaWYgKGVuY29kZXIt PmVuY29kZXJfdHlwZSA9PSBEUk1fTU9ERV9FTkNPREVSX1ZJUlRVQUwpCiAJCQlyZXR1cm4gZW5j b2RlcjsKIAl9CiAKIAkvKiBwaWNrIHRoZSBmaXJzdCBvbmUgKi8KLQlpZiAoZW5jX2lkKQotCQly ZXR1cm4gZHJtX2VuY29kZXJfZmluZChjb25uZWN0b3ItPmRldiwgTlVMTCwgZW5jX2lkKTsKKwlk cm1fY29ubmVjdG9yX2Zvcl9lYWNoX3Bvc3NpYmxlX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVy LCBpKQorCQlyZXR1cm4gZW5jb2RlcjsKKwogCXJldHVybiBOVUxMOwogfQogCi0tIAoyLjE2LjQK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=