Return-Path: MIME-Version: 1.0 In-Reply-To: References: Date: Mon, 11 Jan 2010 17:05:03 -0200 Message-ID: Subject: Re: [RFC] HFP support into oFono and BlueZ From: "Gustavo F. Padovan" To: linux-bluetooth , ofono@ofono.org, zhenhua.zhang@intel.com Content-Type: multipart/mixed; boundary=000e0cd6ad1401827a047ce837c9 Sender: linux-bluetooth-owner@vger.kernel.org List-ID: --000e0cd6ad1401827a047ce837c9 Content-Type: text/plain; charset=UTF-8 On Mon, Jan 11, 2010 at 3:08 PM, Gustavo F. Padovan wrote: > Hi, > > These patches implement the new API for the Audio Gateway in BlueZ. It > follows the last version of the HandsfreeGateway and HandsfreeAgent > Intefaces API. > The first two patches is for BlueZ and the other for oFono. You can > test it with using enable-modem and test-voicecall scripts into the > test dir of oFono. > Feel free to test it and send me your comments. We have some bugs yet. New version of the patches: now we do not handle tty stuff on the BlueZ side. > > The audio part is not working yet. We are going to work on pulseaudio > this week to get this done soon. > > Regards, > > -- > Gustavo F. Padovan > ProFUSION embedded systems - http://profusion.mobi > -- Gustavo F. Padovan ProFUSION embedded systems - http://profusion.mobi --000e0cd6ad1401827a047ce837c9 Content-Type: application/octet-stream; name="0001-clean-up-audio-gateway.c.patch" Content-Disposition: attachment; filename="0001-clean-up-audio-gateway.c.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4bmhglp3 RnJvbSA3ZWVhMjU3YTdiNGEwY2JjMDI2YWFiNmE2MGRmOWJiNTgwMDY1ODMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIEYuIFBhZG92YW4gPHBhZG92YW5AcHJvZnVzaW9u Lm1vYmk+CkRhdGU6IEZyaSwgNiBOb3YgMjAwOSAxODowODo1OCAtMDIwMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBjbGVhbiB1cCBhdWRpby9nYXRld2F5LmMKCnJlbW92ZSBhbGwgY29kZSByZWxhdGVk IHRvIHRoZSBBVCBlbmdpbmUKLS0tCiBhdWRpby9nYXRld2F5LmMgfCAgNzYwICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZXMgY2hh bmdlZCwgMSBpbnNlcnRpb25zKCspLCA3NTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYXVk aW8vZ2F0ZXdheS5jIGIvYXVkaW8vZ2F0ZXdheS5jCmluZGV4IGExYzFlYTIuLjNkYzA5ZmYgMTAw NjQ0Ci0tLSBhL2F1ZGlvL2dhdGV3YXkuYworKysgYi9hdWRpby9nYXRld2F5LmMKQEAgLTUzLDUy ICs1Myw2IEBACiAjaW5jbHVkZSAiZGJ1cy1jb21tb24uaCIKIAogI2RlZmluZSBSRkNPTU1fQlVG X1NJWkUgMjU2Ci0vKiBub3QtbW9yZS10aGVuLTE2IGRlZmluZWQgYnkgR1NNICsgMSBmb3IgTlVM TCArIHBhZGRpbmcgKi8KLSNkZWZpbmUgQUdfSU5ESUNBVE9SX0RFU0NSX1NJWkUgMjAKLSNkZWZp bmUgQUdfQ0FMTEVSX05VTV9TSVpFIDY0CS8qIHNpemUgb2YgbnVtYmVyICsgdHlwZSAqLwotCi0v KiBjb21tYW5kcyAqLwotI2RlZmluZSBBR19GRUFUVVJFUyAiQVQrQlJTRj0yNlxyIiAgICAgLyog PSAweDdGID0gQWxsIGZlYXR1cmVzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBBR19JTkRJQ0FUT1JT X1NVUFAgIkFUK0NJTkQ9P1xyIgotI2RlZmluZSBBR19JTkRJQ0FUT1JTX1ZBTCAiQVQrQ0lORD9c ciIKLSNkZWZpbmUgQUdfSU5ESUNBVE9SU19FTkFCTEUgIkFUK0NNRVI9MywwLDAsMVxyIgotI2Rl ZmluZSBBR19IT0xEX01QVFlfU1VQUCAiQVQrQ0hMRD0/XHIiCi0jZGVmaW5lIEFHX0NBTExFUl9J REVOVF9FTkFCTEUgIkFUK0NMSVA9MVxyIgotI2RlZmluZSBBR19DQVJSSUVSX0ZPUk1BVCAiQVQr Q09QUz0zLDBcciIKLSNkZWZpbmUgQUdfRVhURU5ERURfUkVTVUxUX0NPREUgIkFUK0NNRUU9MVxy IgotCi0jZGVmaW5lIEFHX0ZFQVRVUkVfM1dBWSAweDEKLSNkZWZpbmUgQUdfRkVBVFVSRV9FWFRF TkRFRF9SRVNfQ09ERSAweDEwMAotLyogSG9sZCBhbmQgbXVsdGlwYXJ5IEFHIGZlYXR1cmVzLgot ICogQ29tbWVudHMgYmVsb3cgYXJlIGNvcGllZCBmcm9tIGhhbmRzLWZyZWUgc3BlYyBmb3IgcmVm ZXJlbmNlICovCi0vKiBSZWxlYXNlcyBhbGwgaGVsZCBjYWxscyBvciBzZXRzIFVzZXIgRGV0ZXJt aW5lZCBVc2VyIEJ1c3kgKFVEVUIpCi0gKiBmb3IgYSB3YWl0aW5nIGNhbGwgKi8KLSNkZWZpbmUg QUdfQ0hMRF8wIDB4MDEKLS8qIFJlbGVhc2VzIGFsbCBhY3RpdmUgY2FsbHMgKGlmIGFueSBleGlz dCkgYW5kIGFjY2VwdHMgdGhlIG90aGVyCi0gKiAoaGVsZCBvciB3YWl0aW5nKSBjYWxsICovCi0j ZGVmaW5lIEFHX0NITERfMSAweDAyCi0vKiBSZWxlYXNlcyBzcGVjaWZpZWQgYWN0aXZlIGNhbGwg b25seSA8eD4gKi8KLSNkZWZpbmUgQUdfQ0hMRF8xeCAweDA0Ci0vKiBQbGFjZXMgYWxsIGFjdGl2 ZSBjYWxscyAoaWYgYW55IGV4aXN0KSBvbiBob2xkIGFuZCBhY2NlcHRzIHRoZSBvdGhlcgotICog KGhlbGQgb3Igd2FpdGluZykgY2FsbCAqLwotI2RlZmluZSBBR19DSExEXzIgMHgwOAotLyogUmVx dWVzdCBwcml2YXRlIGNvbnN1bHRhdGlvbiBtb2RlIHdpdGggc3BlY2lmaWVkIGNhbGwgPHg+IChQ bGFjZSBhbGwKLSAqIGNhbGxzIG9uIGhvbGQgRVhDRVBUIHRoZSBjYWxsIDx4PikgKi8KLSNkZWZp bmUgQUdfQ0hMRF8yeCAweDEwCi0vKiBBZGRzIGEgaGVsZCBjYWxsIHRvIHRoZSBjb252ZXJzYXRp b24gKi8KLSNkZWZpbmUgQUdfQ0hMRF8zIDB4MjAKLS8qIENvbm5lY3RzIHRoZSB0d28gY2FsbHMg YW5kIGRpc2Nvbm5lY3RzIHRoZSBzdWJzY3JpYmVyIGZyb20gYm90aCBjYWxscwotICogKEV4cGxp Y2l0IENhbGwgVHJhbnNmZXIpLiBTdXBwb3J0IGZvciB0aGlzIHZhbHVlIGFuZCBpdHMgYXNzb2Np YXRlZAotICogZnVuY3Rpb25hbGl0eSBpcyBvcHRpb25hbCBmb3IgdGhlIEhGLiAqLwotI2RlZmlu ZSBBR19DSExEXzQgMHg0MAotCi0jZGVmaW5lIE9LX1JFU1BPTlNFICJcclxuT0tcclxuIgotI2Rl ZmluZSBFUlJPUl9SRVNQT05TRSAiXHJcbkVSUk9SXHJcbiIKLQotc3RydWN0IGluZGljYXRvciB7 Ci0JZ2NoYXIgZGVzY3JbQUdfSU5ESUNBVE9SX0RFU0NSX1NJWkVdOwotCWdpbnQgdmFsdWU7Ci19 OwogCiBzdHJ1Y3QgZ2F0ZXdheSB7CiAJZ2F0ZXdheV9zdGF0ZV90IHN0YXRlOwpAQCAtMTA4LDM4 NyArNjIsMTAgQEAgc3RydWN0IGdhdGV3YXkgewogCWdhdGV3YXlfc3RyZWFtX2NiX3Qgc2NvX3N0 YXJ0X2NiOwogCXZvaWQgKnNjb19zdGFydF9jYl9kYXRhOwogCURCdXNNZXNzYWdlICpjb25uZWN0 X21lc3NhZ2U7Ci0JZ3VpbnQgYWdfZmVhdHVyZXM7Ci0JZ3VpbnQgaG9sZF9tdWx0aXBhcnR5X2Zl YXR1cmVzOwotCUdTTGlzdCAqaW5kaWVzOwotCWdib29sZWFuIGlzX2RpYWxpbmc7Ci0JZ2Jvb2xl YW4gY2FsbF9hY3RpdmU7Ci0KLQlpbnQgc3BfZ2FpbjsKLQlpbnQgbWljX2dhaW47CiB9OwogCi1z dGF0aWMgZ2Jvb2xlYW4gcmZjb21tX2FnX2RhdGFfY2IoR0lPQ2hhbm5lbCAqY2hhbiwgR0lPQ29u ZGl0aW9uIGNvbmQsCi0JCQkJCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSk7Ci0KIGludCBn YXRld2F5X2Nsb3NlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSk7CiAKLXN0YXRpYyB2b2lk IHJmY29tbV9zdGFydF93YXRjaChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0 IGdhdGV3YXkgKmd3ID0gZGV2LT5nYXRld2F5OwotCi0JZ3ctPnJmY29tbV93YXRjaF9pZCA9IGdf aW9fYWRkX3dhdGNoKGd3LT5yZmNvbW0sCi0JCQlHX0lPX0lOIHwgR19JT19FUlIgfCBHX0lPX0hV UCB8IEdfSU9fTlZBTCwKLQkJCShHSU9GdW5jKSByZmNvbW1fYWdfZGF0YV9jYiwgZGV2KTsKLX0K LQotc3RhdGljIHZvaWQgcmZjb21tX3N0b3Bfd2F0Y2goc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2 KQotewotCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0ZXdheTsKLQotCWdfc291cmNlX3Jl bW92ZShndy0+cmZjb21tX3dhdGNoX2lkKTsKLX0KLQotc3RhdGljIGdib29sZWFuIGlvX2NoYW5u ZWxfd3JpdGVfYWxsKEdJT0NoYW5uZWwgKmlvLCBnY2hhciAqZGF0YSwKLQkJCQkJZ3NpemUgY291 bnQpCi17Ci0JZ3NpemUgd3JpdHRlbiA9IDA7Ci0JR0lPU3RhdHVzIHN0YXR1czsKLQotCXdoaWxl IChjb3VudCA+IDApIHsKLQkJc3RhdHVzID0gZ19pb19jaGFubmVsX3dyaXRlX2NoYXJzKGlvLCBk YXRhLCBjb3VudCwgJndyaXR0ZW4sCi0JCQkJCQlOVUxMKTsKLQkJaWYgKHN0YXR1cyAhPSBHX0lP X1NUQVRVU19OT1JNQUwpCi0JCQlyZXR1cm4gRkFMU0U7Ci0KLQkJZGF0YSArPSB3cml0dGVuOwot CQljb3VudCAtPSB3cml0dGVuOwotCX0KLQlyZXR1cm4gVFJVRTsKLX0KLQotLyogaXQncyB3b3J0 aCB0byBtZW50aW9uIHRoYXQgZGF0YSBhbmQgcmVzcG9uc2UgY291bGQgYmUgdGhlIHNhbWUgcG9p bnRlcnMgKi8KLXN0YXRpYyBnYm9vbGVhbiByZmNvbW1fc2VuZF9hbmRfcmVhZChzdHJ1Y3QgZ2F0 ZXdheSAqZ3csIGdjaGFyICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2NoYXIgKnJlc3BvbnNlLCBnc2l6ZSBjb3VudCkKLXsKLQlHSU9DaGFubmVsICpyZmNvbW0g PSBndy0+cmZjb21tOwotCWdzaXplIHJlYWQgPSAwOwotCWdib29sZWFuIGdvdF9vayA9IEZBTFNF OwotCWdib29sZWFuIGdvdF9lcnJvciA9IEZBTFNFOwotCWdjaGFyICpyZXNwX2J1ZiA9IHJlc3Bv bnNlOwotCWdzaXplIHRvcmVhZCA9IFJGQ09NTV9CVUZfU0laRSAtIDE7Ci0JR0lPU3RhdHVzIHN0 YXR1czsKLQotCWlmICghaW9fY2hhbm5lbF93cml0ZV9hbGwocmZjb21tLCBkYXRhLCBjb3VudCkp Ci0JCXJldHVybiBGQUxTRTsKLQotCXdoaWxlICghKGdvdF9vayB8fCBnb3RfZXJyb3IpKSB7Ci0J CXN0YXR1cyA9IGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKHJmY29tbSwgcmVzcF9idWYsIHRvcmVh ZCwKLQkJCQkJCSZyZWFkLCBOVUxMKTsKLQkJaWYgKHN0YXR1cyA9PSBHX0lPX1NUQVRVU19OT1JN QUwpCi0JCQlyZXNwX2J1ZltyZWFkXSA9ICdcMCc7Ci0JCWVsc2UgewotCQkJZGVidWcoInJmY29t bV9zZW5kX2FuZF9yZWFkKCk6ICVtIik7Ci0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQkJZ290X29r ID0gTlVMTCAhPSBzdHJzdHIocmVzcF9idWYsIE9LX1JFU1BPTlNFKTsKLQkJZ290X2Vycm9yID0g TlVMTCAhPSBzdHJzdHIocmVzcF9idWYsIEVSUk9SX1JFU1BPTlNFKTsKLQkJcmVzcF9idWYgKz0g cmVhZDsKLQkJdG9yZWFkIC09IHJlYWQ7Ci0JfQotCXJldHVybiBUUlVFOwotfQotCi0vKiBnZXQg PGRlc2NyPiBmcm9tIHRoZSBuYW1lczogKDxkZXNjcj4sICg8dmFsdWVzPikpLCAoPGRlc2NyPiwg KDx2YWx1ZXM+KSkKLSAqIC4uLiAqLwotc3RhdGljIEdTTGlzdCAqcGFyc2VfaW5kaWNhdG9yX25h bWVzKGdjaGFyICpuYW1lcywgR1NMaXN0ICppbmRpZXMpCi17Ci0JZ2NoYXIgKmN1cnJlbnQgPSBu YW1lcyAtIDE7Ci0JR1NMaXN0ICpyZXN1bHQgPSBpbmRpZXM7Ci0JZ2NoYXIgKm5leHQ7Ci0Jc3Ry dWN0IGluZGljYXRvciAqaW5kOwotCi0Jd2hpbGUgKGN1cnJlbnQgIT0gTlVMTCkgewotCQljdXJy ZW50ICs9IDI7Ci0JCW5leHQgPSBzdHJzdHIoY3VycmVudCwgIiwoIik7Ci0JCWluZCA9IGdfc2xp Y2VfbmV3KHN0cnVjdCBpbmRpY2F0b3IpOwotCQlzdHJuY3B5KGluZC0+ZGVzY3IsIGN1cnJlbnQs IDIwKTsKLQkJaW5kLT5kZXNjclsoaW50cHRyX3QpIG5leHQgLSAoaW50cHRyX3QpIGN1cnJlbnRd ID0gJ1wwJzsKLQkJcmVzdWx0ID0gZ19zbGlzdF9hcHBlbmQocmVzdWx0LCAoZ3BvaW50ZXIpIGlu ZCk7Ci0JCWN1cnJlbnQgPSBzdHJzdHIobmV4dCArIDEsICIsKCIpOwotCX0KLQlyZXR1cm4gcmVz dWx0OwotfQotCi0vKiBnZXQgdmFsdWVzIGZyb20gPHZhbDA+LDx2YWwxPiwuLi4gKi8KLXN0YXRp YyBHU0xpc3QgKnBhcnNlX2luZGljYXRvcl92YWx1ZXMoZ2NoYXIgKnZhbHVlcywgR1NMaXN0ICpp bmRpZXMpCi17Ci0JZ2ludCB2YWw7Ci0JZ2NoYXIgKmN1cnJlbnQgPSB2YWx1ZXMgLSAxOwotCUdT TGlzdCAqcnVubmVyID0gaW5kaWVzOwotCXN0cnVjdCBpbmRpY2F0b3IgKmluZDsKLQotCXdoaWxl IChjdXJyZW50ICE9IE5VTEwpIHsKLQkJY3VycmVudCArPSAxOwotCQlzc2NhbmYoY3VycmVudCwg IiVkIiwgJnZhbCk7Ci0JCWN1cnJlbnQgPSBzdHJjaHIoY3VycmVudCwgJywnKTsKLQkJaW5kID0g Z19zbGlzdF9udGhfZGF0YShydW5uZXIsIDApOwotCQlpbmQtPnZhbHVlID0gdmFsOwotCQlydW5u ZXIgPSBnX3NsaXN0X25leHQocnVubmVyKTsKLQl9Ci0JcmV0dXJuIGluZGllczsKLX0KLQotLyog Z2V0IHZhbHVlcyBmcm9tIDx2YWwwPiw8dmFsMT4sLi4uICovCi1zdGF0aWMgZ3VpbnQgZ2V0X2hv bGRfbXB0eV9mZWF0dXJlcyhnY2hhciAqZmVhdHVyZXMpCi17Ci0JZ3VpbnQgcmVzdWx0ID0gMDsK LQotCWlmIChzdHJzdHIoZmVhdHVyZXMsICIwIikpCi0JCXJlc3VsdCB8PSBBR19DSExEXzA7Ci0K LQlpZiAoc3Ryc3RyKGZlYXR1cmVzLCAiMSIpKQotCQlyZXN1bHQgfD0gQUdfQ0hMRF8xOwotCi0J aWYgKHN0cnN0cihmZWF0dXJlcywgIjF4IikpCi0JCXJlc3VsdCB8PSBBR19DSExEXzF4OwotCi0J aWYgKHN0cnN0cihmZWF0dXJlcywgIjIiKSkKLQkJcmVzdWx0IHw9IEFHX0NITERfMjsKLQotCWlm IChzdHJzdHIoZmVhdHVyZXMsICIyeCIpKQotCQlyZXN1bHQgfD0gQUdfQ0hMRF8yeDsKLQotCWlm IChzdHJzdHIoZmVhdHVyZXMsICIzIikpCi0JCXJlc3VsdCB8PSBBR19DSExEXzM7Ci0KLQlpZiAo c3Ryc3RyKGZlYXR1cmVzLCAiNCIpKQotCQlyZXN1bHQgfD0gQUdfQ0hMRF80OwotCi0JcmV0dXJu IHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuIGVzdGFibGlzaF9zZXJ2aWNlX2xldmVsX2Nv bm4oc3RydWN0IGdhdGV3YXkgKmd3KQotewotCWdjaGFyIGJ1ZltSRkNPTU1fQlVGX1NJWkVdOwot CWdib29sZWFuIHJlczsKLQotCWRlYnVnKCJhdCB0aGUgYmVnaW4gb2YgZXN0YWJsaXNoX3NlcnZp Y2VfbGV2ZWxfY29ubigpIik7Ci0JcmVzID0gcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0ZF QVRVUkVTLCBidWYsCi0JCQkJc2l6ZW9mKEFHX0ZFQVRVUkVTKSAtIDEpOwotCWlmICghcmVzIHx8 IHNzY2FuZihidWYsICJcclxuK0JSU0Y6JWQiLCAmZ3ctPmFnX2ZlYXR1cmVzKSAhPSAxKQotCQly ZXR1cm4gRkFMU0U7Ci0KLQlkZWJ1ZygiZmVhdHVyZXMgYXJlIDB4JVgiLCBndy0+YWdfZmVhdHVy ZXMpOwotCXJlcyA9IHJmY29tbV9zZW5kX2FuZF9yZWFkKGd3LCBBR19JTkRJQ0FUT1JTX1NVUFAs IGJ1ZiwKLQkJCQlzaXplb2YoQUdfSU5ESUNBVE9SU19TVVBQKSAtIDEpOwotCWlmICghcmVzIHx8 ICFzdHJzdHIoYnVmLCAiK0NJTkQ6IikpCi0JCXJldHVybiBGQUxTRTsKLQotCWd3LT5pbmRpZXMg PSBwYXJzZV9pbmRpY2F0b3JfbmFtZXMoc3RyY2hyKGJ1ZiwgJygnKSwgTlVMTCk7Ci0KLQlyZXMg PSByZmNvbW1fc2VuZF9hbmRfcmVhZChndywgQUdfSU5ESUNBVE9SU19WQUwsIGJ1ZiwKLQkJc2l6 ZW9mKEFHX0lORElDQVRPUlNfVkFMKSAtIDEpOwotCWlmICghcmVzIHx8ICFzdHJzdHIoYnVmLCAi K0NJTkQ6IikpCi0JCXJldHVybiBGQUxTRTsKLQotCWd3LT5pbmRpZXMgPSBwYXJzZV9pbmRpY2F0 b3JfdmFsdWVzKHN0cmNocihidWYsICc6JykgKyAxLCBndy0+aW5kaWVzKTsKLQotCXJlcyA9IHJm Y29tbV9zZW5kX2FuZF9yZWFkKGd3LCBBR19JTkRJQ0FUT1JTX0VOQUJMRSwgYnVmLAotCQkJCXNp emVvZihBR19JTkRJQ0FUT1JTX0VOQUJMRSkgLSAxKTsKLQlpZiAoIXJlcyB8fCAhc3Ryc3RyKGJ1 ZiwgIk9LIikpCi0JCXJldHVybiBGQUxTRTsKLQotCWlmICgoZ3ctPmFnX2ZlYXR1cmVzICYgQUdf RkVBVFVSRV8zV0FZKSAhPSAwKSB7Ci0JCXJlcyA9IHJmY29tbV9zZW5kX2FuZF9yZWFkKGd3LCBB R19IT0xEX01QVFlfU1VQUCwgYnVmLAotCQkJCXNpemVvZihBR19IT0xEX01QVFlfU1VQUCkgLSAx KTsKLQkJaWYgKCFyZXMgfHwgIXN0cnN0cihidWYsICIrQ0hMRDoiKSkgewotCQkJZ19zbGljZV9m cmVlMShSRkNPTU1fQlVGX1NJWkUsIGJ1Zik7Ci0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQkJZ3ct PmhvbGRfbXVsdGlwYXJ0eV9mZWF0dXJlcyA9IGdldF9ob2xkX21wdHlfZmVhdHVyZXMoCi0JCQkJ CQkJc3RyY2hyKGJ1ZiwgJygnKSk7Ci0KLQl9IGVsc2UKLQkJZ3ctPmhvbGRfbXVsdGlwYXJ0eV9m ZWF0dXJlcyA9IDA7Ci0KLQlkZWJ1ZygiU2VydmljZSBsYXllciBjb25uZWN0aW9uIHN1Y2Nlc3Nm dWxseSBlc3RhYmxpc2hlZCEiKTsKLQlyZmNvbW1fc2VuZF9hbmRfcmVhZChndywgQUdfQ0FMTEVS X0lERU5UX0VOQUJMRSwgYnVmLAotCQkJc2l6ZW9mKEFHX0NBTExFUl9JREVOVF9FTkFCTEUpIC0g MSk7Ci0JcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0NBUlJJRVJfRk9STUFULCBidWYsCi0J CQlzaXplb2YoQUdfQ0FSUklFUl9GT1JNQVQpIC0gMSk7Ci0JaWYgKChndy0+YWdfZmVhdHVyZXMg JiBBR19GRUFUVVJFX0VYVEVOREVEX1JFU19DT0RFKSAhPSAwKQotCQlyZmNvbW1fc2VuZF9hbmRf cmVhZChndywgQUdfRVhURU5ERURfUkVTVUxUX0NPREUsIGJ1ZiwKLQkJCXNpemVvZihBR19FWFRF TkRFRF9SRVNVTFRfQ09ERSkgLSAxKTsKLQotCXJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9p ZCBwcm9jZXNzX2luZF9jaGFuZ2Uoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBndWludCBpbmRl eCwKLQkJCQkJCQlnaW50IHZhbHVlKQotewotCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0 ZXdheTsKLQlzdHJ1Y3QgaW5kaWNhdG9yICppbmQgPSBnX3NsaXN0X250aF9kYXRhKGd3LT5pbmRp ZXMsIGluZGV4IC0gMSk7Ci0JZ2NoYXIgKm5hbWUgPSBpbmQtPmRlc2NyOwotCi0JaW5kLT52YWx1 ZSA9IHZhbHVlOwotCi0JZGVidWcoImF0IHRoZSBiZWdpbiBvZiBwcm9jZXNzX2luZF9jaGFuZ2Us IG5hbWUgaXMgJXMiLCBuYW1lKTsKLQlpZiAoIXN0cmNtcChuYW1lLCAiXCJjYWxsXCIiKSkgewot CQlpZiAodmFsdWUgPiAwKSB7Ci0JCQlnX2RidXNfZW1pdF9zaWduYWwoZGV2LT5jb25uLCBkZXYt PnBhdGgsCi0JCQkJCUFVRElPX0dBVEVXQVlfSU5URVJGQUNFLAotCQkJCQkiQ2FsbFN0YXJ0ZWQi LCBEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JCQlndy0+aXNfZGlhbGluZyA9IEZBTFNFOwotCQkJZ3ct PmNhbGxfYWN0aXZlID0gVFJVRTsKLQkJfSBlbHNlIHsKLQkJCWdfZGJ1c19lbWl0X3NpZ25hbChk ZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsCi0JCQkJ CSJDYWxsRW5kZWQiLCBEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JCQlndy0+Y2FsbF9hY3RpdmUgPSBG QUxTRTsKLQkJfQotCi0JfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJcImNhbGxzZXR1cFwiIikp IHsKLQkJaWYgKHZhbHVlID09IDAgJiYgZ3ctPmlzX2RpYWxpbmcpIHsKLQkJCWdfZGJ1c19lbWl0 X3NpZ25hbChkZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJCQkJQVVESU9fR0FURVdBWV9JTlRFUkZB Q0UsCi0JCQkJCSJDYWxsVGVybWluYXRlZCIsCi0JCQkJCURCVVNfVFlQRV9JTlZBTElEKTsKLQkJ CWd3LT5pc19kaWFsaW5nID0gRkFMU0U7Ci0JCX0gZWxzZSBpZiAoIWd3LT5pc19kaWFsaW5nICYm IHZhbHVlID4gMCkKLQkJCWd3LT5pc19kaWFsaW5nID0gVFJVRTsKLQotCX0gZWxzZSBpZiAoIXN0 cmNtcChuYW1lLCAiXCJjYWxsaGVsZFwiIikpIHsKLQkJLyogRklYTUU6IFRoZSBmb2xsb3dpbmcg Y29kZSBpcyBiYXNlZCBvbiBhc3N1bXB0aW9ucyBvbmx5LgotCQkgKiBIYXMgdG8gYmUgdGVzdGVk IGZvciBpbnRlcm9wZXJhYmlsaXR5Ci0JCSAqIEkgYXNzdW1lIHRoYXQgY2FsbGhlbGQ9MiB3b3Vs ZCBiZSBzZW50IHdoZW4gZGlhbCBmcm9tIEhGCi0JCSAqIGZhaWxlZCBpbiBjYXNlIG9mIDMtd2F5 IGNhbGwKLQkJICogVW5mb3J0dW5hdGVseSB0aGlzIHBhdGggaXMgbm90IGNvdmVyZWQgYnkgdGhl IEhGIHNwZWMgc28KLQkJICogdGhlIGNvZGUgaGFzIHRvIGJlIHRlc3RlZCBmb3IgaW50ZXJvcAot CQkqLwotCQkvKiAnMicgbWVhbnM6IGFsbCBjYWxscyBoZWxkLCBubyBhY3RpdmUgY2FsbHMgKi8K LQkJaWYgKHZhbHVlID09IDIpIHsKLQkJCWlmIChndy0+aXNfZGlhbGluZykgewotCQkJCWdfZGJ1 c19lbWl0X3NpZ25hbChkZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJCQkJQVVESU9fR0FURVdBWV9J TlRFUkZBQ0UsCi0JCQkJCSJDYWxsVGVybWluYXRlZCIsCi0JCQkJCURCVVNfVFlQRV9JTlZBTElE KTsKLQkJCQlndy0+aXNfZGlhbGluZyA9IEZBTFNFOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmICgh c3RyY21wKG5hbWUsICJcInNlcnZpY2VcIiIpKQotCQllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2 LT5jb25uLCBkZXYtPnBhdGgsCi0JCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsICJSZWdpc3Ry YXRpb25TdGF0dXMiLAotCQkJCURCVVNfVFlQRV9VSU5UMTYsICZ2YWx1ZSk7Ci0JZWxzZSBpZiAo IXN0cmNtcChuYW1lLCAiXCJzaWduYWxcIiIpKQotCQllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2 LT5jb25uLCBkZXYtPnBhdGgsCi0JCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsICJTaWduYWxT dHJlbmd0aCIsCi0JCQkJREJVU19UWVBFX1VJTlQxNiwgJnZhbHVlKTsKLQllbHNlIGlmICghc3Ry Y21wKG5hbWUsICJcInJvYW1cIiIpKQotCQllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2LT5jb25u LCBkZXYtPnBhdGgsCi0JCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsICJSb2FtaW5nU3RhdHVz IiwKLQkJCQlEQlVTX1RZUEVfVUlOVDE2LCAmdmFsdWUpOwotCWVsc2UgaWYgKCFzdHJjbXAobmFt ZSwgIlwiYmF0dGNoZ1wiIikpCi0JCWVtaXRfcHJvcGVydHlfY2hhbmdlZChkZXYtPmNvbm4sIGRl di0+cGF0aCwKLQkJCQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwgIkJhdHRlcnlDaGFyZ2UiLAot CQkJCURCVVNfVFlQRV9VSU5UMTYsICZ2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3Nf cmluZyhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UsIEdJT0NoYW5uZWwgKmNoYW4sCi0JCQln Y2hhciAqYnVmKQotewotCWdjaGFyIG51bWJlcltBR19DQUxMRVJfTlVNX1NJWkVdOwotCWdjaGFy ICpjbGk7Ci0JZ2NoYXIgKnNlcDsKLQlnc2l6ZSByZWFkOwotCUdJT1N0YXR1cyBzdGF0dXM7Ci0K LQlyZmNvbW1fc3RvcF93YXRjaChkZXZpY2UpOwotCXN0YXR1cyA9IGdfaW9fY2hhbm5lbF9yZWFk X2NoYXJzKGNoYW4sIGJ1ZiwgUkZDT01NX0JVRl9TSVpFIC0gMSwgJnJlYWQsIE5VTEwpOwotCWlm IChzdGF0dXMgIT0gR19JT19TVEFUVVNfTk9STUFMKQotCQlyZXR1cm47Ci0KLQlkZWJ1ZygiYXQg dGhlIGJlZ2luIG9mIHByb2Nlc3NfcmluZyIpOwotCWlmIChzdHJsZW4oYnVmKSA+IEFHX0NBTExF Ul9OVU1fU0laRSArIDEwKQotCQllcnJvcigicHJvY2Vzc19yaW5nKCk6IGJ1ZiBpcyB0b28gbG9u ZyAnJXMnIiwgYnVmKTsKLQllbHNlIGlmICgoY2xpID0gc3Ryc3RyKGJ1ZiwgIlxyXG4rQ0xJUCIp KSkgewotCQlpZiAoc3NjYW5mKGNsaSwgIlxyXG4rQ0xJUDogXCIlcyIsIG51bWJlcikgPT0gMSkg ewotCQkJc2VwID0gc3RyY2hyKG51bWJlciwgJyInKTsKLQkJCXNlcFswXSA9ICdcMCc7Ci0KLQkJ CS8qIEZJWE1FOnNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgb24gZWFjaCBSSU5HK0NMSVAuCi0JCQkg KiBUaGF0J3MgYmFkICovCi0JCQljbGkgPSBudW1iZXI7Ci0JCQlnX2RidXNfZW1pdF9zaWduYWwo ZGV2aWNlLT5jb25uLCBkZXZpY2UtPnBhdGgsCi0JCQkJCUFVRElPX0dBVEVXQVlfSU5URVJGQUNF LCAiUmluZyIsCi0JCQkJCURCVVNfVFlQRV9TVFJJTkcsICZjbGksCi0JCQkJCURCVVNfVFlQRV9J TlZBTElEKTsKLQkJCWRldmljZS0+Z2F0ZXdheS0+aXNfZGlhbGluZyA9IFRSVUU7Ci0JCX0gZWxz ZQotCQkJZXJyb3IoInByb2Nlc3NfcmluZygpOiAnJXMnIGluIHBsYWNlIG9mICtDTElQIGFmdGVy IFJJTkciLCBidWYpOwotCi0JfQotCi0JcmZjb21tX3N0YXJ0X3dhdGNoKGRldmljZSk7Ci19Ci0K LXN0YXRpYyBnYm9vbGVhbiByZmNvbW1fYWdfZGF0YV9jYihHSU9DaGFubmVsICpjaGFuLCBHSU9D b25kaXRpb24gY29uZCwKLQkJCQkJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKQotewotCWdj aGFyIGJ1ZltSRkNPTU1fQlVGX1NJWkVdOwotCXN0cnVjdCBnYXRld2F5ICpndzsKLQlnc2l6ZSBy ZWFkOwotCS8qIHNvbWUgc3BhY2UgZm9yIHZhbHVlICovCi0JZ2NoYXIgaW5kaWNhdG9yW0FHX0lO RElDQVRPUl9ERVNDUl9TSVpFICsgNF07Ci0JZ2ludCB2YWx1ZTsKLQlndWludCBpbmRleDsKLQln Y2hhciAqc2VwOwotCi0JZGVidWcoImF0IHRoZSBiZWdpbiBvZiByZmNvbW1fYWdfZGF0YV9jYigp Iik7Ci0JaWYgKGNvbmQgJiBHX0lPX05WQUwpCi0JCXJldHVybiBGQUxTRTsKLQotCWd3ID0gZGV2 aWNlLT5nYXRld2F5OwotCi0JaWYgKGNvbmQgJiAoR19JT19FUlIgfCBHX0lPX0hVUCkpIHsKLQkJ ZGVidWcoImNvbm5lY3Rpb24gd2l0aCByZW1vdGUgQlQgaXMgY2xvc2VkIik7Ci0JCWdhdGV3YXlf Y2xvc2UoZGV2aWNlKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCWlmIChnX2lvX2NoYW5uZWxf cmVhZF9jaGFycyhjaGFuLCBidWYsIHNpemVvZihidWYpIC0gMSwgJnJlYWQsIE5VTEwpCi0JCQkh PSBHX0lPX1NUQVRVU19OT1JNQUwpCi0JCXJldHVybiBUUlVFOwotCWJ1ZltyZWFkXSA9ICdcMCc7 Ci0KLQlpZiAoc3RybGVuKGJ1ZikgPiBBR19JTkRJQ0FUT1JfREVTQ1JfU0laRSArIDE0KQotCQll cnJvcigicmZjb21tX2FnX2RhdGFfY2IoKTogYnVmIGlzIHRvbyBsb25nICclcyciLCBidWYpOwot CWVsc2UgaWYgKHNzY2FuZihidWYsICJcclxuK0NJRVY6JXNcclxuIiwgaW5kaWNhdG9yKSA9PSAx KSB7Ci0JCXNlcCA9IHN0cmNocihpbmRpY2F0b3IsICcsJyk7Ci0JCXNlcFswXSA9ICdcMCc7Ci0J CXNlcCArPSAxOwotCQlpbmRleCA9IGF0b2koaW5kaWNhdG9yKTsKLQkJdmFsdWUgPSBhdG9pKHNl cCk7Ci0JCXByb2Nlc3NfaW5kX2NoYW5nZShkZXZpY2UsIGluZGV4LCB2YWx1ZSk7Ci0JfSBlbHNl IGlmIChzdHJzdHIoYnVmLCAiUklORyIpKQotCQlwcm9jZXNzX3JpbmcoZGV2aWNlLCBjaGFuLCBi dWYpOwotCWVsc2UgaWYgKHNzY2FuZihidWYsICJcclxuK0JWUkE6JWRcclxuIiwgJnZhbHVlKSA9 PSAxKSB7Ci0JCWlmICh2YWx1ZSA9PSAwKQotCQkJZ19kYnVzX2VtaXRfc2lnbmFsKGRldmljZS0+ Y29ubiwgZGV2aWNlLT5wYXRoLAotCQkJCQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKLQkJCQkJ IlZvaWNlUmVjb2duaXRpb25BY3RpdmUiLAotCQkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JCWVs c2UKLQkJCWdfZGJ1c19lbWl0X3NpZ25hbChkZXZpY2UtPmNvbm4sIGRldmljZS0+cGF0aCwKLQkJ CQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsCi0JCQkJCSJWb2ljZVJlY29nbml0aW9uSW5hY3Rp dmUiLAotCQkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JfSBlbHNlIGlmIChzc2NhbmYoYnVmLCAi XHJcbitWR1M6JWRcclxuIiwgJnZhbHVlKSA9PSAxKSB7Ci0JCWd3LT5zcF9nYWluID0gdmFsdWU7 Ci0JCWVtaXRfcHJvcGVydHlfY2hhbmdlZChkZXZpY2UtPmNvbm4sIGRldmljZS0+cGF0aCwKLQkJ CQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwgIlNwZWFrZXJHYWluIiwKLQkJCQlEQlVTX1RZUEVf VUlOVDE2LCAmdmFsdWUpOwotCX0gZWxzZSBpZiAoc3NjYW5mKGJ1ZiwgIlxyXG4rVkdNOiVkXHJc biIsICZ2YWx1ZSkgPT0gMSkgewotCQlndy0+bWljX2dhaW4gPSB2YWx1ZTsKLQkJZW1pdF9wcm9w ZXJ0eV9jaGFuZ2VkKGRldmljZS0+Y29ubiwgZGV2aWNlLT5wYXRoLAotCQkJCUFVRElPX0dBVEVX QVlfSU5URVJGQUNFLCAiTWljcm9waG9uZUdhaW4iLAotCQkJCURCVVNfVFlQRV9VSU5UMTYsICZ2 YWx1ZSk7Ci0JfSBlbHNlCi0JCWVycm9yKCJyZmNvbW1fYWdfZGF0YV9jYigpOiByZWFkIHdyb25n IGRhdGEgJyVzJyIsIGJ1Zik7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQogc3RhdGljIGdib29sZWFu IHNjb19pb19jYihHSU9DaGFubmVsICpjaGFuLCBHSU9Db25kaXRpb24gY29uZCwKIAkJCXN0cnVj dCBhdWRpb19kZXZpY2UgKmRldikKIHsKQEAgLTU0MSw3ICsxMTgsNiBAQCBzdGF0aWMgdm9pZCBy ZmNvbW1fY29ubmVjdF9jYihHSU9DaGFubmVsICpjaGFuLCBHRXJyb3IgKmVyciwKIHsKIAlzdHJ1 Y3QgYXVkaW9fZGV2aWNlICpkZXYgPSB1c2VyX2RhdGE7CiAJc3RydWN0IGdhdGV3YXkgKmd3ID0g ZGV2LT5nYXRld2F5OwotCURCdXNNZXNzYWdlICpjb25uX21lcyA9IGd3LT5jb25uZWN0X21lc3Nh Z2U7CiAJZ2NoYXIgZ3dfYWRkclsxOF07CiAJR0lPRmxhZ3MgZmxhZ3M7CiAKQEAgLTU2MywyOSAr MTM5LDYgQEAgc3RhdGljIHZvaWQgcmZjb21tX2Nvbm5lY3RfY2IoR0lPQ2hhbm5lbCAqY2hhbiwg R0Vycm9yICplcnIsCiAJaWYgKCFndy0+cmZjb21tKQogCQlndy0+cmZjb21tID0gZ19pb19jaGFu bmVsX3JlZihjaGFuKTsKIAotCWlmIChlc3RhYmxpc2hfc2VydmljZV9sZXZlbF9jb25uKGRldi0+ Z2F0ZXdheSkpIHsKLQkJZ2Jvb2xlYW4gdmFsdWUgPSBUUlVFOwotCi0JCWRlYnVnKCIlczogQ29u bmVjdGVkIHRvICVzIiwgZGV2LT5wYXRoLCBnd19hZGRyKTsKLQkJcmZjb21tX3N0YXJ0X3dhdGNo KGRldik7Ci0JCWlmIChjb25uX21lcykgewotCQkJREJ1c01lc3NhZ2UgKnJlcGx5ID0KLQkJCQlk YnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4oY29ubl9tZXMpOwotCQkJZGJ1c19jb25uZWN0 aW9uX3NlbmQoZGV2LT5jb25uLCByZXBseSwgTlVMTCk7Ci0JCQlkYnVzX21lc3NhZ2VfdW5yZWYo cmVwbHkpOwotCQkJZGJ1c19tZXNzYWdlX3VucmVmKGNvbm5fbWVzKTsKLQkJCWd3LT5jb25uZWN0 X21lc3NhZ2UgPSBOVUxMOwotCQl9Ci0KLQkJZ3ctPnN0YXRlID0gR0FURVdBWV9TVEFURV9DT05O RUNURUQ7Ci0JCWVtaXRfcHJvcGVydHlfY2hhbmdlZChkZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJ CQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKLQkJCQkiQ29ubmVjdGVkIiwgREJVU19UWVBFX0JP T0xFQU4sCSZ2YWx1ZSk7Ci0JCXJldHVybjsKLQl9IGVsc2UKLQkJZXJyb3IoIiVzOiBGYWlsZWQg dG8gZXN0YWJsaXNoIHNlcnZpY2UgbGF5ZXIgY29ubmVjdGlvbiB0byAlcyIsCi0JCQlkZXYtPnBh dGgsIGd3X2FkZHIpOwotCiAJaWYgKE5VTEwgIT0gZ3ctPnNjb19zdGFydF9jYikKIAkJZ3ctPnNj b19zdGFydF9jYihOVUxMLCBndy0+c2NvX3N0YXJ0X2NiX2RhdGEpOwogCkBAIC03MzIsMzIxICsy ODUsMjAgQEAgc3RhdGljIERCdXNNZXNzYWdlICphZ19kaXNjb25uZWN0KERCdXNDb25uZWN0aW9u ICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLAogCXJldHVybiByZXBseTsKIH0KIAotc3RhdGljIERC dXNNZXNzYWdlICpwcm9jZXNzX2FnX3JlcG9uc2UoREJ1c01lc3NhZ2UgKm1zZywgZ2NoYXIgKnJl c3BvbnNlKQotewotCURCdXNNZXNzYWdlICpyZXBseTsKLQotCi0JZGVidWcoImluIHByb2Nlc3Nf YWdfcmVwb25zZSwgcmVzcG9uc2UgaXMgJXMiLCByZXNwb25zZSk7Ci0JaWYgKHN0cnN0cihyZXNw b25zZSwgT0tfUkVTUE9OU0UpKQotCQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3Jl dHVybihtc2cpOwotCWVsc2UgewotCQkvKiBGSVhNRTogc29tZSBjb2RlIHNob3VsZCBiZSBoZXJl IHRvIHByb2Nlc3NlcyBlcnJvcnMKLQkJICogIGluIGJldHRlciBmYXNpb24gKi8KLQkJZGVidWco IkFHIHJlc3BvbmRlZCB3aXRoICclcycgdG8gJXMgbWV0aG9kIGNhbGwiLCByZXNwb25zZSwKLQkJ CQlkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtc2cpKTsKLQkJcmVwbHkgPSBkYnVzX21lc3NhZ2Vf bmV3X2Vycm9yKG1zZywgRVJST1JfSU5URVJGQUNFCi0JCQkJCSIuT3BlcmF0aW9uRmFpbGVkIiwK LQkJCQkJIk9wZXJhdGlvbiBmYWlsZWQuU2VlIGxvZyBmb3IgZGV0YWlscyIpOwotCX0KLQlyZXR1 cm4gcmVwbHk7Ci19Ci0KLXN0YXRpYyBEQnVzTWVzc2FnZSAqcHJvY2Vzc19zaW1wbGUoREJ1c01l c3NhZ2UgKm1zZywgc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LAotCQkJCQlnY2hhciAqZGF0YSkK LXsKLQlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXYtPmdhdGV3YXk7Ci0JZ2NoYXIgYnVmW1JGQ09N TV9CVUZfU0laRV07Ci0KLQlyZmNvbW1fc3RvcF93YXRjaChkZXYpOwotCXJmY29tbV9zZW5kX2Fu ZF9yZWFkKGd3LCBkYXRhLCBidWYsIHN0cmxlbihkYXRhKSk7Ci0JcmZjb21tX3N0YXJ0X3dhdGNo KGRldik7Ci0JcmV0dXJuIHByb2Nlc3NfYWdfcmVwb25zZShtc2csIGJ1Zik7Ci19Ci0KLSNkZWZp bmUgQUdfQU5TV0VSICJBVEFcciIKLQotc3RhdGljIERCdXNNZXNzYWdlICphZ19hbnN3ZXIoREJ1 c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCi0JCQkJdm9pZCAqZGF0YSkKLXsK LQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYgPSBkYXRhOwotCXN0cnVjdCBnYXRld2F5ICpndyA9 IGRldi0+Z2F0ZXdheTsKLQotCWlmICghZ3ctPnJmY29tbSkKLQkJcmV0dXJuIGdfZGJ1c19jcmVh dGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5Ob3RDb25uZWN0ZWQiLAotCQkJ CQkiTm90IENvbm5lY3RlZCIpOwotCi0JaWYgKGd3LT5jYWxsX2FjdGl2ZSkKLQkJcmV0dXJuIGdf ZGJ1c19jcmVhdGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5DYWxsQWxyZWFk eUFuc3dlcmVkIiwKLQkJCQkJIkNhbGwgQWxyZWFkeUFuc3dlcmVkIik7Ci0KLQlyZXR1cm4gcHJv Y2Vzc19zaW1wbGUobXNnLCBkZXYsIEFHX0FOU1dFUik7Ci19Ci0KLSNkZWZpbmUgQUdfSEFOR1VQ ICJBVCtDSFVQXHIiCi0KLXN0YXRpYyBEQnVzTWVzc2FnZSAqYWdfdGVybWluYXRlX2NhbGwoREJ1 c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCi0JCQkJdm9pZCAqZGF0YSkKLXsK LQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYgPSBkYXRhOwotCXN0cnVjdCBnYXRld2F5ICpndyA9 IGRldi0+Z2F0ZXdheTsKLQotCWlmICghZ3ctPnJmY29tbSkKLQkJcmV0dXJuIGdfZGJ1c19jcmVh dGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5Ob3RDb25uZWN0ZWQiLAotCQkJ CQkiTm90IENvbm5lY3RlZCIpOwotCi0JcmV0dXJuIHByb2Nlc3Nfc2ltcGxlKG1zZywgZGV2LCBB R19IQU5HVVApOwotfQotCi0vKiBhY2NvcmRpbmcgdG8gR1NNIHNwZWMgKi8KLSNkZWZpbmUgQUxM T1dFRF9OVU1CRVJfU1lNQk9MUyAiMTIzNDU2Nzg5MCojQUJDRCIKLSNkZWZpbmUgQUdfUExBQ0Vf Q0FMTCAiQVREJXM7XHIiCi0vKiBkaWFsaW5nIGZyb20gbWVtb3J5IGlzIG5vdCBzdXBwb3J0ZWQg YXMgaGVhZHNldCBzcGVjIGRvZXNuJ3QgZGVmaW5lIGEgd2F5Ci0gKiB0byByZXRyZWl2ZSBwaG9u ZSBtZW1vcnkgZW50cmllcy4KLSAqLwotc3RhdGljIERCdXNNZXNzYWdlICphZ19jYWxsKERCdXND b25uZWN0aW9uICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLAotCQkJCXZvaWQgKmRhdGEpCi17Ci0J c3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlID0gZGF0YTsKLQlzdHJ1Y3QgZ2F0ZXdheSAqZ3cg PSBkZXZpY2UtPmdhdGV3YXk7Ci0JZ2NoYXIgYnVmW1JGQ09NTV9CVUZfU0laRV07Ci0JZ2NoYXIg Km51bWJlcjsKLQlnaW50IGF0ZF9sZW47Ci0JREJ1c01lc3NhZ2UgKnJlc3VsdDsKLQotCWRlYnVn KCJhdCB0aGUgYmVnaW4gb2YgYWdfY2FsbCgpIik7Ci0JaWYgKCFndy0+cmZjb21tKQotCQlyZXR1 cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRQotCQkJCQkiLk5vdENv bm5lY3RlZCIsCi0JCQkJCSJOb3QgQ29ubmVjdGVkIik7Ci0KLQlkYnVzX21lc3NhZ2VfZ2V0X2Fy Z3MobXNnLCBOVUxMLCBEQlVTX1RZUEVfU1RSSU5HLCAmbnVtYmVyLAotCQkJCURCVVNfVFlQRV9J TlZBTElEKTsKLQlpZiAoc3RybGVuKG51bWJlcikgIT0gc3Ryc3BuKG51bWJlciwgQUxMT1dFRF9O VU1CRVJfU1lNQk9MUykpCi0JCXJldHVybiBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1zZywKLQkJ CUVSUk9SX0lOVEVSRkFDRSAiLkJhZE51bWJlciIsCi0JCQkiTnVtYmVyIGNvbnRhaW5zIGNoYXJh Y3RlcnMgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIik7Ci0KLQlhdGRfbGVuID0gc3ByaW50ZihidWYs IEFHX1BMQUNFX0NBTEwsIG51bWJlcik7Ci0JcmZjb21tX3N0b3Bfd2F0Y2goZGV2aWNlKTsKLQly ZmNvbW1fc2VuZF9hbmRfcmVhZChndywgYnVmLCBidWYsIGF0ZF9sZW4pOwotCXJmY29tbV9zdGFy dF93YXRjaChkZXZpY2UpOwotCi0JcmVzdWx0ID0gcHJvY2Vzc19hZ19yZXBvbnNlKG1zZywgYnVm KTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0jZGVmaW5lIEFHX0dFVF9DQVJSSUVSICJBVCtDT1BT P1xyIgotCi1zdGF0aWMgREJ1c01lc3NhZ2UgKmFnX2dldF9vcGVyYXRvcihEQnVzQ29ubmVjdGlv biAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywKLQkJCQkJdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qg YXVkaW9fZGV2aWNlICpkZXYgPSAoc3RydWN0IGF1ZGlvX2RldmljZSAqKSBkYXRhOwotCXN0cnVj dCBnYXRld2F5ICpndyA9IGRldi0+Z2F0ZXdheTsKLQlnY2hhciBidWZbUkZDT01NX0JVRl9TSVpF XTsKLQlHSU9DaGFubmVsICpyZmNvbW0gPSBndy0+cmZjb21tOwotCWdzaXplIHJlYWQ7Ci0JZ2No YXIgKnJlc3VsdCwgKnNlcDsKLQlEQnVzTWVzc2FnZSAqcmVwbHk7Ci0JR0lPU3RhdHVzIHN0YXR1 czsKLQotCWlmICghZ3ctPnJmY29tbSkKLQkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNn LCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5Ob3RDb25uZWN0ZWQiLAotCQkJCQkiTm90IENvbm5l Y3RlZCIpOwotCi0JcmZjb21tX3N0b3Bfd2F0Y2goZGV2KTsKLQlpb19jaGFubmVsX3dyaXRlX2Fs bChyZmNvbW0sIEFHX0dFVF9DQVJSSUVSLCBzdHJsZW4oQUdfR0VUX0NBUlJJRVIpKTsKLQotCXN0 YXR1cyA9IGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKHJmY29tbSwgYnVmLCBSRkNPTU1fQlVGX1NJ WkUgLSAxLAotCQkJCQkJJnJlYWQsIE5VTEwpOwotCXJmY29tbV9zdGFydF93YXRjaChkZXYpOwot CWlmIChHX0lPX1NUQVRVU19OT1JNQUwgPT0gc3RhdHVzKSB7Ci0JCWJ1ZltyZWFkXSA9ICdcMCc7 Ci0JCWlmIChzdHJzdHIoYnVmLCAiK0NPUFMiKSkgewotCQkJaWYgKCFzdHJyY2hyKGJ1ZiwgJywn KSkKLQkJCQlyZXN1bHQgPSAiMCI7Ci0JCQllbHNlIHsKLQkJCQlyZXN1bHQgPSBzdHJjaHIoYnVm LCAnXCInKSArIDE7Ci0JCQkJc2VwID0gc3RyY2hyKHJlc3VsdCwgJ1wiJyk7Ci0JCQkJc2VwWzBd ID0gJ1wwJzsKLQkJCX0KLQotCQkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1 cm4obXNnKTsKLQkJCWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhyZXBseSwgREJVU19UWVBFX1NU UklORywKLQkJCQkJCSZyZXN1bHQsIERCVVNfVFlQRV9JTlZBTElEKTsKLQkJfSBlbHNlIHsKLQkJ CWluZm8oImFnX2dldF9vcGVyYXRvcigpOiAnK0NPUFMnIGV4cGVjdGVkIGJ1dCIKLQkJCQkiICcl cycgcmVjZWl2ZWQiLCBidWYpOwotCQkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1z ZywgRVJST1JfSU5URVJGQUNFCi0JCQkJCQkiLkZhaWxlZCIsCi0JCQkJCQkiVW5leHBlY3RlZCBy ZXNwb25zZSBmcm9tIEFHIik7Ci0JCX0KLQl9IGVsc2UgewotCQllcnJvcigiYWdfZ2V0X29wZXJh dG9yKCk6ICVtIik7Ci0JCXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtc2csIEVSUk9S X0lOVEVSRkFDRQotCQkJCQkiLkNvbm5lY3Rpb25GYWlsZWQiLAotCQkJCQkiRmFpbGVkIHRvIHJl Y2VpdmUgcmVzcG9uc2UgZnJvbSBBRyIpOwotCX0KLQotCXJldHVybiByZXBseTsKLX0KLQotI2Rl ZmluZSBBR19TRU5EX0RUTUYgIkFUK1ZUUz0lY1xyIgotc3RhdGljIERCdXNNZXNzYWdlICphZ19z ZW5kX2R0bWYoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCi0JCQkJdm9p ZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UgPSBkYXRhOwotCXN0cnVj dCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKLQlnY2hhciBidWZbUkZDT01NX0JVRl9T SVpFXTsKLQlnY2hhciAqbnVtYmVyOwotCWdpbnQgY29tX2xlbjsKLQlnYm9vbGVhbiBnb3Rfb2sg PSBUUlVFOwotCWdpbnQgbnVtX2xlbjsKLQlnaW50IGkgPSAwOwotCi0JaWYgKCFndy0+cmZjb21t KQotCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRQotCQkJ CQkiLk5vdENvbm5lY3RlZCIsCi0JCQkJCSJOb3QgQ29ubmVjdGVkIik7Ci0KLQlkYnVzX21lc3Nh Z2VfZ2V0X2FyZ3MobXNnLCBOVUxMLCBEQlVTX1RZUEVfU1RSSU5HLCAmbnVtYmVyLAotCQkJCURC VVNfVFlQRV9JTlZBTElEKTsKLQlpZiAoc3RybGVuKG51bWJlcikgIT0gc3Ryc3BuKG51bWJlciwg QUxMT1dFRF9OVU1CRVJfU1lNQk9MUykpCi0JCXJldHVybiBkYnVzX21lc3NhZ2VfbmV3X2Vycm9y KG1zZywKLQkJCUVSUk9SX0lOVEVSRkFDRSAiLkJhZE51bWJlciIsCi0JCQkiTnVtYmVyIGNvbnRh aW5zIGNoYXJhY3RlcnMgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIik7Ci0KLQludW1fbGVuID0gc3Ry bGVuKG51bWJlcik7Ci0JcmZjb21tX3N0b3Bfd2F0Y2goZGV2aWNlKTsKLQl3aGlsZSAoaSA8IG51 bV9sZW4gJiYgZ290X29rKSB7Ci0JCWNvbV9sZW4gPSBzcHJpbnRmKGJ1ZiwgQUdfU0VORF9EVE1G LCBudW1iZXJbaV0pOwotCQlyZmNvbW1fc2VuZF9hbmRfcmVhZChndywgYnVmLCBidWYsIGNvbV9s ZW4pOwotCQlnb3Rfb2sgPSBOVUxMICE9IHN0cnN0cihidWYsIE9LX1JFU1BPTlNFKTsKLQkJaSAr PSAxOwotCX0KLQlyZmNvbW1fc3RhcnRfd2F0Y2goZGV2aWNlKTsKLQlyZXR1cm4gcHJvY2Vzc19h Z19yZXBvbnNlKG1zZywgYnVmKTsKLX0KLQotI2RlZmluZSBBR19HRVRfU1VCU0NSSUJFUl9OVU1T ICJBVCtDTlVNXHIiCi0jZGVmaW5lIENOVU1fTEVOIDUgICAgICAgICAgICAgLyogbGVuZ3RoIG9m ICIrQ05VTSIgc3RyaW5nICovCi0jZGVmaW5lIE1BWF9OVU1CRVJfQ05UIDE2Ci1zdGF0aWMgREJ1 c01lc3NhZ2UgKmFnX2dldF9zdWJzY3JpYmVyX251bShEQnVzQ29ubmVjdGlvbiAqY29ubiwKLQkJ CQkJREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYXVkaW9fZGV2aWNl ICpkZXZpY2UgPSBkYXRhOwotCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsK LQlnY2hhciBidWZbUkZDT01NX0JVRl9TSVpFXTsKLQlnY2hhciAqbnVtYmVyLCAqZW5kOwotCURC dXNNZXNzYWdlICpyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOwot Ci0JaWYgKCFndy0+cmZjb21tKQotCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVS Uk9SX0lOVEVSRkFDRQotCQkJCQkiLk5vdENvbm5lY3RlZCIsCi0JCQkJCSJOb3QgQ29ubmVjdGVk Iik7Ci0KLQlyZmNvbW1fc3RvcF93YXRjaChkZXZpY2UpOwotCXJmY29tbV9zZW5kX2FuZF9yZWFk KGd3LCBBR19HRVRfU1VCU0NSSUJFUl9OVU1TLCBidWYsCi0JCQlzdHJsZW4oQUdfR0VUX1NVQlND UklCRVJfTlVNUykpOwotCXJmY29tbV9zdGFydF93YXRjaChkZXZpY2UpOwotCi0JaWYgKHN0cmxl bihidWYpID4gQUdfQ0FMTEVSX05VTV9TSVpFICsgMjEpCi0JCWVycm9yKCJhZ19nZXRfc3Vic2Ny aWJlcl9udW0oKTogYnVmIGlzIHRvbyBsb25nICclcyciLCBidWYpOwotCWVsc2UgaWYgKHN0cnN0 cihidWYsICIrQ05VTSIpKSB7Ci0JCW51bWJlciA9IHN0cmNocihidWYsICcsJyk7Ci0JCW51bWJl cisrOwotCQllbmQgPSBzdHJjaHIobnVtYmVyLCAnLCcpOwotCQlpZiAoZW5kKSB7Ci0JCQkqZW5k ID0gJ1wwJzsKLQkJCWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhyZXBseSwgREJVU19UWVBFX1NU UklORywKLQkJCQkJCSZudW1iZXIsIERCVVNfVFlQRV9JTlZBTElEKTsKLQkJfQotCX0gZWxzZQot CQllcnJvcigiYWdfZ2V0X3N1YnNjcmliZXJfbnVtKCk6IHJlYWQgd3JvbmcgZGF0YSAnJXMnIiwg YnVmKTsKLQotCXJldHVybiByZXBseTsKLX0KLQogc3RhdGljIERCdXNNZXNzYWdlICphZ19nZXRf cHJvcGVydGllcyhEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywKIAkJCQkJ dm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UgPSBkYXRhOwotCXN0 cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKLQlEQnVzTWVzc2FnZSAqcmVwbHk7 Ci0JREJ1c01lc3NhZ2VJdGVyIGl0ZXI7Ci0JREJ1c01lc3NhZ2VJdGVyIGRpY3Q7Ci0JZ2Jvb2xl YW4gdmFsdWU7Ci0JZ3VpbnQgaW5kZXggPSAwOwotCXN0cnVjdCBpbmRpY2F0b3IgKmluZDsKLQot CXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7Ci0JaWYgKCFyZXBs eSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZChyZXBs eSwgJml0ZXIpOwotCi0JZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIoJml0ZXIsIERC VVNfVFlQRV9BUlJBWSwKLQkJCURCVVNfRElDVF9FTlRSWV9CRUdJTl9DSEFSX0FTX1NUUklORwot CQkJREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcgREJVU19UWVBFX1ZBUklBTlRfQVNfU1RSSU5H Ci0JCQlEQlVTX0RJQ1RfRU5UUllfRU5EX0NIQVJfQVNfU1RSSU5HLCAmZGljdCk7Ci0KLQkvKiBD b25uZWN0ZWQgKi8KLQl2YWx1ZSA9IGdhdGV3YXlfaXNfY29ubmVjdGVkKGRldmljZSk7Ci0JZGlj dF9hcHBlbmRfZW50cnkoJmRpY3QsICJDb25uZWN0ZWQiLCBEQlVTX1RZUEVfQk9PTEVBTiwgJnZh bHVlKTsKLQotCWlmICghdmFsdWUpCi0JCWdvdG8gZG9uZTsKLQotCXdoaWxlICgoaW5kID0gZ19z bGlzdF9udGhfZGF0YShndy0+aW5kaWVzLCBpbmRleCkpKSB7Ci0JCWlmKCFzdHJjbXAoaW5kLT5k ZXNjciwgIlwic2VydmljZVwiIikpCi0JCQlkaWN0X2FwcGVuZF9lbnRyeSgmZGljdCwgIlJlZ2lz dHJhdGlvblN0YXR1cyIsCi0JCQkJCURCVVNfVFlQRV9VSU5UMTYsICZpbmQtPnZhbHVlKTsKLQkJ ZWxzZSBpZiAoIXN0cmNtcChpbmQtPmRlc2NyLCAiXCJzaWduYWxcIiIpKQotCQkJZGljdF9hcHBl bmRfZW50cnkoJmRpY3QsICJTaWduYWxTdHJlbmd0aCIsCi0JCQkJCURCVVNfVFlQRV9VSU5UMTYs ICZpbmQtPnZhbHVlKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChpbmQtPmRlc2NyLCAiXCJyb2FtXCIi KSkKLQkJCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAiUm9hbWluZ1N0YXR1cyIsCi0JCQkJCURC VVNfVFlQRV9VSU5UMTYsICZpbmQtPnZhbHVlKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChpbmQtPmRl c2NyLCAiXCJiYXR0Y2hnXCIiKSkKLQkJCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAiQmF0dGVy eUNoYXJnZSIsCi0JCQkJCURCVVNfVFlQRV9VSU5UMTYsICZpbmQtPnZhbHVlKTsKLQkJaW5kZXgr KzsKLQl9Ci0KLQkvKiBTcGVha2VyR2FpbiAqLwotCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAi U3BlYWtlckdhaW4iLCBEQlVTX1RZUEVfVUlOVDE2LAotCQkJCSZkZXZpY2UtPmdhdGV3YXktPnNw X2dhaW4pOwotCi0JLyogTWljcm9waG9uZUdhaW4gKi8KLQlkaWN0X2FwcGVuZF9lbnRyeSgmZGlj dCwgIk1pY3JvcGhvbmVHYWluIiwgREJVU19UWVBFX1VJTlQxNiwKLQkJCQkmZGV2aWNlLT5nYXRl d2F5LT5taWNfZ2Fpbik7Ci1kb25lOgotCWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5l cigmaXRlciwgJmRpY3QpOwotCXJldHVybiByZXBseTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3Rh dGljIEdEQnVzTWV0aG9kVGFibGUgZ2F0ZXdheV9tZXRob2RzW10gPSB7CiAJeyAiQ29ubmVjdCIs ICIiLCAiIiwgYWdfY29ubmVjdCwgR19EQlVTX01FVEhPRF9GTEFHX0FTWU5DIH0sCiAJeyAiRGlz Y29ubmVjdCIsICIiLCAiIiwgYWdfZGlzY29ubmVjdCB9LAotCXsgIkFuc3dlckNhbGwiLCAiIiwg IiIsIGFnX2Fuc3dlciB9LAotCXsgIlRlcm1pbmF0ZUNhbGwiLCAiIiwgIiIsIGFnX3Rlcm1pbmF0 ZV9jYWxsIH0sCi0JeyAiQ2FsbCIsICJzIiwgIiIsIGFnX2NhbGwgfSwKLQl7ICJHZXRPcGVyYXRv ck5hbWUiLCAiIiwgInMiLCBhZ19nZXRfb3BlcmF0b3IgfSwKLQl7ICJTZW5kRFRNRiIsICJzIiwg IiIsIGFnX3NlbmRfZHRtZiB9LAotCXsgIkdldFN1YnNjcmliZXJOdW1iZXIiLCAiIiwgInMiLCBh Z19nZXRfc3Vic2NyaWJlcl9udW0gfSwKIAl7ICJHZXRQcm9wZXJ0aWVzIiwgIiIsICJhe3N2fSIs IGFnX2dldF9wcm9wZXJ0aWVzIH0sCiAJeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KIH07CiAK IHN0YXRpYyBHREJ1c1NpZ25hbFRhYmxlIGdhdGV3YXlfc2lnbmFsc1tdID0gewotCXsgIlJpbmci LCAicyIgfSwKLQl7ICJDYWxsVGVybWluYXRlZCIsICIiIH0sCi0JeyAiQ2FsbFN0YXJ0ZWQiLCAi IiB9LAotCXsgIkNhbGxFbmRlZCIsICIiIH0sCiAJeyAiUHJvcGVydHlDaGFuZ2VkIiwgInN2IiB9 LAogCXsgTlVMTCwgTlVMTCB9CiB9OwpAQCAtMTA2Myw5ICszMTUsNiBAQCBzdHJ1Y3QgZ2F0ZXdh eSAqZ2F0ZXdheV9pbml0KHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldikKIAogCWRlYnVnKCJpbiBn YXRld2F5X2luaXQsIGRldiBpcyAlcCIsIGRldik7CiAJZ3cgPSBnX25ldzAoc3RydWN0IGdhdGV3 YXksIDEpOwotCWd3LT5pbmRpZXMgPSBOVUxMOwotCWd3LT5pc19kaWFsaW5nID0gRkFMU0U7Ci0J Z3ctPmNhbGxfYWN0aXZlID0gRkFMU0U7CiAJZ3ctPnN0YXRlID0gR0FURVdBWV9TVEFURV9ESVND T05ORUNURUQ7CiAJcmV0dXJuIGd3OwogCkBAIC0xMTA3LDExICszNTYsNiBAQCB2b2lkIGdhdGV3 YXlfc3RhcnRfc2VydmljZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpCiAJcmZjb21tX2Nv bm5lY3RfY2IoZGV2aWNlLT5nYXRld2F5LT5yZmNvbW0sIE5VTEwsIGRldmljZSk7CiB9CiAKLXN0 YXRpYyB2b2lkIGluZGljYXRvcl9zbGljZV9mcmVlKGdwb2ludGVyIG1lbSkKLXsKLQlnX3NsaWNl X2ZyZWUoc3RydWN0IGluZGljYXRvciwgbWVtKTsKLX0KLQogaW50IGdhdGV3YXlfY2xvc2Uoc3Ry dWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmlj ZS0+Z2F0ZXdheTsKQEAgLTExMTksOCArMzYzLDYgQEAgaW50IGdhdGV3YXlfY2xvc2Uoc3RydWN0 IGF1ZGlvX2RldmljZSAqZGV2aWNlKQogCUdJT0NoYW5uZWwgKnNjbyA9IGd3LT5zY287CiAJZ2Jv b2xlYW4gdmFsdWUgPSBGQUxTRTsKIAotCWdfc2xpc3RfZm9yZWFjaChndy0+aW5kaWVzLCAoR0Z1 bmMpIGluZGljYXRvcl9zbGljZV9mcmVlLCBOVUxMKTsKLQlnX3NsaXN0X2ZyZWUoZ3ctPmluZGll cyk7CiAJaWYgKHJmY29tbSkgewogCQlnX2lvX2NoYW5uZWxfc2h1dGRvd24ocmZjb21tLCBUUlVF LCBOVUxMKTsKIAkJZ19pb19jaGFubmVsX3VucmVmKHJmY29tbSk7Ci0tIAoxLjYuNC40Cgo= --000e0cd6ad1401827a047ce837c9 Content-Type: application/octet-stream; name="0002-Implement-HandsfreeGateway-Interface.patch" Content-Disposition: attachment; filename="0002-Implement-HandsfreeGateway-Interface.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4bmhipp4 RnJvbSA1Njc1N2JiODM2ZDU4Y2FlY2Q5ZmQ2MzY2ZTNiYjFiNzBlNzc4ODQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIEYuIFBhZG92YW4gPHBhZG92YW5AcHJvZnVzaW9u Lm1vYmk+CkRhdGU6IEZyaSwgOCBKYW4gMjAxMCAxNzozODoyMSAtMDIwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBJbXBsZW1lbnQgSGFuZHNmcmVlR2F0ZXdheSBJbnRlcmZhY2UKCkNyZWF0ZSBhIGlu dGVyZmFjZSB3aGVyZSBhIEhhbmRzZnJlZSBhZ2VudCBjYW4gcmVnaXN0ZXIgYW5kIHVzZSBCbHVl WiB0bwpoYW5kbGUgdGhlIHJmY29tbSBhbmQgc2NvIGxpbmtzLgoKTWFueSB0aGFua3MgdG8gWmhl bmh1YSBaaGFuZyA8emhlbmh1YS56aGFuZ0BpbnRlbC5jb20+IGZvciBoaXMKcHJvdG90eXBlIG9u IHRoaXMgY29kZS4KLS0tCiBhdWRpby9nYXRld2F5LmMgfCAgNDQ3ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIGF1ZGlvL2dhdGV3YXkuaCB8 ICAgMTIgKy0KIGF1ZGlvL21hbmFnZXIuYyB8ICAgMjAgKy0tCiBhdWRpby91bml4LmMgICAgfCAg ICA4ICsKIDQgZmlsZXMgY2hhbmdlZCwgMzc3IGluc2VydGlvbnMoKyksIDExMCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9hdWRpby9nYXRld2F5LmMgYi9hdWRpby9nYXRld2F5LmMKaW5kZXgg M2RjMDlmZi4uN2U1MTdiNSAxMDA2NDQKLS0tIGEvYXVkaW8vZ2F0ZXdheS5jCisrKyBiL2F1ZGlv L2dhdGV3YXkuYwpAQCAtNSw2ICs1LDggQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCAg Tm9raWEgQ29ycG9yYXRpb24KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCAgTWFyY2VsIEhv bHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5 ICBMZW9uaWQgTW92c2hvdmljaCA8ZXZlbnQucmlnYUBnbWFpbC5vcmc+CisgKiAgQ29weXJpZ2h0 IChDKSAyMDA5LTIwMDkgIFpoZW5odWEgWmhhbmcgPHpoZW5odWEuemhhbmdAaW50ZWwuY29tPgor ICogIENvcHlyaWdodCAoQykgMjAxMCAgR3VzdGF2byBGLiBQYWRvdmFuIDxwYWRvdmFuQHByb2Z1 c2lvbi5tb2JpPgogICoKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMyLDEyICszNCwxNSBAQAog I2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8ZXJybm8u aD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2luY2x1 ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxkYnVzL2RidXMuaD4KICNpbmNsdWRlIDxnZGJ1cy5oPgog CiAjaW5jbHVkZSA8Ymx1ZXRvb3RoL2JsdWV0b290aC5oPgorI2luY2x1ZGUgPGJsdWV0b290aC9y ZmNvbW0uaD4KICNpbmNsdWRlIDxibHVldG9vdGgvaGNpLmg+CiAjaW5jbHVkZSA8Ymx1ZXRvb3Ro L2hjaV9saWIuaD4KICNpbmNsdWRlIDxibHVldG9vdGgvc2NvLmg+CkBAIC01MiwxOSArNTcsMTAx IEBACiAjaW5jbHVkZSAiYnRpby5oIgogI2luY2x1ZGUgImRidXMtY29tbW9uLmgiCiAKLSNkZWZp bmUgUkZDT01NX0JVRl9TSVpFIDI1NgorI2RlZmluZSBNQVhfT1BFTl9UUklFUyA1CisjZGVmaW5l IE9QRU5fV0FJVCAzMDAKKworc3RydWN0IGFnZW50IHsKKwljaGFyICpuYW1lOwkvKiBCdXMgaWQg Ki8KKwljaGFyICpwYXRoOwkvKiBELUJ1cyBwYXRoICovCisJZ3VpbnQgd2F0Y2g7CS8qIERpc2Nv bm5lY3Qgd2F0Y2ggKi8KK307CiAKIHN0cnVjdCBnYXRld2F5IHsKIAlnYXRld2F5X3N0YXRlX3Qg c3RhdGU7Ci0JR0lPQ2hhbm5lbCAqcmZjb21tOwotCWd1aW50IHJmY29tbV93YXRjaF9pZDsKKwlp bnQgY2hhbm5lbDsKKwlHSU9DaGFubmVsICpyZmNvbW07CS8qIHJlbW90ZSBBRyByZXF1ZXN0ZWQg cmZjb21tIGNvbm5lY3Rpb24gKi8KIAlHSU9DaGFubmVsICpzY287CiAJZ2F0ZXdheV9zdHJlYW1f Y2JfdCBzY29fc3RhcnRfY2I7CiAJdm9pZCAqc2NvX3N0YXJ0X2NiX2RhdGE7Ci0JREJ1c01lc3Nh Z2UgKmNvbm5lY3RfbWVzc2FnZTsKKwlzdHJ1Y3QgYWdlbnQgKmFnZW50OworCURCdXNNZXNzYWdl ICptc2c7CiB9OwogCi1pbnQgZ2F0ZXdheV9jbG9zZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZp Y2UpOworc3RhdGljIERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uOworCitzdGF0aWMgZ2Jvb2xl YW4gZ2F0ZXdheV9jbG9zZShncG9pbnRlciBkYXRhKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNv bm5lY3RlZDJzdHIoaW50IGkpCit7CisJc3dpdGNoIChpKSB7CisJCWNhc2UgR0FURVdBWV9TVEFU RV9ESVNDT05ORUNURUQ6CisJCQlyZXR1cm4gImRpc2Nvbm5lY3RlZCI7CisJCWNhc2UgR0FURVdB WV9TVEFURV9DT05ORUNUSU5HOgorCQkJcmV0dXJuICJjb25uZWN0aW5nIjsKKwkJY2FzZSBHQVRF V0FZX1NUQVRFX0NPTk5FQ1RFRDoKKwkJCXJldHVybiAiY29ubmVjdGVkIjsKKwkJY2FzZSBHQVRF V0FZX1NUQVRFX1BMQVlJTkc6CisJCQlyZXR1cm4gInBsYXlpbmciOworCQlkZWZhdWx0OgorCQkJ cmV0dXJuICIiOworCX0KK30KKworc3RhdGljIHZvaWQgYWdlbnRfZnJlZShzdHJ1Y3QgYWdlbnQg KmFnZW50KQoreworCWlmICghYWdlbnQpCisJCXJldHVybjsKKworCWdfZnJlZShhZ2VudC0+bmFt ZSk7CisJZ19mcmVlKGFnZW50LT5wYXRoKTsKKwlnX2ZyZWUoYWdlbnQpOworfQorCitzdGF0aWMg dm9pZCBhZ2VudF9kaXNjb25uZWN0KHN0cnVjdCBhZ2VudCAqYWdlbnQpCit7CisJREJ1c01lc3Nh Z2UgKm1zZzsKKworCW1zZyA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwoYWdlbnQtPm5h bWUsIGFnZW50LT5wYXRoLAorCQkJIm9yZy5ibHVlei5IYW5kc2ZyZWVBZ2VudCIsICJSZWxlYXNl Iik7CisKKwlkYnVzX21lc3NhZ2Vfc2V0X25vX3JlcGx5KG1zZywgVFJVRSk7CisJZ19kYnVzX3Nl bmRfbWVzc2FnZShjb25uZWN0aW9uLCBtc2cpOworCisJZ19kYnVzX3JlbW92ZV93YXRjaChjb25u ZWN0aW9uLCBhZ2VudC0+d2F0Y2gpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYWdlbnRfc2VuZGZk KHN0cnVjdCBhZ2VudCAqYWdlbnQsIGludCBmZCwKKwkJREJ1c1BlbmRpbmdDYWxsTm90aWZ5RnVu Y3Rpb24gbm90aWZ5LCB2b2lkICpkYXRhKQoreworCURCdXNNZXNzYWdlICptc2c7CisJREJ1c1Bl bmRpbmdDYWxsICpjYWxsOworCisJbXNnID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbChh Z2VudC0+bmFtZSwgYWdlbnQtPnBhdGgsCisJCQkib3JnLmJsdWV6LkhhbmRzZnJlZUFnZW50Iiwg Ik5ld0Nvbm5lY3Rpb24iKTsKKworCWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhtc2csIERCVVNf VFlQRV9VTklYX0ZELCAmZmQsCisJCQkJCURCVVNfVFlQRV9JTlZBTElEKTsKKworCWlmIChkYnVz X2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5KGNvbm5lY3Rpb24sIG1zZywgJmNhbGwsIC0xKSA9 PSBGQUxTRSkKKwkJcmV0dXJuIEZBTFNFOworCisJZGJ1c19wZW5kaW5nX2NhbGxfc2V0X25vdGlm eShjYWxsLCBub3RpZnksIGRhdGEsIE5VTEwpOworCWRidXNfcGVuZGluZ19jYWxsX3VucmVmKGNh bGwpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIGNoYW5nZV9zdGF0ZShzdHJ1 Y3QgYXVkaW9fZGV2aWNlICpkZXYsIGludCBuZXdfc3RhdGUpCit7CisJc3RydWN0IGdhdGV3YXkg Kmd3ID0gZGV2LT5nYXRld2F5OworCWNvbnN0IGNoYXIgKnZhbCA9IGNvbm5lY3RlZDJzdHIobmV3 X3N0YXRlKTsKKworCWd3LT5zdGF0ZSA9IG5ld19zdGF0ZTsKKworCWVtaXRfcHJvcGVydHlfY2hh bmdlZChjb25uZWN0aW9uLGRldi0+cGF0aCwKKwkJCUFVRElPX0dBVEVXQVlfSU5URVJGQUNFLCAi Q29ubmVjdGVkIiwKKwkJCURCVVNfVFlQRV9TVFJJTkcsICZ2YWwpOworfQogCiBzdGF0aWMgZ2Jv b2xlYW4gc2NvX2lvX2NiKEdJT0NoYW5uZWwgKmNoYW4sIEdJT0NvbmRpdGlvbiBjb25kLAogCQkJ c3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KQpAQCAtNzksNiArMTY2LDcgQEAgc3RhdGljIGdib29s ZWFuIHNjb19pb19jYihHSU9DaGFubmVsICpjaGFuLCBHSU9Db25kaXRpb24gY29uZCwKIAkJZ19p b19jaGFubmVsX3NodXRkb3duKGd3LT5zY28sIFRSVUUsIE5VTEwpOwogCQlnX2lvX2NoYW5uZWxf dW5yZWYoZ3ctPnNjbyk7CiAJCWd3LT5zY28gPSBOVUxMOworCQljaGFuZ2Vfc3RhdGUoZGV2LCBH QVRFV0FZX1NUQVRFX0NPTk5FQ1RFRCk7CiAJCXJldHVybiBGQUxTRTsKIAl9CiAKQEAgLTkyLDYz ICsxODAsMTAxIEBAIHN0YXRpYyB2b2lkIHNjb19jb25uZWN0X2NiKEdJT0NoYW5uZWwgKmNoYW4s IEdFcnJvciAqZXJyLCBncG9pbnRlciB1c2VyX2RhdGEpCiAKIAlkZWJ1ZygiYXQgdGhlIGJlZ2lu IG9mIHNjb19jb25uZWN0X2NiKCkgaW4gZ2F0ZXdheS5jIik7CiAKKwlndy0+c2NvID0gY2hhbjsK KwlnX2lvX2NoYW5uZWxfcmVmKGNoYW4pOworCiAJaWYgKGVycikgewogCQllcnJvcigic2NvX2Nv bm5lY3RfY2IoKTogJXMiLCBlcnItPm1lc3NhZ2UpOwotCQkvKiBub3Qgc3VyZSwgYnV0IGZyb20g b3RoZXIgcG9pbnQgb2YgdmlldywKLQkJICogd2hhdCBpcyB0aGUgcmVhc29uIHRvIGhhdmUgaGVh ZHNldCB3aGljaAotCQkgKiBjYW5ub3QgcGxheSBhdWRpbz8gKi8KLQkJaWYgKGd3LT5zY29fc3Rh cnRfY2IpCi0JCQlndy0+c2NvX3N0YXJ0X2NiKE5VTEwsIGd3LT5zY29fc3RhcnRfY2JfZGF0YSk7 CiAJCWdhdGV3YXlfY2xvc2UoZGV2KTsKIAkJcmV0dXJuOwogCX0KIAotCWd3LT5zY28gPSBnX2lv X2NoYW5uZWxfcmVmKGNoYW4pOwogCWlmIChndy0+c2NvX3N0YXJ0X2NiKQogCQlndy0+c2NvX3N0 YXJ0X2NiKGRldiwgZ3ctPnNjb19zdGFydF9jYl9kYXRhKTsKIAotCS8qIHdoeSBpcyB0aGlzIGhl cmU/ICovCiAJZmNudGwoZ19pb19jaGFubmVsX3VuaXhfZ2V0X2ZkKGNoYW4pLCBGX1NFVEZMLCAw KTsKIAlnX2lvX2FkZF93YXRjaChndy0+c2NvLCBHX0lPX0VSUiB8IEdfSU9fSFVQIHwgR19JT19O VkFMLAogCQkJCShHSU9GdW5jKSBzY29faW9fY2IsIGRldik7CiB9CiAKK3N0YXRpYyB2b2lkIG5l d2Nvbm5lY3Rpb25fcmVwbHkoREJ1c1BlbmRpbmdDYWxsICpjYWxsLCB2b2lkICpkYXRhKQorewor CXN0cnVjdCBnYXRld2F5ICpndyA9IGRhdGE7CisJREJ1c01lc3NhZ2UgKnJlcGx5ID0gZGJ1c19w ZW5kaW5nX2NhbGxfc3RlYWxfcmVwbHkoY2FsbCk7CisJREJ1c0Vycm9yIGRlcnI7CisKKwlpZiAo IWd3LT5yZmNvbW0pIHsKKwkJZGVidWcoIlJGQ09NTSBkaXNjb25uZWN0ZWQgZnJvbSBzZXJ2ZXIg YmVmb3JlIGFnZW50IHJlcGx5Iik7CisJCXJldHVybjsKKwl9CisKKwlkYnVzX2Vycm9yX2luaXQo JmRlcnIpOworCWlmICghZGJ1c19zZXRfZXJyb3JfZnJvbV9tZXNzYWdlKCZkZXJyLCByZXBseSkp IHsKKwkJaW5mbygiQWdlbnQgcmVwbHk6IGZpbGUgZGVzY3JpcHRvciBwYXNzZWQgc3VjY2Vzc2Z1 bHkiKTsKKwkJcmV0dXJuOworCX0KKworCWRlYnVnKCJBZ2VudCByZXBseTogJXMiLCBkZXJyLm1l c3NhZ2UpOworCisJZGJ1c19lcnJvcl9mcmVlKCZkZXJyKTsKKwlnX2lkbGVfYWRkKGdhdGV3YXlf Y2xvc2UsIGd3KTsKK30KKwogc3RhdGljIHZvaWQgcmZjb21tX2Nvbm5lY3RfY2IoR0lPQ2hhbm5l bCAqY2hhbiwgR0Vycm9yICplcnIsCiAJCQkJZ3BvaW50ZXIgdXNlcl9kYXRhKQogewogCXN0cnVj dCBhdWRpb19kZXZpY2UgKmRldiA9IHVzZXJfZGF0YTsKIAlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBk ZXYtPmdhdGV3YXk7Ci0JZ2NoYXIgZ3dfYWRkclsxOF07Ci0JR0lPRmxhZ3MgZmxhZ3M7CisJc3Ry dWN0IHJmY29tbV9kZXZfcmVxIHJlcTsKKwlEQnVzTWVzc2FnZSAqcmVwbHk7CisJaW50IHNrOwor CWNoYXIgc3JjWzE4XSwgZHN0WzE4XTsKIAogCWlmIChlcnIpIHsKIAkJZXJyb3IoImNvbm5lY3Qo KTogJXMiLCBlcnItPm1lc3NhZ2UpOwogCQlpZiAoZ3ctPnNjb19zdGFydF9jYikKIAkJCWd3LT5z Y29fc3RhcnRfY2IoTlVMTCwgZ3ctPnNjb19zdGFydF9jYl9kYXRhKTsKLQkJcmV0dXJuOworCQln b3RvIGZhaWw7CiAJfQogCi0JYmEyc3RyKCZkZXYtPmRzdCwgZ3dfYWRkcik7Ci0JLyogQmxvY2tp bmcgbW9kZSBzaG91bGQgYmUgZGVmYXVsdCwgYnV0IGp1c3QgaW4gY2FzZTogKi8KLQlmbGFncyA9 IGdfaW9fY2hhbm5lbF9nZXRfZmxhZ3MoY2hhbik7Ci0JZmxhZ3MgJj0gfkdfSU9fRkxBR19OT05C TE9DSzsKLQlmbGFncyAmPSBHX0lPX0ZMQUdfTUFTSzsKLQlnX2lvX2NoYW5uZWxfc2V0X2ZsYWdz KGNoYW4sIGZsYWdzLCBOVUxMKTsKLQlnX2lvX2NoYW5uZWxfc2V0X2VuY29kaW5nKGNoYW4sIE5V TEwsIE5VTEwpOwotCWdfaW9fY2hhbm5lbF9zZXRfYnVmZmVyZWQoY2hhbiwgRkFMU0UpOwotCWlm ICghZ3ctPnJmY29tbSkKLQkJZ3ctPnJmY29tbSA9IGdfaW9fY2hhbm5lbF9yZWYoY2hhbik7CisJ YmEyc3RyKCZkZXYtPnNyYywgc3JjKTsKKwliYTJzdHIoJmRldi0+ZHN0LCBkc3QpOwogCi0JaWYg KE5VTEwgIT0gZ3ctPnNjb19zdGFydF9jYikKLQkJZ3ctPnNjb19zdGFydF9jYihOVUxMLCBndy0+ c2NvX3N0YXJ0X2NiX2RhdGEpOworCS8qIG1ha2UgL2Rldi9yZmNvbW0gc2VyaWFsIHBvcnQgZnJv bSBjaGFuICovCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwlyZXEuZGV2X2lkID0g LTE7CisJcmVxLmZsYWdzID0gKDEgPDwgUkZDT01NX1JFVVNFX0RMQyk7CisJYmFjcHkoJnJlcS5z cmMsICZkZXYtPnNyYyk7CisJYmFjcHkoJnJlcS5kc3QsICZkZXYtPmRzdCk7CisJcmVxLmNoYW5u ZWwgPSBndy0+Y2hhbm5lbDsKIAotCWdhdGV3YXlfY2xvc2UoZGV2KTsKKwlzayA9IGdfaW9fY2hh bm5lbF91bml4X2dldF9mZChjaGFuKTsKKworCWNoYW5nZV9zdGF0ZShkZXYsIEdBVEVXQVlfU1RB VEVfQ09OTkVDVEVEKTsKKworCWlmICghYWdlbnRfc2VuZGZkKGd3LT5hZ2VudCwgc2ssIG5ld2Nv bm5lY3Rpb25fcmVwbHksIGd3KSkgeworCQlyZXBseSA9IGdfZGJ1c19jcmVhdGVfZXJyb3IoZ3ct Pm1zZywgRVJST1JfSU5URVJGQUNFICIuRmFpbGVkIiwKKwkJCQkiQ2FuIG5vdCBwYXNzIGZpbGUg ZGVzY3JpcHRvciIpOworCX0gZWxzZQorCQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9k X3JldHVybihndy0+bXNnKTsKKworCXJldHVybjsKKworZmFpbDoKKwlpZiAoZ3ctPm1zZykgewor CQllcnJvcl9jb21tb25fcmVwbHkoZGV2LT5jb25uLCBndy0+bXNnLCBFUlJPUl9JTlRFUkZBQ0UK KwkJCQkiLkZhaWxlZCIsICIuQ29ubmVjdGlvbiBhdHRlbXB0IGZhaWxlZCIpOworCQlkYnVzX21l c3NhZ2VfdW5yZWYoZ3ctPm1zZyk7CisJCWd3LT5tc2cgPSBOVUxMOworCX0KKwljaGFuZ2Vfc3Rh dGUoZGV2LCBHQVRFV0FZX1NUQVRFX0RJU0NPTk5FQ1RFRCk7CisJcmV0dXJuOwogfQogCiBzdGF0 aWMgdm9pZCBnZXRfcmVjb3JkX2NiKHNkcF9saXN0X3QgKnJlY3MsIGludCBwZXJyLCBncG9pbnRl ciB1c2VyX2RhdGEpCiB7CiAJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2ID0gdXNlcl9kYXRhOwot CURCdXNNZXNzYWdlICptc2cgPSBkZXYtPmdhdGV3YXktPmNvbm5lY3RfbWVzc2FnZTsKKwlzdHJ1 Y3QgZ2F0ZXdheSAqZ3cgPSBkZXYtPmdhdGV3YXk7CiAJaW50IGNoID0gLTE7CiAJc2RwX2xpc3Rf dCAqcHJvdG9zLCAqY2xhc3NlczsKIAl1dWlkX3QgdXVpZDsKQEAgLTE4Miw4ICszMDgsNiBAQCBz dGF0aWMgdm9pZCBnZXRfcmVjb3JkX2NiKHNkcF9saXN0X3QgKnJlY3MsIGludCBwZXJyLCBncG9p bnRlciB1c2VyX2RhdGEpCiAKIAlpZiAoIXNkcF91dWlkMTI4X3RvX3V1aWQoJnV1aWQpIHx8IHV1 aWQudHlwZSAhPSBTRFBfVVVJRDE2IHx8CiAJCQl1dWlkLnZhbHVlLnV1aWQxNiAhPSBIQU5EU0ZS RUVfQUdXX1NWQ0xBU1NfSUQpIHsKLQkJc2RwX2xpc3RfZm9yZWFjaChwcm90b3MsIChzZHBfbGlz dF9mdW5jX3QpIHNkcF9saXN0X2ZyZWUsCi0JCQkJCQkJCQlOVUxMKTsKIAkJc2RwX2xpc3RfZnJl ZShwcm90b3MsIE5VTEwpOwogCQllcnJvcigiSW52YWxpZCBzZXJ2aWNlIHJlY29yZCBvciBub3Qg SEZQIik7CiAJCWdvdG8gZmFpbDsKQEAgLTE5Nyw2ICszMjEsOCBAQCBzdGF0aWMgdm9pZCBnZXRf cmVjb3JkX2NiKHNkcF9saXN0X3QgKnJlY3MsIGludCBwZXJyLCBncG9pbnRlciB1c2VyX2RhdGEp CiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlndy0+Y2hhbm5lbCA9IGNoOworCiAJaW8gPSBidF9pb19j b25uZWN0KEJUX0lPX1JGQ09NTSwgcmZjb21tX2Nvbm5lY3RfY2IsIGRldiwgTlVMTCwgJmVyciwK IAkJCQlCVF9JT19PUFRfU09VUkNFX0JEQUREUiwgJmRldi0+c3JjLAogCQkJCUJUX0lPX09QVF9E RVNUX0JEQUREUiwgJmRldi0+ZHN0LApAQCAtMjA0LDI1ICszMzAsMjYgQEAgc3RhdGljIHZvaWQg Z2V0X3JlY29yZF9jYihzZHBfbGlzdF90ICpyZWNzLCBpbnQgcGVyciwgZ3BvaW50ZXIgdXNlcl9k YXRhKQogCQkJCUJUX0lPX09QVF9JTlZBTElEKTsKIAlpZiAoIWlvKSB7CiAJCWVycm9yKCJVbmFi bGUgdG8gY29ubmVjdDogJXMiLCBlcnItPm1lc3NhZ2UpOwotCQlpZiAobXNnKSB7Ci0JCQllcnJv cl9jb21tb25fcmVwbHkoZGV2LT5jb25uLCBtc2csIEVSUk9SX0lOVEVSRkFDRQotCQkJCQkJIi5D b25uZWN0aW9uQXR0ZW1wdEZhaWxlZCIsCi0JCQkJCQllcnItPm1lc3NhZ2UpOwotCQkJbXNnID0g TlVMTDsKLQkJfQotCQlnX2Vycm9yX2ZyZWUoZXJyKTsKKwkJaWYgKGVycikKKwkJCWdfZXJyb3Jf ZnJlZShlcnIpOwogCQlnYXRld2F5X2Nsb3NlKGRldik7CisJCWdvdG8gZmFpbDsKIAl9CiAKIAln X2lvX2NoYW5uZWxfdW5yZWYoaW8pOworCisJY2hhbmdlX3N0YXRlKGRldiwgR0FURVdBWV9TVEFU RV9DT05ORUNUSU5HKTsKIAlyZXR1cm47CiAKIGZhaWw6Ci0JaWYgKG1zZykKLQkJZXJyb3JfY29t bW9uX3JlcGx5KGRldi0+Y29ubiwgbXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5Ob3RTdXBw b3J0ZWQiLCAiTm90IHN1cHBvcnRlZCIpOworCWlmIChndy0+bXNnKSB7CisJCWVycm9yX2NvbW1v bl9yZXBseShkZXYtPmNvbm4sIGd3LT5tc2csIEVSUk9SX0lOVEVSRkFDRQorCQkJCSIuTm90U3Vw cG9ydGVkIiwgIk5vdCBzdXBwb3J0ZWQiKTsKKwkJZGJ1c19tZXNzYWdlX3VucmVmKGd3LT5tc2cp OworCQlndy0+bXNnID0gTlVMTDsKKwl9CiAKLQlkZXYtPmdhdGV3YXktPmNvbm5lY3RfbWVzc2Fn ZSA9IE5VTEw7CisJY2hhbmdlX3N0YXRlKGRldiwgR0FURVdBWV9TVEFURV9ESVNDT05ORUNURUQp OwogCiAJc2NvX2NiID0gZGV2LT5nYXRld2F5LT5zY29fc3RhcnRfY2I7CiAJaWYgKHNjb19jYikK QEAgLTI0MywyMiArMzcwLDU3IEBAIHN0YXRpYyBEQnVzTWVzc2FnZSAqYWdfY29ubmVjdChEQnVz Q29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywKIHsKIAlzdHJ1Y3QgYXVkaW9fZGV2 aWNlICphdV9kZXYgPSAoc3RydWN0IGF1ZGlvX2RldmljZSAqKSBkYXRhOwogCXN0cnVjdCBnYXRl d2F5ICpndyA9IGF1X2Rldi0+Z2F0ZXdheTsKKwlEQnVzTWVzc2FnZSAqcmVwbHk7CiAKIAlkZWJ1 ZygiYXQgdGhlIGJlZ2luIG9mIGFnX2Nvbm5lY3QoKSIpOwotCWlmIChndy0+cmZjb21tKQorCisJ aWYgKCFndy0+YWdlbnQpCiAJCXJldHVybiBnX2RidXNfY3JlYXRlX2Vycm9yKG1zZywgRVJST1Jf SU5URVJGQUNFCi0JCQkJCSIuQWxyZWFkeUNvbm5lY3RlZCIsCi0JCQkJCSJBbHJlYWR5IENvbm5l Y3RlZCIpOworCQkJCSIuRmFpbGVkIiwgIkFnZW50IG5vdCBhc3NpbmVkIik7CiAKLQlndy0+Y29u bmVjdF9tZXNzYWdlID0gZGJ1c19tZXNzYWdlX3JlZihtc2cpOworCWd3LT5tc2cgPSBkYnVzX21l c3NhZ2VfcmVmKG1zZyk7CiAJaWYgKGdldF9yZWNvcmRzKGF1X2RldikgPCAwKSB7Ci0JCWRidXNf bWVzc2FnZV91bnJlZihndy0+Y29ubmVjdF9tZXNzYWdlKTsKKwkJZGJ1c19tZXNzYWdlX3VucmVm KGd3LT5tc2cpOwogCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVS RkFDRQogCQkJCQkiLkNvbm5lY3RBdHRlbXB0RmFpbGVkIiwKIAkJCQkJIkNvbm5lY3QgQXR0ZW1w dCBGYWlsZWQiKTsKIAl9CisKKwlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVy bihtc2cpOworCWlmICghcmVwbHkpCisJCXJldHVybiBOVUxMOworCiAJZGVidWcoImF0IHRoZSBl bmQgb2YgYWdfY29ubmVjdCgpIik7Ci0JcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcmVwbHk7Cit9 CisKK3N0YXRpYyBnYm9vbGVhbiBnYXRld2F5X2Nsb3NlKGdwb2ludGVyIGRhdGEpCit7CisJc3Ry dWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlID0gZGF0YTsKKwlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBk ZXZpY2UtPmdhdGV3YXk7CisJZ2Jvb2xlYW4gdmFsdWUgPSBGQUxTRTsKKworCWlmIChndy0+cmZj b21tKSB7CisJCWdfaW9fY2hhbm5lbF9zaHV0ZG93bihndy0+cmZjb21tLCBUUlVFLCBOVUxMKTsK KwkJZ19pb19jaGFubmVsX3VucmVmKGd3LT5yZmNvbW0pOworCQlndy0+cmZjb21tID0gTlVMTDsK Kwl9CisKKwlpZiAoZ3ctPnNjbykgeworCQlnX2lvX2NoYW5uZWxfc2h1dGRvd24oZ3ctPnNjbywg VFJVRSwgTlVMTCk7CisJCWdfaW9fY2hhbm5lbF91bnJlZihndy0+c2NvKTsKKwkJZ3ctPnNjbyA9 IE5VTEw7CisJCWd3LT5zY29fc3RhcnRfY2IgPSBOVUxMOworCQlndy0+c2NvX3N0YXJ0X2NiX2Rh dGEgPSBOVUxMOworCX0KKworCWd3LT5zdGF0ZSA9IEdBVEVXQVlfU1RBVEVfRElTQ09OTkVDVEVE OworCisJZW1pdF9wcm9wZXJ0eV9jaGFuZ2VkKGRldmljZS0+Y29ubiwgZGV2aWNlLT5wYXRoLAor CQkJCUFVRElPX0dBVEVXQVlfSU5URVJGQUNFLAorCQkJCSJDb25uZWN0ZWQiLCBEQlVTX1RZUEVf Qk9PTEVBTiwgJnZhbHVlKTsKKwlyZXR1cm4gRkFMU0U7CiB9CiAKIHN0YXRpYyBEQnVzTWVzc2Fn ZSAqYWdfZGlzY29ubmVjdChEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywK QEAgLTI2OSw2ICs0MzEsOSBAQCBzdGF0aWMgREJ1c01lc3NhZ2UgKmFnX2Rpc2Nvbm5lY3QoREJ1 c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCiAJREJ1c01lc3NhZ2UgKnJlcGx5 ID0gTlVMTDsKIAljaGFyIGd3X2FkZHJbMThdOwogCisJaWYgKCFjb25uZWN0aW9uKQorCQlyZXR1 cm4gTlVMTDsKKwogCXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7 CiAJaWYgKCFyZXBseSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yODUsMTYgKzQ1MCwxMTcgQEAgc3Rh dGljIERCdXNNZXNzYWdlICphZ19kaXNjb25uZWN0KERCdXNDb25uZWN0aW9uICpjb25uLCBEQnVz TWVzc2FnZSAqbXNnLAogCXJldHVybiByZXBseTsKIH0KIAorc3RhdGljIHZvaWQgYWdlbnRfZXhp dGVkKERCdXNDb25uZWN0aW9uICpjb25uLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBnYXRld2F5 ICpnYXRld2F5ID0gZGF0YTsKKwlzdHJ1Y3QgYWdlbnQgKmFnZW50ID0gZ2F0ZXdheS0+YWdlbnQ7 CisKKwlkZWJ1ZygiQWdlbnQgJXMgZXhpdGVkIiwgYWdlbnQtPm5hbWUpOworCisJYWdlbnRfZnJl ZShhZ2VudCk7CisJZ2F0ZXdheS0+YWdlbnQgPSBOVUxMOworfQorCiBzdGF0aWMgREJ1c01lc3Nh Z2UgKmFnX2dldF9wcm9wZXJ0aWVzKERCdXNDb25uZWN0aW9uICpjb25uLCBEQnVzTWVzc2FnZSAq bXNnLAogCQkJCQl2b2lkICpkYXRhKQogewotCXJldHVybiBOVUxMOworCXN0cnVjdCBhdWRpb19k ZXZpY2UgKmRldmljZSA9IGRhdGE7CisJc3RydWN0IGdhdGV3YXkgKmd3ID0gZGV2aWNlLT5nYXRl d2F5OworCURCdXNNZXNzYWdlICpyZXBseTsKKwlEQnVzTWVzc2FnZUl0ZXIgaXRlcjsKKwlEQnVz TWVzc2FnZUl0ZXIgZGljdDsKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCisJcmVwbHkgPSBkYnVz X21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKKwlpZiAoIXJlcGx5KQorCQlyZXR1cm4g TlVMTDsKKworCWRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKHJlcGx5LCAmaXRlcik7CisK KwlkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigmaXRlciwgREJVU19UWVBFX0FSUkFZ LAorCQkJREJVU19ESUNUX0VOVFJZX0JFR0lOX0NIQVJfQVNfU1RSSU5HCisJCQlEQlVTX1RZUEVf U1RSSU5HX0FTX1NUUklORyBEQlVTX1RZUEVfVkFSSUFOVF9BU19TVFJJTkcKKwkJCURCVVNfRElD VF9FTlRSWV9FTkRfQ0hBUl9BU19TVFJJTkcsICZkaWN0KTsKKworCXZhbHVlID0gY29ubmVjdGVk MnN0cihndy0+c3RhdGUpOworCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAiQ29ubmVjdGVkIiwK KwkJCURCVVNfVFlQRV9TVFJJTkcsICZ2YWx1ZSk7CisKKwlkYnVzX21lc3NhZ2VfaXRlcl9jbG9z ZV9jb250YWluZXIoJml0ZXIsICZkaWN0KTsKKworCXJldHVybiByZXBseTsKK30KKworc3RhdGlj IERCdXNNZXNzYWdlICpyZWdpc3Rlcl9hZ2VudChEQnVzQ29ubmVjdGlvbiAqY29ubiwKKwkJCQkJ REJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpk ZXZpY2UgPSBkYXRhOworCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKKwlz dHJ1Y3QgYWdlbnQgKmFnZW50OworCWNvbnN0IGNoYXIgKnBhdGgsICpuYW1lOworCisKKwlpZiAo Z3ctPmFnZW50KQorCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csCisJCQkJRVJST1Jf SU5URVJGQUNFICIuQWxyZWFkeUV4aXN0cyIsCisJCQkJIkFnZW50IGFscmVhZHkgZXhpc3RzIik7 CisKKwlpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhtc2csIE5VTEwsIERCVVNfVFlQRV9PQkpF Q1RfUEFUSCwgJnBhdGgsCisJCQlEQlVTX1RZUEVfSU5WQUxJRCkpCisJCXJldHVybiBnX2RidXNf Y3JlYXRlX2Vycm9yKG1zZywgRVJST1JfSU5URVJGQUNFCisJCQkJIi5JbnZhbGlkQXJndW1lbnRz IiwgIkludmFsaWQgYXJndW1lbnQiKTsKKworCW5hbWUgPSBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRl cihtc2cpOworCWFnZW50ID0gZ19uZXcwKHN0cnVjdCBhZ2VudCwgMSk7CisJaWYgKCFhZ2VudCkK KwkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNnLAorCQkJCUVSUk9SX0lOVEVSRkFDRSAi LkZhaWxlZCIsCisJCQkJIkZhaWxlZCB0byBjcmVhdGUgYSBuZXcgYWdlbnQiKTsKKworCWFnZW50 LT5uYW1lID0gc3RyZHVwKG5hbWUpOworCWFnZW50LT5wYXRoID0gc3RyZHVwKHBhdGgpOworCisJ YWdlbnQtPndhdGNoID0gZ19kYnVzX2FkZF9kaXNjb25uZWN0X3dhdGNoKGNvbm4sIG5hbWUsCisJ CQlhZ2VudF9leGl0ZWQsIGd3LCBOVUxMKTsKKworCWd3LT5hZ2VudCA9IGFnZW50OworCisJcmV0 dXJuIGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOworfQorCitzdGF0aWMgREJ1 c01lc3NhZ2UgKnVucmVnaXN0ZXJfYWdlbnQoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJREJ1 c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZp Y2UgPSBkYXRhOworCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKKwlzdHJ1 Y3QgYWdlbnQgKmFnZW50OworCisJaWYgKCFndy0+YWdlbnQpCisJCWdvdG8gZG9uZTsKKworCWFn ZW50ID0gZ3ctPmFnZW50OworCWlmIChzdHJjbXAoYWdlbnQtPm5hbWUsIGRidXNfbWVzc2FnZV9n ZXRfc2VuZGVyKG1zZykpICE9IDApCisJCXJldHVybiBnX2RidXNfY3JlYXRlX2Vycm9yKG1zZywK KwkJCQlFUlJPUl9JTlRFUkZBQ0UgIi5GYWlsZWQiLCAiUGVybWlzc2lvbiBkZW5pZWQiKTsKKwor CWFnZW50X2Rpc2Nvbm5lY3QoZ3ctPmFnZW50KTsKKworCWdfZGJ1c19yZW1vdmVfd2F0Y2goY29u biwgYWdlbnQtPndhdGNoKTsKKworCWFnZW50X2ZyZWUoYWdlbnQpOworCWd3LT5hZ2VudCA9IE5V TEw7CisKK2RvbmU6CisJcmV0dXJuIGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cp OwogfQogCiBzdGF0aWMgR0RCdXNNZXRob2RUYWJsZSBnYXRld2F5X21ldGhvZHNbXSA9IHsKIAl7 ICJDb25uZWN0IiwgIiIsICIiLCBhZ19jb25uZWN0LCBHX0RCVVNfTUVUSE9EX0ZMQUdfQVNZTkMg fSwKLQl7ICJEaXNjb25uZWN0IiwgIiIsICIiLCBhZ19kaXNjb25uZWN0IH0sCisJeyAiRGlzY29u bmVjdCIsICIiLCAiIiwgYWdfZGlzY29ubmVjdCwgR19EQlVTX01FVEhPRF9GTEFHX0FTWU5DIH0s CiAJeyAiR2V0UHJvcGVydGllcyIsICIiLCAiYXtzdn0iLCBhZ19nZXRfcHJvcGVydGllcyB9LAor CXsgIlJlZ2lzdGVyQWdlbnQiLCAibyIsICIiLCByZWdpc3Rlcl9hZ2VudCB9LAorCXsgIlVucmVn aXN0ZXJBZ2VudCIsICJvIiwgIiIsIHVucmVnaXN0ZXJfYWdlbnQgfSwKIAl7IE5VTEwsIE5VTEws IE5VTEwsIE5VTEwgfQogfTsKIApAQCAtMzA3LDE3ICs1NzMsMjMgQEAgc3RydWN0IGdhdGV3YXkg KmdhdGV3YXlfaW5pdChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGdhdGV3 YXkgKmd3OwogCisJZ3cgPSBnX25ldzAoc3RydWN0IGdhdGV3YXksIDEpOworCisJY29ubmVjdGlv biA9IGRidXNfY29ubmVjdGlvbl9yZWYoZGV2LT5jb25uKTsKKwogCWlmICghZ19kYnVzX3JlZ2lz dGVyX2ludGVyZmFjZShkZXYtPmNvbm4sIGRldi0+cGF0aCwKIAkJCQkJQVVESU9fR0FURVdBWV9J TlRFUkZBQ0UsCiAJCQkJCWdhdGV3YXlfbWV0aG9kcywgZ2F0ZXdheV9zaWduYWxzLAogCQkJCQlO VUxMLCBkZXYsIE5VTEwpKQogCQlyZXR1cm4gTlVMTDsKIAotCWRlYnVnKCJpbiBnYXRld2F5X2lu aXQsIGRldiBpcyAlcCIsIGRldik7Ci0JZ3cgPSBnX25ldzAoc3RydWN0IGdhdGV3YXksIDEpOwot CWd3LT5zdGF0ZSA9IEdBVEVXQVlfU1RBVEVfRElTQ09OTkVDVEVEOwogCXJldHVybiBndzsKK30K IAordm9pZCBnYXRld2F5X2V4aXQoKQoreworCWRidXNfY29ubmVjdGlvbl91bnJlZihjb25uZWN0 aW9uKTsKKwljb25uZWN0aW9uID0gTlVMTDsKIH0KIAogZ2Jvb2xlYW4gZ2F0ZXdheV9pc19jb25u ZWN0ZWQoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KQpAQCAtMzI2LDE3ICs1OTgsNiBAQCBnYm9v bGVhbiBnYXRld2F5X2lzX2Nvbm5lY3RlZChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCiAJCQlk ZXYtPmdhdGV3YXktPnN0YXRlID09IEdBVEVXQVlfU1RBVEVfQ09OTkVDVEVEKTsKIH0KIAotaW50 IGdhdGV3YXlfY29ubmVjdF9yZmNvbW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBHSU9DaGFu bmVsICppbykKLXsKLQlpZiAoIWlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWdfaW9fY2hhbm5l bF9yZWYoaW8pOwotCWRldi0+Z2F0ZXdheS0+cmZjb21tID0gaW87Ci0KLQlyZXR1cm4gMDsKLX0K LQogaW50IGdhdGV3YXlfY29ubmVjdF9zY28oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBHSU9D aGFubmVsICppbykKIHsKIAlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXYtPmdhdGV3YXk7CkBAIC0z NDcsNDIgKzYwOCwzOSBAQCBpbnQgZ2F0ZXdheV9jb25uZWN0X3NjbyhzdHJ1Y3QgYXVkaW9fZGV2 aWNlICpkZXYsIEdJT0NoYW5uZWwgKmlvKQogCWd3LT5zY28gPSBnX2lvX2NoYW5uZWxfcmVmKGlv KTsKIAogCWdfaW9fYWRkX3dhdGNoKGd3LT5zY28sIEdfSU9fRVJSIHwgR19JT19IVVAgfCBHX0lP X05WQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHSU9GdW5jKSBzY29faW9f Y2IsIGRldik7CisJCQkJIChHSU9GdW5jKSBzY29faW9fY2IsIGRldik7CisKKwljaGFuZ2Vfc3Rh dGUoZGV2LCBHQVRFV0FZX1NUQVRFX1BMQVlJTkcpOworCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQg Z2F0ZXdheV9zdGFydF9zZXJ2aWNlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSkKK2ludCBn YXRld2F5X2Nvbm5lY3RfcmZjb21tKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwKKwkJR0lPQ2hh bm5lbCAqY2hhbiwgaW50IGNoKQogewotCXJmY29tbV9jb25uZWN0X2NiKGRldmljZS0+Z2F0ZXdh eS0+cmZjb21tLCBOVUxMLCBkZXZpY2UpOworCWlmICghY2hhbikKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlnX2lvX2NoYW5uZWxfcmVmKGNoYW4pOworCWRldi0+Z2F0ZXdheS0+cmZjb21tID0gY2hh bjsKKwlkZXYtPmdhdGV3YXktPmNoYW5uZWwgPSBjaDsKKworCXJldHVybiAwOwogfQogCi1pbnQg Z2F0ZXdheV9jbG9zZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpCit2b2lkIGdhdGV3YXlf c3RhcnRfc2VydmljZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGdhdGV3 YXkgKmd3ID0gZGV2aWNlLT5nYXRld2F5OwotCUdJT0NoYW5uZWwgKnJmY29tbSA9IGd3LT5yZmNv bW07Ci0JR0lPQ2hhbm5lbCAqc2NvID0gZ3ctPnNjbzsKLQlnYm9vbGVhbiB2YWx1ZSA9IEZBTFNF OworCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0ZXdheTsKKwlHRXJyb3IgKmVyciA9IE5V TEw7CiAKLQlpZiAocmZjb21tKSB7Ci0JCWdfaW9fY2hhbm5lbF9zaHV0ZG93bihyZmNvbW0sIFRS VUUsIE5VTEwpOwotCQlnX2lvX2NoYW5uZWxfdW5yZWYocmZjb21tKTsKLQkJZ3ctPnJmY29tbSA9 IE5VTEw7Ci0JfQorCWlmIChndy0+cmZjb21tID09IE5VTEwpCisJCXJldHVybjsKIAotCWlmIChz Y28pIHsKLQkJZ19pb19jaGFubmVsX3NodXRkb3duKHNjbywgVFJVRSwgTlVMTCk7Ci0JCWdfaW9f Y2hhbm5lbF91bnJlZihzY28pOwotCQlndy0+c2NvID0gTlVMTDsKLQkJZ3ctPnNjb19zdGFydF9j YiA9IE5VTEw7Ci0JCWd3LT5zY29fc3RhcnRfY2JfZGF0YSA9IE5VTEw7CisJaWYgKCFidF9pb19h Y2NlcHQoZ3ctPnJmY29tbSwgcmZjb21tX2Nvbm5lY3RfY2IsIGRldiwgTlVMTCwKKwkJCQkJCQkm ZXJyKSkgeworCQllcnJvcigiYnRfaW9fYWNjZXB0OiAlcyIsIGVyci0+bWVzc2FnZSk7CisJCWdf ZXJyb3JfZnJlZShlcnIpOwogCX0KLQotCWd3LT5zdGF0ZSA9IEdBVEVXQVlfU1RBVEVfRElTQ09O TkVDVEVEOwotCi0JZW1pdF9wcm9wZXJ0eV9jaGFuZ2VkKGRldmljZS0+Y29ubiwgZGV2aWNlLT5w YXRoLAotCQkJCUFVRElPX0dBVEVXQVlfSU5URVJGQUNFLAotCQkJCSJDb25uZWN0ZWQiLCBEQlVT X1RZUEVfQk9PTEVBTiwgJnZhbHVlKTsKLQlyZXR1cm4gMDsKIH0KIAogLyogVGhlc2UgYXJlIGZ1 bmN0aW9ucyB0byBiZSBjYWxsZWQgZnJvbSB1bml4LmMgZm9yIGF1ZGlvIHN5c3RlbQpAQCAtMzk5 LDggKzY1NywxMiBAQCBnYm9vbGVhbiBnYXRld2F5X3JlcXVlc3Rfc3RyZWFtKHN0cnVjdCBhdWRp b19kZXZpY2UgKmRldiwKIAkJZ3ctPnNjb19zdGFydF9jYl9kYXRhID0gdXNlcl9kYXRhOwogCQln ZXRfcmVjb3JkcyhkZXYpOwogCX0gZWxzZSBpZiAoIWd3LT5zY28pIHsKKwkJY2hhciBzb3VyY2Vb MTI4XSwgZGVzdGluYXRpb25bMTI4XTsKKwogCQlndy0+c2NvX3N0YXJ0X2NiID0gY2I7CiAJCWd3 LT5zY29fc3RhcnRfY2JfZGF0YSA9IHVzZXJfZGF0YTsKKwkJYmEyc3RyKCZkZXYtPnNyYywgc291 cmNlKTsKKwkJYmEyc3RyKCZkZXYtPmRzdCwgZGVzdGluYXRpb24pOwogCQlpbyA9IGJ0X2lvX2Nv bm5lY3QoQlRfSU9fU0NPLCBzY29fY29ubmVjdF9jYiwgZGV2LCBOVUxMLCAmZXJyLAogCQkJCUJU X0lPX09QVF9TT1VSQ0VfQkRBRERSLCAmZGV2LT5zcmMsCiAJCQkJQlRfSU9fT1BUX0RFU1RfQkRB RERSLCAmZGV2LT5kc3QsCkBAIC00MTgsOCArNjgwLDggQEAgZ2Jvb2xlYW4gZ2F0ZXdheV9yZXF1 ZXN0X3N0cmVhbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsCiAJcmV0dXJuIFRSVUU7CiB9CiAK LWludCBnYXRld2F5X2NvbmZpZ19zdHJlYW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBnYXRl d2F5X3N0cmVhbV9jYl90IHNjb19jYiwKLQkJCQl2b2lkICp1c2VyX2RhdGEpCitpbnQgZ2F0ZXdh eV9jb25maWdfc3RyZWFtKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwKKwkJCQlnYXRld2F5X3N0 cmVhbV9jYl90IHNjb19jYiwgdm9pZCAqdXNlcl9kYXRhKQogewogCXN0cnVjdCBnYXRld2F5ICpn dyA9IGRldi0+Z2F0ZXdheTsKIApAQCAtNDY0LDQgKzcyNiwzIEBAIHZvaWQgZ2F0ZXdheV9zdXNw ZW5kX3N0cmVhbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCiAJZ3ctPnNjb19zdGFydF9jYiA9 IE5VTEw7CiAJZ3ctPnNjb19zdGFydF9jYl9kYXRhID0gTlVMTDsKIH0KLQpkaWZmIC0tZ2l0IGEv YXVkaW8vZ2F0ZXdheS5oIGIvYXVkaW8vZ2F0ZXdheS5oCmluZGV4IDNiMDQ1N2YuLmVhZjY4MDEg MTAwNjQ0Ci0tLSBhL2F1ZGlvL2dhdGV3YXkuaAorKysgYi9hdWRpby9nYXRld2F5LmgKQEAgLTQs NiArNCw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNi0yMDEwICBOb2tpYSBDb3Jwb3Jh dGlvbgogICogIENvcHlyaWdodCAoQykgMjAwNC0yMDEwICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNl bEBob2x0bWFubi5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMDkgIFpoZW5odWEgWmhh bmcgPHpoZW5odWEuemhhbmdAaW50ZWwuY29tPgogICoKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAg LTIyLDIwICsyMywyNSBAQAogICoKICAqLwogCi0jZGVmaW5lIEFVRElPX0dBVEVXQVlfSU5URVJG QUNFICJvcmcuYmx1ZXouSGVhZHNldEdhdGV3YXkiCisjZGVmaW5lIEFVRElPX0dBVEVXQVlfSU5U RVJGQUNFICJvcmcuYmx1ZXouSGFuZHNmcmVlR2F0ZXdheSIKIAogI2RlZmluZSBERUZBVUxUX0hT UF9IU19DSEFOTkVMIDYKICNkZWZpbmUgREVGQVVMVF9IRlBfSFNfQ0hBTk5FTCA3CiAKIHR5cGVk ZWYgZW51bSB7CiAJR0FURVdBWV9TVEFURV9ESVNDT05ORUNURUQsCi0JR0FURVdBWV9TVEFURV9D T05ORUNURUQKKwlHQVRFV0FZX1NUQVRFX0NPTk5FQ1RFRCwKKwlHQVRFV0FZX1NUQVRFX0NPTk5F Q1RJTkcsCisJR0FURVdBWV9TVEFURV9QTEFZSU5HLAogfSBnYXRld2F5X3N0YXRlX3Q7CiAKIHR5 cGVkZWYgdm9pZCAoKmdhdGV3YXlfc3RyZWFtX2NiX3QpIChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpk ZXYsIHZvaWQgKnVzZXJfZGF0YSk7CisKIHN0cnVjdCBnYXRld2F5ICpnYXRld2F5X2luaXQoc3Ry dWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKTsKK3ZvaWQgZ2F0ZXdheV9leGl0KCk7CiBnYm9vbGVh biBnYXRld2F5X2lzX2Nvbm5lY3RlZChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpOwotaW50IGdh dGV3YXlfY29ubmVjdF9yZmNvbW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBHSU9DaGFubmVs ICpjaGFuKTsKK2ludCBnYXRld2F5X2Nvbm5lY3RfcmZjb21tKHN0cnVjdCBhdWRpb19kZXZpY2Ug KmRldiwKKwkJCUdJT0NoYW5uZWwgKmNoYW4sIGludCBjaCk7CiBpbnQgZ2F0ZXdheV9jb25uZWN0 X3NjbyhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIEdJT0NoYW5uZWwgKmNoYW4pOwogdm9pZCBn YXRld2F5X3N0YXJ0X3NlcnZpY2Uoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKTsKIGdib29s ZWFuIGdhdGV3YXlfcmVxdWVzdF9zdHJlYW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LApkaWZm IC0tZ2l0IGEvYXVkaW8vbWFuYWdlci5jIGIvYXVkaW8vbWFuYWdlci5jCmluZGV4IDQxM2MxZjMu LmU3NjgwMTQgMTAwNjQ0Ci0tLSBhL2F1ZGlvL21hbmFnZXIuYworKysgYi9hdWRpby9tYW5hZ2Vy LmMKQEAgLTE5OCw3ICsxOTgsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfdXVpZChjb25zdCBjaGFy ICp1dWlkc3RyLCBzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpCiAJCWJyZWFrOwogCWNhc2Ug SEFORFNGUkVFX0FHV19TVkNMQVNTX0lEOgogCQlkZWJ1ZygiRm91bmQgSGFuZHNmcmVlIEFHIHJl Y29yZCIpOwotCQlpZiAoZGV2aWNlLT5nYXRld2F5ID09IE5VTEwpCisJCWlmIChlbmFibGVkLmdh dGV3YXkgJiYgKGRldmljZS0+Z2F0ZXdheSA9PSBOVUxMKSkKIAkJCWRldmljZS0+Z2F0ZXdheSA9 IGdhdGV3YXlfaW5pdChkZXZpY2UpOwogCQlicmVhazsKIAljYXNlIEFVRElPX1NJTktfU1ZDTEFT U19JRDoKQEAgLTU4Niw3ICs1ODYsNyBAQCBzdGF0aWMgdm9pZCBoZl9pb19jYihHSU9DaGFubmVs ICpjaGFuLCBncG9pbnRlciBkYXRhKQogCQlnb3RvIGRyb3A7CiAJfQogCi0JaWYgKGdhdGV3YXlf Y29ubmVjdF9yZmNvbW0oZGV2aWNlLCBjaGFuKSA8IDApIHsKKwlpZiAoZ2F0ZXdheV9jb25uZWN0 X3JmY29tbShkZXZpY2UsIGNoYW4sIGNoKSA8IDApIHsKIAkJZXJyb3IoIkFsbG9jYXRpbmcgbmV3 IEdJT0NoYW5uZWwgZmFpbGVkISIpOwogCQlnb3RvIGRyb3A7CiAJfQpAQCAtOTA1LDIyICs5MDUs MTIgQEAgc3RhdGljIHZvaWQgaGVhZHNldF9zZXJ2ZXJfcmVtb3ZlKHN0cnVjdCBidGRfYWRhcHRl ciAqYWRhcHRlcikKIHN0YXRpYyBpbnQgZ2F0ZXdheV9zZXJ2ZXJfcHJvYmUoc3RydWN0IGJ0ZF9h ZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBhdWRpb19hZGFwdGVyICphZHA7Ci0JY29uc3Qg Z2NoYXIgKnBhdGggPSBhZGFwdGVyX2dldF9wYXRoKGFkYXB0ZXIpOwotCWludCByZXQ7Ci0KLQlE QkcoInBhdGggJXMiLCBwYXRoKTsKIAogCWFkcCA9IGF1ZGlvX2FkYXB0ZXJfZ2V0KGFkYXB0ZXIp OwogCWlmICghYWRwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IGdhdGV3YXlfc2VydmVy X2luaXQoYWRwKTsKLQlpZiAocmV0IDwgMCkgewotCQlhdWRpb19hZGFwdGVyX3JlZihhZHApOwot CQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBnYXRld2F5X3NlcnZlcl9p bml0KGFkcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGdhdGV3YXlfc2VydmVyX3JlbW92ZShzdHJ1Y3Qg YnRkX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0xMTY2LDggKzExNTYsMTAgQEAgdm9pZCBhdWRpb19t YW5hZ2VyX2V4aXQodm9pZCkKIAkJdGVsZXBob255X2V4aXQoKTsKIAl9CiAKLQlpZiAoZW5hYmxl ZC5nYXRld2F5KQorCWlmIChlbmFibGVkLmdhdGV3YXkpIHsKIAkJYnRkX3VucmVnaXN0ZXJfYWRh cHRlcl9kcml2ZXIoJmdhdGV3YXlfc2VydmVyX2RyaXZlcik7CisJCWdhdGV3YXlfZXhpdCgpOwor CX0KIAogCWlmIChlbmFibGVkLnNvdXJjZSB8fCBlbmFibGVkLnNpbmspCiAJCWJ0ZF91bnJlZ2lz dGVyX2FkYXB0ZXJfZHJpdmVyKCZhMmRwX3NlcnZlcl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvYXVk aW8vdW5peC5jIGIvYXVkaW8vdW5peC5jCmluZGV4IDVjZjRmOTQuLmJkMWE0MTUgMTAwNjQ0Ci0t LSBhL2F1ZGlvL3VuaXguYworKysgYi9hdWRpby91bml4LmMKQEAgLTM5NSw2ICszOTUsOSBAQCBz dGF0aWMgdm9pZCBnYXRld2F5X3Jlc3VtZV9jb21wbGV0ZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpk ZXYsIHZvaWQgKnVzZXJfZGF0YSkKIAlzdHJ1Y3QgYnRfc3RhcnRfc3RyZWFtX3JzcCAqcnNwID0g KHZvaWQgKikgYnVmOwogCXN0cnVjdCBidF9uZXdfc3RyZWFtX2luZCAqaW5kID0gKHZvaWQgKikg YnVmOwogCisJaWYgKCFkZXYpCisJCWdvdG8gZmFpbGVkOworCiAJbWVtc2V0KGJ1ZiwgMCwgc2l6 ZW9mKGJ1ZikpOwogCXJzcC0+aC50eXBlID0gQlRfUkVTUE9OU0U7CiAJcnNwLT5oLm5hbWUgPSBC VF9TVEFSVF9TVFJFQU07CkBAIC00MTYsNiArNDE5LDExIEBAIHN0YXRpYyB2b2lkIGdhdGV3YXlf cmVzdW1lX2NvbXBsZXRlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgdm9pZCAqdXNlcl9kYXRh KQogCX0KIAogCWNsaWVudC0+cmVxX2lkID0gMDsKKwlyZXR1cm47CisKK2ZhaWxlZDoKKwllcnJv cigiZ2F0ZXdheV9yZXN1bWVfY29tcGxldGU6IHJlc3VtZSBmYWlsZWQiKTsKKwl1bml4X2lwY19l cnJvcihjbGllbnQsIEJUX1NUQVJUX1NUUkVBTSwgRUlPKTsKIH0KIAogc3RhdGljIHZvaWQgaGVh ZHNldF9zdXNwZW5kX2NvbXBsZXRlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgdm9pZCAqdXNl cl9kYXRhKQotLSAKMS42LjQuNAoK --000e0cd6ad1401827a047ce837c9 Content-Type: application/octet-stream; name="0001-Add-HFP-support-in-oFono.patch" Content-Disposition: attachment; filename="0001-Add-HFP-support-in-oFono.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4bmhj915 RnJvbSAyY2Y4NTAxYTUyYmM3YzI3NDcxMjdkMzk5YmFiNDFlNjM2NjAyODNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIEYuIFBhZG92YW4gPHBhZG92YW5AcHJvZnVzaW9u Lm1vYmk+CkRhdGU6IEZyaSwgOCBKYW4gMjAxMCAxNzoyNTo0MyAtMDIwMApTdWJqZWN0OiBbUEFU Q0hdIEFkZCBIRlAgc3VwcG9ydCBpbiBvRm9ubwoKSXQgdXNlcyBCbHVlWiB0aHJvdWdoIHRvIGdl dCBIRlAgd29ya2luZyBmb2xsb3dpbmcgdGhlCm9yZy5ibHVlei5IYW5kc2ZyZWVHYXRld2F5IGFu ZCBvcmcuYmx1ZXouSGFuZHNmcmVlQWdlbnQgZnJvbSB0aGUgQmx1ZVoKRC1CdXMgQVBJLgoKWW91 IG5lZWQgdGhlIEhGUCBwYXRjaCBpbnRvIEJsdWVaIHRvby4KCk1hbnkgdGhhbmtzIHRvIFpoZW5o dWEgWmhhbmcgPHpoZW5odWEuemhhbmdAaW50ZWwuY29tPiBmb3IgaXRzIHByb3RvdHlwZQpvbiB0 aGlzIGNvZGUuCi0tLQogZ2F0Y2hhdC9nYXR0dHkuYyAgICB8ICAgMjMgKysrKwogZ2F0Y2hhdC9n YXR0dHkuaCAgICB8ICAgIDEgKwogaW5jbHVkZS9tb2RlbS5oICAgICB8ICAgIDIgKwogcGx1Z2lu cy9oZnAuYyAgICAgICB8ICAyOTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tCiBwbHVnaW5zL21vZGVtY29uZi5jIHwgICAgMyArLQogc3JjL21vZGVt LmMgICAgICAgICB8ICAgMTUgKysrCiA2IGZpbGVzIGNoYW5nZWQsIDMzMSBpbnNlcnRpb25zKCsp LCAxMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nYXRjaGF0L2dhdHR0eS5jIGIvZ2F0Y2hh dC9nYXR0dHkuYwppbmRleCAwMmNhMzg5Li5hZTEyNjYyIDEwMDY0NAotLS0gYS9nYXRjaGF0L2dh dHR0eS5jCisrKyBiL2dhdGNoYXQvZ2F0dHR5LmMKQEAgLTI2MCwzICsyNjAsMjYgQEAgR0lPQ2hh bm5lbCAqZ19hdF90dHlfb3Blbihjb25zdCBjaGFyICp0dHksIEdIYXNoVGFibGUgKm9wdGlvbnMp CiAKIAlyZXR1cm4gY2hhbm5lbDsKIH0KKworR0lPQ2hhbm5lbCAqZ19hdF9nZXRfY2hhbm5lbF9m cm9tX2ZkKGludCBmZCkKK3sKKwlHSU9DaGFubmVsICpjaGFubmVsOworCXN0cnVjdCB0ZXJtaW9z IHRpOworCisJLyogU3dpdGNoIFRUWSB0byByYXcgbW9kZSAqLworCW1lbXNldCgmdGksIDAsIHNp emVvZih0aSkpOworCWNmbWFrZXJhdygmdGkpOworCXRjZmx1c2goZmQsIFRDSU9GTFVTSCk7CisJ dGNzZXRhdHRyKGZkLCBUQ1NBTk9XLCAmdGkpOworCisJY2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91 bml4X25ldyhmZCk7CisKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCWNsb3NlKGZkKTsKKwkJ cmV0dXJuIE5VTEw7CisJfQorCisJZ19pb19jaGFubmVsX3NldF9jbG9zZV9vbl91bnJlZihjaGFu bmVsLCBUUlVFKTsKKworCXJldHVybiBjaGFubmVsOworfQpkaWZmIC0tZ2l0IGEvZ2F0Y2hhdC9n YXR0dHkuaCBiL2dhdGNoYXQvZ2F0dHR5LmgKaW5kZXggZGMzZmUxNi4uNzMwZjFkYyAxMDA2NDQK LS0tIGEvZ2F0Y2hhdC9nYXR0dHkuaAorKysgYi9nYXRjaGF0L2dhdHR0eS5oCkBAIC00Myw2ICs0 Myw3IEBAIGV4dGVybiAiQyIgewogICovCiBHSU9DaGFubmVsICpnX2F0X3R0eV9vcGVuKGNvbnN0 IGNoYXIgKnR0eSwgR0hhc2hUYWJsZSAqb3B0aW9ucyk7CiAKK0dJT0NoYW5uZWwgKmdfYXRfZ2V0 X2NoYW5uZWxfZnJvbV9mZChpbnQgZmQpOwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbW9kZW0uaCBiL2luY2x1ZGUvbW9kZW0uaAppbmRleCBiMmFh NjA3Li5iZjI4NTE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21vZGVtLmgKKysrIGIvaW5jbHVkZS9t b2RlbS5oCkBAIC00Nyw2ICs0Nyw4IEBAIHN0cnVjdCBvZm9ub19tb2RlbSAqb2Zvbm9fbW9kZW1f Y3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnR5cGUpOwogaW50IG9mb25vX21v ZGVtX3JlZ2lzdGVyKHN0cnVjdCBvZm9ub19tb2RlbSAqbW9kZW0pOwogdm9pZCBvZm9ub19tb2Rl bV9yZW1vdmUoc3RydWN0IG9mb25vX21vZGVtICptb2RlbSk7CiAKK3N0cnVjdCBvZm9ub19tb2Rl bSAqb2Zvbm9fbW9kZW1fZ2V0X2J5X3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CisKIHZvaWQgb2Zv bm9fbW9kZW1fc2V0X3Bvd2VyZWQoc3RydWN0IG9mb25vX21vZGVtICptb2RlbSwgb2Zvbm9fYm9v bF90IHBvd2VyZWQpOwogb2Zvbm9fYm9vbF90IG9mb25vX21vZGVtX2dldF9wb3dlcmVkKHN0cnVj dCBvZm9ub19tb2RlbSAqbW9kZW0pOwogCmRpZmYgLS1naXQgYS9wbHVnaW5zL2hmcC5jIGIvcGx1 Z2lucy9oZnAuYwppbmRleCAzYmJkOTIyLi4yZTVlMmExIDEwMDY0NAotLS0gYS9wbHVnaW5zL2hm cC5jCisrKyBiL3BsdWdpbnMvaGZwLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxnbGli Lmg+CiAjaW5jbHVkZSA8Z2F0Y2hhdC5oPgogI2luY2x1ZGUgPGdhdHR0eS5oPgorI2luY2x1ZGUg PGdkYnVzLmg+CisjaW5jbHVkZSA8b2Zvbm8uaD4KIAogI2RlZmluZSBPRk9OT19BUElfU1VCSkVD VF9UT19DSEFOR0UKICNpbmNsdWRlIDxvZm9uby9wbHVnaW4uaD4KQEAgLTUyLDExICs1NCwyOCBA QAogCiAjaW5jbHVkZSA8ZHJpdmVycy9oZnBtb2RlbS9oZnBtb2RlbS5oPgogCisjaW5jbHVkZSA8 b2Zvbm8vZGJ1cy5oPgorCisjZGVmaW5lIEJMVUVaX1NFUlZJQ0UgIm9yZy5ibHVleiIKKyNkZWZp bmUgQkxVRVpfUEFUSCAiLyIKKyNkZWZpbmUgQkxVRVpfTUFOQUdFUl9JTlRFUkZBQ0UgIm9yZy5i bHVlei5NYW5hZ2VyIgorI2RlZmluZSBCTFVFWl9BREFQVEVSX0lOVEVSRkFDRSAib3JnLmJsdWV6 LkFkYXB0ZXIiCisjZGVmaW5lIEJMVUVaX0RFVklDRV9JTlRFUkZBQ0UgIm9yZy5ibHVlei5EZXZp Y2UiCisjZGVmaW5lIEJMVUVaX0dBVEVXQVlfSU5URVJGQUNFICJvcmcuYmx1ZXouSGFuZHNmcmVl R2F0ZXdheSIKKworI2RlZmluZSBIRlBfQUdFTlRfSU5URVJGQUNFICJvcmcuYmx1ZXouSGFuZHNm cmVlQWdlbnQiCisKIHN0YXRpYyBjb25zdCBjaGFyICpicnNmX3ByZWZpeFtdID0geyAiK0JSU0Y6 IiwgTlVMTCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKmNpbmRfcHJlZml4W10gPSB7ICIrQ0lORDoi LCBOVUxMIH07CiBzdGF0aWMgY29uc3QgY2hhciAqY21lcl9wcmVmaXhbXSA9IHsgIitDTUVSOiIs IE5VTEwgfTsKIHN0YXRpYyBjb25zdCBjaGFyICpjaGxkX3ByZWZpeFtdID0geyAiK0NITEQ6Iiwg TlVMTCB9OwogCitzdGF0aWMgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb247CitzdGF0aWMgY2hh ciAqb2Zvbm9faGFuZHNmcmVlX3BhdGg7CisKKworc3RhdGljIGludCB0aW1lb3V0OworCiBzdGF0 aWMgaW50IGhmcF9kaXNhYmxlKHN0cnVjdCBvZm9ub19tb2RlbSAqbW9kZW0pOwogCiBzdGF0aWMg dm9pZCBoZnBfZGVidWcoY29uc3QgY2hhciAqc3RyLCB2b2lkICp1c2VyX2RhdGEpCkBAIC0xMzUs NiArMTU0LDYwIEBAIHN0YXRpYyB2b2lkIGNtZXJfY2IoZ2Jvb2xlYW4gb2ssIEdBdFJlc3VsdCAq cmVzdWx0LCBncG9pbnRlciB1c2VyX2RhdGEpCiAJCXNldmljZV9sZXZlbF9jb25uX2VzdGFibGlz aGVkKG1vZGVtKTsKIH0KIAorc3RhdGljIGludCBzZW5kX21ldGhvZF9jYWxsKGNvbnN0IGNoYXIg KmRlc3QsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJY29uc3QgY2hhciAqaW50ZXJmYWNlLCBjb25z dCBjaGFyICptZXRob2QsCisJCQkJREJ1c1BlbmRpbmdDYWxsTm90aWZ5RnVuY3Rpb24gY2IsCisJ CQkJdm9pZCAqdXNlcl9kYXRhLCBpbnQgdHlwZSwgLi4uKQoreworCURCdXNNZXNzYWdlICptc2c7 CisJREJ1c1BlbmRpbmdDYWxsICpjYWxsOworCXZhX2xpc3QgYXJnczsKKworCW1zZyA9IGRidXNf bWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwoZGVzdCwgcGF0aCwgaW50ZXJmYWNlLCBtZXRob2QpOwor CWlmICghbXNnKSB7CisJCW9mb25vX2Vycm9yKCJVbmFibGUgdG8gYWxsb2NhdGUgbmV3IEQtQnVz ICVzIG1lc3NhZ2UiLCBtZXRob2QpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl2YV9zdGFy dChhcmdzLCB0eXBlKTsKKworCWlmICghZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzX3ZhbGlzdCht c2csIHR5cGUsIGFyZ3MpKSB7CisJCWRidXNfbWVzc2FnZV91bnJlZihtc2cpOworCQl2YV9lbmQo YXJncyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXZhX2VuZChhcmdzKTsKKworCWlmICghY2Ip IHsKKwkJZ19kYnVzX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uLCBtc2cpOworCQlyZXR1cm4gMDsK Kwl9CisKKwlpZiAoIWRidXNfY29ubmVjdGlvbl9zZW5kX3dpdGhfcmVwbHkoY29ubmVjdGlvbiwg bXNnLCAmY2FsbCwgLTEpKSB7CisJCW9mb25vX2Vycm9yKCJTZW5kaW5nICVzIGZhaWxlZCIsIG1l dGhvZCk7CisJCWRidXNfbWVzc2FnZV91bnJlZihtc2cpOworCQlyZXR1cm4gLUVJTzsKKwl9CisK KwlkYnVzX3BlbmRpbmdfY2FsbF9zZXRfbm90aWZ5KGNhbGwsIGNiLCB1c2VyX2RhdGEsIE5VTEwp OworCWRidXNfcGVuZGluZ19jYWxsX3VucmVmKGNhbGwpOworCWRidXNfbWVzc2FnZV91bnJlZiht c2cpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBoZnBfZW5hYmxlX3RpbWVv dXQoZ3BvaW50ZXIgdXNlcikKK3sKKwlzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVtID0gdXNlcjsK KworCWlmIChvZm9ub19tb2RlbV9nZXRfcG93ZXJlZChtb2RlbSkpCisJCXJldHVybiBGQUxTRTsK KworCWhmcF9kaXNhYmxlKG1vZGVtKTsKKwlyZXR1cm4gRkFMU0U7Cit9CisKIHN0YXRpYyB2b2lk IGNpbmRfc3RhdHVzX2NiKGdib29sZWFuIG9rLCBHQXRSZXN1bHQgKnJlc3VsdCwKIAkJCQlncG9p bnRlciB1c2VyX2RhdGEpCiB7CkBAIC0yNjAsOCArMzMzLDcgQEAgZXJyb3I6CiB9CiAKIC8qIGVp dGhlciBvRm9ubyBvciBQaG9uZSBjb3VsZCByZXF1ZXN0IFNMQyBjb25uZWN0aW9uICovCi1zdGF0 aWMgaW50IHNlcnZpY2VfbGV2ZWxfY29ubmVjdGlvbihzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVt LAotCQkJCWNvbnN0IGNoYXIgKnR0eSkKK3N0YXRpYyBpbnQgc2VydmljZV9sZXZlbF9jb25uZWN0 aW9uKHN0cnVjdCBvZm9ub19tb2RlbSAqbW9kZW0sIGludCBmZCkKIHsKIAlzdHJ1Y3QgaGZwX2Rh dGEgKmRhdGEgPSBvZm9ub19tb2RlbV9nZXRfZGF0YShtb2RlbSk7CiAJR0lPQ2hhbm5lbCAqaW87 CkBAIC0yNjksNyArMzQxLDcgQEAgc3RhdGljIGludCBzZXJ2aWNlX2xldmVsX2Nvbm5lY3Rpb24o c3RydWN0IG9mb25vX21vZGVtICptb2RlbSwKIAlHQXRDaGF0ICpjaGF0OwogCWNoYXIgYnVmWzY0 XTsKIAotCWlvID0gZ19hdF90dHlfb3Blbih0dHksIE5VTEwpOworCWlvID0gZ19hdF9nZXRfY2hh bm5lbF9mcm9tX2ZkKGZkKTsKIAlpZiAoIWlvKSB7CiAJCW9mb25vX2Vycm9yKCJTZXJ2aWNlIGxl dmVsIGNvbm5lY3Rpb24gZmFpbGVkOiAlcyAoJWQpIiwKIAkJCXN0cmVycm9yKGVycm5vKSwgZXJy bm8pOwpAQCAtMjk2LDkgKzM2OCwxNzMgQEAgc3RhdGljIGludCBzZXJ2aWNlX2xldmVsX2Nvbm5l Y3Rpb24oc3RydWN0IG9mb25vX21vZGVtICptb2RlbSwKIAlyZXR1cm4gLUVJTlBST0dSRVNTOwog fQogCitzdGF0aWMgREJ1c01lc3NhZ2UgKmhmcF9hZ2VudF9uZXdfY29ubmVjdGlvbihEQnVzQ29u bmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKK3sKKwlpbnQgZmQ7 CisJY29uc3QgY2hhciAqcGF0aDsKKwlzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVtID0gTlVMTDsK KworCXBhdGggPSBkYnVzX21lc3NhZ2VfZ2V0X3BhdGgobXNnKTsKKwltb2RlbSA9IG9mb25vX21v ZGVtX2dldF9ieV9wYXRoKHBhdGgpOworCisJaWYgKCFtb2RlbSkKKwkJcmV0dXJuIE5VTEw7CisK KwlpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhtc2csIE5VTEwsIERCVVNfVFlQRV9VTklYX0ZE LCAmZmQsCisJCQkJREJVU19UWVBFX0lOVkFMSUQpKQorCQlyZXR1cm4gX19vZm9ub19lcnJvcl9p bnZhbGlkX2FyZ3MobXNnKTsKKworCXNlcnZpY2VfbGV2ZWxfY29ubmVjdGlvbihtb2RlbSwgZmQp OworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBEQnVzTWVzc2FnZSAqaGZwX2FnZW50X3Jl bGVhc2UoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEp Cit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBHREJ1c01ldGhvZFRhYmxlIGFnZW50X21l dGhvZHNbXSA9IHsKKyAgICAgICAgeyAiTmV3Q29ubmVjdGlvbiIsICJoIiwgIiIsIGhmcF9hZ2Vu dF9uZXdfY29ubmVjdGlvbiwKKwkJR19EQlVTX01FVEhPRF9GTEFHX0FTWU5DIH0sCisJeyAiUmVs ZWFzZSIsICIiLCAiIiwgaGZwX2FnZW50X3JlbGVhc2UgfSwKKwl7TlVMTCwgTlVMTCwgTlVMTCwg TlVMTH0KK307CisKK3N0YXRpYyB2b2lkIGFnZW50X3JlZ2lzdGVyZWRfY2IoREJ1c1BlbmRpbmdD YWxsICpjYWxsLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJREJ1c01lc3NhZ2UgKnJlcGx5Owor CisJcmVwbHkgPSBkYnVzX3BlbmRpbmdfY2FsbF9zdGVhbF9yZXBseShjYWxsKTsKKwlkYnVzX21l c3NhZ2VfdW5yZWYocmVwbHkpOworfQorCitzdGF0aWMgdm9pZCBhZ2VudF91bnJlZ2lzdGVyZWRf Y2IoREJ1c1BlbmRpbmdDYWxsICpjYWxsLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJREJ1c01l c3NhZ2UgKnJlcGx5OworCisJcmVwbHkgPSBkYnVzX3BlbmRpbmdfY2FsbF9zdGVhbF9yZXBseShj YWxsKTsKKwlkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworfQorCitzdGF0aWMgdm9pZCBmaW5k X2RldmljZV9jYihEQnVzUGVuZGluZ0NhbGwgKmNhbGwsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sK KwlEQnVzRXJyb3IgZXJyOworCURCdXNNZXNzYWdlICpyZXBseTsKKwlzdHJ1Y3Qgb2Zvbm9fbW9k ZW0gKm1vZGVtID0gdXNlcl9kYXRhOworCWNvbnN0IGNoYXIgKmRldmljZSwgKm9ial9wYXRoOwor CWludCByZXQ7CisKKwlyZXBseSA9IGRidXNfcGVuZGluZ19jYWxsX3N0ZWFsX3JlcGx5KGNhbGwp OworCisJZGJ1c19lcnJvcl9pbml0KCZlcnIpOworCisJaWYgKGRidXNfbWVzc2FnZV9nZXRfYXJn cyhyZXBseSwgJmVyciwgREJVU19UWVBFX09CSkVDVF9QQVRILAorCQkJCSZkZXZpY2UsIERCVVNf VFlQRV9JTlZBTElEKSA9PSBGQUxTRSkgeworCQlpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycikg PT0gVFJVRSkgeworCQkJb2Zvbm9fZXJyb3IoIiVzIiwgZXJyLm1lc3NhZ2UpOworCQkJZGJ1c19l cnJvcl9mcmVlKCZlcnIpOworCQl9CisJCWdvdG8gZG9uZTsKKwl9CisKKwlvZm9ub19kZWJ1Zygi VXNpbmcgZGV2aWNlICVzIiwgZGV2aWNlKTsKKwlvZm9ub19oYW5kc2ZyZWVfcGF0aCA9IGdfc3Ry ZHVwKGRldmljZSk7CisKKwlvYmpfcGF0aCA9IG9mb25vX21vZGVtX2dldF9wYXRoKG1vZGVtKTsK KworCXJldCA9IHNlbmRfbWV0aG9kX2NhbGwoQkxVRVpfU0VSVklDRSwgZGV2aWNlLAorCQkJCUJM VUVaX0dBVEVXQVlfSU5URVJGQUNFLCAiUmVnaXN0ZXJBZ2VudCIsCisJCQkJYWdlbnRfcmVnaXN0 ZXJlZF9jYiwgTlVMTCwgREJVU19UWVBFX09CSkVDVF9QQVRILAorCQkJCSZvYmpfcGF0aCwgREJV U19UWVBFX0lOVkFMSUQpOworCisJaWYgKHJldCA8IDApCisJCW9mb25vX2Vycm9yKCJhZ2VudF9y ZWdpc3RlciBmYWlsZWQoJWQpIiwgcmV0KTsKKworZG9uZToKKwlkYnVzX21lc3NhZ2VfdW5yZWYo cmVwbHkpOzsKK30KKworc3RhdGljIHZvaWQgZ2V0X2FkYXB0ZXJfY2IoREJ1c1BlbmRpbmdDYWxs ICpjYWxsLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJREJ1c0Vycm9yIGVycjsKKwlEQnVzTWVz c2FnZSAqcmVwbHk7CisJc3RydWN0IG9mb25vX21vZGVtICptb2RlbSA9IHVzZXJfZGF0YTsKKwlj b25zdCBjaGFyICphZGFwdGVyID0gTlVMTDsKKwljb25zdCBjaGFyICphZGRyZXNzOworCWludCBy ZXQ7CisKKwlyZXBseSA9IGRidXNfcGVuZGluZ19jYWxsX3N0ZWFsX3JlcGx5KGNhbGwpOworCisJ ZGJ1c19lcnJvcl9pbml0KCZlcnIpOworCWlmIChkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MocmVwbHks ICZlcnIsCisJCQkJREJVU19UWVBFX09CSkVDVF9QQVRILAorCQkJCSZhZGFwdGVyLCBEQlVTX1RZ UEVfSU5WQUxJRCkgPT0gRkFMU0UpIHsKKwkJaWYgKGFkYXB0ZXIgPT0gTlVMTCkgeworCQkJb2Zv bm9fZXJyb3IoImJsdWV0b290aCBhZGFwdGVyIGlzIG5vdCBlbmFibGVkIik7CisJCQlkYnVzX2Vy cm9yX2ZyZWUoJmVycik7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlpZiAoZGJ1c19lcnJvcl9p c19zZXQoJmVycikgPT0gVFJVRSkgeworCQkJb2Zvbm9fZXJyb3IoIiVzICVzIiwgYWRhcHRlciwg ZXJyLm1lc3NhZ2UpOworCQkJZGJ1c19lcnJvcl9mcmVlKCZlcnIpOworCQl9CisJCWdvdG8gZG9u ZTsKKwl9CisKKwlhZGRyZXNzID0gb2Zvbm9fbW9kZW1fZ2V0X3N0cmluZyhtb2RlbSwgIkFkZHJl c3MiKTsKKworCURCRygiYWRkcmVzcyAlcyIsIGFkZHJlc3MpOworCisJaWYgKGFkZHJlc3MgPT0g TlVMTCkKKwkJcmV0dXJuOworCisJcmV0ID0gc2VuZF9tZXRob2RfY2FsbChCTFVFWl9TRVJWSUNF LCBhZGFwdGVyLAorCQkJCUJMVUVaX0FEQVBURVJfSU5URVJGQUNFLCAiRmluZERldmljZSIsCisJ CQkJZmluZF9kZXZpY2VfY2IsIG1vZGVtLAorCQkJCURCVVNfVFlQRV9TVFJJTkcsICZhZGRyZXNz LAorCQkJCURCVVNfVFlQRV9JTlZBTElEKTsKKworCWlmIChyZXQgPCAwKQorCQlvZm9ub19lcnJv cigiZmluZF9kZXZpY2UgZmFpbGVkKCVkKSIsIHJldCk7CisKK2RvbmU6CisJZGJ1c19tZXNzYWdl X3VucmVmKHJlcGx5KTsKKworfQorCitzdGF0aWMgaW50IGhmcF9yZWdpc3Rlcl9vZm9ub19oYW5k c2ZyZWUoc3RydWN0IG9mb25vX21vZGVtICptb2RlbSkKK3sKKwlvZm9ub19kZWJ1ZygiUmVnaXN0 ZXIgb0Zvbm8gQWdlbnQgdG8gYmx1ZXRvb3RoIGRhZW1vbiIpOworCisJcmV0dXJuIHNlbmRfbWV0 aG9kX2NhbGwoQkxVRVpfU0VSVklDRSwgQkxVRVpfUEFUSCwKKwkJCQlCTFVFWl9NQU5BR0VSX0lO VEVSRkFDRSwgIkRlZmF1bHRBZGFwdGVyIiwKKwkJCQlnZXRfYWRhcHRlcl9jYiwgbW9kZW0sCisJ CQkJREJVU19UWVBFX0lOVkFMSUQpOworfQorCitzdGF0aWMgaW50IGhmcF91bnJlZ2lzdGVyX29m b25vX2hhbmRzZnJlZShzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVtKQoreworCWNvbnN0IGNoYXIg Km9ial9wYXRoID0gb2Zvbm9fbW9kZW1fZ2V0X3BhdGgobW9kZW0pOworCisJb2Zvbm9fZGVidWco IlVucmVnaXN0ZXIgb0Zvbm8gQWdlbnQgdG8gYmx1ZXRvb3RoIGRhZW1vbiIpOworCisJaWYgKCFv Zm9ub19oYW5kc2ZyZWVfcGF0aCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc2VuZF9t ZXRob2RfY2FsbChCTFVFWl9TRVJWSUNFLCBvZm9ub19oYW5kc2ZyZWVfcGF0aCwKKwkJCQlCTFVF Wl9HQVRFV0FZX0lOVEVSRkFDRSwgIlVucmVnaXN0ZXJBZ2VudCIsCisJCQkJYWdlbnRfdW5yZWdp c3RlcmVkX2NiLCBOVUxMLAorCQkJCURCVVNfVFlQRV9PQkpFQ1RfUEFUSCwKKwkJCQkmb2JqX3Bh dGgsIERCVVNfVFlQRV9JTlZBTElEKTsKK30KKwogc3RhdGljIGludCBoZnBfcHJvYmUoc3RydWN0 IG9mb25vX21vZGVtICptb2RlbSkKIHsKIAlzdHJ1Y3QgaGZwX2RhdGEgKmRhdGE7CisJY29uc3Qg Y2hhciAqb2JqX3BhdGg7CisJREJ1c0Nvbm5lY3Rpb24gKmNvbm4gPSBvZm9ub19kYnVzX2dldF9j b25uZWN0aW9uKCk7CiAKIAlkYXRhID0gZ190cnlfbmV3MChzdHJ1Y3QgaGZwX2RhdGEsIDEpOwog CWlmICghZGF0YSkKQEAgLTMxMiw2ICs1NDgsMTUgQEAgc3RhdGljIGludCBoZnBfcHJvYmUoc3Ry dWN0IG9mb25vX21vZGVtICptb2RlbSkKIAogCW9mb25vX21vZGVtX3NldF9kYXRhKG1vZGVtLCBk YXRhKTsKIAorCWNvbm5lY3Rpb24gPSBkYnVzX2Nvbm5lY3Rpb25fcmVmKGNvbm4pOworCisJb2Jq X3BhdGggPSBvZm9ub19tb2RlbV9nZXRfcGF0aChtb2RlbSk7CisJZ19kYnVzX3JlZ2lzdGVyX2lu dGVyZmFjZShjb25uLCBvYmpfcGF0aCwgSEZQX0FHRU5UX0lOVEVSRkFDRSwKKwkJCWFnZW50X21l dGhvZHMsIE5VTEwsIE5VTEwsIGRhdGEsIE5VTEwpOworCisJaWYgKGhmcF9yZWdpc3Rlcl9vZm9u b19oYW5kc2ZyZWUobW9kZW0pICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dXJuIDA7 CiB9CiAKQEAgLTMyMiwyNCArNTY3LDU3IEBAIHN0YXRpYyB2b2lkIGhmcF9yZW1vdmUoc3RydWN0 IG9mb25vX21vZGVtICptb2RlbSkKIAlpZiAoZGF0YSkKIAkJZ19mcmVlKGRhdGEpOwogCisJaGZw X3VucmVnaXN0ZXJfb2Zvbm9faGFuZHNmcmVlKG1vZGVtKTsKKworCWlmIChvZm9ub19oYW5kc2Zy ZWVfcGF0aCkKKwkJZ19mcmVlKG9mb25vX2hhbmRzZnJlZV9wYXRoKTsKKworCWRidXNfY29ubmVj dGlvbl91bnJlZihjb25uZWN0aW9uKTsKKwogCW9mb25vX21vZGVtX3NldF9kYXRhKG1vZGVtLCBO VUxMKTsKIH0KIAorc3RhdGljIHZvaWQgcG9ydF9jb25uZWN0X2NiKERCdXNQZW5kaW5nQ2FsbCAq Y2FsbCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCURCdXNNZXNzYWdlICpyZXBseTsKKworCXJl cGx5ID0gZGJ1c19wZW5kaW5nX2NhbGxfc3RlYWxfcmVwbHkoY2FsbCk7CisJZGJ1c19tZXNzYWdl X3VucmVmKHJlcGx5KTsKK30KKworc3RhdGljIGludCBoZnBfY29ubmVjdF9vZm9ub19oYW5kc2Zy ZWUoKQoreworCW9mb25vX2RlYnVnKCJDb25uZWN0IHRvIGJsdWV0b290aCBkYWVtb24iKTsKKwor CWlmICghb2Zvbm9faGFuZHNmcmVlX3BhdGggfHwgIWNvbm5lY3Rpb24pCisJCXJldHVybiAtRUlO VkFMOworCisJcmV0dXJuIHNlbmRfbWV0aG9kX2NhbGwoQkxVRVpfU0VSVklDRSwgb2Zvbm9faGFu ZHNmcmVlX3BhdGgsCisJCQkJQkxVRVpfR0FURVdBWV9JTlRFUkZBQ0UsICJDb25uZWN0IiwKKwkJ CQlwb3J0X2Nvbm5lY3RfY2IsIE5VTEwsIERCVVNfVFlQRV9JTlZBTElEKTsKK30KKwogLyogcG93 ZXIgdXAgaGFyZHdhcmUgKi8KIHN0YXRpYyBpbnQgaGZwX2VuYWJsZShzdHJ1Y3Qgb2Zvbm9fbW9k ZW0gKm1vZGVtKQogewotCWNvbnN0IGNoYXIgKnR0eTsKLQlpbnQgcmV0OwotCiAJREJHKCIlcCIs IG1vZGVtKTsKIAotCXR0eSA9IG9mb25vX21vZGVtX2dldF9zdHJpbmcobW9kZW0sICJEZXZpY2Ui KTsKLQlpZiAodHR5ID09IE5VTEwpCisJdGltZW91dCA9IGdfdGltZW91dF9hZGRfc2Vjb25kcygx MCwgaGZwX2VuYWJsZV90aW1lb3V0LCBtb2RlbSk7CisKKwlpZiAoaGZwX2Nvbm5lY3Rfb2Zvbm9f aGFuZHNmcmVlKCkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IHNlcnZpY2VfbGV2 ZWxfY29ubmVjdGlvbihtb2RlbSwgdHR5KTsKKwlyZXR1cm4gLUVJTlBST0dSRVNTOworfQorCitz dGF0aWMgaW50IGhmcF9kaXNjb25uZWN0X29mb25vX2hhbmRzZnJlZSgpCit7CisJaWYgKCFvZm9u b19oYW5kc2ZyZWVfcGF0aCB8fCAhY29ubmVjdGlvbikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQly ZXR1cm4gcmV0OworCXJldHVybiBzZW5kX21ldGhvZF9jYWxsKEJMVUVaX1NFUlZJQ0UsIG9mb25v X2hhbmRzZnJlZV9wYXRoLAorCQkJCUJMVUVaX0dBVEVXQVlfSU5URVJGQUNFLCAiRGlzY29ubmVj dCIsCisJCQkJTlVMTCwgTlVMTCwgREJVU19UWVBFX0lOVkFMSUQpOwogfQogCiBzdGF0aWMgaW50 IGhmcF9kaXNhYmxlKHN0cnVjdCBvZm9ub19tb2RlbSAqbW9kZW0pCkBAIC0zNTksNiArNjM3LDcg QEAgc3RhdGljIGludCBoZnBfZGlzYWJsZShzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVtKQogCiAJ b2Zvbm9fbW9kZW1fc2V0X3Bvd2VyZWQobW9kZW0sIEZBTFNFKTsKIAorCWhmcF9kaXNjb25uZWN0 X29mb25vX2hhbmRzZnJlZSgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9wbHVnaW5z L21vZGVtY29uZi5jIGIvcGx1Z2lucy9tb2RlbWNvbmYuYwppbmRleCBjOGMyNjFmLi5iNGMxNjAw IDEwMDY0NAotLS0gYS9wbHVnaW5zL21vZGVtY29uZi5jCisrKyBiL3BsdWdpbnMvbW9kZW1jb25m LmMKQEAgLTEyNCwxMiArMTI0LDExIEBAIHN0YXRpYyBzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKmNyZWF0 ZV9tb2RlbShHS2V5RmlsZSAqa2V5ZmlsZSwgY29uc3QgY2hhciAqZ3JvdXApCiAKIAltb2RlbSA9 IG9mb25vX21vZGVtX2NyZWF0ZShncm91cCwgZHJpdmVyKTsKIAotCWlmICghZ19zdHJjbXAwKGRy aXZlciwgInBob25lc2ltIikpCisJaWYgKCFnX3N0cmNtcDAoZHJpdmVyLCAicGhvbmVzaW0iKSB8 fCAhZ19zdHJjbXAwKGRyaXZlciwgImhmcCIpKQogCQlzZXRfYWRkcmVzcyhtb2RlbSwga2V5Zmls ZSwgZ3JvdXApOwogCiAJaWYgKCFnX3N0cmNtcDAoZHJpdmVyLCAiYXRnZW4iKSB8fCAhZ19zdHJj bXAwKGRyaXZlciwgImcxIikgfHwKIAkJCQkJCSFnX3N0cmNtcDAoZHJpdmVyLCAiY2FseXBzbyIp IHx8Ci0JCQkJCQkhZ19zdHJjbXAwKGRyaXZlciwgImhmcCIpIHx8CiAJCQkJCQkhZ19zdHJjbXAw KGRyaXZlciwgInBhbG1wcmUiKSkKIAkJc2V0X2RldmljZShtb2RlbSwga2V5ZmlsZSwgZ3JvdXAp OwogCmRpZmYgLS1naXQgYS9zcmMvbW9kZW0uYyBiL3NyYy9tb2RlbS5jCmluZGV4IGJiYzk5MDUu LjlmYWI3MjIgMTAwNjQ0Ci0tLSBhL3NyYy9tb2RlbS5jCisrKyBiL3NyYy9tb2RlbS5jCkBAIC0x MDc0LDYgKzEwNzQsMjEgQEAgc3RydWN0IG9mb25vX21vZGVtICpvZm9ub19tb2RlbV9jcmVhdGUo Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdHlwZSkKIAlyZXR1cm4gbW9kZW07CiB9CiAK K3N0cnVjdCBvZm9ub19tb2RlbSAqb2Zvbm9fbW9kZW1fZ2V0X2J5X3BhdGgoY29uc3QgY2hhciAq cGF0aCkKK3sKKwlHU0xpc3QgKmw7CisJc3RydWN0IG9mb25vX21vZGVtICptb2RlbTsKKworCWZv ciAobCA9IGdfbW9kZW1fbGlzdDsgbDsgbCA9IGwtPm5leHQpIHsKKwkJbW9kZW0gPSBsLT5kYXRh OworCisJCWlmICghZ19zdHJjbXAwKG1vZGVtLT5wYXRoLCBwYXRoKSkKKwkJCXJldHVybiBtb2Rl bTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgZW1pdF9tb2RlbXMoKQog ewogCURCdXNDb25uZWN0aW9uICpjb25uID0gb2Zvbm9fZGJ1c19nZXRfY29ubmVjdGlvbigpOwot LSAKMS42LjQuNAoK --000e0cd6ad1401827a047ce837c9--