From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2D341C2B9F4 for ; Mon, 28 Jun 2021 09:10:15 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D5BEC61C29 for ; Mon, 28 Jun 2021 09:10:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D5BEC61C29 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AD0F96E314; Mon, 28 Jun 2021 09:10:09 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4D04B6E314; Mon, 28 Jun 2021 09:10:08 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10028"; a="271774895" X-IronPort-AV: E=Sophos;i="5.83,305,1616482800"; d="scan'208";a="271774895" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2021 02:10:08 -0700 X-IronPort-AV: E=Sophos;i="5.83,305,1616482800"; d="scan'208";a="419097190" Received: from danielmi-mobl2.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.242]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2021 02:10:05 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Mon, 28 Jun 2021 11:09:42 +0200 Message-Id: <20210628090943.45690-5-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210628090943.45690-1-thomas.hellstrom@linux.intel.com> References: <20210628090943.45690-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 4/5] drm/i915/gem: Fix same-driver-another-instance dma-buf export X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Ruhl@freedesktop.org, matthew.auld@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" SWYgb3VyIGV4cG9ydGVkIGRtYS1idWZzIGFyZSBpbXBvcnRlZCBieSBhbm90aGVyIGluc3RhbmNl IG9mIG91ciBkcml2ZXIsCnRoYXQgaW5zdGFuY2Ugd2lsbCB0eXBpY2FsbHkgaGF2ZSB0aGUgaW1w b3J0ZWQgZG1hLWJ1ZnMgbG9ja2VkIGR1cmluZwptYXBfYXR0YWNobWVudCgpLiBCdXQgdGhlIGV4 cG9ydGVyIGFsc28gbG9ja3MgdGhlIHNhbWUgcmVzZXJ2YXRpb24Kb2JqZWN0IGluIHRoZSBtYXBf ZG1hX2J1ZigpIGNhbGxiYWNrLCB3aGljaCBsZWFkcyB0byByZWN1cnNpdmUgbG9ja2luZy4KCkFk ZCBhIGxpdmUgc2VsZnRlc3QgdG8gY2F0Y2ggdGhpcyBjYXNlLCBhbmQgYXMgYSB3b3JrYXJvdW5k IHVudGlsCndlIGZ1bGx5IHN1cHBvcnQgZHluYW1pYyBpbXBvcnQgYW5kIGV4cG9ydCwgZGVjbGFy ZSB0aGUgZXhwb3J0ZXIgZHluYW1pYwpieSBwcm92aWRpbmcgTk9QIHBpbigpIGFuZCB1bnBpbigp IGZ1bmN0aW9ucy4gVGhpcyBtZWFucyBvdXIgbWFwX2RtYV9idWYoKQpjYWxsYmFjayB3aWxsICph bHdheXMqIGdldCBjYWxsZWQgbG9ja2VkLCBhbmQgYnkgcGlubmluZyB1bmNvbmRpdGlvbmFsbHkK aW4gaTkxNV9nZW1fbWFwX2RtYV9idWYoKSB3ZSBtYWtlIHN1cmUgd2UgZG9uJ3QgbmVlZCB0byB1 c2UgdGhlCm1vdmVfbm90aWZ5KCkgZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBub3QgeWV0IGltcGxl bWVudGVkLgoKUmVwb3J0ZWQtYnk6IFJ1aGwsIE1pY2hhZWwgSiA8bWljaGFlbC5qLnJ1aGxAaW50 ZWwuY29tPgpDYzogUnVobCwgTWljaGFlbCBKIDxtaWNoYWVsLmoucnVobEBpbnRlbC5jb20+ClNp Z25lZC1vZmYtYnk6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4Lmlu dGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG1hYnVmLmMg ICAgfCAzMSArKysrKystCiAuLi4vZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFi dWYuYyAgfCA4MSArKysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDEwOCBpbnNl cnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9kbWFidWYuYwppbmRleCA2MTZjM2EyZjFiYWYuLjFkMWVlYjE2N2QyOCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYwpAQCAtMTIsNiArMTIsOCBAQAog I2luY2x1ZGUgImk5MTVfZ2VtX29iamVjdC5oIgogI2luY2x1ZGUgImk5MTVfc2NhdHRlcmxpc3Qu aCIKIAorSTkxNV9TRUxGVEVTVF9ERUNMQVJFKHN0YXRpYyBib29sIGZvcmNlX2RpZmZlcmVudF9k ZXZpY2VzOykKKwogc3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpkbWFfYnVmX3Rv X29iaihzdHJ1Y3QgZG1hX2J1ZiAqYnVmKQogewogCXJldHVybiB0b19pbnRlbF9ibyhidWYtPnBy aXYpOwpAQCAtMjUsNyArMjcsOSBAQCBzdGF0aWMgc3RydWN0IHNnX3RhYmxlICppOTE1X2dlbV9t YXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZQogCXN0cnVjdCBz Y2F0dGVybGlzdCAqc3JjLCAqZHN0OwogCWludCByZXQsIGk7CiAKLQlyZXQgPSBpOTE1X2dlbV9v YmplY3RfcGluX3BhZ2VzX3VubG9ja2VkKG9iaik7CisJYXNzZXJ0X29iamVjdF9oZWxkKG9iaik7 CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CiAJaWYgKHJldCkKIAkJ Z290byBlcnI7CiAKQEAgLTE2OCw2ICsxNzIsMjYgQEAgc3RhdGljIGludCBpOTE1X2dlbV9lbmRf Y3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwgZW51bSBkbWFfZGF0YV9kaXJlY3QK IAlyZXR1cm4gZXJyOwogfQogCisvKgorICogQXMgYSB3b3JrYXJvdW5kIHVudGlsIHdlIGZ1bGx5 IHN1cHBvcnQgZHluYW1pYyBpbXBvcnQgYW5kIGV4cG9ydCwKKyAqIGRlY2xhcmUgdGhlIGV4cG9y dGVyIGR5bmFtaWMgYnkgcHJvdmlkaW5nIE5PUCBwaW4oKSBhbmQgdW5waW4oKSBmdW5jdGlvbnMu CisgKiBUaGlzIG1lYW5zIG91ciBpOTE1X2dlbV9tYXBfZG1hX2J1ZigpIGNhbGxiYWNrIHdpbGwg KmFsd2F5cyogZ2V0IGNhbGxlZAorICogbG9ja2VkLCBhbmQgYnkgcGlubmluZyB1bmNvbmRpdGlv bmFsbHkgaW4gaTkxNV9nZW1fbWFwX2RtYV9idWYoKSB3ZSBtYWtlCisgKiBzdXJlIHdlIGRvbid0 IG5lZWQgdG8gdXNlIHRoZSBtb3ZlX25vdGlmeSgpIGZ1bmN0aW9uYWxpdHkgd2hpY2ggaXMKKyAq IG5vdCB5ZXQgaW1wbGVtZW50ZWQuIFR5cGljYWxseSBmb3IgdGhlIHNhbWUtZHJpdmVyLWFub3Ro ZXItaW5zdGFuY2UgY2FzZSwKKyAqIGk5MTVfZ2VtX21hcF9kbWFfYnVmKCkgd2lsbCBiZSBjYWxs ZWQgYXQgaW1wb3J0ZXIgYXR0YWNoIHRpbWUgYW5kIHRoZQorICogbWFwcGVkIHNnX2xpc3Qgd2ls bCBiZSBjYWNoZWQgYnkgdGhlIGRtYS1idWYgY29yZSBmb3IgdGhlCisgKiBkdXJhdGlvbiBvZiB0 aGUgYXR0YWNobWVudC4KKyAqLworc3RhdGljIGludCBpOTE1X2dlbV9kbWFidWZfcGluKHN0cnVj dCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgaTkxNV9nZW1fZG1hYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0 dGFjaCkKK3sKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyBpOTE1X2RtYWJ1 Zl9vcHMgPSAgewogCS5tYXBfZG1hX2J1ZiA9IGk5MTVfZ2VtX21hcF9kbWFfYnVmLAogCS51bm1h cF9kbWFfYnVmID0gaTkxNV9nZW1fdW5tYXBfZG1hX2J1ZiwKQEAgLTE3Nyw2ICsyMDEsOCBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIGk5MTVfZG1hYnVmX29wcyA9ICB7CiAJLnZ1 bm1hcCA9IGk5MTVfZ2VtX2RtYWJ1Zl92dW5tYXAsCiAJLmJlZ2luX2NwdV9hY2Nlc3MgPSBpOTE1 X2dlbV9iZWdpbl9jcHVfYWNjZXNzLAogCS5lbmRfY3B1X2FjY2VzcyA9IGk5MTVfZ2VtX2VuZF9j cHVfYWNjZXNzLAorCS5waW4gPSBpOTE1X2dlbV9kbWFidWZfcGluLAorCS51bnBpbiA9IGk5MTVf Z2VtX2RtYWJ1Zl91bnBpbiwKIH07CiAKIHN0cnVjdCBkbWFfYnVmICppOTE1X2dlbV9wcmltZV9l eHBvcnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLCBpbnQgZmxhZ3MpCkBAIC0yNDEs NyArMjY3LDggQEAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICppOTE1X2dlbV9wcmltZV9pbXBvcnQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlpZiAoZG1hX2J1Zi0+b3BzID09ICZpOTE1X2RtYWJ1 Zl9vcHMpIHsKIAkJb2JqID0gZG1hX2J1Zl90b19vYmooZG1hX2J1Zik7CiAJCS8qIGlzIGl0IGZy b20gb3VyIGRldmljZT8gKi8KLQkJaWYgKG9iai0+YmFzZS5kZXYgPT0gZGV2KSB7CisJCWlmIChv YmotPmJhc2UuZGV2ID09IGRldiAmJgorCQkgICAgIUk5MTVfU0VMRlRFU1RfT05MWShmb3JjZV9k aWZmZXJlbnRfZGV2aWNlcykpIHsKIAkJCS8qCiAJCQkgKiBJbXBvcnRpbmcgZG1hYnVmIGV4cG9y dGVkIGZyb20gb3V0IG93biBnZW0gaW5jcmVhc2VzCiAJCQkgKiByZWZjb3VudCBvbiBnZW0gaXRz ZWxmIGluc3RlYWQgb2YgZl9jb3VudCBvZiBkbWFidWYuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYwppbmRleCBkZDc0YmMwOWVj ODguLjI0NzM1ZDZjMTJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3Nl bGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v c2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jCkBAIC0zNSw3ICszNSw3IEBAIHN0YXRpYyBpbnQg aWd0X2RtYWJ1Zl9leHBvcnQodm9pZCAqYXJnKQogc3RhdGljIGludCBpZ3RfZG1hYnVmX2ltcG9y dF9zZWxmKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFy ZzsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosICppbXBvcnRfb2JqOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqaW1w b3J0OwogCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CiAJaW50IGVycjsKQEAgLTY1LDE0ICs2NSw5 MCBAQCBzdGF0aWMgaW50IGlndF9kbWFidWZfaW1wb3J0X3NlbGYodm9pZCAqYXJnKQogCQllcnIg PSAtRUlOVkFMOwogCQlnb3RvIG91dF9pbXBvcnQ7CiAJfQorCWltcG9ydF9vYmogPSB0b19pbnRl bF9ibyhpbXBvcnQpOworCisJaTkxNV9nZW1fb2JqZWN0X2xvY2soaW1wb3J0X29iaiwgTlVMTCk7 CisJZXJyID0gX19fX2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoaW1wb3J0X29iaik7CisJaTkx NV9nZW1fb2JqZWN0X3VubG9jayhpbXBvcnRfb2JqKTsKKwlpZiAoZXJyKSB7CisJCXByX2Vycigi U2FtZSBvYmplY3QgZG1hLWJ1ZiBnZXRfcGFnZXMgZmFpbGVkIVxuIik7CisJCWdvdG8gb3V0X2lt cG9ydDsKKwl9CiAKIAllcnIgPSAwOwogb3V0X2ltcG9ydDoKLQlpOTE1X2dlbV9vYmplY3RfcHV0 KHRvX2ludGVsX2JvKGltcG9ydCkpOworCWk5MTVfZ2VtX29iamVjdF9wdXQoaW1wb3J0X29iaik7 CitvdXRfZG1hYnVmOgorCWRtYV9idWZfcHV0KGRtYWJ1Zik7CitvdXQ6CisJaTkxNV9nZW1fb2Jq ZWN0X3B1dChvYmopOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2RtYWJ1Zl9p bXBvcnRfc2FtZV9kcml2ZXIodm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gYXJnOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosICppbXBvcnRf b2JqOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqaW1wb3J0OworCXN0cnVjdCBkbWFfYnVmICpk bWFidWY7CisJaW50IGVycjsKKworCWZvcmNlX2RpZmZlcmVudF9kZXZpY2VzID0gdHJ1ZTsKKwlv YmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5MTUsIFBBR0VfU0laRSk7CisJaWYg KElTX0VSUihvYmopKQorCQlnb3RvIG91dF9yZXQ7CisKKwlkbWFidWYgPSBpOTE1X2dlbV9wcmlt ZV9leHBvcnQoJm9iai0+YmFzZSwgMCk7CisJaWYgKElTX0VSUihkbWFidWYpKSB7CisJCXByX2Vy cigiaTkxNV9nZW1fcHJpbWVfZXhwb3J0IGZhaWxlZCB3aXRoIGVycj0lZFxuIiwKKwkJICAgICAg IChpbnQpUFRSX0VSUihkbWFidWYpKTsKKwkJZXJyID0gUFRSX0VSUihkbWFidWYpOworCQlnb3Rv IG91dDsKKwl9CisKKwlpbXBvcnQgPSBpOTE1X2dlbV9wcmltZV9pbXBvcnQoJmk5MTUtPmRybSwg ZG1hYnVmKTsKKwlpZiAoSVNfRVJSKGltcG9ydCkpIHsKKwkJcHJfZXJyKCJpOTE1X2dlbV9wcmlt ZV9pbXBvcnQgZmFpbGVkIHdpdGggZXJyPSVkXG4iLAorCQkgICAgICAgKGludClQVFJfRVJSKGlt cG9ydCkpOworCQllcnIgPSBQVFJfRVJSKGltcG9ydCk7CisJCWdvdG8gb3V0X2RtYWJ1ZjsKKwl9 CisKKwlpZiAoaW1wb3J0ID09ICZvYmotPmJhc2UpIHsKKwkJcHJfZXJyKCJpOTE1X2dlbV9wcmlt ZV9pbXBvcnQgcmV1c2VkIGdlbSBvYmplY3QhXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290 byBvdXRfaW1wb3J0OworCX0KKworCWltcG9ydF9vYmogPSB0b19pbnRlbF9ibyhpbXBvcnQpOwor CisJaTkxNV9nZW1fb2JqZWN0X2xvY2soaW1wb3J0X29iaiwgTlVMTCk7CisJZXJyID0gX19fX2k5 MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoaW1wb3J0X29iaik7CisJaWYgKGVycikgeworCQlwcl9l cnIoIkRpZmZlcmVudCBvYmplY3RzIGRtYS1idWYgZ2V0X3BhZ2VzIGZhaWxlZCFcbiIpOworCQlp OTE1X2dlbV9vYmplY3RfdW5sb2NrKGltcG9ydF9vYmopOworCQlnb3RvIG91dF9pbXBvcnQ7CisJ fQorCisJLyoKKwkgKiBJZiB0aGUgZXhwb3J0ZWQgb2JqZWN0IGlzIG5vdCBpbiBzeXN0ZW0gbWVt b3J5LCBzb21ldGhpbmcKKwkgKiB3ZWlyZCBpcyBnb2luZyBvbi4gVE9ETzogV2hlbiBwMnAgaXMg c3VwcG9ydGVkLCB0aGlzIGlzIG5vCisJICogbG9uZ2VyIGNvbnNpZGVyZWQgd2VpcmQuCisJICov CisJaWYgKG9iai0+bW0ucmVnaW9uICE9IGk5MTUtPm1tLnJlZ2lvbnNbSU5URUxfUkVHSU9OX1NN RU1dKSB7CisJCXByX2VycigiRXhwb3J0ZWQgZG1hLWJ1ZiBpcyBub3QgaW4gc3lzdGVtIG1lbW9y eVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCWk5MTVfZ2VtX29iamVjdF91bmxvY2soaW1w b3J0X29iaik7CisKK291dF9pbXBvcnQ6CisJaTkxNV9nZW1fb2JqZWN0X3B1dChpbXBvcnRfb2Jq KTsKIG91dF9kbWFidWY6CiAJZG1hX2J1Zl9wdXQoZG1hYnVmKTsKIG91dDoKIAlpOTE1X2dlbV9v YmplY3RfcHV0KG9iaik7CitvdXRfcmV0OgorCWZvcmNlX2RpZmZlcmVudF9kZXZpY2VzID0gZmFs c2U7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjg2LDYgKzM2Miw3IEBAIGludCBpOTE1X2dlbV9k bWFidWZfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7CiAJ c3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKIAkJU1VCVEVTVChp Z3RfZG1hYnVmX2V4cG9ydCksCisJCVNVQlRFU1QoaWd0X2RtYWJ1Zl9pbXBvcnRfc2FtZV9kcml2 ZXIpLAogCX07CiAKIAlyZXR1cm4gaTkxNV9zdWJ0ZXN0cyh0ZXN0cywgaTkxNSk7Ci0tIAoyLjMx LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=