From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH 3/3] drm/vboxvideo: Replace struct vram_framebuffer with generic implemenation Date: Fri, 11 Oct 2019 15:48:08 +0200 Message-ID: <20191011134808.3955-4-tzimmermann@suse.de> References: <20191011134808.3955-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4937D6EC42 for ; Fri, 11 Oct 2019 13:48:20 +0000 (UTC) In-Reply-To: <20191011134808.3955-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: hdegoede@redhat.com, airlied@linux.ie, daniel@ffwll.ch Cc: Thomas Zimmermann , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhlIHZib3h2aWRlbyBkcml2ZXIncyBzdHJ1Y3QgdnJhbV9mcmFtZWJ1ZmZlciBzdG9yZXMgYSBE Uk0gZnJhbWVidWZmZXIKd2l0aCBhbiBhc3NpY2lhdGVkIEdFTSBvYmplY3QuIFRoaXMgZnVuY3Rp b25hbGl0eSBpcyBhbHNvIHByb3ZpZGVkIGJ5CmdlbmVyaWMgY29kZS4gU3dpdGNoIHZib3h2aWRl byBvdmVyLgoKU2lnbmVkLW9mZi1ieTogVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1 c2UuZGU+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X2Rydi5oICB8IDE0IC0t LS0tLS0KIGRyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tYWluLmMgfCA2MCAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2Rl LmMgfCA0OSArKysrLS0tLS0tLS0tLS0tLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0 aW9ucygrKSwgMTE1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92 Ym94dmlkZW8vdmJveF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9kcnYu aAppbmRleCA5OTc2NTU0YjU4Y2IuLjg3NDIxOTAzODE2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL3Zib3h2aWRlby92Ym94X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlk ZW8vdmJveF9kcnYuaApAQCAtNDUsMTEgKzQ1LDYgQEAKIAkJCQlzaXplb2Yoc3RydWN0IGhnc21p X2hvc3RfZmxhZ3MpKQogI2RlZmluZSBIT1NUX0ZMQUdTX09GRlNFVCBHVUVTVF9IRUFQX1VTQUJM RV9TSVpFCiAKLXN0cnVjdCB2Ym94X2ZyYW1lYnVmZmVyIHsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyIGJhc2U7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci19OwotCiBzdHJ1Y3QgdmJv eF9wcml2YXRlIHsKIAkvKiBNdXN0IGJlIGZpcnN0OyBvciB3ZSBtdXN0IGRlZmluZSBvdXIgb3du IHJlbGVhc2UgY2FsbGJhY2sgKi8KIAlzdHJ1Y3QgZHJtX2RldmljZSBkZGV2OwpAQCAtMTMyLDcg KzEyNyw2IEBAIHN0cnVjdCB2Ym94X2VuY29kZXIgewogI2RlZmluZSB0b192Ym94X2NydGMoeCkg Y29udGFpbmVyX29mKHgsIHN0cnVjdCB2Ym94X2NydGMsIGJhc2UpCiAjZGVmaW5lIHRvX3Zib3hf Y29ubmVjdG9yKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgdmJveF9jb25uZWN0b3IsIGJhc2Up CiAjZGVmaW5lIHRvX3Zib3hfZW5jb2Rlcih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IHZib3hf ZW5jb2RlciwgYmFzZSkKLSNkZWZpbmUgdG9fdmJveF9mcmFtZWJ1ZmZlcih4KSBjb250YWluZXJf b2YoeCwgc3RydWN0IHZib3hfZnJhbWVidWZmZXIsIGJhc2UpCiAKIGJvb2wgdmJveF9jaGVja19z dXBwb3J0ZWQodTE2IGlkKTsKIGludCB2Ym94X2h3X2luaXQoc3RydWN0IHZib3hfcHJpdmF0ZSAq dmJveCk7CkBAIC0xNDMsMTcgKzEzNyw5IEBAIHZvaWQgdmJveF9tb2RlX2Zpbmkoc3RydWN0IHZi b3hfcHJpdmF0ZSAqdmJveCk7CiAKIHZvaWQgdmJveF9yZXBvcnRfY2FwcyhzdHJ1Y3QgdmJveF9w cml2YXRlICp2Ym94KTsKIAotaW50IHZib3hfZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgdmJveF9w cml2YXRlICp2Ym94LAotCQkJICBzdHJ1Y3QgdmJveF9mcmFtZWJ1ZmZlciAqdmJveF9mYiwKLQkJ CSAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kLAotCQkJICBzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaik7Ci0KIGludCB2Ym94X21tX2luaXQoc3RydWN0IHZib3hfcHJp dmF0ZSAqdmJveCk7CiB2b2lkIHZib3hfbW1fZmluaShzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94 KTsKIAotaW50IHZib3hfZ2VtX2NyZWF0ZShzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94LAotCQkg ICAgdTMyIHNpemUsIGJvb2wgaXNrZXJuZWwsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iaik7 Ci0KIC8qIHZib3hfaXJxLmMgKi8KIGludCB2Ym94X2lycV9pbml0KHN0cnVjdCB2Ym94X3ByaXZh dGUgKnZib3gpOwogdm9pZCB2Ym94X2lycV9maW5pKHN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3gp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X21haW4uYyBiL2Ry aXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tYWluLmMKaW5kZXggYmEyNGE5MjkzZDE3Li45 ZGNhYjExNWEyNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9t YWluLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X21haW4uYwpAQCAtMTcs MTcgKzE3LDYgQEAKICNpbmNsdWRlICJ2Ym94dmlkZW9fZ3Vlc3QuaCIKICNpbmNsdWRlICJ2Ym94 dmlkZW9fdmJlLmgiCiAKLXN0YXRpYyB2b2lkIHZib3hfdXNlcl9mcmFtZWJ1ZmZlcl9kZXN0cm95 KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQotewotCXN0cnVjdCB2Ym94X2ZyYW1lYnVmZmVy ICp2Ym94X2ZiID0gdG9fdmJveF9mcmFtZWJ1ZmZlcihmYik7Ci0KLQlpZiAodmJveF9mYi0+b2Jq KQotCQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQodmJveF9mYi0+b2JqKTsKLQotCWRybV9m cmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKLQlrZnJlZShmYik7Ci19Ci0KIHZvaWQgdmJveF9yZXBv cnRfY2FwcyhzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94KQogewogCXUzMiBjYXBzID0gVkJWQUNB UFNfRElTQUJMRV9DVVJTT1JfSU5URUdSQVRJT04gfApAQCAtMzksMjkgKzI4LDYgQEAgdm9pZCB2 Ym94X3JlcG9ydF9jYXBzKHN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3gpCiAJaGdzbWlfc2VuZF9j YXBzX2luZm8odmJveC0+Z3Vlc3RfcG9vbCwgY2Fwcyk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIHZib3hfZmJfZnVuY3MgPSB7Ci0JLmRlc3Ryb3kgPSB2 Ym94X3VzZXJfZnJhbWVidWZmZXJfZGVzdHJveSwKLQkuZGlydHkgPSBkcm1fYXRvbWljX2hlbHBl cl9kaXJ0eWZiLAotfTsKLQotaW50IHZib3hfZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgdmJveF9w cml2YXRlICp2Ym94LAotCQkJICBzdHJ1Y3QgdmJveF9mcmFtZWJ1ZmZlciAqdmJveF9mYiwKLQkJ CSAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kLAotCQkJICBzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaikKLXsKLQlpbnQgcmV0OwotCi0JZHJtX2hlbHBlcl9tb2RlX2Zp bGxfZmJfc3RydWN0KCZ2Ym94LT5kZGV2LCAmdmJveF9mYi0+YmFzZSwgbW9kZV9jbWQpOwotCXZi b3hfZmItPm9iaiA9IG9iajsKLQlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdCgmdmJveC0+ZGRl diwgJnZib3hfZmItPmJhc2UsICZ2Ym94X2ZiX2Z1bmNzKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9F UlJPUigiZnJhbWVidWZmZXIgaW5pdCBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7 Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmJveF9hY2NlbF9pbml0KHN0cnVj dCB2Ym94X3ByaXZhdGUgKnZib3gpCiB7CiAJc3RydWN0IHZidmFfYnVmZmVyICp2YnZhOwpAQCAt MjEzLDI5ICsxNzksMyBAQCB2b2lkIHZib3hfaHdfZmluaShzdHJ1Y3QgdmJveF9wcml2YXRlICp2 Ym94KQogCWdlbl9wb29sX2Rlc3Ryb3kodmJveC0+Z3Vlc3RfcG9vbCk7CiAJcGNpX2lvdW5tYXAo dmJveC0+ZGRldi5wZGV2LCB2Ym94LT5ndWVzdF9oZWFwKTsKIH0KLQotaW50IHZib3hfZ2VtX2Ny ZWF0ZShzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94LAotCQkgICAgdTMyIHNpemUsIGJvb2wgaXNr ZXJuZWwsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iaikKLXsKLQlzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvOwotCWludCByZXQ7Ci0KLQkqb2JqID0gTlVMTDsKLQotCXNpemUgPSBy b3VuZHVwKHNpemUsIFBBR0VfU0laRSk7Ci0JaWYgKHNpemUgPT0gMCkKLQkJcmV0dXJuIC1FSU5W QUw7Ci0KLQlnYm8gPSBkcm1fZ2VtX3ZyYW1fY3JlYXRlKCZ2Ym94LT5kZGV2LCAmdmJveC0+ZGRl di52cmFtX21tLT5iZGV2LAotCQkJCSAgc2l6ZSwgMCwgZmFsc2UpOwotCWlmIChJU19FUlIoZ2Jv KSkgewotCQlyZXQgPSBQVFJfRVJSKGdibyk7Ci0JCWlmIChyZXQgIT0gLUVSRVNUQVJUU1lTKQot CQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgR0VNIG9iamVjdFxuIik7Ci0JCXJldHVy biByZXQ7Ci0JfQotCi0JKm9iaiA9ICZnYm8tPmJvLmJhc2U7Ci0KLQlyZXR1cm4gMDsKLX0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2RlLmMgYi9kcml2ZXJz L2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jCmluZGV4IDcwNzU0ZTlhMDg3ZS4uZTA5ZjVm MzhmYmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2RlLmMKQEAgLTE1LDYgKzE1 LDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0v ZHJtX2ZiX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9wbGFu ZV9oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgogI2luY2x1ZGUg PGRybS9kcm1fdmJsYW5rLmg+CkBAIC0xNzMsOCArMTc0LDcgQEAgc3RhdGljIHZvaWQgdmJveF9j cnRjX3NldF9iYXNlX2FuZF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkJc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCQkJCWludCB4LCBpbnQgeSkKIHsKLQlzdHJ1Y3QgZHJt X2dlbV92cmFtX29iamVjdCAqZ2JvID0KLQkJZHJtX2dlbV92cmFtX29mX2dlbSh0b192Ym94X2Zy YW1lYnVmZmVyKGZiKS0+b2JqKTsKKwlzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvID0g ZHJtX2dlbV92cmFtX29mX2dlbShmYi0+b2JqWzBdKTsKIAlzdHJ1Y3QgdmJveF9wcml2YXRlICp2 Ym94ID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgdmJveF9jcnRjICp2Ym94X2Ny dGMgPSB0b192Ym94X2NydGMoY3J0Yyk7CiAJYm9vbCBuZWVkc19tb2Rlc2V0ID0gZHJtX2F0b21p Y19jcnRjX25lZWRzX21vZGVzZXQoY3J0Yy0+c3RhdGUpOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIHN0 YXRpYyBpbnQgdmJveF9wcmltYXJ5X3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs CiAJaWYgKCFuZXdfc3RhdGUtPmZiKQogCQlyZXR1cm4gMDsKIAotCWdibyA9IGRybV9nZW1fdnJh bV9vZl9nZW0odG9fdmJveF9mcmFtZWJ1ZmZlcihuZXdfc3RhdGUtPmZiKS0+b2JqKTsKKwlnYm8g PSBkcm1fZ2VtX3ZyYW1fb2ZfZ2VtKG5ld19zdGF0ZS0+ZmItPm9ialswXSk7CiAJcmV0ID0gZHJt X2dlbV92cmFtX3BpbihnYm8sIERSTV9HRU1fVlJBTV9QTF9GTEFHX1ZSQU0pOwogCWlmIChyZXQp CiAJCURSTV9XQVJOKCJFcnJvciAlZCBwaW5uaW5nIG5ldyBmYiwgb3V0IG9mIHZpZGVvIG1lbT9c biIsIHJldCk7CkBAIC0zNjAsNyArMzYwLDcgQEAgc3RhdGljIHZvaWQgdmJveF9wcmltYXJ5X2Ns ZWFudXBfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJaWYgKCFvbGRfc3RhdGUtPmZiKQog CQlyZXR1cm47CiAKLQlnYm8gPSBkcm1fZ2VtX3ZyYW1fb2ZfZ2VtKHRvX3Zib3hfZnJhbWVidWZm ZXIob2xkX3N0YXRlLT5mYiktPm9iaik7CisJZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShvbGRf c3RhdGUtPmZiLT5vYmpbMF0pOwogCWRybV9nZW1fdnJhbV91bnBpbihnYm8pOwogfQogCkBAIC00 MjEsOCArNDIxLDcgQEAgc3RhdGljIHZvaWQgdmJveF9jdXJzb3JfYXRvbWljX3VwZGF0ZShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJY29udGFpbmVyX29mKHBsYW5lLT5kZXYsIHN0cnVjdCB2 Ym94X3ByaXZhdGUsIGRkZXYpOwogCXN0cnVjdCB2Ym94X2NydGMgKnZib3hfY3J0YyA9IHRvX3Zi b3hfY3J0YyhwbGFuZS0+c3RhdGUtPmNydGMpOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcGxhbmUtPnN0YXRlLT5mYjsKLQlzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvID0K LQkJZHJtX2dlbV92cmFtX29mX2dlbSh0b192Ym94X2ZyYW1lYnVmZmVyKGZiKS0+b2JqKTsKKwlz dHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShmYi0+ b2JqWzBdKTsKIAl1MzIgd2lkdGggPSBwbGFuZS0+c3RhdGUtPmNydGNfdzsKIAl1MzIgaGVpZ2h0 ID0gcGxhbmUtPnN0YXRlLT5jcnRjX2g7CiAJc2l6ZV90IGRhdGFfc2l6ZSwgbWFza19zaXplOwpA QCAtNTAyLDcgKzUwMSw3IEBAIHN0YXRpYyBpbnQgdmJveF9jdXJzb3JfcHJlcGFyZV9mYihzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlpZiAoIW5ld19zdGF0ZS0+ZmIpCiAJCXJldHVybiAwOwog Ci0JZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbSh0b192Ym94X2ZyYW1lYnVmZmVyKG5ld19zdGF0 ZS0+ZmIpLT5vYmopOworCWdibyA9IGRybV9nZW1fdnJhbV9vZl9nZW0obmV3X3N0YXRlLT5mYi0+ b2JqWzBdKTsKIAlyZXR1cm4gZHJtX2dlbV92cmFtX3BpbihnYm8sIERSTV9HRU1fVlJBTV9QTF9G TEFHX1NZU1RFTSk7CiB9CiAKQEAgLTUxNCw3ICs1MTMsNyBAQCBzdGF0aWMgdm9pZCB2Ym94X2N1 cnNvcl9jbGVhbnVwX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCWlmICghcGxhbmUtPnN0 YXRlLT5mYikKIAkJcmV0dXJuOwogCi0JZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbSh0b192Ym94 X2ZyYW1lYnVmZmVyKHBsYW5lLT5zdGF0ZS0+ZmIpLT5vYmopOworCWdibyA9IGRybV9nZW1fdnJh bV9vZl9nZW0ocGxhbmUtPnN0YXRlLT5mYi0+b2JqWzBdKTsKIAlkcm1fZ2VtX3ZyYW1fdW5waW4o Z2JvKTsKIH0KIApAQCAtODkxLDQwICs4OTAsOCBAQCBzdGF0aWMgaW50IHZib3hfY29ubmVjdG9y X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKnZib3hfdXNlcl9mcmFtZWJ1ZmZlcl9jcmVhdGUoCi0JCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkcm1fZmlsZSAqZmlscCwKLQkJY29uc3Qg c3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQotewotCXN0cnVjdCB2Ym94X3ByaXZh dGUgKnZib3ggPQotCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgdmJveF9wcml2YXRlLCBkZGV2 KTsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgdmJveF9mcmFtZWJ1ZmZl ciAqdmJveF9mYjsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQotCW9iaiA9IGRybV9nZW1fb2JqZWN0 X2xvb2t1cChmaWxwLCBtb2RlX2NtZC0+aGFuZGxlc1swXSk7Ci0JaWYgKCFvYmopCi0JCXJldHVy biBFUlJfUFRSKC1FTk9FTlQpOwotCi0JdmJveF9mYiA9IGt6YWxsb2Moc2l6ZW9mKCp2Ym94X2Zi KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF2Ym94X2ZiKQotCQlnb3RvIGVycl91bnJlZl9vYmo7Ci0K LQlyZXQgPSB2Ym94X2ZyYW1lYnVmZmVyX2luaXQodmJveCwgdmJveF9mYiwgbW9kZV9jbWQsIG9i aik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfZnJlZV92Ym94X2ZiOwotCi0JcmV0dXJuICZ2Ym94 X2ZiLT5iYXNlOwotCi1lcnJfZnJlZV92Ym94X2ZiOgotCWtmcmVlKHZib3hfZmIpOwotZXJyX3Vu cmVmX29iajoKLQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQob2JqKTsKLQlyZXR1cm4gRVJS X1BUUihyZXQpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5j cyB2Ym94X21vZGVfZnVuY3MgPSB7Ci0JLmZiX2NyZWF0ZSA9IHZib3hfdXNlcl9mcmFtZWJ1ZmZl cl9jcmVhdGUsCisJLmZiX2NyZWF0ZSA9IGRybV9nZW1fZmJfY3JlYXRlLAogCS5hdG9taWNfY2hl Y2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKIAkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9t aWNfaGVscGVyX2NvbW1pdCwKIH07Ci0tIAoyLjIzLjAKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==