From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mauro Rossi Subject: [PATCH 06/10] drm/amd/display: dc/i2caux: add support for DCE6 Date: Mon, 8 Oct 2018 04:23:40 +0200 Message-ID: <20181008022344.10247-7-issor.oruam@gmail.com> References: <20181008022344.10247-1-issor.oruam@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181008022344.10247-1-issor.oruam-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: harry.wentland-5C7GfCeVMHo@public.gmane.org RENFNiB0YXJnZXRzIGFyZSBhZGRlZCByZXBsaWNhdGluZyBleGlzdGluZyBEQ0U4IGltcGxlbWVu dGF0aW9uLgotLS0KIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1eC9NYWtlZmlsZSAg ICB8ICAxMiArCiAuLi4vZGMvaTJjYXV4L2RjZTYwL2kyY19od19lbmdpbmVfZGNlNjAuYyAgICAg fCA4NzUgKysrKysrKysrKysrKysrKysrCiAuLi4vZGMvaTJjYXV4L2RjZTYwL2kyY19od19lbmdp bmVfZGNlNjAuaCAgICAgfCAgNTQgKysKIC4uLi9kYy9pMmNhdXgvZGNlNjAvaTJjX3N3X2VuZ2lu ZV9kY2U2MC5jICAgICB8IDE3MyArKysrCiAuLi4vZGMvaTJjYXV4L2RjZTYwL2kyY19zd19lbmdp bmVfZGNlNjAuaCAgICAgfCAgNDMgKwogLi4uL2Rpc3BsYXkvZGMvaTJjYXV4L2RjZTYwL2kyY2F1 eF9kY2U2MC5jICAgIHwgMjg0ICsrKysrKwogLi4uL2Rpc3BsYXkvZGMvaTJjYXV4L2RjZTYwL2ky Y2F1eF9kY2U2MC5oICAgIHwgIDM4ICsKIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1 eC9pMmNhdXguYyAgICB8ICAxMCArCiA4IGZpbGVzIGNoYW5nZWQsIDE0ODkgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pMmNh dXgvZGNlNjAvaTJjX2h3X2VuZ2luZV9kY2U2MC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1eC9kY2U2MC9pMmNfaHdfZW5naW5lX2RjZTYw LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaTJj YXV4L2RjZTYwL2kyY19zd19lbmdpbmVfZGNlNjAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pMmNhdXgvZGNlNjAvaTJjX3N3X2VuZ2luZV9kY2U2 MC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2ky Y2F1eC9kY2U2MC9pMmNhdXhfZGNlNjAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9hbWQvZGlzcGxheS9kYy9pMmNhdXgvZGNlNjAvaTJjYXV4X2RjZTYwLmgKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaTJjYXV4L01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1eC9NYWtlZmlsZQppbmRleCAzNTI4ODVj YjRkMDcuLjgwZjU4YTM1Nzg3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNw bGF5L2RjL2kyY2F1eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvaTJjYXV4L01ha2VmaWxlCkBAIC0zMCw2ICszMCwxOCBAQCBBTURfREFMX0kyQ0FVWCA9ICQo YWRkcHJlZml4ICQoQU1EREFMUEFUSCkvZGMvaTJjYXV4LywkKEkyQ0FVWCkpCiAKIEFNRF9ESVNQ TEFZX0ZJTEVTICs9ICQoQU1EX0RBTF9JMkNBVVgpCiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KyMgRENFIDZ4IGZhbWlseQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZkZWYgQ09ORklHX0RS TV9BTURfRENfU0kKK0kyQ0FVWF9EQ0U2MCA9IGkyY2F1eF9kY2U2MC5vIGkyY19od19lbmdpbmVf ZGNlNjAubyBcCisJaTJjX3N3X2VuZ2luZV9kY2U2MC5vCisKK0FNRF9EQUxfSTJDQVVYX0RDRTYw ID0gJChhZGRwcmVmaXggJChBTUREQUxQQVRIKS9kYy9pMmNhdXgvZGNlNjAvLCQoSTJDQVVYX0RD RTYwKSkKKworQU1EX0RJU1BMQVlfRklMRVMgKz0gJChBTURfREFMX0kyQ0FVWF9EQ0U2MCkKK2Vu ZGlmCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgRENFIDh4IGZhbWlseQogIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2Rj L2kyY2F1eC9kY2U2MC9pMmNfaHdfZW5naW5lX2RjZTYwLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvZGMvaTJjYXV4L2RjZTYwL2kyY19od19lbmdpbmVfZGNlNjAuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE5NDVlMDBjZTkxMwotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pMmNhdXgvZGNlNjAvaTJjX2h3 X2VuZ2luZV9kY2U2MC5jCkBAIC0wLDAgKzEsODc1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIt MTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVk ZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFS SVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1 dGhvcnM6IEFNRAorICoKKyAqLworCisjaW5jbHVkZSAiZG1fc2VydmljZXMuaCIKKworLyoKKyAq IFByZS1yZXF1aXNpdGVzOiBoZWFkZXJzIHJlcXVpcmVkIGJ5IGhlYWRlciBvZiB0aGlzIHVuaXQK KyAqLworI2luY2x1ZGUgImluY2x1ZGUvaTJjYXV4X2ludGVyZmFjZS5oIgorI2luY2x1ZGUgIi4u L2VuZ2luZS5oIgorI2luY2x1ZGUgIi4uL2kyY19lbmdpbmUuaCIKKyNpbmNsdWRlICIuLi9pMmNf aHdfZW5naW5lLmgiCisjaW5jbHVkZSAiLi4vaTJjX2dlbmVyaWNfaHdfZW5naW5lLmgiCisvKgor ICogSGVhZGVyIG9mIHRoaXMgdW5pdAorICovCisKKyNpbmNsdWRlICJpMmNfaHdfZW5naW5lX2Rj ZTYwLmgiCisKKy8qCisgKiBQb3N0LXJlcXVpc2l0ZXM6IGhlYWRlcnMgcmVxdWlyZWQgYnkgdGhp cyB1bml0CisgKi8KKworI2luY2x1ZGUgImRjZS9kY2VfNl8wX2QuaCIKKyNpbmNsdWRlICJkY2Uv ZGNlXzZfMF9zaF9tYXNrLmgiCisvKgorICogVGhpcyB1bml0CisgKi8KKworZW51bSBkY19pMmNf c3RhdHVzIHsKKwlEQ19JMkNfU1RBVFVTX19EQ19JMkNfU1RBVFVTX0lETEUsCisJRENfSTJDX1NU QVRVU19fRENfSTJDX1NUQVRVU19VU0VEX0JZX1NXLAorCURDX0kyQ19TVEFUVVNfX0RDX0kyQ19T VEFUVVNfVVNFRF9CWV9IVworfTsKKworZW51bSBkY19pMmNfYXJiaXRyYXRpb24geworCURDX0ky Q19BUkJJVFJBVElPTl9fRENfSTJDX1NXX1BSSU9SSVRZX05PUk1BTCwKKwlEQ19JMkNfQVJCSVRS QVRJT05fX0RDX0kyQ19TV19QUklPUklUWV9ISUdICit9OworCitlbnVtIHsKKwkvKiBObyB0aW1l b3V0IGluIEhXCisJICogKHRpbWVvdXQgaW1wbGVtZW50ZWQgaW4gU1cgYnkgcXVlcnlpbmcgc3Rh dHVzKSAqLworCUkyQ19TRVRVUF9USU1FX0xJTUlUID0gMjU1LAorCUkyQ19IV19CVUZGRVJfU0la RSA9IDE0NAorfTsKKworLyoKKyAqIEBicmllZgorICogQ2FzdCAnc3RydWN0IGkyY19od19lbmdp bmUgKicKKyAqIHRvICdzdHJ1Y3QgaTJjX2h3X2VuZ2luZV9kY2U2MCAqJworICovCisjZGVmaW5l IEZST01fSTJDX0hXX0VOR0lORShwdHIpIFwKKwljb250YWluZXJfb2YoKHB0ciksIHN0cnVjdCBp MmNfaHdfZW5naW5lX2RjZTYwLCBiYXNlKQorCisvKgorICogQGJyaWVmCisgKiBDYXN0IHBvaW50 ZXIgdG8gJ3N0cnVjdCBpMmNfZW5naW5lIConCisgKiB0byBwb2ludGVyIHRvICdzdHJ1Y3QgaTJj X2h3X2VuZ2luZV9kY2U2MCAqJworICovCisjZGVmaW5lIEZST01fSTJDX0VOR0lORShwdHIpIFwK KwlGUk9NX0kyQ19IV19FTkdJTkUoY29udGFpbmVyX29mKChwdHIpLCBzdHJ1Y3QgaTJjX2h3X2Vu Z2luZSwgYmFzZSkpCisKKy8qCisgKiBAYnJpZWYKKyAqIENhc3QgcG9pbnRlciB0byAnc3RydWN0 IGVuZ2luZSAqJworICogdG8gJ3BvaW50ZXIgdG8gc3RydWN0IGkyY19od19lbmdpbmVfZGNlNjAg KicKKyAqLworI2RlZmluZSBGUk9NX0VOR0lORShwdHIpIFwKKwlGUk9NX0kyQ19FTkdJTkUoY29u dGFpbmVyX29mKChwdHIpLCBzdHJ1Y3QgaTJjX2VuZ2luZSwgYmFzZSkpCisKK3N0YXRpYyB2b2lk IGRpc2FibGVfaTJjX2h3X2VuZ2luZSgKKwlzdHJ1Y3QgaTJjX2h3X2VuZ2luZV9kY2U2MCAqZW5n aW5lKQoreworCWNvbnN0IHVpbnQzMl90IGFkZHIgPSBlbmdpbmUtPmFkZHIuRENfSTJDX0REQ1hf U0VUVVA7CisJdWludDMyX3QgdmFsdWUgPSAwOworCisJc3RydWN0IGRjX2NvbnRleHQgKmN0eCA9 IE5VTEw7CisKKwljdHggPSBlbmdpbmUtPmJhc2UuYmFzZS5iYXNlLmN0eDsKKworCXZhbHVlID0g ZG1fcmVhZF9yZWcoY3R4LCBhZGRyKTsKKworCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCXZhbHVl LAorCQkwLAorCQlEQ19JMkNfRERDMV9TRVRVUCwKKwkJRENfSTJDX0REQzFfRU5BQkxFKTsKKwor CWRtX3dyaXRlX3JlZyhjdHgsIGFkZHIsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFz ZV9lbmdpbmUoCisJc3RydWN0IGVuZ2luZSAqZW5naW5lKQoreworCXN0cnVjdCBpMmNfaHdfZW5n aW5lX2RjZTYwICpod19lbmdpbmUgPSBGUk9NX0VOR0lORShlbmdpbmUpOworCisJc3RydWN0IGky Y19lbmdpbmUgKmJhc2UgPSBOVUxMOworCWJvb2wgc2FmZV90b19yZXNldDsKKwl1aW50MzJfdCB2 YWx1ZSA9IDA7CisKKwliYXNlID0gJmh3X2VuZ2luZS0+YmFzZS5iYXNlOworCisJLyogUmVzdG9y ZSBvcmlnaW5hbCBIVyBlbmdpbmUgc3BlZWQgKi8KKworCWJhc2UtPmZ1bmNzLT5zZXRfc3BlZWQo YmFzZSwgaHdfZW5naW5lLT5iYXNlLm9yaWdpbmFsX3NwZWVkKTsKKworCS8qIFJlbGVhc2UgSTJD ICovCisJeworCQl2YWx1ZSA9IGRtX3JlYWRfcmVnKGVuZ2luZS0+Y3R4LCBtbURDX0kyQ19BUkJJ VFJBVElPTik7CisKKwkJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJCQl2YWx1ZSwKKwkJCQkxLAor CQkJCURDX0kyQ19BUkJJVFJBVElPTiwKKwkJCQlEQ19JMkNfU1dfRE9ORV9VU0lOR19JMkNfUkVH KTsKKworCQlkbV93cml0ZV9yZWcoZW5naW5lLT5jdHgsIG1tRENfSTJDX0FSQklUUkFUSU9OLCB2 YWx1ZSk7CisJfQorCisJLyogUmVzZXQgSFcgZW5naW5lICovCisJeworCQl1aW50MzJfdCBpMmNf c3dfc3RhdHVzID0gMDsKKworCQl2YWx1ZSA9IGRtX3JlYWRfcmVnKGVuZ2luZS0+Y3R4LCBtbURD X0kyQ19TV19TVEFUVVMpOworCisJCWkyY19zd19zdGF0dXMgPSBnZXRfcmVnX2ZpZWxkX3ZhbHVl KAorCQkJCXZhbHVlLAorCQkJCURDX0kyQ19TV19TVEFUVVMsCisJCQkJRENfSTJDX1NXX1NUQVRV Uyk7CisJCS8qIGlmIHVzZWQgYnkgU1csIHNhZmUgdG8gcmVzZXQgKi8KKwkJc2FmZV90b19yZXNl dCA9IChpMmNfc3dfc3RhdHVzID09IDEpOworCX0KKwl7CisJCXZhbHVlID0gZG1fcmVhZF9yZWco ZW5naW5lLT5jdHgsIG1tRENfSTJDX0NPTlRST0wpOworCisJCWlmIChzYWZlX3RvX3Jlc2V0KQor CQkJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJCQl2YWx1ZSwKKwkJCQkxLAorCQkJCURDX0kyQ19D T05UUk9MLAorCQkJCURDX0kyQ19TT0ZUX1JFU0VUKTsKKworCQlzZXRfcmVnX2ZpZWxkX3ZhbHVl KAorCQkJdmFsdWUsCisJCQkxLAorCQkJRENfSTJDX0NPTlRST0wsCisJCQlEQ19JMkNfU1dfU1RB VFVTX1JFU0VUKTsKKworCQlkbV93cml0ZV9yZWcoZW5naW5lLT5jdHgsIG1tRENfSTJDX0NPTlRS T0wsIHZhbHVlKTsKKwl9CisKKwkvKiBIVyBJMmMgZW5naW5lIC0gY2xvY2sgZ2F0aW5nIGZlYXR1 cmUgKi8KKwlpZiAoIWh3X2VuZ2luZS0+ZW5naW5lX2tlZXBfcG93ZXJfdXBfY291bnQpCisJCWRp c2FibGVfaTJjX2h3X2VuZ2luZShod19lbmdpbmUpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cnVj dCgKKwlzdHJ1Y3QgaTJjX2h3X2VuZ2luZV9kY2U2MCAqZW5naW5lKQoreworCWRhbF9pMmNfaHdf ZW5naW5lX2Rlc3RydWN0KCZlbmdpbmUtPmJhc2UpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95 KAorCXN0cnVjdCBpMmNfZW5naW5lICoqaTJjX2VuZ2luZSkKK3sKKwlzdHJ1Y3QgaTJjX2h3X2Vu Z2luZV9kY2U2MCAqZW5naW5lID0gRlJPTV9JMkNfRU5HSU5FKCppMmNfZW5naW5lKTsKKworCWRl c3RydWN0KGVuZ2luZSk7CisKKwlrZnJlZShlbmdpbmUpOworCisJKmkyY19lbmdpbmUgPSBOVUxM OworfQorCitzdGF0aWMgYm9vbCBzZXR1cF9lbmdpbmUoCisJc3RydWN0IGkyY19lbmdpbmUgKmky Y19lbmdpbmUpCit7CisJdWludDMyX3QgdmFsdWUgPSAwOworCXN0cnVjdCBpMmNfaHdfZW5naW5l X2RjZTYwICplbmdpbmUgPSBGUk9NX0kyQ19FTkdJTkUoaTJjX2VuZ2luZSk7CisKKwkvKiBQcm9n cmFtIHBpbiBzZWxlY3QgKi8KKwl7CisJCWNvbnN0IHVpbnQzMl90IGFkZHIgPSBtbURDX0kyQ19D T05UUk9MOworCisJCXZhbHVlID0gZG1fcmVhZF9yZWcoaTJjX2VuZ2luZS0+YmFzZS5jdHgsIGFk ZHIpOworCisJCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCQl2YWx1ZSwKKwkJCTAsCisJCQlEQ19J MkNfQ09OVFJPTCwKKwkJCURDX0kyQ19HTyk7CisKKwkJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJ CXZhbHVlLAorCQkJMCwKKwkJCURDX0kyQ19DT05UUk9MLAorCQkJRENfSTJDX1NPRlRfUkVTRVQp OworCisJCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCQl2YWx1ZSwKKwkJCTAsCisJCQlEQ19JMkNf Q09OVFJPTCwKKwkJCURDX0kyQ19TRU5EX1JFU0VUKTsKKworCQlzZXRfcmVnX2ZpZWxkX3ZhbHVl KAorCQkJdmFsdWUsCisJCQkwLAorCQkJRENfSTJDX0NPTlRST0wsCisJCQlEQ19JMkNfU1dfU1RB VFVTX1JFU0VUKTsKKworCQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJdmFsdWUsCisJCQkwLAor CQkJRENfSTJDX0NPTlRST0wsCisJCQlEQ19JMkNfVFJBTlNBQ1RJT05fQ09VTlQpOworCisJCXNl dF9yZWdfZmllbGRfdmFsdWUoCisJCQl2YWx1ZSwKKwkJCWVuZ2luZS0+ZW5naW5lX2lkLAorCQkJ RENfSTJDX0NPTlRST0wsCisJCQlEQ19JMkNfRERDX1NFTEVDVCk7CisKKwkJZG1fd3JpdGVfcmVn KGkyY19lbmdpbmUtPmJhc2UuY3R4LCBhZGRyLCB2YWx1ZSk7CisJfQorCisJLyogUHJvZ3JhbSB0 aW1lIGxpbWl0ICovCisJeworCQljb25zdCB1aW50MzJfdCBhZGRyID0gZW5naW5lLT5hZGRyLkRD X0kyQ19ERENYX1NFVFVQOworCisJCXZhbHVlID0gZG1fcmVhZF9yZWcoaTJjX2VuZ2luZS0+YmFz ZS5jdHgsIGFkZHIpOworCisJCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCQl2YWx1ZSwKKwkJCUky Q19TRVRVUF9USU1FX0xJTUlULAorCQkJRENfSTJDX0REQzFfU0VUVVAsCisJCQlEQ19JMkNfRERD MV9USU1FX0xJTUlUKTsKKworCQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJdmFsdWUsCisJCQkx LAorCQkJRENfSTJDX0REQzFfU0VUVVAsCisJCQlEQ19JMkNfRERDMV9FTkFCTEUpOworCisJCWRt X3dyaXRlX3JlZyhpMmNfZW5naW5lLT5iYXNlLmN0eCwgYWRkciwgdmFsdWUpOworCX0KKworCS8q IFByb2dyYW0gSFcgcHJpb3JpdHkKKwkgKiBzZXQgdG8gSGlnaCAtIGludGVycnVwdCBzb2Z0d2Fy ZSBJMkMgYXQgYW55IHRpbWUKKwkgKiBFbmFibGUgcmVzdGFydCBvZiBTVyBJMkMgdGhhdCB3YXMg aW50ZXJydXB0ZWQgYnkgSFcKKwkgKiBkaXNhYmxlIHF1ZXVpbmcgb2Ygc29mdHdhcmUgd2hpbGUg STJDIGlzIGluIHVzZSBieSBIVyAqLworCXsKKwkJdmFsdWUgPSBkbV9yZWFkX3JlZyhpMmNfZW5n aW5lLT5iYXNlLmN0eCwKKwkJCQltbURDX0kyQ19BUkJJVFJBVElPTik7CisKKwkJc2V0X3JlZ19m aWVsZF92YWx1ZSgKKwkJCXZhbHVlLAorCQkJMCwKKwkJCURDX0kyQ19BUkJJVFJBVElPTiwKKwkJ CURDX0kyQ19OT19RVUVVRURfU1dfR08pOworCisJCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCQl2 YWx1ZSwKKwkJCURDX0kyQ19BUkJJVFJBVElPTl9fRENfSTJDX1NXX1BSSU9SSVRZX05PUk1BTCwK KwkJCURDX0kyQ19BUkJJVFJBVElPTiwKKwkJCURDX0kyQ19TV19QUklPUklUWSk7CisKKwkJZG1f d3JpdGVfcmVnKGkyY19lbmdpbmUtPmJhc2UuY3R4LAorCQkJCW1tRENfSTJDX0FSQklUUkFUSU9O LCB2YWx1ZSk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBnZXRf c3BlZWQoCisJY29uc3Qgc3RydWN0IGkyY19lbmdpbmUgKmkyY19lbmdpbmUpCit7CisJY29uc3Qg c3RydWN0IGkyY19od19lbmdpbmVfZGNlNjAgKmVuZ2luZSA9IEZST01fSTJDX0VOR0lORShpMmNf ZW5naW5lKTsKKworCWNvbnN0IHVpbnQzMl90IGFkZHIgPSBlbmdpbmUtPmFkZHIuRENfSTJDX0RE Q1hfU1BFRUQ7CisKKwl1aW50MzJfdCBwcmVfc2NhbGUgPSAwOworCisJdWludDMyX3QgdmFsdWUg PSBkbV9yZWFkX3JlZyhpMmNfZW5naW5lLT5iYXNlLmN0eCwgYWRkcik7CisKKwlwcmVfc2NhbGUg PSBnZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJdmFsdWUsCisJCQlEQ19JMkNfRERDMV9TUEVFRCwK KwkJCURDX0kyQ19EREMxX1BSRVNDQUxFKTsKKworCS8qIFthbmF1bW92XSBpdCBzZWVtcyBmb2xs b3dpbmcgaXMgdW5uZWNlc3NhcnkgKi8KKwkvKkFTU0VSVCh2YWx1ZS5iaXRzLkRDX0kyQ19EREMx X1BSRVNDQUxFKTsqLworCisJcmV0dXJuIHByZV9zY2FsZSA/CisJCWVuZ2luZS0+cmVmZXJlbmNl X2ZyZXF1ZW5jeSAvIHByZV9zY2FsZSA6CisJCWVuZ2luZS0+YmFzZS5kZWZhdWx0X3NwZWVkOwor fQorCitzdGF0aWMgdm9pZCBzZXRfc3BlZWQoCisJc3RydWN0IGkyY19lbmdpbmUgKmkyY19lbmdp bmUsCisJdWludDMyX3Qgc3BlZWQpCit7CisJc3RydWN0IGkyY19od19lbmdpbmVfZGNlNjAgKmVu Z2luZSA9IEZST01fSTJDX0VOR0lORShpMmNfZW5naW5lKTsKKworCWlmIChzcGVlZCkgeworCQlj b25zdCB1aW50MzJfdCBhZGRyID0gZW5naW5lLT5hZGRyLkRDX0kyQ19ERENYX1NQRUVEOworCisJ CXVpbnQzMl90IHZhbHVlID0gZG1fcmVhZF9yZWcoaTJjX2VuZ2luZS0+YmFzZS5jdHgsIGFkZHIp OworCisJCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCQl2YWx1ZSwKKwkJCWVuZ2luZS0+cmVmZXJl bmNlX2ZyZXF1ZW5jeSAvIHNwZWVkLAorCQkJRENfSTJDX0REQzFfU1BFRUQsCisJCQlEQ19JMkNf RERDMV9QUkVTQ0FMRSk7CisKKwkJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJCXZhbHVlLAorCQkJ MiwKKwkJCURDX0kyQ19EREMxX1NQRUVELAorCQkJRENfSTJDX0REQzFfVEhSRVNIT0xEKTsKKwor CQlkbV93cml0ZV9yZWcoaTJjX2VuZ2luZS0+YmFzZS5jdHgsIGFkZHIsIHZhbHVlKTsKKwl9Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9od19lbmdpbmUoc3RydWN0IGVuZ2luZSAqZW5n aW5lKQoreworCXVpbnQzMl90IHZhbHVlID0gZG1fcmVhZF9yZWcoZW5naW5lLT5jdHgsIG1tRENf STJDX0NPTlRST0wpOworCisJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJdmFsdWUsCisJCTEsCisJ CURDX0kyQ19DT05UUk9MLAorCQlEQ19JMkNfU09GVF9SRVNFVCk7CisKKwlzZXRfcmVnX2ZpZWxk X3ZhbHVlKAorCQl2YWx1ZSwKKwkJMSwKKwkJRENfSTJDX0NPTlRST0wsCisJCURDX0kyQ19TV19T VEFUVVNfUkVTRVQpOworCisJZG1fd3JpdGVfcmVnKGVuZ2luZS0+Y3R4LCBtbURDX0kyQ19DT05U Uk9MLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBib29sIGlzX2h3X2J1c3koc3RydWN0IGVuZ2luZSAq ZW5naW5lKQoreworCXVpbnQzMl90IGkyY19zd19zdGF0dXMgPSAwOworCisJdWludDMyX3QgdmFs dWUgPSBkbV9yZWFkX3JlZyhlbmdpbmUtPmN0eCwgbW1EQ19JMkNfU1dfU1RBVFVTKTsKKworCWky Y19zd19zdGF0dXMgPSBnZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJdmFsdWUsCisJCQlEQ19JMkNf U1dfU1RBVFVTLAorCQkJRENfSTJDX1NXX1NUQVRVUyk7CisKKwlpZiAoaTJjX3N3X3N0YXR1cyA9 PSBEQ19JMkNfU1RBVFVTX19EQ19JMkNfU1RBVFVTX0lETEUpCisJCXJldHVybiBmYWxzZTsKKwor CXJlc2V0X2h3X2VuZ2luZShlbmdpbmUpOworCisJdmFsdWUgPSBkbV9yZWFkX3JlZyhlbmdpbmUt PmN0eCwgbW1EQ19JMkNfU1dfU1RBVFVTKTsKKworCWkyY19zd19zdGF0dXMgPSBnZXRfcmVnX2Zp ZWxkX3ZhbHVlKAorCQkJdmFsdWUsCisJCQlEQ19JMkNfU1dfU1RBVFVTLAorCQkJRENfSTJDX1NX X1NUQVRVUyk7CisKKwlyZXR1cm4gaTJjX3N3X3N0YXR1cyAhPSBEQ19JMkNfU1RBVFVTX19EQ19J MkNfU1RBVFVTX0lETEU7Cit9CisKKy8qCisgKiBAYnJpZWYKKyAqIERDX0dQSU9fRERDIE1NIHJl Z2lzdGVyIG9mZnNldHMKKyAqLworc3RhdGljIGNvbnN0IHVpbnQzMl90IHRyYW5zYWN0aW9uX2Fk ZHJbXSA9IHsKKwltbURDX0kyQ19UUkFOU0FDVElPTjAsCisJbW1EQ19JMkNfVFJBTlNBQ1RJT04x LAorCW1tRENfSTJDX1RSQU5TQUNUSU9OMiwKKwltbURDX0kyQ19UUkFOU0FDVElPTjMKK307CisK K3N0YXRpYyBib29sIHByb2Nlc3NfdHJhbnNhY3Rpb24oCisJc3RydWN0IGkyY19od19lbmdpbmVf ZGNlNjAgKmVuZ2luZSwKKwlzdHJ1Y3QgaTJjX3JlcXVlc3RfdHJhbnNhY3Rpb25fZGF0YSAqcmVx dWVzdCkKK3sKKwl1aW50MzJfdCBsZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7CisJdWludDhfdCAq YnVmZmVyID0gcmVxdWVzdC0+ZGF0YTsKKworCWJvb2wgbGFzdF90cmFuc2FjdGlvbiA9IGZhbHNl OworCXVpbnQzMl90IHZhbHVlID0gMDsKKworCXN0cnVjdCBkY19jb250ZXh0ICpjdHggPSBOVUxM OworCisJY3R4ID0gZW5naW5lLT5iYXNlLmJhc2UuYmFzZS5jdHg7CisKKwl7CisJCWNvbnN0IHVp bnQzMl90IGFkZHIgPQorCQkJdHJhbnNhY3Rpb25fYWRkcltlbmdpbmUtPnRyYW5zYWN0aW9uX2Nv dW50XTsKKworCQl2YWx1ZSA9IGRtX3JlYWRfcmVnKGN0eCwgYWRkcik7CisKKwkJc2V0X3JlZ19m aWVsZF92YWx1ZSgKKwkJCXZhbHVlLAorCQkJMSwKKwkJCURDX0kyQ19UUkFOU0FDVElPTjAsCisJ CQlEQ19JMkNfU1RPUF9PTl9OQUNLMCk7CisKKwkJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJCXZh bHVlLAorCQkJMSwKKwkJCURDX0kyQ19UUkFOU0FDVElPTjAsCisJCQlEQ19JMkNfU1RBUlQwKTsK KworCQlpZiAoKGVuZ2luZS0+dHJhbnNhY3Rpb25fY291bnQgPT0gMykgfHwKKwkJKHJlcXVlc3Qt PmFjdGlvbiA9PSBJMkNBVVhfVFJBTlNBQ1RJT05fQUNUSU9OX0kyQ19XUklURSkgfHwKKwkJKHJl cXVlc3QtPmFjdGlvbiAmIEkyQ0FVWF9UUkFOU0FDVElPTl9BQ1RJT05fSTJDX1JFQUQpKSB7CisK KwkJCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCQkJdmFsdWUsCisJCQkJMSwKKwkJCQlEQ19JMkNf VFJBTlNBQ1RJT04wLAorCQkJCURDX0kyQ19TVE9QMCk7CisKKwkJCWxhc3RfdHJhbnNhY3Rpb24g PSB0cnVlOworCQl9IGVsc2UKKwkJCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCQkJdmFsdWUsCisJ CQkJMCwKKwkJCQlEQ19JMkNfVFJBTlNBQ1RJT04wLAorCQkJCURDX0kyQ19TVE9QMCk7CisKKwkJ c2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJCXZhbHVlLAorCQkJKDAgIT0gKHJlcXVlc3QtPmFjdGlv biAmCisJCQkJCUkyQ0FVWF9UUkFOU0FDVElPTl9BQ1RJT05fSTJDX1JFQUQpKSwKKwkJCURDX0ky Q19UUkFOU0FDVElPTjAsCisJCQlEQ19JMkNfUlcwKTsKKworCQlzZXRfcmVnX2ZpZWxkX3ZhbHVl KAorCQkJdmFsdWUsCisJCQlsZW5ndGgsCisJCQlEQ19JMkNfVFJBTlNBQ1RJT04wLAorCQkJRENf STJDX0NPVU5UMCk7CisKKwkJZG1fd3JpdGVfcmVnKGN0eCwgYWRkciwgdmFsdWUpOworCX0KKwor CS8qIFdyaXRlIHRoZSBJMkMgYWRkcmVzcyBhbmQgSTJDIGRhdGEKKwkgKiBpbnRvIHRoZSBoYXJk d2FyZSBjaXJjdWxhciBidWZmZXIsIG9uZSBieXRlIHBlciBlbnRyeS4KKwkgKiBBcyBhbiBleGFt cGxlLCB0aGUgNy1iaXQgSTJDIHNsYXZlIGFkZHJlc3MgZm9yIENSVCBtb25pdG9yCisJICogZm9y IHJlYWRpbmcgRERDL0VESUQgaW5mb3JtYXRpb24gaXMgMGIxMDEwMDAxLgorCSAqIEZvciBhbiBJ MkMgc2VuZCBvcGVyYXRpb24sIHRoZSBMU0IgbXVzdCBiZSBwcm9ncmFtbWVkIHRvIDA7CisJICog Zm9yIEkyQyByZWNlaXZlIG9wZXJhdGlvbiwgdGhlIExTQiBtdXN0IGJlIHByb2dyYW1tZWQgdG8g MS4gKi8KKworCXsKKwkJdmFsdWUgPSAwOworCisJCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCQl2 YWx1ZSwKKwkJCWZhbHNlLAorCQkJRENfSTJDX0RBVEEsCisJCQlEQ19JMkNfREFUQV9SVyk7CisK KwkJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJCXZhbHVlLAorCQkJcmVxdWVzdC0+YWRkcmVzcywK KwkJCURDX0kyQ19EQVRBLAorCQkJRENfSTJDX0RBVEEpOworCisJCWlmIChlbmdpbmUtPnRyYW5z YWN0aW9uX2NvdW50ID09IDApIHsKKwkJCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCQkJdmFsdWUs CisJCQkJMCwKKwkJCQlEQ19JMkNfREFUQSwKKwkJCQlEQ19JMkNfSU5ERVgpOworCisJCQkvKmVu YWJsZSBpbmRleCB3cml0ZSovCisJCQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJCXZhbHVlLAor CQkJCTEsCisJCQkJRENfSTJDX0RBVEEsCisJCQkJRENfSTJDX0lOREVYX1dSSVRFKTsKKwkJfQor CisJCWRtX3dyaXRlX3JlZyhjdHgsIG1tRENfSTJDX0RBVEEsIHZhbHVlKTsKKworCQlpZiAoIShy ZXF1ZXN0LT5hY3Rpb24gJiBJMkNBVVhfVFJBTlNBQ1RJT05fQUNUSU9OX0kyQ19SRUFEKSkgewor CisJCQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJCXZhbHVlLAorCQkJCTAsCisJCQkJRENfSTJD X0RBVEEsCisJCQkJRENfSTJDX0lOREVYX1dSSVRFKTsKKworCQkJd2hpbGUgKGxlbmd0aCkgewor CisJCQkJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJCQkJdmFsdWUsCisJCQkJCSpidWZmZXIrKywK KwkJCQkJRENfSTJDX0RBVEEsCisJCQkJCURDX0kyQ19EQVRBKTsKKworCQkJCWRtX3dyaXRlX3Jl ZyhjdHgsIG1tRENfSTJDX0RBVEEsIHZhbHVlKTsKKwkJCQktLWxlbmd0aDsKKwkJCX0KKwkJfQor CX0KKworCSsrZW5naW5lLT50cmFuc2FjdGlvbl9jb3VudDsKKwllbmdpbmUtPmJ1ZmZlcl91c2Vk X2J5dGVzICs9IGxlbmd0aCArIDE7CisKKwlyZXR1cm4gbGFzdF90cmFuc2FjdGlvbjsKK30KKwor c3RhdGljIHZvaWQgZXhlY3V0ZV90cmFuc2FjdGlvbigKKwlzdHJ1Y3QgaTJjX2h3X2VuZ2luZV9k Y2U2MCAqZW5naW5lKQoreworCXVpbnQzMl90IHZhbHVlID0gMDsKKwlzdHJ1Y3QgZGNfY29udGV4 dCAqY3R4ID0gTlVMTDsKKworCWN0eCA9IGVuZ2luZS0+YmFzZS5iYXNlLmJhc2UuY3R4OworCisJ eworCQljb25zdCB1aW50MzJfdCBhZGRyID0gZW5naW5lLT5hZGRyLkRDX0kyQ19ERENYX1NFVFVQ OworCisJCXZhbHVlID0gZG1fcmVhZF9yZWcoY3R4LCBhZGRyKTsKKworCQlzZXRfcmVnX2ZpZWxk X3ZhbHVlKAorCQkJdmFsdWUsCisJCQkwLAorCQkJRENfSTJDX0REQzFfU0VUVVAsCisJCQlEQ19J MkNfRERDMV9EQVRBX0RSSVZFX0VOKTsKKworCQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJdmFs dWUsCisJCQkwLAorCQkJRENfSTJDX0REQzFfU0VUVVAsCisJCQlEQ19JMkNfRERDMV9DTEtfRFJJ VkVfRU4pOworCisJCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCQl2YWx1ZSwKKwkJCTAsCisJCQlE Q19JMkNfRERDMV9TRVRVUCwKKwkJCURDX0kyQ19EREMxX0RBVEFfRFJJVkVfU0VMKTsKKworCQlz ZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJdmFsdWUsCisJCQkwLAorCQkJRENfSTJDX0REQzFfU0VU VVAsCisJCQlEQ19JMkNfRERDMV9JTlRSQV9UUkFOU0FDVElPTl9ERUxBWSk7CisKKwkJc2V0X3Jl Z19maWVsZF92YWx1ZSgKKwkJCXZhbHVlLAorCQkJMCwKKwkJCURDX0kyQ19EREMxX1NFVFVQLAor CQkJRENfSTJDX0REQzFfSU5UUkFfQllURV9ERUxBWSk7CisKKwkJZG1fd3JpdGVfcmVnKGN0eCwg YWRkciwgdmFsdWUpOworCX0KKworCXsKKwkJY29uc3QgdWludDMyX3QgYWRkciA9IG1tRENfSTJD X0NPTlRST0w7CisKKwkJdmFsdWUgPSBkbV9yZWFkX3JlZyhjdHgsIGFkZHIpOworCisJCXNldF9y ZWdfZmllbGRfdmFsdWUoCisJCQl2YWx1ZSwKKwkJCTAsCisJCQlEQ19JMkNfQ09OVFJPTCwKKwkJ CURDX0kyQ19TT0ZUX1JFU0VUKTsKKworCQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJdmFsdWUs CisJCQkwLAorCQkJRENfSTJDX0NPTlRST0wsCisJCQlEQ19JMkNfU1dfU1RBVFVTX1JFU0VUKTsK KworCQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJdmFsdWUsCisJCQkwLAorCQkJRENfSTJDX0NP TlRST0wsCisJCQlEQ19JMkNfU0VORF9SRVNFVCk7CisKKwkJc2V0X3JlZ19maWVsZF92YWx1ZSgK KwkJCXZhbHVlLAorCQkJMCwKKwkJCURDX0kyQ19DT05UUk9MLAorCQkJRENfSTJDX0dPKTsKKwor CQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJdmFsdWUsCisJCQllbmdpbmUtPnRyYW5zYWN0aW9u X2NvdW50IC0gMSwKKwkJCURDX0kyQ19DT05UUk9MLAorCQkJRENfSTJDX1RSQU5TQUNUSU9OX0NP VU5UKTsKKworCQlkbV93cml0ZV9yZWcoY3R4LCBhZGRyLCB2YWx1ZSk7CisJfQorCisJLyogc3Rh cnQgSTJDIHRyYW5zZmVyICovCisJeworCQljb25zdCB1aW50MzJfdCBhZGRyID0gbW1EQ19JMkNf Q09OVFJPTDsKKworCQl2YWx1ZQk9IGRtX3JlYWRfcmVnKGN0eCwgYWRkcik7CisKKwkJc2V0X3Jl Z19maWVsZF92YWx1ZSgKKwkJCXZhbHVlLAorCQkJMSwKKwkJCURDX0kyQ19DT05UUk9MLAorCQkJ RENfSTJDX0dPKTsKKworCQlkbV93cml0ZV9yZWcoY3R4LCBhZGRyLCB2YWx1ZSk7CisJfQorCisJ LyogYWxsIHRyYW5zYWN0aW9ucyB3ZXJlIGV4ZWN1dGVkIGFuZCBIVyBidWZmZXIgYmVjYW1lIGVt cHR5CisJICogKGV2ZW4gdGhvdWdoIGl0IGFjdHVhbGx5IGhhcHBlbnMgd2hlbiBzdGF0dXMgYmVj b21lcyBET05FKSAqLworCWVuZ2luZS0+dHJhbnNhY3Rpb25fY291bnQgPSAwOworCWVuZ2luZS0+ YnVmZmVyX3VzZWRfYnl0ZXMgPSAwOworfQorCitzdGF0aWMgdm9pZCBzdWJtaXRfY2hhbm5lbF9y ZXF1ZXN0KAorCXN0cnVjdCBpMmNfZW5naW5lICplbmdpbmUsCisJc3RydWN0IGkyY19yZXF1ZXN0 X3RyYW5zYWN0aW9uX2RhdGEgKnJlcXVlc3QpCit7CisJcmVxdWVzdC0+c3RhdHVzID0gSTJDX0NI QU5ORUxfT1BFUkFUSU9OX1NVQ0NFRURFRDsKKworCWlmICghcHJvY2Vzc190cmFuc2FjdGlvbihG Uk9NX0kyQ19FTkdJTkUoZW5naW5lKSwgcmVxdWVzdCkpCisJCXJldHVybjsKKworCWlmIChpc19o d19idXN5KCZlbmdpbmUtPmJhc2UpKSB7CisJCXJlcXVlc3QtPnN0YXR1cyA9IEkyQ19DSEFOTkVM X09QRVJBVElPTl9FTkdJTkVfQlVTWTsKKwkJcmV0dXJuOworCX0KKworCWV4ZWN1dGVfdHJhbnNh Y3Rpb24oRlJPTV9JMkNfRU5HSU5FKGVuZ2luZSkpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNz X2NoYW5uZWxfcmVwbHkoCisJc3RydWN0IGkyY19lbmdpbmUgKmVuZ2luZSwKKwlzdHJ1Y3QgaTJj X3JlcGx5X3RyYW5zYWN0aW9uX2RhdGEgKnJlcGx5KQoreworCXVpbnQzMl90IGxlbmd0aCA9IHJl cGx5LT5sZW5ndGg7CisJdWludDhfdCAqYnVmZmVyID0gcmVwbHktPmRhdGE7CisKKwl1aW50MzJf dCB2YWx1ZSA9IDA7CisKKwkvKnNldCBpbmRleCovCisJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJ dmFsdWUsCisJCWxlbmd0aCAtIDEsCisJCURDX0kyQ19EQVRBLAorCQlEQ19JMkNfSU5ERVgpOwor CisJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJdmFsdWUsCisJCTEsCisJCURDX0kyQ19EQVRBLAor CQlEQ19JMkNfREFUQV9SVyk7CisKKwlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQl2YWx1ZSwKKwkJ MSwKKwkJRENfSTJDX0RBVEEsCisJCURDX0kyQ19JTkRFWF9XUklURSk7CisKKwlkbV93cml0ZV9y ZWcoZW5naW5lLT5iYXNlLmN0eCwgbW1EQ19JMkNfREFUQSwgdmFsdWUpOworCisJd2hpbGUgKGxl bmd0aCkgeworCQkvKiBhZnRlciByZWFkaW5nIHRoZSBzdGF0dXMsCisJCSAqIGlmIHRoZSBJMkMg b3BlcmF0aW9uIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseQorCQkgKiAoaS5lLiBEQ19JMkNfU1RBVFVT X0RPTkUgPSAxKSB0aGVuIHRoZSBJMkMgY29udHJvbGxlcgorCQkgKiBzaG91bGQgcmVhZCBkYXRh IGJ5dGVzIGZyb20gSTJDIGNpcmN1bGFyIGRhdGEgYnVmZmVyICovCisKKwkJdmFsdWUgPSBkbV9y ZWFkX3JlZyhlbmdpbmUtPmJhc2UuY3R4LCBtbURDX0kyQ19EQVRBKTsKKworCQkqYnVmZmVyKysg PSBnZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJCXZhbHVlLAorCQkJCURDX0kyQ19EQVRBLAorCQkJ CURDX0kyQ19EQVRBKTsKKworCQktLWxlbmd0aDsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIGkyY19j aGFubmVsX29wZXJhdGlvbl9yZXN1bHQgZ2V0X2NoYW5uZWxfc3RhdHVzKAorCXN0cnVjdCBpMmNf ZW5naW5lICplbmdpbmUsCisJdWludDhfdCAqcmV0dXJuZWRfYnl0ZXMpCit7CisJdWludDMyX3Qg aTJjX3N3X3N0YXR1cyA9IDA7CisJdWludDMyX3QgdmFsdWUgPSBkbV9yZWFkX3JlZyhlbmdpbmUt PmJhc2UuY3R4LCBtbURDX0kyQ19TV19TVEFUVVMpOworCisJaTJjX3N3X3N0YXR1cyA9IGdldF9y ZWdfZmllbGRfdmFsdWUoCisJCQl2YWx1ZSwKKwkJCURDX0kyQ19TV19TVEFUVVMsCisJCQlEQ19J MkNfU1dfU1RBVFVTKTsKKworCWlmIChpMmNfc3dfc3RhdHVzID09IERDX0kyQ19TVEFUVVNfX0RD X0kyQ19TVEFUVVNfVVNFRF9CWV9TVykKKwkJcmV0dXJuIEkyQ19DSEFOTkVMX09QRVJBVElPTl9F TkdJTkVfQlVTWTsKKwllbHNlIGlmICh2YWx1ZSAmIERDX0kyQ19TV19TVEFUVVNfX0RDX0kyQ19T V19TVE9QUEVEX09OX05BQ0tfTUFTSykKKwkJcmV0dXJuIEkyQ19DSEFOTkVMX09QRVJBVElPTl9O T19SRVNQT05TRTsKKwllbHNlIGlmICh2YWx1ZSAmIERDX0kyQ19TV19TVEFUVVNfX0RDX0kyQ19T V19USU1FT1VUX01BU0spCisJCXJldHVybiBJMkNfQ0hBTk5FTF9PUEVSQVRJT05fVElNRU9VVDsK KwllbHNlIGlmICh2YWx1ZSAmIERDX0kyQ19TV19TVEFUVVNfX0RDX0kyQ19TV19BQk9SVEVEX01B U0spCisJCXJldHVybiBJMkNfQ0hBTk5FTF9PUEVSQVRJT05fRkFJTEVEOworCWVsc2UgaWYgKHZh bHVlICYgRENfSTJDX1NXX1NUQVRVU19fRENfSTJDX1NXX0RPTkVfTUFTSykKKwkJcmV0dXJuIEky Q19DSEFOTkVMX09QRVJBVElPTl9TVUNDRUVERUQ7CisKKwkvKgorCSAqIHRoaXMgaXMgdGhlIGNh c2Ugd2hlbiBIVyB1c2VkIGZvciBjb21tdW5pY2F0aW9uLCBJMkNfU1dfU1RBVFVTCisJICogY291 bGQgYmUgemVybworCSAqLworCXJldHVybiBJMkNfQ0hBTk5FTF9PUEVSQVRJT05fU1VDQ0VFREVE OworfQorCitzdGF0aWMgdWludDMyX3QgZ2V0X2h3X2J1ZmZlcl9hdmFpbGFibGVfc2l6ZSgKKwlj b25zdCBzdHJ1Y3QgaTJjX2h3X2VuZ2luZSAqZW5naW5lKQoreworCXJldHVybiBJMkNfSFdfQlVG RkVSX1NJWkUgLQorCQlGUk9NX0kyQ19IV19FTkdJTkUoZW5naW5lKS0+YnVmZmVyX3VzZWRfYnl0 ZXM7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBnZXRfdHJhbnNhY3Rpb25fdGltZW91dCgKKwljb25z dCBzdHJ1Y3QgaTJjX2h3X2VuZ2luZSAqZW5naW5lLAorCXVpbnQzMl90IGxlbmd0aCkKK3sKKwl1 aW50MzJfdCBzcGVlZCA9IGVuZ2luZS0+YmFzZS5mdW5jcy0+Z2V0X3NwZWVkKCZlbmdpbmUtPmJh c2UpOworCisJdWludDMyX3QgcGVyaW9kX3RpbWVvdXQ7CisJdWludDMyX3QgbnVtX29mX2Nsb2Nr X3N0cmV0Y2hlczsKKworCWlmICghc3BlZWQpCisJCXJldHVybiAwOworCisJcGVyaW9kX3RpbWVv dXQgPSAoMTAwMCAqIFRSQU5TQUNUSU9OX1RJTUVPVVRfSU5fSTJDX0NMT0NLUykgLyBzcGVlZDsK KworCW51bV9vZl9jbG9ja19zdHJldGNoZXMgPSAxICsgKGxlbmd0aCA8PCAzKSArIDE7CisJbnVt X29mX2Nsb2NrX3N0cmV0Y2hlcyArPQorCQkoRlJPTV9JMkNfSFdfRU5HSU5FKGVuZ2luZSktPmJ1 ZmZlcl91c2VkX2J5dGVzIDw8IDMpICsKKwkJKEZST01fSTJDX0hXX0VOR0lORShlbmdpbmUpLT50 cmFuc2FjdGlvbl9jb3VudCA8PCAxKTsKKworCXJldHVybiBwZXJpb2RfdGltZW91dCAqIG51bV9v Zl9jbG9ja19zdHJldGNoZXM7Cit9CisKKy8qCisgKiBAYnJpZWYKKyAqIERDX0kyQ19EREMxX1NF VFVQIE1NIHJlZ2lzdGVyIG9mZnNldHMKKyAqCisgKiBAbm90ZQorICogVGhlIGluZGljZXMgb2Yg dGhpcyBvZmZzZXQgYXJyYXkgYXJlIEREQyBlbmdpbmUgSURzCisgKi8KK3N0YXRpYyBjb25zdCBp bnQzMl90IGRkY19zZXR1cF9vZmZzZXRbXSA9IHsKKworCW1tRENfSTJDX0REQzFfU0VUVVAgLSBt bURDX0kyQ19EREMxX1NFVFVQLCAvKiBEREMgRW5naW5lIDEgKi8KKwltbURDX0kyQ19EREMyX1NF VFVQIC0gbW1EQ19JMkNfRERDMV9TRVRVUCwgLyogRERDIEVuZ2luZSAyICovCisJbW1EQ19JMkNf RERDM19TRVRVUCAtIG1tRENfSTJDX0REQzFfU0VUVVAsIC8qIEREQyBFbmdpbmUgMyAqLworCW1t RENfSTJDX0REQzRfU0VUVVAgLSBtbURDX0kyQ19EREMxX1NFVFVQLCAvKiBEREMgRW5naW5lIDQg Ki8KKwltbURDX0kyQ19EREM1X1NFVFVQIC0gbW1EQ19JMkNfRERDMV9TRVRVUCwgLyogRERDIEVu Z2luZSA1ICovCisJbW1EQ19JMkNfRERDNl9TRVRVUCAtIG1tRENfSTJDX0REQzFfU0VUVVAsIC8q IEREQyBFbmdpbmUgNiAqLworCW1tRENfSTJDX0REQ1ZHQV9TRVRVUCAtIG1tRENfSTJDX0REQzFf U0VUVVAgLyogRERDIEVuZ2luZSA3ICovCit9OworCisvKgorICogQGJyaWVmCisgKiBEQ19JMkNf RERDMV9TUEVFRCBNTSByZWdpc3RlciBvZmZzZXRzCisgKgorICogQG5vdGUKKyAqIFRoZSBpbmRp Y2VzIG9mIHRoaXMgb2Zmc2V0IGFycmF5IGFyZSBEREMgZW5naW5lIElEcworICovCitzdGF0aWMg Y29uc3QgaW50MzJfdCBkZGNfc3BlZWRfb2Zmc2V0W10gPSB7CisJbW1EQ19JMkNfRERDMV9TUEVF RCAtIG1tRENfSTJDX0REQzFfU1BFRUQsIC8qIEREQyBFbmdpbmUgMSAqLworCW1tRENfSTJDX0RE QzJfU1BFRUQgLSBtbURDX0kyQ19EREMxX1NQRUVELCAvKiBEREMgRW5naW5lIDIgKi8KKwltbURD X0kyQ19EREMzX1NQRUVEIC0gbW1EQ19JMkNfRERDMV9TUEVFRCwgLyogRERDIEVuZ2luZSAzICov CisJbW1EQ19JMkNfRERDNF9TUEVFRCAtIG1tRENfSTJDX0REQzFfU1BFRUQsIC8qIEREQyBFbmdp bmUgNCAqLworCW1tRENfSTJDX0REQzVfU1BFRUQgLSBtbURDX0kyQ19EREMxX1NQRUVELCAvKiBE REMgRW5naW5lIDUgKi8KKwltbURDX0kyQ19EREM2X1NQRUVEIC0gbW1EQ19JMkNfRERDMV9TUEVF RCwgLyogRERDIEVuZ2luZSA2ICovCisJbW1EQ19JMkNfRERDVkdBX1NQRUVEIC0gbW1EQ19JMkNf RERDMV9TUEVFRCAvKiBEREMgRW5naW5lIDcgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aTJjX2VuZ2luZV9mdW5jcyBpMmNfZW5naW5lX2Z1bmNzID0geworCS5kZXN0cm95ID0gZGVzdHJv eSwKKwkuZ2V0X3NwZWVkID0gZ2V0X3NwZWVkLAorCS5zZXRfc3BlZWQgPSBzZXRfc3BlZWQsCisJ LnNldHVwX2VuZ2luZSA9IHNldHVwX2VuZ2luZSwKKwkuc3VibWl0X2NoYW5uZWxfcmVxdWVzdCA9 IHN1Ym1pdF9jaGFubmVsX3JlcXVlc3QsCisJLnByb2Nlc3NfY2hhbm5lbF9yZXBseSA9IHByb2Nl c3NfY2hhbm5lbF9yZXBseSwKKwkuZ2V0X2NoYW5uZWxfc3RhdHVzID0gZ2V0X2NoYW5uZWxfc3Rh dHVzLAorCS5hY3F1aXJlX2VuZ2luZSA9IGRhbF9pMmNfaHdfZW5naW5lX2FjcXVpcmVfZW5naW5l LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBlbmdpbmVfZnVuY3MgZW5naW5lX2Z1bmNzID0g eworCS5yZWxlYXNlX2VuZ2luZSA9IHJlbGVhc2VfZW5naW5lLAorCS5nZXRfZW5naW5lX3R5cGUg PSBkYWxfaTJjX2h3X2VuZ2luZV9nZXRfZW5naW5lX3R5cGUsCisJLmFjcXVpcmUgPSBkYWxfaTJj X2VuZ2luZV9hY3F1aXJlLAorCS5zdWJtaXRfcmVxdWVzdCA9IGRhbF9pMmNfaHdfZW5naW5lX3N1 Ym1pdF9yZXF1ZXN0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfaHdfZW5naW5lX2Z1 bmNzIGkyY19od19lbmdpbmVfZnVuY3MgPSB7CisJLmdldF9od19idWZmZXJfYXZhaWxhYmxlX3Np emUgPQorCQlnZXRfaHdfYnVmZmVyX2F2YWlsYWJsZV9zaXplLAorCS5nZXRfdHJhbnNhY3Rpb25f dGltZW91dCA9CisJCWdldF90cmFuc2FjdGlvbl90aW1lb3V0LAorCS53YWl0X29uX29wZXJhdGlv bl9yZXN1bHQgPQorCQlkYWxfaTJjX2h3X2VuZ2luZV93YWl0X29uX29wZXJhdGlvbl9yZXN1bHQs Cit9OworCitzdGF0aWMgdm9pZCBjb25zdHJ1Y3QoCisJc3RydWN0IGkyY19od19lbmdpbmVfZGNl NjAgKmVuZ2luZSwKKwljb25zdCBzdHJ1Y3QgaTJjX2h3X2VuZ2luZV9kY2U2MF9jcmVhdGVfYXJn ICphcmcpCit7CisJZGFsX2kyY19od19lbmdpbmVfY29uc3RydWN0KCZlbmdpbmUtPmJhc2UsIGFy Zy0+Y3R4KTsKKworCWVuZ2luZS0+YmFzZS5iYXNlLmJhc2UuZnVuY3MgPSAmZW5naW5lX2Z1bmNz OworCWVuZ2luZS0+YmFzZS5iYXNlLmZ1bmNzID0gJmkyY19lbmdpbmVfZnVuY3M7CisJZW5naW5l LT5iYXNlLmZ1bmNzID0gJmkyY19od19lbmdpbmVfZnVuY3M7CisJZW5naW5lLT5iYXNlLmRlZmF1 bHRfc3BlZWQgPSBhcmctPmRlZmF1bHRfc3BlZWQ7CisJZW5naW5lLT5hZGRyLkRDX0kyQ19ERENY X1NFVFVQID0KKwkJbW1EQ19JMkNfRERDMV9TRVRVUCArIGRkY19zZXR1cF9vZmZzZXRbYXJnLT5l bmdpbmVfaWRdOworCWVuZ2luZS0+YWRkci5EQ19JMkNfRERDWF9TUEVFRCA9CisJCW1tRENfSTJD X0REQzFfU1BFRUQgKyBkZGNfc3BlZWRfb2Zmc2V0W2FyZy0+ZW5naW5lX2lkXTsKKworCWVuZ2lu ZS0+ZW5naW5lX2lkID0gYXJnLT5lbmdpbmVfaWQ7CisJZW5naW5lLT5yZWZlcmVuY2VfZnJlcXVl bmN5ID0gYXJnLT5yZWZlcmVuY2VfZnJlcXVlbmN5OworCWVuZ2luZS0+YnVmZmVyX3VzZWRfYnl0 ZXMgPSAwOworCWVuZ2luZS0+dHJhbnNhY3Rpb25fY291bnQgPSAwOworCWVuZ2luZS0+ZW5naW5l X2tlZXBfcG93ZXJfdXBfY291bnQgPSAxOworfQorCitzdHJ1Y3QgaTJjX2VuZ2luZSAqZGFsX2ky Y19od19lbmdpbmVfZGNlNjBfY3JlYXRlKAorCWNvbnN0IHN0cnVjdCBpMmNfaHdfZW5naW5lX2Rj ZTYwX2NyZWF0ZV9hcmcgKmFyZykKK3sKKwlzdHJ1Y3QgaTJjX2h3X2VuZ2luZV9kY2U2MCAqZW5n aW5lOworCisJaWYgKCFhcmcpIHsKKwkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJaWYgKChhcmctPmVuZ2luZV9pZCA+PSBzaXplb2YoZGRjX3NldHVwX29mZnNl dCkgLyBzaXplb2YoaW50MzJfdCkpIHx8CisJICAgIChhcmctPmVuZ2luZV9pZCA+PSBzaXplb2Yo ZGRjX3NwZWVkX29mZnNldCkgLyBzaXplb2YoaW50MzJfdCkpIHx8CisJICAgICFhcmctPnJlZmVy ZW5jZV9mcmVxdWVuY3kpIHsKKwkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCisJZW5naW5lID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19od19lbmdpbmVfZGNl NjApLCBHRlBfS0VSTkVMKTsKKworCWlmICghZW5naW5lKSB7CisJCUJSRUFLX1RPX0RFQlVHR0VS KCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWNvbnN0cnVjdChlbmdpbmUsIGFyZyk7CisJcmV0 dXJuICZlbmdpbmUtPmJhc2UuYmFzZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9pMmNhdXgvZGNlNjAvaTJjX2h3X2VuZ2luZV9kY2U2MC5oIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1eC9kY2U2MC9pMmNfaHdfZW5naW5lX2RjZTYw LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40ODk1NDI2NTEzM2QK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaTJjYXV4 L2RjZTYwL2kyY19od19lbmdpbmVfZGNlNjAuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29w eXJpZ2h0IDIwMTItMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1Ig QVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJF LgorICoKKyAqIEF1dGhvcnM6IEFNRAorICoKKyAqLworCisjaWZuZGVmIF9fREFMX0kyQ19IV19F TkdJTkVfRENFNjBfSF9fCisjZGVmaW5lIF9fREFMX0kyQ19IV19FTkdJTkVfRENFNjBfSF9fCisK K3N0cnVjdCBpMmNfaHdfZW5naW5lX2RjZTYwIHsKKwlzdHJ1Y3QgaTJjX2h3X2VuZ2luZSBiYXNl OworCXN0cnVjdCB7CisJCXVpbnQzMl90IERDX0kyQ19ERENYX1NFVFVQOworCQl1aW50MzJfdCBE Q19JMkNfRERDWF9TUEVFRDsKKwl9IGFkZHI7CisJdWludDMyX3QgZW5naW5lX2lkOworCS8qIGV4 cHJlc3NlZCBpbiBraWxvaGVydHogKi8KKwl1aW50MzJfdCByZWZlcmVuY2VfZnJlcXVlbmN5Owor CS8qIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgdXNlZCBpbiBIVyBidWZmZXIgKi8KKwl1aW50 MzJfdCBidWZmZXJfdXNlZF9ieXRlczsKKwkvKiBudW1iZXIgb2YgcGVuZGluZyB0cmFuc2FjdGlv bnMgKGJlZm9yZSBHTykgKi8KKwl1aW50MzJfdCB0cmFuc2FjdGlvbl9jb3VudDsKKwl1aW50MzJf dCBlbmdpbmVfa2VlcF9wb3dlcl91cF9jb3VudDsKK307CisKK3N0cnVjdCBpMmNfaHdfZW5naW5l X2RjZTYwX2NyZWF0ZV9hcmcgeworCXVpbnQzMl90IGVuZ2luZV9pZDsKKwl1aW50MzJfdCByZWZl cmVuY2VfZnJlcXVlbmN5OworCXVpbnQzMl90IGRlZmF1bHRfc3BlZWQ7CisJc3RydWN0IGRjX2Nv bnRleHQgKmN0eDsKK307CisKK3N0cnVjdCBpMmNfZW5naW5lICpkYWxfaTJjX2h3X2VuZ2luZV9k Y2U2MF9jcmVhdGUoCisJY29uc3Qgc3RydWN0IGkyY19od19lbmdpbmVfZGNlNjBfY3JlYXRlX2Fy ZyAqYXJnKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5 L2RjL2kyY2F1eC9kY2U2MC9pMmNfc3dfZW5naW5lX2RjZTYwLmMgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvZGMvaTJjYXV4L2RjZTYwL2kyY19zd19lbmdpbmVfZGNlNjAuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjk4MzBkYzY2OThlMAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pMmNhdXgvZGNlNjAvaTJj X3N3X2VuZ2luZV9kY2U2MC5jCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IDIw MTItMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5j bHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMp IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAq IEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAq IEF1dGhvcnM6IEFNRAorICoKKyAqLworCisjaW5jbHVkZSAiZG1fc2VydmljZXMuaCIKKworLyoK KyAqIFByZS1yZXF1aXNpdGVzOiBoZWFkZXJzIHJlcXVpcmVkIGJ5IGhlYWRlciBvZiB0aGlzIHVu aXQKKyAqLworI2luY2x1ZGUgImluY2x1ZGUvaTJjYXV4X2ludGVyZmFjZS5oIgorI2luY2x1ZGUg Ii4uL2VuZ2luZS5oIgorI2luY2x1ZGUgIi4uL2kyY19lbmdpbmUuaCIKKyNpbmNsdWRlICIuLi9p MmNfc3dfZW5naW5lLmgiCisKKy8qCisgKiBIZWFkZXIgb2YgdGhpcyB1bml0CisgKi8KKworI2lu Y2x1ZGUgImkyY19zd19lbmdpbmVfZGNlNjAuaCIKKworLyoKKyAqIFBvc3QtcmVxdWlzaXRlczog aGVhZGVycyByZXF1aXJlZCBieSB0aGlzIHVuaXQKKyAqLworCisjaW5jbHVkZSAiZGNlL2RjZV82 XzBfZC5oIgorI2luY2x1ZGUgImRjZS9kY2VfNl8wX3NoX21hc2suaCIKKworLyoKKyAqIFRoaXMg dW5pdAorICovCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBkZGNfaHdfc3RhdHVzX2FkZHJbXSA9 IHsKKwltbURDX0kyQ19EREMxX0hXX1NUQVRVUywKKwltbURDX0kyQ19EREMyX0hXX1NUQVRVUywK KwltbURDX0kyQ19EREMzX0hXX1NUQVRVUywKKwltbURDX0kyQ19EREM0X0hXX1NUQVRVUywKKwlt bURDX0kyQ19EREM1X0hXX1NUQVRVUywKKwltbURDX0kyQ19EREM2X0hXX1NUQVRVUywKKwltbURD X0kyQ19ERENWR0FfSFdfU1RBVFVTCit9OworCisvKgorICogQGJyaWVmCisgKiBDYXN0ICdzdHJ1 Y3QgaTJjX3N3X2VuZ2luZSAqJworICogdG8gJ3N0cnVjdCBpMmNfc3dfZW5naW5lX2RjZTYwICon CisgKi8KKyNkZWZpbmUgRlJPTV9JMkNfU1dfRU5HSU5FKHB0cikgXAorCWNvbnRhaW5lcl9vZigo cHRyKSwgc3RydWN0IGkyY19zd19lbmdpbmVfZGNlNjAsIGJhc2UpCisKKy8qCisgKiBAYnJpZWYK KyAqIENhc3QgJ3N0cnVjdCBpMmNfZW5naW5lIConCisgKiB0byAnc3RydWN0IGkyY19zd19lbmdp bmVfZGNlNjAgKicKKyAqLworI2RlZmluZSBGUk9NX0kyQ19FTkdJTkUocHRyKSBcCisJRlJPTV9J MkNfU1dfRU5HSU5FKGNvbnRhaW5lcl9vZigocHRyKSwgc3RydWN0IGkyY19zd19lbmdpbmUsIGJh c2UpKQorCisvKgorICogQGJyaWVmCisgKiBDYXN0ICdzdHJ1Y3QgZW5naW5lIConCisgKiB0byAn c3RydWN0IGkyY19zd19lbmdpbmVfZGNlNjAgKicKKyAqLworI2RlZmluZSBGUk9NX0VOR0lORShw dHIpIFwKKwlGUk9NX0kyQ19FTkdJTkUoY29udGFpbmVyX29mKChwdHIpLCBzdHJ1Y3QgaTJjX2Vu Z2luZSwgYmFzZSkpCisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfZW5naW5lKAorCXN0cnVjdCBlbmdp bmUgKmVuZ2luZSkKK3sKKworfQorCitzdGF0aWMgdm9pZCBkZXN0cnVjdCgKKwlzdHJ1Y3QgaTJj X3N3X2VuZ2luZV9kY2U2MCAqZW5naW5lKQoreworCWRhbF9pMmNfc3dfZW5naW5lX2Rlc3RydWN0 KCZlbmdpbmUtPmJhc2UpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95KAorCXN0cnVjdCBpMmNf ZW5naW5lICoqZW5naW5lKQoreworCXN0cnVjdCBpMmNfc3dfZW5naW5lX2RjZTYwICpzd19lbmdp bmUgPSBGUk9NX0kyQ19FTkdJTkUoKmVuZ2luZSk7CisKKwlkZXN0cnVjdChzd19lbmdpbmUpOwor CisJa2ZyZWUoc3dfZW5naW5lKTsKKworCSplbmdpbmUgPSBOVUxMOworfQorCitzdGF0aWMgYm9v bCBhY3F1aXJlX2VuZ2luZSgKKwlzdHJ1Y3QgaTJjX2VuZ2luZSAqZW5naW5lLAorCXN0cnVjdCBk ZGMgKmRkY19oYW5kbGUpCit7CisJcmV0dXJuIGRhbF9pMmNhdXhfaTJjX3N3X2VuZ2luZV9hY3F1 aXJlX2VuZ2luZShlbmdpbmUsIGRkY19oYW5kbGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGkyY19lbmdpbmVfZnVuY3MgaTJjX2VuZ2luZV9mdW5jcyA9IHsKKwkuYWNxdWlyZV9lbmdpbmUg PSBhY3F1aXJlX2VuZ2luZSwKKwkuZGVzdHJveSA9IGRlc3Ryb3ksCisJLmdldF9zcGVlZCA9IGRh bF9pMmNfc3dfZW5naW5lX2dldF9zcGVlZCwKKwkuc2V0X3NwZWVkID0gZGFsX2kyY19zd19lbmdp bmVfc2V0X3NwZWVkLAorCS5zZXR1cF9lbmdpbmUgPSBkYWxfaTJjX2VuZ2luZV9zZXR1cF9pMmNf ZW5naW5lLAorCS5zdWJtaXRfY2hhbm5lbF9yZXF1ZXN0ID0gZGFsX2kyY19zd19lbmdpbmVfc3Vi bWl0X2NoYW5uZWxfcmVxdWVzdCwKKwkucHJvY2Vzc19jaGFubmVsX3JlcGx5ID0gZGFsX2kyY19l bmdpbmVfcHJvY2Vzc19jaGFubmVsX3JlcGx5LAorCS5nZXRfY2hhbm5lbF9zdGF0dXMgPSBkYWxf aTJjX3N3X2VuZ2luZV9nZXRfY2hhbm5lbF9zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGVuZ2luZV9mdW5jcyBlbmdpbmVfZnVuY3MgPSB7CisJLnJlbGVhc2VfZW5naW5lID0gcmVs ZWFzZV9lbmdpbmUsCisJLmdldF9lbmdpbmVfdHlwZSA9IGRhbF9pMmNfc3dfZW5naW5lX2dldF9l bmdpbmVfdHlwZSwKKwkuYWNxdWlyZSA9IGRhbF9pMmNfZW5naW5lX2FjcXVpcmUsCisJLnN1Ym1p dF9yZXF1ZXN0ID0gZGFsX2kyY19zd19lbmdpbmVfc3VibWl0X3JlcXVlc3QsCit9OworCitzdGF0 aWMgdm9pZCBjb25zdHJ1Y3QoCisJc3RydWN0IGkyY19zd19lbmdpbmVfZGNlNjAgKmVuZ2luZSwK Kwljb25zdCBzdHJ1Y3QgaTJjX3N3X2VuZ2luZV9kY2U2MF9jcmVhdGVfYXJnICphcmcpCit7CisJ c3RydWN0IGkyY19zd19lbmdpbmVfY3JlYXRlX2FyZyBhcmdfYmFzZTsKKworCWFyZ19iYXNlLmN0 eCA9IGFyZy0+Y3R4OworCWFyZ19iYXNlLmRlZmF1bHRfc3BlZWQgPSBhcmctPmRlZmF1bHRfc3Bl ZWQ7CisKKwlkYWxfaTJjX3N3X2VuZ2luZV9jb25zdHJ1Y3QoJmVuZ2luZS0+YmFzZSwgJmFyZ19i YXNlKTsKKworCWVuZ2luZS0+YmFzZS5iYXNlLmJhc2UuZnVuY3MgPSAmZW5naW5lX2Z1bmNzOwor CWVuZ2luZS0+YmFzZS5iYXNlLmZ1bmNzID0gJmkyY19lbmdpbmVfZnVuY3M7CisJZW5naW5lLT5i YXNlLmRlZmF1bHRfc3BlZWQgPSBhcmctPmRlZmF1bHRfc3BlZWQ7CisJZW5naW5lLT5lbmdpbmVf aWQgPSBhcmctPmVuZ2luZV9pZDsKK30KKworc3RydWN0IGkyY19lbmdpbmUgKmRhbF9pMmNfc3df ZW5naW5lX2RjZTYwX2NyZWF0ZSgKKwljb25zdCBzdHJ1Y3QgaTJjX3N3X2VuZ2luZV9kY2U2MF9j cmVhdGVfYXJnICphcmcpCit7CisJc3RydWN0IGkyY19zd19lbmdpbmVfZGNlNjAgKmVuZ2luZTsK KworCWlmICghYXJnKSB7CisJCUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCXJldHVybiBOVUxMOwor CX0KKworCWVuZ2luZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfc3dfZW5naW5lX2RjZTYw KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWVuZ2luZSkgeworCQlCUkVBS19UT19ERUJVR0dFUigp OworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljb25zdHJ1Y3QoZW5naW5lLCBhcmcpOworCXJldHVy biAmZW5naW5lLT5iYXNlLmJhc2U7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9pMmNhdXgvZGNlNjAvaTJjX3N3X2VuZ2luZV9kY2U2MC5oIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1eC9kY2U2MC9pMmNfc3dfZW5naW5lX2RjZTYw LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41YTY1YTUxMzllNzYK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaTJjYXV4 L2RjZTYwL2kyY19zd19lbmdpbmVfZGNlNjAuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w eXJpZ2h0IDIwMTItMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1Ig QVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJF LgorICoKKyAqIEF1dGhvcnM6IEFNRAorICoKKyAqLworCisjaWZuZGVmIF9fREFMX0kyQ19TV19F TkdJTkVfRENFNjBfSF9fCisjZGVmaW5lIF9fREFMX0kyQ19TV19FTkdJTkVfRENFNjBfSF9fCisK K3N0cnVjdCBpMmNfc3dfZW5naW5lX2RjZTYwIHsKKwlzdHJ1Y3QgaTJjX3N3X2VuZ2luZSBiYXNl OworCXVpbnQzMl90IGVuZ2luZV9pZDsKK307CisKK3N0cnVjdCBpMmNfc3dfZW5naW5lX2RjZTYw X2NyZWF0ZV9hcmcgeworCXVpbnQzMl90IGVuZ2luZV9pZDsKKwl1aW50MzJfdCBkZWZhdWx0X3Nw ZWVkOworCXN0cnVjdCBkY19jb250ZXh0ICpjdHg7Cit9OworCitzdHJ1Y3QgaTJjX2VuZ2luZSAq ZGFsX2kyY19zd19lbmdpbmVfZGNlNjBfY3JlYXRlKAorCWNvbnN0IHN0cnVjdCBpMmNfc3dfZW5n aW5lX2RjZTYwX2NyZWF0ZV9hcmcgKmFyZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1eC9kY2U2MC9pMmNhdXhfZGNlNjAuYyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pMmNhdXgvZGNlNjAvaTJjYXV4X2RjZTYwLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41YWFhN2NmODM4MDcKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaTJjYXV4L2Rj ZTYwL2kyY2F1eF9kY2U2MC5jCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogQ29weXJpZ2h0IDIw MTItMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5j bHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMp IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAq IEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAq IEF1dGhvcnM6IEFNRAorICoKKyAqLworCisjaW5jbHVkZSAiZG1fc2VydmljZXMuaCIKKworLyoK KyAqIFByZS1yZXF1aXNpdGVzOiBoZWFkZXJzIHJlcXVpcmVkIGJ5IGhlYWRlciBvZiB0aGlzIHVu aXQKKyAqLworI2luY2x1ZGUgImluY2x1ZGUvaTJjYXV4X2ludGVyZmFjZS5oIgorI2luY2x1ZGUg Ii4uL2kyY2F1eC5oIgorCisvKgorICogSGVhZGVyIG9mIHRoaXMgdW5pdAorICovCisKKyNpbmNs dWRlICJpMmNhdXhfZGNlNjAuaCIKKworLyoKKyAqIFBvc3QtcmVxdWlzaXRlczogaGVhZGVycyBy ZXF1aXJlZCBieSB0aGlzIHVuaXQKKyAqLworCisjaW5jbHVkZSAiLi4vZW5naW5lLmgiCisjaW5j bHVkZSAiLi4vaTJjX2VuZ2luZS5oIgorI2luY2x1ZGUgIi4uL2kyY19zd19lbmdpbmUuaCIKKyNp bmNsdWRlICJpMmNfc3dfZW5naW5lX2RjZTYwLmgiCisjaW5jbHVkZSAiLi4vaTJjX2h3X2VuZ2lu ZS5oIgorI2luY2x1ZGUgImkyY19od19lbmdpbmVfZGNlNjAuaCIKKyNpbmNsdWRlICIuLi9pMmNf Z2VuZXJpY19od19lbmdpbmUuaCIKKyNpbmNsdWRlICIuLi9hdXhfZW5naW5lLmgiCisKKworI2lu Y2x1ZGUgIi4uL2RjZTExMC9hdXhfZW5naW5lX2RjZTExMC5oIgorI2luY2x1ZGUgIi4uL2RjZTEx MC9pMmNhdXhfZGNlMTEwLmgiCisKKyNpbmNsdWRlICJkY2UvZGNlXzZfMF9kLmgiCisjaW5jbHVk ZSAiZGNlL2RjZV82XzBfc2hfbWFzay5oIgorCisKKy8qIHNldCByZWdpc3RlciBvZmZzZXQgKi8K KyNkZWZpbmUgU1IocmVnX25hbWUpXAorCS5yZWdfbmFtZSA9IG1tICMjIHJlZ19uYW1lCisKKy8q IHNldCByZWdpc3RlciBvZmZzZXQgd2l0aCBpbnN0YW5jZSAqLworI2RlZmluZSBTUkkocmVnX25h bWUsIGJsb2NrLCBpZClcCisJLnJlZ19uYW1lID0gbW0gIyMgYmxvY2sgIyMgaWQgIyMgXyAjIyBy ZWdfbmFtZQorCisjZGVmaW5lIGF1eF9yZWdzKGlkKVwKK1tpZF0gPSB7XAorCUFVWF9DT01NT05f UkVHX0xJU1QoaWQpLCBcCisJLkFVWF9SRVNFVF9NQVNLID0gMCBcCit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZGNlMTEwX2F1eF9yZWdpc3RlcnMgZGNlNjBfYXV4X3JlZ3NbXSA9IHsKKwkJYXV4 X3JlZ3MoMCksCisJCWF1eF9yZWdzKDEpLAorCQlhdXhfcmVncygyKSwKKwkJYXV4X3JlZ3MoMyks CisJCWF1eF9yZWdzKDQpLAorCQlhdXhfcmVncyg1KQorfTsKKworLyoKKyAqIFRoaXMgdW5pdAor ICovCisKKyNkZWZpbmUgRlJPTV9JMkNfQVVYKHB0cikgXAorCWNvbnRhaW5lcl9vZigocHRyKSwg c3RydWN0IGkyY2F1eF9kY2U2MCwgYmFzZSkKKworc3RhdGljIHZvaWQgZGVzdHJ1Y3QoCisJc3Ry dWN0IGkyY2F1eF9kY2U2MCAqaTJjYXV4X2RjZTYwKQoreworCWRhbF9pMmNhdXhfZGVzdHJ1Y3Qo JmkyY2F1eF9kY2U2MC0+YmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3koCisJc3RydWN0 IGkyY2F1eCAqKmkyY19lbmdpbmUpCit7CisJc3RydWN0IGkyY2F1eF9kY2U2MCAqaTJjYXV4X2Rj ZTYwID0gRlJPTV9JMkNfQVVYKCppMmNfZW5naW5lKTsKKworCWRlc3RydWN0KGkyY2F1eF9kY2U2 MCk7CisKKwlrZnJlZShpMmNhdXhfZGNlNjApOworCisJKmkyY19lbmdpbmUgPSBOVUxMOworfQor CitzdGF0aWMgc3RydWN0IGkyY19lbmdpbmUgKmFjcXVpcmVfaTJjX2h3X2VuZ2luZSgKKwlzdHJ1 Y3QgaTJjYXV4ICppMmNhdXgsCisJc3RydWN0IGRkYyAqZGRjKQoreworCXN0cnVjdCBpMmNhdXhf ZGNlNjAgKmkyY2F1eF9kY2U2MCA9IEZST01fSTJDX0FVWChpMmNhdXgpOworCisJc3RydWN0IGky Y19lbmdpbmUgKmVuZ2luZSA9IE5VTEw7CisJYm9vbCBub25fZ2VuZXJpYzsKKworCWlmICghZGRj KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChkZGMtPmh3X2luZm8uaHdfc3VwcG9ydGVkKSB7CisJ CWVudW0gZ3Bpb19kZGNfbGluZSBsaW5lID0gZGFsX2RkY19nZXRfbGluZShkZGMpOworCisJCWlm IChsaW5lIDwgR1BJT19ERENfTElORV9DT1VOVCkgeworCQkJbm9uX2dlbmVyaWMgPSB0cnVlOwor CQkJZW5naW5lID0gaTJjYXV4LT5pMmNfaHdfZW5naW5lc1tsaW5lXTsKKwkJfQorCX0KKworCWlm ICghZW5naW5lKSB7CisJCW5vbl9nZW5lcmljID0gZmFsc2U7CisJCWVuZ2luZSA9IGkyY2F1eC0+ aTJjX2dlbmVyaWNfaHdfZW5naW5lOworCX0KKworCWlmICghZW5naW5lKQorCQlyZXR1cm4gTlVM TDsKKworCWlmIChub25fZ2VuZXJpYykgeworCQlpZiAoIWkyY2F1eF9kY2U2MC0+aTJjX2h3X2J1 ZmZlcl9pbl91c2UgJiYKKwkJCWVuZ2luZS0+YmFzZS5mdW5jcy0+YWNxdWlyZSgmZW5naW5lLT5i YXNlLCBkZGMpKSB7CisJCQlpMmNhdXhfZGNlNjAtPmkyY19od19idWZmZXJfaW5fdXNlID0gdHJ1 ZTsKKwkJCXJldHVybiBlbmdpbmU7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZW5naW5lLT5iYXNl LmZ1bmNzLT5hY3F1aXJlKCZlbmdpbmUtPmJhc2UsIGRkYykpCisJCQlyZXR1cm4gZW5naW5lOwor CX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2VuZ2luZSgKKwlz dHJ1Y3QgaTJjYXV4ICppMmNhdXgsCisJc3RydWN0IGVuZ2luZSAqZW5naW5lKQoreworCWlmIChl bmdpbmUtPmZ1bmNzLT5nZXRfZW5naW5lX3R5cGUoZW5naW5lKSA9PQorCQlJMkNBVVhfRU5HSU5F X1RZUEVfSTJDX0REQ19IVykKKwkJRlJPTV9JMkNfQVVYKGkyY2F1eCktPmkyY19od19idWZmZXJf aW5fdXNlID0gZmFsc2U7CisKKwlkYWxfaTJjYXV4X3JlbGVhc2VfZW5naW5lKGkyY2F1eCwgZW5n aW5lKTsKK30KKworc3RhdGljIGNvbnN0IGVudW0gZ3Bpb19kZGNfbGluZSBod19kZGNfbGluZXNb XSA9IHsKKwlHUElPX0REQ19MSU5FX0REQzEsCisJR1BJT19ERENfTElORV9EREMyLAorCUdQSU9f RERDX0xJTkVfRERDMywKKwlHUElPX0REQ19MSU5FX0REQzQsCisJR1BJT19ERENfTElORV9EREM1 LAorCUdQSU9fRERDX0xJTkVfRERDNiwKKwlHUElPX0REQ19MSU5FX0REQ19WR0EKK307CisKK3N0 YXRpYyBjb25zdCBlbnVtIGdwaW9fZGRjX2xpbmUgaHdfYXV4X2xpbmVzW10gPSB7CisJR1BJT19E RENfTElORV9EREMxLAorCUdQSU9fRERDX0xJTkVfRERDMiwKKwlHUElPX0REQ19MSU5FX0REQzMs CisJR1BJT19ERENfTElORV9EREM0LAorCUdQSU9fRERDX0xJTkVfRERDNSwKKwlHUElPX0REQ19M SU5FX0REQzYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjYXV4X2Z1bmNzIGkyY2F1eF9m dW5jcyA9IHsKKwkuZGVzdHJveSA9IGRlc3Ryb3ksCisJLmFjcXVpcmVfaTJjX2h3X2VuZ2luZSA9 IGFjcXVpcmVfaTJjX2h3X2VuZ2luZSwKKwkucmVsZWFzZV9lbmdpbmUgPSByZWxlYXNlX2VuZ2lu ZSwKKwkuYWNxdWlyZV9pMmNfc3dfZW5naW5lID0gZGFsX2kyY2F1eF9hY3F1aXJlX2kyY19zd19l bmdpbmUsCisJLmFjcXVpcmVfYXV4X2VuZ2luZSA9IGRhbF9pMmNhdXhfYWNxdWlyZV9hdXhfZW5n aW5lLAorfTsKKworc3RhdGljIHZvaWQgY29uc3RydWN0KAorCXN0cnVjdCBpMmNhdXhfZGNlNjAg KmkyY2F1eF9kY2U2MCwKKwlzdHJ1Y3QgZGNfY29udGV4dCAqY3R4KQoreworCS8qIEVudGlyZSBm YW1pbHkgaGF2ZSBJMkMgZW5naW5lIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kKKwkgKiBjaGFu Z2VkIGZyb20gWFRBTElOICgyNykgdG8gWFRBTElOLzIgKDEzLjUpICovCisKKwlzdHJ1Y3QgaTJj YXV4ICpiYXNlID0gJmkyY2F1eF9kY2U2MC0+YmFzZTsKKworCXVpbnQzMl90IHJlZmVyZW5jZV9m cmVxdWVuY3kgPQorCQlkYWxfaTJjYXV4X2dldF9yZWZlcmVuY2VfY2xvY2soY3R4LT5kY19iaW9z KSA+PiAxOworCisJLypib29sIHVzZV9pMmNfc3dfZW5naW5lID0gZGFsX2FkYXB0ZXJfc2Vydmlj ZV9pc19mZWF0dXJlX3N1cHBvcnRlZChhcywKKwkJRkVBVFVSRV9SRVNUT1JFX1VTQUdFX0kyQ19T V19FTkdJTkUpOyovCisKKwkvKiBVc2UgU1dJMkMgZm9yIGRjZTggY3VycmVudGx5LCBzaWNuZSB3 ZSBoYXZlIGJ1ZyB3aXRoIGh3aTJjICovCisJYm9vbCB1c2VfaTJjX3N3X2VuZ2luZSA9IHRydWU7 CisKKwl1aW50MzJfdCBpOworCisJZGFsX2kyY2F1eF9jb25zdHJ1Y3QoYmFzZSwgY3R4KTsKKwor CWkyY2F1eF9kY2U2MC0+YmFzZS5mdW5jcyA9ICZpMmNhdXhfZnVuY3M7CisJaTJjYXV4X2RjZTYw LT5pMmNfaHdfYnVmZmVyX2luX3VzZSA9IGZhbHNlOworCisJLyogQ3JlYXRlIEkyQyBIVyBlbmdp bmVzIChIVyArIFNXIHBhaXJzKQorCSAqIGZvciBhbGwgbGluZXMgd2hpY2ggaGFzIGFzc2lzdGVk IEhXIEREQworCSAqICdpJyAobG9vcCBjb3VudGVyKSB1c2VkIGFzIEREQy9BVVggZW5naW5lX2lk ICovCisKKwlpID0gMDsKKworCWRvIHsKKwkJZW51bSBncGlvX2RkY19saW5lIGxpbmVfaWQgPSBo d19kZGNfbGluZXNbaV07CisKKwkJc3RydWN0IGkyY19od19lbmdpbmVfZGNlNjBfY3JlYXRlX2Fy ZyBod19hcmc7CisKKwkJaWYgKHVzZV9pMmNfc3dfZW5naW5lKSB7CisJCQlzdHJ1Y3QgaTJjX3N3 X2VuZ2luZV9kY2U2MF9jcmVhdGVfYXJnIHN3X2FyZzsKKworCQkJc3dfYXJnLmVuZ2luZV9pZCA9 IGk7CisJCQlzd19hcmcuZGVmYXVsdF9zcGVlZCA9IGJhc2UtPmRlZmF1bHRfaTJjX3N3X3NwZWVk OworCQkJc3dfYXJnLmN0eCA9IGN0eDsKKwkJCWJhc2UtPmkyY19zd19lbmdpbmVzW2xpbmVfaWRd ID0KKwkJCQlkYWxfaTJjX3N3X2VuZ2luZV9kY2U2MF9jcmVhdGUoJnN3X2FyZyk7CisJCX0KKwor CQlod19hcmcuZW5naW5lX2lkID0gaTsKKwkJaHdfYXJnLnJlZmVyZW5jZV9mcmVxdWVuY3kgPSBy ZWZlcmVuY2VfZnJlcXVlbmN5OworCQlod19hcmcuZGVmYXVsdF9zcGVlZCA9IGJhc2UtPmRlZmF1 bHRfaTJjX2h3X3NwZWVkOworCQlod19hcmcuY3R4ID0gY3R4OworCisJCWJhc2UtPmkyY19od19l bmdpbmVzW2xpbmVfaWRdID0KKwkJCWRhbF9pMmNfaHdfZW5naW5lX2RjZTYwX2NyZWF0ZSgmaHdf YXJnKTsKKworCQkrK2k7CisJfSB3aGlsZSAoaSA8IEFSUkFZX1NJWkUoaHdfZGRjX2xpbmVzKSk7 CisKKwkvKiBDcmVhdGUgQVVYIGVuZ2luZXMgZm9yIGFsbCBsaW5lcyB3aGljaCBoYXMgYXNzaXN0 ZWQgSFcgQVVYCisJICogJ2knIChsb29wIGNvdW50ZXIpIHVzZWQgYXMgRERDL0FVWCBlbmdpbmVf aWQgKi8KKworCWkgPSAwOworCisJZG8geworCQllbnVtIGdwaW9fZGRjX2xpbmUgbGluZV9pZCA9 IGh3X2F1eF9saW5lc1tpXTsKKworCQlzdHJ1Y3QgYXV4X2VuZ2luZV9kY2UxMTBfaW5pdF9kYXRh IGFyZzsKKworCQlhcmcuZW5naW5lX2lkID0gaTsKKwkJYXJnLnRpbWVvdXRfcGVyaW9kID0gYmFz ZS0+YXV4X3RpbWVvdXRfcGVyaW9kOworCQlhcmcuY3R4ID0gY3R4OworCQlhcmcucmVncyA9ICZk Y2U2MF9hdXhfcmVnc1tpXTsKKworCQliYXNlLT5hdXhfZW5naW5lc1tsaW5lX2lkXSA9CisJCQlk YWxfYXV4X2VuZ2luZV9kY2UxMTBfY3JlYXRlKCZhcmcpOworCisJCSsraTsKKwl9IHdoaWxlIChp IDwgQVJSQVlfU0laRShod19hdXhfbGluZXMpKTsKKworCS8qIFRPRE8gR2VuZXJpYyBJMkMgU1cg YW5kIEhXICovCit9CisKK3N0cnVjdCBpMmNhdXggKmRhbF9pMmNhdXhfZGNlNjBfY3JlYXRlKAor CXN0cnVjdCBkY19jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IGkyY2F1eF9kY2U2MCAqaTJjYXV4 X2RjZTYwID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY2F1eF9kY2U2MCksIEdGUF9LRVJO RUwpOworCisJaWYgKCFpMmNhdXhfZGNlNjApIHsKKwkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJ cmV0dXJuIE5VTEw7CisJfQorCisJY29uc3RydWN0KGkyY2F1eF9kY2U2MCwgY3R4KTsKKwlyZXR1 cm4gJmkyY2F1eF9kY2U2MC0+YmFzZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9pMmNhdXgvZGNlNjAvaTJjYXV4X2RjZTYwLmggYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2Rpc3BsYXkvZGMvaTJjYXV4L2RjZTYwL2kyY2F1eF9kY2U2MC5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODE5YjVjY2JmOTc3Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1eC9kY2U2MC9pMmNhdXhf ZGNlNjAuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTItMTUgQWR2YW5j ZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAq IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFN RAorICoKKyAqLworCisjaWZuZGVmIF9fREFMX0kyQ19BVVhfRENFNjBfSF9fCisjZGVmaW5lIF9f REFMX0kyQ19BVVhfRENFNjBfSF9fCisKK3N0cnVjdCBpMmNhdXhfZGNlNjAgeworCXN0cnVjdCBp MmNhdXggYmFzZTsKKwkvKiBpbmRpY2F0ZSB0aGUgSTJDIEhXIGNpcmN1bGFyIGJ1ZmZlciBpcyBp biB1c2UgKi8KKwlib29sIGkyY19od19idWZmZXJfaW5fdXNlOworfTsKKworc3RydWN0IGkyY2F1 eCAqZGFsX2kyY2F1eF9kY2U2MF9jcmVhdGUoCisJc3RydWN0IGRjX2NvbnRleHQgKmN0eCk7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1 eC9pMmNhdXguYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pMmNhdXgvaTJjYXV4 LmMKaW5kZXggOWIwYmNjNmI3NjliLi5lNDMxNjI0Y2M3NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9pMmNhdXgvaTJjYXV4LmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1eC9pMmNhdXguYwpAQCAtNDksNiArNDksMTAgQEAKICAq IFRoaXMgdW5pdAogICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX1NJKQorI2lu Y2x1ZGUgImRjZTYwL2kyY2F1eF9kY2U2MC5oIgorI2VuZGlmCisKICNpbmNsdWRlICJkY2U4MC9p MmNhdXhfZGNlODAuaCIKIAogI2luY2x1ZGUgImRjZTEwMC9pMmNhdXhfZGNlMTAwLmgiCkBAIC03 OCw2ICs4MiwxMiBAQCBzdHJ1Y3QgaTJjYXV4ICpkYWxfaTJjYXV4X2NyZWF0ZSgKIAl9CiAKIAlz d2l0Y2ggKGN0eC0+ZGNlX3ZlcnNpb24pIHsKKyNpZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RD X1NJKQorCWNhc2UgRENFX1ZFUlNJT05fNl8wOgorCWNhc2UgRENFX1ZFUlNJT05fNl8xOgorCWNh c2UgRENFX1ZFUlNJT05fNl80OgorCQlyZXR1cm4gZGFsX2kyY2F1eF9kY2U2MF9jcmVhdGUoY3R4 KTsKKyNlbmRpZgogCWNhc2UgRENFX1ZFUlNJT05fOF8wOgogCWNhc2UgRENFX1ZFUlNJT05fOF8x OgogCWNhc2UgRENFX1ZFUlNJT05fOF8zOgotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2FtZC1nZngK