From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christophe Leroy Subject: [PATCH 04/17] crypto: talitos - Refactor the sg in/out chain allocation Date: Thu, 5 Mar 2015 17:46:06 +0100 (CET) Message-ID: <20150305164606.40EEF1A2419@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org To: Kim Phillips , Herbert Xu , "David S. Miller" Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" List-Id: linux-crypto.vger.kernel.org VGhpcyBwYXRjaCByZWZhY3RvcnMgdGhlIGhhbmRsaW5nIG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0 IGRhdGEgdGhhdCBpcyBxdWl0ZQpzaW1pbGFyIGluIHNldmVyYWwgZnVuY3Rpb25zCgpTaWduZWQt b2ZmLWJ5OiBDaHJpc3RvcGhlIExlcm95IDxjaHJpc3RvcGhlLmxlcm95QGMtcy5mcj4KCi0tLQog ZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jIHwgMTYzICsrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgODUgaW5zZXJ0aW9ucygrKSwg NzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jIGIv ZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jCmluZGV4IGI1NGM5OTguLjRkYjM1YTYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuYworKysgYi9kcml2ZXJzL2NyeXB0by90YWxpdG9z LmMKQEAgLTEzNDEsMTYgKzEzNDEsMjYgQEAgc3RhdGljIGludCBhYmxrY2lwaGVyX3NldGtleShz dHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlciwKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGlj IHZvaWQgdW5tYXBfc2dfdGFsaXRvc19wdHIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2Nh dHRlcmxpc3QgKnNyYywKKwkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHVuc2lnbmVkIGlu dCBsZW4sCisJCQkJIHN0cnVjdCB0YWxpdG9zX2VkZXNjICplZGVzYywKKwkJCQkgc3RydWN0IHRh bGl0b3NfcHRyICpwdHJfaW4sCisJCQkJIHN0cnVjdCB0YWxpdG9zX3B0ciAqcHRyX291dCkKK3sK Kwl0YWxpdG9zX3NnX3VubWFwKGRldiwgZWRlc2MsIHNyYywgZHN0KTsKK30KKwogc3RhdGljIHZv aWQgY29tbW9uX25vbnNub29wX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVj dCB0YWxpdG9zX2VkZXNjICplZGVzYywKIAkJCQkgIHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3Qg KmFyZXEpCiB7CiAJdW5tYXBfc2luZ2xlX3RhbGl0b3NfcHRyKGRldiwgJmVkZXNjLT5kZXNjLnB0 cls1XSwgRE1BX0ZST01fREVWSUNFKTsKKworCXVubWFwX3NnX3RhbGl0b3NfcHRyKGRldiwgYXJl cS0+c3JjLCBhcmVxLT5kc3QsIGFyZXEtPm5ieXRlcywgZWRlc2MsCisJCQkgICAgICZlZGVzYy0+ ZGVzYy5wdHJbM10sICZlZGVzYy0+ZGVzYy5wdHJbNF0pOwogCXVubWFwX3NpbmdsZV90YWxpdG9z X3B0cihkZXYsICZlZGVzYy0+ZGVzYy5wdHJbMl0sIERNQV9UT19ERVZJQ0UpOwogCXVubWFwX3Np bmdsZV90YWxpdG9zX3B0cihkZXYsICZlZGVzYy0+ZGVzYy5wdHJbMV0sIERNQV9UT19ERVZJQ0Up OwogCi0JdGFsaXRvc19zZ191bm1hcChkZXYsIGVkZXNjLCBhcmVxLT5zcmMsIGFyZXEtPmRzdCk7 Ci0KIAlpZiAoZWRlc2MtPmRtYV9sZW4pCiAJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBlZGVzYy0+ ZG1hX2xpbmtfdGJsLCBlZGVzYy0+ZG1hX2xlbiwKIAkJCQkgRE1BX0JJRElSRUNUSU9OQUwpOwpA QCAtMTM3Miw2ICsxMzgyLDY1IEBAIHN0YXRpYyB2b2lkIGFibGtjaXBoZXJfZG9uZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsCiAJYXJlcS0+YmFzZS5jb21wbGV0ZSgmYXJlcS0+YmFzZSwgZXJyKTsKIH0K IAoraW50IG1hcF9zZ19pbl90YWxpdG9zX3B0cihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBz Y2F0dGVybGlzdCAqc3JjLAorCQkJICB1bnNpZ25lZCBpbnQgbGVuLCBzdHJ1Y3QgdGFsaXRvc19l ZGVzYyAqZWRlc2MsCisJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IHRh bGl0b3NfcHRyICpwdHIpCit7CisJaW50IHNnX2NvdW50OworCisJcHRyLT5sZW4gPSBjcHVfdG9f YmUxNihsZW4pOworCXB0ci0+al9leHRlbnQgPSAwOworCisJc2dfY291bnQgPSB0YWxpdG9zX21h cF9zZyhkZXYsIHNyYywgZWRlc2MtPnNyY19uZW50cyA/IDogMSwgZGlyLAorCQkJCSAgZWRlc2Mt PnNyY19jaGFpbmVkKTsKKworCWlmIChzZ19jb3VudCA9PSAxKSB7CisJCXRvX3RhbGl0b3NfcHRy KHB0ciwgc2dfZG1hX2FkZHJlc3Moc3JjKSk7CisJfSBlbHNlIHsKKwkJc2dfY291bnQgPSBzZ190 b19saW5rX3RibChzcmMsIHNnX2NvdW50LCBsZW4sCisJCQkJCSAgJmVkZXNjLT5saW5rX3RibFsw XSk7CisJCWlmIChzZ19jb3VudCA+IDEpIHsKKwkJCXRvX3RhbGl0b3NfcHRyKHB0ciwgZWRlc2Mt PmRtYV9saW5rX3RibCk7CisJCQlwdHItPmpfZXh0ZW50IHw9IERFU0NfUFRSX0xOS1RCTF9KVU1Q OworCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBlZGVzYy0+ZG1hX2xpbmtfdGJs LAorCQkJCQkJICAgZWRlc2MtPmRtYV9sZW4sCisJCQkJCQkgICBETUFfQklESVJFQ1RJT05BTCk7 CisJCX0gZWxzZSB7CisJCQkvKiBPbmx5IG9uZSBzZWdtZW50IG5vdywgc28gbm8gbGluayB0Ymwg bmVlZGVkICovCisJCQl0b190YWxpdG9zX3B0cihwdHIsIHNnX2RtYV9hZGRyZXNzKHNyYykpOwor CQl9CisJfQorCXJldHVybiBzZ19jb3VudDsKK30KKwordm9pZCBtYXBfc2dfb3V0X3RhbGl0b3Nf cHRyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkgICAg dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IHRhbGl0b3NfZWRlc2MgKmVkZXNjLAorCQkJICAgIGVu dW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICBzdHJ1Y3QgdGFsaXRvc19wdHIgKnB0 ciwgaW50IHNnX2NvdW50KQoreworCXB0ci0+bGVuID0gY3B1X3RvX2JlMTYobGVuKTsKKwlwdHIt PmpfZXh0ZW50ID0gMDsKKworCWlmIChkaXIgIT0gRE1BX05PTkUpCisJCXNnX2NvdW50ID0gdGFs aXRvc19tYXBfc2coZGV2LCBkc3QsIGVkZXNjLT5kc3RfbmVudHMgPyA6IDEsCisJCQkJCSAgZGly LCBlZGVzYy0+ZHN0X2NoYWluZWQpOworCisJaWYgKHNnX2NvdW50ID09IDEpIHsKKwkJdG9fdGFs aXRvc19wdHIocHRyLCBzZ19kbWFfYWRkcmVzcyhkc3QpKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qg dGFsaXRvc19wdHIgKmxpbmtfdGJsX3B0ciA9CisJCQkmZWRlc2MtPmxpbmtfdGJsW2VkZXNjLT5z cmNfbmVudHMgKyAxXTsKKworCQl0b190YWxpdG9zX3B0cihwdHIsIGVkZXNjLT5kbWFfbGlua190 YmwgKworCQkJCQkgICAgICAoZWRlc2MtPnNyY19uZW50cyArIDEpICoKKwkJCQkJICAgICAgc2l6 ZW9mKHN0cnVjdCB0YWxpdG9zX3B0cikpOworCQlwdHItPmpfZXh0ZW50IHw9IERFU0NfUFRSX0xO S1RCTF9KVU1QOworCQlzZ19jb3VudCA9IHNnX3RvX2xpbmtfdGJsKGRzdCwgc2dfY291bnQsIGxl biwgbGlua190YmxfcHRyKTsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBlZGVz Yy0+ZG1hX2xpbmtfdGJsLAorCQkJCQkgICBlZGVzYy0+ZG1hX2xlbiwgRE1BX0JJRElSRUNUSU9O QUwpOworCX0KK30KKwogc3RhdGljIGludCBjb21tb25fbm9uc25vb3Aoc3RydWN0IHRhbGl0b3Nf ZWRlc2MgKmVkZXNjLAogCQkJICAgc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqYXJlcSwKIAkJ CSAgIHZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTE0MDEsNTYgKzE0 NzAsMTYgQEAgc3RhdGljIGludCBjb21tb25fbm9uc25vb3Aoc3RydWN0IHRhbGl0b3NfZWRlc2Mg KmVkZXNjLAogCS8qCiAJICogY2lwaGVyIGluCiAJICovCi0JZGVzYy0+cHRyWzNdLmxlbiA9IGNw dV90b19iZTE2KGNyeXB0bGVuKTsKLQlkZXNjLT5wdHJbM10ual9leHRlbnQgPSAwOwotCi0Jc2df Y291bnQgPSB0YWxpdG9zX21hcF9zZyhkZXYsIGFyZXEtPnNyYywgZWRlc2MtPnNyY19uZW50cyA/ IDogMSwKLQkJCQkgIChhcmVxLT5zcmMgPT0gYXJlcS0+ZHN0KSA/IERNQV9CSURJUkVDVElPTkFM Ci0JCQkJCQkJICAgOiBETUFfVE9fREVWSUNFLAotCQkJCSAgZWRlc2MtPnNyY19jaGFpbmVkKTsK LQotCWlmIChzZ19jb3VudCA9PSAxKSB7Ci0JCXRvX3RhbGl0b3NfcHRyKCZkZXNjLT5wdHJbM10s IHNnX2RtYV9hZGRyZXNzKGFyZXEtPnNyYykpOwotCX0gZWxzZSB7Ci0JCXNnX2NvdW50ID0gc2df dG9fbGlua190YmwoYXJlcS0+c3JjLCBzZ19jb3VudCwgY3J5cHRsZW4sCi0JCQkJCSAgJmVkZXNj LT5saW5rX3RibFswXSk7Ci0JCWlmIChzZ19jb3VudCA+IDEpIHsKLQkJCXRvX3RhbGl0b3NfcHRy KCZkZXNjLT5wdHJbM10sIGVkZXNjLT5kbWFfbGlua190YmwpOwotCQkJZGVzYy0+cHRyWzNdLmpf ZXh0ZW50IHw9IERFU0NfUFRSX0xOS1RCTF9KVU1QOwotCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9k ZXZpY2UoZGV2LCBlZGVzYy0+ZG1hX2xpbmtfdGJsLAotCQkJCQkJICAgZWRlc2MtPmRtYV9sZW4s Ci0JCQkJCQkgICBETUFfQklESVJFQ1RJT05BTCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBPbmx5IG9u ZSBzZWdtZW50IG5vdywgc28gbm8gbGluayB0YmwgbmVlZGVkICovCi0JCQl0b190YWxpdG9zX3B0 cigmZGVzYy0+cHRyWzNdLAotCQkJCSAgICAgICBzZ19kbWFfYWRkcmVzcyhhcmVxLT5zcmMpKTsK LQkJfQotCX0KKwlzZ19jb3VudCA9IG1hcF9zZ19pbl90YWxpdG9zX3B0cihkZXYsIGFyZXEtPnNy YywgY3J5cHRsZW4sIGVkZXNjLAorCQkJICAgICAgKGFyZXEtPnNyYyA9PSBhcmVxLT5kc3QpID8g RE1BX0JJRElSRUNUSU9OQUwKKwkJCQkJCSAgICAgICA6IERNQV9UT19ERVZJQ0UsCisJCQkgICAg ICAmZGVzYy0+cHRyWzNdKTsKIAogCS8qIGNpcGhlciBvdXQgKi8KLQlkZXNjLT5wdHJbNF0ubGVu ID0gY3B1X3RvX2JlMTYoY3J5cHRsZW4pOwotCWRlc2MtPnB0cls0XS5qX2V4dGVudCA9IDA7Ci0K LQlpZiAoYXJlcS0+c3JjICE9IGFyZXEtPmRzdCkKLQkJc2dfY291bnQgPSB0YWxpdG9zX21hcF9z ZyhkZXYsIGFyZXEtPmRzdCwKLQkJCQkJICBlZGVzYy0+ZHN0X25lbnRzID8gOiAxLAotCQkJCQkg IERNQV9GUk9NX0RFVklDRSwgZWRlc2MtPmRzdF9jaGFpbmVkKTsKLQotCWlmIChzZ19jb3VudCA9 PSAxKSB7Ci0JCXRvX3RhbGl0b3NfcHRyKCZkZXNjLT5wdHJbNF0sIHNnX2RtYV9hZGRyZXNzKGFy ZXEtPmRzdCkpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCB0YWxpdG9zX3B0ciAqbGlua190YmxfcHRy ID0KLQkJCSZlZGVzYy0+bGlua190YmxbZWRlc2MtPnNyY19uZW50cyArIDFdOwotCi0JCXRvX3Rh bGl0b3NfcHRyKCZkZXNjLT5wdHJbNF0sIGVkZXNjLT5kbWFfbGlua190YmwgKwotCQkJCQkgICAg ICAoZWRlc2MtPnNyY19uZW50cyArIDEpICoKLQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB0YWxp dG9zX3B0cikpOwotCQlkZXNjLT5wdHJbNF0ual9leHRlbnQgfD0gREVTQ19QVFJfTE5LVEJMX0pV TVA7Ci0JCXNnX2NvdW50ID0gc2dfdG9fbGlua190YmwoYXJlcS0+ZHN0LCBzZ19jb3VudCwgY3J5 cHRsZW4sCi0JCQkJCSAgbGlua190YmxfcHRyKTsKLQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZp Y2UoY3R4LT5kZXYsIGVkZXNjLT5kbWFfbGlua190YmwsCi0JCQkJCSAgIGVkZXNjLT5kbWFfbGVu LCBETUFfQklESVJFQ1RJT05BTCk7Ci0JfQorCW1hcF9zZ19vdXRfdGFsaXRvc19wdHIoZGV2LCBh cmVxLT5kc3QsIGNyeXB0bGVuLCBlZGVzYywKKwkJCSAgICAgIChhcmVxLT5zcmMgPT0gYXJlcS0+ ZHN0KSA/IERNQV9OT05FCisJCQkJCQkgICAgICAgOiBETUFfRlJPTV9ERVZJQ0UsCisJCQkgICAg ICAmZGVzYy0+cHRyWzRdLCBzZ19jb3VudCk7CiAKIAkvKiBpdiBvdXQgKi8KIAltYXBfc2luZ2xl X3RhbGl0b3NfcHRyKGRldiwgJmRlc2MtPnB0cls1XSwgaXZzaXplLCBjdHgtPml2LCAwLApAQCAt MTUyMCw2ICsxNTQ5LDkgQEAgc3RhdGljIHZvaWQgY29tbW9uX25vbnNub29wX2hhc2hfdW5tYXAo c3RydWN0IGRldmljZSAqZGV2LAogCiAJdW5tYXBfc2luZ2xlX3RhbGl0b3NfcHRyKGRldiwgJmVk ZXNjLT5kZXNjLnB0cls1XSwgRE1BX0ZST01fREVWSUNFKTsKIAorCXVubWFwX3NnX3RhbGl0b3Nf cHRyKGRldiwgcmVxX2N0eC0+cHNyYywgTlVMTCwgMCwgZWRlc2MsCisJCQkgICAgICZlZGVzYy0+ ZGVzYy5wdHJbM10sIE5VTEwpOworCiAJLyogV2hlbiB1c2luZyBoYXNoY3R4LWluLCBtdXN0IHVu bWFwIGl0LiAqLwogCWlmIChlZGVzYy0+ZGVzYy5wdHJbMV0ubGVuKQogCQl1bm1hcF9zaW5nbGVf dGFsaXRvc19wdHIoZGV2LCAmZWRlc2MtPmRlc2MucHRyWzFdLApAQCAtMTUyOSw4ICsxNTYxLDYg QEAgc3RhdGljIHZvaWQgY29tbW9uX25vbnNub29wX2hhc2hfdW5tYXAoc3RydWN0IGRldmljZSAq ZGV2LAogCQl1bm1hcF9zaW5nbGVfdGFsaXRvc19wdHIoZGV2LCAmZWRlc2MtPmRlc2MucHRyWzJd LAogCQkJCQkgRE1BX1RPX0RFVklDRSk7CiAKLQl0YWxpdG9zX3NnX3VubWFwKGRldiwgZWRlc2Ms IHJlcV9jdHgtPnBzcmMsIE5VTEwpOwotCiAJaWYgKGVkZXNjLT5kbWFfbGVuKQogCQlkbWFfdW5t YXBfc2luZ2xlKGRldiwgZWRlc2MtPmRtYV9saW5rX3RibCwgZWRlc2MtPmRtYV9sZW4sCiAJCQkJ IERNQV9CSURJUkVDVElPTkFMKTsKQEAgLTE1NjksNyArMTU5OSw3IEBAIHN0YXRpYyBpbnQgY29t bW9uX25vbnNub29wX2hhc2goc3RydWN0IHRhbGl0b3NfZWRlc2MgKmVkZXNjLAogCXN0cnVjdCB0 YWxpdG9zX2FoYXNoX3JlcV9jdHggKnJlcV9jdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChhcmVxKTsK IAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHgtPmRldjsKIAlzdHJ1Y3QgdGFsaXRvc19kZXNjICpk ZXNjID0gJmVkZXNjLT5kZXNjOwotCWludCBzZ19jb3VudCwgcmV0OworCWludCByZXQ7CiAKIAkv KiBmaXJzdCBEV09SRCBlbXB0eSAqLwogCWRlc2MtPnB0clswXSA9IHplcm9fZW50cnk7CkBAIC0x NTk3LDMxICsxNjI3LDggQEAgc3RhdGljIGludCBjb21tb25fbm9uc25vb3BfaGFzaChzdHJ1Y3Qg dGFsaXRvc19lZGVzYyAqZWRlc2MsCiAJLyoKIAkgKiBkYXRhIGluCiAJICovCi0JZGVzYy0+cHRy WzNdLmxlbiA9IGNwdV90b19iZTE2KGxlbmd0aCk7Ci0JZGVzYy0+cHRyWzNdLmpfZXh0ZW50ID0g MDsKLQotCXNnX2NvdW50ID0gdGFsaXRvc19tYXBfc2coZGV2LCByZXFfY3R4LT5wc3JjLAotCQkJ CSAgZWRlc2MtPnNyY19uZW50cyA/IDogMSwKLQkJCQkgIERNQV9UT19ERVZJQ0UsIGVkZXNjLT5z cmNfY2hhaW5lZCk7Ci0KLQlpZiAoc2dfY291bnQgPT0gMSkgewotCQl0b190YWxpdG9zX3B0cigm ZGVzYy0+cHRyWzNdLCBzZ19kbWFfYWRkcmVzcyhyZXFfY3R4LT5wc3JjKSk7Ci0JfSBlbHNlIHsK LQkJc2dfY291bnQgPSBzZ190b19saW5rX3RibChyZXFfY3R4LT5wc3JjLCBzZ19jb3VudCwgbGVu Z3RoLAotCQkJCQkgICZlZGVzYy0+bGlua190YmxbMF0pOwotCQlpZiAoc2dfY291bnQgPiAxKSB7 Ci0JCQlkZXNjLT5wdHJbM10ual9leHRlbnQgfD0gREVTQ19QVFJfTE5LVEJMX0pVTVA7Ci0JCQl0 b190YWxpdG9zX3B0cigmZGVzYy0+cHRyWzNdLCBlZGVzYy0+ZG1hX2xpbmtfdGJsKTsKLQkJCWRt YV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGN0eC0+ZGV2LAotCQkJCQkJICAgZWRlc2MtPmRtYV9s aW5rX3RibCwKLQkJCQkJCSAgIGVkZXNjLT5kbWFfbGVuLAotCQkJCQkJICAgRE1BX0JJRElSRUNU SU9OQUwpOwotCQl9IGVsc2UgewotCQkJLyogT25seSBvbmUgc2VnbWVudCBub3csIHNvIG5vIGxp bmsgdGJsIG5lZWRlZCAqLwotCQkJdG9fdGFsaXRvc19wdHIoJmRlc2MtPnB0clszXSwKLQkJCQkg ICAgICAgc2dfZG1hX2FkZHJlc3MocmVxX2N0eC0+cHNyYykpOwotCQl9Ci0JfQorCW1hcF9zZ19p bl90YWxpdG9zX3B0cihkZXYsIHJlcV9jdHgtPnBzcmMsIGxlbmd0aCwgZWRlc2MsCisJCQkgICAg ICBETUFfVE9fREVWSUNFLCAmZGVzYy0+cHRyWzNdKTsKIAogCS8qIGZpZnRoIERXT1JEIGVtcHR5 ICovCiAJZGVzYy0+cHRyWzRdID0gemVyb19lbnRyeTsKLS0gCjIuMS4wCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eHBwYy1kZXYgbWFpbGluZyBs aXN0CkxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnCmh0dHBzOi8vbGlzdHMub3psYWJzLm9y Zy9saXN0aW5mby9saW51eHBwYy1kZXY=