From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v3 5/7] Remove dpu crtc custom properties and its handlers. Date: Mon, 11 Jun 2018 14:13:22 -0700 Message-ID: <1528751604-32541-6-git-send-email-jsanka@codeaurora.org> References: <1528751604-32541-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1528751604-32541-1-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: dri-devel@lists.freedesktop.org Y2hhbmdlcyBpbiB2MjoKICAgIC0gbm9uZQpjaGFuZ2VzIGluIHYzOgogICAgLSByZWJhc2VkIG9u IGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9zZWFucGF1bC8KICAgICAgZHB1LXN0YWdp bmcvY29tbWl0LzQ4MWQyOWQzMWNkNjI5ZmQyMTYzODFiNTNkZTU2OTVmNjQ1NDY1ZDUKClNpZ25l ZC1vZmYtYnk6IEpleWt1bWFyIFNhbmthcmFuIDxqc2Fua2FAY29kZWF1cm9yYS5vcmc+ClJldmll d2VkLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgIDEgLQogZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jIHwgIDI4IC0KIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAgICB8IDg1NiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCAgICAgIHwg IDI3ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jICAgfCAg MTIgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzLmMgICAgIHwgMTQ5 IC0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHMuaCAgICAgfCAx MTEgLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2xtLmMgICAgIHwg IDY3IC0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uaCAgICAgfCAg MTQgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaCAgIHwgIDE2 IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jICAgICAgICB8ICA3MSAr LS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oICAgICAgICAgICAgICAgICB8ICAxNSAt CiAxMiBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCAxMzU2IGRlbGV0aW9ucygtKQog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19k cy5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2RzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQppbmRleCA4ZWMwYmZmLi5kYzU2OTA0IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vTWFrZWZpbGUKQEAgLTU3LDcgKzU3LDYgQEAgbXNtLXkgOj0gXAogCWRpc3AvZHB1MS9kcHVf aHdfY2F0YWxvZy5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X2NkbS5vIFwKIAlkaXNwL2RwdTEvZHB1 X2h3X2N0bC5vIFwKLQlkaXNwL2RwdTEvZHB1X2h3X2RzLm8gXAogCWRpc3AvZHB1MS9kcHVfaHdf aW50ZXJydXB0cy5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X2ludGYubyBcCiAJZGlzcC9kcHUxL2Rw dV9od19sbS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9jb3JlX3BlcmYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3Bl cmYuYwppbmRleCA4NWMwMjI5Li43ZWFmY2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jCkBAIC0xMDIsMzQgKzEwMiw2IEBAIHN0YXRpYyB2b2lk IF9kcHVfY29yZV9wZXJmX2NhbGNfY3J0YyhzdHJ1Y3QgZHB1X2ttcyAqa21zLAogCWRwdV9jc3Rh dGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7CiAJbWVtc2V0KHBlcmYsIDAsIHNpemVvZihz dHJ1Y3QgZHB1X2NvcmVfcGVyZl9wYXJhbXMpKTsKIAotCXBlcmYtPmJ3X2N0bFtEUFVfUE9XRVJf SEFORExFX0RCVVNfSURfTU5PQ10gPQotCQlkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0 ZSwgQ1JUQ19QUk9QX0NPUkVfQUIpOwotCXBlcmYtPm1heF9wZXJfcGlwZV9pYltEUFVfUE9XRVJf SEFORExFX0RCVVNfSURfTU5PQ10gPQotCQlkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0 ZSwgQ1JUQ19QUk9QX0NPUkVfSUIpOwotCi0JaWYgKGRwdV9jc3RhdGUtPmJ3X3NwbGl0X3ZvdGUp IHsKLQkJcGVyZi0+YndfY3RsW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9MTENDXSA9Ci0JCQlk cHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwgQ1JUQ19QUk9QX0xMQ0NfQUIpOwotCQlw ZXJmLT5tYXhfcGVyX3BpcGVfaWJbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0xMQ0NdID0KLQkJ CWRwdV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLCBDUlRDX1BST1BfTExDQ19JQik7Ci0J CXBlcmYtPmJ3X2N0bFtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJXSA9Ci0JCQlkcHVfY3J0 Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwgQ1JUQ19QUk9QX0RSQU1fQUIpOwotCQlwZXJmLT5t YXhfcGVyX3BpcGVfaWJbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0VCSV0gPQotCQkJZHB1X2Ny dGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENfUFJPUF9EUkFNX0lCKTsKLQl9IGVsc2Ug ewotCQlwZXJmLT5id19jdGxbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0xMQ0NdID0KLQkJCWRw dV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLCBDUlRDX1BST1BfQ09SRV9BQik7Ci0JCXBl cmYtPm1heF9wZXJfcGlwZV9pYltEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTExDQ10gPQotCQkJ ZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENfUFJPUF9DT1JFX0lCKTsKLQkJ cGVyZi0+YndfY3RsW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9FQkldID0KLQkJCWRwdV9jcnRj X2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLCBDUlRDX1BST1BfQ09SRV9BQik7Ci0JCXBlcmYtPm1h eF9wZXJfcGlwZV9pYltEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJXSA9Ci0JCQlkcHVfY3J0 Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwgQ1JUQ19QUk9QX0NPUkVfSUIpOwotCX0KLQotCXBl cmYtPmNvcmVfY2xrX3JhdGUgPQotCQkJZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUs IENSVENfUFJPUF9DT1JFX0NMSyk7Ci0KIAlpZiAoIWRwdV9jc3RhdGUtPmJ3X2NvbnRyb2wpIHsK IAkJZm9yIChpID0gMDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkrKykgewog CQkJcGVyZi0+YndfY3RsW2ldID0ga21zLT5jYXRhbG9nLT5wZXJmLm1heF9id19oaWdoICoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCmluZGV4IGE3ZDlhZmYuLjgyNTRj ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwpAQCAtNTc0LDE4 ICs1NzQsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfZGVpbml0X2V2ZW50cyhzdHJ1Y3QgZHB1 X2NydGMgKmRwdV9jcnRjKQogCQlyZXR1cm47CiB9CiAKLS8qKgotICogZHB1X2NydGNfZGVzdHJv eV9kZXN0X3NjYWxlciAtIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCBmb3Igc2NhbGVyIGx1dAotICog QGRwdV9jcnRjOiBQb2ludGVyIHRvIGRwdSBjcnRjCi0gKi8KLXN0YXRpYyB2b2lkIF9kcHVfY3J0 Y19kZXN0cm95X2Rlc3Rfc2NhbGVyKHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMpCi17Ci0JaWYg KCFkcHVfY3J0YykKLQkJcmV0dXJuOwotCi0Ja2ZyZWUoZHB1X2NydGMtPnNjbDNfbHV0X2NmZyk7 Ci19Ci0KIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRj KQogewogCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKQEAg LTU5OCw3ICs1ODYsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKIAlpZiAoZHB1X2NydGMtPmJsb2JfaW5mbykKIAkJZHJtX3Byb3BlcnR5X2Js b2JfcHV0KGRwdV9jcnRjLT5ibG9iX2luZm8pOwogCW1zbV9wcm9wZXJ0eV9kZXN0cm95KCZkcHVf Y3J0Yy0+cHJvcGVydHlfaW5mbyk7Ci0JX2RwdV9jcnRjX2Rlc3Ryb3lfZGVzdF9zY2FsZXIoZHB1 X2NydGMpOwogCiAJX2RwdV9jcnRjX2RlaW5pdF9ldmVudHMoZHB1X2NydGMpOwogCWRwdV9jcnRj LT5waGFuZGxlID0gTlVMTDsKQEAgLTYzNSw3MSArNjIyLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9j cnRjX3NldHVwX2JsZW5kX2NmZyhzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm1peGVyLAogCQkJCURQ VV9CTEVORF9CR19BTFBIQV9CR19DT05TVCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9kcHVfY3J0Y19z ZXR1cF9kaW1fbGF5ZXJfY2ZnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRwdV9j cnRjICpkcHVfY3J0Yywgc3RydWN0IGRwdV9jcnRjX21peGVyICptaXhlciwKLQkJc3RydWN0IGRw dV9od19kaW1fbGF5ZXIgKmRpbV9sYXllcikKLXsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNz dGF0ZTsKLQlzdHJ1Y3QgZHB1X2h3X21peGVyICpsbTsKLQlzdHJ1Y3QgZHB1X2h3X2RpbV9sYXll ciBzcGxpdF9kaW1fbGF5ZXI7Ci0JaW50IGk7Ci0KLQlpZiAoIWRpbV9sYXllci0+cmVjdC53IHx8 ICFkaW1fbGF5ZXItPnJlY3QuaCkgewotCQlEUFVfREVCVUcoImVtcHR5IGRpbV9sYXllclxuIik7 Ci0JCXJldHVybjsKLQl9Ci0KLQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0 ZSk7Ci0KLQlEUFVfREVCVUcoImRpbV9sYXllciAtIGZsYWdzOiVkLCBzdGFnZTolZFxuIiwKLQkJ CWRpbV9sYXllci0+ZmxhZ3MsIGRpbV9sYXllci0+c3RhZ2UpOwotCi0Jc3BsaXRfZGltX2xheWVy LnN0YWdlID0gZGltX2xheWVyLT5zdGFnZTsKLQlzcGxpdF9kaW1fbGF5ZXIuY29sb3JfZmlsbCA9 IGRpbV9sYXllci0+Y29sb3JfZmlsbDsKLQotCS8qCi0JICogdHJhdmVyc2UgdGhyb3VnaCB0aGUg bGF5ZXIgbWl4ZXJzIGF0dGFjaGVkIHRvIGNydGMgYW5kIGZpbmQgdGhlCi0JICogaW50ZXJzZWN0 aW5nIGRpbSBsYXllciByZWN0IGluIGVhY2ggTE0gYW5kIHByb2dyYW0gYWNjb3JkaW5nbHkuCi0J ICovCi0JZm9yIChpID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBpKyspIHsKLQkJc3Bs aXRfZGltX2xheWVyLmZsYWdzID0gZGltX2xheWVyLT5mbGFnczsKLQotCQlkcHVfa21zX3JlY3Rf aW50ZXJzZWN0KCZjc3RhdGUtPmxtX2JvdW5kc1tpXSwgJmRpbV9sYXllci0+cmVjdCwKLQkJCQkJ JnNwbGl0X2RpbV9sYXllci5yZWN0KTsKLQkJaWYgKGRwdV9rbXNfcmVjdF9pc19udWxsKCZzcGxp dF9kaW1fbGF5ZXIucmVjdCkpIHsKLQkJCS8qCi0JCQkgKiBubyBleHRyYSBwcm9ncmFtbWluZyBy ZXF1aXJlZCBmb3Igbm9uLWludGVyc2VjdGluZwotCQkJICogbGF5ZXIgbWl4ZXJzIHdpdGggSU5D TFVTSVZFIGRpbSBsYXllcgotCQkJICovCi0JCQlpZiAoc3BsaXRfZGltX2xheWVyLmZsYWdzICYg RFBVX0RSTV9ESU1fTEFZRVJfSU5DTFVTSVZFKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKgotCQkJ ICogcHJvZ3JhbSB0aGUgb3RoZXIgbm9uLWludGVyc2VjdGluZyBsYXllciBtaXhlcnMgd2l0aAot CQkJICogSU5DTFVTSVZFIGRpbSBsYXllciBvZiBmdWxsIHNpemUgZm9yIHVuaWZvcm1pdHkKLQkJ CSAqIHdpdGggRVhDTFVTSVZFIGRpbSBsYXllciBjb25maWcuCi0JCQkgKi8KLQkJCXNwbGl0X2Rp bV9sYXllci5mbGFncyAmPSB+RFBVX0RSTV9ESU1fTEFZRVJfRVhDTFVTSVZFOwotCQkJc3BsaXRf ZGltX2xheWVyLmZsYWdzIHw9IERQVV9EUk1fRElNX0xBWUVSX0lOQ0xVU0lWRTsKLQkJCW1lbWNw eSgmc3BsaXRfZGltX2xheWVyLnJlY3QsICZjc3RhdGUtPmxtX2JvdW5kc1tpXSwKLQkJCQkJc2l6 ZW9mKHNwbGl0X2RpbV9sYXllci5yZWN0KSk7Ci0KLQkJfSBlbHNlIHsKLQkJCXNwbGl0X2RpbV9s YXllci5yZWN0LnggPQotCQkJCQlzcGxpdF9kaW1fbGF5ZXIucmVjdC54IC0KLQkJCQkJCWNzdGF0 ZS0+bG1fYm91bmRzW2ldLng7Ci0JCX0KLQotCQlEUFVfREVCVUcoInNwbGl0X2RpbV9sYXllciAt IExNOiVkLCByZWN0OnslZCwlZCwlZCwlZH19XG4iLAotCQkJaSwgc3BsaXRfZGltX2xheWVyLnJl Y3QueCwgc3BsaXRfZGltX2xheWVyLnJlY3QueSwKLQkJCXNwbGl0X2RpbV9sYXllci5yZWN0Lncs IHNwbGl0X2RpbV9sYXllci5yZWN0LmgpOwotCi0JCWxtID0gbWl4ZXJbaV0uaHdfbG07Ci0JCW1p eGVyW2ldLm1peGVyX29wX21vZGUgfD0gMSA8PCBzcGxpdF9kaW1fbGF5ZXIuc3RhZ2U7Ci0JCWxt LT5vcHMuc2V0dXBfZGltX2xheWVyKGxtLCAmc3BsaXRfZGltX2xheWVyKTsKLQl9Ci19Ci0KIHN0 YXRpYyB2b2lkIF9kcHVfY3J0Y19wcm9ncmFtX2xtX291dHB1dF9yb2koc3RydWN0IGRybV9jcnRj ICpjcnRjKQogewogCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7CkBAIC03NDMsNyArNjY1LDYg QEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwX21peGVyKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKIAl1MzIgZmx1c2hfbWFzazsKIAl1aW50MzJfdCBzdGFnZV9pZHgsIGxtX2lkeDsK IAlpbnQgenBvc19jbnRbRFBVX1NUQUdFX01BWCArIDFdID0geyAwIH07Ci0JaW50IGk7CiAJYm9v bCBiZ19hbHBoYV9lbmFibGUgPSBmYWxzZTsKIAogCWlmICghZHB1X2NydGMgfHwgIW1peGVyKSB7 CkBAIC04MTksMTMgKzc0MCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cF9t aXhlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCX0KIAl9CiAKLQlpZiAobG0gJiYgbG0tPm9w cy5zZXR1cF9kaW1fbGF5ZXIpIHsKLQkJY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+ c3RhdGUpOwotCQlmb3IgKGkgPSAwOyBpIDwgY3N0YXRlLT5udW1fZGltX2xheWVyczsgaSsrKQot CQkJX2RwdV9jcnRjX3NldHVwX2RpbV9sYXllcl9jZmcoY3J0YywgZHB1X2NydGMsCi0JCQkJCW1p eGVyLCAmY3N0YXRlLT5kaW1fbGF5ZXJbaV0pOwotCX0KLQogCSBfZHB1X2NydGNfcHJvZ3JhbV9s bV9vdXRwdXRfcm9pKGNydGMpOwogfQogCkBAIC04NjcsMTEgKzc4MSw2IEBAIHN0YXRpYyB2b2lk IF9kcHVfY3J0Y19ibGVuZF9zZXR1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCWlmIChtaXhl cltpXS5od19jdGwtPm9wcy5jbGVhcl9hbGxfYmxlbmRzdGFnZXMpCiAJCQltaXhlcltpXS5od19j dGwtPm9wcy5jbGVhcl9hbGxfYmxlbmRzdGFnZXMoCiAJCQkJCW1peGVyW2ldLmh3X2N0bCk7Ci0K LQkJLyogY2xlYXIgZGltX2xheWVyIHNldHRpbmdzICovCi0JCWxtID0gbWl4ZXJbaV0uaHdfbG07 Ci0JCWlmIChsbS0+b3BzLmNsZWFyX2RpbV9sYXllcikKLQkJCWxtLT5vcHMuY2xlYXJfZGltX2xh eWVyKGxtKTsKIAl9CiAKIAkvKiBpbml0aWFsaXplIHN0YWdlIGNmZyAqLwpAQCAtOTAzLDE2MyAr ODEyLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKIH0KIAogLyoqCi0gKiBfZHB1X2NydGNfc2V0dXBfc2NhbGVyM19sdXQgLSBTZXQg dXAgc2NhbGVyIGx1dAotICogTFVUcyBhcmUgY29uZmlndXJlZCBvbmx5IG9uY2UgZHVyaW5nIGJv b3QKLSAqIEBkcHVfY3J0YzogUG9pbnRlciB0byBkcHUgY3J0YwotICogQGNzdGF0ZTogUG9pbnRl ciB0byBkcHUgY3J0YyBzdGF0ZQotICovCi1zdGF0aWMgaW50IF9kcHVfY3J0Y19zZXRfZGVzdF9z Y2FsZXJfbHV0KHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMsCi0JCXN0cnVjdCBkcHVfY3J0Y19z dGF0ZSAqY3N0YXRlLCB1aW50MzJfdCBsdXRfaWR4KQotewotCXN0cnVjdCBkcHVfaHdfc2NhbGVy M19sdXRfY2ZnICpjZmc7Ci0JdTMyICpsdXRfZGF0YSA9IE5VTEw7Ci0Jc2l6ZV90IGxlbiA9IDA7 Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIWRwdV9jcnRjIHx8ICFjc3RhdGUgfHwgIWRwdV9jcnRj LT5zY2wzX2x1dF9jZmcpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3NcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZHB1X2NydGMtPnNjbDNfbHV0X2NmZy0+aXNfY29uZmln dXJlZCkgewotCQlEUFVfREVCVUcoImx1dCBhbHJlYWR5IGNvbmZpZ3VyZWRcbiIpOwotCQlyZXR1 cm4gMDsKLQl9Ci0KLQlsdXRfZGF0YSA9IG1zbV9wcm9wZXJ0eV9nZXRfYmxvYigmZHB1X2NydGMt PnByb3BlcnR5X2luZm8sCi0JCQkmY3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgJmxlbiwgbHV0X2lk eCk7Ci0JaWYgKCFsdXRfZGF0YSB8fCAhbGVuKSB7Ci0JCURQVV9FUlJPUigibHV0KCVkKTogbm8g ZGF0YSwgbGVuKCV6dSlcbiIsIGx1dF9pZHgsIGxlbik7Ci0JCXJldHVybiAtRU5PREFUQTsKLQl9 Ci0KLQljZmcgPSBkcHVfY3J0Yy0+c2NsM19sdXRfY2ZnOwotCi0Jc3dpdGNoIChsdXRfaWR4KSB7 Ci0JY2FzZSBDUlRDX1BST1BfREVTVF9TQ0FMRVJfTFVUX0VEOgotCQljZmctPmRpcl9sdXQgPSBs dXRfZGF0YTsKLQkJY2ZnLT5kaXJfbGVuID0gbGVuOwotCQlicmVhazsKLQljYXNlIENSVENfUFJP UF9ERVNUX1NDQUxFUl9MVVRfQ0lSOgotCQljZmctPmNpcl9sdXQgPSBsdXRfZGF0YTsKLQkJY2Zn LT5jaXJfbGVuID0gbGVuOwotCQlicmVhazsKLQljYXNlIENSVENfUFJPUF9ERVNUX1NDQUxFUl9M VVRfU0VQOgotCQljZmctPnNlcF9sdXQgPSBsdXRfZGF0YTsKLQkJY2ZnLT5zZXBfbGVuID0gbGVu OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlEUFVfRVJST1IoImlu dmFsaWQgTFVUIGluZGV4ID0gJWQiLCBsdXRfaWR4KTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGNm Zy0+ZGlyX2x1dCAmJiBjZmctPmNpcl9sdXQgJiYgY2ZnLT5zZXBfbHV0KQotCQljZmctPmlzX2Nv bmZpZ3VyZWQgPSB0cnVlOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBfZHB1X2NydGNf ZGVzdF9zY2FsZXJfc2V0dXAgLSBTZXQgdXAgZGVzdCBzY2FsZXIgYmxvY2sKLSAqIEBjcnRjOiBQ b2ludGVyIHRvIGRybSBjcnRjCi0gKi8KLXN0YXRpYyB2b2lkIF9kcHVfY3J0Y19kZXN0X3NjYWxl cl9zZXR1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVf Y3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKLQlzdHJ1Y3QgZHB1X2h3X21p eGVyICpod19sbTsKLQlzdHJ1Y3QgZHB1X2h3X2N0bCAqaHdfY3RsOwotCXN0cnVjdCBkcHVfaHdf ZHMgKmh3X2RzOwotCXN0cnVjdCBkcHVfaHdfZHNfY2ZnICpjZmc7Ci0Jc3RydWN0IGRwdV9rbXMg KmttczsKLQl1MzIgZmx1c2hfbWFzayA9IDAsIG9wX21vZGUgPSAwOwotCXUzMiBsbV9pZHggPSAw LCBudW1fbWl4ZXJzID0gMDsKLQlpbnQgaSwgY291bnQgPSAwOwotCi0JaWYgKCFjcnRjKQotCQly ZXR1cm47Ci0KLQlkcHVfY3J0YyAgID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JY3N0YXRlID0gdG9f ZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwotCWttcyAgICA9IF9kcHVfY3J0Y19nZXRfa21z KGNydGMpOwotCW51bV9taXhlcnMgPSBkcHVfY3J0Yy0+bnVtX21peGVyczsKLQotCURQVV9ERUJV RygiY3J0YyVkXG4iLCBjcnRjLT5iYXNlLmlkKTsKLQotCWlmICghY3N0YXRlLT5kc19kaXJ0eSkg ewotCQlEUFVfREVCVUcoIm5vIGNoYW5nZSBpbiBzZXR0aW5ncywgc2tpcCBjb21taXRcbiIpOwot CX0gZWxzZSBpZiAoIWttcyB8fCAha21zLT5jYXRhbG9nKSB7Ci0JCURQVV9FUlJPUigiaW52YWxp ZCBwYXJhbWV0ZXJzXG4iKTsKLQl9IGVsc2UgaWYgKCFrbXMtPmNhdGFsb2ctPm1kcFswXS5oYXNf ZGVzdF9zY2FsZXIpIHsKLQkJRFBVX0RFQlVHKCJkZXN0IHNjYWxlciBmZWF0dXJlIG5vdCBzdXBw b3J0ZWRcbiIpOwotCX0gZWxzZSBpZiAobnVtX21peGVycyA+IENSVENfRFVBTF9NSVhFUlMpIHsK LQkJRFBVX0VSUk9SKCJpbnZhbGlkIG51bWJlciBtaXhlcnM6ICVkXG4iLCBudW1fbWl4ZXJzKTsK LQl9IGVsc2UgaWYgKCFkcHVfY3J0Yy0+c2NsM19sdXRfY2ZnLT5pc19jb25maWd1cmVkKSB7Ci0J CURQVV9ERUJVRygibm8gTFVUIGRhdGEgYXZhaWxhYmxlXG4iKTsKLQl9IGVsc2UgewotCQljb3Vu dCA9IGNzdGF0ZS0+bnVtX2RzX2VuYWJsZWQgPyBjc3RhdGUtPm51bV9kcyA6IG51bV9taXhlcnM7 Ci0KLQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJCWNmZyA9ICZjc3RhdGUtPmRz X2NmZ1tpXTsKLQotCQkJaWYgKCFjZmctPmZsYWdzKQotCQkJCWNvbnRpbnVlOwotCi0JCQlsbV9p ZHggPSBjZmctPm5keDsKLQkJCWh3X2xtICA9IGRwdV9jcnRjLT5taXhlcnNbbG1faWR4XS5od19s bTsKLQkJCWh3X2N0bCA9IGRwdV9jcnRjLT5taXhlcnNbbG1faWR4XS5od19jdGw7Ci0JCQlod19k cyAgPSBkcHVfY3J0Yy0+bWl4ZXJzW2xtX2lkeF0uaHdfZHM7Ci0KLQkJCS8qIFNldHVwIG9wIG1v ZGUgLSBEdWFsL3NpbmdsZSAqLwotCQkJaWYgKGNmZy0+ZmxhZ3MgJiBEUFVfRFJNX0RFU1RTQ0FM RVJfRU5BQkxFKQotCQkJCW9wX21vZGUgfD0gQklUKGh3X2RzLT5pZHggLSBEU18wKTsKLQotCQkJ aWYgKChpID09IGNvdW50LTEpICYmIGh3X2RzLT5vcHMuc2V0dXBfb3Btb2RlKSB7Ci0JCQkJb3Bf bW9kZSB8PSAoY3N0YXRlLT5udW1fZHNfZW5hYmxlZCA9PQotCQkJCQlDUlRDX0RVQUxfTUlYRVJT KSA/Ci0JCQkJCURQVV9EU19PUF9NT0RFX0RVQUwgOiAwOwotCQkJCWh3X2RzLT5vcHMuc2V0dXBf b3Btb2RlKGh3X2RzLCBvcF9tb2RlKTsKLQkJCQlEUFVfRVZUMzIoRFJNSUQoY3J0YyksIG9wX21v ZGUpOwotCQkJfQotCi0JCQkvKiBTZXR1cCBzY2FsZXIgKi8KLQkJCWlmICgoY2ZnLT5mbGFncyAm IERQVV9EUk1fREVTVFNDQUxFUl9TQ0FMRV9VUERBVEUpIHx8Ci0JCQkJKGNmZy0+ZmxhZ3MgJgot CQkJCQlEUFVfRFJNX0RFU1RTQ0FMRVJfRU5IQU5DRVJfVVBEQVRFKSkgewotCQkJCWlmIChod19k cy0+b3BzLnNldHVwX3NjYWxlcikKLQkJCQkJaHdfZHMtPm9wcy5zZXR1cF9zY2FsZXIoaHdfZHMs Ci0JCQkJCQkJY2ZnLT5zY2wzX2NmZywKLQkJCQkJCQlkcHVfY3J0Yy0+c2NsM19sdXRfY2ZnKTsK LQotCQkJCS8qKgotCQkJCSAqIENsZWFyIHRoZSBmbGFncyBhcyB0aGUgYmxvY2sgZG9lc24ndCBo YXZlIHRvCi0JCQkJICogYmUgcHJvZ3JhbW1lZCBpbiBlYWNoIGNvbW1pdCBpZiBubyB1cGRhdGVz Ci0JCQkJICovCi0JCQkJY2ZnLT5mbGFncyAmPSB+RFBVX0RSTV9ERVNUU0NBTEVSX1NDQUxFX1VQ REFURTsKLQkJCQljZmctPmZsYWdzICY9Ci0JCQkJCX5EUFVfRFJNX0RFU1RTQ0FMRVJfRU5IQU5D RVJfVVBEQVRFOwotCQkJfQotCi0JCQkvKgotCQkJICogRGVzdCBzY2FsZXIgc2hhcmVzIHRoZSBm bHVzaCBiaXQgb2YgdGhlIExNIGluIGNvbnRyb2wKLQkJCSAqLwotCQkJaWYgKGNmZy0+c2V0X2xt X2ZsdXNoICYmIGh3X2xtICYmIGh3X2N0bCAmJgotCQkJCWh3X2N0bC0+b3BzLmdldF9iaXRtYXNr X21peGVyKSB7Ci0JCQkJZmx1c2hfbWFzayA9IGh3X2N0bC0+b3BzLmdldF9iaXRtYXNrX21peGVy KAotCQkJCQkJaHdfY3RsLCBod19sbS0+aWR4KTsKLQkJCQlEUFVfREVCVUcoIlNldCBsbVslZF0g Zmx1c2ggPSAlZCIsCi0JCQkJCWh3X2xtLT5pZHgsIGZsdXNoX21hc2spOwotCQkJCWh3X2N0bC0+ b3BzLnVwZGF0ZV9wZW5kaW5nX2ZsdXNoKGh3X2N0bCwKLQkJCQkJCQkJZmx1c2hfbWFzayk7Ci0J CQl9Ci0JCQljZmctPnNldF9sbV9mbHVzaCA9IGZhbHNlOwotCQl9Ci0JCWNzdGF0ZS0+ZHNfZGly dHkgPSBmYWxzZTsKLQl9Ci19Ci0KLS8qKgogICogIF9kcHVfY3J0Y19jb21wbGV0ZV9mbGlwIC0g c2lnbmFsIHBlbmRpbmcgcGFnZV9mbGlwIGV2ZW50cwogICogQW55IHBlbmRpbmcgdmJsYW5rIGV2 ZW50cyBhcmUgYWRkZWQgdG8gdGhlIHZibGFua19ldmVudF9saXN0CiAgKiBzbyB0aGF0IHRoZSBu ZXh0IHZibGFuayBpbnRlcnJ1cHQgc2hhbGwgc2lnbmFsIHRoZW0uCkBAIC0xMzE3LDQ0OCArMTA2 OSw2IEBAIHZvaWQgZHB1X2NydGNfY29tcGxldGVfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKIAlEUFVfRVZUMzJfVkVSQk9TRShEUk1JRChjcnRjKSk7CiB9CiAKLS8qIF9kcHVfY3J0Y19z ZXRfaWRsZV90aW1lb3V0IC0gdXBkYXRlIGlkbGUgdGltZW91dCB3YWl0IGR1cmF0aW9uICovCi1z dGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0X2lkbGVfdGltZW91dChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsIHU2NCB2YWwpCi17Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCi0JaWYgKCFj cnRjKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjcnRjXG4iKTsKLQkJcmV0dXJuOwotCX0KLQot CWRybV9mb3JfZWFjaF9lbmNvZGVyKGVuY29kZXIsIGNydGMtPmRldikgewotCQlpZiAoZW5jb2Rl ci0+Y3J0YyAhPSBjcnRjKQotCQkJY29udGludWU7Ci0KLQkJZHB1X2VuY29kZXJfc2V0X2lkbGVf dGltZW91dChlbmNvZGVyLCAodTMyKSB2YWwpOwotCX0KLX0KLQotLyoqCi0gKiBfZHB1X2NydGNf c2V0X2RpbV9sYXllcl92MSAtIGNvcHkgZGltIGxheWVyIHNldHRpbmdzIGZyb20gdXNlcnNwYWNl Ci0gKiBAY3N0YXRlOiAgICAgIFBvaW50ZXIgdG8gZHB1IGNydGMgc3RhdGUKLSAqIEB1c2VyX3B0 cjogICAgVXNlciBwdHIgZm9yIGRwdV9kcm1fZGltX2xheWVyX3YxIHN0cnVjdAotICovCi1zdGF0 aWMgdm9pZCBfZHB1X2NydGNfc2V0X2RpbV9sYXllcl92MShzdHJ1Y3QgZHB1X2NydGNfc3RhdGUg KmNzdGF0ZSwKLQkJdm9pZCBfX3VzZXIgKnVzcl9wdHIpCi17Ci0Jc3RydWN0IGRwdV9kcm1fZGlt X2xheWVyX3YxIGRpbV9sYXllcl92MTsKLQlzdHJ1Y3QgZHB1X2RybV9kaW1fbGF5ZXJfY2ZnICp1 c2VyX2NmZzsKLQlzdHJ1Y3QgZHB1X2h3X2RpbV9sYXllciAqZGltX2xheWVyOwotCXUzMiBjb3Vu dCwgaTsKLQotCWlmICghY3N0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjc3RhdGVcbiIp OwotCQlyZXR1cm47Ci0JfQotCWRpbV9sYXllciA9IGNzdGF0ZS0+ZGltX2xheWVyOwotCi0JaWYg KCF1c3JfcHRyKSB7Ci0JCURQVV9ERUJVRygiZGltX2xheWVyIGRhdGEgcmVtb3ZlZFxuIik7Ci0J CXJldHVybjsKLQl9Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmRpbV9sYXllcl92MSwgdXNyX3B0 ciwgc2l6ZW9mKGRpbV9sYXllcl92MSkpKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGNvcHkg ZGltX2xheWVyIGRhdGFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JY291bnQgPSBkaW1fbGF5ZXJf djEubnVtX2xheWVyczsKLQlpZiAoY291bnQgPiBEUFVfTUFYX0RJTV9MQVlFUlMpIHsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIG51bWJlciBvZiBkaW1fbGF5ZXJzOiVkIiwgY291bnQpOwotCQlyZXR1 cm47Ci0JfQotCi0JLyogcG9wdWxhdGUgZnJvbSB1c2VyIHNwYWNlICovCi0JY3N0YXRlLT5udW1f ZGltX2xheWVycyA9IGNvdW50OwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXVz ZXJfY2ZnID0gJmRpbV9sYXllcl92MS5sYXllcl9jZmdbaV07Ci0KLQkJZGltX2xheWVyW2ldLmZs YWdzID0gdXNlcl9jZmctPmZsYWdzOwotCQlkaW1fbGF5ZXJbaV0uc3RhZ2UgPSB1c2VyX2NmZy0+ c3RhZ2UgKyBEUFVfU1RBR0VfMDsKLQotCQlkaW1fbGF5ZXJbaV0ucmVjdC54ID0gdXNlcl9jZmct PnJlY3QueDE7Ci0JCWRpbV9sYXllcltpXS5yZWN0LnkgPSB1c2VyX2NmZy0+cmVjdC55MTsKLQkJ ZGltX2xheWVyW2ldLnJlY3QudyA9IHVzZXJfY2ZnLT5yZWN0LngyIC0gdXNlcl9jZmctPnJlY3Qu eDE7Ci0JCWRpbV9sYXllcltpXS5yZWN0LmggPSB1c2VyX2NmZy0+cmVjdC55MiAtIHVzZXJfY2Zn LT5yZWN0LnkxOwotCi0JCWRpbV9sYXllcltpXS5jb2xvcl9maWxsID0gKHN0cnVjdCBkcHVfbWRz c19jb2xvcikgewotCQkJCXVzZXJfY2ZnLT5jb2xvcl9maWxsLmNvbG9yXzAsCi0JCQkJdXNlcl9j ZmctPmNvbG9yX2ZpbGwuY29sb3JfMSwKLQkJCQl1c2VyX2NmZy0+Y29sb3JfZmlsbC5jb2xvcl8y LAotCQkJCXVzZXJfY2ZnLT5jb2xvcl9maWxsLmNvbG9yXzMsCi0JCX07Ci0KLQkJRFBVX0RFQlVH KCJkaW1fbGF5ZXJbJWRdIC0gZmxhZ3M6JWQsIHN0YWdlOiVkXG4iLAotCQkJCWksIGRpbV9sYXll cltpXS5mbGFncywgZGltX2xheWVyW2ldLnN0YWdlKTsKLQkJRFBVX0RFQlVHKCIgcmVjdDp7JWQs JWQsJWQsJWR9LCBjb2xvcjp7JWQsJWQsJWQsJWR9XG4iLAotCQkJCWRpbV9sYXllcltpXS5yZWN0 LngsIGRpbV9sYXllcltpXS5yZWN0LnksCi0JCQkJZGltX2xheWVyW2ldLnJlY3QudywgZGltX2xh eWVyW2ldLnJlY3QuaCwKLQkJCQlkaW1fbGF5ZXJbaV0uY29sb3JfZmlsbC5jb2xvcl8wLAotCQkJ CWRpbV9sYXllcltpXS5jb2xvcl9maWxsLmNvbG9yXzEsCi0JCQkJZGltX2xheWVyW2ldLmNvbG9y X2ZpbGwuY29sb3JfMiwKLQkJCQlkaW1fbGF5ZXJbaV0uY29sb3JfZmlsbC5jb2xvcl8zKTsKLQl9 Ci19Ci0KLS8qKgotICogX2RwdV9jcnRjX2Rlc3Rfc2NhbGVyX2luaXQgLSBhbGxvY2F0ZSBtZW1v cnkgZm9yIHNjYWxlciBsdXQKLSAqIEBkcHVfY3J0YyAgICA6ICBQb2ludGVyIHRvIGRwdSBjcnRj Ci0gKiBAY2F0YWxvZyA6ICBQb2ludGVyIHRvIG1kc3MgY2F0YWxvZyBpbmZvCi0gKi8KLXN0YXRp YyB2b2lkIF9kcHVfY3J0Y19kZXN0X3NjYWxlcl9pbml0KHN0cnVjdCBkcHVfY3J0YyAqZHB1X2Ny dGMsCi0JCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZykKLXsKLQlpZiAoIWRwdV9jcnRj IHx8ICFjYXRhbG9nKQotCQlyZXR1cm47Ci0KLQlpZiAoIWNhdGFsb2ctPm1kcFswXS5oYXNfZGVz dF9zY2FsZXIpIHsKLQkJRFBVX0RFQlVHKCJkZXN0IHNjYWxlciBmZWF0dXJlIG5vdCBzdXBwb3J0 ZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHB1X2NydGMtPnNjbDNfbHV0X2NmZyA9IGt6YWxs b2Moc2l6ZW9mKHN0cnVjdCBkcHVfaHdfc2NhbGVyM19sdXRfY2ZnKSwKLQkJCQlHRlBfS0VSTkVM KTsKLQlpZiAoIWRwdV9jcnRjLT5zY2wzX2x1dF9jZmcpCi0JCURQVV9FUlJPUigiZmFpbGVkIHRv IGNyZWF0ZSBzY2FsZSBMVVQgZm9yIGRlc3Qgc2NhbGVyIik7Ci19Ci0KLS8qKgotICogX2RwdV9j cnRjX3NldF9kZXN0X3NjYWxlciAtIGNvcHkgZGVzdCBzY2FsZXIgc2V0dGluZ3MgZnJvbSB1c2Vy c3BhY2UKLSAqIEBkcHVfY3J0YyAgIDogIFBvaW50ZXIgdG8gZHB1IGNydGMKLSAqIEBjc3RhdGUg OiAgUG9pbnRlciB0byBkcHUgY3J0YyBzdGF0ZQotICogQHVzcl9wdHI6ICBVc2VyIHB0ciBmb3Ig ZHB1X2RybV9kZXN0X3NjYWxlcl9kYXRhIHN0cnVjdAotICovCi1zdGF0aWMgaW50IF9kcHVfY3J0 Y19zZXRfZGVzdF9zY2FsZXIoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YywKLQkJCQlzdHJ1Y3Qg ZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSwKLQkJCQl2b2lkIF9fdXNlciAqdXNyX3B0cikKLXsKLQlz dHJ1Y3QgZHB1X2RybV9kZXN0X3NjYWxlcl9kYXRhIGRzX2RhdGE7Ci0Jc3RydWN0IGRwdV9kcm1f ZGVzdF9zY2FsZXJfY2ZnICpkc19jZmdfdXNyOwotCXN0cnVjdCBkcHVfZHJtX3NjYWxlcl92MiBz Y2FsZXJfdjI7Ci0Jdm9pZCBfX3VzZXIgKnNjYWxlcl92Ml91c3I7Ci0JaW50IGksIGNvdW50LCBy ZXQgPSAwOwotCi0JaWYgKCFkcHVfY3J0YyB8fCAhY3N0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBkcHVfY3J0Yy9zdGF0ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCURQVV9E RUJVRygiY3J0YyAlc1xuIiwgZHB1X2NydGMtPm5hbWUpOwotCi0JY3N0YXRlLT5udW1fZHMgPSAw OwotCWNzdGF0ZS0+ZHNfZGlydHkgPSBmYWxzZTsKLQlpZiAoIXVzcl9wdHIpIHsKLQkJRFBVX0RF QlVHKCJkcyBkYXRhIHJlbW92ZWRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY29weV9m cm9tX3VzZXIoJmRzX2RhdGEsIHVzcl9wdHIsIHNpemVvZihkc19kYXRhKSkpIHsKLQkJRFBVX0VS Uk9SKCJmYWlsZWQgdG8gY29weSBkZXN0IHNjYWxlciBkYXRhIGZyb20gdXNlclxuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCWNvdW50ID0gZHNfZGF0YS5udW1fZGVzdF9zY2FsZXI7Ci0J aWYgKCFkcHVfY3J0Yy0+bnVtX21peGVycyB8fCBjb3VudCA+IGRwdV9jcnRjLT5udW1fbWl4ZXJz IHx8Ci0JCShjb3VudCAmJiAoY291bnQgIT0gZHB1X2NydGMtPm51bV9taXhlcnMpICYmCi0JCSEo ZHNfZGF0YS5kc19jZmdbMF0uZmxhZ3MgJiBEUFVfRFJNX0RFU1RTQ0FMRVJfUFVfRU5BQkxFKSkp IHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNvbmZpZzpudW0gZHMoJWQpLCBtaXhlcnMoJWQpLGZs YWdzKCVkKVxuIiwKLQkJCWNvdW50LCBkcHVfY3J0Yy0+bnVtX21peGVycywgZHNfZGF0YS5kc19j ZmdbMF0uZmxhZ3MpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBQb3B1bGF0ZSBmcm9t IHVzZXIgc3BhY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlkc19jZmdf dXNyID0gJmRzX2RhdGEuZHNfY2ZnW2ldOwotCi0JCWNzdGF0ZS0+ZHNfY2ZnW2ldLm5keCA9IGRz X2NmZ191c3ItPmluZGV4OwotCQljc3RhdGUtPmRzX2NmZ1tpXS5mbGFncyA9IGRzX2NmZ191c3It PmZsYWdzOwotCQljc3RhdGUtPmRzX2NmZ1tpXS5sbV93aWR0aCA9IGRzX2NmZ191c3ItPmxtX3dp ZHRoOwotCQljc3RhdGUtPmRzX2NmZ1tpXS5sbV9oZWlnaHQgPSBkc19jZmdfdXNyLT5sbV9oZWln aHQ7Ci0JCWNzdGF0ZS0+ZHNfY2ZnW2ldLnNjbDNfY2ZnID0gTlVMTDsKLQotCQlpZiAoZHNfY2Zn X3Vzci0+c2NhbGVyX2NmZykgewotCQkJc2NhbGVyX3YyX3VzciA9Ci0JCQkodm9pZCBfX3VzZXIg KikoKHVpbnRwdHJfdClkc19jZmdfdXNyLT5zY2FsZXJfY2ZnKTsKLQotCQkJbWVtc2V0KCZzY2Fs ZXJfdjIsIDAsIHNpemVvZihzY2FsZXJfdjIpKTsKLQotCQkJY3N0YXRlLT5kc19jZmdbaV0uc2Ns M19jZmcgPQotCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfaHdfc2NhbGVyM19jZmcpLAot CQkJCQlHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFjc3RhdGUtPmRzX2NmZ1tpXS5zY2wzX2NmZykg ewotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJCWlmIChjb3B5 X2Zyb21fdXNlcigmc2NhbGVyX3YyLCBzY2FsZXJfdjJfdXNyLAotCQkJCQlzaXplb2Yoc2NhbGVy X3YyKSkpIHsKLQkJCQlEUFVfRVJST1IoInNjYWxlIGRhdGE6Y29weSBmcm9tIHVzZXIgZmFpbGVk XG4iKTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQlkcHVf c2V0X3NjYWxlcl92Mihjc3RhdGUtPmRzX2NmZ1tpXS5zY2wzX2NmZywKLQkJCQkJJnNjYWxlcl92 Mik7Ci0KLQkJCURQVV9ERUJVRygiZW4oJWQpZGlyKCVkKWRlKCVkKSBzcmMoJWR4JWQpIGRzdCgl ZHglZClcbiIsCi0JCQkJc2NhbGVyX3YyLmVuYWJsZSwgc2NhbGVyX3YyLmRpcl9lbiwKLQkJCQlz Y2FsZXJfdjIuZGUuZW5hYmxlLCBzY2FsZXJfdjIuc3JjX3dpZHRoWzBdLAotCQkJCXNjYWxlcl92 Mi5zcmNfaGVpZ2h0WzBdLCBzY2FsZXJfdjIuZHN0X3dpZHRoLAotCQkJCXNjYWxlcl92Mi5kc3Rf aGVpZ2h0KTsKLQkJCURQVV9FVlQzMl9WRVJCT1NFKERSTUlEKCZkcHVfY3J0Yy0+YmFzZSksCi0J CQkJc2NhbGVyX3YyLmVuYWJsZSwgc2NhbGVyX3YyLmRpcl9lbiwKLQkJCQlzY2FsZXJfdjIuZGUu ZW5hYmxlLCBzY2FsZXJfdjIuc3JjX3dpZHRoWzBdLAotCQkJCXNjYWxlcl92Mi5zcmNfaGVpZ2h0 WzBdLCBzY2FsZXJfdjIuZHN0X3dpZHRoLAotCQkJCXNjYWxlcl92Mi5kc3RfaGVpZ2h0KTsKLQkJ fQotCi0JCURQVV9ERUJVRygiZHMgY2ZnWyVkXS1uZHgoJWQpIGZsYWdzKCVkKSBsbSglZHglZClc biIsCi0JCQlpLCBkc19jZmdfdXNyLT5pbmRleCwgZHNfY2ZnX3Vzci0+ZmxhZ3MsCi0JCQlkc19j ZmdfdXNyLT5sbV93aWR0aCwgZHNfY2ZnX3Vzci0+bG1faGVpZ2h0KTsKLQkJRFBVX0VWVDMyX1ZF UkJPU0UoRFJNSUQoJmRwdV9jcnRjLT5iYXNlKSwgaSwgZHNfY2ZnX3Vzci0+aW5kZXgsCi0JCQlk c19jZmdfdXNyLT5mbGFncywgZHNfY2ZnX3Vzci0+bG1fd2lkdGgsCi0JCQlkc19jZmdfdXNyLT5s bV9oZWlnaHQpOwotCX0KLQotCWNzdGF0ZS0+bnVtX2RzID0gY291bnQ7Ci0JY3N0YXRlLT5kc19k aXJ0eSA9IHRydWU7Ci0JcmV0dXJuIDA7Ci0KLWVycjoKLQlmb3IgKDsgaSA+PSAwOyBpLS0pCi0J CWtmcmVlKGNzdGF0ZS0+ZHNfY2ZnW2ldLnNjbDNfY2ZnKTsKLQotCXJldHVybiByZXQ7Ci19Ci0K LS8qKgotICogX2RwdV9jcnRjX2NoZWNrX2Rlc3Rfc2NhbGVyX2RhdGEgLSB2YWxpZGF0ZSB0aGUg ZGVzdCBzY2FsZXIgZGF0YQotICogQGNydGMgIDogIFBvaW50ZXIgdG8gZHJtIGNydGMKLSAqIEBz dGF0ZSA6ICBQb2ludGVyIHRvIGRybSBjcnRjIHN0YXRlCi0gKi8KLXN0YXRpYyBpbnQgX2RwdV9j cnRjX2NoZWNrX2Rlc3Rfc2NhbGVyX2RhdGEoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0 YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZTsKLQlzdHJ1Y3QgZHB1X2ttcyAqa21zOwotCXN0cnVjdCBkcHVfaHdfZHMgKmh3 X2RzOwotCXN0cnVjdCBkcHVfaHdfZHNfY2ZnICpjZmc7Ci0JdTMyIGksIHJldCA9IDAsIGxtX2lk eDsKLQl1MzIgbnVtX2RzX2VuYWJsZSA9IDA7Ci0JdTMyIG1heF9pbl93aWR0aCA9IDAsIG1heF9v dXRfd2lkdGggPSAwOwotCXUzMiBwcmV2X2xtX3dpZHRoID0gMCwgcHJldl9sbV9oZWlnaHQgPSAw OwotCi0JaWYgKCFjcnRjIHx8ICFzdGF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcHVfY3J0 YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRl KTsKLQlrbXMgPSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsKLQltb2RlID0gJnN0YXRlLT5hZGp1 c3RlZF9tb2RlOwotCi0JRFBVX0RFQlVHKCJjcnRjJWRcbiIsIGNydGMtPmJhc2UuaWQpOwotCi0J aWYgKCFjc3RhdGUtPmRzX2RpcnR5ICYmICFjc3RhdGUtPm51bV9kc19lbmFibGVkKSB7Ci0JCURQ VV9ERUJVRygiZGVzdCBzY2FsZXIgcHJvcGVydHkgbm90IHNldCwgc2tpcCB2YWxpZGF0aW9uXG4i KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCFrbXMgfHwgIWttcy0+Y2F0YWxvZykgewotCQlE UFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCWlmICgha21zLT5jYXRhbG9nLT5tZHBbMF0uaGFzX2Rlc3Rfc2NhbGVyKSB7Ci0JCURQVV9E RUJVRygiZGVzdCBzY2FsZXIgZmVhdHVyZSBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIDA7 Ci0JfQotCi0JaWYgKCFkcHVfY3J0Yy0+bnVtX21peGVycykgewotCQlEUFVfRVJST1IoIm1peGVy cyBub3QgYWxsb2NhdGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoqCi0JICog Q2hlY2sgaWYgc3VmZmljaWVudCBodyByZXNvdXJjZXMgYXJlCi0JICogYXZhaWxhYmxlIGFzIHBl ciB0YXJnZXQgY2FwcyAmIHRvcG9sb2d5Ci0JICovCi0JaWYgKGRwdV9jcnRjLT5udW1fbWl4ZXJz ID4gQ1JUQ19EVUFMX01JWEVSUykgewotCQlEUFVfRVJST1IoImludmFsaWQgY29uZmlnOiBtaXhl cnMoJWQpIG1heCglZClcbiIsCi0JCQlkcHVfY3J0Yy0+bnVtX21peGVycywgQ1JUQ19EVUFMX01J WEVSUyk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOwotCX0KLQotCWZvciAoaSA9IDA7 IGkgPCBkcHVfY3J0Yy0+bnVtX21peGVyczsgaSsrKSB7Ci0JCWlmICghZHB1X2NydGMtPm1peGVy c1tpXS5od19sbSB8fCAhZHB1X2NydGMtPm1peGVyc1tpXS5od19kcykgewotCQkJRFBVX0VSUk9S KCJpbnN1ZmZpY2llbnQgSFcgcmVzb3VyY2VzIGFsbG9jYXRlZFxuIik7Ci0JCQlyZXQgPSAtRUlO VkFMOwotCQkJZ290byBlcnI7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBpZiBEUyBuZWVk cyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkCi0JICogSW4gY2FzZSBvZiBlbmFibGUsIHZhbGlk YXRlIHRoZSBkYXRhCi0JICovCi0JaWYgKCFjc3RhdGUtPmRzX2RpcnR5IHx8ICFjc3RhdGUtPm51 bV9kcyB8fAotCQkhKGNzdGF0ZS0+ZHNfY2ZnWzBdLmZsYWdzICYgRFBVX0RSTV9ERVNUU0NBTEVS X0VOQUJMRSkpIHsKLQkJRFBVX0RFQlVHKCJkaXNhYmxlIGRlc3Qgc2NhbGVyLGRpcnR5KCVkKW51 bSglZClmbGFncyglZClcbiIsCi0JCQljc3RhdGUtPmRzX2RpcnR5LCBjc3RhdGUtPm51bV9kcywK LQkJCWNzdGF0ZS0+ZHNfY2ZnWzBdLmZsYWdzKTsKLQkJZ290byBkaXNhYmxlOwotCX0KLQotCS8q KgotCSAqIE5vIG9mIGRlc3Qgc2NhbGVycyBzaG91bGRuJ3QgZXhjZWVkIGh3IGRzIGJsb2NrIGNv dW50IGFuZAotCSAqIGFsc28sIG1hdGNoIHRoZSBudW0gb2YgbWl4ZXJzIHVubGVzcyBpdCBpcyBw YXJ0aWFsIHVwZGF0ZQotCSAqIGxlZnQgb25seS9yaWdodCBvbmx5IHVzZSBjYXNlIC0gY3VycmVu dGx5IFBVICsgRFMgaXMgbm90IHN1cHBvcnRlZAotCSAqLwotCWlmIChjc3RhdGUtPm51bV9kcyA+ IGttcy0+Y2F0YWxvZy0+ZHNfY291bnQgfHwKLQkJKChjc3RhdGUtPm51bV9kcyAhPSBkcHVfY3J0 Yy0+bnVtX21peGVycykgJiYKLQkJIShjc3RhdGUtPmRzX2NmZ1swXS5mbGFncyAmIERQVV9EUk1f REVTVFNDQUxFUl9QVV9FTkFCTEUpKSkgewotCQlEUFVfRVJST1IoImludmFsaWQgY2ZnOiBudW1f ZHMoJWQpLCBod19kc19jbnQoJWQpIGZsYWdzKCVkKVxuIiwKLQkJCWNzdGF0ZS0+bnVtX2RzLCBr bXMtPmNhdGFsb2ctPmRzX2NvdW50LAotCQkJY3N0YXRlLT5kc19jZmdbMF0uZmxhZ3MpOwotCQly ZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9Ci0KLQkvKiBWYWxpZGF0ZSB0aGUgRFMgZGF0 YSAqLwotCWZvciAoaSA9IDA7IGkgPCBjc3RhdGUtPm51bV9kczsgaSsrKSB7Ci0JCWNmZyA9ICZj c3RhdGUtPmRzX2NmZ1tpXTsKLQkJbG1faWR4ID0gY2ZnLT5uZHg7Ci0KLQkJLyoqCi0JCSAqIFZh bGlkYXRlIGFnYWluc3QgdG9wb2xvZ3kKLQkJICogTm8gb2YgZGVzdCBzY2FsZXJzIHNob3VsZCBt YXRjaCB0aGUgbnVtIG9mIG1peGVycwotCQkgKiB1bmxlc3MgaXQgaXMgcGFydGlhbCB1cGRhdGUg bGVmdCBvbmx5L3JpZ2h0IG9ubHkgdXNlIGNhc2UKLQkJICovCi0JCWlmIChsbV9pZHggPj0gZHB1 X2NydGMtPm51bV9taXhlcnMgfHwgKGkgIT0gbG1faWR4ICYmCi0JCQkhKGNmZy0+ZmxhZ3MgJiBE UFVfRFJNX0RFU1RTQ0FMRVJfUFVfRU5BQkxFKSkpIHsKLQkJCURQVV9FUlJPUigiaW52YWxpZCB1 c2VyIGRhdGEoJWQpOmlkeCglZCksIGZsYWdzKCVkKVxuIiwKLQkJCQlpLCBsbV9pZHgsIGNmZy0+ ZmxhZ3MpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQkJaHdfZHMg PSBkcHVfY3J0Yy0+bWl4ZXJzW2xtX2lkeF0uaHdfZHM7Ci0KLQkJaWYgKCFtYXhfaW5fd2lkdGgg JiYgIW1heF9vdXRfd2lkdGgpIHsKLQkJCW1heF9pbl93aWR0aCA9IGh3X2RzLT5zY2wtPnRvcC0+ bWF4aW5wdXR3aWR0aDsKLQkJCW1heF9vdXRfd2lkdGggPSBod19kcy0+c2NsLT50b3AtPm1heG91 dHB1dHdpZHRoOwotCi0JCQlpZiAoY3N0YXRlLT5udW1fZHMgPT0gQ1JUQ19EVUFMX01JWEVSUykK LQkJCQltYXhfaW5fd2lkdGggLT0gRFBVX0RTX09WRVJGRVRDSF9TSVpFOwotCi0JCQlEUFVfREVC VUcoIm1heCBEUyB3aWR0aCBbJWQsJWRdIGZvciBudW1fZHMgPSAlZFxuIiwKLQkJCQltYXhfaW5f d2lkdGgsIG1heF9vdXRfd2lkdGgsIGNzdGF0ZS0+bnVtX2RzKTsKLQkJfQotCi0JCS8qIENoZWNr IExNIHdpZHRoIGFuZCBoZWlnaHQgKi8KLQkJaWYgKGNmZy0+bG1fd2lkdGggPiAobW9kZS0+aGRp c3BsYXkvZHB1X2NydGMtPm51bV9taXhlcnMpIHx8Ci0JCQljZmctPmxtX2hlaWdodCA+IG1vZGUt PnZkaXNwbGF5IHx8Ci0JCQkhY2ZnLT5sbV93aWR0aCB8fCAhY2ZnLT5sbV9oZWlnaHQpIHsKLQkJ CURQVV9FUlJPUigiaW52YWxpZCBsbSBzaXplWyVkLCVkXSBkaXNwbGF5IFslZCwlZF1cbiIsCi0J CQkJY2ZnLT5sbV93aWR0aCwKLQkJCQljZmctPmxtX2hlaWdodCwKLQkJCQltb2RlLT5oZGlzcGxh eS9kcHVfY3J0Yy0+bnVtX21peGVycywKLQkJCQltb2RlLT52ZGlzcGxheSk7Ci0JCQlyZXQgPSAt RTJCSUc7Ci0JCQlnb3RvIGVycjsKLQkJfQotCi0JCWlmICghcHJldl9sbV93aWR0aCAmJiAhcHJl dl9sbV9oZWlnaHQpIHsKLQkJCXByZXZfbG1fd2lkdGggPSBjZmctPmxtX3dpZHRoOwotCQkJcHJl dl9sbV9oZWlnaHQgPSBjZmctPmxtX2hlaWdodDsKLQkJfSBlbHNlIHsKLQkJCWlmIChjZmctPmxt X3dpZHRoICE9IHByZXZfbG1fd2lkdGggfHwKLQkJCQljZmctPmxtX2hlaWdodCAhPSBwcmV2X2xt X2hlaWdodCkgewotCQkJCURQVV9FUlJPUigibG0gc2l6ZTpsZWZ0WyVkLCVkXSwgcmlnaHRbJWQg JWRdXG4iLAotCQkJCQljZmctPmxtX3dpZHRoLCBjZmctPmxtX2hlaWdodCwKLQkJCQkJcHJldl9s bV93aWR0aCwgcHJldl9sbV9oZWlnaHQpOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBl cnI7Ci0JCQl9Ci0JCX0KLQotCQkvKiBDaGVjayBzY2FsZXIgZGF0YSAqLwotCQlpZiAoY2ZnLT5m bGFncyAmIERQVV9EUk1fREVTVFNDQUxFUl9TQ0FMRV9VUERBVEUgfHwKLQkJCWNmZy0+ZmxhZ3Mg JiBEUFVfRFJNX0RFU1RTQ0FMRVJfRU5IQU5DRVJfVVBEQVRFKSB7Ci0JCQlpZiAoIWNmZy0+c2Ns M19jZmcpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCURQVV9FUlJPUigibnVsbCBzY2FsZSBk YXRhXG4iKTsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQkJCWlmIChjZmctPnNjbDNfY2ZnLT5zcmNf d2lkdGhbMF0gPiBtYXhfaW5fd2lkdGggfHwKLQkJCQljZmctPnNjbDNfY2ZnLT5kc3Rfd2lkdGgg PiBtYXhfb3V0X3dpZHRoIHx8Ci0JCQkJIWNmZy0+c2NsM19jZmctPnNyY193aWR0aFswXSB8fAot CQkJCSFjZmctPnNjbDNfY2ZnLT5kc3Rfd2lkdGgpIHsKLQkJCQlEUFVfRVJST1IoInNjYWxlIHdp ZHRoKCVkICVkKSBmb3IgZHMtJWQ6XG4iLAotCQkJCQljZmctPnNjbDNfY2ZnLT5zcmNfd2lkdGhb MF0sCi0JCQkJCWNmZy0+c2NsM19jZmctPmRzdF93aWR0aCwKLQkJCQkJaHdfZHMtPmlkeCAtIERT XzApOwotCQkJCURQVV9FUlJPUigic2NhbGVfZW4gPSAlZCwgREVfZW4gPSVkXG4iLAotCQkJCQlj ZmctPnNjbDNfY2ZnLT5lbmFibGUsCi0JCQkJCWNmZy0+c2NsM19jZmctPmRlLmVuYWJsZSk7Ci0K LQkJCQljZmctPmZsYWdzICY9Ci0JCQkJCX5EUFVfRFJNX0RFU1RTQ0FMRVJfU0NBTEVfVVBEQVRF OwotCQkJCWNmZy0+ZmxhZ3MgJj0KLQkJCQkJfkRQVV9EUk1fREVTVFNDQUxFUl9FTkhBTkNFUl9V UERBVEU7Ci0KLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCQl9Ci0K LQkJaWYgKGNmZy0+ZmxhZ3MgJiBEUFVfRFJNX0RFU1RTQ0FMRVJfRU5BQkxFKQotCQkJbnVtX2Rz X2VuYWJsZSsrOwotCi0JCS8qKgotCQkgKiBWYWxpZGF0aW9uIHN1Y2Nlc3NmdWwsIGluZGljYXRv ciBmb3IgZmx1c2ggdG8gYmUgaXNzdWVkCi0JCSAqLwotCQljZmctPnNldF9sbV9mbHVzaCA9IHRy dWU7Ci0KLQkJRFBVX0RFQlVHKCJkc1slZF06IGZsYWdzID0gMHglWFxuIiwKLQkJCWh3X2RzLT5p ZHggLSBEU18wLCBjZmctPmZsYWdzKTsKLQl9Ci0KLWRpc2FibGU6Ci0JRFBVX0RFQlVHKCJkZXN0 IHNjYWxlciBlbmFibGUgc3RhdHVzLCBvbGQgPSAlZCwgbmV3ID0gJWQiLAotCQljc3RhdGUtPm51 bV9kc19lbmFibGVkLCBudW1fZHNfZW5hYmxlKTsKLQlEUFVfRVZUMzIoRFJNSUQoY3J0YyksIGNz dGF0ZS0+bnVtX2RzX2VuYWJsZWQsIG51bV9kc19lbmFibGUsCi0JCWNzdGF0ZS0+ZHNfZGlydHkp OwotCi0JaWYgKGNzdGF0ZS0+bnVtX2RzX2VuYWJsZWQgIT0gbnVtX2RzX2VuYWJsZSkgewotCQkv KiBEaXNhYmxpbmcgZGVzdGluYXRpb24gc2NhbGVyICovCi0JCWlmICghbnVtX2RzX2VuYWJsZSkg ewotCQkJZm9yIChpID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBpKyspIHsKLQkJCQlj ZmcgPSAmY3N0YXRlLT5kc19jZmdbaV07Ci0JCQkJY2ZnLT5uZHggPSBpOwotCQkJCS8qIFVwZGF0 ZSBzY2FsZXIgc2V0dGluZ3MgaW4gZGlzYWJsZSBjYXNlICovCi0JCQkJY2ZnLT5mbGFncyA9IERQ VV9EUk1fREVTVFNDQUxFUl9TQ0FMRV9VUERBVEU7Ci0JCQkJY2ZnLT5zY2wzX2NmZy0+ZW5hYmxl ID0gMDsKLQkJCQljZmctPnNjbDNfY2ZnLT5kZS5lbmFibGUgPSAwOwotCQkJCWNmZy0+c2V0X2xt X2ZsdXNoID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQljc3RhdGUtPm51bV9kc19lbmFibGVkID0gbnVt X2RzX2VuYWJsZTsKLQkJY3N0YXRlLT5kc19kaXJ0eSA9IHRydWU7Ci0JfQotCi0JcmV0dXJuIDA7 Ci0KLWVycjoKLQljc3RhdGUtPmRzX2RpcnR5ID0gZmFsc2U7Ci0JcmV0dXJuIHJldDsKLX0KLQog c3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX21peGVyX2Zvcl9lbmNvZGVyKAogCQlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCiAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQpAQCAtMTc2OSwxMSAr MTA3OSwxMCBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2VuY29kZXIo CiAJc3RydWN0IGRwdV9jcnRjX21peGVyICptaXhlcjsKIAlzdHJ1Y3QgZHB1X2h3X2N0bCAqbGFz dF92YWxpZF9jdGwgPSBOVUxMOwogCWludCBpOwotCXN0cnVjdCBkcHVfcm1faHdfaXRlciBsbV9p dGVyLCBjdGxfaXRlciwgZHNfaXRlcjsKKwlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgbG1faXRlciwg Y3RsX2l0ZXI7CiAKIAlkcHVfcm1faW5pdF9od19pdGVyKCZsbV9pdGVyLCBlbmMtPmJhc2UuaWQs IERQVV9IV19CTEtfTE0pOwogCWRwdV9ybV9pbml0X2h3X2l0ZXIoJmN0bF9pdGVyLCBlbmMtPmJh c2UuaWQsIERQVV9IV19CTEtfQ1RMKTsKLQlkcHVfcm1faW5pdF9od19pdGVyKCZkc19pdGVyLCBl bmMtPmJhc2UuaWQsIERQVV9IV19CTEtfRFMpOwogCiAJLyogU2V0IHVwIGFsbCB0aGUgbWl4ZXJz IGFuZCBjdGxzIHJlc2VydmVkIGJ5IHRoaXMgZW5jb2RlciAqLwogCWZvciAoaSA9IGRwdV9jcnRj LT5udW1fbWl4ZXJzOyBpIDwgQVJSQVlfU0laRShkcHVfY3J0Yy0+bWl4ZXJzKTsgaSsrKSB7CkBA IC0xODAwLDEwICsxMTA5LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX21peGVyX2Zv cl9lbmNvZGVyKAogCQkJcmV0dXJuOwogCQl9CiAKLQkJLyogRFMgbWF5IGJlIG51bGwgKi8KLQkJ KHZvaWQpIGRwdV9ybV9nZXRfaHcocm0sICZkc19pdGVyKTsKLQkJbWl4ZXItPmh3X2RzID0gKHN0 cnVjdCBkcHVfaHdfZHMgKilkc19pdGVyLmh3OwotCiAJCW1peGVyLT5lbmNvZGVyID0gZW5jOwog CiAJCWRwdV9jcnRjLT5udW1fbWl4ZXJzKys7CkBAIC0xODExLDkgKzExMTYsNiBAQCBzdGF0aWMg dm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2VuY29kZXIoCiAJCQkJaSwgbWl4ZXItPmh3 X2xtLT5pZHggLSBMTV8wKTsKIAkJRFBVX0RFQlVHKCJzZXR1cCBtaXhlciAlZDogY3RsICVkXG4i LAogCQkJCWksIG1peGVyLT5od19jdGwtPmlkeCAtIENUTF8wKTsKLQkJaWYgKG1peGVyLT5od19k cykKLQkJCURQVV9ERUJVRygic2V0dXAgbWl4ZXIgJWQ6IGRzICVkXG4iLAotCQkJCWksIG1peGVy LT5od19kcy0+aWR4IC0gRFNfMCk7CiAJfQogfQogCkBAIC0xOTI5LDcgKzEyMzEsNiBAQCBzdGF0 aWMgdm9pZCBkcHVfY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQly ZXR1cm47CiAKIAlfZHB1X2NydGNfYmxlbmRfc2V0dXAoY3J0Yyk7Ci0JX2RwdV9jcnRjX2Rlc3Rf c2NhbGVyX3NldHVwKGNydGMpOwogCiAJLyoKIAkgKiBQUF9ET05FIGlycSBpcyBvbmx5IHVzZWQg YnkgY29tbWFuZCBtb2RlIGZvciBub3cuCkBAIC0yNjI0LDEzICsxOTI1LDYgQEAgc3RhdGljIGlu dCBkcHVfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAogCiAJbWVtc2V0 KHBpcGVfc3RhZ2VkLCAwLCBzaXplb2YocGlwZV9zdGFnZWQpKTsKIAotCXJjID0gX2RwdV9jcnRj X2NoZWNrX2Rlc3Rfc2NhbGVyX2RhdGEoY3J0Yywgc3RhdGUpOwotCWlmIChyYykgewotCQlEUFVf RVJST1IoImNydGMlZCBmYWlsZWQgZGVzdCBzY2FsZXIgY2hlY2sgJWRcbiIsCi0JCQljcnRjLT5i YXNlLmlkLCByYyk7Ci0JCWdvdG8gZW5kOwotCX0KLQogCW1peGVyX3dpZHRoID0gZHB1X2NydGNf Z2V0X21peGVyX3dpZHRoKGRwdV9jcnRjLCBjc3RhdGUsIG1vZGUpOwogCiAJX2RwdV9jcnRjX3Nl dHVwX2xtX2JvdW5kcyhjcnRjLCBzdGF0ZSk7CkBAIC0yNjUxLDE5ICsxOTQ1LDYgQEAgc3RhdGlj IGludCBkcHVfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQlwc3Rh dGVzW2NudF0uc3RhZ2UgPSBwc3RhdGUtPm5vcm1hbGl6ZWRfenBvczsKIAkJcHN0YXRlc1tjbnRd LnBpcGVfaWQgPSBkcHVfcGxhbmVfcGlwZShwbGFuZSk7CiAKLQkJLyogY2hlY2sgZGltIGxheWVy IHN0YWdlIHdpdGggZXZlcnkgcGxhbmUgKi8KLQkJZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVt X2RpbV9sYXllcnM7IGkrKykgewotCQkJaWYgKGNzdGF0ZS0+ZGltX2xheWVyW2ldLnN0YWdlCi0J CQkJCT09IChwc3RhdGVzW2NudF0uc3RhZ2UgKyBEUFVfU1RBR0VfMCkpIHsKLQkJCQlEUFVfRVJS T1IoCi0JCQkJCSJwbGFuZTolZC9kaW1fbGF5ZXI6JWktc2FtZSBzdGFnZTolZFxuIiwKLQkJCQkJ cGxhbmUtPmJhc2UuaWQsIGksCi0JCQkJCWNzdGF0ZS0+ZGltX2xheWVyW2ldLnN0YWdlKTsKLQkJ CQlyYyA9IC1FSU5WQUw7Ci0JCQkJZ290byBlbmQ7Ci0JCQl9Ci0JCX0KLQogCQlpZiAocGlwZV9z dGFnZWRbcHN0YXRlc1tjbnRdLnBpcGVfaWRdKSB7CiAJCQltdWx0aXJlY3RfcGxhbmVbbXVsdGly ZWN0X2NvdW50XS5yMCA9CiAJCQkJcGlwZV9zdGFnZWRbcHN0YXRlc1tjbnRdLnBpcGVfaWRdOwpA QCAtMjg5OSw1MiArMjE4MCwxMSBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19pbnN0YWxsX3Byb3Bl cnRpZXMoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQlyZXR1cm47CiAJfQogCi0JLyogcmFuZ2Ug cHJvcGVydGllcyAqLwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJv cGVydHlfaW5mbywKLQkJCSJjb3JlX2NsayIsIDB4MCwgMCwgVTY0X01BWCwKLQkJCWRwdV9rbXMt PnBlcmYubWF4X2NvcmVfY2xrX3JhdGUsCi0JCQlDUlRDX1BST1BfQ09SRV9DTEspOwotCW1zbV9w cm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJCSJjb3Jl X2FiIiwgMHgwLCAwLCBVNjRfTUFYLAotCQkJY2F0YWxvZy0+cGVyZi5tYXhfYndfaGlnaCAqIDEw MDBVTEwsCi0JCQlDUlRDX1BST1BfQ09SRV9BQik7Ci0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFu Z2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJImNvcmVfaWIiLCAweDAsIDAsIFU2NF9N QVgsCi0JCQljYXRhbG9nLT5wZXJmLm1heF9id19oaWdoICogMTAwMFVMTCwKLQkJCUNSVENfUFJP UF9DT1JFX0lCKTsKLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnByb3Bl cnR5X2luZm8sCi0JCQkibGxjY19hYiIsIDB4MCwgMCwgVTY0X01BWCwKLQkJCWNhdGFsb2ctPnBl cmYubWF4X2J3X2hpZ2ggKiAxMDAwVUxMLAotCQkJQ1JUQ19QUk9QX0xMQ0NfQUIpOwotCW1zbV9w cm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJCSJsbGNj X2liIiwgMHgwLCAwLCBVNjRfTUFYLAotCQkJY2F0YWxvZy0+cGVyZi5tYXhfYndfaGlnaCAqIDEw MDBVTEwsCi0JCQlDUlRDX1BST1BfTExDQ19JQik7Ci0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFu Z2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJImRyYW1fYWIiLCAweDAsIDAsIFU2NF9N QVgsCi0JCQljYXRhbG9nLT5wZXJmLm1heF9id19oaWdoICogMTAwMFVMTCwKLQkJCUNSVENfUFJP UF9EUkFNX0FCKTsKLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnByb3Bl cnR5X2luZm8sCi0JCQkiZHJhbV9pYiIsIDB4MCwgMCwgVTY0X01BWCwKLQkJCWNhdGFsb2ctPnBl cmYubWF4X2J3X2hpZ2ggKiAxMDAwVUxMLAotCQkJQ1JUQ19QUk9QX0RSQU1fSUIpOwotCi0JbXNt X3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkiaWRs ZV90aW1lb3V0IiwgSURMRV9USU1FT1VULCAwLCBVNjRfTUFYLCAwLAotCQlDUlRDX1BST1BfSURM RV9USU1FT1VUKTsKLQogCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmRwdV9jcnRjLT5wcm9w ZXJ0eV9pbmZvLCAiY2FwYWJpbGl0aWVzIiwKIAkJRFJNX01PREVfUFJPUF9JTU1VVEFCTEUsIENS VENfUFJPUF9JTkZPKTsKIAogCWRwdV9rbXNfaW5mb19yZXNldChpbmZvKTsKIAotCWlmIChjYXRh bG9nLT5jYXBzLT5oYXNfZGltX2xheWVyKSB7Ci0JCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3ZvbGF0 aWxlX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJCSJkaW1fbGF5ZXJfdjEiLCAw eDAsIDAsIH4wLCAwLCBDUlRDX1BST1BfRElNX0xBWUVSX1YxKTsKLQkJZHB1X2ttc19pbmZvX2Fk ZF9rZXlpbnQoaW5mbywgImRpbV9sYXllcl92MV9tYXhfbGF5ZXJzIiwKLQkJCQlEUFVfTUFYX0RJ TV9MQVlFUlMpOwotCX0KLQogCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJod192ZXJz aW9uIiwgY2F0YWxvZy0+aHd2ZXJzaW9uKTsKIAlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZv LCAibWF4X2xpbmV3aWR0aCIsCiAJCQljYXRhbG9nLT5jYXBzLT5tYXhfbWl4ZXJfd2lkdGgpOwpA QCAtMjk2NCwzOSArMjIwNCw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2luc3RhbGxfcHJvcGVy dGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJCSJzbWFydF9kbWFfcmV2IiwgInNtYXJ0 X2RtYV92MiIpOwogCX0KIAotCWlmIChjYXRhbG9nLT5tZHBbMF0uaGFzX2Rlc3Rfc2NhbGVyKSB7 Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJoYXNfZGVzdF9zY2FsZXIiLAotCQkJ CWNhdGFsb2ctPm1kcFswXS5oYXNfZGVzdF9zY2FsZXIpOwotCQlkcHVfa21zX2luZm9fYWRkX2tl eWludChpbmZvLCAiZGVzdF9zY2FsZXJfY291bnQiLAotCQkJCQljYXRhbG9nLT5kc19jb3VudCk7 Ci0KLQkJaWYgKGNhdGFsb2ctPmRzWzBdLnRvcCkgewotCQkJZHB1X2ttc19pbmZvX2FkZF9rZXlp bnQoaW5mbywKLQkJCQkJIm1heF9kZXN0X3NjYWxlcl9pbnB1dF93aWR0aCIsCi0JCQkJCWNhdGFs b2ctPmRzWzBdLnRvcC0+bWF4aW5wdXR3aWR0aCk7Ci0JCQlkcHVfa21zX2luZm9fYWRkX2tleWlu dChpbmZvLAotCQkJCQkibWF4X2Rlc3Rfc2NhbGVyX291dHB1dF93aWR0aCIsCi0JCQkJCWNhdGFs b2ctPmRzWzBdLnRvcC0+bWF4aW5wdXR3aWR0aCk7Ci0JCQlkcHVfa21zX2luZm9fYWRkX2tleWlu dChpbmZvLCAibWF4X2Rlc3Rfc2NhbGVfdXAiLAotCQkJCQljYXRhbG9nLT5kc1swXS50b3AtPm1h eHVwc2NhbGUpOwotCQl9Ci0KLQkJaWYgKGNhdGFsb2ctPmRzWzBdLmZlYXR1cmVzICYgQklUKERQ VV9TU1BQX1NDQUxFUl9RU0VFRDMpKSB7Ci0JCQltc21fcHJvcGVydHlfaW5zdGFsbF92b2xhdGls ZV9yYW5nZSgKLQkJCQkJJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLCAiZGVzdF9zY2FsZXIiLAot CQkJCQkweDAsIDAsIH4wLCAwLCBDUlRDX1BST1BfREVTVF9TQ0FMRVIpOwotCQkJbXNtX3Byb3Bl cnR5X2luc3RhbGxfYmxvYigmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCQkJCSJkc19sdXRf ZWQiLCAwLAotCQkJCQlDUlRDX1BST1BfREVTVF9TQ0FMRVJfTFVUX0VEKTsKLQkJCW1zbV9wcm9w ZXJ0eV9pbnN0YWxsX2Jsb2IoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkiZHNfbHV0 X2NpciIsIDAsCi0JCQkJCUNSVENfUFJPUF9ERVNUX1NDQUxFUl9MVVRfQ0lSKTsKLQkJCW1zbV9w cm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkiZHNf bHV0X3NlcCIsIDAsCi0JCQkJCUNSVENfUFJPUF9ERVNUX1NDQUxFUl9MVVRfU0VQKTsKLQkJfQot CX0KLQogCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJoYXNfc3JjX3NwbGl0IiwKIAkJ CQljYXRhbG9nLT5jYXBzLT5oYXNfc3JjX3NwbGl0KTsKIAlpZiAoY2F0YWxvZy0+cGVyZi5tYXhf YndfbG93KQpAQCAtMzA2NSw3ICsyMjcyLDcgQEAgc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNf c2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIHsKIAlzdHJ1Y3QgZHB1X2NydGMg KmRwdV9jcnRjOwogCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwotCWludCBpZHgsIHJl dCA9IC1FSU5WQUw7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoIWNydGMgfHwgIXN0YXRl IHx8ICFwcm9wZXJ0eSkgewogCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIpOwpA QCAtMzA3NCw0NSArMjI4MSw4IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX3NldF9wcm9w ZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRl KHN0YXRlKTsKIAkJcmV0ID0gbXNtX3Byb3BlcnR5X2F0b21pY19zZXQoJmRwdV9jcnRjLT5wcm9w ZXJ0eV9pbmZvLAogCQkJCSZjc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBwcm9wZXJ0eSwgdmFsKTsK LQkJaWYgKCFyZXQpIHsKLQkJCWlkeCA9IG1zbV9wcm9wZXJ0eV9pbmRleCgmZHB1X2NydGMtPnBy b3BlcnR5X2luZm8sCi0JCQkJCXByb3BlcnR5KTsKLQkJCXN3aXRjaCAoaWR4KSB7Ci0JCQljYXNl IENSVENfUFJPUF9ESU1fTEFZRVJfVjE6Ci0JCQkJX2RwdV9jcnRjX3NldF9kaW1fbGF5ZXJfdjEo Y3N0YXRlLAotCQkJCQkJCXU2NF90b191c2VyX3B0cih2YWwpKTsKLQkJCQlicmVhazsKLQkJCWNh c2UgQ1JUQ19QUk9QX0RFU1RfU0NBTEVSOgotCQkJCXJldCA9IF9kcHVfY3J0Y19zZXRfZGVzdF9z Y2FsZXIoZHB1X2NydGMsCi0JCQkJCQljc3RhdGUsIHU2NF90b191c2VyX3B0cih2YWwpKTsKLQkJ CQlicmVhazsKLQkJCWNhc2UgQ1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xVVF9FRDoKLQkJCWNhc2Ug Q1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xVVF9DSVI6Ci0JCQljYXNlIENSVENfUFJPUF9ERVNUX1ND QUxFUl9MVVRfU0VQOgotCQkJCXJldCA9IF9kcHVfY3J0Y19zZXRfZGVzdF9zY2FsZXJfbHV0KGRw dV9jcnRjLAotCQkJCQkJCQljc3RhdGUsIGlkeCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENSVENf UFJPUF9DT1JFX0NMSzoKLQkJCWNhc2UgQ1JUQ19QUk9QX0NPUkVfQUI6Ci0JCQljYXNlIENSVENf UFJPUF9DT1JFX0lCOgotCQkJCWNzdGF0ZS0+YndfY29udHJvbCA9IHRydWU7Ci0JCQkJYnJlYWs7 Ci0JCQljYXNlIENSVENfUFJPUF9MTENDX0FCOgotCQkJY2FzZSBDUlRDX1BST1BfTExDQ19JQjoK LQkJCWNhc2UgQ1JUQ19QUk9QX0RSQU1fQUI6Ci0JCQljYXNlIENSVENfUFJPUF9EUkFNX0lCOgot CQkJCWNzdGF0ZS0+YndfY29udHJvbCA9IHRydWU7Ci0JCQkJY3N0YXRlLT5id19zcGxpdF92b3Rl ID0gdHJ1ZTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ1JUQ19QUk9QX0lETEVfVElNRU9VVDoKLQkJ CQlfZHB1X2NydGNfc2V0X2lkbGVfdGltZW91dChjcnRjLCB2YWwpOwotCQkJZGVmYXVsdDoKLQkJ CQkvKiBub3RoaW5nIHRvIGRvICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7CisJCWlm IChyZXQpCiAJCQlEUk1fRVJST1IoImZhaWxlZCB0byBzZXQgdGhlIHByb3BlcnR5XG4iKTsKLQkJ fQogCiAJCURQVV9ERUJVRygiY3J0YyVkICVzWyVkXSA8PSAweCVsbHggcmV0PSVkXG4iLCBjcnRj LT5iYXNlLmlkLAogCQkJCXByb3BlcnR5LT5uYW1lLCBwcm9wZXJ0eS0+YmFzZS5pZCwgdmFsLCBy ZXQpOwpAQCAtMzIyOCwyMyArMjM5OCw2IEBAIHN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2ZzX3N0YXR1 c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKIAogCXNlcV9wdXRzKHMsICJc biIpOwogCi0JZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX2RpbV9sYXllcnM7IGkrKykgewot CQlzdHJ1Y3QgZHB1X2h3X2RpbV9sYXllciAqZGltX2xheWVyID0gJmNzdGF0ZS0+ZGltX2xheWVy W2ldOwotCi0JCXNlcV9wcmludGYocywgIlx0ZGltX2xheWVyOiVkXSBzdGFnZTolZCBmbGFnczol ZFxuIiwKLQkJCQlpLCBkaW1fbGF5ZXItPnN0YWdlLCBkaW1fbGF5ZXItPmZsYWdzKTsKLQkJc2Vx X3ByaW50ZihzLCAiXHRkc3RfeDolZCBkc3RfeTolZCBkc3RfdzolZCBkc3RfaDolZFxuIiwKLQkJ CQlkaW1fbGF5ZXItPnJlY3QueCwgZGltX2xheWVyLT5yZWN0LnksCi0JCQkJZGltX2xheWVyLT5y ZWN0LncsIGRpbV9sYXllci0+cmVjdC5oKTsKLQkJc2VxX3ByaW50ZihzLAotCQkJIlx0Y29sb3Jf MDolZCBjb2xvcl8xOiVkIGNvbG9yXzI6JWQgY29sb3JfMzolZFxuIiwKLQkJCQlkaW1fbGF5ZXIt PmNvbG9yX2ZpbGwuY29sb3JfMCwKLQkJCQlkaW1fbGF5ZXItPmNvbG9yX2ZpbGwuY29sb3JfMSwK LQkJCQlkaW1fbGF5ZXItPmNvbG9yX2ZpbGwuY29sb3JfMiwKLQkJCQlkaW1fbGF5ZXItPmNvbG9y X2ZpbGwuY29sb3JfMyk7Ci0JCXNlcV9wdXRzKHMsICJcbiIpOwotCX0KLQogCWRybV9hdG9taWNf Y3J0Y19mb3JfZWFjaF9wbGFuZShwbGFuZSwgY3J0YykgewogCQlwc3RhdGUgPSB0b19kcHVfcGxh bmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKIAkJc3RhdGUgPSBwbGFuZS0+c3RhdGU7CkBAIC0zNzMx LDkgKzI4ODQsNiBAQCBzdHJ1Y3QgZHJtX2NydGMgKmRwdV9jcnRjX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiAKIAlkcHVfY3J0Y19pbnN0YWxs X3Byb3BlcnRpZXMoY3J0Yywga21zLT5jYXRhbG9nKTsKIAotCS8qIEluaXQgZGVzdCBzY2FsZXIg Ki8KLQlfZHB1X2NydGNfZGVzdF9zY2FsZXJfaW5pdChkcHVfY3J0Yywga21zLT5jYXRhbG9nKTsK LQogCWRwdV9jcnRjLT5waGFuZGxlID0gJmttcy0+cGhhbmRsZTsKIAogCURQVV9ERUJVRygiJXM6 IHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBjcnRjXG4iLCBkcHVfY3J0Yy0+bmFtZSk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAppbmRleCA3NjNkZDBjLi5mMTAwZTA3 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKQEAgLTI2LDcgKzI2 LDYgQEAKICNpbmNsdWRlICJkcHVfa21zLmgiCiAjaW5jbHVkZSAiZHB1X2NvcmVfcGVyZi5oIgog I2luY2x1ZGUgImRwdV9od19ibGsuaCIKLSNpbmNsdWRlICJkcHVfaHdfZHMuaCIKIAogI2RlZmlu ZSBEUFVfQ1JUQ19OQU1FX1NJWkUJMTIKIApAQCAtODcsNyArODYsNiBAQCBzdHJ1Y3QgZHB1X2Ny dGNfc21tdV9zdGF0ZV9kYXRhIHsKICAqIHN0cnVjdCBkcHVfY3J0Y19taXhlcjogc3RvcmVzIHRo ZSBtYXAgZm9yIGVhY2ggdmlydHVhbCBwaXBlbGluZSBpbiB0aGUgQ1JUQwogICogQGh3X2xtOglM TSBIVyBEcml2ZXIgY29udGV4dAogICogQGh3X2N0bDoJQ1RMIFBhdGggSFcgZHJpdmVyIGNvbnRl eHQKLSAqIEBod19kczoJRFMgSFcgZHJpdmVyIGNvbnRleHQKICAqIEBlbmNvZGVyOglFbmNvZGVy IGF0dGFjaGVkIHRvIHRoaXMgbG0gJiBjdGwKICAqIEBtaXhlcl9vcF9tb2RlOgltaXhlciBibGVu ZGluZyBvcGVyYXRpb24gbW9kZQogICogQGZsdXNoX21hc2s6CW1peGVyIGZsdXNoIG1hc2sgZm9y IGN0bCwgbWl4ZXIgYW5kIHBpcGUKQEAgLTk1LDcgKzkzLDYgQEAgc3RydWN0IGRwdV9jcnRjX3Nt bXVfc3RhdGVfZGF0YSB7CiBzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgewogCXN0cnVjdCBkcHVfaHdf bWl4ZXIgKmh3X2xtOwogCXN0cnVjdCBkcHVfaHdfY3RsICpod19jdGw7Ci0Jc3RydWN0IGRwdV9o d19kcyAqaHdfZHM7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCXUzMiBtaXhlcl9v cF9tb2RlOwogCXUzMiBmbHVzaF9tYXNrOwpAQCAtMzE2LDEyICszMTMsNiBAQCBzdHJ1Y3QgZHB1 X2NydGNfcmVzcG9vbCB7CiAgKiBAcHJvcGVydHlfc3RhdGU6IExvY2FsIHN0b3JhZ2UgZm9yIG1z bV9wcm9wIHByb3BlcnRpZXMKICAqIEBwcm9wZXJ0eV92YWx1ZXM6IEN1cnJlbnQgY3J0YyBwcm9w ZXJ0eSB2YWx1ZXMKICAqIEBpbnB1dF9mZW5jZV90aW1lb3V0X25zIDogQ2FjaGVkIGlucHV0IGZl bmNlIHRpbWVvdXQsIGluIG5zCi0gKiBAbnVtX2RpbV9sYXllcnM6IE51bWJlciBvZiBkaW0gbGF5 ZXJzCi0gKiBAZGltX2xheWVyOiBEaW0gbGF5ZXIgY29uZmlncwotICogQG51bV9kczogTnVtYmVy IG9mIGRlc3RpbmF0aW9uIHNjYWxlcnMgdG8gYmUgY29uZmlndXJlZAotICogQG51bV9kc19lbmFi bGVkOiBOdW1iZXIgb2YgZGVzdGluYXRpb24gc2NhbGVycyBlbmFibGVkCi0gKiBAZHNfZGlydHk6 IEJvb2xlYW4gdG8gaW5kaWNhdGUgaWYgZGlydHkgb3Igbm90Ci0gKiBAZHNfY2ZnOiBEZXN0aW5h dGlvbiBzY2FsZXIgY29uZmlnCiAgKiBAbmV3X3BlcmY6IG5ldyBwZXJmb3JtYW5jZSBzdGF0ZSBi ZWluZyByZXF1ZXN0ZWQKICAqLwogc3RydWN0IGRwdV9jcnRjX3N0YXRlIHsKQEAgLTMzOCwxMiAr MzI5LDYgQEAgc3RydWN0IGRwdV9jcnRjX3N0YXRlIHsKIAlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0 YXRlIHByb3BlcnR5X3N0YXRlOwogCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgcHJvcGVydHlf dmFsdWVzW0NSVENfUFJPUF9DT1VOVF07CiAJdWludDY0X3QgaW5wdXRfZmVuY2VfdGltZW91dF9u czsKLQl1aW50MzJfdCBudW1fZGltX2xheWVyczsKLQlzdHJ1Y3QgZHB1X2h3X2RpbV9sYXllciBk aW1fbGF5ZXJbRFBVX01BWF9ESU1fTEFZRVJTXTsKLQl1aW50MzJfdCBudW1fZHM7Ci0JdWludDMy X3QgbnVtX2RzX2VuYWJsZWQ7Ci0JYm9vbCBkc19kaXJ0eTsKLQlzdHJ1Y3QgZHB1X2h3X2RzX2Nm ZyBkc19jZmdbRFBVX01BWF9EU19DT1VOVF07CiAKIAlzdHJ1Y3QgZHB1X2NvcmVfcGVyZl9wYXJh bXMgbmV3X3BlcmY7CiAJc3RydWN0IGRwdV9jcnRjX3Jlc3Bvb2wgcnA7CkBAIC0zNjQsNyArMzQ5 LDYgQEAgc3RydWN0IGRwdV9jcnRjX3N0YXRlIHsKIC8qKgogICogZHB1X2NydGNfZ2V0X21peGVy X3dpZHRoIC0gZ2V0IHRoZSBtaXhlciB3aWR0aAogICogTWl4ZXIgd2lkdGggd2lsbCBiZSBzYW1l IGFzIHBhbmVsIHdpZHRoKC8yIGZvciBzcGxpdCkKLSAqIHVubGVzcyBkZXN0aW5hdGlvbiBzY2Fs ZXIgZmVhdHVyZSBpcyBlbmFibGVkCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9jcnRjX2dl dF9taXhlcl93aWR0aChzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjLAogCXN0cnVjdCBkcHVfY3J0 Y19zdGF0ZSAqY3N0YXRlLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKQEAgLTM3NCwx MCArMzU4LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZHB1X2NydGNfZ2V0X21peGVyX3dpZHRoKHN0 cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMsCiAJaWYgKCFkcHVfY3J0YyB8fCAhY3N0YXRlIHx8ICFt b2RlKQogCQlyZXR1cm4gMDsKIAotCWlmIChjc3RhdGUtPm51bV9kc19lbmFibGVkKQotCQltaXhl cl93aWR0aCA9IGNzdGF0ZS0+ZHNfY2ZnWzBdLmxtX3dpZHRoOwotCWVsc2UKLQkJbWl4ZXJfd2lk dGggPSAoZHB1X2NydGMtPm51bV9taXhlcnMgPT0gQ1JUQ19EVUFMX01JWEVSUyA/CisJbWl4ZXJf d2lkdGggPSAoZHB1X2NydGMtPm51bV9taXhlcnMgPT0gQ1JUQ19EVUFMX01JWEVSUyA/CiAJCQlt b2RlLT5oZGlzcGxheSAvIENSVENfRFVBTF9NSVhFUlMgOiBtb2RlLT5oZGlzcGxheSk7CiAKIAly ZXR1cm4gbWl4ZXJfd2lkdGg7CkBAIC0zODUsOCArMzY2LDcgQEAgc3RhdGljIGlubGluZSBpbnQg ZHB1X2NydGNfZ2V0X21peGVyX3dpZHRoKHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMsCiAKIC8q KgogICogZHB1X2NydGNfZ2V0X21peGVyX2hlaWdodCAtIGdldCB0aGUgbWl4ZXIgaGVpZ2h0Ci0g KiBNaXhlciBoZWlnaHQgd2lsbCBiZSBzYW1lIGFzIHBhbmVsIGhlaWdodCB1bmxlc3MKLSAqIGRl c3RpbmF0aW9uIHNjYWxlciBmZWF0dXJlIGlzIGVuYWJsZWQKKyAqIE1peGVyIGhlaWdodCB3aWxs IGJlIHNhbWUgYXMgcGFuZWwgaGVpZ2h0CiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9jcnRj X2dldF9taXhlcl9oZWlnaHQoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YywKIAkJc3RydWN0IGRw dV9jcnRjX3N0YXRlICpjc3RhdGUsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQpAQCAt Mzk0LDggKzM3NCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9jcnRjX2dldF9taXhlcl9oZWln aHQoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YywKIAlpZiAoIWRwdV9jcnRjIHx8ICFjc3RhdGUg fHwgIW1vZGUpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIChjc3RhdGUtPm51bV9kc19lbmFibGVk ID8KLQkJCWNzdGF0ZS0+ZHNfY2ZnWzBdLmxtX2hlaWdodCA6IG1vZGUtPnZkaXNwbGF5KTsKKwly ZXR1cm4gbW9kZS0+dmRpc3BsYXk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9lbmNvZGVyLmMKaW5kZXggNzEzNTQwZS4uN2RkNjA5YyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCkBAIC0yMjksMTggKzIyOSw2IEBA IHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0IHsKIH07CiAKICNkZWZpbmUgdG9fZHB1X2VuY29kZXJf dmlydCh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQsIGJhc2UpCi0K LXZvaWQgZHB1X2VuY29kZXJfc2V0X2lkbGVfdGltZW91dChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRy bV9lbmMsIHUzMiBpZGxlX3RpbWVvdXQpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRw dV9lbmM7Ci0KLQlpZiAoIWRybV9lbmMpCi0JCXJldHVybjsKLQotCWRwdV9lbmMgPSB0b19kcHVf ZW5jb2Rlcl92aXJ0KGRybV9lbmMpOwotCWRwdV9lbmMtPmlkbGVfdGltZW91dCA9IGlkbGVfdGlt ZW91dDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgX2RwdV9lbmNvZGVyX3Bvd2VyX2VuYWJsZShz dHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKIAkJCQkJCQkJYm9vbCBlbmFibGUpCiB7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHMuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kcy5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBmYWQxOWZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19kcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAK LS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5 IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K LSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlICJkcHVfaHdfZHMuaCIK LSNpbmNsdWRlICJkcHVfZm9ybWF0cy5oIgotI2luY2x1ZGUgImRwdV9kYmcuaCIKLSNpbmNsdWRl ICJkcHVfa21zLmgiCi0KLS8qIERlc3RpbmF0aW9uIHNjYWxlciBUT1AgcmVnaXN0ZXJzICovCi0j ZGVmaW5lIERFU1RfU0NBTEVSX09QX01PREUgICAgIDB4MDAKLSNkZWZpbmUgREVTVF9TQ0FMRVJf SFdfVkVSU0lPTiAgMHgxMAotCi1zdGF0aWMgdm9pZCBkcHVfaHdfZHNfc2V0dXBfb3Btb2RlKHN0 cnVjdCBkcHVfaHdfZHMgKmh3X2RzLAotCQkJCXUzMiBvcF9tb2RlKQotewotCXN0cnVjdCBkcHVf aHdfYmxrX3JlZ19tYXAgKmh3ID0gJmh3X2RzLT5odzsKLQotCURQVV9SRUdfV1JJVEUoaHcsIERF U1RfU0NBTEVSX09QX01PREUsIG9wX21vZGUpOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfaHdfZHNf c2V0dXBfc2NhbGVyMyhzdHJ1Y3QgZHB1X2h3X2RzICpod19kcywKLQkJCXZvaWQgKnNjYWxlcl9j ZmcsIHZvaWQgKnNjYWxlcl9sdXRfY2ZnKQotewotCXN0cnVjdCBkcHVfaHdfc2NhbGVyM19jZmcg KnNjbDNfY2ZnID0gc2NhbGVyX2NmZzsKLQlzdHJ1Y3QgZHB1X2h3X3NjYWxlcjNfbHV0X2NmZyAq c2NsM19sdXRfY2ZnID0gc2NhbGVyX2x1dF9jZmc7Ci0KLQlpZiAoIWh3X2RzIHx8ICFod19kcy0+ c2NsIHx8ICFzY2wzX2NmZyB8fCAhc2NsM19sdXRfY2ZnKQotCQlyZXR1cm47Ci0KLQkvKgotCSAq IGNvcHkgTFVUIHZhbHVlcyB0byBzY2FsZXIgc3RydWN0dXJlCi0JICovCi0JaWYgKHNjbDNfbHV0 X2NmZy0+aXNfY29uZmlndXJlZCkgewotCQlzY2wzX2NmZy0+ZGlyX2x1dCA9IHNjbDNfbHV0X2Nm Zy0+ZGlyX2x1dDsKLQkJc2NsM19jZmctPmRpcl9sZW4gPSBzY2wzX2x1dF9jZmctPmRpcl9sZW47 Ci0JCXNjbDNfY2ZnLT5jaXJfbHV0ID0gc2NsM19sdXRfY2ZnLT5jaXJfbHV0OwotCQlzY2wzX2Nm Zy0+Y2lyX2xlbiA9IHNjbDNfbHV0X2NmZy0+Y2lyX2xlbjsKLQkJc2NsM19jZmctPnNlcF9sdXQg PSBzY2wzX2x1dF9jZmctPnNlcF9sdXQ7Ci0JCXNjbDNfY2ZnLT5zZXBfbGVuID0gc2NsM19sdXRf Y2ZnLT5zZXBfbGVuOwotCX0KLQotCWRwdV9od19zZXR1cF9zY2FsZXIzKCZod19kcy0+aHcsIHNj bDNfY2ZnLAotCQkJIGh3X2RzLT5zY2wtPmJhc2UsCi0JCQkgaHdfZHMtPnNjbC0+dmVyc2lvbiwK LQkJCSBkcHVfZ2V0X2RwdV9mb3JtYXQoRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCkpOwotfQotCi1z dGF0aWMgdm9pZCBfc2V0dXBfZHNfb3BzKHN0cnVjdCBkcHVfaHdfZHNfb3BzICpvcHMsIHVuc2ln bmVkIGxvbmcgZmVhdHVyZXMpCi17Ci0Jb3BzLT5zZXR1cF9vcG1vZGUgPSBkcHVfaHdfZHNfc2V0 dXBfb3Btb2RlOwotCi0JaWYgKHRlc3RfYml0KERQVV9TU1BQX1NDQUxFUl9RU0VFRDMsICZmZWF0 dXJlcykpCi0JCW9wcy0+c2V0dXBfc2NhbGVyID0gZHB1X2h3X2RzX3NldHVwX3NjYWxlcjM7Ci19 Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X2RzX2NmZyAqX2RzX29mZnNldChlbnVtIGRwdV9kcyBkcywK LQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqbSwKLQkJdm9pZCBfX2lvbWVtICphZGRyLAotCQlzdHJ1 Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpiKQotewotCWludCBpOwotCi0JaWYgKCFtIHx8ICFhZGRy IHx8ICFiKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWZvciAoaSA9IDA7IGkgPCBt LT5kc19jb3VudDsgaSsrKSB7Ci0JCWlmICgoZHMgPT0gbS0+ZHNbaV0uaWQpICYmCi0JCQkgKG0t PmRzW2ldLnRvcCkpIHsKLQkJCWItPmJhc2Vfb2ZmID0gYWRkcjsKLQkJCWItPmJsa19vZmYgPSBt LT5kc1tpXS50b3AtPmJhc2U7Ci0JCQliLT5sZW5ndGggPSBtLT5kc1tpXS50b3AtPmxlbjsKLQkJ CWItPmh3dmVyc2lvbiA9IG0tPmh3dmVyc2lvbjsKLQkJCWItPmxvZ19tYXNrID0gRFBVX0RCR19N QVNLX0RTOwotCQkJcmV0dXJuICZtLT5kc1tpXTsKLQkJfQotCX0KLQotCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOwotfQotCi1zdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMg PSB7Ci0JLnN0YXJ0ID0gTlVMTCwKLQkuc3RvcCA9IE5VTEwsCi19OwotCi1zdHJ1Y3QgZHB1X2h3 X2RzICpkcHVfaHdfZHNfaW5pdChlbnVtIGRwdV9kcyBpZHgsCi0JCQl2b2lkIF9faW9tZW0gKmFk ZHIsCi0JCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptKQotewotCXN0cnVjdCBkcHVfaHdfZHMgKmh3 X2RzOwotCXN0cnVjdCBkcHVfZHNfY2ZnICpjZmc7Ci0JaW50IHJjOwotCi0JaWYgKCFhZGRyIHx8 ICFtKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWh3X2RzID0ga3phbGxvYyhzaXpl b2YoKmh3X2RzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFod19kcykKLQkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7Ci0KLQljZmcgPSBfZHNfb2Zmc2V0KGlkeCwgbSwgYWRkciwgJmh3X2RzLT5odyk7 Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGNmZykpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0 IGRzIGNmZ1xuIik7Ci0JCWtmcmVlKGh3X2RzKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7 Ci0JfQotCi0JLyogQXNzaWduIG9wcyAqLwotCWh3X2RzLT5pZHggPSBpZHg7Ci0JaHdfZHMtPnNj bCA9IGNmZzsKLQlfc2V0dXBfZHNfb3BzKCZod19kcy0+b3BzLCBod19kcy0+c2NsLT5mZWF0dXJl cyk7Ci0KLQlyYyA9IGRwdV9od19ibGtfaW5pdCgmaHdfZHMtPmJhc2UsIERQVV9IV19CTEtfRFMs IGlkeCwgJmRwdV9od19vcHMpOwotCWlmIChyYykgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBp bml0IGh3IGJsayAlZFxuIiwgcmMpOwotCQlnb3RvIGJsa19pbml0X2Vycm9yOwotCX0KLQotCWlm IChjZmctPmxlbikgewotCQlkcHVfZGJnX3JlZ19yZWdpc3Rlcl9kdW1wX3JhbmdlKERQVV9EQkdf TkFNRSwgY2ZnLT5uYW1lLAotCQkJCWh3X2RzLT5ody5ibGtfb2ZmICsgY2ZnLT5iYXNlLAotCQkJ CWh3X2RzLT5ody5ibGtfb2ZmICsgY2ZnLT5iYXNlICsgY2ZnLT5sZW4sCi0JCQkJaHdfZHMtPmh3 Lnhpbl9pZCk7Ci0JfQotCi0JcmV0dXJuIGh3X2RzOwotCi1ibGtfaW5pdF9lcnJvcjoKLQlremZy ZWUoaHdfZHMpOwotCi0JcmV0dXJuIEVSUl9QVFIocmMpOwotCi19Ci0KLXZvaWQgZHB1X2h3X2Rz X2Rlc3Ryb3koc3RydWN0IGRwdV9od19kcyAqaHdfZHMpCi17Ci0JaWYgKGh3X2RzKQotCQlkcHVf aHdfYmxrX2Rlc3Ryb3koJmh3X2RzLT5iYXNlKTsKLQlrZnJlZShod19kcyk7Ci19CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHMuaCBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAyNDU1OTIwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19kcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qIENvcHly aWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24g MiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYgX0RQVV9IV19EU19ICi0jZGVmaW5lIF9E UFVfSFdfRFNfSAotCi0jaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdf dXRpbC5oIgotI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2Js ay5oIgotCi1zdHJ1Y3QgZHB1X2h3X2RzOwotCi0vKiBEZXN0aW5hdGlvbiBTY2FsZXIgRFVBTCBt b2RlIG92ZXJmZXRjaCBwaXhlbCBjb3VudCAqLwotI2RlZmluZSBEUFVfRFNfT1ZFUkZFVENIX1NJ WkUgNQotCi0vKiBEZXN0aW5hdGlvbiBzY2FsZXIgRFVBTCBtb2RlIG9wZXJhdGlvbiBiaXQgKi8K LSNkZWZpbmUgRFBVX0RTX09QX01PREVfRFVBTCBCSVQoMTYpCi0KLS8qIHN0cnVjdCBkcHVfaHdf ZHNfY2ZnIC0gZGVzdGluYXRpb24gc2NhbGVyIGNvbmZpZwotICogQG5keCAgICAgICAgICA6IERT IHNlbGVjdGlvbiBpbmRleAotICogQGZsYWdzICAgICAgICA6IEZsYWcgdG8gc3dpdGNoIGJldHdl ZW4gbW9kZSBmb3IgRFMKLSAqIEBsbV93aWR0aCAgICAgOiBMYXllciBtaXhlciB3aWR0aCBjb25m aWd1cmF0aW9uCi0gKiBAbG1faGVpZ2ggICAgIDogTGF5ZXIgbWl4ZXIgaGVpZ2h0IGNvbmZpZ3Vy YXRpb24KLSAqIEBzZXRfbG1fZmx1c2ggOiBMTSBmbHVzaCBiaXQKLSAqIEBzY2wzX2NmZyAgICAg OiBQb2ludGVyIHRvIGRwdV9od19zY2FsZXIzX2NmZy4KLSAqLwotc3RydWN0IGRwdV9od19kc19j ZmcgewotCXUzMiBuZHg7Ci0JaW50IGZsYWdzOwotCXUzMiBsbV93aWR0aDsKLQl1MzIgbG1faGVp Z2h0OwotCWJvb2wgc2V0X2xtX2ZsdXNoOwotCXN0cnVjdCBkcHVfaHdfc2NhbGVyM19jZmcgKnNj bDNfY2ZnOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2h3X2RzX29wcyAtIGludGVyZmFjZSB0 byB0aGUgZGVzdGluYXRpb24gc2NhbGVyCi0gKiBoYXJkd2FyZSBkcml2ZXIgZnVuY3Rpb25zCi0g KiBDYWxsZXIgbXVzdCBjYWxsIHRoZSBpbml0IGZ1bmN0aW9uIHRvIGdldCB0aGUgZHMgY29udGV4 dCBmb3IgZWFjaCBkcwotICogQXNzdW1wdGlvbiBpcyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBj YWxsZWQgYWZ0ZXIgY2xvY2tzIGFyZSBlbmFibGVkCi0gKi8KLXN0cnVjdCBkcHVfaHdfZHNfb3Bz IHsKLQkvKioKLQkgKiBzZXR1cF9vcG1vZGUgLSBkZXN0aW5hdGlvbiBzY2FsZXIgb3AgbW9kZSBz ZXR1cAotCSAqIEBod19kcyAgIDogUG9pbnRlciB0byBkcyBjb250ZXh0Ci0JICogQG9wX21vZGUg OiBPcCBtb2RlIGNvbmZpZ3VyYXRpb24KLQkgKi8KLQl2b2lkICgqc2V0dXBfb3Btb2RlKShzdHJ1 Y3QgZHB1X2h3X2RzICpod19kcywKLQkJCQl1MzIgb3BfbW9kZSk7Ci0KLQkvKioKLQkgKiBzZXR1 cF9zY2FsZXIgLSBkZXN0aW5hdGlvbiBzY2FsZXIgYmxvY2sgc2V0dXAKLQkgKiBAaHdfZHMgICAg ICAgICAgOiBQb2ludGVyIHRvIGRzIGNvbnRleHQKLQkgKiBAc2NhbGVyX2NmZyAgICAgOiBQb2lu dGVyIHRvIHNjYWxlciBkYXRhCi0JICogQHNjYWxlcl9sdXRfY2ZnIDogUG9pbnRlciB0byBzY2Fs ZXIgbHV0Ci0JICovCi0Jdm9pZCAoKnNldHVwX3NjYWxlcikoc3RydWN0IGRwdV9od19kcyAqaHdf ZHMsCi0JCQkJdm9pZCAqc2NhbGVyX2NmZywKLQkJCQl2b2lkICpzY2FsZXJfbHV0X2NmZyk7Ci0K LX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9od19kcyAtIGRlc3RpbmF0aW9uIHNjYWxlciBkZXNj cmlwdGlvbgotICogQGJhc2UgOiBIYXJkd2FyZSBibG9jayBiYXNlIHN0cnVjdHVyZQotICogQGh3 ICAgOiBCbG9jayBoYXJkd2FyZSBkZXRhaWxzCi0gKiBAaWR4ICA6IERlc3RpbmF0aW9uIHNjYWxl ciBpbmRleAotICogQHNjbCAgOiBQb2ludGVyIHRvCi0gKiAgICAgICAgICAtIHNjYWxlciBvZmZz ZXQgcmVsYXRpdmUgdG8gdG9wIG9mZnNldAotICogICAgICAgICAgLSBjYXBhYmlsaXRpZXMKLSAq IEBvcHMgIDogUG9pbnRlciB0byBvcGVyYXRpb25zIGZvciB0aGlzIERTCi0gKi8KLXN0cnVjdCBk cHVfaHdfZHMgewotCXN0cnVjdCBkcHVfaHdfYmxrIGJhc2U7Ci0Jc3RydWN0IGRwdV9od19ibGtf cmVnX21hcCBodzsKLQllbnVtIGRwdV9kcyBpZHg7Ci0JY29uc3Qgc3RydWN0IGRwdV9kc19jZmcg KnNjbDsKLQlzdHJ1Y3QgZHB1X2h3X2RzX29wcyBvcHM7Ci19OwotCi0vKioKLSAqIGRwdV9od19k c19pbml0IC0gaW5pdGlhbGl6ZXMgdGhlIGRlc3RpbmF0aW9uIHNjYWxlcgotICogaHcgZHJpdmVy IG9iamVjdCBhbmQgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGJlZm9yZQotICogYWNjZXNzaW5nIGV2 ZXJ5IGRlc3RpbmF0aW9uIHNjYWxlcgotICogQGlkeCA6IERTIGluZGV4IGZvciB3aGljaCBkcml2 ZXIgb2JqZWN0IGlzIHJlcXVpcmVkCi0gKiBAYWRkcjogTWFwcGVkIHJlZ2lzdGVyIGlvIGFkZHJl c3Mgb2YgTURQCi0gKiBAbSAgIDogTURTUyBjYXRhbG9nIGluZm9ybWF0aW9uCi0gKiBAUmV0dXJu OiBwb2ludGVyIHRvIHN0cnVjdHVyZSBvciBFUlJfUFRSCi0gKi8KLXN0cnVjdCBkcHVfaHdfZHMg KmRwdV9od19kc19pbml0KGVudW0gZHB1X2RzIGlkeCwKLQkJCXZvaWQgX19pb21lbSAqYWRkciwK LQkJCXN0cnVjdCBkcHVfbWRzc19jZmcgKm0pOwotCi0vKioKLSAqIGRwdV9od19kc19kZXN0cm95 IC0gZGVzdHJveXMgZGVzdGluYXRpb24gc2NhbGVyCi0gKiBkcml2ZXIgY29udGV4dAotICogQGh3 X2RzOiAgIFBvaW50ZXIgdG8gRFMgY29udGV4dAotICovCi12b2lkIGRwdV9od19kc19kZXN0cm95 KHN0cnVjdCBkcHVfaHdfZHMgKmh3X2RzKTsKLQotI2VuZGlmIC8qX0RQVV9IV19EU19IICovCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5jCmluZGV4IDc1YTMwZGIuLjgz MGI2OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19s bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5jCkBAIC0x NzIsNjggKzE3Miw2IEBAIHN0YXRpYyB2b2lkIGRwdV9od19sbV9nYyhzdHJ1Y3QgZHB1X2h3X21p eGVyICptaXhlciwKIHsKIH0KIAotc3RhdGljIHZvaWQgZHB1X2h3X2xtX2NsZWFyX2RpbV9sYXll cihzdHJ1Y3QgZHB1X2h3X21peGVyICpjdHgpCi17Ci0Jc3RydWN0IGRwdV9od19ibGtfcmVnX21h cCAqYyA9ICZjdHgtPmh3OwotCWNvbnN0IHN0cnVjdCBkcHVfbG1fc3ViX2Jsa3MgKnNibGsgPSBj dHgtPmNhcC0+c2JsazsKLQlpbnQgc3RhZ2Vfb2ZmLCBpOwotCXUzMiByZXNldCA9IEJJVCgxNiks IHZhbDsKLQotCXJlc2V0ID0gfnJlc2V0OwotCWZvciAoaSA9IERQVV9TVEFHRV8wOyBpIDwgc2Js ay0+bWF4YmxlbmRzdGFnZXM7IGkrKykgewotCQlzdGFnZV9vZmYgPSBfc3RhZ2Vfb2Zmc2V0KGN0 eCwgaSk7Ci0JCWlmIChXQVJOX09OKHN0YWdlX29mZiA8IDApKQotCQkJcmV0dXJuOwotCi0JCS8q Ci0JCSAqIHJlYWQgdGhlIGV4aXN0aW5nIGJsZW5kbl9vcCByZWdpc3RlciBhbmQgY2xlYXIgb25s eSBESU0gbGF5ZXIKLQkJICogYml0IChjb2xvcl9maWxsIGJpdCkKLQkJICovCi0JCXZhbCA9IERQ VV9SRUdfUkVBRChjLCBMTV9CTEVORDBfT1AgKyBzdGFnZV9vZmYpOwotCQl2YWwgJj0gcmVzZXQ7 Ci0JCURQVV9SRUdfV1JJVEUoYywgTE1fQkxFTkQwX09QICsgc3RhZ2Vfb2ZmLCB2YWwpOwotCX0K LX0KLQotc3RhdGljIHZvaWQgZHB1X2h3X2xtX3NldHVwX2RpbV9sYXllcihzdHJ1Y3QgZHB1X2h3 X21peGVyICpjdHgsCi0JCXN0cnVjdCBkcHVfaHdfZGltX2xheWVyICpkaW1fbGF5ZXIpCi17Ci0J c3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZjdHgtPmh3OwotCWludCBzdGFnZV9vZmY7 Ci0JdTMyIHZhbCA9IDAsIGFscGhhID0gMDsKLQotCXN0YWdlX29mZiA9IF9zdGFnZV9vZmZzZXQo Y3R4LCBkaW1fbGF5ZXItPnN0YWdlKTsKLQlpZiAoc3RhZ2Vfb2ZmIDwgMCkgewotCQlEUFVfRVJS T1IoImludmFsaWQgc3RhZ2Vfb2ZmOiVkIGZvciBkaW0gbGF5ZXJcbiIsIHN0YWdlX29mZik7Ci0J CXJldHVybjsKLQl9Ci0KLQlhbHBoYSA9IGRpbV9sYXllci0+Y29sb3JfZmlsbC5jb2xvcl8zICYg MHhGRjsKLQl2YWwgPSAoKGRpbV9sYXllci0+Y29sb3JfZmlsbC5jb2xvcl8xIDw8IDIpICYgMHhG RkYpIDw8IDE2IHwKLQkJCSgoZGltX2xheWVyLT5jb2xvcl9maWxsLmNvbG9yXzAgPDwgMikgJiAw eEZGRik7Ci0JRFBVX1JFR19XUklURShjLCBMTV9GR19DT0xPUl9GSUxMX0NPTE9SXzAgKyBzdGFn ZV9vZmYsIHZhbCk7Ci0KLQl2YWwgPSAoYWxwaGEgPDwgNCkgPDwgMTYgfAotCQkJKChkaW1fbGF5 ZXItPmNvbG9yX2ZpbGwuY29sb3JfMiA8PCAyKSAmIDB4RkZGKTsKLQlEUFVfUkVHX1dSSVRFKGMs IExNX0ZHX0NPTE9SX0ZJTExfQ09MT1JfMSArIHN0YWdlX29mZiwgdmFsKTsKLQotCXZhbCA9IGRp bV9sYXllci0+cmVjdC5oIDw8IDE2IHwgZGltX2xheWVyLT5yZWN0Lnc7Ci0JRFBVX1JFR19XUklU RShjLCBMTV9GR19DT0xPUl9GSUxMX1NJWkUgKyBzdGFnZV9vZmYsIHZhbCk7Ci0KLQl2YWwgPSBk aW1fbGF5ZXItPnJlY3QueSA8PCAxNiB8IGRpbV9sYXllci0+cmVjdC54OwotCURQVV9SRUdfV1JJ VEUoYywgTE1fRkdfQ09MT1JfRklMTF9YWSArIHN0YWdlX29mZiwgdmFsKTsKLQotCXZhbCA9IEJJ VCgxNik7IC8qIGVuYWJsZSBkaW0gbGF5ZXIgKi8KLQl2YWwgfD0gRFBVX0JMRU5EX0ZHX0FMUEhB X0ZHX0NPTlNUIHwgRFBVX0JMRU5EX0JHX0FMUEhBX0JHX0NPTlNUOwotCWlmIChkaW1fbGF5ZXIt PmZsYWdzICYgRFBVX0RSTV9ESU1fTEFZRVJfRVhDTFVTSVZFKQotCQl2YWwgfD0gQklUKDE3KTsK LQllbHNlCi0JCXZhbCAmPSB+QklUKDE3KTsKLQlEUFVfUkVHX1dSSVRFKGMsIExNX0JMRU5EMF9P UCArIHN0YWdlX29mZiwgdmFsKTsKLQl2YWwgPSAoYWxwaGEgPDwgMTYpIHwgKDB4ZmYgLSBhbHBo YSk7Ci0JRFBVX1JFR19XUklURShjLCBMTV9CTEVORDBfQ09OU1RfQUxQSEEgKyBzdGFnZV9vZmYs IHZhbCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGRwdV9od19sbV9zZXR1cF9taXNyKHN0cnVjdCBkcHVf aHdfbWl4ZXIgKmN0eCwKIAkJCQlib29sIGVuYWJsZSwgdTMyIGZyYW1lX2NvdW50KQogewpAQCAt MjcyLDExICsyMTAsNiBAQCBzdGF0aWMgdm9pZCBfc2V0dXBfbWl4ZXJfb3BzKHN0cnVjdCBkcHVf bWRzc19jZmcgKm0sCiAJb3BzLT5zZXR1cF9nYyA9IGRwdV9od19sbV9nYzsKIAlvcHMtPnNldHVw X21pc3IgPSBkcHVfaHdfbG1fc2V0dXBfbWlzcjsKIAlvcHMtPmNvbGxlY3RfbWlzciA9IGRwdV9o d19sbV9jb2xsZWN0X21pc3I7Ci0KLQlpZiAodGVzdF9iaXQoRFBVX0RJTV9MQVlFUiwgJmZlYXR1 cmVzKSkgewotCQlvcHMtPnNldHVwX2RpbV9sYXllciA9IGRwdV9od19sbV9zZXR1cF9kaW1fbGF5 ZXI7Ci0JCW9wcy0+Y2xlYXJfZGltX2xheWVyID0gZHB1X2h3X2xtX2NsZWFyX2RpbV9sYXllcjsK LQl9CiB9OwogCiBzdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5oCmluZGV4IGVmMjJjODYuLmUy OWU1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19s bS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5oCkBAIC02 NywyMCArNjcsNiBAQCBzdHJ1Y3QgZHB1X2h3X2xtX29wcyB7CiAJdm9pZCAoKnNldHVwX2djKShz dHJ1Y3QgZHB1X2h3X21peGVyICptaXhlciwKIAkJCXZvaWQgKmNmZyk7CiAKLQkvKioKLQkgKiBz ZXR1cF9kaW1fbGF5ZXI6IGNvbmZpZ3VyZSBkaW0gbGF5ZXIgc2V0dGluZ3MKLQkgKiBAY3R4OiBQ b2ludGVyIHRvIGxheWVyIG1peGVyIGNvbnRleHQKLQkgKiBAZGltX2xheWVyOiBkaW0gbGF5ZXIg Y29uZmlncwotCSAqLwotCXZvaWQgKCpzZXR1cF9kaW1fbGF5ZXIpKHN0cnVjdCBkcHVfaHdfbWl4 ZXIgKmN0eCwKLQkJCXN0cnVjdCBkcHVfaHdfZGltX2xheWVyICpkaW1fbGF5ZXIpOwotCi0JLyoq Ci0JICogY2xlYXJfZGltX2xheWVyOiBjbGVhciBkaW0gbGF5ZXIgc2V0dGluZ3MKLQkgKiBAY3R4 OiBQb2ludGVyIHRvIGxheWVyIG1peGVyIGNvbnRleHQKLQkgKi8KLQl2b2lkICgqY2xlYXJfZGlt X2xheWVyKShzdHJ1Y3QgZHB1X2h3X21peGVyICpjdHgpOwotCiAJLyogc2V0dXBfbWlzcjogZW5h Ymxlcy9kaXNhYmxlcyBNSVNSIGluIEhXIHJlZ2lzdGVyICovCiAJdm9pZCAoKnNldHVwX21pc3Ip KHN0cnVjdCBkcHVfaHdfbWl4ZXIgKmN0eCwKIAkJCWJvb2wgZW5hYmxlLCB1MzIgZnJhbWVfY291 bnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21k c3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19tZHNzLmgKaW5kZXgg ZmNkMTY0Zi4uODM2ZmY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X21kc3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfbWRzcy5oCkBAIC05OSw3ICs5OSw2IEBAIGVudW0gZHB1X2h3X2Jsa190eXBlIHsKIAlEUFVf SFdfQkxLX1RPUCA9IDAsCiAJRFBVX0hXX0JMS19TU1BQLAogCURQVV9IV19CTEtfTE0sCi0JRFBV X0hXX0JMS19EUywKIAlEUFVfSFdfQkxLX0NUTCwKIAlEUFVfSFdfQkxLX0NETSwKIAlEUFVfSFdf QkxLX1BJTkdQT05HLApAQCAtNDY5LDIwICs0NjgsNSBAQCBzdHJ1Y3QgZHB1X21kc3NfY29sb3Ig ewogI2RlZmluZSBEUFVfREJHX01BU0tfVE9QICAgICAgKDEgPDwgOCkKICNkZWZpbmUgRFBVX0RC R19NQVNLX1ZCSUYgICAgICgxIDw8IDkpCiAjZGVmaW5lIERQVV9EQkdfTUFTS19ST1QgICAgICAo MSA8PCAxMCkKLSNkZWZpbmUgRFBVX0RCR19NQVNLX0RTICAgICAgICgxIDw8IDExKQotCi0vKioK LSAqIHN0cnVjdCBkcHVfaHdfZGltX2xheWVyOiBkaW0gbGF5ZXIgY29uZmlncwotICogQGZsYWdz OiBGbGFnIHRvIHJlcHJlc2VudCBJTkNMVVNJVkUvRVhDTFVTSVZFCi0gKiBAc3RhZ2U6IEJsZW5k aW5nIHN0YWdlIG9mIGRpbSBsYXllcgotICogQGNvbG9yX2ZpbGw6IENvbG9yIGZpbGwgdG8gYmUg dXNlZCBmb3IgdGhlIGxheWVyCi0gKiBAcmVjdDogRGltIGxheWVyIGNvb3JkaW5hdGVzCi0gKi8K LXN0cnVjdCBkcHVfaHdfZGltX2xheWVyIHsKLQl1aW50MzJfdCBmbGFnczsKLQl1aW50MzJfdCBz dGFnZTsKLQlzdHJ1Y3QgZHB1X21kc3NfY29sb3IgY29sb3JfZmlsbDsKLQlzdHJ1Y3QgZHB1X3Jl Y3QgcmVjdDsKLX07CiAKICNlbmRpZiAgLyogX0RQVV9IV19NRFNTX0ggKi8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKaW5kZXggYjU1MGQ3ZC4uZWZmMzE2YiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRl ICJkcHVfaHdfbG0uaCIKICNpbmNsdWRlICJkcHVfaHdfY3RsLmgiCiAjaW5jbHVkZSAiZHB1X2h3 X2NkbS5oIgotI2luY2x1ZGUgImRwdV9od19kcy5oIgogI2luY2x1ZGUgImRwdV9od19waW5ncG9u Zy5oIgogI2luY2x1ZGUgImRwdV9od19pbnRmLmgiCiAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIK QEAgLTIzNCw5ICsyMzMsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X3JtX2h3X2Rlc3Ryb3koZW51bSBk cHVfaHdfYmxrX3R5cGUgdHlwZSwgdm9pZCAqaHcpCiAJY2FzZSBEUFVfSFdfQkxLX0xNOgogCQlk cHVfaHdfbG1fZGVzdHJveShodyk7CiAJCWJyZWFrOwotCWNhc2UgRFBVX0hXX0JMS19EUzoKLQkJ ZHB1X2h3X2RzX2Rlc3Ryb3koaHcpOwotCQlicmVhazsKIAljYXNlIERQVV9IV19CTEtfQ1RMOgog CQlkcHVfaHdfY3RsX2Rlc3Ryb3koaHcpOwogCQlicmVhazsKQEAgLTMxMyw5ICszMDksNiBAQCBz dGF0aWMgaW50IF9kcHVfcm1faHdfYmxrX2NyZWF0ZSgKIAljYXNlIERQVV9IV19CTEtfTE06CiAJ CWh3ID0gZHB1X2h3X2xtX2luaXQoaWQsIG1taW8sIGNhdCk7CiAJCWJyZWFrOwotCWNhc2UgRFBV X0hXX0JMS19EUzoKLQkJaHcgPSBkcHVfaHdfZHNfaW5pdChpZCwgbW1pbywgY2F0KTsKLQkJYnJl YWs7CiAJY2FzZSBEUFVfSFdfQkxLX0NUTDoKIAkJaHcgPSBkcHVfaHdfY3RsX2luaXQoaWQsIG1t aW8sIGNhdCk7CiAJCWJyZWFrOwpAQCAtNDIwLDE3ICs0MTMsNiBAQCBpbnQgZHB1X3JtX2luaXQo c3RydWN0IGRwdV9ybSAqcm0sCiAJCX0KIAl9CiAKLQlpZiAoY2F0LT5tZHBbMF0uaGFzX2Rlc3Rf c2NhbGVyKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBjYXQtPmRzX2NvdW50OyBpKyspIHsKLQkJCXJj ID0gX2RwdV9ybV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1taW8sIERQVV9IV19CTEtfRFMsCi0J CQkJCWNhdC0+ZHNbaV0uaWQsICZjYXQtPmRzW2ldKTsKLQkJCWlmIChyYykgewotCQkJCURQVV9F UlJPUigiZmFpbGVkOiBkcyBodyBub3QgYXZhaWxhYmxlXG4iKTsKLQkJCQlnb3RvIGZhaWw7Ci0J CQl9Ci0JCX0KLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgY2F0LT5waW5ncG9uZ19jb3VudDsgaSsr KSB7CiAJCXJjID0gX2RwdV9ybV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1taW8sIERQVV9IV19C TEtfUElOR1BPTkcsCiAJCQkJY2F0LT5waW5ncG9uZ1tpXS5pZCwgJmNhdC0+cGluZ3BvbmdbaV0p OwpAQCAtNTAwLDIwICs0ODIsMTYgQEAgc3RhdGljIGJvb2wgX2RwdV9ybV9jaGVja19sbV9hbmRf Z2V0X2Nvbm5lY3RlZF9ibGtzKAogCQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnAsCiAJCXN0cnVj dCBkcHVfcm1fcmVxdWlyZW1lbnRzICpyZXFzLAogCQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqbG0s Ci0JCXN0cnVjdCBkcHVfcm1faHdfYmxrICoqZHMsCiAJCXN0cnVjdCBkcHVfcm1faHdfYmxrICoq cHAsCiAJCXN0cnVjdCBkcHVfcm1faHdfYmxrICpwcmltYXJ5X2xtKQogewogCWNvbnN0IHN0cnVj dCBkcHVfbG1fY2ZnICpsbV9jZmcgPSB0b19kcHVfaHdfbWl4ZXIobG0tPmh3KS0+Y2FwOwogCXN0 cnVjdCBkcHVfcm1faHdfaXRlciBpdGVyOwotCWJvb2wgaXNfdmFsaWRfZHM7CiAKLQkqZHMgPSBO VUxMOwogCSpwcCA9IE5VTEw7CiAKLQlEUFVfREVCVUcoImNoZWNrIGxtICVkIGRzICVkIHBwICVk XG4iLAotCQkJICAgbG1fY2ZnLT5pZCwKLQkJCSAgIGxtX2NmZy0+ZHMsIGxtX2NmZy0+cGluZ3Bv bmcpOworCURQVV9ERUJVRygiY2hlY2sgbG0gJWQgcHAgJWRcbiIsCisJCQkgICBsbV9jZmctPmlk LCBsbV9jZmctPnBpbmdwb25nKTsKIAogCS8qIENoZWNrIGlmIHRoaXMgbGF5ZXIgbWl4ZXIgaXMg YSBwZWVyIG9mIHRoZSBwcm9wb3NlZCBwcmltYXJ5IExNICovCiAJaWYgKHByaW1hcnlfbG0pIHsK QEAgLTUyNyw0MyArNTA1LDEyIEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dl dF9jb25uZWN0ZWRfYmxrcygKIAkJfQogCX0KIAotCWlzX3ZhbGlkX2RzID0gKGxtX2NmZy0+ZHMg IT0gRFNfTUFYKSA/IHRydWUgOiBmYWxzZTsKLQotCWlmIChSTV9SUV9EUyhyZXFzKSAmJiAhaXNf dmFsaWRfZHMpIHsKLQkJRFBVX0RFQlVHKCJmYWlsOmxtKCVkKXJlcV9kcyglZClkcyglZClcbiIs Ci0JCQlsbV9jZmctPmlkLCAoYm9vbCkoUk1fUlFfRFMocmVxcykpLCBsbV9jZmctPmRzKTsKLQot CQlyZXR1cm4gZmFsc2U7Ci0JfQotCiAJLyogQWxyZWFkeSByZXNlcnZlZD8gKi8KIAlpZiAoUkVT RVJWRURfQllfT1RIRVIobG0sIHJzdnApKSB7CiAJCURQVV9ERUJVRygibG0gJWQgYWxyZWFkeSBy ZXNlcnZlZFxuIiwgbG1fY2ZnLT5pZCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlpZiAobG1f Y2ZnLT5kcyAhPSBEU19NQVgpIHsKLQkJZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlciwgMCwgRFBV X0hXX0JMS19EUyk7Ci0JCXdoaWxlIChfZHB1X3JtX2dldF9od19sb2NrZWQocm0sICZpdGVyKSkg ewotCQkJaWYgKGl0ZXIuYmxrLT5pZCA9PSBsbV9jZmctPmRzKSB7Ci0JCQkJKmRzID0gaXRlci5i bGs7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoISpkcykgewotCQkJRFBVX0RFQlVH KCJsbSAlZCBmYWlsZWQgdG8gcmV0cmlldmUgZHMgJWRcbiIsIGxtLT5pZCwKLQkJCQkJbG1fY2Zn LT5kcyk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlpZiAoUkVTRVJWRURfQllfT1RIRVIo KmRzLCByc3ZwKSkgewotCQkJRFBVX0RFQlVHKCJsbSAlZCBkcyAlZCBhbHJlYWR5IHJlc2VydmVk XG4iLAotCQkJCQlsbS0+aWQsICgqZHMpLT5pZCk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9 Ci0KIAlkcHVfcm1faW5pdF9od19pdGVyKCZpdGVyLCAwLCBEUFVfSFdfQkxLX1BJTkdQT05HKTsK IAl3aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRlcikpIHsKIAkJaWYgKGl0ZXIu YmxrLT5pZCA9PSBsbV9jZmctPnBpbmdwb25nKSB7CkBAIC01ODAsNyArNTI3LDYgQEAgc3RhdGlj IGJvb2wgX2RwdV9ybV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAogCWlmIChSRVNF UlZFRF9CWV9PVEhFUigqcHAsIHJzdnApKSB7CiAJCURQVV9ERUJVRygibG0gJWQgcHAgJWQgYWxy ZWFkeSByZXNlcnZlZFxuIiwgbG0tPmlkLAogCQkJCSgqcHApLT5pZCk7Ci0JCSpkcyA9IE5VTEw7 CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTU5NCw3ICs1NDAsNiBAQCBzdGF0aWMgaW50IF9k cHVfcm1fcmVzZXJ2ZV9sbXMoCiAKIHsKIAlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqbG1bTUFYX0JM T0NLU107Ci0Jc3RydWN0IGRwdV9ybV9od19ibGsgKmRzW01BWF9CTE9DS1NdOwogCXN0cnVjdCBk cHVfcm1faHdfYmxrICpwcFtNQVhfQkxPQ0tTXTsKIAlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRl cl9pLCBpdGVyX2o7CiAJaW50IGxtX2NvdW50ID0gMDsKQEAgLTYxMCwxNCArNTU1LDEzIEBAIHN0 YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xtcygKIAl3aGlsZSAobG1fY291bnQgIT0gcmVxcy0+ dG9wb2xvZ3ktPm51bV9sbSAmJgogCQkJX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRlcl9p KSkgewogCQltZW1zZXQoJmxtLCAwLCBzaXplb2YobG0pKTsKLQkJbWVtc2V0KCZkcywgMCwgc2l6 ZW9mKGRzKSk7CiAJCW1lbXNldCgmcHAsIDAsIHNpemVvZihwcCkpOwogCiAJCWxtX2NvdW50ID0g MDsKIAkJbG1bbG1fY291bnRdID0gaXRlcl9pLmJsazsKIAogCQlpZiAoIV9kcHVfcm1fY2hlY2tf bG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcygKLQkJCQlybSwgcnN2cCwgcmVxcywgbG1bbG1fY291 bnRdLCAmZHNbbG1fY291bnRdLAorCQkJCXJtLCByc3ZwLCByZXFzLCBsbVtsbV9jb3VudF0sCiAJ CQkJJnBwW2xtX2NvdW50XSwgTlVMTCkpCiAJCQljb250aW51ZTsKIApAQCAtNjMzLDggKzU3Nyw3 IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xtcygKIAogCQkJaWYgKCFfZHB1X3JtX2No ZWNrX2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3MoCiAJCQkJCXJtLCByc3ZwLCByZXFzLCBpdGVy X2ouYmxrLAotCQkJCQkmZHNbbG1fY291bnRdLCAmcHBbbG1fY291bnRdLAotCQkJCQlpdGVyX2ku YmxrKSkKKwkJCQkJJnBwW2xtX2NvdW50XSwgaXRlcl9pLmJsaykpCiAJCQkJY29udGludWU7CiAK IAkJCWxtW2xtX2NvdW50XSA9IGl0ZXJfai5ibGs7CkBAIC02NTQsMTEgKzU5Nyw3IEBAIHN0YXRp YyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xtcygKIAkJbG1baV0tPnJzdnBfbnh0ID0gcnN2cDsKIAkJ cHBbaV0tPnJzdnBfbnh0ID0gcnN2cDsKIAotCQlpZiAoZHNbaV0pCi0JCQlkc1tpXS0+cnN2cF9u eHQgPSByc3ZwOwotCi0JCURQVV9FVlQzMihsbVtpXS0+dHlwZSwgcnN2cC0+ZW5jX2lkLCBsbVtp XS0+aWQsIHBwW2ldLT5pZCwKLQkJCQlkc1tpXSA/IGRzW2ldLT5pZCA6IDApOworCQlEUFVfRVZU MzIobG1baV0tPnR5cGUsIHJzdnAtPmVuY19pZCwgbG1baV0tPmlkLCBwcFtpXS0+aWQpOwogCX0K IAogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKaW5kZXggNTc3MGFjMC4uOTA0NDk5YSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTg2LDI1ICs4NiwxMCBAQCBlbnVtIG1zbV9tZHBfcGxh bmVfcHJvcGVydHkgewogCiBlbnVtIG1zbV9tZHBfY3J0Y19wcm9wZXJ0eSB7CiAJQ1JUQ19QUk9Q X0lORk8sCi0JQ1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xVVF9FRCwKLQlDUlRDX1BST1BfREVTVF9T Q0FMRVJfTFVUX0NJUiwKLQlDUlRDX1BST1BfREVTVF9TQ0FMRVJfTFVUX1NFUCwKIAogCS8qICMg b2YgYmxvYiBwcm9wZXJ0aWVzICovCiAJQ1JUQ19QUk9QX0JMT0JDT1VOVCwKIAotCS8qIHJhbmdl IHByb3BlcnRpZXMgKi8KLQlDUlRDX1BST1BfRElNX0xBWUVSX1YxID0gQ1JUQ19QUk9QX0JMT0JD T1VOVCwKLQlDUlRDX1BST1BfQ09SRV9DTEssCi0JQ1JUQ19QUk9QX0NPUkVfQUIsCi0JQ1JUQ19Q Uk9QX0NPUkVfSUIsCi0JQ1JUQ19QUk9QX0xMQ0NfQUIsCi0JQ1JUQ19QUk9QX0xMQ0NfSUIsCi0J Q1JUQ19QUk9QX0RSQU1fQUIsCi0JQ1JUQ19QUk9QX0RSQU1fSUIsCi0JQ1JUQ19QUk9QX0lETEVf VElNRU9VVCwKLQlDUlRDX1BST1BfREVTVF9TQ0FMRVIsCi0KIAkvKiB0b3RhbCAjIG9mIHByb3Bl cnRpZXMgKi8KIAlDUlRDX1BST1BfQ09VTlQKIH07Ci0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlv biBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExp bnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVk cmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K