From mboxrd@z Thu Jan 1 00:00:00 1970 From: robert.foss@collabora.com Subject: [RFC i-g-t 7/7] lib/stubs: Add stubs for intel_bufmgr. Date: Wed, 25 May 2016 14:18:56 -0400 Message-ID: <1464200336-15671-8-git-send-email-robert.foss@collabora.com> References: <1464200336-15671-1-git-send-email-robert.foss@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) by gabe.freedesktop.org (Postfix) with ESMTPS id 96D116E9F1 for ; Wed, 25 May 2016 18:19:16 +0000 (UTC) In-Reply-To: <1464200336-15671-1-git-send-email-robert.foss@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: daniel.vetter@ffwll.ch, daniel.stone@collabora.com, marius.c.vlad@intel.com, tomeu.vizoso@collabora.com, emil.velikov@collabora.com, chris@chris-wilson.co.uk Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUm9iZXJ0IEZvc3MgPHJvYmVydC5mb3NzQGNvbGxhYm9yYS5jb20+CgpUaGlzIHBhdGNo IHByb3ZpZGVzIHN0dWJzIGZvciBmdW5jdGlvbmFsaXR5IG90aGVyd2lzZSBwcm92aWRlZCBieSBp bnRlbF9idWZtZ3IuCgpUaGUgc3R1YmJlZCBmdW5jdGlvbnMgYWxsIGZhaWwgd2l0aCBhIGNhbGwg dG8gaWd0X3JlcXVpcmVfZihmYWxzZSwiIikuCkRlZmluZXMgYW5kIGVudW1zIGhhdmUgYmVlbiBj b3BpZWQgZnJvbSBsaWJkcm1faW50ZWwuCgpEdWUgdG8gdGhlIHN0dWJiZWQgdGVzdHMgZmFpbGlu ZyB3aXRoIGFuIGlndF9yZXF1aXJlX2YoKSBjYWxsLCB0aGVzZSBzdHVicyBhcmUKbm90IHdlbGwg c3VpdGVkIGZvciBub24tdGVzdHMsIHNpbmNlIHRvb2xzL2JlbmNobWFya3MvZXRjICdza2lwcGlu ZycKZXhlY3V0aW9uIGlzIHVuaGVscGZ1bC4KClNpZ25lZC1vZmYtYnk6IFJvYmVydCBGb3NzIDxy b2JlcnQuZm9zc0Bjb2xsYWJvcmEuY29tPgotLS0KIGxpYi9NYWtlZmlsZS5hbSAgICAgICAgICAg ICAgfCAgIDcgKwogbGliL3N0dWJzL2RybS9pbnRlbF9idWZtZ3IuYyB8IDI3NSArKysrKysrKysr KysrKysrKysrKysrKysrKysKIGxpYi9zdHVicy9kcm0vaW50ZWxfYnVmbWdyLmggfCA0MzAgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2Vk LCA3MTIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9zdHVicy9kcm0vaW50 ZWxfYnVmbWdyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvc3R1YnMvZHJtL2ludGVsX2J1Zm1n ci5oCgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLmFtIGIvbGliL01ha2VmaWxlLmFtCmluZGV4 IGQyYWU5OGQuLjNlMTJmMjUgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5hbQorKysgYi9saWIv TWFrZWZpbGUuYW0KQEAgLTE0LDYgKzE0LDEzIEBAIGlmIEhBVkVfTElCRFJNX1ZDNAogICAgICAg ICBpZ3RfdmM0LmgKIGVuZGlmCiAKK2lmIEhBVkVfTElCRFJNX0lOVEVMCitlbHNlCisgICAgbGli aW50ZWxfdG9vbHNfbGFfU09VUkNFUyArPSAJXAorICAgICAgICBzdHVicy9kcm0vaW50ZWxfYnVm bWdyLmMJXAorICAgICAgICBzdHVicy9kcm0vaW50ZWxfYnVmbWdyLmgKK2VuZGlmCisKIEFNX0NQ UEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpCiBBTV9DRkxBR1MgPSAkKENXQVJORkxBR1MpICQoRFJN X0NGTEFHUykgJChQQ0lBQ0NFU1NfQ0ZMQUdTKSAkKExJQlVOV0lORF9DRkxBR1MpICQoREVCVUdf Q0ZMQUdTKSBcCiAJICAgIC1ESUdUX1NSQ0RJUj1cIiIkKGFic190b3Bfc3JjZGlyKS90ZXN0cyJc IiBcCmRpZmYgLS1naXQgYS9saWIvc3R1YnMvZHJtL2ludGVsX2J1Zm1nci5jIGIvbGliL3N0dWJz L2RybS9pbnRlbF9idWZtZ3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l YWYxYjNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3N0dWJzL2RybS9pbnRlbF9idWZtZ3IuYwpA QCAtMCwwICsxLDI3NSBAQAorI2lmbmRlZiBIQVZFX0xJQkRSTV9JTlRFTAorCisjaW5jbHVkZSA8 ZHJtLmg+CisjaW5jbHVkZSA8aTkxNV9kcm0uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5j bHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJpZ3RfY29yZS5oIgorI2luY2x1ZGUgImludGVs X2J1Zm1nci5oIgorCisKK2RybV9pbnRlbF9idWZtZ3IgKmRybV9pbnRlbF9idWZtZ3JfZ2VtX2lu aXQoaW50IGZkLCBpbnQgYmF0Y2hfc2l6ZSkKK3sKKwlpZ3RfcmVxdWlyZV9mKGZhbHNlLCAiTm90 IGNvbXBpbGVkIHdpdGggbGliZHJtX2ludGVsIHN1cHBvcnRcbiIpOworCXJldHVybiAoZHJtX2lu dGVsX2J1Zm1nciAqKSBOVUxMOworfQorCit2b2lkIGRybV9pbnRlbF9ib191bnJlZmVyZW5jZShk cm1faW50ZWxfYm8gKmJvKQoreworCWlndF9yZXF1aXJlX2YoZmFsc2UsICJOb3QgY29tcGlsZWQg d2l0aCBsaWJkcm1faW50ZWwgc3VwcG9ydFxuIik7Cit9CisKK2RybV9pbnRlbF9ibyAqZHJtX2lu dGVsX2JvX2FsbG9jKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwgY29uc3QgY2hhciAqbmFtZSwK KwkJCQkgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgYWxpZ25tZW50KQoreworCWln dF9yZXF1aXJlX2YoZmFsc2UsICJOb3QgY29tcGlsZWQgd2l0aCBsaWJkcm1faW50ZWwgc3VwcG9y dFxuIik7CisJcmV0dXJuIChkcm1faW50ZWxfYm8gKikgTlVMTDsKK30KKworaW50IGRybV9pbnRl bF9ib19zdWJkYXRhKGRybV9pbnRlbF9ibyAqYm8sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJ IHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKwlpZ3RfcmVxdWlyZV9m KGZhbHNlLCAiTm90IGNvbXBpbGVkIHdpdGggbGliZHJtX2ludGVsIHN1cHBvcnRcbiIpOworCXJl dHVybiAwOworfQorCitpbnQgZHJtX2ludGVsX2dlbV9ib19jb250ZXh0X2V4ZWMoZHJtX2ludGVs X2JvICpibywgZHJtX2ludGVsX2NvbnRleHQgKmN0eCwKKwkJCQkgIGludCB1c2VkLCB1bnNpZ25l ZCBpbnQgZmxhZ3MpCit7CisJaWd0X3JlcXVpcmVfZihmYWxzZSwgIk5vdCBjb21waWxlZCB3aXRo IGxpYmRybV9pbnRlbCBzdXBwb3J0XG4iKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRybV9pbnRl bF9ib19lbWl0X3JlbG9jKGRybV9pbnRlbF9ibyAqYm8sIHVpbnQzMl90IG9mZnNldCwKKwkJCQlk cm1faW50ZWxfYm8gKnRhcmdldF9ibywgdWludDMyX3QgdGFyZ2V0X29mZnNldCwKKwkJCQl1aW50 MzJfdCByZWFkX2RvbWFpbnMsIHVpbnQzMl90IHdyaXRlX2RvbWFpbikKK3sKKwlpZ3RfcmVxdWly ZV9mKGZhbHNlLCAiTm90IGNvbXBpbGVkIHdpdGggbGliZHJtX2ludGVsIHN1cHBvcnRcbiIpOwor CXJldHVybiAwOworfQorCitpbnQgZHJtX2ludGVsX2JvX2VtaXRfcmVsb2NfZmVuY2UoZHJtX2lu dGVsX2JvICpibywgdWludDMyX3Qgb2Zmc2V0LAorCQkJCSAgZHJtX2ludGVsX2JvICp0YXJnZXRf Ym8sCisJCQkJICB1aW50MzJfdCB0YXJnZXRfb2Zmc2V0LAorCQkJCSAgdWludDMyX3QgcmVhZF9k b21haW5zLCB1aW50MzJfdCB3cml0ZV9kb21haW4pCit7CisJaWd0X3JlcXVpcmVfZihmYWxzZSwg Ik5vdCBjb21waWxlZCB3aXRoIGxpYmRybV9pbnRlbCBzdXBwb3J0XG4iKTsKKwlyZXR1cm4gMDsK K30KKworaW50IGRybV9pbnRlbF9ib19nZXRfdGlsaW5nKGRybV9pbnRlbF9ibyAqYm8sIHVpbnQz Ml90ICogdGlsaW5nX21vZGUsCisJCQkgICAgdWludDMyX3QgKiBzd2l6emxlX21vZGUpCit7CisJ aWd0X3JlcXVpcmVfZihmYWxzZSwgIk5vdCBjb21waWxlZCB3aXRoIGxpYmRybV9pbnRlbCBzdXBw b3J0XG4iKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRybV9pbnRlbF9ib19tcmJfZXhlYyhkcm1f aW50ZWxfYm8gKmJvLCBpbnQgdXNlZCwKKwkJCSAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBy ZWN0cywgaW50IG51bV9jbGlwcmVjdHMsCisJCQkgIGludCBEUjQsIHVuc2lnbmVkIGludCBmbGFn cykKK3sKKwlpZ3RfcmVxdWlyZV9mKGZhbHNlLCAiTm90IGNvbXBpbGVkIHdpdGggbGliZHJtX2lu dGVsIHN1cHBvcnRcbiIpOworCXJldHVybiAwOworfQorCit2b2lkIGRybV9pbnRlbF9idWZtZ3Jf Z2VtX3NldF9hdWJfYW5ub3RhdGlvbnMoZHJtX2ludGVsX2JvICpibywKKwkJCQkJICAgICAgZHJt X2ludGVsX2F1Yl9hbm5vdGF0aW9uICphbm5vdGF0aW9ucywKKwkJCQkJICAgICAgdW5zaWduZWQg Y291bnQpCit7CisJaWd0X3JlcXVpcmVfZihmYWxzZSwgIk5vdCBjb21waWxlZCB3aXRoIGxpYmRy bV9pbnRlbCBzdXBwb3J0XG4iKTsKK30KKwordm9pZCBkcm1faW50ZWxfYnVmbWdyX2dlbV9lbmFi bGVfcmV1c2UoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyKQoreworCWlndF9yZXF1aXJlX2YoZmFs c2UsICJOb3QgY29tcGlsZWQgd2l0aCBsaWJkcm1faW50ZWwgc3VwcG9ydFxuIik7Cit9CisKK2lu dCBkcm1faW50ZWxfYm9fZXhlYyhkcm1faW50ZWxfYm8gKmJvLCBpbnQgdXNlZCwKKwkJICAgICAg c3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cywgaW50IG51bV9jbGlwcmVjdHMsIGludCBE UjQpCit7CisJaWd0X3JlcXVpcmVfZihmYWxzZSwgIk5vdCBjb21waWxlZCB3aXRoIGxpYmRybV9p bnRlbCBzdXBwb3J0XG4iKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkcm1faW50ZWxfYnVmbWdy X2Rlc3Ryb3koZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyKQoreworCWlndF9yZXF1aXJlX2YoZmFs c2UsICJOb3QgY29tcGlsZWQgd2l0aCBsaWJkcm1faW50ZWwgc3VwcG9ydFxuIik7Cit9CisKK3Zv aWQgZHJtX2ludGVsX2JvX3dhaXRfcmVuZGVyaW5nKGRybV9pbnRlbF9ibyAqYm8pCit7CisJaWd0 X3JlcXVpcmVfZihmYWxzZSwgIk5vdCBjb21waWxlZCB3aXRoIGxpYmRybV9pbnRlbCBzdXBwb3J0 XG4iKTsKK30KKworaW50IGRybV9pbnRlbF9ib19nZXRfc3ViZGF0YShkcm1faW50ZWxfYm8gKmJv LCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB2b2lk ICpkYXRhKQoreworCWlndF9yZXF1aXJlX2YoZmFsc2UsICJOb3QgY29tcGlsZWQgd2l0aCBsaWJk cm1faW50ZWwgc3VwcG9ydFxuIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkcm1faW50ZWxfYm9f bWFwKGRybV9pbnRlbF9ibyAqYm8sIGludCB3cml0ZV9lbmFibGUpCit7CisJaWd0X3JlcXVpcmVf ZihmYWxzZSwgIk5vdCBjb21waWxlZCB3aXRoIGxpYmRybV9pbnRlbCBzdXBwb3J0XG4iKTsKKwly ZXR1cm4gMDsKK30KKworaW50IGRybV9pbnRlbF9nZW1fYm9fbWFwX2d0dChkcm1faW50ZWxfYm8g KmJvKQoreworCWlndF9yZXF1aXJlX2YoZmFsc2UsICJOb3QgY29tcGlsZWQgd2l0aCBsaWJkcm1f aW50ZWwgc3VwcG9ydFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZHJtX2ludGVsX2J1Zm1n cl9nZW1fZW5hYmxlX2ZlbmNlZF9yZWxvY3MoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyKQorewor CWlndF9yZXF1aXJlX2YoZmFsc2UsICJOb3QgY29tcGlsZWQgd2l0aCBsaWJkcm1faW50ZWwgc3Vw cG9ydFxuIik7Cit9CisKK2ludCBkcm1faW50ZWxfYm9fdW5tYXAoZHJtX2ludGVsX2JvICpibykK K3sKKwlpZ3RfcmVxdWlyZV9mKGZhbHNlLCAiTm90IGNvbXBpbGVkIHdpdGggbGliZHJtX2ludGVs IHN1cHBvcnRcbiIpOworCXJldHVybiAwOworfQorCitpbnQgZHJtX2ludGVsX2JvX2ZsaW5rKGRy bV9pbnRlbF9ibyAqYm8sIHVpbnQzMl90ICogbmFtZSkKK3sKKwlpZ3RfcmVxdWlyZV9mKGZhbHNl LCAiTm90IGNvbXBpbGVkIHdpdGggbGliZHJtX2ludGVsIHN1cHBvcnRcbiIpOworCXJldHVybiAw OworfQorCitkcm1faW50ZWxfYm8gKmRybV9pbnRlbF9ib19nZW1fY3JlYXRlX2Zyb21fbmFtZShk cm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCisJCQkJCQljb25zdCBjaGFyICpuYW1lLAorCQkJCQkJ dW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKwlpZ3RfcmVxdWlyZV9mKGZhbHNlLCAiTm90IGNvbXBp bGVkIHdpdGggbGliZHJtX2ludGVsIHN1cHBvcnRcbiIpOworCXJldHVybiAoZHJtX2ludGVsX2Jv ICopIE5VTEw7Cit9CisKK2ludCBkcm1faW50ZWxfYm9fZ2VtX2V4cG9ydF90b19wcmltZShkcm1f aW50ZWxfYm8gKmJvLCBpbnQgKnByaW1lX2ZkKQoreworCWlndF9yZXF1aXJlX2YoZmFsc2UsICJO b3QgY29tcGlsZWQgd2l0aCBsaWJkcm1faW50ZWwgc3VwcG9ydFxuIik7CisJcmV0dXJuIDA7Cit9 CisKK2RybV9pbnRlbF9ibyAqZHJtX2ludGVsX2JvX2dlbV9jcmVhdGVfZnJvbV9wcmltZShkcm1f aW50ZWxfYnVmbWdyICpidWZtZ3IsCisJCQkJCQkgaW50IHByaW1lX2ZkLCBpbnQgc2l6ZSkKK3sK KwlpZ3RfcmVxdWlyZV9mKGZhbHNlLCAiTm90IGNvbXBpbGVkIHdpdGggbGliZHJtX2ludGVsIHN1 cHBvcnRcbiIpOworCXJldHVybiAoZHJtX2ludGVsX2JvICopIE5VTEw7Cit9CisKK3ZvaWQgZHJt X2ludGVsX2J1Zm1ncl9nZW1fc2V0X3ZtYV9jYWNoZV9zaXplKGRybV9pbnRlbF9idWZtZ3IgKmJ1 Zm1nciwKKwkJCQkJICAgICBpbnQgbGltaXQpCit7CisJaWd0X3JlcXVpcmVfZihmYWxzZSwgIk5v dCBjb21waWxlZCB3aXRoIGxpYmRybV9pbnRlbCBzdXBwb3J0XG4iKTsKK30KKworaW50IGRybV9p bnRlbF9nZW1fYm9fdW5tYXBfZ3R0KGRybV9pbnRlbF9ibyAqYm8pCit7CisJaWd0X3JlcXVpcmVf ZihmYWxzZSwgIk5vdCBjb21waWxlZCB3aXRoIGxpYmRybV9pbnRlbCBzdXBwb3J0XG4iKTsKKwly ZXR1cm4gMDsKK30KKworZHJtX2ludGVsX2NvbnRleHQgKmRybV9pbnRlbF9nZW1fY29udGV4dF9j cmVhdGUoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyKQoreworCWlndF9yZXF1aXJlX2YoZmFsc2Us ICJOb3QgY29tcGlsZWQgd2l0aCBsaWJkcm1faW50ZWwgc3VwcG9ydFxuIik7CisJcmV0dXJuIChk cm1faW50ZWxfYm8gKikgTlVMTDsKK30KKwordm9pZCBkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVz dHJveShkcm1faW50ZWxfY29udGV4dCAqY3R4KQoreworCWlndF9yZXF1aXJlX2YoZmFsc2UsICJO b3QgY29tcGlsZWQgd2l0aCBsaWJkcm1faW50ZWwgc3VwcG9ydFxuIik7Cit9CisKK2RybV9pbnRl bF9ibyAqZHJtX2ludGVsX2JvX2FsbG9jX3RpbGVkKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwK KwkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgICAgaW50IHgsIGludCB5LCBp bnQgY3BwLAorCQkJCSAgICAgICB1aW50MzJfdCAqdGlsaW5nX21vZGUsCisJCQkJICAgICAgIHVu c2lnbmVkIGxvbmcgKnBpdGNoLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQorewor CWlndF9yZXF1aXJlX2YoZmFsc2UsICJOb3QgY29tcGlsZWQgd2l0aCBsaWJkcm1faW50ZWwgc3Vw cG9ydFxuIik7CisJcmV0dXJuIChkcm1faW50ZWxfYm8gKikgTlVMTDsKK30KKwordm9pZCBkcm1f aW50ZWxfYnVmbWdyX2dlbV9zZXRfYXViX2ZpbGVuYW1lKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1n ciwKKwkJCQkJICBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlpZ3RfcmVxdWlyZV9mKGZhbHNl LCAiTm90IGNvbXBpbGVkIHdpdGggbGliZHJtX2ludGVsIHN1cHBvcnRcbiIpOworfQorCit2b2lk IGRybV9pbnRlbF9idWZtZ3JfZ2VtX3NldF9hdWJfZHVtcChkcm1faW50ZWxfYnVmbWdyICpidWZt Z3IsIGludCBlbmFibGUpCit7CisJaWd0X3JlcXVpcmVfZihmYWxzZSwgIk5vdCBjb21waWxlZCB3 aXRoIGxpYmRybV9pbnRlbCBzdXBwb3J0XG4iKTsKK30KKwordm9pZCBkcm1faW50ZWxfZ2VtX2Jv X2F1Yl9kdW1wX2JtcChkcm1faW50ZWxfYm8gKmJvLAorCQkJCSAgIGludCB4MSwgaW50IHkxLCBp bnQgd2lkdGgsIGludCBoZWlnaHQsCisJCQkJICAgZW51bSBhdWJfZHVtcF9ibXBfZm9ybWF0IGZv cm1hdCwKKwkJCQkgICBpbnQgcGl0Y2gsIGludCBvZmZzZXQpCit7CisJaWd0X3JlcXVpcmVfZihm YWxzZSwgIk5vdCBjb21waWxlZCB3aXRoIGxpYmRybV9pbnRlbCBzdXBwb3J0XG4iKTsKK30KKwor dm9pZCBkcm1faW50ZWxfZ2VtX2JvX3N0YXJ0X2d0dF9hY2Nlc3MoZHJtX2ludGVsX2JvICpibywg aW50IHdyaXRlX2VuYWJsZSkKK3sKKwlpZ3RfcmVxdWlyZV9mKGZhbHNlLCAiTm90IGNvbXBpbGVk IHdpdGggbGliZHJtX2ludGVsIHN1cHBvcnRcbiIpOworfQorCitpbnQgZHJtX2ludGVsX2JvX3Nl dF90aWxpbmcoZHJtX2ludGVsX2JvICpibywgdWludDMyX3QgKiB0aWxpbmdfbW9kZSwKKwkJCQl1 aW50MzJfdCBzdHJpZGUpCit7CisJaWd0X3JlcXVpcmVfZihmYWxzZSwgIk5vdCBjb21waWxlZCB3 aXRoIGxpYmRybV9pbnRlbCBzdXBwb3J0XG4iKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRybV9p bnRlbF9ib19kaXNhYmxlX3JldXNlKGRybV9pbnRlbF9ibyAqYm8pCit7CisJaWd0X3JlcXVpcmVf ZihmYWxzZSwgIk5vdCBjb21waWxlZCB3aXRoIGxpYmRybV9pbnRlbCBzdXBwb3J0XG4iKTsKKwly ZXR1cm4gMDsKK30KKwordm9pZCBkcm1faW50ZWxfYm9fcmVmZXJlbmNlKGRybV9pbnRlbF9ibyAq Ym8pCit7CisJaWd0X3JlcXVpcmVfZihmYWxzZSwgIk5vdCBjb21waWxlZCB3aXRoIGxpYmRybV9p bnRlbCBzdXBwb3J0XG4iKTsKK30KKworaW50IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2dldF9kZXZp ZChkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IpCit7CisJaWd0X3JlcXVpcmVfZihmYWxzZSwgIk5v dCBjb21waWxlZCB3aXRoIGxpYmRybV9pbnRlbCBzdXBwb3J0XG4iKTsKKwlyZXR1cm4gMDsKK30K KworZHJtX2ludGVsX2JvICpkcm1faW50ZWxfYm9fYWxsb2NfZm9yX3JlbmRlcihkcm1faW50ZWxf YnVmbWdyICpidWZtZ3IsCisJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICAgdW5z aWduZWQgbG9uZyBzaXplLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGFsaWdubWVudCkKK3sKKwlp Z3RfcmVxdWlyZV9mKGZhbHNlLCAiTm90IGNvbXBpbGVkIHdpdGggbGliZHJtX2ludGVsIHN1cHBv cnRcbiIpOworCXJldHVybiAoZHJtX2ludGVsX2JvICopIE5VTEw7Cit9CisKK2ludCBkcm1faW50 ZWxfYm9fcmVmZXJlbmNlcyhkcm1faW50ZWxfYm8gKmJvLCBkcm1faW50ZWxfYm8gKnRhcmdldF9i bykKK3sKKwlpZ3RfcmVxdWlyZV9mKGZhbHNlLCAiTm90IGNvbXBpbGVkIHdpdGggbGliZHJtX2lu dGVsIHN1cHBvcnRcbiIpOworCXJldHVybiAwOworfQorCitpbnQgZHJtX2ludGVsX2dlbV9ib193 YWl0KGRybV9pbnRlbF9ibyAqYm8sIGludDY0X3QgdGltZW91dF9ucykKK3sKKwlpZ3RfcmVxdWly ZV9mKGZhbHNlLCAiTm90IGNvbXBpbGVkIHdpdGggbGliZHJtX2ludGVsIHN1cHBvcnRcbiIpOwor CXJldHVybiAwOworfQorCitkcm1faW50ZWxfYm8gKmRybV9pbnRlbF9ib19hbGxvY191c2VycHRy KGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKKwkJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJ CSB2b2lkICphZGRyLCB1aW50MzJfdCB0aWxpbmdfbW9kZSwKKwkJCQkJIHVpbnQzMl90IHN0cmlk ZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlp Z3RfcmVxdWlyZV9mKGZhbHNlLCAiTm90IGNvbXBpbGVkIHdpdGggbGliZHJtX2ludGVsIHN1cHBv cnRcbiIpOworCXJldHVybiBOVUxMOworfQorCisjZW5kaWYvL0hBVkVfTElCRFJNX0lOVEVMCmRp ZmYgLS1naXQgYS9saWIvc3R1YnMvZHJtL2ludGVsX2J1Zm1nci5oIGIvbGliL3N0dWJzL2RybS9p bnRlbF9idWZtZ3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmJjZTYw Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3N0dWJzL2RybS9pbnRlbF9idWZtZ3IuaApAQCAtMCww ICsxLDQzMCBAQAorI2lmbmRlZiBJTlRFTF9EUk1fU1RVQlNfSAorI2RlZmluZSBJTlRFTF9EUk1f U1RVQlNfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxkcm0uaD4KKworCitl bnVtIGF1Yl9kdW1wX2JtcF9mb3JtYXQgeworCUFVQl9EVU1QX0JNUF9GT1JNQVRfOEJJVCA9IDEs CisJQVVCX0RVTVBfQk1QX0ZPUk1BVF9BUkdCXzQ0NDQgPSA0LAorCUFVQl9EVU1QX0JNUF9GT1JN QVRfQVJHQl8wODg4ID0gNiwKKwlBVUJfRFVNUF9CTVBfRk9STUFUX0FSR0JfODg4OCA9IDcsCit9 OworCit0eXBlZGVmIHN0cnVjdCBfZHJtX2ludGVsX2JvIGRybV9pbnRlbF9ibzsKK3R5cGVkZWYg c3RydWN0IF9kcm1faW50ZWxfYnVmbWdyIGRybV9pbnRlbF9idWZtZ3I7Cit0eXBlZGVmIHN0cnVj dCBfZHJtX2ludGVsX2NvbnRleHQgZHJtX2ludGVsX2NvbnRleHQ7CisKK3N0cnVjdCBfZHJtX2lu dGVsX2NvbnRleHQgeworCXVuc2lnbmVkIGludCBjdHhfaWQ7CisJc3RydWN0IF9kcm1faW50ZWxf YnVmbWdyICpidWZtZ3I7Cit9OworCitzdHJ1Y3QgX2RybV9pbnRlbF9idWZtZ3IgeworCS8qKgor CSAqIEFsbG9jYXRlIGEgYnVmZmVyIG9iamVjdC4KKwkgKgorCSAqIEJ1ZmZlciBvYmplY3RzIGFy ZSBub3QgbmVjZXNzYXJpbHkgaW5pdGlhbGx5IG1hcHBlZCBpbnRvIENQVSB2aXJ0dWFsCisJICog YWRkcmVzcyBzcGFjZSBvciBncmFwaGljcyBkZXZpY2UgYXBlcnR1cmUuICBUaGV5IG11c3QgYmUg bWFwcGVkCisJICogdXNpbmcgYm9fbWFwKCkgb3IgZHJtX2ludGVsX2dlbV9ib19tYXBfZ3R0KCkg dG8gYmUgdXNlZCBieSB0aGUgQ1BVLgorCSAqLworCWRybV9pbnRlbF9ibyAqKCpib19hbGxvYykg KGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICB1bnNp Z25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCBhbGlnbm1lbnQpOworCisJLyoqCisJICogQWxs b2NhdGUgYSBidWZmZXIgb2JqZWN0LCBoaW50aW5nIHRoYXQgaXQgd2lsbCBiZSB1c2VkIGFzIGEK KwkgKiByZW5kZXIgdGFyZ2V0LgorCSAqCisJICogVGhpcyBpcyBvdGhlcndpc2UgdGhlIHNhbWUg YXMgYm9fYWxsb2MuCisJICovCisJZHJtX2ludGVsX2JvICooKmJvX2FsbG9jX2Zvcl9yZW5kZXIp IChkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCisJCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJ CQkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJCSAgdW5zaWduZWQgaW50IGFsaWdubWVu dCk7CisKKwkvKioKKwkgKiBBbGxvY2F0ZSBhIGJ1ZmZlciBvYmplY3QgZnJvbSBhbiBleGlzdGlu ZyB1c2VyIGFjY2Vzc2libGUKKwkgKiBhZGRyZXNzIG1hbGxvYydkIHdpdGggdGhlIHByb3ZpZGVk IHNpemUuCisJICogQWxpZ25tZW50IGlzIHVzZWQgd2hlbiBtYXBwaW5nIHRvIHRoZSBndHQuCisJ ICogRmxhZ3MgbWF5IGJlIEk5MTVfVk1BUF9SRUFEX09OTFkgb3IgSTkxNV9VU0VSUFRSX1VOU1lO Q0hST05JWkVECisJICovCisJZHJtX2ludGVsX2JvICooKmJvX2FsbG9jX3VzZXJwdHIpKGRybV9p bnRlbF9idWZtZ3IgKmJ1Zm1nciwKKwkJCQkJICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICphZGRy LAorCQkJCQkgIHVpbnQzMl90IHRpbGluZ19tb2RlLCB1aW50MzJfdCBzdHJpZGUsCisJCQkJCSAg dW5zaWduZWQgbG9uZyBzaXplLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCisJLyoq CisJICogQWxsb2NhdGUgYSB0aWxlZCBidWZmZXIgb2JqZWN0LgorCSAqCisJICogQWxpZ25tZW50 IGZvciB0aWxlZCBvYmplY3RzIGlzIHNldCBhdXRvbWF0aWNhbGx5OyB0aGUgJ2ZsYWdzJworCSAq IGFyZ3VtZW50IHByb3ZpZGVzIGEgaGludCBhYm91dCBob3cgdGhlIG9iamVjdCB3aWxsIGJlIHVz ZWQgaW5pdGlhbGx5LgorCSAqCisJICogVmFsaWQgdGlsaW5nIGZvcm1hdHMgYXJlOgorCSAqICBJ OTE1X1RJTElOR19OT05FCisJICogIEk5MTVfVElMSU5HX1gKKwkgKiAgSTkxNV9USUxJTkdfWQor CSAqCisJICogTm90ZSB0aGUgdGlsaW5nIGZvcm1hdCBtYXkgYmUgcmVqZWN0ZWQ7IGNhbGxlcnMg c2hvdWxkIGNoZWNrIHRoZQorCSAqICd0aWxpbmdfbW9kZScgZmllbGQgb24gcmV0dXJuLCBhcyB3 ZWxsIGFzIHRoZSBwaXRjaCB2YWx1ZSwgd2hpY2gKKwkgKiBtYXkgaGF2ZSBiZWVuIHJvdW5kZWQg dXAgdG8gYWNjb21tb2RhdGUgZm9yIHRpbGluZyByZXN0cmljdGlvbnMuCisJICovCisJZHJtX2lu dGVsX2JvICooKmJvX2FsbG9jX3RpbGVkKSAoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAorCQkJ CQkgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJIGludCB4LCBpbnQgeSwgaW50IGNwcCwKKwkJCQkJ IHVpbnQzMl90ICp0aWxpbmdfbW9kZSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgKnBpdGNoLAorCQkJ CQkgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKKwkvKiogVGFrZXMgYSByZWZlcmVuY2Ugb24gYSBi dWZmZXIgb2JqZWN0ICovCisJdm9pZCAoKmJvX3JlZmVyZW5jZSkgKGRybV9pbnRlbF9ibyAqYm8p OworCisJLyoqCisJICogUmVsZWFzZXMgYSByZWZlcmVuY2Ugb24gYSBidWZmZXIgb2JqZWN0LCBm cmVlaW5nIHRoZSBkYXRhIGlmCisJICogbm8gcmVmZXJlbmNlcyByZW1haW4uCisJICovCisJdm9p ZCAoKmJvX3VucmVmZXJlbmNlKSAoZHJtX2ludGVsX2JvICpibyk7CisKKwkvKioKKwkgKiBNYXBz IHRoZSBidWZmZXIgaW50byB1c2Vyc3BhY2UuCisJICoKKwkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwg YmxvY2sgd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIGV4ZWN1dGlvbiBvbiB0aGUKKwkgKiBidWZm ZXIgdG8gY29tcGxldGUsIGZpcnN0LiAgVGhlIHJlc3VsdGluZyBtYXBwaW5nIGlzIGF2YWlsYWJs ZSBhdAorCSAqIGJ1Zi0+dmlydHVhbC4KKwkgKi8KKwlpbnQgKCpib19tYXApIChkcm1faW50ZWxf Ym8gKmJvLCBpbnQgd3JpdGVfZW5hYmxlKTsKKworCS8qKgorCSAqIFJlZHVjZXMgdGhlIHJlZmNv dW50IG9uIHRoZSB1c2Vyc3BhY2UgbWFwcGluZyBvZiB0aGUgYnVmZmVyCisJICogb2JqZWN0Lgor CSAqLworCWludCAoKmJvX3VubWFwKSAoZHJtX2ludGVsX2JvICpibyk7CisKKwkvKioKKwkgKiBX cml0ZSBkYXRhIGludG8gYW4gb2JqZWN0LgorCSAqCisJICogVGhpcyBpcyBhbiBvcHRpb25hbCBm dW5jdGlvbiwgaWYgbWlzc2luZywKKwkgKiBkcm1faW50ZWxfYm8gd2lsbCBtYXAvbWVtY3B5L3Vu bWFwLgorCSAqLworCWludCAoKmJvX3N1YmRhdGEpIChkcm1faW50ZWxfYm8gKmJvLCB1bnNpZ25l ZCBsb25nIG9mZnNldCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0 YSk7CisKKwkvKioKKwkgKiBSZWFkIGRhdGEgZnJvbSBhbiBvYmplY3QKKwkgKgorCSAqIFRoaXMg aXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24sIGlmIG1pc3NpbmcsCisJICogZHJtX2ludGVsX2JvIHdp bGwgbWFwL21lbWNweS91bm1hcC4KKwkgKi8KKwlpbnQgKCpib19nZXRfc3ViZGF0YSkgKGRybV9p bnRlbF9ibyAqYm8sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcg c2l6ZSwgdm9pZCAqZGF0YSk7CisKKwkvKioKKwkgKiBXYWl0cyBmb3IgcmVuZGVyaW5nIHRvIGFu IG9iamVjdCBieSB0aGUgR1BVIHRvIGhhdmUgY29tcGxldGVkLgorCSAqCisJICogVGhpcyBpcyBu b3QgcmVxdWlyZWQgZm9yIGFueSBhY2Nlc3MgdG8gdGhlIEJPIGJ5IGJvX21hcCwKKwkgKiBib19z dWJkYXRhLCBldGMuICBJdCBpcyBtZXJlbHkgYSB3YXkgZm9yIHRoZSBkcml2ZXIgdG8gaW1wbGVt ZW50CisJICogZ2xGaW5pc2guCisJICovCisJdm9pZCAoKmJvX3dhaXRfcmVuZGVyaW5nKSAoZHJt X2ludGVsX2JvICpibyk7CisKKwkvKioKKwkgKiBUZWFycyBkb3duIHRoZSBidWZmZXIgbWFuYWdl ciBpbnN0YW5jZS4KKwkgKi8KKwl2b2lkICgqZGVzdHJveSkgKGRybV9pbnRlbF9idWZtZ3IgKmJ1 Zm1ncik7CisKKwkvKioKKwkgKiBJbmRpY2F0ZSBpZiB0aGUgYnVmZmVyIGNhbiBiZSBwbGFjZWQg YW55d2hlcmUgaW4gdGhlIGZ1bGwgcHBndHQKKwkgKiBhZGRyZXNzIHJhbmdlICgyXjQ4KS4KKwkg KgorCSAqIEFueSByZXNvdXJjZSB1c2VkIHdpdGggZmxhdC9oZWFwbGVzcyAoMHgwMDAwMDAwMC0w eGZmZmZmMDAwKQorCSAqIEdlbmVyYWwgU3RhdGUgSGVhcCAoR1NIKSBvciBJbnRydWN0aW9ucyBT dGF0ZSBIZWFwIChJU0gpIG11c3QKKwkgKiBiZSBpbiBhIDMyLWJpdCByYW5nZS4gNDgtYml0IHJh bmdlIHdpbGwgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseQorCSAqIHJlcXVlc3RlZC4KKwkg KgorCSAqIFxwYXJhbSBibyBCdWZmZXIgdG8gc2V0IHRoZSB1c2VfNDhiX2FkZHJlc3NfcmFuZ2Ug ZmxhZy4KKwkgKiBccGFyYW0gZW5hYmxlIFRoZSBmbGFnIHZhbHVlLgorCSAqLworCXZvaWQgKCpi b191c2VfNDhiX2FkZHJlc3NfcmFuZ2UpIChkcm1faW50ZWxfYm8gKmJvLCB1aW50MzJfdCBlbmFi bGUpOworCisJLyoqCisJICogQWRkIHJlbG9jYXRpb24gZW50cnkgaW4gcmVsb2NfYnVmLCB3aGlj aCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUKKwkgKiB0YXJnZXQgYnVmZmVyJ3MgcmVhbCBvZmZz ZXQgb24gb24gY29tbWFuZCBzdWJtaXNzaW9uLgorCSAqCisJICogUmVsb2NhdGlvbnMgcmVtYWlu IGluIHBsYWNlIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGJ1ZmZlciBvYmplY3QuCisJICoKKwkg KiBccGFyYW0gYm8gQnVmZmVyIHRvIHdyaXRlIHRoZSByZWxvY2F0aW9uIGludG8uCisJICogXHBh cmFtIG9mZnNldCBCeXRlIG9mZnNldCB3aXRoaW4gcmVsb2NfYm8gb2YgdGhlIHBvaW50ZXIgdG8K KwkgKgkJCXRhcmdldF9iby4KKwkgKiBccGFyYW0gdGFyZ2V0X2JvIEJ1ZmZlciB3aG9zZSBvZmZz ZXQgc2hvdWxkIGJlIHdyaXR0ZW4gaW50byB0aGUKKwkgKiAgICAgICAgICAgICAgICAgIHJlbG9j YXRpb24gZW50cnkuCisJICogXHBhcmFtIHRhcmdldF9vZmZzZXQgQ29uc3RhbnQgdmFsdWUgdG8g YmUgYWRkZWQgdG8gdGFyZ2V0X2JvJ3MKKwkgKgkJCW9mZnNldCBpbiByZWxvY2F0aW9uIGVudHJ5 LgorCSAqIFxwYXJhbSByZWFkX2RvbWFpbnMgR0VNIHJlYWQgZG9tYWlucyB3aGljaCB0aGUgYnVm ZmVyIHdpbGwgYmUKKwkgKgkJCXJlYWQgaW50byBieSB0aGUgY29tbWFuZCB0aGF0IHRoaXMgcmVs b2NhdGlvbgorCSAqCQkJaXMgcGFydCBvZi4KKwkgKiBccGFyYW0gd3JpdGVfZG9tYWlucyBHRU0g cmVhZCBkb21haW5zIHdoaWNoIHRoZSBidWZmZXIgd2lsbCBiZQorCSAqCQkJZGlydGllZCBpbiBi eSB0aGUgY29tbWFuZCB0aGF0IHRoaXMKKwkgKgkJCXJlbG9jYXRpb24gaXMgcGFydCBvZi4KKwkg Ki8KKwlpbnQgKCpib19lbWl0X3JlbG9jKSAoZHJtX2ludGVsX2JvICpibywgdWludDMyX3Qgb2Zm c2V0LAorCQkJCSAgZHJtX2ludGVsX2JvICp0YXJnZXRfYm8sIHVpbnQzMl90IHRhcmdldF9vZmZz ZXQsCisJCQkJICB1aW50MzJfdCByZWFkX2RvbWFpbnMsIHVpbnQzMl90IHdyaXRlX2RvbWFpbik7 CisJaW50ICgqYm9fZW1pdF9yZWxvY19mZW5jZSkoZHJtX2ludGVsX2JvICpibywgdWludDMyX3Qg b2Zmc2V0LAorCQkJCSAgIGRybV9pbnRlbF9ibyAqdGFyZ2V0X2JvLAorCQkJCSAgIHVpbnQzMl90 IHRhcmdldF9vZmZzZXQsCisJCQkJICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJCSAgIHVp bnQzMl90IHdyaXRlX2RvbWFpbik7CisKKwkvKiogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgYnVmZmVy IHBvaW50ZWQgdG8gYnkgYm8uICovCisJaW50ICgqYm9fZXhlYykgKGRybV9pbnRlbF9ibyAqYm8s IGludCB1c2VkLAorCQkJZHJtX2NsaXBfcmVjdF90ICpjbGlwcmVjdHMsIGludCBudW1fY2xpcHJl Y3RzLAorCQkJaW50IERSNCk7CisKKwkvKiogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgYnVmZmVyIHBv aW50ZWQgdG8gYnkgYm8gb24gdGhlIHNlbGVjdGVkCisJICogcmluZyBidWZmZXIKKwkgKi8KKwlp bnQgKCpib19tcmJfZXhlYykgKGRybV9pbnRlbF9ibyAqYm8sIGludCB1c2VkLAorCQkJCWRybV9j bGlwX3JlY3RfdCAqY2xpcHJlY3RzLCBpbnQgbnVtX2NsaXByZWN0cywKKwkJCQlpbnQgRFI0LCB1 bnNpZ25lZCBmbGFncyk7CisKKwkvKioKKwkgKiBQaW4gYSBidWZmZXIgdG8gdGhlIGFwZXJ0dXJl IGFuZCBmaXggdGhlIG9mZnNldCB1bnRpbCB1bnBpbm5lZAorCSAqCisJICogXHBhcmFtIGJ1ZiBC dWZmZXIgdG8gcGluCisJICogXHBhcmFtIGFsaWdubWVudCBSZXF1aXJlZCBhbGlnbm1lbnQgZm9y IGFwZXJ0dXJlLCBpbiBieXRlcworCSAqLworCWludCAoKmJvX3BpbikgKGRybV9pbnRlbF9ibyAq Ym8sIHVpbnQzMl90IGFsaWdubWVudCk7CisKKwkvKioKKwkgKiBVbnBpbiBhIGJ1ZmZlciBmcm9t IHRoZSBhcGVydHVyZSwgYWxsb3dpbmcgaXQgdG8gYmUgcmVtb3ZlZAorCSAqCisJICogXHBhcmFt IGJ1ZiBCdWZmZXIgdG8gdW5waW4KKwkgKi8KKwlpbnQgKCpib191bnBpbikgKGRybV9pbnRlbF9i byAqYm8pOworCisJLyoqCisJICogQXNrIHRoYXQgdGhlIGJ1ZmZlciBiZSBwbGFjZWQgaW4gdGls aW5nIG1vZGUKKwkgKgorCSAqIFxwYXJhbSBidWYgQnVmZmVyIHRvIHNldCB0aWxpbmcgbW9kZSBm b3IKKwkgKiBccGFyYW0gdGlsaW5nX21vZGUgZGVzaXJlZCwgYW5kIHJldHVybmVkIHRpbGluZyBt b2RlCisJICovCisJaW50ICgqYm9fc2V0X3RpbGluZykgKGRybV9pbnRlbF9ibyAqYm8sIHVpbnQz Ml90ICogdGlsaW5nX21vZGUsCisJCQkJICB1aW50MzJfdCBzdHJpZGUpOworCisJLyoqCisJICog R2V0IHRoZSBjdXJyZW50IHRpbGluZyAoYW5kIHJlc3VsdGluZyBzd2l6emxpbmcpIG1vZGUgZm9y IHRoZSBiby4KKwkgKgorCSAqIFxwYXJhbSBidWYgQnVmZmVyIHRvIGdldCB0aWxpbmcgbW9kZSBm b3IKKwkgKiBccGFyYW0gdGlsaW5nX21vZGUgcmV0dXJuZWQgdGlsaW5nIG1vZGUKKwkgKiBccGFy YW0gc3dpenpsZV9tb2RlIHJldHVybmVkIHN3aXp6bGluZyBtb2RlCisJICovCisJaW50ICgqYm9f Z2V0X3RpbGluZykgKGRybV9pbnRlbF9ibyAqYm8sIHVpbnQzMl90ICogdGlsaW5nX21vZGUsCisJ CQkJICB1aW50MzJfdCAqIHN3aXp6bGVfbW9kZSk7CisKKwkvKioKKwkgKiBTZXQgdGhlIG9mZnNl dCBhdCB3aGljaCB0aGlzIGJ1ZmZlciB3aWxsIGJlIHNvZnRwaW5uZWQKKwkgKiBccGFyYW0gYm8g QnVmZmVyIHRvIHNldCB0aGUgc29mdHBpbiBvZmZzZXQgZm9yCisJICogXHBhcmFtIG9mZnNldCBT b2Z0cGluIG9mZnNldAorCSAqLworCWludCAoKmJvX3NldF9zb2Z0cGluX29mZnNldCkgKGRybV9p bnRlbF9ibyAqYm8sIHVpbnQ2NF90IG9mZnNldCk7CisKKwkvKioKKwkgKiBDcmVhdGUgYSB2aXNp YmxlIG5hbWUgZm9yIGEgYnVmZmVyIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IG90aGVyIGFwcHMKKwkg KgorCSAqIFxwYXJhbSBidWYgQnVmZmVyIHRvIGNyZWF0ZSBhIG5hbWUgZm9yCisJICogXHBhcmFt IG5hbWUgUmV0dXJuZWQgbmFtZQorCSAqLworCWludCAoKmJvX2ZsaW5rKSAoZHJtX2ludGVsX2Jv ICpibywgdWludDMyX3QgKiBuYW1lKTsKKworCS8qKgorCSAqIFJldHVybnMgMSBpZiBtYXBwaW5n IHRoZSBidWZmZXIgZm9yIHdyaXRlIGNvdWxkIGNhdXNlIHRoZSBwcm9jZXNzCisJICogdG8gYmxv Y2ssIGR1ZSB0byB0aGUgb2JqZWN0IGJlaW5nIGFjdGl2ZSBpbiB0aGUgR1BVLgorCSAqLworCWlu dCAoKmJvX2J1c3kpIChkcm1faW50ZWxfYm8gKmJvKTsKKworCS8qKgorCSAqIFNwZWNpZnkgdGhl IHZvbGF0aWxpdHkgb2YgdGhlIGJ1ZmZlci4KKwkgKiBccGFyYW0gYm8gQnVmZmVyIHRvIGNyZWF0 ZSBhIG5hbWUgZm9yCisJICogXHBhcmFtIG1hZHYgVGhlIHB1cmdlYWJsZSBzdGF0dXMKKwkgKgor CSAqIFVzZSBJOTE1X01BRFZfRE9OVE5FRUQgdG8gbWFyayB0aGUgYnVmZmVyIGFzIHB1cmdlYWJs ZSwgYW5kIGl0IHdpbGwgYmUKKwkgKiByZWNsYWltZWQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBJ ZiB5b3Ugc3Vic2VxdWVudGx5IHJlcXVpcmUgdGhlIGJ1ZmZlciwKKwkgKiB0aGVuIHlvdSBtdXN0 IHBhc3MgSTkxNV9NQURWX1dJTExORUVEIHRvIG1hcmsgdGhlIGJ1ZmZlciBhcyByZXF1aXJlZC4K KwkgKgorCSAqIFJldHVybnMgMSBpZiB0aGUgYnVmZmVyIHdhcyByZXRhaW5lZCwgb3IgMCBpZiBp dCB3YXMgZGlzY2FyZGVkIHdoaWxzdAorCSAqIG1hcmtlZCBhcyBJOTE1X01BRFZfRE9OVE5FRUQu CisJICovCisJaW50ICgqYm9fbWFkdmlzZSkgKGRybV9pbnRlbF9ibyAqYm8sIGludCBtYWR2KTsK KworCWludCAoKmNoZWNrX2FwZXJ0dXJlX3NwYWNlKSAoZHJtX2ludGVsX2JvICoqIGJvX2FycmF5 LCBpbnQgY291bnQpOworCisJLyoqCisJICogRGlzYWJsZSBidWZmZXIgcmV1c2UgZm9yIGJ1ZmZl cnMgd2hpY2ggd2lsbCBiZSBzaGFyZWQgaW4gc29tZSB3YXksCisJICogYXMgd2l0aCBzY2Fub3V0 IGJ1ZmZlcnMuIFdoZW4gdGhlIGJ1ZmZlciByZWZlcmVuY2UgY291bnQgZ29lcyB0bworCSAqIHpl cm8sIGl0IHdpbGwgYmUgZnJlZWQgYW5kIG5vdCBwbGFjZWQgaW4gdGhlIHJldXNlIGxpc3QuCisJ ICoKKwkgKiBccGFyYW0gYm8gQnVmZmVyIHRvIGRpc2FibGUgcmV1c2UgZm9yCisJICovCisJaW50 ICgqYm9fZGlzYWJsZV9yZXVzZSkgKGRybV9pbnRlbF9ibyAqYm8pOworCisJLyoqCisJICogUXVl cnkgd2hldGhlciBhIGJ1ZmZlciBpcyByZXVzYWJsZS4KKwkgKgorCSAqIFxwYXJhbSBibyBCdWZm ZXIgdG8gcXVlcnkKKwkgKi8KKwlpbnQgKCpib19pc19yZXVzYWJsZSkgKGRybV9pbnRlbF9ibyAq Ym8pOworCisJLyoqCisJICoKKwkgKiBSZXR1cm4gdGhlIHBpcGUgYXNzb2NpYXRlZCB3aXRoIGEg Y3J0Y19pZCBzbyB0aGF0IHZibGFuaworCSAqIHN5bmNocm9uaXphdGlvbiBjYW4gdXNlIHRoZSBj b3JyZWN0IGRhdGEgaW4gdGhlIHJlcXVlc3QuCisJICogVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBm b3IgS01TIGFuZCBnZW0gYXQgdGhpcyBwb2ludCwgd2hlbgorCSAqIHVuc3VwcG9ydGVkLCB0aGlz IGZ1bmN0aW9uIHJldHVybnMgLTEgYW5kIGxlYXZlcyB0aGUgZGVjaXNpb24KKwkgKiBvZiB3aGF0 IHRvIGRvIGluIHRoYXQgY2FzZSB0byB0aGUgY2FsbGVyCisJICoKKwkgKiBccGFyYW0gYnVmbWdy IHRoZSBhc3NvY2lhdGVkIGJ1ZmZlciBtYW5hZ2VyCisJICogXHBhcmFtIGNydGNfaWQgdGhlIGNy dGMgaWRlbnRpZmllcgorCSAqLworCWludCAoKmdldF9waXBlX2Zyb21fY3J0Y19pZCkgKGRybV9p bnRlbF9idWZtZ3IgKmJ1Zm1nciwgaW50IGNydGNfaWQpOworCisJLyoqIFJldHVybnMgdHJ1ZSBp ZiB0YXJnZXRfYm8gaXMgaW4gdGhlIHJlbG9jYXRpb24gdHJlZSByb290ZWQgYXQgYm8uICovCisJ aW50ICgqYm9fcmVmZXJlbmNlcykgKGRybV9pbnRlbF9ibyAqYm8sIGRybV9pbnRlbF9ibyAqdGFy Z2V0X2JvKTsKKworCS8qKjwgRW5hYmxlcyB2ZXJib3NlIGRlYnVnZ2luZyBwcmludG91dHMgKi8K KwlpbnQgZGVidWc7Cit9OworCitzdHJ1Y3QgX2RybV9pbnRlbF9ibyB7CisJLyoqCisJICogU2l6 ZSBpbiBieXRlcyBvZiB0aGUgYnVmZmVyIG9iamVjdC4KKwkgKgorCSAqIFRoZSBzaXplIG1heSBi ZSBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvcmlnaW5hbGx5IHJlcXVlc3RlZCBmb3IgdGhlCisJICog YWxsb2NhdGlvbiwgc3VjaCBhcyBiZWluZyBhbGlnbmVkIHRvIHBhZ2Ugc2l6ZS4KKwkgKi8KKwl1 bnNpZ25lZCBsb25nIHNpemU7CisKKwkvKioKKwkgKiBBbGlnbm1lbnQgcmVxdWlyZW1lbnQgZm9y IG9iamVjdAorCSAqCisJICogVXNlZCBmb3IgR1RUIG1hcHBpbmcgJiBwaW5uaW5nIHRoZSBvYmpl Y3QuCisJICovCisJdW5zaWduZWQgbG9uZyBhbGlnbjsKKworCS8qKgorCSAqIERlcHJlY2F0ZWQg ZmllbGQgY29udGFpbmluZyAocG9zc2libHkgdGhlIGxvdyAzMi1iaXRzIG9mKSB0aGUgbGFzdAor CSAqIHNlZW4gdmlydHVhbCBjYXJkIGFkZHJlc3MuICBVc2Ugb2Zmc2V0NjQgaW5zdGVhZC4KKwkg Ki8KKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKworCS8qKgorCSAqIFZpcnR1YWwgYWRkcmVzcyBm b3IgYWNjZXNzaW5nIHRoZSBidWZmZXIgZGF0YS4gIE9ubHkgdmFsaWQgd2hpbGUKKwkgKiBtYXBw ZWQuCisJICovCisjaWZkZWYgX19jcGx1c3BsdXMKKwl2b2lkICp2aXJ0OworI2Vsc2UKKwl2b2lk ICp2aXJ0dWFsOworI2VuZGlmCisKKwkvKiogQnVmZmVyIG1hbmFnZXIgY29udGV4dCBhc3NvY2lh dGVkIHdpdGggdGhpcyBidWZmZXIgb2JqZWN0ICovCisJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdy OworCisJLyoqCisJICogTU0tc3BlY2lmaWMgaGFuZGxlIGZvciBhY2Nlc3Npbmcgb2JqZWN0CisJ ICovCisJaW50IGhhbmRsZTsKKworCS8qKgorCSAqIExhc3Qgc2VlbiBjYXJkIHZpcnR1YWwgYWRk cmVzcyAob2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUKKwkgKiBhcGVydHVyZSkgZm9y IHRoZSBvYmplY3QuICBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIGZpbGwgcmVsb2NhdGlvbgorCSAq IGVudHJpZXMgd2hlbiBjYWxsaW5nIGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKCkKKwkgKi8KKwl1 aW50NjRfdCBvZmZzZXQ2NDsKK307CisKK3R5cGVkZWYgc3RydWN0IF9kcm1faW50ZWxfYXViX2Fu bm90YXRpb24geworCXVpbnQzMl90IHR5cGU7CisJdWludDMyX3Qgc3VidHlwZTsKKwl1aW50MzJf dCBlbmRpbmdfb2Zmc2V0OworfSBkcm1faW50ZWxfYXViX2Fubm90YXRpb247CisKK2RybV9pbnRl bF9idWZtZ3IgKmRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoaW50IGZkLCBpbnQgYmF0Y2hfc2l6 ZSk7Cit2b2lkIGRybV9pbnRlbF9ib191bnJlZmVyZW5jZShkcm1faW50ZWxfYm8gKmJvKTsKK2Ry bV9pbnRlbF9ibyAqZHJtX2ludGVsX2JvX2FsbG9jKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwg Y29uc3QgY2hhciAqbmFtZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQg YWxpZ25tZW50KTsKK2ludCBkcm1faW50ZWxfYm9fc3ViZGF0YShkcm1faW50ZWxfYm8gKmJvLCB1 bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCSB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IHZvaWQg KmRhdGEpOworaW50IGRybV9pbnRlbF9nZW1fYm9fY29udGV4dF9leGVjKGRybV9pbnRlbF9ibyAq Ym8sIGRybV9pbnRlbF9jb250ZXh0ICpjdHgsCisJCQkJICBpbnQgdXNlZCwgdW5zaWduZWQgaW50 IGZsYWdzKTsKK2ludCBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhkcm1faW50ZWxfYm8gKmJvLCB1 aW50MzJfdCBvZmZzZXQsCisJCQkJZHJtX2ludGVsX2JvICp0YXJnZXRfYm8sIHVpbnQzMl90IHRh cmdldF9vZmZzZXQsCisJCQkJdWludDMyX3QgcmVhZF9kb21haW5zLCB1aW50MzJfdCB3cml0ZV9k b21haW4pOworaW50IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jX2ZlbmNlKGRybV9pbnRlbF9ibyAq Ym8sIHVpbnQzMl90IG9mZnNldCwKKwkJCQkgIGRybV9pbnRlbF9ibyAqdGFyZ2V0X2JvLAorCQkJ CSAgdWludDMyX3QgdGFyZ2V0X29mZnNldCwKKwkJCQkgIHVpbnQzMl90IHJlYWRfZG9tYWlucywg dWludDMyX3Qgd3JpdGVfZG9tYWluKTsKK2ludCBkcm1faW50ZWxfYm9fZ2V0X3RpbGluZyhkcm1f aW50ZWxfYm8gKmJvLCB1aW50MzJfdCAqIHRpbGluZ19tb2RlLAorCQkJCXVpbnQzMl90ICogc3dp enpsZV9tb2RlKTsKK2ludCBkcm1faW50ZWxfYm9fbXJiX2V4ZWMoZHJtX2ludGVsX2JvICpibywg aW50IHVzZWQsCisJCQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzLCBpbnQgbnVtX2Ns aXByZWN0cywgaW50IERSNCwKKwkJCXVuc2lnbmVkIGludCBmbGFncyk7Cit2b2lkIGRybV9pbnRl bF9idWZtZ3JfZ2VtX3NldF9hdWJfYW5ub3RhdGlvbnMoZHJtX2ludGVsX2JvICpibywKKwkJCQkJ IGRybV9pbnRlbF9hdWJfYW5ub3RhdGlvbiAqYW5ub3RhdGlvbnMsCisJCQkJCSB1bnNpZ25lZCBj b3VudCk7Cit2b2lkIGRybV9pbnRlbF9idWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShkcm1faW50ZWxf YnVmbWdyICpidWZtZ3IpOworaW50IGRybV9pbnRlbF9ib19leGVjKGRybV9pbnRlbF9ibyAqYm8s IGludCB1c2VkLAorCQkJICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzLCBpbnQgbnVt X2NsaXByZWN0cywgaW50IERSNCk7Cit2b2lkIGRybV9pbnRlbF9idWZtZ3JfZGVzdHJveShkcm1f aW50ZWxfYnVmbWdyICpidWZtZ3IpOwordm9pZCBkcm1faW50ZWxfYm9fd2FpdF9yZW5kZXJpbmco ZHJtX2ludGVsX2JvICpibyk7CitpbnQgZHJtX2ludGVsX2JvX2dldF9zdWJkYXRhKGRybV9pbnRl bF9ibyAqYm8sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSB1bnNpZ25lZCBsb25nIHNpemUs IHZvaWQgKmRhdGEpOworaW50IGRybV9pbnRlbF9ib19tYXAoZHJtX2ludGVsX2JvICpibywgaW50 IHdyaXRlX2VuYWJsZSk7CitpbnQgZHJtX2ludGVsX2dlbV9ib19tYXBfZ3R0KGRybV9pbnRlbF9i byAqYm8pOwordm9pZCBkcm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfZmVuY2VkX3JlbG9jcyhk cm1faW50ZWxfYnVmbWdyICpidWZtZ3IpOworaW50IGRybV9pbnRlbF9ib191bm1hcChkcm1faW50 ZWxfYm8gKmJvKTsKK2ludCBkcm1faW50ZWxfYm9fZmxpbmsoZHJtX2ludGVsX2JvICpibywgdWlu dDMyX3QgKiBuYW1lKTsKK2RybV9pbnRlbF9ibyAqZHJtX2ludGVsX2JvX2dlbV9jcmVhdGVfZnJv bV9uYW1lKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKKwkJCQkJCWNvbnN0IGNoYXIgKm5hbWUs CisJCQkJCQl1bnNpZ25lZCBpbnQgaGFuZGxlKTsKK2ludCBkcm1faW50ZWxfYm9fZ2VtX2V4cG9y dF90b19wcmltZShkcm1faW50ZWxfYm8gKmJvLCBpbnQgKnByaW1lX2ZkKTsKK2RybV9pbnRlbF9i byAqZHJtX2ludGVsX2JvX2dlbV9jcmVhdGVfZnJvbV9wcmltZShkcm1faW50ZWxfYnVmbWdyICpi dWZtZ3IsCisJCQkJCQlpbnQgcHJpbWVfZmQsIGludCBzaXplKTsKK3ZvaWQgZHJtX2ludGVsX2J1 Zm1ncl9nZW1fc2V0X3ZtYV9jYWNoZV9zaXplKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKKwkJ CQkJCSBpbnQgbGltaXQpOworaW50IGRybV9pbnRlbF9nZW1fYm9fdW5tYXBfZ3R0KGRybV9pbnRl bF9ibyAqYm8pOworZHJtX2ludGVsX2NvbnRleHQgKmRybV9pbnRlbF9nZW1fY29udGV4dF9jcmVh dGUoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyKTsKK3ZvaWQgZHJtX2ludGVsX2dlbV9jb250ZXh0 X2Rlc3Ryb3koZHJtX2ludGVsX2NvbnRleHQgKmN0eCk7Citkcm1faW50ZWxfYm8gKmRybV9pbnRl bF9ib19hbGxvY190aWxlZChkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCisJCQkJCSAgIGNvbnN0 IGNoYXIgKm5hbWUsCisJCQkJCSAgIGludCB4LCBpbnQgeSwgaW50IGNwcCwKKwkJCQkJICAgdWlu dDMyX3QgKnRpbGluZ19tb2RlLAorCQkJCQkgICB1bnNpZ25lZCBsb25nICpwaXRjaCwKKwkJCQkJ ICAgdW5zaWduZWQgbG9uZyBmbGFncyk7Cit2b2lkIGRybV9pbnRlbF9idWZtZ3JfZ2VtX3NldF9h dWJfZmlsZW5hbWUoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAorCQkJCQkgIGNvbnN0IGNoYXIg KmZpbGVuYW1lKTsKK3ZvaWQgZHJtX2ludGVsX2J1Zm1ncl9nZW1fc2V0X2F1Yl9kdW1wKGRybV9p bnRlbF9idWZtZ3IgKmJ1Zm1nciwgaW50IGVuYWJsZSk7Cit2b2lkIGRybV9pbnRlbF9nZW1fYm9f YXViX2R1bXBfYm1wKGRybV9pbnRlbF9ibyAqYm8sCisJCQkJICAgaW50IHgxLCBpbnQgeTEsIGlu dCB3aWR0aCwgaW50IGhlaWdodCwKKwkJCQkgICBlbnVtIGF1Yl9kdW1wX2JtcF9mb3JtYXQgZm9y bWF0LAorCQkJCSAgIGludCBwaXRjaCwgaW50IG9mZnNldCk7Cit2b2lkIGRybV9pbnRlbF9nZW1f Ym9fc3RhcnRfZ3R0X2FjY2Vzcyhkcm1faW50ZWxfYm8gKmJvLCBpbnQgd3JpdGVfZW5hYmxlKTsK K2ludCBkcm1faW50ZWxfYm9fc2V0X3RpbGluZyhkcm1faW50ZWxfYm8gKmJvLCB1aW50MzJfdCAq IHRpbGluZ19tb2RlLAorCQkJCXVpbnQzMl90IHN0cmlkZSk7CitpbnQgZHJtX2ludGVsX2JvX2Rp c2FibGVfcmV1c2UoZHJtX2ludGVsX2JvICpibyk7Cit2b2lkIGRybV9pbnRlbF9ib19yZWZlcmVu Y2UoZHJtX2ludGVsX2JvICpibyk7CitpbnQgZHJtX2ludGVsX2J1Zm1ncl9nZW1fZ2V0X2Rldmlk KGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncik7Citkcm1faW50ZWxfYm8gKmRybV9pbnRlbF9ib19h bGxvY19mb3JfcmVuZGVyKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKKwkJCQkJCWNvbnN0IGNo YXIgKm5hbWUsCisJCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCQl1bnNpZ25lZCBpbnQg YWxpZ25tZW50KTsKK2ludCBkcm1faW50ZWxfYm9fcmVmZXJlbmNlcyhkcm1faW50ZWxfYm8gKmJv LCBkcm1faW50ZWxfYm8gKnRhcmdldF9ibyk7CitpbnQgZHJtX2ludGVsX2dlbV9ib193YWl0KGRy bV9pbnRlbF9ibyAqYm8sIGludDY0X3QgdGltZW91dF9ucyk7Citkcm1faW50ZWxfYm8gKmRybV9p bnRlbF9ib19hbGxvY191c2VycHRyKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKKwkJCQkJIGNv bnN0IGNoYXIgKm5hbWUsCisJCQkJCSB2b2lkICphZGRyLCB1aW50MzJfdCB0aWxpbmdfbW9kZSwK KwkJCQkJIHVpbnQzMl90IHN0cmlkZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCQkgdW5zaWdu ZWQgbG9uZyBmbGFncyk7CisKKyNlbmRpZi8vSU5URUxfQlVGTUdSX0gKLS0gCjIuNy40CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK