From mboxrd@z Thu Jan 1 00:00:00 1970 From: Junwei Zhang Subject: [PATCH libdrm] amdgpu: add a function to create amdgpu bo internally (v2) Date: Thu, 9 Aug 2018 17:29:12 +0800 Message-ID: <1533806952-11227-1-git-send-email-Jerry.Zhang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Junwei Zhang , Qiang.Yu-5C7GfCeVMHo@public.gmane.org, christian.koenig-5C7GfCeVMHo@public.gmane.org YSBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGFuZCBpbml0aWFsaXplIGFtZGdwdSBibwoKdjI6 IHVwZGF0ZSBlcnJvciBoYW5kbGluZzogYWRkIGxhYmVsIGFuZCBmcmVlIGJvCgpTaWduZWQtb2Zm LWJ5OiBKdW53ZWkgWmhhbmcgPEplcnJ5LlpoYW5nQGFtZC5jb20+Ci0tLQogYW1kZ3B1L2FtZGdw dV9iby5jIHwgMTg2ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgODkgaW5zZXJ0aW9ucygrKSwgOTcgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvYW1kZ3B1L2FtZGdwdV9iby5jIGIvYW1kZ3B1L2FtZGdwdV9iby5j CmluZGV4IGI3OTBlOWIuLmE2MDg4MjAgMTAwNjQ0Ci0tLSBhL2FtZGdwdS9hbWRncHVfYm8uYwor KysgYi9hbWRncHUvYW1kZ3B1X2JvLmMKQEAgLTQ4LDExICs0OCwzMiBAQCBzdGF0aWMgdm9pZCBh bWRncHVfY2xvc2Vfa21zX2hhbmRsZShhbWRncHVfZGV2aWNlX2hhbmRsZSBkZXYsCiAJZHJtSW9j dGwoZGV2LT5mZCwgRFJNX0lPQ1RMX0dFTV9DTE9TRSwgJmFyZ3MpOwogfQogCitzdGF0aWMgaW50 IGFtZGdwdV9ib19jcmVhdGUoYW1kZ3B1X2RldmljZV9oYW5kbGUgZGV2LAorCQkJICAgIHVpbnQ2 NF90IHNpemUsCisJCQkgICAgdWludDMyX3QgaGFuZGxlLAorCQkJICAgIGFtZGdwdV9ib19oYW5k bGUgKmJ1Zl9oYW5kbGUpCit7CisJc3RydWN0IGFtZGdwdV9ibyAqYm87CisJaW50IHIgPSAwOwor CisJYm8gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBhbWRncHVfYm8pKTsKKwlpZiAoIWJvKQor CQlyZXR1cm4gLUVOT01FTTsKKworCWF0b21pY19zZXQoJmJvLT5yZWZjb3VudCwgMSk7CisJYm8t PmRldiA9IGRldjsKKwliby0+YWxsb2Nfc2l6ZSA9IHNpemU7CisJYm8tPmhhbmRsZSA9IGhhbmRs ZTsKKwlwdGhyZWFkX211dGV4X2luaXQoJmJvLT5jcHVfYWNjZXNzX211dGV4LCBOVUxMKTsKKwor CSpidWZfaGFuZGxlID0gYm87CisJcmV0dXJuIDA7Cit9CisKIGludCBhbWRncHVfYm9fYWxsb2Mo YW1kZ3B1X2RldmljZV9oYW5kbGUgZGV2LAogCQkgICAgc3RydWN0IGFtZGdwdV9ib19hbGxvY19y ZXF1ZXN0ICphbGxvY19idWZmZXIsCiAJCSAgICBhbWRncHVfYm9faGFuZGxlICpidWZfaGFuZGxl KQogewotCXN0cnVjdCBhbWRncHVfYm8gKmJvOwogCXVuaW9uIGRybV9hbWRncHVfZ2VtX2NyZWF0 ZSBhcmdzOwogCXVuc2lnbmVkIGhlYXAgPSBhbGxvY19idWZmZXItPnByZWZlcnJlZF9oZWFwOwog CWludCByID0gMDsKQEAgLTYxLDE0ICs4Miw2IEBAIGludCBhbWRncHVfYm9fYWxsb2MoYW1kZ3B1 X2RldmljZV9oYW5kbGUgZGV2LAogCWlmICghKGhlYXAgJiAoQU1ER1BVX0dFTV9ET01BSU5fR1RU IHwgQU1ER1BVX0dFTV9ET01BSU5fVlJBTSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJvID0g Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgYW1kZ3B1X2JvKSk7Ci0JaWYgKCFibykKLQkJcmV0dXJu IC1FTk9NRU07Ci0KLQlhdG9taWNfc2V0KCZiby0+cmVmY291bnQsIDEpOwotCWJvLT5kZXYgPSBk ZXY7Ci0JYm8tPmFsbG9jX3NpemUgPSBhbGxvY19idWZmZXItPmFsbG9jX3NpemU7Ci0KIAltZW1z ZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CiAJYXJncy5pbi5ib19zaXplID0gYWxsb2NfYnVm ZmVyLT5hbGxvY19zaXplOwogCWFyZ3MuaW4uYWxpZ25tZW50ID0gYWxsb2NfYnVmZmVyLT5waHlz X2FsaWdubWVudDsKQEAgLTgwLDI0ICs5MywyMyBAQCBpbnQgYW1kZ3B1X2JvX2FsbG9jKGFtZGdw dV9kZXZpY2VfaGFuZGxlIGRldiwKIAkvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyIHdpdGggdGhlIHBy ZWZlcnJlZCBoZWFwLiAqLwogCXIgPSBkcm1Db21tYW5kV3JpdGVSZWFkKGRldi0+ZmQsIERSTV9B TURHUFVfR0VNX0NSRUFURSwKIAkJCQkmYXJncywgc2l6ZW9mKGFyZ3MpKTsKKwlpZiAocikKKwkJ Z290byBvdXQ7CisKKwlyID0gYW1kZ3B1X2JvX2NyZWF0ZShkZXYsIGFsbG9jX2J1ZmZlci0+YWxs b2Nfc2l6ZSwgYXJncy5vdXQuaGFuZGxlLAorCQkJICAgICBidWZfaGFuZGxlKTsKIAlpZiAocikg ewotCQlmcmVlKGJvKTsKLQkJcmV0dXJuIHI7CisJCWFtZGdwdV9jbG9zZV9rbXNfaGFuZGxlKGRl diwgYXJncy5vdXQuaGFuZGxlKTsKKwkJZ290byBvdXQ7CiAJfQogCi0JYm8tPmhhbmRsZSA9IGFy Z3Mub3V0LmhhbmRsZTsKLQotCXB0aHJlYWRfbXV0ZXhfbG9jaygmYm8tPmRldi0+Ym9fdGFibGVf bXV0ZXgpOwotCXIgPSBoYW5kbGVfdGFibGVfaW5zZXJ0KCZiby0+ZGV2LT5ib19oYW5kbGVzLCBi by0+aGFuZGxlLCBibyk7Ci0JcHRocmVhZF9tdXRleF91bmxvY2soJmJvLT5kZXYtPmJvX3RhYmxl X211dGV4KTsKLQotCXB0aHJlYWRfbXV0ZXhfaW5pdCgmYm8tPmNwdV9hY2Nlc3NfbXV0ZXgsIE5V TEwpOwotCisJcHRocmVhZF9tdXRleF9sb2NrKCZkZXYtPmJvX3RhYmxlX211dGV4KTsKKwlyID0g aGFuZGxlX3RhYmxlX2luc2VydCgmZGV2LT5ib19oYW5kbGVzLCAoKmJ1Zl9oYW5kbGUpLT5oYW5k bGUsCisJCQkJKmJ1Zl9oYW5kbGUpOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZkZXYtPmJvX3Rh YmxlX211dGV4KTsKIAlpZiAocikKLQkJYW1kZ3B1X2JvX2ZyZWUoYm8pOwotCWVsc2UKLQkJKmJ1 Zl9oYW5kbGUgPSBibzsKLQorCQlhbWRncHVfYm9fZnJlZSgqYnVmX2hhbmRsZSk7CitvdXQ6CiAJ cmV0dXJuIHI7CiB9CiAKQEAgLTI1Niw3ICsyNjgsOSBAQCBpbnQgYW1kZ3B1X2JvX2ltcG9ydChh bWRncHVfZGV2aWNlX2hhbmRsZSBkZXYsCiB7CiAJc3RydWN0IGRybV9nZW1fb3BlbiBvcGVuX2Fy ZyA9IHt9OwogCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gTlVMTDsKLQlpbnQgcjsKKwl1aW50MzJf dCBoYW5kbGUgPSAwLCBmbGlua19uYW1lID0gMDsKKwl1aW50NjRfdCBhbGxvY19zaXplID0gMDsK KwlpbnQgciA9IDA7CiAJaW50IGRtYV9mZDsKIAl1aW50NjRfdCBkbWFfYnVmX3NpemUgPSAwOwog CkBAIC0yNjYsMjIgKzI4MCwxOCBAQCBpbnQgYW1kZ3B1X2JvX2ltcG9ydChhbWRncHVfZGV2aWNl X2hhbmRsZSBkZXYsCiAKIAkvKiBDb252ZXJ0IGEgRE1BIGJ1ZiBoYW5kbGUgdG8gYSBLTVMgaGFu ZGxlIG5vdy4gKi8KIAlpZiAodHlwZSA9PSBhbWRncHVfYm9faGFuZGxlX3R5cGVfZG1hX2J1Zl9m ZCkgewotCQl1aW50MzJfdCBoYW5kbGU7CiAJCW9mZl90IHNpemU7CiAKIAkJLyogR2V0IGEgS01T IGhhbmRsZS4gKi8KIAkJciA9IGRybVByaW1lRkRUb0hhbmRsZShkZXYtPmZkLCBzaGFyZWRfaGFu ZGxlLCAmaGFuZGxlKTsKLQkJaWYgKHIpIHsKLQkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZkZXYt PmJvX3RhYmxlX211dGV4KTsKLQkJCXJldHVybiByOwotCQl9CisJCWlmIChyKQorCQkJZ290byB1 bmxvY2s7CiAKIAkJLyogUXVlcnkgdGhlIGJ1ZmZlciBzaXplLiAqLwogCQlzaXplID0gbHNlZWso c2hhcmVkX2hhbmRsZSwgMCwgU0VFS19FTkQpOwogCQlpZiAoc2l6ZSA9PSAob2ZmX3QpLTEpIHsK LQkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZkZXYtPmJvX3RhYmxlX211dGV4KTsKLQkJCWFtZGdw dV9jbG9zZV9rbXNfaGFuZGxlKGRldiwgaGFuZGxlKTsKLQkJCXJldHVybiAtZXJybm87CisJCQly ID0gLWVycm5vOworCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJbHNlZWsoc2hhcmVkX2hhbmRsZSwg MCwgU0VFS19TRVQpOwogCkBAIC0zMjAsNTggKzMzMCwzMiBAQCBpbnQgYW1kZ3B1X2JvX2ltcG9y dChhbWRncHVfZGV2aWNlX2hhbmRsZSBkZXYsCiAJCXJldHVybiAwOwogCX0KIAotCWJvID0gY2Fs bG9jKDEsIHNpemVvZihzdHJ1Y3QgYW1kZ3B1X2JvKSk7Ci0JaWYgKCFibykgewotCQlwdGhyZWFk X211dGV4X3VubG9jaygmZGV2LT5ib190YWJsZV9tdXRleCk7Ci0JCWlmICh0eXBlID09IGFtZGdw dV9ib19oYW5kbGVfdHlwZV9kbWFfYnVmX2ZkKSB7Ci0JCQlhbWRncHVfY2xvc2Vfa21zX2hhbmRs ZShkZXYsIHNoYXJlZF9oYW5kbGUpOwotCQl9Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQogCS8q IE9wZW4gdGhlIGhhbmRsZS4gKi8KIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIGFtZGdwdV9ib19o YW5kbGVfdHlwZV9nZW1fZmxpbmtfbmFtZToKIAkJb3Blbl9hcmcubmFtZSA9IHNoYXJlZF9oYW5k bGU7CiAJCXIgPSBkcm1Jb2N0bChkZXYtPmZsaW5rX2ZkLCBEUk1fSU9DVExfR0VNX09QRU4sICZv cGVuX2FyZyk7Ci0JCWlmIChyKSB7Ci0JCQlmcmVlKGJvKTsKLQkJCXB0aHJlYWRfbXV0ZXhfdW5s b2NrKCZkZXYtPmJvX3RhYmxlX211dGV4KTsKLQkJCXJldHVybiByOwotCQl9CisJCWlmIChyKQor CQkJZ290byB1bmxvY2s7CiAKLQkJYm8tPmhhbmRsZSA9IG9wZW5fYXJnLmhhbmRsZTsKKwkJZmxp bmtfbmFtZSA9IHNoYXJlZF9oYW5kbGU7CisJCWhhbmRsZSA9IG9wZW5fYXJnLmhhbmRsZTsKKwkJ YWxsb2Nfc2l6ZSA9IG9wZW5fYXJnLnNpemU7CiAJCWlmIChkZXYtPmZsaW5rX2ZkICE9IGRldi0+ ZmQpIHsKLQkJCXIgPSBkcm1QcmltZUhhbmRsZVRvRkQoZGV2LT5mbGlua19mZCwgYm8tPmhhbmRs ZSwgRFJNX0NMT0VYRUMsICZkbWFfZmQpOwotCQkJaWYgKHIpIHsKLQkJCQlmcmVlKGJvKTsKLQkJ CQlwdGhyZWFkX211dGV4X3VubG9jaygmZGV2LT5ib190YWJsZV9tdXRleCk7Ci0JCQkJcmV0dXJu IHI7Ci0JCQl9Ci0JCQlyID0gZHJtUHJpbWVGRFRvSGFuZGxlKGRldi0+ZmQsIGRtYV9mZCwgJmJv LT5oYW5kbGUgKTsKLQorCQkJciA9IGRybVByaW1lSGFuZGxlVG9GRChkZXYtPmZsaW5rX2ZkLCBo YW5kbGUsCisJCQkJCSAgICAgICBEUk1fQ0xPRVhFQywgJmRtYV9mZCk7CisJCQlpZiAocikKKwkJ CQlnb3RvIHVubG9jazsKKwkJCXIgPSBkcm1QcmltZUZEVG9IYW5kbGUoZGV2LT5mZCwgZG1hX2Zk LCAmaGFuZGxlKTsKIAkJCWNsb3NlKGRtYV9mZCk7Ci0KLQkJCWlmIChyKSB7Ci0JCQkJZnJlZShi byk7Ci0JCQkJcHRocmVhZF9tdXRleF91bmxvY2soJmRldi0+Ym9fdGFibGVfbXV0ZXgpOwotCQkJ CXJldHVybiByOwotCQkJfQotCQl9Ci0JCWJvLT5mbGlua19uYW1lID0gc2hhcmVkX2hhbmRsZTsK LQkJYm8tPmFsbG9jX3NpemUgPSBvcGVuX2FyZy5zaXplOwotCQlyID0gaGFuZGxlX3RhYmxlX2lu c2VydCgmZGV2LT5ib19mbGlua19uYW1lcywgc2hhcmVkX2hhbmRsZSwKLQkJCQkJYm8pOwotCQlp ZiAocikgewotCQkJcHRocmVhZF9tdXRleF91bmxvY2soJmRldi0+Ym9fdGFibGVfbXV0ZXgpOwot CQkJYW1kZ3B1X2JvX2ZyZWUoYm8pOwotCQkJcmV0dXJuIHI7CisJCQlpZiAocikKKwkJCQlnb3Rv IHVubG9jazsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgYW1kZ3B1X2JvX2hhbmRsZV90eXBlX2Rt YV9idWZfZmQ6Ci0JCWJvLT5oYW5kbGUgPSBzaGFyZWRfaGFuZGxlOwotCQliby0+YWxsb2Nfc2l6 ZSA9IGRtYV9idWZfc2l6ZTsKKwkJaGFuZGxlID0gc2hhcmVkX2hhbmRsZTsKKwkJYWxsb2Nfc2l6 ZSA9IGRtYV9idWZfc2l6ZTsKIAkJYnJlYWs7CiAKIAljYXNlIGFtZGdwdV9ib19oYW5kbGVfdHlw ZV9rbXM6CkBAIC0zODAsMTYgKzM2NCwzMiBAQCBpbnQgYW1kZ3B1X2JvX2ltcG9ydChhbWRncHVf ZGV2aWNlX2hhbmRsZSBkZXYsCiAJfQogCiAJLyogSW5pdGlhbGl6ZSBpdC4gKi8KLQlhdG9taWNf c2V0KCZiby0+cmVmY291bnQsIDEpOwotCWJvLT5kZXYgPSBkZXY7Ci0JcHRocmVhZF9tdXRleF9p bml0KCZiby0+Y3B1X2FjY2Vzc19tdXRleCwgTlVMTCk7CisJciA9IGFtZGdwdV9ib19jcmVhdGUo ZGV2LCBhbGxvY19zaXplLCBoYW5kbGUsICZibyk7CisJaWYgKHIpCisJCWdvdG8gdW5sb2NrOwog Ci0JaGFuZGxlX3RhYmxlX2luc2VydCgmZGV2LT5ib19oYW5kbGVzLCBiby0+aGFuZGxlLCBibyk7 Ci0JcHRocmVhZF9tdXRleF91bmxvY2soJmRldi0+Ym9fdGFibGVfbXV0ZXgpOworCWlmIChmbGlu a19uYW1lKSB7CisJCXIgPSBoYW5kbGVfdGFibGVfaW5zZXJ0KCZkZXYtPmJvX2ZsaW5rX25hbWVz LCBmbGlua19uYW1lLAorCQkJCQlibyk7CisJCWlmIChyKQorCQkJZ290byBib19mcmVlOworCX0K KwlyID0gaGFuZGxlX3RhYmxlX2luc2VydCgmZGV2LT5ib19oYW5kbGVzLCBiby0+aGFuZGxlLCBi byk7CisJaWYgKHIpCisJCWdvdG8gYm9fZnJlZTsKIAogCW91dHB1dC0+YnVmX2hhbmRsZSA9IGJv OwogCW91dHB1dC0+YWxsb2Nfc2l6ZSA9IGJvLT5hbGxvY19zaXplOworCXB0aHJlYWRfbXV0ZXhf dW5sb2NrKCZkZXYtPmJvX3RhYmxlX211dGV4KTsKIAlyZXR1cm4gMDsKKworYm9fZnJlZToKKwlh bWRncHVfYm9fZnJlZShibyk7Cit1bmxvY2s6CisJcHRocmVhZF9tdXRleF91bmxvY2soJmRldi0+ Ym9fdGFibGVfbXV0ZXgpOworCWlmICh0eXBlID09IGFtZGdwdV9ib19oYW5kbGVfdHlwZV9kbWFf YnVmX2ZkICYmIGhhbmRsZSkKKwkJYW1kZ3B1X2Nsb3NlX2ttc19oYW5kbGUoZGV2LCBoYW5kbGUp OworCXJldHVybiByOwogfQogCiBpbnQgYW1kZ3B1X2JvX2ZyZWUoYW1kZ3B1X2JvX2hhbmRsZSBi dWZfaGFuZGxlKQpAQCAtNTc0LDcgKzU3NCw2IEBAIGludCBhbWRncHVfY3JlYXRlX2JvX2Zyb21f dXNlcl9tZW0oYW1kZ3B1X2RldmljZV9oYW5kbGUgZGV2LAogCQkJCSAgICBhbWRncHVfYm9faGFu ZGxlICpidWZfaGFuZGxlKQogewogCWludCByOwotCXN0cnVjdCBhbWRncHVfYm8gKmJvOwogCXN0 cnVjdCBkcm1fYW1kZ3B1X2dlbV91c2VycHRyIGFyZ3M7CiAKIAlhcmdzLmFkZHIgPSAodWludHB0 cl90KWNwdTsKQEAgLTU4NCwyOCArNTgzLDIxIEBAIGludCBhbWRncHVfY3JlYXRlX2JvX2Zyb21f dXNlcl9tZW0oYW1kZ3B1X2RldmljZV9oYW5kbGUgZGV2LAogCXIgPSBkcm1Db21tYW5kV3JpdGVS ZWFkKGRldi0+ZmQsIERSTV9BTURHUFVfR0VNX1VTRVJQVFIsCiAJCQkJJmFyZ3MsIHNpemVvZihh cmdzKSk7CiAJaWYgKHIpCi0JCXJldHVybiByOwotCi0JYm8gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0 cnVjdCBhbWRncHVfYm8pKTsKLQlpZiAoIWJvKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWF0b21p Y19zZXQoJmJvLT5yZWZjb3VudCwgMSk7Ci0JYm8tPmRldiA9IGRldjsKLQliby0+YWxsb2Nfc2l6 ZSA9IHNpemU7Ci0JYm8tPmhhbmRsZSA9IGFyZ3MuaGFuZGxlOwotCi0JcHRocmVhZF9tdXRleF9s b2NrKCZiby0+ZGV2LT5ib190YWJsZV9tdXRleCk7Ci0JciA9IGhhbmRsZV90YWJsZV9pbnNlcnQo JmJvLT5kZXYtPmJvX2hhbmRsZXMsIGJvLT5oYW5kbGUsIGJvKTsKLQlwdGhyZWFkX211dGV4X3Vu bG9jaygmYm8tPmRldi0+Ym9fdGFibGVfbXV0ZXgpOworCQlnb3RvIG91dDsKIAotCXB0aHJlYWRf bXV0ZXhfaW5pdCgmYm8tPmNwdV9hY2Nlc3NfbXV0ZXgsIE5VTEwpOworCXIgPSBhbWRncHVfYm9f Y3JlYXRlKGRldiwgc2l6ZSwgYXJncy5oYW5kbGUsIGJ1Zl9oYW5kbGUpOworCWlmIChyKSB7CisJ CWFtZGdwdV9jbG9zZV9rbXNfaGFuZGxlKGRldiwgYXJncy5oYW5kbGUpOworCQlnb3RvIG91dDsK Kwl9CiAKKwlwdGhyZWFkX211dGV4X2xvY2soJmRldi0+Ym9fdGFibGVfbXV0ZXgpOworCXIgPSBo YW5kbGVfdGFibGVfaW5zZXJ0KCZkZXYtPmJvX2hhbmRsZXMsICgqYnVmX2hhbmRsZSktPmhhbmRs ZSwKKwkJCQkqYnVmX2hhbmRsZSk7CisJcHRocmVhZF9tdXRleF91bmxvY2soJmRldi0+Ym9fdGFi bGVfbXV0ZXgpOwogCWlmIChyKQotCQlhbWRncHVfYm9fZnJlZShibyk7Ci0JZWxzZQotCQkqYnVm X2hhbmRsZSA9IGJvOwotCisJCWFtZGdwdV9ib19mcmVlKCpidWZfaGFuZGxlKTsKK291dDoKIAly ZXR1cm4gcjsKIH0KIAotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v YW1kLWdmeAo=