From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Weinehall Subject: [PATCH i-g-t 1/3 v3] Copy gem_concurrent_all to gem_concurrent_blit Date: Fri, 30 Oct 2015 15:18:29 +0200 Message-ID: <1446211111-3940-2-git-send-email-david.weinehall@linux.intel.com> References: <1445600556-14884-1-git-send-email-david.weinehall@linux.intel.com> <1446211111-3940-1-git-send-email-david.weinehall@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id BAA7B6EC95 for ; Fri, 30 Oct 2015 06:19:45 -0700 (PDT) In-Reply-To: <1446211111-3940-1-git-send-email-david.weinehall@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org V2UnbGwgYm90aCByZW5hbWUgZ2VtX2NvbmN1cnJlbnRfYWxsIG92ZXIgZ2VtX2NvbmN1cnJlbnRf YmxpdAphbmQgY2hhbmdlIGdlbV9jb25jdXJyZW50X2JsaXQgaW4gdGhpcyBjaGFuZ2VzZXQuIFRv IG1ha2UKdGhpcyBlYXNpZXIgdG8gZm9sbG93IHdlIGZpcnN0IGRvIHRoZSB0aGUgcmVuYW1lLgoK U2lnbmVkLW9mZi1ieTogRGF2aWQgV2VpbmVoYWxsIDxkYXZpZC53ZWluZWhhbGxAbGludXguaW50 ZWwuY29tPgotLS0KIHRlc3RzL2dlbV9jb25jdXJyZW50X2JsaXQuYyB8IDExMTYgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDExMDgg aW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90ZXN0cy9nZW1fY29u Y3VycmVudF9ibGl0LmMgYi90ZXN0cy9nZW1fY29uY3VycmVudF9ibGl0LmMKaW5kZXggNTEzZGU0 YTFiNzE5Li4xZDJkNzg3MjAyZGYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2dlbV9jb25jdXJyZW50X2Js aXQuYworKysgYi90ZXN0cy9nZW1fY29uY3VycmVudF9ibGl0LmMKQEAgLTEsOCArMSwxMTA4IEBA Ci0vKiBUaGlzIHRlc3QgaXMganVzdCBhIGR1cGxpY2F0ZSBvZiBnZW1fY29uY3VycmVudF9hbGwu ICovCi0vKiBIb3dldmVyIHRoZSBleGVjdXRlYWJsZSB3aWxsIGJlIGdlbV9jb25jdXJyZW50X2Js aXQuICovCi0vKiBUaGUgbWFpbiBmdW5jdGlvbiBleGFtaW5lcyBhcmd2WzBdIGFuZCwgaW4gdGhl IGNhc2UgICovCi0vKiBvZiBnZW1fY29uY3VyZW50X2JsaXQgcnVucyBvbmx5IGEgc3Vic2V0IG9m IHRoZSAgICAgICovCi0vKiBhdmFpbGFibGUgc3VidGVzdHMuIFRoaXMgYXZvaWRzIHRoZSB1c2Ug b2YgICAgICAgICAgICovCi0vKiBub24tc3RhbmRhcmQgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMg d2hpY2ggY2FuIGNhdXNlICovCi0vKiBwcm9ibGVtcyBmb3IgYXV0b21hdGVkIHRlc3RpbmcgKi8K LSNpbmNsdWRlICJnZW1fY29uY3VycmVudF9hbGwuYyIKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAw OSwyMDEyLDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxl cmljQGFuaG9sdC5uZXQ+CisgKiAgICBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KKyAqICAgIERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+CisgKgor ICovCisKKy8qKiBAZmlsZSBnZW1fY29uY3VycmVudC5jCisgKgorICogVGhpcyBpcyBhIHRlc3Qg b2YgcHJlYWQvcHdyaXRlL21tYXAgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHRvIGFjdGl2ZQorICog YnVmZmVycy4KKyAqCisgKiBCYXNlZCBvbiBnZW1fZ3R0X2NvbmN1cnJlbnRfYmx0LgorICovCisK KyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5o PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8aW50 dHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5j bHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCisjaW5jbHVkZSA8ZHJt Lmg+CisKKyNpbmNsdWRlICJpbnRlbF9idWZtZ3IuaCIKKworSUdUX1RFU1RfREVTQ1JJUFRJT04o IlRlc3Qgb2YgcHJlYWQvcHdyaXRlL21tYXAgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHRvIGFjdGl2 ZSIKKwkJICAgICAiIGJ1ZmZlcnMuIik7CisKK2ludCBmZCwgZGV2aWQsIGdlbjsKK3N0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CitpbnQgYWxsOworCitzdGF0aWMgdm9pZAorbm9wX3Jl bGVhc2VfYm8oZHJtX2ludGVsX2JvICpibykKK3sKKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2Uo Ym8pOworfQorCitzdGF0aWMgdm9pZAorcHJ3X3NldF9ibyhkcm1faW50ZWxfYm8gKmJvLCB1aW50 MzJfdCB2YWwsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwlpbnQgc2l6ZSA9IHdpZHRoICog aGVpZ2h0LCBpOworCXVpbnQzMl90ICp0bXA7CisKKwl0bXAgPSBtYWxsb2MoNCpzaXplKTsKKwlp ZiAodG1wKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCQl0bXBbaV0gPSB2YWw7 CisJCWRybV9pbnRlbF9ib19zdWJkYXRhKGJvLCAwLCA0KnNpemUsIHRtcCk7CisJCWZyZWUodG1w KTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQkJZHJtX2ludGVs X2JvX3N1YmRhdGEoYm8sIDQqaSwgNCwgJnZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcHJ3 X2NtcF9ibyhkcm1faW50ZWxfYm8gKmJvLCB1aW50MzJfdCB2YWwsIGludCB3aWR0aCwgaW50IGhl aWdodCwgZHJtX2ludGVsX2JvICp0bXApCit7CisJaW50IHNpemUgPSB3aWR0aCAqIGhlaWdodCwg aTsKKwl1aW50MzJfdCAqdmFkZHI7CisKKwlkb19vcl9kaWUoZHJtX2ludGVsX2JvX21hcCh0bXAs IHRydWUpKTsKKwlkb19vcl9kaWUoZHJtX2ludGVsX2JvX2dldF9zdWJkYXRhKGJvLCAwLCA0KnNp emUsIHRtcC0+dmlydHVhbCkpOworCXZhZGRyID0gdG1wLT52aXJ0dWFsOworCWZvciAoaSA9IDA7 IGkgPCBzaXplOyBpKyspCisJCWlndF9hc3NlcnRfZXFfdTMyKHZhZGRyW2ldLCB2YWwpOworCWRy bV9pbnRlbF9ib191bm1hcCh0bXApOworfQorCitzdGF0aWMgZHJtX2ludGVsX2JvICoKK3VubWFw cGVkX2NyZWF0ZV9ibyhkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsIGludCB3aWR0aCwgaW50IGhl aWdodCkKK3sKKwlkcm1faW50ZWxfYm8gKmJvOworCisJYm8gPSBkcm1faW50ZWxfYm9fYWxsb2Mo YnVmbWdyLCAiYm8iLCA0KndpZHRoKmhlaWdodCwgMCk7CisJaWd0X2Fzc2VydChibyk7CisKKwly ZXR1cm4gYm87Cit9CisKK3N0YXRpYyBkcm1faW50ZWxfYm8gKgorc25vb3BfY3JlYXRlX2JvKGRy bV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCWRybV9p bnRlbF9ibyAqYm87CisKKwlpZ3Rfc2tpcF9vbihnZW1faGFzX2xsYyhmZCkpOworCisJYm8gPSB1 bm1hcHBlZF9jcmVhdGVfYm8oYnVmbWdyLCB3aWR0aCwgaGVpZ2h0KTsKKwlnZW1fc2V0X2NhY2hp bmcoZmQsIGJvLT5oYW5kbGUsIEk5MTVfQ0FDSElOR19DQUNIRUQpOworCWRybV9pbnRlbF9ib19k aXNhYmxlX3JldXNlKGJvKTsKKworCXJldHVybiBibzsKK30KKworc3RhdGljIHZvaWQKK2d0dF9z ZXRfYm8oZHJtX2ludGVsX2JvICpibywgdWludDMyX3QgdmFsLCBpbnQgd2lkdGgsIGludCBoZWln aHQpCit7CisJdWludDMyX3QgKnZhZGRyID0gYm8tPnZpcnR1YWw7CisJaW50IHNpemUgPSB3aWR0 aCAqIGhlaWdodDsKKworCWRybV9pbnRlbF9nZW1fYm9fc3RhcnRfZ3R0X2FjY2VzcyhibywgdHJ1 ZSk7CisJd2hpbGUgKHNpemUtLSkKKwkJKnZhZGRyKysgPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lk CitndHRfY21wX2JvKGRybV9pbnRlbF9ibyAqYm8sIHVpbnQzMl90IHZhbCwgaW50IHdpZHRoLCBp bnQgaGVpZ2h0LCBkcm1faW50ZWxfYm8gKnRtcCkKK3sKKwl1aW50MzJfdCAqdmFkZHIgPSBiby0+ dmlydHVhbDsKKwlpbnQgeTsKKworCS8qIEdUVCBhY2Nlc3MgaXMgc2xvdy4gU28gd2UganVzdCBj b21wYXJlIGEgZmV3IHBvaW50cyAqLworCWRybV9pbnRlbF9nZW1fYm9fc3RhcnRfZ3R0X2FjY2Vz cyhibywgZmFsc2UpOworCWZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKwkJaWd0X2Fzc2Vy dF9lcV91MzIodmFkZHJbeSp3aWR0aCt5XSwgdmFsKTsKK30KKworc3RhdGljIGRybV9pbnRlbF9i byAqCittYXBfYm8oZHJtX2ludGVsX2JvICpibykKK3sKKwkvKiBndHQgbWFwIGRvZXNuJ3QgaGF2 ZSBhIHdyaXRlIHBhcmFtZXRlciwgc28ganVzdCBrZWVwIHRoZSBtYXBwaW5nCisJICogYXJvdW5k ICh0byBhdm9pZCB0aGUgc2V0X2RvbWFpbiB3aXRoIHRoZSBndHQgd3JpdGUgZG9tYWluIHNldCkg YW5kCisJICogbWFudWFsbHkgdGVsbCB0aGUga2VybmVsIHdoZW4gd2Ugc3RhcnQgYWNjZXNzIHRo ZSBndHQuICovCisJZG9fb3JfZGllKGRybV9pbnRlbF9nZW1fYm9fbWFwX2d0dChibykpOworCisJ cmV0dXJuIGJvOworfQorCitzdGF0aWMgZHJtX2ludGVsX2JvICoKK3RpbGVfYm8oZHJtX2ludGVs X2JvICpibywgaW50IHdpZHRoKQoreworCXVpbnQzMl90IHRpbGluZyA9IEk5MTVfVElMSU5HX1g7 CisJdWludDMyX3Qgc3RyaWRlID0gd2lkdGggKiA0OworCisJZG9fb3JfZGllKGRybV9pbnRlbF9i b19zZXRfdGlsaW5nKGJvLCAmdGlsaW5nLCBzdHJpZGUpKTsKKworCXJldHVybiBibzsKK30KKwor c3RhdGljIGRybV9pbnRlbF9ibyAqCitndHRfY3JlYXRlX2JvKGRybV9pbnRlbF9idWZtZ3IgKmJ1 Zm1nciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCXJldHVybiBtYXBfYm8odW5tYXBwZWRf Y3JlYXRlX2JvKGJ1Zm1nciwgd2lkdGgsIGhlaWdodCkpOworfQorCitzdGF0aWMgZHJtX2ludGVs X2JvICoKK2d0dFhfY3JlYXRlX2JvKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwgaW50IHdpZHRo LCBpbnQgaGVpZ2h0KQoreworCXJldHVybiB0aWxlX2JvKGd0dF9jcmVhdGVfYm8oYnVmbWdyLCB3 aWR0aCwgaGVpZ2h0KSwgd2lkdGgpOworfQorCitzdGF0aWMgZHJtX2ludGVsX2JvICoKK3djX2Ny ZWF0ZV9ibyhkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsIGludCB3aWR0aCwgaW50IGhlaWdodCkK K3sKKwlkcm1faW50ZWxfYm8gKmJvOworCisJZ2VtX3JlcXVpcmVfbW1hcF93YyhmZCk7CisKKwli byA9IHVubWFwcGVkX2NyZWF0ZV9ibyhidWZtZ3IsIHdpZHRoLCBoZWlnaHQpOworCWJvLT52aXJ0 dWFsID0gX19nZW1fbW1hcF9fd2MoZmQsIGJvLT5oYW5kbGUsIDAsIGJvLT5zaXplLCBQUk9UX1JF QUQgfCBQUk9UX1dSSVRFKTsKKwlyZXR1cm4gYm87Cit9CisKK3N0YXRpYyB2b2lkCit3Y19yZWxl YXNlX2JvKGRybV9pbnRlbF9ibyAqYm8pCit7CisJbXVubWFwKGJvLT52aXJ0dWFsLCBiby0+c2l6 ZSk7CisJYm8tPnZpcnR1YWwgPSBOVUxMOworCisJbm9wX3JlbGVhc2VfYm8oYm8pOworfQorCitz dGF0aWMgZHJtX2ludGVsX2JvICoKK2dwdV9jcmVhdGVfYm8oZHJtX2ludGVsX2J1Zm1nciAqYnVm bWdyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJcmV0dXJuIHVubWFwcGVkX2NyZWF0ZV9i byhidWZtZ3IsIHdpZHRoLCBoZWlnaHQpOworfQorCisKK3N0YXRpYyBkcm1faW50ZWxfYm8gKgor Z3B1WF9jcmVhdGVfYm8oZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLCBpbnQgd2lkdGgsIGludCBo ZWlnaHQpCit7CisJcmV0dXJuIHRpbGVfYm8oZ3B1X2NyZWF0ZV9ibyhidWZtZ3IsIHdpZHRoLCBo ZWlnaHQpLCB3aWR0aCk7Cit9CisKK3N0YXRpYyB2b2lkCitjcHVfc2V0X2JvKGRybV9pbnRlbF9i byAqYm8sIHVpbnQzMl90IHZhbCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCWludCBzaXpl ID0gd2lkdGggKiBoZWlnaHQ7CisJdWludDMyX3QgKnZhZGRyOworCisJZG9fb3JfZGllKGRybV9p bnRlbF9ib19tYXAoYm8sIHRydWUpKTsKKwl2YWRkciA9IGJvLT52aXJ0dWFsOworCXdoaWxlIChz aXplLS0pCisJCSp2YWRkcisrID0gdmFsOworCWRybV9pbnRlbF9ib191bm1hcChibyk7Cit9CisK K3N0YXRpYyB2b2lkCitjcHVfY21wX2JvKGRybV9pbnRlbF9ibyAqYm8sIHVpbnQzMl90IHZhbCwg aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBkcm1faW50ZWxfYm8gKnRtcCkKK3sKKwlpbnQgc2l6ZSA9 IHdpZHRoICogaGVpZ2h0OworCXVpbnQzMl90ICp2YWRkcjsKKworCWRvX29yX2RpZShkcm1faW50 ZWxfYm9fbWFwKGJvLCBmYWxzZSkpOworCXZhZGRyID0gYm8tPnZpcnR1YWw7CisJd2hpbGUgKHNp emUtLSkKKwkJaWd0X2Fzc2VydF9lcV91MzIoKnZhZGRyKyssIHZhbCk7CisJZHJtX2ludGVsX2Jv X3VubWFwKGJvKTsKK30KKworc3RhdGljIHZvaWQKK2dwdV9zZXRfYm8oZHJtX2ludGVsX2JvICpi bywgdWludDMyX3QgdmFsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJc3RydWN0IGRybV9p OTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jWzFdOworCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyIGdlbV9leGVjWzJdOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZl cjIgZXhlY2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSBnZW1fcHdyaXRlOworCXN0 cnVjdCBkcm1faTkxNV9nZW1fY3JlYXRlIGNyZWF0ZTsKKwl1aW50MzJfdCBidWZbMTBdLCAqYjsK Kwl1aW50MzJfdCB0aWxpbmcsIHN3aXp6bGU7CisKKwlkcm1faW50ZWxfYm9fZ2V0X3RpbGluZyhi bywgJnRpbGluZywgJnN3aXp6bGUpOworCisJbWVtc2V0KHJlbG9jLCAwLCBzaXplb2YocmVsb2Mp KTsKKwltZW1zZXQoZ2VtX2V4ZWMsIDAsIHNpemVvZihnZW1fZXhlYykpOworCW1lbXNldCgmZXhl Y2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKKworCWIgPSBidWY7CisJKmIrKyA9IFhZX0NPTE9S X0JMVF9DTURfTk9MRU4gfAorCQkoKGdlbiA+PSA4KSA/IDUgOiA0KSB8CisJCUNPTE9SX0JMVF9X UklURV9BTFBIQSB8IFhZX0NPTE9SX0JMVF9XUklURV9SR0I7CisJaWYgKGdlbiA+PSA0ICYmIHRp bGluZykgeworCQliWy0xXSB8PSBYWV9DT0xPUl9CTFRfVElMRUQ7CisJCSpiID0gd2lkdGg7CisJ fSBlbHNlCisJCSpiID0gd2lkdGggPDwgMjsKKwkqYisrIHw9IDB4ZjAgPDwgMTYgfCAxIDw8IDI1 IHwgMSA8PCAyNDsKKwkqYisrID0gMDsKKwkqYisrID0gaGVpZ2h0IDw8IDE2IHwgd2lkdGg7CisJ cmVsb2NbMF0ub2Zmc2V0ID0gKGIgLSBidWYpICogc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWxvY1sw XS50YXJnZXRfaGFuZGxlID0gYm8tPmhhbmRsZTsKKwlyZWxvY1swXS5yZWFkX2RvbWFpbnMgPSBJ OTE1X0dFTV9ET01BSU5fUkVOREVSOworCXJlbG9jWzBdLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VN X0RPTUFJTl9SRU5ERVI7CisJKmIrKyA9IDA7CisJaWYgKGdlbiA+PSA4KQorCQkqYisrID0gMDsK KwkqYisrID0gdmFsOworCSpiKysgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCWlmICgoYiAtIGJ1 ZikgJiAxKQorCQkqYisrID0gMDsKKworCWdlbV9leGVjWzBdLmhhbmRsZSA9IGJvLT5oYW5kbGU7 CisJZ2VtX2V4ZWNbMF0uZmxhZ3MgPSBFWEVDX09CSkVDVF9ORUVEU19GRU5DRTsKKworCWNyZWF0 ZS5oYW5kbGUgPSAwOworCWNyZWF0ZS5zaXplID0gNDA5NjsKKwlkcm1Jb2N0bChmZCwgRFJNX0lP Q1RMX0k5MTVfR0VNX0NSRUFURSwgJmNyZWF0ZSk7CisJZ2VtX2V4ZWNbMV0uaGFuZGxlID0gY3Jl YXRlLmhhbmRsZTsKKwlnZW1fZXhlY1sxXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKKwlnZW1fZXhl Y1sxXS5yZWxvY3NfcHRyID0gKHVpbnRwdHJfdClyZWxvYzsKKworCWV4ZWNidWYuYnVmZmVyc19w dHIgPSAodWludHB0cl90KWdlbV9leGVjOworCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMjsKKwll eGVjYnVmLmJhdGNoX2xlbiA9IChiIC0gYnVmKSAqIHNpemVvZihidWZbMF0pOworCWlmIChnZW4g Pj0gNikKKwkJZXhlY2J1Zi5mbGFncyA9IEk5MTVfRVhFQ19CTFQ7CisKKwlnZW1fcHdyaXRlLmhh bmRsZSA9IGdlbV9leGVjWzFdLmhhbmRsZTsKKwlnZW1fcHdyaXRlLm9mZnNldCA9IDA7CisJZ2Vt X3B3cml0ZS5zaXplID0gZXhlY2J1Zi5iYXRjaF9sZW47CisJZ2VtX3B3cml0ZS5kYXRhX3B0ciA9 ICh1aW50cHRyX3QpYnVmOworCWRvX29yX2RpZShkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVf R0VNX1BXUklURSwgJmdlbV9wd3JpdGUpKTsKKwlkb19vcl9kaWUoZHJtSW9jdGwoZmQsIERSTV9J T0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMiwgJmV4ZWNidWYpKTsKKworCWRybUlvY3RsKGZkLCBE Uk1fSU9DVExfR0VNX0NMT1NFLCAmY3JlYXRlLmhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkCitn cHVfY21wX2JvKGRybV9pbnRlbF9ibyAqYm8sIHVpbnQzMl90IHZhbCwgaW50IHdpZHRoLCBpbnQg aGVpZ2h0LCBkcm1faW50ZWxfYm8gKnRtcCkKK3sKKwlpbnRlbF9ibHRfY29weShiYXRjaCwKKwkJ ICAgICAgIGJvLCAwLCAwLCA0KndpZHRoLAorCQkgICAgICAgdG1wLCAwLCAwLCA0KndpZHRoLAor CQkgICAgICAgd2lkdGgsIGhlaWdodCwgMzIpOworCWNwdV9jbXBfYm8odG1wLCB2YWwsIHdpZHRo LCBoZWlnaHQsIE5VTEwpOworfQorCitjb25zdCBzdHJ1Y3QgYWNjZXNzX21vZGUgeworCWNvbnN0 IGNoYXIgKm5hbWU7CisJdm9pZCAoKnNldF9ibykoZHJtX2ludGVsX2JvICpibywgdWludDMyX3Qg dmFsLCBpbnQgdywgaW50IGgpOworCXZvaWQgKCpjbXBfYm8pKGRybV9pbnRlbF9ibyAqYm8sIHVp bnQzMl90IHZhbCwgaW50IHcsIGludCBoLCBkcm1faW50ZWxfYm8gKnRtcCk7CisJZHJtX2ludGVs X2JvICooKmNyZWF0ZV9ibykoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQpOworCXZvaWQgKCpyZWxlYXNlX2JvKShkcm1faW50ZWxfYm8gKmJvKTsKK30gYWNj ZXNzX21vZGVzW10gPSB7CisJeworCQkubmFtZSA9ICJwcnciLAorCQkuc2V0X2JvID0gcHJ3X3Nl dF9ibywKKwkJLmNtcF9ibyA9IHByd19jbXBfYm8sCisJCS5jcmVhdGVfYm8gPSB1bm1hcHBlZF9j cmVhdGVfYm8sCisJCS5yZWxlYXNlX2JvID0gbm9wX3JlbGVhc2VfYm8sCisJfSwKKwl7CisJCS5u YW1lID0gImNwdSIsCisJCS5zZXRfYm8gPSBjcHVfc2V0X2JvLAorCQkuY21wX2JvID0gY3B1X2Nt cF9ibywKKwkJLmNyZWF0ZV9ibyA9IHVubWFwcGVkX2NyZWF0ZV9ibywKKwkJLnJlbGVhc2VfYm8g PSBub3BfcmVsZWFzZV9ibywKKwl9LAorCXsKKwkJLm5hbWUgPSAic25vb3AiLAorCQkuc2V0X2Jv ID0gY3B1X3NldF9ibywKKwkJLmNtcF9ibyA9IGNwdV9jbXBfYm8sCisJCS5jcmVhdGVfYm8gPSBz bm9vcF9jcmVhdGVfYm8sCisJCS5yZWxlYXNlX2JvID0gbm9wX3JlbGVhc2VfYm8sCisJfSwKKwl7 CisJCS5uYW1lID0gImd0dCIsCisJCS5zZXRfYm8gPSBndHRfc2V0X2JvLAorCQkuY21wX2JvID0g Z3R0X2NtcF9ibywKKwkJLmNyZWF0ZV9ibyA9IGd0dF9jcmVhdGVfYm8sCisJCS5yZWxlYXNlX2Jv ID0gbm9wX3JlbGVhc2VfYm8sCisJfSwKKwl7CisJCS5uYW1lID0gImd0dFgiLAorCQkuc2V0X2Jv ID0gZ3R0X3NldF9ibywKKwkJLmNtcF9ibyA9IGd0dF9jbXBfYm8sCisJCS5jcmVhdGVfYm8gPSBn dHRYX2NyZWF0ZV9ibywKKwkJLnJlbGVhc2VfYm8gPSBub3BfcmVsZWFzZV9ibywKKwl9LAorCXsK KwkJLm5hbWUgPSAid2MiLAorCQkuc2V0X2JvID0gZ3R0X3NldF9ibywKKwkJLmNtcF9ibyA9IGd0 dF9jbXBfYm8sCisJCS5jcmVhdGVfYm8gPSB3Y19jcmVhdGVfYm8sCisJCS5yZWxlYXNlX2JvID0g d2NfcmVsZWFzZV9ibywKKwl9LAorCXsKKwkJLm5hbWUgPSAiZ3B1IiwKKwkJLnNldF9ibyA9IGdw dV9zZXRfYm8sCisJCS5jbXBfYm8gPSBncHVfY21wX2JvLAorCQkuY3JlYXRlX2JvID0gZ3B1X2Ny ZWF0ZV9ibywKKwkJLnJlbGVhc2VfYm8gPSBub3BfcmVsZWFzZV9ibywKKwl9LAorCXsKKwkJLm5h bWUgPSAiZ3B1WCIsCisJCS5zZXRfYm8gPSBncHVfc2V0X2JvLAorCQkuY21wX2JvID0gZ3B1X2Nt cF9ibywKKwkJLmNyZWF0ZV9ibyA9IGdwdVhfY3JlYXRlX2JvLAorCQkucmVsZWFzZV9ibyA9IG5v cF9yZWxlYXNlX2JvLAorCX0sCit9OworCisjZGVmaW5lIE1BWF9OVU1fQlVGRkVSUyAxMDI0Citp bnQgbnVtX2J1ZmZlcnMgPSBNQVhfTlVNX0JVRkZFUlM7Citjb25zdCBpbnQgd2lkdGggPSA1MTIs IGhlaWdodCA9IDUxMjsKK2lndF9yZW5kZXJfY29weWZ1bmNfdCByZW5kZXJjb3B5OworCitzdHJ1 Y3QgYnVmZmVycyB7CisJY29uc3Qgc3RydWN0IGFjY2Vzc19tb2RlICptb2RlOworCWRybV9pbnRl bF9idWZtZ3IgKmJ1Zm1ncjsKKwlkcm1faW50ZWxfYm8gKnNyY1tNQVhfTlVNX0JVRkZFUlNdLCAq ZHN0W01BWF9OVU1fQlVGRkVSU107CisJZHJtX2ludGVsX2JvICpkdW1teSwgKnNwYXJlOworCWlu dCBjb3VudDsKK307CisKK3N0YXRpYyB2b2lkICpidWZmZXJzX2luaXQoc3RydWN0IGJ1ZmZlcnMg KmRhdGEsCisJCQkgIGNvbnN0IHN0cnVjdCBhY2Nlc3NfbW9kZSAqbW9kZSwKKwkJCSAgaW50IF9m ZCkKK3sKKwlkYXRhLT5tb2RlID0gbW9kZTsKKwlkYXRhLT5jb3VudCA9IDA7CisKKwlkYXRhLT5i dWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KF9mZCwgNDA5Nik7CisJaWd0X2Fzc2Vy dChkYXRhLT5idWZtZ3IpOworCisJZHJtX2ludGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGRh dGEtPmJ1Zm1ncik7CisJcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEtPmJ1Zm1n ciwgZGV2aWQpOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJzX2Rlc3Ryb3koc3RydWN0IGJ1ZmZl cnMgKmRhdGEpCit7CisJaWYgKGRhdGEtPmNvdW50ID09IDApCisJCXJldHVybjsKKworCWZvciAo aW50IGkgPSAwOyBpIDwgZGF0YS0+Y291bnQ7IGkrKykgeworCQlkYXRhLT5tb2RlLT5yZWxlYXNl X2JvKGRhdGEtPnNyY1tpXSk7CisJCWRhdGEtPm1vZGUtPnJlbGVhc2VfYm8oZGF0YS0+ZHN0W2ld KTsKKwl9CisJZGF0YS0+bW9kZS0+cmVsZWFzZV9ibyhkYXRhLT5kdW1teSk7CisJZGF0YS0+bW9k ZS0+cmVsZWFzZV9ibyhkYXRhLT5zcGFyZSk7CisJZGF0YS0+Y291bnQgPSAwOworfQorCitzdGF0 aWMgdm9pZCBidWZmZXJzX2NyZWF0ZShzdHJ1Y3QgYnVmZmVycyAqZGF0YSwKKwkJCSAgIGludCBj b3VudCkKK3sKKwlpZ3RfYXNzZXJ0KGRhdGEtPmJ1Zm1ncik7CisKKwlidWZmZXJzX2Rlc3Ryb3ko ZGF0YSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJZGF0YS0+c3Jj W2ldID0KKwkJCWRhdGEtPm1vZGUtPmNyZWF0ZV9ibyhkYXRhLT5idWZtZ3IsIHdpZHRoLCBoZWln aHQpOworCQlkYXRhLT5kc3RbaV0gPQorCQkJZGF0YS0+bW9kZS0+Y3JlYXRlX2JvKGRhdGEtPmJ1 Zm1nciwgd2lkdGgsIGhlaWdodCk7CisJfQorCWRhdGEtPmR1bW15ID0gZGF0YS0+bW9kZS0+Y3Jl YXRlX2JvKGRhdGEtPmJ1Zm1nciwgd2lkdGgsIGhlaWdodCk7CisJZGF0YS0+c3BhcmUgPSBkYXRh LT5tb2RlLT5jcmVhdGVfYm8oZGF0YS0+YnVmbWdyLCB3aWR0aCwgaGVpZ2h0KTsKKwlkYXRhLT5j b3VudCA9IGNvdW50OworfQorCitzdGF0aWMgdm9pZCBidWZmZXJzX2Zpbmkoc3RydWN0IGJ1ZmZl cnMgKmRhdGEpCit7CisJaWYgKGRhdGEtPmJ1Zm1nciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwli dWZmZXJzX2Rlc3Ryb3koZGF0YSk7CisKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGJhdGNoKTsK Kwlkcm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koZGF0YS0+YnVmbWdyKTsKKwlkYXRhLT5idWZtZ3Ig PSBOVUxMOworfQorCit0eXBlZGVmIHZvaWQgKCpkb19jb3B5KShkcm1faW50ZWxfYm8gKmRzdCwg ZHJtX2ludGVsX2JvICpzcmMpOwordHlwZWRlZiBzdHJ1Y3QgaWd0X2hhbmdfcmluZyAoKmRvX2hh bmcpKHZvaWQpOworCitzdGF0aWMgdm9pZCByZW5kZXJfY29weV9ibyhkcm1faW50ZWxfYm8gKmRz dCwgZHJtX2ludGVsX2JvICpzcmMpCit7CisJc3RydWN0IGlndF9idWYgZCA9IHsKKwkJLmJvID0g ZHN0LAorCQkuc2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogNCwKKwkJLm51bV90aWxlcyA9IHdpZHRo ICogaGVpZ2h0ICogNCwKKwkJLnN0cmlkZSA9IHdpZHRoICogNCwKKwl9LCBzID0geworCQkuYm8g PSBzcmMsCisJCS5zaXplID0gd2lkdGggKiBoZWlnaHQgKiA0LAorCQkubnVtX3RpbGVzID0gd2lk dGggKiBoZWlnaHQgKiA0LAorCQkuc3RyaWRlID0gd2lkdGggKiA0LAorCX07CisJdWludDMyX3Qg c3dpenpsZTsKKworCWRybV9pbnRlbF9ib19nZXRfdGlsaW5nKGRzdCwgJmQudGlsaW5nLCAmc3dp enpsZSk7CisJZHJtX2ludGVsX2JvX2dldF90aWxpbmcoc3JjLCAmcy50aWxpbmcsICZzd2l6emxl KTsKKworCXJlbmRlcmNvcHkoYmF0Y2gsIE5VTEwsCisJCSAgICZzLCAwLCAwLAorCQkgICB3aWR0 aCwgaGVpZ2h0LAorCQkgICAmZCwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGJsdF9jb3B5X2Jv KGRybV9pbnRlbF9ibyAqZHN0LCBkcm1faW50ZWxfYm8gKnNyYykKK3sKKwlpbnRlbF9ibHRfY29w eShiYXRjaCwKKwkJICAgICAgIHNyYywgMCwgMCwgNCp3aWR0aCwKKwkJICAgICAgIGRzdCwgMCwg MCwgNCp3aWR0aCwKKwkJICAgICAgIHdpZHRoLCBoZWlnaHQsIDMyKTsKK30KKworc3RhdGljIHZv aWQgY3B1X2NvcHlfYm8oZHJtX2ludGVsX2JvICpkc3QsIGRybV9pbnRlbF9ibyAqc3JjKQorewor CWNvbnN0IGludCBzaXplID0gd2lkdGggKiBoZWlnaHQgKiBzaXplb2YodWludDMyX3QpOworCXZv aWQgKmQsICpzOworCisJZ2VtX3NldF9kb21haW4oZmQsIHNyYy0+aGFuZGxlLCBJOTE1X0dFTV9E T01BSU5fQ1BVLCAwKTsKKwlnZW1fc2V0X2RvbWFpbihmZCwgZHN0LT5oYW5kbGUsIEk5MTVfR0VN X0RPTUFJTl9DUFUsIEk5MTVfR0VNX0RPTUFJTl9DUFUpOworCXMgPSBnZW1fbW1hcF9fY3B1KGZk LCBzcmMtPmhhbmRsZSwgMCwgc2l6ZSwgUFJPVF9SRUFEKTsKKwlkID0gZ2VtX21tYXBfX2NwdShm ZCwgZHN0LT5oYW5kbGUsIDAsIHNpemUsIFBST1RfV1JJVEUpOworCisJbWVtY3B5KGQsIHMsIHNp emUpOworCisJbXVubWFwKGQsIHNpemUpOworCW11bm1hcChzLCBzaXplKTsKK30KKworc3RhdGlj IHZvaWQgZ3R0X2NvcHlfYm8oZHJtX2ludGVsX2JvICpkc3QsIGRybV9pbnRlbF9ibyAqc3JjKQor eworCWNvbnN0IGludCBzaXplID0gd2lkdGggKiBoZWlnaHQgKiBzaXplb2YodWludDMyX3QpOwor CXZvaWQgKmQsICpzOworCisJZ2VtX3NldF9kb21haW4oZmQsIHNyYy0+aGFuZGxlLCBJOTE1X0dF TV9ET01BSU5fR1RULCAwKTsKKwlnZW1fc2V0X2RvbWFpbihmZCwgZHN0LT5oYW5kbGUsIEk5MTVf R0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCisJcyA9IGdlbV9tbWFwX19n dHQoZmQsIHNyYy0+aGFuZGxlLCBzaXplLCBQUk9UX1JFQUQpOworCWQgPSBnZW1fbW1hcF9fZ3R0 KGZkLCBkc3QtPmhhbmRsZSwgc2l6ZSwgUFJPVF9XUklURSk7CisKKwltZW1jcHkoZCwgcywgc2l6 ZSk7CisKKwltdW5tYXAoZCwgc2l6ZSk7CisJbXVubWFwKHMsIHNpemUpOworfQorCitzdGF0aWMg dm9pZCB3Y19jb3B5X2JvKGRybV9pbnRlbF9ibyAqZHN0LCBkcm1faW50ZWxfYm8gKnNyYykKK3sK Kwljb25zdCBpbnQgc2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogc2l6ZW9mKHVpbnQzMl90KTsKKwl2 b2lkICpkLCAqczsKKworCWdlbV9zZXRfZG9tYWluKGZkLCBzcmMtPmhhbmRsZSwgSTkxNV9HRU1f RE9NQUlOX0dUVCwgMCk7CisJZ2VtX3NldF9kb21haW4oZmQsIGRzdC0+aGFuZGxlLCBJOTE1X0dF TV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKworCXMgPSBnZW1fbW1hcF9fd2Mo ZmQsIHNyYy0+aGFuZGxlLCAwLCBzaXplLCBQUk9UX1JFQUQpOworCWQgPSBnZW1fbW1hcF9fd2Mo ZmQsIGRzdC0+aGFuZGxlLCAwLCBzaXplLCBQUk9UX1dSSVRFKTsKKworCW1lbWNweShkLCBzLCBz aXplKTsKKworCW11bm1hcChkLCBzaXplKTsKKwltdW5tYXAocywgc2l6ZSk7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgaWd0X2hhbmdfcmluZyBub19oYW5nKHZvaWQpCit7CisJcmV0dXJuIChzdHJ1Y3Qg aWd0X2hhbmdfcmluZyl7MCwgMH07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWd0X2hhbmdfcmluZyBi Y3NfaGFuZyh2b2lkKQoreworCXJldHVybiBpZ3RfaGFuZ19yaW5nKGZkLCBJOTE1X0VYRUNfQkxU KTsKK30KKworc3RhdGljIHN0cnVjdCBpZ3RfaGFuZ19yaW5nIHJjc19oYW5nKHZvaWQpCit7CisJ cmV0dXJuIGlndF9oYW5nX3JpbmcoZmQsIEk5MTVfRVhFQ19SRU5ERVIpOworfQorCitzdGF0aWMg dm9pZCBoYW5nX3JlcXVpcmUodm9pZCkKK3sKKwlpZ3RfcmVxdWlyZV9oYW5nX3JpbmcoZmQsIC0x KTsKK30KKworc3RhdGljIHZvaWQgZG9fb3ZlcndyaXRlX3NvdXJjZShzdHJ1Y3QgYnVmZmVycyAq YnVmZmVycywKKwkJCQlkb19jb3B5IGRvX2NvcHlfZnVuYywKKwkJCQlkb19oYW5nIGRvX2hhbmdf ZnVuYykKK3sKKwlzdHJ1Y3QgaWd0X2hhbmdfcmluZyBoYW5nOworCWludCBpOworCisJZ2VtX3F1 aWVzY2VudF9ncHUoZmQpOworCWZvciAoaSA9IDA7IGkgPCBidWZmZXJzLT5jb3VudDsgaSsrKSB7 CisJCWJ1ZmZlcnMtPm1vZGUtPnNldF9ibyhidWZmZXJzLT5zcmNbaV0sIGksIHdpZHRoLCBoZWln aHQpOworCQlidWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVycy0+ZHN0W2ldLCB+aSwgd2lkdGgs IGhlaWdodCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBidWZmZXJzLT5jb3VudDsgaSsrKQorCQlk b19jb3B5X2Z1bmMoYnVmZmVycy0+ZHN0W2ldLCBidWZmZXJzLT5zcmNbaV0pOworCWhhbmcgPSBk b19oYW5nX2Z1bmMoKTsKKwlmb3IgKGkgPSBidWZmZXJzLT5jb3VudDsgaS0tOyApCisJCWJ1ZmZl cnMtPm1vZGUtPnNldF9ibyhidWZmZXJzLT5zcmNbaV0sIDB4ZGVhZGJlZWYsIHdpZHRoLCBoZWln aHQpOworCWZvciAoaSA9IDA7IGkgPCBidWZmZXJzLT5jb3VudDsgaSsrKQorCQlidWZmZXJzLT5t b2RlLT5jbXBfYm8oYnVmZmVycy0+ZHN0W2ldLCBpLCB3aWR0aCwgaGVpZ2h0LCBidWZmZXJzLT5k dW1teSk7CisJaWd0X3Bvc3RfaGFuZ19yaW5nKGZkLCBoYW5nKTsKK30KKworc3RhdGljIHZvaWQg ZG9fb3ZlcndyaXRlX3NvdXJjZV9yZWFkKHN0cnVjdCBidWZmZXJzICpidWZmZXJzLAorCQkJCSAg ICAgZG9fY29weSBkb19jb3B5X2Z1bmMsCisJCQkJICAgICBkb19oYW5nIGRvX2hhbmdfZnVuYywK KwkJCQkgICAgIGludCBkb19yY3MpCit7CisJY29uc3QgaW50IGhhbGYgPSBidWZmZXJzLT5jb3Vu dC8yOworCXN0cnVjdCBpZ3RfaGFuZ19yaW5nIGhhbmc7CisJaW50IGk7CisKKwlnZW1fcXVpZXNj ZW50X2dwdShmZCk7CisJZm9yIChpID0gMDsgaSA8IGhhbGY7IGkrKykgeworCQlidWZmZXJzLT5t b2RlLT5zZXRfYm8oYnVmZmVycy0+c3JjW2ldLCBpLCB3aWR0aCwgaGVpZ2h0KTsKKwkJYnVmZmVy cy0+bW9kZS0+c2V0X2JvKGJ1ZmZlcnMtPmRzdFtpXSwgfmksIHdpZHRoLCBoZWlnaHQpOworCQli dWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVycy0+ZHN0W2kraGFsZl0sIH5pLCB3aWR0aCwgaGVp Z2h0KTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGhhbGY7IGkrKykgeworCQlkb19jb3B5X2Z1bmMo YnVmZmVycy0+ZHN0W2ldLCBidWZmZXJzLT5zcmNbaV0pOworCQlpZiAoZG9fcmNzKQorCQkJcmVu ZGVyX2NvcHlfYm8oYnVmZmVycy0+ZHN0W2kraGFsZl0sIGJ1ZmZlcnMtPnNyY1tpXSk7CisJCWVs c2UKKwkJCWJsdF9jb3B5X2JvKGJ1ZmZlcnMtPmRzdFtpK2hhbGZdLCBidWZmZXJzLT5zcmNbaV0p OworCX0KKwloYW5nID0gZG9faGFuZ19mdW5jKCk7CisJZm9yIChpID0gaGFsZjsgaS0tOyApCisJ CWJ1ZmZlcnMtPm1vZGUtPnNldF9ibyhidWZmZXJzLT5zcmNbaV0sIDB4ZGVhZGJlZWYsIHdpZHRo LCBoZWlnaHQpOworCWZvciAoaSA9IDA7IGkgPCBoYWxmOyBpKyspIHsKKwkJYnVmZmVycy0+bW9k ZS0+Y21wX2JvKGJ1ZmZlcnMtPmRzdFtpXSwgaSwgd2lkdGgsIGhlaWdodCwgYnVmZmVycy0+ZHVt bXkpOworCQlidWZmZXJzLT5tb2RlLT5jbXBfYm8oYnVmZmVycy0+ZHN0W2kraGFsZl0sIGksIHdp ZHRoLCBoZWlnaHQsIGJ1ZmZlcnMtPmR1bW15KTsKKwl9CisJaWd0X3Bvc3RfaGFuZ19yaW5nKGZk LCBoYW5nKTsKK30KKworc3RhdGljIHZvaWQgZG9fb3ZlcndyaXRlX3NvdXJjZV9yZWFkX2Jjcyhz dHJ1Y3QgYnVmZmVycyAqYnVmZmVycywKKwkJCQkJIGRvX2NvcHkgZG9fY29weV9mdW5jLAorCQkJ CQkgZG9faGFuZyBkb19oYW5nX2Z1bmMpCit7CisJZG9fb3ZlcndyaXRlX3NvdXJjZV9yZWFkKGJ1 ZmZlcnMsIGRvX2NvcHlfZnVuYywgZG9faGFuZ19mdW5jLCAwKTsKK30KKworc3RhdGljIHZvaWQg ZG9fb3ZlcndyaXRlX3NvdXJjZV9yZWFkX3JjcyhzdHJ1Y3QgYnVmZmVycyAqYnVmZmVycywKKwkJ CQkJIGRvX2NvcHkgZG9fY29weV9mdW5jLAorCQkJCQkgZG9faGFuZyBkb19oYW5nX2Z1bmMpCit7 CisJZG9fb3ZlcndyaXRlX3NvdXJjZV9yZWFkKGJ1ZmZlcnMsIGRvX2NvcHlfZnVuYywgZG9faGFu Z19mdW5jLCAxKTsKK30KKworc3RhdGljIHZvaWQgZG9fb3ZlcndyaXRlX3NvdXJjZV9fcmV2KHN0 cnVjdCBidWZmZXJzICpidWZmZXJzLAorCQkJCSAgICAgZG9fY29weSBkb19jb3B5X2Z1bmMsCisJ CQkJICAgICBkb19oYW5nIGRvX2hhbmdfZnVuYykKK3sKKwlzdHJ1Y3QgaWd0X2hhbmdfcmluZyBo YW5nOworCWludCBpOworCisJZ2VtX3F1aWVzY2VudF9ncHUoZmQpOworCWZvciAoaSA9IDA7IGkg PCBidWZmZXJzLT5jb3VudDsgaSsrKSB7CisJCWJ1ZmZlcnMtPm1vZGUtPnNldF9ibyhidWZmZXJz LT5zcmNbaV0sIGksIHdpZHRoLCBoZWlnaHQpOworCQlidWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVm ZmVycy0+ZHN0W2ldLCB+aSwgd2lkdGgsIGhlaWdodCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBi dWZmZXJzLT5jb3VudDsgaSsrKQorCQlkb19jb3B5X2Z1bmMoYnVmZmVycy0+ZHN0W2ldLCBidWZm ZXJzLT5zcmNbaV0pOworCWhhbmcgPSBkb19oYW5nX2Z1bmMoKTsKKwlmb3IgKGkgPSAwOyBpIDwg YnVmZmVycy0+Y291bnQ7IGkrKykKKwkJYnVmZmVycy0+bW9kZS0+c2V0X2JvKGJ1ZmZlcnMtPnNy Y1tpXSwgMHhkZWFkYmVlZiwgd2lkdGgsIGhlaWdodCk7CisJZm9yIChpID0gYnVmZmVycy0+Y291 bnQ7IGktLTsgKQorCQlidWZmZXJzLT5tb2RlLT5jbXBfYm8oYnVmZmVycy0+ZHN0W2ldLCBpLCB3 aWR0aCwgaGVpZ2h0LCBidWZmZXJzLT5kdW1teSk7CisJaWd0X3Bvc3RfaGFuZ19yaW5nKGZkLCBo YW5nKTsKK30KKworc3RhdGljIHZvaWQgZG9fb3ZlcndyaXRlX3NvdXJjZV9fb25lKHN0cnVjdCBi dWZmZXJzICpidWZmZXJzLAorCQkJCSAgICAgZG9fY29weSBkb19jb3B5X2Z1bmMsCisJCQkJICAg ICBkb19oYW5nIGRvX2hhbmdfZnVuYykKK3sKKwlzdHJ1Y3QgaWd0X2hhbmdfcmluZyBoYW5nOwor CisJZ2VtX3F1aWVzY2VudF9ncHUoZmQpOworCWJ1ZmZlcnMtPm1vZGUtPnNldF9ibyhidWZmZXJz LT5zcmNbMF0sIDAsIHdpZHRoLCBoZWlnaHQpOworCWJ1ZmZlcnMtPm1vZGUtPnNldF9ibyhidWZm ZXJzLT5kc3RbMF0sIH4wLCB3aWR0aCwgaGVpZ2h0KTsKKwlkb19jb3B5X2Z1bmMoYnVmZmVycy0+ ZHN0WzBdLCBidWZmZXJzLT5zcmNbMF0pOworCWhhbmcgPSBkb19oYW5nX2Z1bmMoKTsKKwlidWZm ZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVycy0+c3JjWzBdLCAweGRlYWRiZWVmLCB3aWR0aCwgaGVp Z2h0KTsKKwlidWZmZXJzLT5tb2RlLT5jbXBfYm8oYnVmZmVycy0+ZHN0WzBdLCAwLCB3aWR0aCwg aGVpZ2h0LCBidWZmZXJzLT5kdW1teSk7CisJaWd0X3Bvc3RfaGFuZ19yaW5nKGZkLCBoYW5nKTsK K30KKworc3RhdGljIHZvaWQgZG9faW50ZXJtaXgoc3RydWN0IGJ1ZmZlcnMgKmJ1ZmZlcnMsCisJ CQlkb19jb3B5IGRvX2NvcHlfZnVuYywKKwkJCWRvX2hhbmcgZG9faGFuZ19mdW5jLAorCQkJaW50 IGRvX3JjcykKK3sKKwljb25zdCBpbnQgaGFsZiA9IGJ1ZmZlcnMtPmNvdW50LzI7CisJc3RydWN0 IGlndF9oYW5nX3JpbmcgaGFuZzsKKwlpbnQgaTsKKworCWdlbV9xdWllc2NlbnRfZ3B1KGZkKTsK Kwlmb3IgKGkgPSAwOyBpIDwgYnVmZmVycy0+Y291bnQ7IGkrKykgeworCQlidWZmZXJzLT5tb2Rl LT5zZXRfYm8oYnVmZmVycy0+c3JjW2ldLCAweGRlYWRiZWVmXn5pLCB3aWR0aCwgaGVpZ2h0KTsK KwkJYnVmZmVycy0+bW9kZS0+c2V0X2JvKGJ1ZmZlcnMtPmRzdFtpXSwgaSwgd2lkdGgsIGhlaWdo dCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBoYWxmOyBpKyspIHsKKwkJaWYgKGRvX3JjcyA9PSAx IHx8IChkb19yY3MgPT0gLTEgJiYgaSAmIDEpKQorCQkJcmVuZGVyX2NvcHlfYm8oYnVmZmVycy0+ ZHN0W2ldLCBidWZmZXJzLT5zcmNbaV0pOworCQllbHNlCisJCQlibHRfY29weV9ibyhidWZmZXJz LT5kc3RbaV0sIGJ1ZmZlcnMtPnNyY1tpXSk7CisKKwkJZG9fY29weV9mdW5jKGJ1ZmZlcnMtPmRz dFtpK2hhbGZdLCBidWZmZXJzLT5zcmNbaV0pOworCisJCWlmIChkb19yY3MgPT0gMSB8fCAoZG9f cmNzID09IC0xICYmIChpICYgMSkgPT0gMCkpCisJCQlyZW5kZXJfY29weV9ibyhidWZmZXJzLT5k c3RbaV0sIGJ1ZmZlcnMtPmRzdFtpK2hhbGZdKTsKKwkJZWxzZQorCQkJYmx0X2NvcHlfYm8oYnVm ZmVycy0+ZHN0W2ldLCBidWZmZXJzLT5kc3RbaStoYWxmXSk7CisKKwkJZG9fY29weV9mdW5jKGJ1 ZmZlcnMtPmRzdFtpK2hhbGZdLCBidWZmZXJzLT5zcmNbaStoYWxmXSk7CisJfQorCWhhbmcgPSBk b19oYW5nX2Z1bmMoKTsKKwlmb3IgKGkgPSAwOyBpIDwgMipoYWxmOyBpKyspCisJCWJ1ZmZlcnMt Pm1vZGUtPmNtcF9ibyhidWZmZXJzLT5kc3RbaV0sIDB4ZGVhZGJlZWZefmksIHdpZHRoLCBoZWln aHQsIGJ1ZmZlcnMtPmR1bW15KTsKKwlpZ3RfcG9zdF9oYW5nX3JpbmcoZmQsIGhhbmcpOworfQor CitzdGF0aWMgdm9pZCBkb19pbnRlcm1peF9yY3Moc3RydWN0IGJ1ZmZlcnMgKmJ1ZmZlcnMsCisJ CQkgICAgZG9fY29weSBkb19jb3B5X2Z1bmMsCisJCQkgICAgZG9faGFuZyBkb19oYW5nX2Z1bmMp Cit7CisJZG9faW50ZXJtaXgoYnVmZmVycywgZG9fY29weV9mdW5jLCBkb19oYW5nX2Z1bmMsIDEp OworfQorCitzdGF0aWMgdm9pZCBkb19pbnRlcm1peF9iY3Moc3RydWN0IGJ1ZmZlcnMgKmJ1ZmZl cnMsCisJCQkgICAgZG9fY29weSBkb19jb3B5X2Z1bmMsCisJCQkgICAgZG9faGFuZyBkb19oYW5n X2Z1bmMpCit7CisJZG9faW50ZXJtaXgoYnVmZmVycywgZG9fY29weV9mdW5jLCBkb19oYW5nX2Z1 bmMsIDApOworfQorCitzdGF0aWMgdm9pZCBkb19pbnRlcm1peF9ib3RoKHN0cnVjdCBidWZmZXJz ICpidWZmZXJzLAorCQkJICAgICBkb19jb3B5IGRvX2NvcHlfZnVuYywKKwkJCSAgICAgZG9faGFu ZyBkb19oYW5nX2Z1bmMpCit7CisJZG9faW50ZXJtaXgoYnVmZmVycywgZG9fY29weV9mdW5jLCBk b19oYW5nX2Z1bmMsIC0xKTsKK30KKworc3RhdGljIHZvaWQgZG9fZWFybHlfcmVhZChzdHJ1Y3Qg YnVmZmVycyAqYnVmZmVycywKKwkJCSAgZG9fY29weSBkb19jb3B5X2Z1bmMsCisJCQkgIGRvX2hh bmcgZG9faGFuZ19mdW5jKQoreworCXN0cnVjdCBpZ3RfaGFuZ19yaW5nIGhhbmc7CisJaW50IGk7 CisKKwlnZW1fcXVpZXNjZW50X2dwdShmZCk7CisJZm9yIChpID0gYnVmZmVycy0+Y291bnQ7IGkt LTsgKQorCQlidWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVycy0+c3JjW2ldLCAweGRlYWRiZWVm LCB3aWR0aCwgaGVpZ2h0KTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZmVycy0+Y291bnQ7IGkrKykK KwkJZG9fY29weV9mdW5jKGJ1ZmZlcnMtPmRzdFtpXSwgYnVmZmVycy0+c3JjW2ldKTsKKwloYW5n ID0gZG9faGFuZ19mdW5jKCk7CisJZm9yIChpID0gYnVmZmVycy0+Y291bnQ7IGktLTsgKQorCQli dWZmZXJzLT5tb2RlLT5jbXBfYm8oYnVmZmVycy0+ZHN0W2ldLCAweGRlYWRiZWVmLCB3aWR0aCwg aGVpZ2h0LCBidWZmZXJzLT5kdW1teSk7CisJaWd0X3Bvc3RfaGFuZ19yaW5nKGZkLCBoYW5nKTsK K30KKworc3RhdGljIHZvaWQgZG9fcmVhZF9yZWFkX2JjcyhzdHJ1Y3QgYnVmZmVycyAqYnVmZmVy cywKKwkJCSAgICAgZG9fY29weSBkb19jb3B5X2Z1bmMsCisJCQkgICAgIGRvX2hhbmcgZG9faGFu Z19mdW5jKQoreworCXN0cnVjdCBpZ3RfaGFuZ19yaW5nIGhhbmc7CisJaW50IGk7CisKKwlnZW1f cXVpZXNjZW50X2dwdShmZCk7CisJZm9yIChpID0gYnVmZmVycy0+Y291bnQ7IGktLTsgKQorCQli dWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVycy0+c3JjW2ldLCAweGRlYWRiZWVmIF4gaSwgd2lk dGgsIGhlaWdodCk7CisJZm9yIChpID0gMDsgaSA8IGJ1ZmZlcnMtPmNvdW50OyBpKyspIHsKKwkJ ZG9fY29weV9mdW5jKGJ1ZmZlcnMtPmRzdFtpXSwgYnVmZmVycy0+c3JjW2ldKTsKKwkJYmx0X2Nv cHlfYm8oYnVmZmVycy0+c3BhcmUsIGJ1ZmZlcnMtPnNyY1tpXSk7CisJfQorCWNwdV9jbXBfYm8o YnVmZmVycy0+c3BhcmUsIDB4ZGVhZGJlZWZeKGJ1ZmZlcnMtPmNvdW50LTEpLCB3aWR0aCwgaGVp Z2h0LCBOVUxMKTsKKwloYW5nID0gZG9faGFuZ19mdW5jKCk7CisJZm9yIChpID0gYnVmZmVycy0+ Y291bnQ7IGktLTsgKQorCQlidWZmZXJzLT5tb2RlLT5jbXBfYm8oYnVmZmVycy0+ZHN0W2ldLCAw eGRlYWRiZWVmIF4gaSwgd2lkdGgsIGhlaWdodCwgYnVmZmVycy0+ZHVtbXkpOworCWlndF9wb3N0 X2hhbmdfcmluZyhmZCwgaGFuZyk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3JlYWRfcmVhZF9yY3Mo c3RydWN0IGJ1ZmZlcnMgKmJ1ZmZlcnMsCisJCQkgICAgIGRvX2NvcHkgZG9fY29weV9mdW5jLAor CQkJICAgICBkb19oYW5nIGRvX2hhbmdfZnVuYykKK3sKKwlzdHJ1Y3QgaWd0X2hhbmdfcmluZyBo YW5nOworCWludCBpOworCisJZ2VtX3F1aWVzY2VudF9ncHUoZmQpOworCWZvciAoaSA9IGJ1ZmZl cnMtPmNvdW50OyBpLS07ICkKKwkJYnVmZmVycy0+bW9kZS0+c2V0X2JvKGJ1ZmZlcnMtPnNyY1tp XSwgMHhkZWFkYmVlZiBeIGksIHdpZHRoLCBoZWlnaHQpOworCWZvciAoaSA9IDA7IGkgPCBidWZm ZXJzLT5jb3VudDsgaSsrKSB7CisJCWRvX2NvcHlfZnVuYyhidWZmZXJzLT5kc3RbaV0sIGJ1ZmZl cnMtPnNyY1tpXSk7CisJCXJlbmRlcl9jb3B5X2JvKGJ1ZmZlcnMtPnNwYXJlLCBidWZmZXJzLT5z cmNbaV0pOworCX0KKwljcHVfY21wX2JvKGJ1ZmZlcnMtPnNwYXJlLCAweGRlYWRiZWVmXihidWZm ZXJzLT5jb3VudC0xKSwgd2lkdGgsIGhlaWdodCwgTlVMTCk7CisJaGFuZyA9IGRvX2hhbmdfZnVu YygpOworCWZvciAoaSA9IGJ1ZmZlcnMtPmNvdW50OyBpLS07ICkKKwkJYnVmZmVycy0+bW9kZS0+ Y21wX2JvKGJ1ZmZlcnMtPmRzdFtpXSwgMHhkZWFkYmVlZiBeIGksIHdpZHRoLCBoZWlnaHQsIGJ1 ZmZlcnMtPmR1bW15KTsKKwlpZ3RfcG9zdF9oYW5nX3JpbmcoZmQsIGhhbmcpOworfQorCitzdGF0 aWMgdm9pZCBkb19ncHVfcmVhZF9hZnRlcl93cml0ZShzdHJ1Y3QgYnVmZmVycyAqYnVmZmVycywK KwkJCQkgICAgZG9fY29weSBkb19jb3B5X2Z1bmMsCisJCQkJICAgIGRvX2hhbmcgZG9faGFuZ19m dW5jKQoreworCXN0cnVjdCBpZ3RfaGFuZ19yaW5nIGhhbmc7CisJaW50IGk7CisKKwlnZW1fcXVp ZXNjZW50X2dwdShmZCk7CisJZm9yIChpID0gYnVmZmVycy0+Y291bnQ7IGktLTsgKQorCQlidWZm ZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVycy0+c3JjW2ldLCAweGFiY2RhYmNkLCB3aWR0aCwgaGVp Z2h0KTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZmVycy0+Y291bnQ7IGkrKykKKwkJZG9fY29weV9m dW5jKGJ1ZmZlcnMtPmRzdFtpXSwgYnVmZmVycy0+c3JjW2ldKTsKKwlmb3IgKGkgPSBidWZmZXJz LT5jb3VudDsgaS0tOyApCisJCWRvX2NvcHlfZnVuYyhidWZmZXJzLT5kdW1teSwgYnVmZmVycy0+ ZHN0W2ldKTsKKwloYW5nID0gZG9faGFuZ19mdW5jKCk7CisJZm9yIChpID0gYnVmZmVycy0+Y291 bnQ7IGktLTsgKQorCQlidWZmZXJzLT5tb2RlLT5jbXBfYm8oYnVmZmVycy0+ZHN0W2ldLCAweGFi Y2RhYmNkLCB3aWR0aCwgaGVpZ2h0LCBidWZmZXJzLT5kdW1teSk7CisJaWd0X3Bvc3RfaGFuZ19y aW5nKGZkLCBoYW5nKTsKK30KKwordHlwZWRlZiB2b2lkICgqZG9fdGVzdCkoc3RydWN0IGJ1ZmZl cnMgKmJ1ZmZlcnMsCisJCQlkb19jb3B5IGRvX2NvcHlfZnVuYywKKwkJCWRvX2hhbmcgZG9faGFu Z19mdW5jKTsKKwordHlwZWRlZiB2b2lkICgqcnVuX3dyYXApKHN0cnVjdCBidWZmZXJzICpidWZm ZXJzLAorCQkJIGRvX3Rlc3QgZG9fdGVzdF9mdW5jLAorCQkJIGRvX2NvcHkgZG9fY29weV9mdW5j LAorCQkJIGRvX2hhbmcgZG9faGFuZ19mdW5jKTsKKworc3RhdGljIHZvaWQgcnVuX3NpbmdsZShz dHJ1Y3QgYnVmZmVycyAqYnVmZmVycywKKwkJICAgICAgIGRvX3Rlc3QgZG9fdGVzdF9mdW5jLAor CQkgICAgICAgZG9fY29weSBkb19jb3B5X2Z1bmMsCisJCSAgICAgICBkb19oYW5nIGRvX2hhbmdf ZnVuYykKK3sKKwlkb190ZXN0X2Z1bmMoYnVmZmVycywgZG9fY29weV9mdW5jLCBkb19oYW5nX2Z1 bmMpOworfQorCitzdGF0aWMgdm9pZCBydW5faW50ZXJydXB0aWJsZShzdHJ1Y3QgYnVmZmVycyAq YnVmZmVycywKKwkJCSAgICAgIGRvX3Rlc3QgZG9fdGVzdF9mdW5jLAorCQkJICAgICAgZG9fY29w eSBkb19jb3B5X2Z1bmMsCisJCQkgICAgICBkb19oYW5nIGRvX2hhbmdfZnVuYykKK3sKKwlpbnQg bG9vcDsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCAxMDsgbG9vcCsrKQorCQlkb190ZXN0X2Z1 bmMoYnVmZmVycywgZG9fY29weV9mdW5jLCBkb19oYW5nX2Z1bmMpOworfQorCitzdGF0aWMgdm9p ZCBydW5fZm9ya2VkKHN0cnVjdCBidWZmZXJzICpidWZmZXJzLAorCQkgICAgICAgZG9fdGVzdCBk b190ZXN0X2Z1bmMsCisJCSAgICAgICBkb19jb3B5IGRvX2NvcHlfZnVuYywKKwkJICAgICAgIGRv X2hhbmcgZG9faGFuZ19mdW5jKQoreworCWNvbnN0IGludCBvbGRfbnVtX2J1ZmZlcnMgPSBudW1f YnVmZmVyczsKKworCW51bV9idWZmZXJzIC89IDE2OworCW51bV9idWZmZXJzICs9IDI7CisKKwlp Z3RfZm9yayhjaGlsZCwgMTYpIHsKKwkJLyogcmVjcmVhdGUgcHJvY2VzcyBsb2NhbCB2YXJpYWJs ZXMgKi8KKwkJYnVmZmVycy0+Y291bnQgPSAwOworCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklW RVJfSU5URUwpOworCisJCWJhdGNoID0gYnVmZmVyc19pbml0KGJ1ZmZlcnMsIGJ1ZmZlcnMtPm1v ZGUsIGZkKTsKKworCQlidWZmZXJzX2NyZWF0ZShidWZmZXJzLCBudW1fYnVmZmVycyk7CisJCWZv ciAoaW50IGxvb3AgPSAwOyBsb29wIDwgMTA7IGxvb3ArKykKKwkJCWRvX3Rlc3RfZnVuYyhidWZm ZXJzLCBkb19jb3B5X2Z1bmMsIGRvX2hhbmdfZnVuYyk7CisKKwkJYnVmZmVyc19maW5pKGJ1ZmZl cnMpOworCX0KKworCWlndF93YWl0Y2hpbGRyZW4oKTsKKworCW51bV9idWZmZXJzID0gb2xkX251 bV9idWZmZXJzOworfQorCitzdGF0aWMgdm9pZCBiaXQxN19yZXF1aXJlKHZvaWQpCit7CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nMiB7CisJCXVpbnQzMl90IGhhbmRsZTsKKwkJdWlu dDMyX3QgdGlsaW5nX21vZGU7CisJCXVpbnQzMl90IHN3aXp6bGVfbW9kZTsKKwkJdWludDMyX3Qg cGh5c19zd2l6emxlX21vZGU7CisJfSBhcmc7CisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9H RVRfVElMSU5HMglEUk1fSU9XUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9HRVRf VElMSU5HLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcyKQorCisJbWVtc2V0KCZhcmcs IDAsIHNpemVvZihhcmcpKTsKKwlhcmcuaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisJ Z2VtX3NldF90aWxpbmcoZmQsIGFyZy5oYW5kbGUsIEk5MTVfVElMSU5HX1gsIDUxMik7CisKKwlk b19vcl9kaWUoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9HRVRfVElMSU5HMiwgJmFy ZykpOworCWdlbV9jbG9zZShmZCwgYXJnLmhhbmRsZSk7CisJaWd0X3JlcXVpcmUoYXJnLnBoeXNf c3dpenpsZV9tb2RlID09IGFyZy5zd2l6emxlX21vZGUpOworfQorCitzdGF0aWMgdm9pZCBjcHVf cmVxdWlyZSh2b2lkKQoreworCWJpdDE3X3JlcXVpcmUoKTsKK30KKworc3RhdGljIHZvaWQgZ3R0 X3JlcXVpcmUodm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgd2NfcmVxdWlyZSh2b2lkKQorewor CWJpdDE3X3JlcXVpcmUoKTsKKwlnZW1fcmVxdWlyZV9tbWFwX3djKGZkKTsKK30KKworc3RhdGlj IHZvaWQgYmNzX3JlcXVpcmUodm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgcmNzX3JlcXVpcmUo dm9pZCkKK3sKKwlpZ3RfcmVxdWlyZShyZW5kZXJjb3B5KTsKK30KKworc3RhdGljIHZvaWQgbm9f cmVxdWlyZSh2b2lkKQoreworfQorCitzdGF0aWMgdm9pZAorcnVuX2Jhc2ljX21vZGVzKGNvbnN0 IHN0cnVjdCBhY2Nlc3NfbW9kZSAqbW9kZSwKKwkJY29uc3QgY2hhciAqc3VmZml4LAorCQlydW5f d3JhcCBydW5fd3JhcF9mdW5jKQoreworCWNvbnN0IHN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKnBy ZWZpeDsKKwkJZG9fY29weSBjb3B5OworCQl2b2lkICgqcmVxdWlyZSkodm9pZCk7CisJfSBwaXBl bGluZXNbXSA9IHsKKwkJeyAiY3B1IiwgY3B1X2NvcHlfYm8sIGNwdV9yZXF1aXJlIH0sCisJCXsg Imd0dCIsIGd0dF9jb3B5X2JvLCBndHRfcmVxdWlyZSB9LAorCQl7ICJ3YyIsIHdjX2NvcHlfYm8s IHdjX3JlcXVpcmUgfSwKKwkJeyAiYmx0IiwgYmx0X2NvcHlfYm8sIGJjc19yZXF1aXJlIH0sCisJ CXsgInJlbmRlciIsIHJlbmRlcl9jb3B5X2JvLCByY3NfcmVxdWlyZSB9LAorCQl7IE5VTEwsIE5V TEwgfQorCX0sICpwc2tpcCA9IHBpcGVsaW5lcyArIDMsICpwOworCWNvbnN0IHN0cnVjdCB7CisJ CWNvbnN0IGNoYXIgKnN1ZmZpeDsKKwkJZG9faGFuZyBoYW5nOworCQl2b2lkICgqcmVxdWlyZSko dm9pZCk7CisJfSBoYW5nc1tdID0geworCQl7ICIiLCBub19oYW5nLCBub19yZXF1aXJlIH0sCisJ CXsgIi1oYW5nLWJsdCIsIGJjc19oYW5nLCBoYW5nX3JlcXVpcmUgfSwKKwkJeyAiLWhhbmctcmVu ZGVyIiwgcmNzX2hhbmcsIGhhbmdfcmVxdWlyZSB9LAorCQl7IE5VTEwsIE5VTEwgfSwKKwl9LCAq aDsKKwlzdHJ1Y3QgYnVmZmVycyBidWZmZXJzOworCisJZm9yIChoID0gaGFuZ3M7IGgtPnN1ZmZp eDsgaCsrKSB7CisJCWlmICghYWxsICYmICpoLT5zdWZmaXgpCisJCQljb250aW51ZTsKKworCQlm b3IgKHAgPSBhbGwgPyBwaXBlbGluZXMgOiBwc2tpcDsgcC0+cHJlZml4OyBwKyspIHsKKwkJCWln dF9maXh0dXJlIHsKKwkJCQliYXRjaCA9IGJ1ZmZlcnNfaW5pdCgmYnVmZmVycywgbW9kZSwgZmQp OworCQkJfQorCisJCQkvKiB0cnkgdG8gb3ZlcndyaXRlIHRoZSBzb3VyY2UgdmFsdWVzICovCisJ CQlpZ3Rfc3VidGVzdF9mKCIlcy0lcy1vdmVyd3JpdGUtc291cmNlLW9uZSVzJXMiLCBtb2RlLT5u YW1lLCBwLT5wcmVmaXgsIHN1ZmZpeCwgaC0+c3VmZml4KSB7CisJCQkJaC0+cmVxdWlyZSgpOwor CQkJCXAtPnJlcXVpcmUoKTsKKwkJCQlidWZmZXJzX2NyZWF0ZSgmYnVmZmVycywgbnVtX2J1ZmZl cnMpOworCQkJCXJ1bl93cmFwX2Z1bmMoJmJ1ZmZlcnMsCisJCQkJCSAgICAgIGRvX292ZXJ3cml0 ZV9zb3VyY2VfX29uZSwKKwkJCQkJICAgICAgcC0+Y29weSwgaC0+aGFuZyk7CisJCQl9CisKKwkJ CWlndF9zdWJ0ZXN0X2YoIiVzLSVzLW92ZXJ3cml0ZS1zb3VyY2UlcyVzIiwgbW9kZS0+bmFtZSwg cC0+cHJlZml4LCBzdWZmaXgsIGgtPnN1ZmZpeCkgeworCQkJCWgtPnJlcXVpcmUoKTsKKwkJCQlw LT5yZXF1aXJlKCk7CisJCQkJYnVmZmVyc19jcmVhdGUoJmJ1ZmZlcnMsIG51bV9idWZmZXJzKTsK KwkJCQlydW5fd3JhcF9mdW5jKCZidWZmZXJzLAorCQkJCQkgICAgICBkb19vdmVyd3JpdGVfc291 cmNlLAorCQkJCQkgICAgICBwLT5jb3B5LCBoLT5oYW5nKTsKKwkJCX0KKworCQkJaWd0X3N1YnRl c3RfZigiJXMtJXMtb3ZlcndyaXRlLXNvdXJjZS1yZWFkLWJjcyVzJXMiLCBtb2RlLT5uYW1lLCBw LT5wcmVmaXgsIHN1ZmZpeCwgaC0+c3VmZml4KSB7CisJCQkJaC0+cmVxdWlyZSgpOworCQkJCXAt PnJlcXVpcmUoKTsKKwkJCQlidWZmZXJzX2NyZWF0ZSgmYnVmZmVycywgbnVtX2J1ZmZlcnMpOwor CQkJCXJ1bl93cmFwX2Z1bmMoJmJ1ZmZlcnMsCisJCQkJCSAgICAgIGRvX292ZXJ3cml0ZV9zb3Vy Y2VfcmVhZF9iY3MsCisJCQkJCSAgICAgIHAtPmNvcHksIGgtPmhhbmcpOworCQkJfQorCisJCQlp Z3Rfc3VidGVzdF9mKCIlcy0lcy1vdmVyd3JpdGUtc291cmNlLXJlYWQtcmNzJXMlcyIsIG1vZGUt Pm5hbWUsIHAtPnByZWZpeCwgc3VmZml4LCBoLT5zdWZmaXgpIHsKKwkJCQloLT5yZXF1aXJlKCk7 CisJCQkJcC0+cmVxdWlyZSgpOworCQkJCWlndF9yZXF1aXJlKHJlbmRlcmNvcHkpOworCQkJCWJ1 ZmZlcnNfY3JlYXRlKCZidWZmZXJzLCBudW1fYnVmZmVycyk7CisJCQkJcnVuX3dyYXBfZnVuYygm YnVmZmVycywKKwkJCQkJICAgICAgZG9fb3ZlcndyaXRlX3NvdXJjZV9yZWFkX3JjcywKKwkJCQkJ ICAgICAgcC0+Y29weSwgaC0+aGFuZyk7CisJCQl9CisKKwkJCWlndF9zdWJ0ZXN0X2YoIiVzLSVz LW92ZXJ3cml0ZS1zb3VyY2UtcmV2JXMlcyIsIG1vZGUtPm5hbWUsIHAtPnByZWZpeCwgc3VmZml4 LCBoLT5zdWZmaXgpIHsKKwkJCQloLT5yZXF1aXJlKCk7CisJCQkJcC0+cmVxdWlyZSgpOworCQkJ CWJ1ZmZlcnNfY3JlYXRlKCZidWZmZXJzLCBudW1fYnVmZmVycyk7CisJCQkJcnVuX3dyYXBfZnVu YygmYnVmZmVycywKKwkJCQkJICAgICAgZG9fb3ZlcndyaXRlX3NvdXJjZV9fcmV2LAorCQkJCQkg ICAgICBwLT5jb3B5LCBoLT5oYW5nKTsKKwkJCX0KKworCQkJLyogdHJ5IHRvIGludGVybWl4IGNv cGllcyB3aXRoIEdQVSBjb3BpZXMqLworCQkJaWd0X3N1YnRlc3RfZigiJXMtJXMtaW50ZXJtaXgt cmNzJXMlcyIsIG1vZGUtPm5hbWUsIHAtPnByZWZpeCwgc3VmZml4LCBoLT5zdWZmaXgpIHsKKwkJ CQloLT5yZXF1aXJlKCk7CisJCQkJcC0+cmVxdWlyZSgpOworCQkJCWlndF9yZXF1aXJlKHJlbmRl cmNvcHkpOworCQkJCWJ1ZmZlcnNfY3JlYXRlKCZidWZmZXJzLCBudW1fYnVmZmVycyk7CisJCQkJ cnVuX3dyYXBfZnVuYygmYnVmZmVycywKKwkJCQkJICAgICAgZG9faW50ZXJtaXhfcmNzLAorCQkJ CQkgICAgICBwLT5jb3B5LCBoLT5oYW5nKTsKKwkJCX0KKwkJCWlndF9zdWJ0ZXN0X2YoIiVzLSVz LWludGVybWl4LWJjcyVzJXMiLCBtb2RlLT5uYW1lLCBwLT5wcmVmaXgsIHN1ZmZpeCwgaC0+c3Vm Zml4KSB7CisJCQkJaC0+cmVxdWlyZSgpOworCQkJCXAtPnJlcXVpcmUoKTsKKwkJCQlpZ3RfcmVx dWlyZShyZW5kZXJjb3B5KTsKKwkJCQlidWZmZXJzX2NyZWF0ZSgmYnVmZmVycywgbnVtX2J1ZmZl cnMpOworCQkJCXJ1bl93cmFwX2Z1bmMoJmJ1ZmZlcnMsCisJCQkJCSAgICAgIGRvX2ludGVybWl4 X2JjcywKKwkJCQkJICAgICAgcC0+Y29weSwgaC0+aGFuZyk7CisJCQl9CisJCQlpZ3Rfc3VidGVz dF9mKCIlcy0lcy1pbnRlcm1peC1ib3RoJXMlcyIsIG1vZGUtPm5hbWUsIHAtPnByZWZpeCwgc3Vm Zml4LCBoLT5zdWZmaXgpIHsKKwkJCQloLT5yZXF1aXJlKCk7CisJCQkJcC0+cmVxdWlyZSgpOwor CQkJCWlndF9yZXF1aXJlKHJlbmRlcmNvcHkpOworCQkJCWJ1ZmZlcnNfY3JlYXRlKCZidWZmZXJz LCBudW1fYnVmZmVycyk7CisJCQkJcnVuX3dyYXBfZnVuYygmYnVmZmVycywKKwkJCQkJICAgICAg ZG9faW50ZXJtaXhfYm90aCwKKwkJCQkJICAgICAgcC0+Y29weSwgaC0+aGFuZyk7CisJCQl9CisK KwkJCS8qIHRyeSB0byByZWFkIHRoZSByZXN1bHRzIGJlZm9yZSB0aGUgY29weSBjb21wbGV0ZXMg Ki8KKwkJCWlndF9zdWJ0ZXN0X2YoIiVzLSVzLWVhcmx5LXJlYWQlcyVzIiwgbW9kZS0+bmFtZSwg cC0+cHJlZml4LCBzdWZmaXgsIGgtPnN1ZmZpeCkgeworCQkJCWgtPnJlcXVpcmUoKTsKKwkJCQlw LT5yZXF1aXJlKCk7CisJCQkJYnVmZmVyc19jcmVhdGUoJmJ1ZmZlcnMsIG51bV9idWZmZXJzKTsK KwkJCQlydW5fd3JhcF9mdW5jKCZidWZmZXJzLAorCQkJCQkgICAgICBkb19lYXJseV9yZWFkLAor CQkJCQkgICAgICBwLT5jb3B5LCBoLT5oYW5nKTsKKwkJCX0KKworCQkJLyogY29uY3VycmVudCBy ZWFkcyAqLworCQkJaWd0X3N1YnRlc3RfZigiJXMtJXMtcmVhZC1yZWFkLWJjcyVzJXMiLCBtb2Rl LT5uYW1lLCBwLT5wcmVmaXgsIHN1ZmZpeCwgaC0+c3VmZml4KSB7CisJCQkJaC0+cmVxdWlyZSgp OworCQkJCXAtPnJlcXVpcmUoKTsKKwkJCQlidWZmZXJzX2NyZWF0ZSgmYnVmZmVycywgbnVtX2J1 ZmZlcnMpOworCQkJCXJ1bl93cmFwX2Z1bmMoJmJ1ZmZlcnMsCisJCQkJCSAgICAgIGRvX3JlYWRf cmVhZF9iY3MsCisJCQkJCSAgICAgIHAtPmNvcHksIGgtPmhhbmcpOworCQkJfQorCQkJaWd0X3N1 YnRlc3RfZigiJXMtJXMtcmVhZC1yZWFkLXJjcyVzJXMiLCBtb2RlLT5uYW1lLCBwLT5wcmVmaXgs IHN1ZmZpeCwgaC0+c3VmZml4KSB7CisJCQkJaC0+cmVxdWlyZSgpOworCQkJCXAtPnJlcXVpcmUo KTsKKwkJCQlpZ3RfcmVxdWlyZShyZW5kZXJjb3B5KTsKKwkJCQlidWZmZXJzX2NyZWF0ZSgmYnVm ZmVycywgbnVtX2J1ZmZlcnMpOworCQkJCXJ1bl93cmFwX2Z1bmMoJmJ1ZmZlcnMsCisJCQkJCSAg ICAgIGRvX3JlYWRfcmVhZF9yY3MsCisJCQkJCSAgICAgIHAtPmNvcHksIGgtPmhhbmcpOworCQkJ fQorCisJCQkvKiBhbmQgZmluYWxseSB0cnkgdG8gdHJpY2sgdGhlIGtlcm5lbCBpbnRvIGxvb3Np bmcgdGhlIHBlbmRpbmcgd3JpdGUgKi8KKwkJCWlndF9zdWJ0ZXN0X2YoIiVzLSVzLWdwdS1yZWFk LWFmdGVyLXdyaXRlJXMlcyIsIG1vZGUtPm5hbWUsIHAtPnByZWZpeCwgc3VmZml4LCBoLT5zdWZm aXgpIHsKKwkJCQloLT5yZXF1aXJlKCk7CisJCQkJcC0+cmVxdWlyZSgpOworCQkJCWJ1ZmZlcnNf Y3JlYXRlKCZidWZmZXJzLCBudW1fYnVmZmVycyk7CisJCQkJcnVuX3dyYXBfZnVuYygmYnVmZmVy cywKKwkJCQkJICAgICAgZG9fZ3B1X3JlYWRfYWZ0ZXJfd3JpdGUsCisJCQkJCSAgICAgIHAtPmNv cHksIGgtPmhhbmcpOworCQkJfQorCisJCQlpZ3RfZml4dHVyZSB7CisJCQkJYnVmZmVyc19maW5p KCZidWZmZXJzKTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3J1bl9tb2Rlcyhj b25zdCBzdHJ1Y3QgYWNjZXNzX21vZGUgKm1vZGUpCit7CisJaWYgKGFsbCkgeworCQlydW5fYmFz aWNfbW9kZXMobW9kZSwgIiIsIHJ1bl9zaW5nbGUpOworCisJCWlndF9mb3JrX3NpZ25hbF9oZWxw ZXIoKTsKKwkJcnVuX2Jhc2ljX21vZGVzKG1vZGUsICItaW50ZXJydXB0aWJsZSIsIHJ1bl9pbnRl cnJ1cHRpYmxlKTsKKwkJaWd0X3N0b3Bfc2lnbmFsX2hlbHBlcigpOworCX0KKworCWlndF9mb3Jr X3NpZ25hbF9oZWxwZXIoKTsKKwlydW5fYmFzaWNfbW9kZXMobW9kZSwgIi1mb3JrZWQiLCBydW5f Zm9ya2VkKTsKKwlpZ3Rfc3RvcF9zaWduYWxfaGVscGVyKCk7Cit9CisKK2lndF9tYWluCit7CisJ aW50IG1heCwgaTsKKworCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKKworCWlmIChzdHJzdHIo aWd0X3Rlc3RfbmFtZSgpLCAiYWxsIikpCisJCWFsbCA9IHRydWU7CisKKwlpZ3RfZml4dHVyZSB7 CisJCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7CisJCWRldmlkID0gaW50ZWxf Z2V0X2RybV9kZXZpZChmZCk7CisJCWdlbiA9IGludGVsX2dlbihkZXZpZCk7CisJCXJlbmRlcmNv cHkgPSBpZ3RfZ2V0X3JlbmRlcl9jb3B5ZnVuYyhkZXZpZCk7CisKKwkJbWF4ID0gZ2VtX2FwZXJ0 dXJlX3NpemUgKGZkKSAvICgxMDI0ICogMTAyNCkgLyAyOworCQlpZiAobnVtX2J1ZmZlcnMgPiBt YXgpCisJCQludW1fYnVmZmVycyA9IG1heDsKKworCQltYXggPSBpbnRlbF9nZXRfdG90YWxfcmFt X21iKCkgKiAzIC8gNDsKKwkJaWYgKG51bV9idWZmZXJzID4gbWF4KQorCQkJbnVtX2J1ZmZlcnMg PSBtYXg7CisJCW51bV9idWZmZXJzIC89IDI7CisJCWlndF9pbmZvKCJ1c2luZyAyeCVkIGJ1ZmZl cnMsIGVhY2ggMU1pQlxuIiwgbnVtX2J1ZmZlcnMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGFjY2Vzc19tb2Rlcyk7IGkrKykKKwkJcnVuX21vZGVzKCZhY2Nlc3NfbW9kZXNb aV0pOworfQotLSAKMi42LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==