From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sravanthi Kollukuduru Subject: [DPU PATCH v2 2/2] drm/msm: Add hardware catalog data in driver source for SDM845 Date: Thu, 29 Mar 2018 15:59:25 +0530 Message-ID: <1522319365-31675-3-git-send-email-skolluku@codeaurora.org> References: <1522319365-31675-1-git-send-email-skolluku@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1522319365-31675-1-git-send-email-skolluku-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, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: mark.rutland-5wv7dgnIgG8@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, Sravanthi Kollukuduru List-Id: devicetree@vger.kernel.org Q3VycmVudGx5LCB0aGUgZG93bnN0cmVhbSBkcml2ZXIgZGVwZW5kcyBvbiB0aGUgRFQgZmlsZSBm b3IgdGhlCmhhcmR3YXJlIGJsb2NrIG9mZnNldHMgYW5kIG90aGVyIHRhcmdldCBzcGVjaWZpYyBj YXRhbG9nIGluZm9ybWF0aW9uLgpUbyBhbGlnbiB0aGUgZHJpdmVyIHdpdGggdGhlIHVwc3RyZWFt IERUIGRlc2lnbiwgdGhpcyBpbmZvcm1hdGlvbiBpcwpub3cgcmVtb3ZlZCBmcm9tIHRoZSBEVCBh bmQgYWRkZWQgaW4gdGhlIGRyaXZlciBzb3VyY2UuCgpDaGFuZ2UtSWQ6IEkyMDc5MmYzY2UzODYx YjQ2MGQ3MjIzODIzNjcyZDc1OWMzODUzMGIyClNpZ25lZC1vZmYtYnk6IFNyYXZhbnRoaSBLb2xs dWt1ZHVydSA8c2tvbGx1a3VAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2NydGMuYyAgICAgICB8ICAgMTcgKy0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgICAgfCAgICA1ICstCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jIHwgMzU0MiArKysrLS0tLS0tLS0tLS0tLS0t LS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmggfCAg MTI0ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5jICAgIHwg ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3RvcC5jICAgICB8 ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od193Yi5jICAgICAg fCAgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMgICAgICAg IHwgICAgNSArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMgICAg ICB8ICAgMjQgKy0KIDkgZmlsZXMgY2hhbmdlZCwgNjM2IGluc2VydGlvbnMoKyksIDMwODcgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKaW5kZXgg YmY0NmNmMS4uMzMwODkyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0 Yy5jCkBAIC0zMjUxLDcgKzMyNTEsNyBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19pbnN0YWxsX3By b3BlcnRpZXMoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCiAJZHB1X2ttc19pbmZvX3Jlc2V0KGlu Zm8pOwogCi0JaWYgKGNhdGFsb2ctPmhhc19kaW1fbGF5ZXIpIHsKKwlpZiAoY2F0YWxvZy0+Y2Fw cy0+aGFzX2RpbV9sYXllcikgewogCQltc21fcHJvcGVydHlfaW5zdGFsbF92b2xhdGlsZV9yYW5n ZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCiAJCQkiZGltX2xheWVyX3YxIiwgMHgwLCAwLCB+ MCwgMCwgQ1JUQ19QUk9QX0RJTV9MQVlFUl9WMSk7CiAJCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50 KGluZm8sICJkaW1fbGF5ZXJfdjFfbWF4X2xheWVycyIsCkBAIC0zMjYwLDE5ICszMjYwLDE5IEBA IHN0YXRpYyB2b2lkIGRwdV9jcnRjX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCiAKIAlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAiaHdfdmVyc2lvbiIsIGNh dGFsb2ctPmh3dmVyc2lvbik7CiAJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1heF9s aW5ld2lkdGgiLAotCQkJY2F0YWxvZy0+bWF4X21peGVyX3dpZHRoKTsKKwkJCWNhdGFsb2ctPmNh cHMtPm1heF9taXhlcl93aWR0aCk7CiAJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1h eF9ibGVuZHN0YWdlcyIsCi0JCQljYXRhbG9nLT5tYXhfbWl4ZXJfYmxlbmRzdGFnZXMpOwotCWlm IChjYXRhbG9nLT5xc2VlZF90eXBlID09IERQVV9TU1BQX1NDQUxFUl9RU0VFRDIpCisJCQljYXRh bG9nLT5jYXBzLT5tYXhfbWl4ZXJfYmxlbmRzdGFnZXMpOworCWlmIChjYXRhbG9nLT5jYXBzLT5x c2VlZF90eXBlID09IERQVV9TU1BQX1NDQUxFUl9RU0VFRDIpCiAJCWRwdV9rbXNfaW5mb19hZGRf a2V5c3RyKGluZm8sICJxc2VlZF90eXBlIiwgInFzZWVkMiIpOwotCWlmIChjYXRhbG9nLT5xc2Vl ZF90eXBlID09IERQVV9TU1BQX1NDQUxFUl9RU0VFRDMpCisJaWYgKGNhdGFsb2ctPmNhcHMtPnFz ZWVkX3R5cGUgPT0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMykKIAkJZHB1X2ttc19pbmZvX2FkZF9r ZXlzdHIoaW5mbywgInFzZWVkX3R5cGUiLCAicXNlZWQzIik7CiAKIAlpZiAoZHB1X2lzX2N1c3Rv bV9jbGllbnQoKSkgewotCQlpZiAoY2F0YWxvZy0+c21hcnRfZG1hX3JldiA9PSBEUFVfU1NQUF9T TUFSVF9ETUFfVjEpCisJCWlmIChjYXRhbG9nLT5jYXBzLT5zbWFydF9kbWFfcmV2ID09IERQVV9T U1BQX1NNQVJUX0RNQV9WMSkKIAkJCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sCiAJCQkJ CSJzbWFydF9kbWFfcmV2IiwgInNtYXJ0X2RtYV92MSIpOwotCQlpZiAoY2F0YWxvZy0+c21hcnRf ZG1hX3JldiA9PSBEUFVfU1NQUF9TTUFSVF9ETUFfVjIpCisJCWlmIChjYXRhbG9nLT5jYXBzLT5z bWFydF9kbWFfcmV2ID09IERQVV9TU1BQX1NNQVJUX0RNQV9WMikKIAkJCWRwdV9rbXNfaW5mb19h ZGRfa2V5c3RyKGluZm8sCiAJCQkJCSJzbWFydF9kbWFfcmV2IiwgInNtYXJ0X2RtYV92MiIpOwog CX0KQEAgLTMzMTAsNyArMzMxMCw4IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2luc3RhbGxfcHJv cGVydGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCX0KIAl9CiAKLQlkcHVfa21zX2luZm9f YWRkX2tleWludChpbmZvLCAiaGFzX3NyY19zcGxpdCIsIGNhdGFsb2ctPmhhc19zcmNfc3BsaXQp OworCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJoYXNfc3JjX3NwbGl0IiwKKwkJCQlj YXRhbG9nLT5jYXBzLT5oYXNfc3JjX3NwbGl0KTsKIAlpZiAoY2F0YWxvZy0+cGVyZi5tYXhfYndf bG93KQogCQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWF4X2JhbmR3aWR0aF9sb3ci LAogCQkJCWNhdGFsb2ctPnBlcmYubWF4X2J3X2xvdyAqIDEwMDBMTCk7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwppbmRleCBkOWQwOGZjLi43ZjQxODIyIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKQEAgLTE4NDIs NyArMTg0Miw3IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfbW9kZV9zZXQoc3RydWN0 IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCWRwdV9jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25u KTsKIAlpZiAoZHB1X2Nvbm4pIHsKIAkJcmV0ID0gZHB1X2Nvbm4tPm9wcy5nZXRfbW9kZV9pbmZv KGFkal9tb2RlLCAmZHB1X2VuYy0+bW9kZV9pbmZvLAotCQkJCWRwdV9rbXMtPmNhdGFsb2ctPm1h eF9taXhlcl93aWR0aCk7CisJCQkJZHB1X2ttcy0+Y2F0YWxvZy0+Y2Fwcy0+bWF4X21peGVyX3dp ZHRoKTsKIAkJaWYgKHJldCkgewogCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLAogCQkJCSJpbnZh bGlkIHRvcG9sb2d5IGZvciB0aGUgbW9kZVxuIik7CkBAIC0zNDYwLDcgKzM0NjAsOCBAQCBzdGF0 aWMgaW50IGRwdV9lbmNvZGVyX3NldHVwX2Rpc3BsYXkoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQg KmRwdV9lbmMsCiAKIAlpZiAoKGRpc3BfaW5mby0+Y2FwYWJpbGl0aWVzICYgTVNNX0RJU1BMQVlf Q0FQX0NNRF9NT0RFKSB8fAogCSAgICAoZGlzcF9pbmZvLT5jYXBhYmlsaXRpZXMgJiBNU01fRElT UExBWV9DQVBfVklEX01PREUpKQotCQlkcHVfZW5jLT5pZGxlX3BjX3N1cHBvcnRlZCA9IGRwdV9r bXMtPmNhdGFsb2ctPmhhc19pZGxlX3BjOworCQlkcHVfZW5jLT5pZGxlX3BjX3N1cHBvcnRlZCA9 CisJCQkJZHB1X2ttcy0+Y2F0YWxvZy0+Y2Fwcy0+aGFzX2lkbGVfcGM7CiAKIAltdXRleF9sb2Nr KCZkcHVfZW5jLT5lbmNfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IGRpc3BfaW5mby0+bnVtX29m X2hfdGlsZXMgJiYgIXJldDsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2NhdGFsb2cuYwppbmRleCA3MDE5NjIwLi5kZjczMTQ4IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMKQEAgLTE5LDMwODEgKzE5 LDYyMyBAQAogI2luY2x1ZGUgImRwdV9od19jYXRhbG9nX2Zvcm1hdC5oIgogI2luY2x1ZGUgImRw dV9rbXMuaCIKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKLSAqIE1BQ1JPIERFRklOSVRJT04KLSAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioKLSAq IE1heCBoYXJkd2FyZSBibG9jayBpbiBjZXJ0YWluIGhhcmR3YXJlLiBGb3IgZXg6IHNzcHAgcGlw ZXMKLSAqIGNhbiBoYXZlIFFTRUVELCBwY2MsIGlnYywgcGEsIGNzYywgcW9zIGVudHJpZXMsIGV0 Yy4gVGhpcyBjb3VudCBpcwotICogNjQgYmFzZWQgb24gc29mdHdhcmUgZGVzaWduLiBJdCBzaG91 bGQgYmUgaW5jcmVhc2VkIGlmIGFueSBvZiB0aGUKLSAqIGhhcmR3YXJlIGJsb2NrIGhhcyBtb3Jl IHN1YmJsb2Nrcy4KLSAqLwotI2RlZmluZSBNQVhfRFBVX0hXX0JMSyAgNjQKLQotLyogZWFjaCBl bnRyeSB3aWxsIGhhdmUgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0IG9mZnNldCBpbiB0aGF0IHJl Z2lzdGVyICovCi0jZGVmaW5lIE1BWF9CSVRfT0ZGU0VUIDIKLQotLyogZGVmYXVsdCBsaW5lIHdp ZHRoIGZvciBzc3BwLCBtaXhlciwgZHMgKGlucHV0KSwgd2IgKi8KLSNkZWZpbmUgREVGQVVMVF9E UFVfTElORV9XSURUSCAyMDQ4Ci0KLS8qIGRlZmF1bHQgb3V0cHV0IGxpbmUgd2lkdGggZm9yIGRz ICovCi0jZGVmaW5lIERFRkFVTFRfRFBVX09VVFBVVF9MSU5FX1dJRFRIIDI1NjAKLQotLyogbWF4 IG1peGVyIGJsZW5kIHN0YWdlcyAqLwotI2RlZmluZSBERUZBVUxUX0RQVV9NSVhFUl9CTEVORFNU QUdFUyA3CisjZGVmaW5lIFZJR19TRE04NDVfTUFTSyBcCisJKEJJVChEUFVfU1NQUF9TUkMpIHwg QklUKERQVV9TU1BQX1NDQUxFUl9RU0VFRDMpIHwgQklUKERQVV9TU1BQX1FPUykgfFwKKwlCSVQo RFBVX1NTUFBfQ1NDXzEwQklUKSB8IEJJVChEUFVfU1NQUF9DRFApIHwgQklUKERQVV9TU1BQX1FP U184TFZMKSB8XAorCUJJVChEUFVfU1NQUF9UU19QUkVGSUxMKSB8IEJJVChEUFVfU1NQUF9FWENM X1JFQ1QpKQogCi0vKiBtYXggYmFuayBiaXQgZm9yIG1hY3JvIHRpbGUgYW5kIHVid2MgZm9ybWF0 ICovCi0jZGVmaW5lIERFRkFVTFRfRFBVX0hJR0hFU1RfQkFOS19CSVQgMTUKKyNkZWZpbmUgRE1B X1NETTg0NV9NQVNLIFwKKwkoQklUKERQVV9TU1BQX1NSQykgfCBCSVQoRFBVX1NTUFBfUU9TKSB8 IEJJVChEUFVfU1NQUF9RT1NfOExWTCkgfFwKKwlCSVQoRFBVX1NTUFBfVFNfUFJFRklMTCkgfCBC SVQoRFBVX1NTUFBfVFNfUFJFRklMTF9SRUMxKSB8XAorCUJJVChEUFVfU1NQUF9DRFApIHwgQklU KERQVV9TU1BQX0VYQ0xfUkVDVCkpCiAKLS8qIGRlZmF1bHQgdWJ3YyB2ZXJzaW9uICovCi0jZGVm aW5lIERFRkFVTFRfRFBVX1VCV0NfVkVSU0lPTiBEUFVfSFdfVUJXQ19WRVJfMTAKKyNkZWZpbmUg TUlYRVJfU0RNODQ1X01BU0sgXAorCShCSVQoRFBVX01JWEVSX1NPVVJDRVNQTElUKSB8IEJJVChE UFVfRElNX0xBWUVSKSkKIAotLyogZGVmYXVsdCB1YndjIHN0YXRpYyBjb25maWcgcmVnaXN0ZXIg dmFsdWUgKi8KLSNkZWZpbmUgREVGQVVMVF9EUFVfVUJXQ19TVEFUSUMgMHgwCisjZGVmaW5lIERT UFBfU0RNODQ1X01BU0sgXAorCShCSVQoRFBVX0RTUFBfSUdDKSB8IEJJVChEUFVfRFNQUF9QQ0Mp IHwgQklUKERQVV9EU1BQX0dDKSB8XAorCUJJVChEUFVfRFNQUF9IU0lDKSB8IEJJVChEUFVfRFNQ UF9HQU1VVCkgfCBCSVQoRFBVX0RTUFBfSElTVCkgfFwKKwlCSVQoRFBVX0RTUFBfTUVNQ09MT1Ip IHwgQklUKERQVV9EU1BQX1NJWFpPTkUpIHwgQklUKERQVV9EU1BQX1ZMVVQpKQogCi0vKiBkZWZh dWx0IHVid2Mgc3dpenpsZSByZWdpc3RlciB2YWx1ZSAqLwotI2RlZmluZSBERUZBVUxUX0RQVV9V QldDX1NXSVpaTEUgMHgwCisjZGVmaW5lIERTUFBfQURfU0RNODQ1X01BU0sgXAorCShEU1BQX1NE TTg0NV9NQVNLIHwgQklUKERQVV9EU1BQX0FEKSkKIAotLyogZGVmYXVsdCBoYXJkd2FyZSBibG9j ayBzaXplIGlmIGR0c2kgZW50cnkgaXMgbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgREVGQVVMVF9E UFVfSFdfQkxPQ0tfTEVOIDB4MTAwCisjZGVmaW5lIFBJTkdQT05HX1NETTg0NV9NQVNLIEJJVChE UFVfUElOR1BPTkdfRElUSEVSKQogCi0vKiB0b3RhbCBudW1iZXIgb2YgaW50ZiAtIGRwLCBkc2ks IGhkbWkgKi8KLSNkZWZpbmUgSU5URl9DT1VOVAkJCTMKKyNkZWZpbmUgUElOR1BPTkdfU0RNODQ1 X1NQTElUX01BU0sgXAorCShQSU5HUE9OR19TRE04NDVfTUFTSyB8IEJJVChEUFVfUElOR1BPTkdf U1BMSVQpIHwgQklUKERQVV9QSU5HUE9OR19URTIpKQogCi0jZGVmaW5lIE1BWF9VUFNDQUxFX1JB VElPCQkyMAotI2RlZmluZSBNQVhfRE9XTlNDQUxFX1JBVElPCQk0Ci0jZGVmaW5lIFNTUFBfVU5J VFlfU0NBTEUJCTEKLQotI2RlZmluZSBNQVhfSE9SWl9ERUNJTUFUSU9OCQk0Ci0jZGVmaW5lIE1B WF9WRVJUX0RFQ0lNQVRJT04JCTQKLQotI2RlZmluZSBNQVhfU1BMSVRfRElTUExBWV9DVEwJCTIK LSNkZWZpbmUgTUFYX1BQX1NQTElUX0RJU1BMQVlfQ1RMCTEKLQotI2RlZmluZSBNRFNTX0JBU0Vf T0ZGU0VUCQkweDAKLQotI2RlZmluZSBST1RfTE1fT0ZGU0VUCQkJMwotI2RlZmluZSBMSU5FX0xN X09GRlNFVAkJCTUKLSNkZWZpbmUgTElORV9NT0RFX1dCX09GRlNFVAkJMgotCi0vKiBtYXhpbXVt IFhJTiBoYWx0IHRpbWVvdXQgaW4gdXNlYyAqLwotI2RlZmluZSBWQklGX1hJTl9IQUxUX1RJTUVP VVQJCTB4NDAwMAorI2RlZmluZSBXQjJfU0RNODQ1X01BU0sgXAorCShCSVQoRFBVX1dCX0xJTkVf TU9ERSkgfCBCSVQoRFBVX1dCX1RSQUZGSUNfU0hBUEVSKSB8IEJJVChEUFVfV0JfQ0RQKSB8XAor CUJJVChEUFVfV0JfWVVWX0NPTkZJRykgfCBCSVQoRFBVX1dCX1FPU184TFZMKSB8IEJJVChEUFVf V0JfVUJXQykpCiAKICNkZWZpbmUgREVGQVVMVF9QSVhFTF9SQU1fU0laRQkJKDUwICogMTAyNCkK KyNkZWZpbmUgREVGQVVMVF9EUFVfTElORV9XSURUSAkJMjA0OAorI2RlZmluZSBERUZBVUxUX0RQ VV9PVVRQVVRfTElORV9XSURUSAkyNTYwCiAKLS8qIGFjY2VzcyBwcm9wZXJ0eSB2YWx1ZSBiYXNl ZCBvbiBwcm9wX3R5cGUgYW5kIGhhcmR3YXJlIGluZGV4ICovCi0jZGVmaW5lIFBST1BfVkFMVUVf QUNDRVNTKHAsIGksIGopCQkoKHAgKyBpKS0+dmFsdWVbal0pCisjZGVmaW5lIE1BWF9IT1JaX0RF Q0lNQVRJT04JNAorI2RlZmluZSBNQVhfVkVSVF9ERUNJTUFUSU9OCTQKIAotLyoKLSAqIGFjY2Vz cyBlbGVtZW50IHdpdGhpbiBQUk9QX1RZUEVfQklUX09GRlNFVF9BUlJBWXMgYmFzZWQgb24gcHJv cF90eXBlLAotICogaGFyZHdhcmUgaW5kZXggYW5kIG9mZnNldCBhcnJheSBpbmRleAotICovCi0j ZGVmaW5lIFBST1BfQklUVkFMVUVfQUNDRVNTKHAsIGksIGosIGspCSgocCArIGkpLT5iaXRfdmFs dWVbal1ba10pCisjZGVmaW5lIE1BWF9VUFNDQUxFX1JBVElPCTIwCisjZGVmaW5lIE1BWF9ET1dO U0NBTEVfUkFUSU8JNAorI2RlZmluZSBTU1BQX1VOSVRZX1NDQUxFCTEKIAotLyoKLSAqIERlZmF1 bHQgcGFyYW1ldGVyIHZhbHVlcwotICovCi0jZGVmaW5lIERFRkFVTFRfTUFYX0JXX0hJR0gJCQk3 MDAwMDAwCi0jZGVmaW5lIERFRkFVTFRfTUFYX0JXX0xPVwkJCTcwMDAwMDAKLSNkZWZpbmUgREVG QVVMVF9VTkRFUlNJWkVEX1BSRUZJTExfTElORVMJMgotI2RlZmluZSBERUZBVUxUX1hUUkFfUFJF RklMTF9MSU5FUwkJMgotI2RlZmluZSBERUZBVUxUX0RFU1RfU0NBTEVfUFJFRklMTF9MSU5FUwkz Ci0jZGVmaW5lIERFRkFVTFRfTUFDUk9USUxFX1BSRUZJTExfTElORVMJCTQKLSNkZWZpbmUgREVG QVVMVF9ZVVZfTlYxMl9QUkVGSUxMX0xJTkVTCQk4Ci0jZGVmaW5lIERFRkFVTFRfTElORUFSX1BS RUZJTExfTElORVMJCTEKLSNkZWZpbmUgREVGQVVMVF9ET1dOU0NBTElOR19QUkVGSUxMX0xJTkVT CTEKLSNkZWZpbmUgREVGQVVMVF9DT1JFX0lCX0ZGCQkJIjYuMCIKLSNkZWZpbmUgREVGQVVMVF9D T1JFX0NMS19GRgkJCSIxLjAiCi0jZGVmaW5lIERFRkFVTFRfQ09NUF9SQVRJT19SVCBcCi0JCSJO VjEyLzUvMS8xLjIzIEFCMjQvNS8xLzEuMjMgWEIyNC81LzEvMS4yMyIKLSNkZWZpbmUgREVGQVVM VF9DT01QX1JBVElPX05SVCBcCi0JCSJOVjEyLzUvMS8xLjI1IEFCMjQvNS8xLzEuMjUgWEIyNC81 LzEvMS4yNSIKLSNkZWZpbmUgREVGQVVMVF9NQVhfUEVSX1BJUEVfQlcJCQkyNDAwMDAwCi0jZGVm aW5lIERFRkFVTFRfQU1PUlRJWkFCTEVfVEhSRVNIT0xECQkyNQorI2RlZmluZSBTVFJDQVQoWCwg WSkgKFggWSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKLSAqICBEVFNJIFBST1BFUlRZIElOREVYCisgKiBEUFUgc3ViIGJs b2NrcyBjb25maWcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotZW51bSB7Ci0JSFdfT0ZGLAotCUhXX0xFTiwKLQlIV19QUk9Q X01BWCwKLX07Ci0KLWVudW0gZHB1X3Byb3AgewotCURQVV9PRkYsCi0JRFBVX0xFTiwKLQlTU1BQ X0xJTkVXSURUSCwKLQlNSVhFUl9MSU5FV0lEVEgsCi0JTUlYRVJfQkxFTkQsCi0JV0JfTElORVdJ RFRILAotCUJBTktfQklULAotCVVCV0NfVkVSU0lPTiwKLQlVQldDX1NUQVRJQywKLQlVQldDX1NX SVpaTEUsCi0JUVNFRURfVFlQRSwKLQlDU0NfVFlQRSwKLQlQQU5JQ19QRVJfUElQRSwKLQlTUkNf U1BMSVQsCi0JRElNX0xBWUVSLAotCVNNQVJUX0RNQV9SRVYsCi0JSURMRV9QQywKLQlERVNUX1ND QUxFUiwKLQlEUFVfUFJPUF9NQVgsCi19OwotCi1lbnVtIHsKLQlQRVJGX01BWF9CV19MT1csCi0J UEVSRl9NQVhfQldfSElHSCwKLQlQRVJGX01JTl9DT1JFX0lCLAotCVBFUkZfTUlOX0xMQ0NfSUIs Ci0JUEVSRl9NSU5fRFJBTV9JQiwKLQlQRVJGX0NPUkVfSUJfRkYsCi0JUEVSRl9DT1JFX0NMS19G RiwKLQlQRVJGX0NPTVBfUkFUSU9fUlQsCi0JUEVSRl9DT01QX1JBVElPX05SVCwKLQlQRVJGX1VO REVSU0laRURfUFJFRklMTF9MSU5FUywKLQlQRVJGX0RFU1RfU0NBTEVfUFJFRklMTF9MSU5FUywK LQlQRVJGX01BQ1JPVElMRV9QUkVGSUxMX0xJTkVTLAotCVBFUkZfWVVWX05WMTJfUFJFRklMTF9M SU5FUywKLQlQRVJGX0xJTkVBUl9QUkVGSUxMX0xJTkVTLAotCVBFUkZfRE9XTlNDQUxJTkdfUFJF RklMTF9MSU5FUywKLQlQRVJGX1hUUkFfUFJFRklMTF9MSU5FUywKLQlQRVJGX0FNT1JUSVpBQkxF X1RIUkVTSE9MRCwKLQlQRVJGX0RBTkdFUl9MVVQsCi0JUEVSRl9TQUZFX0xVVCwKLQlQRVJGX1FP U19MVVRfTElORUFSLAotCVBFUkZfUU9TX0xVVF9NQUNST1RJTEUsCi0JUEVSRl9RT1NfTFVUX05S VCwKLQlQRVJGX1FPU19MVVRfQ1dCLAotCVBFUkZfQ0RQX1NFVFRJTkcsCi0JUEVSRl9QUk9QX01B WCwKLX07Ci0KLWVudW0gewotCVNTUFBfT0ZGLAotCVNTUFBfU0laRSwKLQlTU1BQX1RZUEUsCi0J U1NQUF9YSU4sCi0JU1NQUF9DTEtfQ1RSTCwKLQlTU1BQX0NMS19TVEFUVVMsCi0JU1NQUF9TQ0FM RV9TSVpFLAotCVNTUFBfVklHX0JMT0NLUywKLQlTU1BQX1JHQl9CTE9DS1MsCi0JU1NQUF9FWENM X1JFQ1QsCi0JU1NQUF9TTUFSVF9ETUEsCi0JU1NQUF9NQVhfUEVSX1BJUEVfQlcsCi0JU1NQUF9Q Uk9QX01BWCwKLX07Ci0KLWVudW0gewotCVZJR19RU0VFRF9PRkYsCi0JVklHX1FTRUVEX0xFTiwK LQlWSUdfQ1NDX09GRiwKLQlWSUdfSFNJQ19QUk9QLAotCVZJR19NRU1DT0xPUl9QUk9QLAotCVZJ R19QQ0NfUFJPUCwKLQlWSUdfUFJPUF9NQVgsCi19OwotCi1lbnVtIHsKLQlSR0JfU0NBTEVSX09G RiwKLQlSR0JfU0NBTEVSX0xFTiwKLQlSR0JfUENDX1BST1AsCi0JUkdCX1BST1BfTUFYLAotfTsK LQotZW51bSB7Ci0JSU5URl9PRkYsCi0JSU5URl9MRU4sCi0JSU5URl9QUkVGRVRDSCwKLQlJTlRG X1RZUEUsCi0JSU5URl9QUk9QX01BWCwKLX07Ci0KLWVudW0gewotCVBQX09GRiwKLQlQUF9MRU4s Ci0JVEVfT0ZGLAotCVRFX0xFTiwKLQlURTJfT0ZGLAotCVRFMl9MRU4sCi0JUFBfU0xBVkUsCi0J RElUSEVSX09GRiwKLQlESVRIRVJfTEVOLAotCURJVEhFUl9WRVIsCi0JUFBfUFJPUF9NQVgsCi19 OwotCi1lbnVtIHsKLQlEU0NfT0ZGLAotCURTQ19MRU4sCi0JRFNDX1BST1BfTUFYLAotfTsKLQot ZW51bSB7Ci0JRFNfVE9QX09GRiwKLQlEU19UT1BfTEVOLAotCURTX1RPUF9JTlBVVF9MSU5FV0lE VEgsCi0JRFNfVE9QX09VVFBVVF9MSU5FV0lEVEgsCi0JRFNfVE9QX1BST1BfTUFYLAotfTsKLQot ZW51bSB7Ci0JRFNfT0ZGLAotCURTX0xFTiwKLQlEU19QUk9QX01BWCwKLX07Ci0KLWVudW0gewot CURTUFBfVE9QX09GRiwKLQlEU1BQX1RPUF9TSVpFLAotCURTUFBfVE9QX1BST1BfTUFYLAotfTsK LQotZW51bSB7Ci0JRFNQUF9PRkYsCi0JRFNQUF9TSVpFLAotCURTUFBfQkxPQ0tTLAotCURTUFBf UFJPUF9NQVgsCi19OwotCi1lbnVtIHsKLQlEU1BQX0lHQ19QUk9QLAotCURTUFBfUENDX1BST1As Ci0JRFNQUF9HQ19QUk9QLAotCURTUFBfSFNJQ19QUk9QLAotCURTUFBfTUVNQ09MT1JfUFJPUCwK LQlEU1BQX1NJWFpPTkVfUFJPUCwKLQlEU1BQX0dBTVVUX1BST1AsCi0JRFNQUF9ESVRIRVJfUFJP UCwKLQlEU1BQX0hJU1RfUFJPUCwKLQlEU1BQX1ZMVVRfUFJPUCwKLQlEU1BQX0JMT0NLU19QUk9Q X01BWCwKLX07Ci0KLWVudW0gewotCUFEX09GRiwKLQlBRF9WRVJTSU9OLAotCUFEX1BST1BfTUFY LAotfTsKLQotZW51bSB7Ci0JTUlYRVJfT0ZGLAotCU1JWEVSX0xFTiwKLQlNSVhFUl9QQUlSX01B U0ssCi0JTUlYRVJfQkxPQ0tTLAotCU1JWEVSX1BST1BfTUFYLAotfTsKLQotZW51bSB7Ci0JTUlY RVJfR0NfUFJPUCwKLQlNSVhFUl9CTE9DS1NfUFJPUF9NQVgsCi19OwotCi1lbnVtIHsKLQlNSVhF Ul9CTEVORF9PUF9PRkYsCi0JTUlYRVJfQkxFTkRfUFJPUF9NQVgsCi19OwotCi1lbnVtIHsKLQlX Ql9PRkYsCi0JV0JfTEVOLAotCVdCX0lELAotCVdCX1hJTl9JRCwKLQlXQl9DTEtfQ1RSTCwKLQlX Ql9QUk9QX01BWCwKLX07Ci0KLWVudW0gewotCVZCSUZfT0ZGLAotCVZCSUZfTEVOLAotCVZCSUZf SUQsCi0JVkJJRl9ERUZBVUxUX09UX1JEX0xJTUlULAotCVZCSUZfREVGQVVMVF9PVF9XUl9MSU1J VCwKLQlWQklGX0RZTkFNSUNfT1RfUkRfTElNSVQsCi0JVkJJRl9EWU5BTUlDX09UX1dSX0xJTUlU LAotCVZCSUZfUU9TX1JUX1JFTUFQLAotCVZCSUZfUU9TX05SVF9SRU1BUCwKLQlWQklGX01FTVRZ UEVfMCwKLQlWQklGX01FTVRZUEVfMSwKLQlWQklGX1BST1BfTUFYLAotfTsKLQotZW51bSB7Ci0J UkVHX0RNQV9PRkYsCi0JUkVHX0RNQV9WRVJTSU9OLAotCVJFR19ETUFfVFJJR0dFUl9PRkYsCi0J UkVHX0RNQV9QUk9QX01BWAorLyogRFBVIHRvcCBsZXZlbCBjYXBzICovCitzdGF0aWMgY29uc3Qg c3RydWN0IGRwdV9jYXBzIHNkbTg0NV9kcHVfY2FwcyA9IHsKKwkubWF4X21peGVyX3dpZHRoID0g REVGQVVMVF9EUFVfT1VUUFVUX0xJTkVfV0lEVEgsCisJLm1heF9taXhlcl9ibGVuZHN0YWdlcyA9 IDB4YiwKKwkucXNlZWRfdHlwZSA9IERQVV9TU1BQX1NDQUxFUl9RU0VFRDMsCisJLnNtYXJ0X2Rt YV9yZXYgPSBEUFVfU1NQUF9TTUFSVF9ETUFfVjIsCisJLnVid2NfdmVyc2lvbiA9IERQVV9IV19V QldDX1ZFUl8yMCwKKwkuaGFzX3NyY19zcGxpdCA9IHRydWUsCisJLmhhc19kaW1fbGF5ZXIgPSB0 cnVlLAorCS5oYXNfaWRsZV9wYyA9IHRydWUsCit9OworCitzdGF0aWMgc3RydWN0IGRwdV9tZHNz X2Jhc2VfY2ZnIHNkbTg0NV9tZHNzW10gPSB7CisJeworCS5uYW1lID0gIm1kc3NfMCIsIC5pZCA9 IE1EUF9UT1AsCisJLmJhc2UgPSAweDAsIC5mZWF0dXJlcyA9IDAKKwl9LAorfTsKKworc3RhdGlj IHN0cnVjdCBkcHVfbWRwX2NmZyBzZG04NDVfbWRwW10gPSB7CisJeworCS5uYW1lID0gInRvcF8w IiwgLmlkID0gTURQX1RPUCwKKwkuYmFzZSA9IDB4MTAwMCwgLmxlbiA9IDB4NDVDLAorCS5mZWF0 dXJlcyA9IDAsCisJLmhpZ2hlc3RfYmFua19iaXQgPSAweDIsCisJLmhhc19kZXN0X3NjYWxlciA9 IHRydWUsCisJLmNsa19jdHJsc1tEUFVfQ0xLX0NUUkxfVklHMF0gPSB7CisJCQkucmVnX29mZiA9 IDB4MkFDLCAuYml0X29mZiA9IDB9LAorCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX1ZJRzFdID0g eworCQkJLnJlZ19vZmYgPSAweDJCNCwgLmJpdF9vZmYgPSAwfSwKKwkuY2xrX2N0cmxzW0RQVV9D TEtfQ1RSTF9WSUcyXSA9IHsKKwkJCS5yZWdfb2ZmID0gMHgyQkMsIC5iaXRfb2ZmID0gMH0sCisJ LmNsa19jdHJsc1tEUFVfQ0xLX0NUUkxfVklHM10gPSB7CisJCQkucmVnX29mZiA9IDB4MkM0LCAu Yml0X29mZiA9IDB9LAorCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX0RNQTBdID0geworCQkJLnJl Z19vZmYgPSAweDJBQywgLmJpdF9vZmYgPSA4fSwKKwkuY2xrX2N0cmxzW0RQVV9DTEtfQ1RSTF9E TUExXSA9IHsKKwkJCS5yZWdfb2ZmID0gMHgyQjQsIC5iaXRfb2ZmID0gOH0sCisJLmNsa19jdHJs c1tEUFVfQ0xLX0NUUkxfQ1VSU09SMF0gPSB7CisJCQkucmVnX29mZiA9IDB4MkJDLCAuYml0X29m ZiA9IDh9LAorCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX0NVUlNPUjFdID0geworCQkJLnJlZ19v ZmYgPSAweDJDNCwgLmJpdF9vZmYgPSA4fSwKKwkuY2xrX2N0cmxzW0RQVV9DTEtfQ1RSTF9XQjJd ID0geworCQkJLnJlZ19vZmYgPSAweDNiOCwgLmJpdF9vZmYgPSAyNH0sCisJfSwKIH07CiAKIC8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCi0gKiBkdHMgcHJvcGVydHkgZGVmaW5pdGlvbgorICogQ1RMIHN1YiBibG9ja3MgY29uZmln CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KLWVudW0gcHJvcF90eXBlIHsKLQlQUk9QX1RZUEVfQk9PTCwKLQlQUk9QX1RZUEVf VTMyLAotCVBST1BfVFlQRV9VMzJfQVJSQVksCi0JUFJPUF9UWVBFX1NUUklORywKLQlQUk9QX1RZ UEVfU1RSSU5HX0FSUkFZLAotCVBST1BfVFlQRV9CSVRfT0ZGU0VUX0FSUkFZLAotCVBST1BfVFlQ RV9OT0RFLAotfTsKLQotc3RydWN0IGRwdV9wcm9wX3R5cGUgewotCS8qIHVzZSBwcm9wZXJ0eSBp bmRleCBmcm9tIGVudW0gcHJvcGVydHkgZm9yIHJlYWRhYmlsaXR5IHB1cnBvc2UgKi8KLQl1OCBp ZDsKLQkvKiBpdCBzaG91bGQgYmUgcHJvcGVydHkgbmFtZSBiYXNlZCBvbiBkdHNpIGRvY3VtZW50 YXRpb24gKi8KLQljaGFyICpwcm9wX25hbWU7Ci0JLyoqCi0JICogaWYgcHJvcGVydHkgaXMgbWFy a2VkIG1hbmRhdG9yeSB0aGVuIGl0IHdpbGwgZmFpbCBwYXJzaW5nCi0JICogd2hlbiBwcm9wZXJ0 eSBpcyBub3QgcHJlc2VudAotCSAqLwotCXUzMiAgaXNfbWFuZGF0b3J5OwotCS8qIHByb3BlcnR5 IHR5cGUgYmFzZWQgb24gImVudW0gcHJvcF90eXBlIiAgKi8KLQllbnVtIHByb3BfdHlwZSB0eXBl OwotfTsKLQotc3RydWN0IGRwdV9wcm9wX3ZhbHVlIHsKLQl1MzIgdmFsdWVbTUFYX0RQVV9IV19C TEtdOwotCXUzMiBiaXRfdmFsdWVbTUFYX0RQVV9IV19CTEtdW01BWF9CSVRfT0ZGU0VUXTsKK3N0 YXRpYyBzdHJ1Y3QgZHB1X2N0bF9jZmcgc2RtODQ1X2N0bFtdID0geworCXsKKwkubmFtZSA9ICJj dGxfMCIsIC5pZCA9IENUTF8wLAorCS5iYXNlID0gMHgyMDAwLCAubGVuID0gMHhFNCwKKwkuZmVh dHVyZXMgPSBCSVQoRFBVX0NUTF9TUExJVF9ESVNQTEFZKSB8CisJCUJJVChEUFVfQ1RMX1BJTkdQ T05HX1NQTElUKQorCX0sCisJeworCS5uYW1lID0gImN0bF8xIiwgLmlkID0gQ1RMXzEsCisJLmJh c2UgPSAweDIyMDAsIC5sZW4gPSAweEU0LAorCS5mZWF0dXJlcyA9IEJJVChEUFVfQ1RMX1NQTElU X0RJU1BMQVkpCisJfSwKKwl7CisJLm5hbWUgPSAiY3RsXzIiLCAuaWQgPSBDVExfMiwKKwkuYmFz ZSA9IDB4MjQwMCwgLmxlbiA9IDB4RTQsCisJLmZlYXR1cmVzID0gMAorCX0sCisJeworCS5uYW1l ID0gImN0bF8zIiwgLmlkID0gQ1RMXzMsCisJLmJhc2UgPSAweDI2MDAsIC5sZW4gPSAweEU0LAor CS5mZWF0dXJlcyA9IDAKKwl9LAorCXsKKwkubmFtZSA9ICJjdGxfNCIsIC5pZCA9IENUTF80LAor CS5iYXNlID0gMHgyODAwLCAubGVuID0gMHhFNCwKKwkuZmVhdHVyZXMgPSAwCisJfSwKIH07CiAK IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCi0gKiBkdHMgcHJvcGVydHkgbGlzdAorICogU1NQUCBzdWIgYmxvY2tzIGNvbmZpZwog ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgZHB1X3Byb3BbXSA9IHsKLQl7RFBV X09GRiwgInFjb20sZHB1LW9mZiIsIHRydWUsIFBST1BfVFlQRV9VMzJ9LAotCXtEUFVfTEVOLCAi cWNvbSxkcHUtbGVuIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtTU1BQX0xJTkVXSURUSCwg InFjb20sZHB1LXNzcHAtbGluZXdpZHRoIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtNSVhF Ul9MSU5FV0lEVEgsICJxY29tLGRwdS1taXhlci1saW5ld2lkdGgiLCBmYWxzZSwgUFJPUF9UWVBF X1UzMn0sCi0Je01JWEVSX0JMRU5ELCAicWNvbSxkcHUtbWl4ZXItYmxlbmRzdGFnZXMiLCBmYWxz ZSwgUFJPUF9UWVBFX1UzMn0sCi0Je1dCX0xJTkVXSURUSCwgInFjb20sZHB1LXdiLWxpbmV3aWR0 aCIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7QkFOS19CSVQsICJxY29tLGRwdS1oaWdoZXN0 LWJhbmstYml0IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtVQldDX1ZFUlNJT04sICJxY29t LGRwdS11YndjLXZlcnNpb24iLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je1VCV0NfU1RBVElD LCAicWNvbSxkcHUtdWJ3Yy1zdGF0aWMiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je1VCV0Nf U1dJWlpMRSwgInFjb20sZHB1LXVid2Mtc3dpenpsZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwK LQl7UVNFRURfVFlQRSwgInFjb20sZHB1LXFzZWVkLXR5cGUiLCBmYWxzZSwgUFJPUF9UWVBFX1NU UklOR30sCi0Je0NTQ19UWVBFLCAicWNvbSxkcHUtY3NjLXR5cGUiLCBmYWxzZSwgUFJPUF9UWVBF X1NUUklOR30sCi0Je1BBTklDX1BFUl9QSVBFLCAicWNvbSxkcHUtcGFuaWMtcGVyLXBpcGUiLCBm YWxzZSwgUFJPUF9UWVBFX0JPT0x9LAotCXtTUkNfU1BMSVQsICJxY29tLGRwdS1oYXMtc3JjLXNw bGl0IiwgZmFsc2UsIFBST1BfVFlQRV9CT09MfSwKLQl7RElNX0xBWUVSLCAicWNvbSxkcHUtaGFz LWRpbS1sYXllciIsIGZhbHNlLCBQUk9QX1RZUEVfQk9PTH0sCi0Je1NNQVJUX0RNQV9SRVYsICJx Y29tLGRwdS1zbWFydC1kbWEtcmV2IiwgZmFsc2UsIFBST1BfVFlQRV9TVFJJTkd9LAotCXtJRExF X1BDLCAicWNvbSxkcHUtaGFzLWlkbGUtcGMiLCBmYWxzZSwgUFJPUF9UWVBFX0JPT0x9LAotCXtE RVNUX1NDQUxFUiwgInFjb20sZHB1LWhhcy1kZXN0LXNjYWxlciIsIGZhbHNlLCBQUk9QX1RZUEVf Qk9PTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgZHB1X3BlcmZfcHJvcFtd ID0gewotCXtQRVJGX01BWF9CV19MT1csICJxY29tLGRwdS1tYXgtYnctbG93LWticHMiLCBmYWxz ZSwgUFJPUF9UWVBFX1UzMn0sCi0Je1BFUkZfTUFYX0JXX0hJR0gsICJxY29tLGRwdS1tYXgtYnct aGlnaC1rYnBzIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtQRVJGX01JTl9DT1JFX0lCLCAi cWNvbSxkcHUtbWluLWNvcmUtaWIta2JwcyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7UEVS Rl9NSU5fTExDQ19JQiwgInFjb20sZHB1LW1pbi1sbGNjLWliLWticHMiLCBmYWxzZSwgUFJPUF9U WVBFX1UzMn0sCi0Je1BFUkZfTUlOX0RSQU1fSUIsICJxY29tLGRwdS1taW4tZHJhbS1pYi1rYnBz IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtQRVJGX0NPUkVfSUJfRkYsICJxY29tLGRwdS1j b3JlLWliLWZmIiwgZmFsc2UsIFBST1BfVFlQRV9TVFJJTkd9LAotCXtQRVJGX0NPUkVfQ0xLX0ZG LCAicWNvbSxkcHUtY29yZS1jbGstZmYiLCBmYWxzZSwgUFJPUF9UWVBFX1NUUklOR30sCi0Je1BF UkZfQ09NUF9SQVRJT19SVCwgInFjb20sZHB1LWNvbXAtcmF0aW8tcnQiLCBmYWxzZSwKLQkJCVBS T1BfVFlQRV9TVFJJTkd9LAotCXtQRVJGX0NPTVBfUkFUSU9fTlJULCAicWNvbSxkcHUtY29tcC1y YXRpby1ucnQiLCBmYWxzZSwKLQkJCVBST1BfVFlQRV9TVFJJTkd9LAotCXtQRVJGX1VOREVSU0la RURfUFJFRklMTF9MSU5FUywgInFjb20sZHB1LXVuZGVyc2l6ZWRwcmVmaWxsLWxpbmVzIiwKLQkJ CWZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7UEVSRl9ERVNUX1NDQUxFX1BSRUZJTExfTElORVMs ICJxY29tLGRwdS1kZXN0LXNjYWxlcHJlZmlsbC1saW5lcyIsCi0JCQlmYWxzZSwgUFJPUF9UWVBF X1UzMn0sCi0Je1BFUkZfTUFDUk9USUxFX1BSRUZJTExfTElORVMsICJxY29tLGRwdS1tYWNyb3Rp bGVwcmVmaWxsLWxpbmVzIiwKLQkJCWZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7UEVSRl9ZVVZf TlYxMl9QUkVGSUxMX0xJTkVTLCAicWNvbSxkcHUteXV2LW52MTJwcmVmaWxsLWxpbmVzIiwKLQkJ CWZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7UEVSRl9MSU5FQVJfUFJFRklMTF9MSU5FUywgInFj b20sZHB1LWxpbmVhcnByZWZpbGwtbGluZXMiLAotCQkJZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAot CXtQRVJGX0RPV05TQ0FMSU5HX1BSRUZJTExfTElORVMsICJxY29tLGRwdS1kb3duc2NhbGluZ3By ZWZpbGwtbGluZXMiLAotCQkJZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtQRVJGX1hUUkFfUFJF RklMTF9MSU5FUywgInFjb20sZHB1LXh0cmEtcHJlZmlsbC1saW5lcyIsCi0JCQlmYWxzZSwgUFJP UF9UWVBFX1UzMn0sCi0Je1BFUkZfQU1PUlRJWkFCTEVfVEhSRVNIT0xELCAicWNvbSxkcHUtYW1v cnRpemFibGUtdGhyZXNob2xkIiwKLQkJCWZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7UEVSRl9E QU5HRVJfTFVULCAicWNvbSxkcHUtZGFuZ2VyLWx1dCIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FS UkFZfSwKLQl7UEVSRl9TQUZFX0xVVCwgInFjb20sZHB1LXNhZmUtbHV0IiwgZmFsc2UsIFBST1Bf VFlQRV9VMzJfQVJSQVl9LAotCXtQRVJGX1FPU19MVVRfTElORUFSLCAicWNvbSxkcHUtcW9zLWx1 dC1saW5lYXIiLCBmYWxzZSwKLQkJCVBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtQRVJGX1FPU19M VVRfTUFDUk9USUxFLCAicWNvbSxkcHUtcW9zLWx1dC1tYWNyb3RpbGUiLCBmYWxzZSwKLQkJCVBS T1BfVFlQRV9VMzJfQVJSQVl9LAotCXtQRVJGX1FPU19MVVRfTlJULCAicWNvbSxkcHUtcW9zLWx1 dC1ucnQiLCBmYWxzZSwKLQkJCVBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtQRVJGX1FPU19MVVRf Q1dCLCAicWNvbSxkcHUtcW9zLWx1dC1jd2IiLCBmYWxzZSwKLQkJCVBST1BfVFlQRV9VMzJfQVJS QVl9LAotCXtQRVJGX0NEUF9TRVRUSU5HLCAicWNvbSxkcHUtY2RwLXNldHRpbmciLCBmYWxzZSwK LQkJCVBST1BfVFlQRV9VMzJfQVJSQVl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90 eXBlIHNzcHBfcHJvcFtdID0gewotCXtTU1BQX09GRiwgInFjb20sZHB1LXNzcHAtb2ZmIiwgdHJ1 ZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je1NTUFBfU0laRSwgInFjb20sZHB1LXNzcHAtc3Jj LXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je1NTUFBfVFlQRSwgInFjb20sZHB1LXNz cHAtdHlwZSIsIHRydWUsIFBST1BfVFlQRV9TVFJJTkdfQVJSQVl9LAotCXtTU1BQX1hJTiwgInFj b20sZHB1LXNzcHAteGluLWlkIiwgdHJ1ZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je1NTUFBf Q0xLX0NUUkwsICJxY29tLGRwdS1zc3BwLWNsay1jdHJsIiwgZmFsc2UsCi0JCVBST1BfVFlQRV9C SVRfT0ZGU0VUX0FSUkFZfSwKLQl7U1NQUF9DTEtfU1RBVFVTLCAicWNvbSxkcHUtc3NwcC1jbGst c3RhdHVzIiwgZmFsc2UsCi0JCVBST1BfVFlQRV9CSVRfT0ZGU0VUX0FSUkFZfSwKLQl7U1NQUF9T Q0FMRV9TSVpFLCAicWNvbSxkcHUtc3NwcC1zY2FsZS1zaXplIiwgZmFsc2UsIFBST1BfVFlQRV9V MzJ9LAotCXtTU1BQX1ZJR19CTE9DS1MsICJxY29tLGRwdS1zc3BwLXZpZy1ibG9ja3MiLCBmYWxz ZSwgUFJPUF9UWVBFX05PREV9LAotCXtTU1BQX1JHQl9CTE9DS1MsICJxY29tLGRwdS1zc3BwLXJn Yi1ibG9ja3MiLCBmYWxzZSwgUFJPUF9UWVBFX05PREV9LAotCXtTU1BQX0VYQ0xfUkVDVCwgInFj b20sZHB1LXNzcHAtZXhjbC1yZWN0IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtT U1BQX1NNQVJUX0RNQSwgInFjb20sZHB1LXNzcHAtc21hcnQtZG1hLXByaW9yaXR5IiwgZmFsc2Us Ci0JCVBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtTU1BQX01BWF9QRVJfUElQRV9CVywgInFjb20s ZHB1LW1heC1wZXItcGlwZS1idy1rYnBzIiwgZmFsc2UsCi0JCVBST1BfVFlQRV9VMzJfQVJSQVl9 LAotfTsKIAotc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIHZpZ19wcm9wW10gPSB7Ci0Je1ZJ R19RU0VFRF9PRkYsICJxY29tLGRwdS12aWctcXNlZWQtb2ZmIiwgZmFsc2UsIFBST1BfVFlQRV9V MzJ9LAotCXtWSUdfUVNFRURfTEVOLCAicWNvbSxkcHUtdmlnLXFzZWVkLXNpemUiLCBmYWxzZSwg UFJPUF9UWVBFX1UzMn0sCi0Je1ZJR19DU0NfT0ZGLCAicWNvbSxkcHUtdmlnLWNzYy1vZmYiLCBm YWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je1ZJR19IU0lDX1BST1AsICJxY29tLGRwdS12aWctaHNp YyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7VklHX01FTUNPTE9SX1BST1AsICJx Y29tLGRwdS12aWctbWVtY29sb3IiLCBmYWxzZSwKLQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0J e1ZJR19QQ0NfUFJPUCwgInFjb20sZHB1LXZpZy1wY2MiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9B UlJBWX0sCisvKiBTU1BQIGNvbW1vbiBjb25maWd1cmF0aW9uICovCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRwdV9zc3BwX2Jsa3NfY29tbW9uIHNkbTg0NV9zc3BwX2NvbW1vbiA9IHsKKwkubWF4bGlu ZXdpZHRoID0gREVGQVVMVF9EUFVfT1VUUFVUX0xJTkVfV0lEVEgsCisJLnBpeGVsX3JhbV9zaXpl ID0gREVGQVVMVF9QSVhFTF9SQU1fU0laRSwKKwkubWF4aGRlY2lleHAgPSBNQVhfSE9SWl9ERUNJ TUFUSU9OLAorCS5tYXh2ZGVjaWV4cCA9IE1BWF9WRVJUX0RFQ0lNQVRJT04sCit9OworCisjZGVm aW5lIF9WSUdfU0JMSyhudW0sIHNkbWFfcHJpKSBcCisJeyBcCisJLmNvbW1vbiA9ICZzZG04NDVf c3NwcF9jb21tb24sIFwKKwkubWF4ZHduc2NhbGUgPSBNQVhfRE9XTlNDQUxFX1JBVElPLCBcCisJ Lm1heHVwc2NhbGUgPSBNQVhfVVBTQ0FMRV9SQVRJTywgXAorCS5zbWFydF9kbWFfcHJpb3JpdHkg PSBzZG1hX3ByaSwgXAorCS5zcmNfYmxrID0gey5uYW1lID0gU1RSQ0FUKCJzc3BwX3NyY18iLCBu dW0pLCBcCisJCS5pZCA9IERQVV9TU1BQX1NSQywgLmJhc2UgPSAweDAwLCAubGVuID0gMHgxNTAs fSwgXAorCS5zY2FsZXJfYmxrID0gey5uYW1lID0gU1RSQ0FUKCJzc3BwX3NjYWxlciIsIG51bSks IFwKKwkJLmlkID0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMywgXAorCQkuYmFzZSA9IDB4YTAwLCAu bGVuID0gMHhhMCx9LCBcCisJLmNzY19ibGsgPSB7Lm5hbWUgPSBTVFJDQVQoInNzcHBfY3NjIiwg bnVtKSwgXAorCQkuaWQgPSBEUFVfU1NQUF9DU0NfMTBCSVQsIFwKKwkJLmJhc2UgPSAweDFhMDAs IC5sZW4gPSAweDEwMCx9LCBcCisJLmZvcm1hdF9saXN0ID0gcGxhbmVfZm9ybWF0c195dXYsIFwK KwkudmlydF9mb3JtYXRfbGlzdCA9IHBsYW5lX2Zvcm1hdHMsIFwKKwl9CisKKyNkZWZpbmUgX0RN QV9TQkxLKG51bSwgc2RtYV9wcmkpIFwKKwl7IFwKKwkuY29tbW9uID0gJnNkbTg0NV9zc3BwX2Nv bW1vbiwgXAorCS5tYXhkd25zY2FsZSA9IFNTUFBfVU5JVFlfU0NBTEUsIFwKKwkubWF4dXBzY2Fs ZSA9IFNTUFBfVU5JVFlfU0NBTEUsIFwKKwkuc21hcnRfZG1hX3ByaW9yaXR5ID0gc2RtYV9wcmks IFwKKwkuc3JjX2JsayA9IHsubmFtZSA9IFNUUkNBVCgic3NwcF9zcmNfIiwgbnVtKSwgXAorCQku aWQgPSBEUFVfU1NQUF9TUkMsIC5iYXNlID0gMHgwMCwgLmxlbiA9IDB4MTUwLH0sIFwKKwkuZm9y bWF0X2xpc3QgPSBwbGFuZV9mb3JtYXRzLCBcCisJLnZpcnRfZm9ybWF0X2xpc3QgPSBwbGFuZV9m b3JtYXRzLCBcCisJfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzIHNk bTg0NV92aWdfc2Jsa18wID0gX1ZJR19TQkxLKCIwIiwgNSk7CitzdGF0aWMgY29uc3Qgc3RydWN0 IGRwdV9zc3BwX3N1Yl9ibGtzIHNkbTg0NV92aWdfc2Jsa18xID0gX1ZJR19TQkxLKCIxIiwgNik7 CitzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzIHNkbTg0NV92aWdfc2Jsa18y ID0gX1ZJR19TQkxLKCIyIiwgNyk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9zc3BwX3N1Yl9i bGtzIHNkbTg0NV92aWdfc2Jsa18zID0gX1ZJR19TQkxLKCIzIiwgOCk7CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3Mgc2RtODQ1X2RtYV9zYmxrXzAgPSBfRE1BX1NCTEso IjgiLCAxKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3Mgc2RtODQ1X2Rt YV9zYmxrXzEgPSBfRE1BX1NCTEsoIjkiLCAyKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3Nz cHBfc3ViX2Jsa3Mgc2RtODQ1X2RtYV9zYmxrXzIgPSBfRE1BX1NCTEsoIjEwIiwgMyk7CitzdGF0 aWMgY29uc3Qgc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzIHNkbTg0NV9kbWFfc2Jsa18zID0gX0RN QV9TQkxLKCIxMSIsIDQpOworCisjZGVmaW5lIFNTUFBfVklHX0JMSyhfbmFtZSwgX2lkLCBfYmFz ZSwgX3NibGssIF94aW5pZCwgX2Nsa2N0cmwpIFwKKwl7IFwKKwkubmFtZSA9IF9uYW1lLCAuaWQg PSBfaWQsIFwKKwkuYmFzZSA9IF9iYXNlLCAubGVuID0gMHgxYzgsIFwKKwkuZmVhdHVyZXMgPSBW SUdfU0RNODQ1X01BU0ssIFwKKwkuc2JsayA9ICZfc2JsaywgXAorCS54aW5faWQgPSBfeGluaWQs IFwKKwkudHlwZSA9IFNTUFBfVFlQRV9WSUcsIFwKKwkuY2xrX2N0cmwgPSBfY2xrY3RybCBcCisJ fQorCisjZGVmaW5lIFNTUFBfRE1BX0JMSyhfbmFtZSwgX2lkLCBfYmFzZSwgX3NibGssIF94aW5p ZCwgX2Nsa2N0cmwpIFwKKwl7IFwKKwkubmFtZSA9IF9uYW1lLCAuaWQgPSBfaWQsIFwKKwkuYmFz ZSA9IF9iYXNlLCAubGVuID0gMHgxYzgsIFwKKwkuZmVhdHVyZXMgPSBETUFfU0RNODQ1X01BU0ss IFwKKwkuc2JsayA9ICZfc2JsaywgXAorCS54aW5faWQgPSBfeGluaWQsIFwKKwkudHlwZSA9IFNT UFBfVFlQRV9ETUEsIFwKKwkuY2xrX2N0cmwgPSBfY2xrY3RybCBcCisJfQorCitzdGF0aWMgc3Ry dWN0IGRwdV9zc3BwX2NmZyBzZG04NDVfc3NwcFtdID0geworCVNTUFBfVklHX0JMSygic3NwcF8w IiwgU1NQUF9WSUcwLCAweDUwMDAsCisJCXNkbTg0NV92aWdfc2Jsa18wLCAwLCBEUFVfQ0xLX0NU UkxfVklHMCksCisJU1NQUF9WSUdfQkxLKCJzc3BwXzEiLCBTU1BQX1ZJRzEsIDB4NzAwMCwKKwkJ c2RtODQ1X3ZpZ19zYmxrXzEsIDQsIERQVV9DTEtfQ1RSTF9WSUcxKSwKKwlTU1BQX1ZJR19CTEso InNzcHBfMiIsIFNTUFBfVklHMiwgMHg5MDAwLAorCQlzZG04NDVfdmlnX3NibGtfMiwgOCwgRFBV X0NMS19DVFJMX1ZJRzIpLAorCVNTUFBfVklHX0JMSygic3NwcF8zIiwgU1NQUF9WSUczLCAweGIw MDAsCisJCXNkbTg0NV92aWdfc2Jsa18zLCAxMiwgRFBVX0NMS19DVFJMX1ZJRzMpLAorCVNTUFBf RE1BX0JMSygic3NwcF84IiwgU1NQUF9ETUEwLCAweDI1MDAwLAorCQlzZG04NDVfZG1hX3NibGtf MCwgMSwgRFBVX0NMS19DVFJMX0RNQTApLAorCVNTUFBfRE1BX0JMSygic3NwcF85IiwgU1NQUF9E TUExLCAweDI3MDAwLAorCQlzZG04NDVfZG1hX3NibGtfMSwgNSwgRFBVX0NMS19DVFJMX0RNQTEp LAorCVNTUFBfRE1BX0JMSygic3NwcF8xMCIsIFNTUFBfRE1BMiwgMHgyOTAwMCwKKwkJc2RtODQ1 X2RtYV9zYmxrXzIsIDksIERQVV9DTEtfQ1RSTF9DVVJTT1IwKSwKKwlTU1BQX0RNQV9CTEsoInNz cHBfMTEiLCBTU1BQX0RNQTMsIDB4MmIwMDAsCisJCXNkbTg0NV9kbWFfc2Jsa18zLCAxMywgRFBV X0NMS19DVFJMX0NVUlNPUjEpLAogfTsKIAotc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIHJn Yl9wcm9wW10gPSB7Ci0Je1JHQl9TQ0FMRVJfT0ZGLCAicWNvbSxkcHUtcmdiLXNjYWxlci1vZmYi LCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je1JHQl9TQ0FMRVJfTEVOLCAicWNvbSxkcHUtcmdi LXNjYWxlci1zaXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtSR0JfUENDX1BST1AsICJx Y29tLGRwdS1yZ2ItcGNjIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotfTsKLQotc3Rh dGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIGN0bF9wcm9wW10gPSB7Ci0Je0hXX09GRiwgInFjb20s ZHB1LWN0bC1vZmYiLCB0cnVlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7SFdfTEVOLCAicWNv bSxkcHUtY3RsLXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTUlYRVIg c3ViIGJsb2NrcyBjb25maWcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfbG1fc3Vi X2Jsa3Mgc2RtODQ1X2xtX3NibGsgPSB7CisJLm1heHdpZHRoID0gREVGQVVMVF9EUFVfT1VUUFVU X0xJTkVfV0lEVEgsCisJLm1heGJsZW5kc3RhZ2VzID0gMTEsIC8qIGV4Y2x1ZGluZyBiYXNlIGxh eWVyICovCisJLmJsZW5kc3RhZ2VfYmFzZSA9IHsgLyogb2Zmc2V0cyByZWxhdGl2ZSB0byBtaXhl ciBiYXNlICovCisJCTB4MjAsIDB4MzgsIDB4NTAsIDB4NjgsIDB4ODAsIDB4OTgsCisJCTB4YjAs IDB4YzgsIDB4ZTAsIDB4ZjgsIDB4MTEwCisJfSwKK307CisKKyNkZWZpbmUgTE1fQkxLKF9uYW1l LCBfaWQsIF9iYXNlLCBfZHNwcCwgX2RzLCBfcHAsIF9sbXBhaXIpIFwKKwl7IFwKKwkubmFtZSA9 IF9uYW1lLCAuaWQgPSBfaWQsIFwKKwkuYmFzZSA9IF9iYXNlLCAubGVuID0gMHgzMjAsIFwKKwku ZmVhdHVyZXMgPSBNSVhFUl9TRE04NDVfTUFTSywgXAorCS5zYmxrID0gJnNkbTg0NV9sbV9zYmxr LCBcCisJLmRzcHAgPSBfZHNwcCwgLmRzID0gX2RzLCBcCisJLnBpbmdwb25nID0gX3BwLCBcCisJ LmxtX3BhaXJfbWFzayA9ICgxIDw8IF9sbXBhaXIpIFwKKwl9CitzdGF0aWMgc3RydWN0IGRwdV9s bV9jZmcgc2RtODQ1X2xtW10gPSB7CisJTE1fQkxLKCJsbV8wIiwgTE1fMCwgMHg0NTAwMCwgRFNQ UF8wLAorCQlEU18wLCBQSU5HUE9OR18wLCBMTV8xKSwKKwlMTV9CTEsoImxtXzEiLCBMTV8xLCAw eDQ2MDAwLCBEU1BQXzEsCisJCURTXzEsIFBJTkdQT05HXzEsIExNXzApLAorCUxNX0JMSygibG1f MiIsIExNXzIsIDB4NDcwMDAsIERTUFBfMiwKKwkJRFNfTUFYLCBQSU5HUE9OR18yLCBMTV81KSwK KwlMTV9CTEsoImxtXzMiLCBMTV8zLCAweDAsIERTUFBfTUFYLAorCQlEU19NQVgsIFBJTkdQT05H X01BWCwgMCksCisJTE1fQkxLKCJsbV80IiwgTE1fNCwgMHgwLCBEU1BQX01BWCwKKwkJRFNfTUFY LCBQSU5HUE9OR19NQVgsIDApLAorCUxNX0JMSygibG1fNSIsIExNXzUsIDB4NGEwMDAsIERTUFBf MywKKwkJRFNfTUFYLCBQSU5HUE9OR18zLCBMTV8yKSwKIH07CiAKLXN0cnVjdCBkcHVfcHJvcF90 eXBlIG1peGVyX2JsZW5kX3Byb3BbXSA9IHsKLQl7TUlYRVJfQkxFTkRfT1BfT0ZGLCAicWNvbSxk cHUtbWl4ZXItYmxlbmQtb3Atb2ZmIiwgdHJ1ZSwKLQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0sCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgorICogRFNQUCBzdWIgYmxvY2tzIGNvbmZpZworICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGRw dV9kc3BwX3RvcF9jZmcgc2RtODQ1X2RzcHBfdG9wID0geworCS5uYW1lID0gImRzcHBfdG9wIiwg LmJhc2UgPSAweDEzMDAsIC5sZW4gPSAweGMKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1 X2RzcHBfc3ViX2Jsa3Mgc2RtODQ1X2RzcHBfc2JsayA9IHsKKwkuaWdjID0gey5pZCA9IERQVV9E U1BQX0lHQywgLmJhc2UgPSAweDAsCisJCS5sZW4gPSAweDAsIC52ZXJzaW9uID0gMHgzMDAwMX0s CisJLnBjYyA9IHsuaWQgPSBEUFVfRFNQUF9QQ0MsIC5iYXNlID0gMHgxNzAwLAorCQkubGVuID0g MHgwLCAudmVyc2lvbiA9IDB4NDAwMDB9LAorCS5nYyA9IHsuaWQgPSBEUFVfRFNQUF9HQywgLmJh c2UgPSAweDE3YzAsCisJCS5sZW4gPSAweDAsIC52ZXJzaW9uID0gMHgxMDAwOH0sCisJLmhzaWMg PSB7LmlkID0gRFBVX0RTUFBfSFNJQywgLmJhc2UgPSAweDgwMCwKKwkJLmxlbiA9IDB4MCwgLnZl cnNpb24gPSAweDEwMDA3fSwKKwkubWVtY29sb3IgPSB7LmlkID0gRFBVX0RTUFBfTUVNQ09MT1Is IC5iYXNlID0gMHg4ODAsCisJCS5sZW4gPSAweDAsIC52ZXJzaW9uID0gMHgxMDAwN30sCisJLnNp eHpvbmUgPSB7LmlkID0gRFBVX0RTUFBfU0lYWk9ORSwgLmJhc2UgPSAweDkwMCwKKwkJLmxlbiA9 IDB4MCwgLnZlcnNpb24gPSAweDEwMDA3fSwKKwkuZ2FtdXQgPSB7LmlkID0gRFBVX0RTUFBfR0FN VVQsIC5iYXNlID0gMHgxMDAwLAorCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4NDAwMDB9LAor CS5oaXN0ID0gey5pZCA9IERQVV9EU1BQX0hJU1QsIC5iYXNlID0gMHg4MDAsCisJCS5sZW4gPSAw eDAsIC52ZXJzaW9uID0gMHgxMDAwN30sCisJLyogVE9ETyA6IE1vdmUgQUQgb3V0IG9mIERTUFAg Y29uZmlnICovCisJLnZsdXQgPSB7LmlkID0gRFBVX0RTUFBfVkxVVCwgLmJhc2UgPSAweGEwMCwK KwkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA4fSwKK307CisKKyNkZWZpbmUgRFNQUF9C TEsoX25hbWUsIF9pZCwgX2Jhc2UpIFwKKwl7XAorCS5uYW1lID0gX25hbWUsIC5pZCA9IF9pZCwg XAorCS5iYXNlID0gX2Jhc2UsIC5sZW4gPSAweDE3ZTAsIFwKKwkuZmVhdHVyZXMgPSBEU1BQX1NE TTg0NV9NQVNLLCBcCisJLnNibGsgPSAmc2RtODQ1X2RzcHBfc2JsaywgXAorCX0KKworc3RhdGlj IHN0cnVjdCBkcHVfZHNwcF9jZmcgc2RtODQ1X2RzcHBbXSA9IHsKKwlEU1BQX0JMSygiZHNwcF8w IiwgRFNQUF8wLCAweDU1MDAwKSwKKwlEU1BQX0JMSygiZHNwcF8xIiwgRFNQUF8xLCAweDU3MDAw KSwKKwlEU1BQX0JMSygiZHNwcF8yIiwgRFNQUF8yLCAweDU5MDAwKSwKKwlEU1BQX0JMSygiZHNw cF8zIiwgRFNQUF8zLCAweDViMDAwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3BfdHlw ZSBtaXhlcl9wcm9wW10gPSB7Ci0Je01JWEVSX09GRiwgInFjb20sZHB1LW1peGVyLW9mZiIsIHRy dWUsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtNSVhFUl9MRU4sICJxY29tLGRwdS1taXhlci1z aXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtNSVhFUl9QQUlSX01BU0ssICJxY29tLGRw dS1taXhlci1wYWlyLW1hc2siLCB0cnVlLAotCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7TUlY RVJfQkxPQ0tTLCAicWNvbSxkcHUtbWl4ZXItYmxvY2tzIiwgZmFsc2UsIFBST1BfVFlQRV9OT0RF fSwKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKiBEUyBzdWIgYmxvY2tzIGNvbmZpZworICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY29uc3Qg c3RydWN0IGRwdV9kc190b3BfY2ZnIHNkbTg0NV9kc190b3AgPSB7CisJLm5hbWUgPSAiZHNfdG9w XzAiLCAuaWQgPSBEU19UT1AsCisJLmJhc2UgPSAweDYxMDAwLCAubGVuID0gMHhjLAorCS5tYXhp bnB1dHdpZHRoID0gREVGQVVMVF9EUFVfTElORV9XSURUSCwKKwkubWF4b3V0cHV0d2lkdGggPSBE RUZBVUxUX0RQVV9PVVRQVVRfTElORV9XSURUSCwKKwkubWF4dXBzY2FsZSA9IE1BWF9VUFNDQUxF X1JBVElPLAogfTsKIAotc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIG1peGVyX2Jsb2Nrc19w cm9wW10gPSB7Ci0Je01JWEVSX0dDX1BST1AsICJxY29tLGRwdS1taXhlci1nYyIsIGZhbHNlLCBQ Uk9QX1RZUEVfVTMyX0FSUkFZfSwKLX07CisjZGVmaW5lIERTX0JMSyhfbmFtZSwgX2lkLCBfYmFz ZSkgXAorCXtcCisJLm5hbWUgPSBfbmFtZSwgLmlkID0gX2lkLCBcCisJLmJhc2UgPSBfYmFzZSwg LmxlbiA9IDB4ODAwLCBcCisJLmZlYXR1cmVzID0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMywgXAor CS50b3AgPSAmc2RtODQ1X2RzX3RvcCBcCisJfQogCi1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5 cGUgZHNwcF90b3BfcHJvcFtdID0gewotCXtEU1BQX1RPUF9PRkYsICJxY29tLGRwdS1kc3BwLXRv cC1vZmYiLCB0cnVlLCBQUk9QX1RZUEVfVTMyfSwKLQl7RFNQUF9UT1BfU0laRSwgInFjb20sZHB1 LWRzcHAtdG9wLXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCitzdGF0aWMgc3RydWN0IGRw dV9kc19jZmcgc2RtODQ1X2RzW10gPSB7CisJRFNfQkxLKCJkc18wIiwgRFNfMCwgMHg4MDApLAor CURTX0JMSygiZHNfMSIsIERTXzEsIDB4MTAwMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGRwdV9w cm9wX3R5cGUgZHNwcF9wcm9wW10gPSB7Ci0Je0RTUFBfT0ZGLCAicWNvbSxkcHUtZHNwcC1vZmYi LCB0cnVlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7RFNQUF9TSVpFLCAicWNvbSxkcHUtZHNw cC1zaXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtEU1BQX0JMT0NLUywgInFjb20sZHB1 LWRzcHAtYmxvY2tzIiwgZmFsc2UsIFBST1BfVFlQRV9OT0RFfSwKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQSU5HUE9O RyBzdWIgYmxvY2tzIGNvbmZpZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9waW5n cG9uZ19zdWJfYmxrcyBzZG04NDVfcHBfc2Jsa190ZSA9IHsKKwkudGUyID0gey5pZCA9IERQVV9Q SU5HUE9OR19URTIsIC5iYXNlID0gMHgyMDAwLCAubGVuID0gMHgwLAorCQkudmVyc2lvbiA9IDB4 MX0sCisJLmRpdGhlciA9IHsuaWQgPSBEUFVfUElOR1BPTkdfRElUSEVSLCAuYmFzZSA9IDB4MzBl MCwKKwkJLmxlbiA9IDB4MjAsIC52ZXJzaW9uID0gMHgxMDAwMH0sCiB9OwogCi1zdGF0aWMgc3Ry dWN0IGRwdV9wcm9wX3R5cGUgZHNwcF9ibG9ja3NfcHJvcFtdID0gewotCXtEU1BQX0lHQ19QUk9Q LCAicWNvbSxkcHUtZHNwcC1pZ2MiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je0RT UFBfUENDX1BST1AsICJxY29tLGRwdS1kc3BwLXBjYyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FS UkFZfSwKLQl7RFNQUF9HQ19QUk9QLCAicWNvbSxkcHUtZHNwcC1nYyIsIGZhbHNlLCBQUk9QX1RZ UEVfVTMyX0FSUkFZfSwKLQl7RFNQUF9IU0lDX1BST1AsICJxY29tLGRwdS1kc3BwLWhzaWMiLCBm YWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je0RTUFBfTUVNQ09MT1JfUFJPUCwgInFjb20s ZHB1LWRzcHAtbWVtY29sb3IiLCBmYWxzZSwKLQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je0RT UFBfU0lYWk9ORV9QUk9QLCAicWNvbSxkcHUtZHNwcC1zaXh6b25lIiwgZmFsc2UsCi0JCVBST1Bf VFlQRV9VMzJfQVJSQVl9LAotCXtEU1BQX0dBTVVUX1BST1AsICJxY29tLGRwdS1kc3BwLWdhbXV0 IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtEU1BQX0RJVEhFUl9QUk9QLCAicWNv bSxkcHUtZHNwcC1kaXRoZXIiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je0RTUFBf SElTVF9QUk9QLCAicWNvbSxkcHUtZHNwcC1oaXN0IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJS QVl9LAotCXtEU1BQX1ZMVVRfUFJPUCwgInFjb20sZHB1LWRzcHAtdmx1dCIsIGZhbHNlLCBQUk9Q X1RZUEVfVTMyX0FSUkFZfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3Bpbmdwb25nX3N1Yl9i bGtzIHNkbTg0NV9wcF9zYmxrID0geworCS5kaXRoZXIgPSB7LmlkID0gRFBVX1BJTkdQT05HX0RJ VEhFUiwgLmJhc2UgPSAweDMwZTAsCisJCS5sZW4gPSAweDIwLCAudmVyc2lvbiA9IDB4MTAwMDB9 LAogfTsKIAotc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIGFkX3Byb3BbXSA9IHsKLQl7QURf T0ZGLCAicWNvbSxkcHUtZHNwcC1hZC1vZmYiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0s Ci0Je0FEX1ZFUlNJT04sICJxY29tLGRwdS1kc3BwLWFkLXZlcnNpb24iLCBmYWxzZSwgUFJPUF9U WVBFX1UzMn0sCi19OworI2RlZmluZSBQUF9CTEtfVEUoX25hbWUsIF9pZCwgX2Jhc2UpIFwKKwl7 XAorCS5uYW1lID0gX25hbWUsIC5pZCA9IF9pZCwgXAorCS5iYXNlID0gX2Jhc2UsIC5sZW4gPSAw eGQ0LCBcCisJLmZlYXR1cmVzID0gUElOR1BPTkdfU0RNODQ1X1NQTElUX01BU0ssIFwKKwkuc2Js ayA9ICZzZG04NDVfcHBfc2Jsa190ZSBcCisJfQorI2RlZmluZSBQUF9CTEsoX25hbWUsIF9pZCwg X2Jhc2UpIFwKKwl7XAorCS5uYW1lID0gX25hbWUsIC5pZCA9IF9pZCwgXAorCS5iYXNlID0gX2Jh c2UsIC5sZW4gPSAweGQ0LCBcCisJLmZlYXR1cmVzID0gUElOR1BPTkdfU0RNODQ1X01BU0ssIFwK Kwkuc2JsayA9ICZzZG04NDVfcHBfc2JsayBcCisJfQogCi1zdGF0aWMgc3RydWN0IGRwdV9wcm9w X3R5cGUgZHNfdG9wX3Byb3BbXSA9IHsKLQl7RFNfVE9QX09GRiwgInFjb20sZHB1LWRlc3Qtc2Nh bGVyLXRvcC1vZmYiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je0RTX1RPUF9MRU4sICJxY29t LGRwdS1kZXN0LXNjYWxlci10b3Atc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7RFNf VE9QX0lOUFVUX0xJTkVXSURUSCwgInFjb20sZHB1LW1heC1kZXN0LXNjYWxlci1pbnB1dC1saW5l d2lkdGgiLAotCQlmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je0RTX1RPUF9PVVRQVVRfTElORVdJ RFRILCAicWNvbSxkcHUtbWF4LWRlc3Qtc2NhbGVyLW91dHB1dC1saW5ld2lkdGgiLAotCQlmYWxz ZSwgUFJPUF9UWVBFX1UzMn0sCitzdGF0aWMgc3RydWN0IGRwdV9waW5ncG9uZ19jZmcgc2RtODQ1 X3BwW10gPSB7CisJUFBfQkxLX1RFKCJwaW5ncG9uZ18wIiwgUElOR1BPTkdfMCwgMHg3MTAwMCks CisJUFBfQkxLX1RFKCJwaW5ncG9uZ18xIiwgUElOR1BPTkdfMSwgMHg3MTgwMCksCisJUFBfQkxL KCJwaW5ncG9uZ18yIiwgUElOR1BPTkdfMiwgMHg3MjAwMCksCisJUFBfQkxLKCJwaW5ncG9uZ18z IiwgUElOR1BPTkdfMywgMHg3MjgwMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5 cGUgZHNfcHJvcFtdID0gewotCXtEU19PRkYsICJxY29tLGRwdS1kZXN0LXNjYWxlci1vZmYiLCBm YWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je0RTX0xFTiwgInFjb20sZHB1LWRlc3Qtc2Nh bGVyLXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi19OworLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERTQyBzdWIg YmxvY2tzIGNvbmZpZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3BfdHlwZSBwcF9w cm9wW10gPSB7Ci0Je1BQX09GRiwgInFjb20sZHB1LXBwLW9mZiIsIHRydWUsIFBST1BfVFlQRV9V MzJfQVJSQVl9LAotCXtQUF9MRU4sICJxY29tLGRwdS1wcC1zaXplIiwgZmFsc2UsIFBST1BfVFlQ RV9VMzJ9LAotCXtURV9PRkYsICJxY29tLGRwdS10ZS1vZmYiLCBmYWxzZSwgUFJPUF9UWVBFX1Uz Ml9BUlJBWX0sCi0Je1RFX0xFTiwgInFjb20sZHB1LXRlLXNpemUiLCBmYWxzZSwgUFJPUF9UWVBF X1UzMn0sCi0Je1RFMl9PRkYsICJxY29tLGRwdS10ZTItb2ZmIiwgZmFsc2UsIFBST1BfVFlQRV9V MzJfQVJSQVl9LAotCXtURTJfTEVOLCAicWNvbSxkcHUtdGUyLXNpemUiLCBmYWxzZSwgUFJPUF9U WVBFX1UzMn0sCi0Je1BQX1NMQVZFLCAicWNvbSxkcHUtcHAtc2xhdmUiLCBmYWxzZSwgUFJPUF9U WVBFX1UzMl9BUlJBWX0sCi0Je0RJVEhFUl9PRkYsICJxY29tLGRwdS1kaXRoZXItb2ZmIiwgZmFs c2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtESVRIRVJfTEVOLCAicWNvbSxkcHUtZGl0aGVy LXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je0RJVEhFUl9WRVIsICJxY29tLGRwdS1k aXRoZXItdmVyc2lvbiIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKK3N0YXRpYyBzdHJ1Y3QgZHB1 X2RzY19jZmcgc2RtODQ1X2RzY1tdID0geworCXsKKwkubmFtZSA9ICJkc2NfMCIsIC5pZCA9IERT Q18wLAorCS5iYXNlID0gMHg4MTAwMCwgLmxlbiA9IDB4MTQwCisJfSwKKwl7CisJLm5hbWUgPSAi ZHNjXzEiLCAuaWQgPSBEU0NfMSwKKwkuYmFzZSA9IDB4ODE0MDAsIC5sZW4gPSAweDE0MAorCX0s CisJeworCS5uYW1lID0gImRzY18yIiwgLmlkID0gRFNDXzIsCisJLmJhc2UgPSAweDgxODAwLCAu bGVuID0gMHgxNDAKKwl9LAorCXsKKwkubmFtZSA9ICJkc2NfMyIsIC5pZCA9IERTQ18zLAorCS5i YXNlID0gMHg4MWMwMCwgLmxlbiA9IDB4MTQwCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHB1 X3Byb3BfdHlwZSBkc2NfcHJvcFtdID0gewotCXtEU0NfT0ZGLCAicWNvbSxkcHUtZHNjLW9mZiIs IGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7RFNDX0xFTiwgInFjb20sZHB1LWRzYy1z aXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotfTsKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJTlRGIHN1YiBibG9j a3MgY29uZmlnCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSU5URl9CTEsoX25hbWUsIF9pZCwgX2Jhc2UsIF90 eXBlLCBfY3RybF9pZCkgXAorCXtcCisJLm5hbWUgPSBfbmFtZSwgLmlkID0gX2lkLCBcCisJLmJh c2UgPSBfYmFzZSwgLmxlbiA9IDB4MjgwLCBcCisJLnR5cGUgPSBfdHlwZSwgXAorCS5jb250cm9s bGVyX2lkID0gX2N0cmxfaWQsIFwKKwkucHJvZ19mZXRjaF9saW5lc193b3JzdF9jYXNlID0gMjQg XAorCX0KIAotc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIGNkbV9wcm9wW10gPSB7Ci0Je0hX X09GRiwgInFjb20sZHB1LWNkbS1vZmYiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0J e0hXX0xFTiwgInFjb20sZHB1LWNkbS1zaXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAorc3Rh dGljIHN0cnVjdCBkcHVfaW50Zl9jZmcgc2RtODQ1X2ludGZbXSA9IHsKKwlJTlRGX0JMSygiaW50 Zl8wIiwgSU5URl8wLCAweDZCMDAwLCBJTlRGX0RQLCAwKSwKKwlJTlRGX0JMSygiaW50Zl8xIiwg SU5URl8xLCAweDZCODAwLCBJTlRGX0RTSSwgMCksCisJSU5URl9CTEsoImludGZfMiIsIElOVEZf MiwgMHg2QzAwMCwgSU5URl9EU0ksIDEpLAorCUlOVEZfQkxLKCJpbnRmXzMiLCBJTlRGXzMsIDB4 NkM4MDAsIElOVEZfRFAsIDEpLAogfTsKIAotc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIGlu dGZfcHJvcFtdID0gewotCXtJTlRGX09GRiwgInFjb20sZHB1LWludGYtb2ZmIiwgdHJ1ZSwgUFJP UF9UWVBFX1UzMl9BUlJBWX0sCi0Je0lOVEZfTEVOLCAicWNvbSxkcHUtaW50Zi1zaXplIiwgZmFs c2UsIFBST1BfVFlQRV9VMzJ9LAotCXtJTlRGX1BSRUZFVENILCAicWNvbSxkcHUtaW50Zi1tYXgt cHJlZmV0Y2gtbGluZXMiLCBmYWxzZSwKLQkJCQkJCVBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtJ TlRGX1RZUEUsICJxY29tLGRwdS1pbnRmLXR5cGUiLCBmYWxzZSwgUFJPUF9UWVBFX1NUUklOR19B UlJBWX0sCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICogV0IgYW5kIENETSBzdWIgYmxvY2tzIGNvbmZpZworICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv KiBXcml0ZWJhY2sgMiBjYXBhYmlsaXR5ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV93Yl9z dWJfYmxvY2tzIHNkbTg0NV93YjJfc2JsayA9IHsKKwkubWF4bGluZXdpZHRoID0gNDA5NiwKK307 CisKK3N0YXRpYyBzdHJ1Y3QgZHB1X3diX2NmZyBzZG04NDVfd2JbXSA9IHsKKwl7CisJLm5hbWUg PSAid2JfMiIsIC5pZCA9IFdCXzIsCisJLmJhc2UgPSAweDY2MDAwLCAubGVuID0gMHgyYzgsCisJ LmZlYXR1cmVzID0gV0IyX1NETTg0NV9NQVNLLAorCS5zYmxrID0gJnNkbTg0NV93YjJfc2JsaywK KwkuZm9ybWF0X2xpc3QgPSB3YjJfZm9ybWF0cywKKwkudmJpZl9pZHggPSBWQklGX05SVCwKKwku eGluX2lkID0gNiwKKwkuY2xrX2N0cmwgPSBEUFVfQ0xLX0NUUkxfV0IyCisJfSwKK307CisKK3N0 YXRpYyBzdHJ1Y3QgZHB1X2NkbV9jZmcgc2RtODQ1X2NkbVtdID0geworCXsKKwkubmFtZSA9ICJj ZG1fMCIsIC5pZCA9IENETV8wLAorCS5iYXNlID0gMHg3QTIwMCwgLmxlbiA9IDB4MjI0LAorCS5m ZWF0dXJlcyA9IDAsCisJLmludGZfY29ubmVjdCA9IEJJVChJTlRGXzMpLAorCS53Yl9jb25uZWN0 ID0gQklUKFdCXzIpCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3BfdHlwZSB3Yl9w cm9wW10gPSB7Ci0Je1dCX09GRiwgInFjb20sZHB1LXdiLW9mZiIsIHRydWUsIFBST1BfVFlQRV9V MzJfQVJSQVl9LAotCXtXQl9MRU4sICJxY29tLGRwdS13Yi1zaXplIiwgZmFsc2UsIFBST1BfVFlQ RV9VMzJ9LAotCXtXQl9JRCwgInFjb20sZHB1LXdiLWlkIiwgdHJ1ZSwgUFJPUF9UWVBFX1UzMl9B UlJBWX0sCi0Je1dCX1hJTl9JRCwgInFjb20sZHB1LXdiLXhpbi1pZCIsIGZhbHNlLCBQUk9QX1RZ UEVfVTMyX0FSUkFZfSwKLQl7V0JfQ0xLX0NUUkwsICJxY29tLGRwdS13Yi1jbGstY3RybCIsIGZh bHNlLAotCQlQUk9QX1RZUEVfQklUX09GRlNFVF9BUlJBWX0sCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVkJJRiBzdWIg YmxvY2tzIGNvbmZpZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisvKiBWQklGIFFPUyByZW1hcCAqLworc3RhdGljIHUzMiBz ZG04NDVfcnRfcHJpX2x2bFtdID0gezMsIDMsIDQsIDQsIDUsIDUsIDYsIDZ9Oworc3RhdGljIHUz MiBzZG04NDVfbnJ0X3ByaV9sdmxbXSA9IHszLCAzLCAzLCAzLCAzLCAzLCAzLCAzfTsKKworc3Rh dGljIHN0cnVjdCBkcHVfdmJpZl9jZmcgc2RtODQ1X3ZiaWZbXSA9IHsKKwl7CisJLm5hbWUgPSAi dmJpZl8wIiwgLmlkID0gVkJJRl8wLAorCS5iYXNlID0gMCwgLmxlbiA9IDB4MTA0MCwKKwkuZmVh dHVyZXMgPSBCSVQoRFBVX1ZCSUZfUU9TX1JFTUFQKSwKKwkueGluX2hhbHRfdGltZW91dCA9IDB4 NDAwMCwKKwkucW9zX3J0X3RibCA9IHsKKwkJLm5wcmlvcml0eV9sdmwgPSBBUlJBWV9TSVpFKHNk bTg0NV9ydF9wcmlfbHZsKSwKKwkJLnByaW9yaXR5X2x2bCA9IHNkbTg0NV9ydF9wcmlfbHZsLAor CQl9LAorCS5xb3NfbnJ0X3RibCA9IHsKKwkJLm5wcmlvcml0eV9sdmwgPSBBUlJBWV9TSVpFKHNk bTg0NV9ucnRfcHJpX2x2bCksCisJCS5wcmlvcml0eV9sdmwgPSBzZG04NDVfbnJ0X3ByaV9sdmws CisJCX0sCisJLm1lbXR5cGVfY291bnQgPSAxNCwKKwkubWVtdHlwZSA9IHszLCAzLCAzLCAzLCAz LCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBk cHVfcmVnX2RtYV9jZmcgc2RtODQ1X3JlZ2RtYSA9IHsKKwkuYmFzZSA9IDB4MCwgLnZlcnNpb24g PSAweDEsIC50cmlnZ2VyX3NlbF9vZmYgPSAweDExOWMKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHB1 X3Byb3BfdHlwZSB2YmlmX3Byb3BbXSA9IHsKLQl7VkJJRl9PRkYsICJxY29tLGRwdS12YmlmLW9m ZiIsIHRydWUsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtWQklGX0xFTiwgInFjb20sZHB1LXZi aWYtc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7VkJJRl9JRCwgInFjb20sZHB1LXZi aWYtaWQiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je1ZCSUZfREVGQVVMVF9PVF9S RF9MSU1JVCwgInFjb20sZHB1LXZiaWYtZGVmYXVsdC1vdC1yZC1saW1pdCIsIGZhbHNlLAotCQlQ Uk9QX1RZUEVfVTMyfSwKLQl7VkJJRl9ERUZBVUxUX09UX1dSX0xJTUlULCAicWNvbSxkcHUtdmJp Zi1kZWZhdWx0LW90LXdyLWxpbWl0IiwgZmFsc2UsCi0JCVBST1BfVFlQRV9VMzJ9LAotCXtWQklG X0RZTkFNSUNfT1RfUkRfTElNSVQsICJxY29tLGRwdS12YmlmLWR5bmFtaWMtb3QtcmQtbGltaXQi LCBmYWxzZSwKLQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je1ZCSUZfRFlOQU1JQ19PVF9XUl9M SU1JVCwgInFjb20sZHB1LXZiaWYtZHluYW1pYy1vdC13ci1saW1pdCIsIGZhbHNlLAotCQlQUk9Q X1RZUEVfVTMyX0FSUkFZfSwKLQl7VkJJRl9RT1NfUlRfUkVNQVAsICJxY29tLGRwdS12YmlmLXFv cy1ydC1yZW1hcCIsIGZhbHNlLAotCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7VkJJRl9RT1Nf TlJUX1JFTUFQLCAicWNvbSxkcHUtdmJpZi1xb3MtbnJ0LXJlbWFwIiwgZmFsc2UsCi0JCVBST1Bf VFlQRV9VMzJfQVJSQVl9LAotCXtWQklGX01FTVRZUEVfMCwgInFjb20sZHB1LXZiaWYtbWVtdHlw ZS0wIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtWQklGX01FTVRZUEVfMSwgInFj b20sZHB1LXZiaWYtbWVtdHlwZS0xIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotfTsK Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisgKiBQRVJGIGRhdGEgY29uZmlnCisgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHN0cnVjdCBkcHVf cHJvcF90eXBlIHJlZ19kbWFfcHJvcFtSRUdfRE1BX1BST1BfTUFYXSA9IHsKLQlbUkVHX0RNQV9P RkZdID0gIHtSRUdfRE1BX09GRiwgInFjb20sZHB1LXJlZy1kbWEtb2ZmIiwgZmFsc2UsCi0JCVBS T1BfVFlQRV9VMzJ9LAotCVtSRUdfRE1BX1ZFUlNJT05dID0ge1JFR19ETUFfVkVSU0lPTiwgInFj b20sZHB1LXJlZy1kbWEtdmVyc2lvbiIsCi0JCWZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQlbUkVH X0RNQV9UUklHR0VSX09GRl0gPSB7UkVHX0RNQV9UUklHR0VSX09GRiwKLQkJInFjb20sZHB1LXJl Zy1kbWEtdHJpZ2dlci1vZmYiLCBmYWxzZSwKLQkJUFJPUF9UWVBFX1UzMn0sCisvKiBTU1BQIFFP UyBMVVRzICovCitzdGF0aWMgc3RydWN0IGRwdV9xb3NfbHV0X2VudHJ5IHNkbTg0NV9xb3NfbGlu ZWFyW10gPSB7CisJey5mbCA9IDQsIC5sdXQgPSAweDM1N30sCisJey5mbCA9IDUsIC5sdXQgPSAw eDMzNTd9LAorCXsuZmwgPSA2LCAubHV0ID0gMHgyMzM1N30sCisJey5mbCA9IDcsIC5sdXQgPSAw eDIyMzM1N30sCisJey5mbCA9IDgsIC5sdXQgPSAweDIyMjMzNTd9LAorCXsuZmwgPSA5LCAubHV0 ID0gMHgyMjIyMzM1N30sCisJey5mbCA9IDEwLCAubHV0ID0gMHgyMjIyMjMzNTd9LAorCXsuZmwg PSAxMSwgLmx1dCA9IDB4MjIyMjIyMzM1N30sCisJey5mbCA9IDEyLCAubHV0ID0gMHgyMjIyMjIy MzM1N30sCisJey5mbCA9IDEzLCAubHV0ID0gMHgyMjIyMjIyMjMzNTd9LAorCXsuZmwgPSAxNCwg Lmx1dCA9IDB4MTIyMjIyMjIyMzM1N30sCisJey5mbCA9IDAsIC5sdXQgPSAweDExMjIyMjIyMjIz MzU3fQorfTsKKworc3RhdGljIHN0cnVjdCBkcHVfcW9zX2x1dF9lbnRyeSBzZG04NDVfcW9zX21h Y3JvdGlsZVtdID0geworCXsuZmwgPSAxMCwgLmx1dCA9IDB4MzQ0NTU2Njc3fSwKKwl7LmZsID0g MTEsIC5sdXQgPSAweDMzNDQ1NTY2Nzd9LAorCXsuZmwgPSAxMiwgLmx1dCA9IDB4MjMzNDQ1NTY2 Nzd9LAorCXsuZmwgPSAxMywgLmx1dCA9IDB4MjIzMzQ0NTU2Njc3fSwKKwl7LmZsID0gMTQsIC5s dXQgPSAweDEyMjMzNDQ1NTY2Nzd9LAorCXsuZmwgPSAwLCAubHV0ID0gMHgxMTIyMzMzNDQ1NTY2 Nzd9LAorfTsKKworc3RhdGljIHN0cnVjdCBkcHVfcW9zX2x1dF9lbnRyeSBzZG04NDVfcW9zX25y dFtdID0geworCXsuZmwgPSAwLCAubHV0ID0gMHgwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHB1 X3Fvc19sdXRfZW50cnkgc2RtODQ1X3Fvc19jd2JbXSA9IHsKKwl7LmZsID0gMCwgLmx1dCA9IDB4 NzUzMDAwMDAwMDAwMDAwMH0sCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgZHB1X3BlcmZfY2ZnIHNk bTg0NV9wZXJmX2RhdGEgPSB7CisJLm1heF9id19sb3cgPSA2ODAwMDAwLAorCS5tYXhfYndfaGln aCA9IDY4MDAwMDAsCisJLm1pbl9jb3JlX2liID0gMjQwMDAwMCwKKwkubWluX2xsY2NfaWIgPSA4 MDAwMDAsCisJLm1pbl9kcmFtX2liID0gODAwMDAwLAorCS5jb3JlX2liX2ZmID0gIjYuMCIsCisJ LmNvcmVfY2xrX2ZmID0gIjEuMCIsCisJLmNvbXBfcmF0aW9fcnQgPQorCSJOVjEyLzUvMS8xLjIz IEFCMjQvNS8xLzEuMjMgWEIyNC81LzEvMS4yMyIsCisJLmNvbXBfcmF0aW9fbnJ0ID0KKwkiTlYx Mi81LzEvMS4yNSBBQjI0LzUvMS8xLjI1IFhCMjQvNS8xLzEuMjUiLAorCS51bmRlcnNpemVkX3By ZWZpbGxfbGluZXMgPSAyLAorCS54dHJhX3ByZWZpbGxfbGluZXMgPSAyLAorCS5kZXN0X3NjYWxl X3ByZWZpbGxfbGluZXMgPSAzLAorCS5tYWNyb3RpbGVfcHJlZmlsbF9saW5lcyA9IDQsCisJLnl1 dl9udjEyX3ByZWZpbGxfbGluZXMgPSA4LAorCS5saW5lYXJfcHJlZmlsbF9saW5lcyA9IDEsCisJ LmRvd25zY2FsaW5nX3ByZWZpbGxfbGluZXMgPSAxLAorCS5hbW9ydGl6YWJsZV90aHJlc2hvbGQg PSAyNSwKKwkubWluX3ByZWZpbGxfbGluZXMgPSAyNCwKKwkuZGFuZ2VyX2x1dF90YmwgPSB7MHhm LCAweGZmZmYsIDB4MCwgMHgwfSwKKwkucW9zX2x1dF90YmwgPSB7CisJCXsubmVudHJ5ID0gQVJS QVlfU0laRShzZG04NDVfcW9zX2xpbmVhciksCisJCS5lbnRyaWVzID0gc2RtODQ1X3Fvc19saW5l YXIKKwkJfSwKKwkJey5uZW50cnkgPSBBUlJBWV9TSVpFKHNkbTg0NV9xb3NfbWFjcm90aWxlKSwK KwkJLmVudHJpZXMgPSBzZG04NDVfcW9zX21hY3JvdGlsZQorCQl9LAorCQl7Lm5lbnRyeSA9IEFS UkFZX1NJWkUoc2RtODQ1X3Fvc19ucnQpLAorCQkuZW50cmllcyA9IHNkbTg0NV9xb3NfbnJ0CisJ CX0sCisJCXsubmVudHJ5ID0gQVJSQVlfU0laRShzZG04NDVfcW9zX2N3YiksCisJCS5lbnRyaWVz ID0gc2RtODQ1X3Fvc19jd2IKKwkJfSwKKwl9LAorCS5jZHBfY2ZnID0geworCQl7LnJkX2VuYWJs ZSA9IDEsIC53cl9lbmFibGUgPSAxfSwKKwkJey5yZF9lbmFibGUgPSAxLCAud3JfZW5hYmxlID0g MH0KKwl9LAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKLSAqIHN0YXRpYyBBUEkgbGlzdAorICogSGFyZHdhcmUgY2F0 YWxvZyBpbml0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBfcGFyc2VfZHRfdTMyX2hhbmRsZXIoc3Ry dWN0IGRldmljZV9ub2RlICpucCwKLQljaGFyICpwcm9wX25hbWUsIHUzMiAqb2Zmc2V0cywgaW50 IGxlbiwgYm9vbCBtYW5kYXRvcnkpCi17Ci0JaW50IHJjID0gLUVJTlZBTDsKLQotCWlmIChsZW4g PiBNQVhfRFBVX0hXX0JMSykgewotCQlEUFVfRVJST1IoCi0JCQkicHJvcDogJXMgdHJpZXMgb3V0 IG9mIGJvdW5kIGFjY2VzcyBmb3IgdTMyIGFycmF5IHJlYWQgbGVuOiAlZFxuIiwKLQkJCQlwcm9w X25hbWUsIGxlbik7Ci0JCXJldHVybiAtRTJCSUc7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9y ZWFkX3UzMl9hcnJheShucCwgcHJvcF9uYW1lLCBvZmZzZXRzLCBsZW4pOwotCWlmIChyYyAmJiBt YW5kYXRvcnkpCi0JCURQVV9FUlJPUigibWFuZGF0b3J5IHByb3A6ICVzIHUzMiBhcnJheSByZWFk IGxlbjolZFxuIiwKLQkJCQlwcm9wX25hbWUsIGxlbik7Ci0JZWxzZSBpZiAocmMpCi0JCURQVV9E RUJVRygib3B0aW9uYWwgcHJvcDogJXMgdTMyIGFycmF5IHJlYWQgbGVuOiVkXG4iLAotCQkJCXBy b3BfbmFtZSwgbGVuKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBfcGFyc2VfZHRf Yml0X29mZnNldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCWNoYXIgKnByb3BfbmFtZSwgc3Ry dWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlLCB1MzIgcHJvcF9pbmRleCwKLQl1MzIgY291 bnQsIGJvb2wgbWFuZGF0b3J5KQotewotCWludCByYyA9IDAsIGxlbiwgaSwgajsKLQljb25zdCB1 MzIgKmFycjsKLQotCWFyciA9IG9mX2dldF9wcm9wZXJ0eShucCwgcHJvcF9uYW1lLCAmbGVuKTsK LQlpZiAoYXJyKSB7Ci0JCWxlbiAvPSBzaXplb2YodTMyKTsKLQkJbGVuICY9IH4weDE7Ci0KLQkJ aWYgKGxlbiA+IChNQVhfRFBVX0hXX0JMSyAqIE1BWF9CSVRfT0ZGU0VUKSkgewotCQkJRFBVX0VS Uk9SKAotCQkJCSJwcm9wOiAlcyBsZW46ICVkIHdpbGwgbGVhZCB0byBvdXQgb2YgYm91bmQgYWNj ZXNzXG4iLAotCQkJCXByb3BfbmFtZSwgbGVuIC8gTUFYX0JJVF9PRkZTRVQpOwotCQkJcmV0dXJu IC1FMkJJRzsKLQkJfQotCi0JCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGVuOyBqKyspIHsKLQkJ CVBST1BfQklUVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIHByb3BfaW5kZXgsIGosIDApID0KLQkJ CQliZTMyX3RvX2NwdShhcnJbaV0pOwotCQkJaSsrOwotCQkJUFJPUF9CSVRWQUxVRV9BQ0NFU1Mo cHJvcF92YWx1ZSwgcHJvcF9pbmRleCwgaiwgMSkgPQotCQkJCWJlMzJfdG9fY3B1KGFycltpXSk7 Ci0JCQlpKys7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAobWFuZGF0b3J5KSB7Ci0JCQlEUFVfRVJS T1IoImVycm9yIG1hbmRhdG9yeSBwcm9wZXJ0eSAnJXMnIG5vdCBmb3VuZFxuIiwKLQkJCQlwcm9w X25hbWUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9IGVsc2UgewotCQkJRFBVX0RFQlVHKCJlcnJv ciBvcHRpb25hbCBwcm9wZXJ0eSAnJXMnIG5vdCBmb3VuZFxuIiwKLQkJCQlwcm9wX25hbWUpOwot CQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IF92YWxpZGF0ZV9kdF9lbnRy eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCXN0cnVjdCBkcHVfcHJvcF90eXBlICpkcHVfcHJv cCwgdTMyIHByb3Bfc2l6ZSwgaW50ICpwcm9wX2NvdW50LAotCWludCAqb2ZmX2NvdW50KQotewot CWludCByYyA9IDAsIGksIHZhbDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNucCA9IE5VTEw7Ci0K LQlpZiAob2ZmX2NvdW50KSB7Ci0JCSpvZmZfY291bnQgPSBvZl9wcm9wZXJ0eV9jb3VudF91MzJf ZWxlbXMobnAsCi0JCQkJZHB1X3Byb3BbMF0ucHJvcF9uYW1lKTsKLQkJaWYgKCgqb2ZmX2NvdW50 ID4gTUFYX0JMT0NLUykgfHwgKCpvZmZfY291bnQgPCAwKSkgewotCQkJaWYgKGRwdV9wcm9wWzBd LmlzX21hbmRhdG9yeSkgewotCQkJCURQVV9FUlJPUigKLQkJCQkJImludmFsaWQgaHcgb2Zmc2V0 IHByb3AgbmFtZTolcyBjb3VudDogJWRcbiIsCi0JCQkJCWRwdV9wcm9wWzBdLnByb3BfbmFtZSwg Km9mZl9jb3VudCk7Ci0JCQkJcmMgPSAtRUlOVkFMOwotCQkJfQotCQkJKm9mZl9jb3VudCA9IDA7 Ci0JCQltZW1zZXQocHJvcF9jb3VudCwgMCwgc2l6ZW9mKGludCkgKiBwcm9wX3NpemUpOwotCQkJ cmV0dXJuIHJjOwotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHByb3Bfc2l6ZTsgaSsrKSB7 Ci0JCXN3aXRjaCAoZHB1X3Byb3BbaV0udHlwZSkgewotCQljYXNlIFBST1BfVFlQRV9VMzI6Ci0J CQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBkcHVfcHJvcFtpXS5wcm9wX25hbWUsCi0J CQkJJnZhbCk7Ci0JCQlicmVhazsKLQkJY2FzZSBQUk9QX1RZUEVfVTMyX0FSUkFZOgotCQkJcHJv cF9jb3VudFtpXSA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyhucCwKLQkJCQlkcHVfcHJv cFtpXS5wcm9wX25hbWUpOwotCQkJaWYgKHByb3BfY291bnRbaV0gPCAwKQotCQkJCXJjID0gcHJv cF9jb3VudFtpXTsKLQkJCWJyZWFrOwotCQljYXNlIFBST1BfVFlQRV9TVFJJTkdfQVJSQVk6Ci0J CQlwcm9wX2NvdW50W2ldID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhucCwKLQkJCQlkcHVf cHJvcFtpXS5wcm9wX25hbWUpOwotCQkJaWYgKHByb3BfY291bnRbaV0gPCAwKQotCQkJCXJjID0g cHJvcF9jb3VudFtpXTsKLQkJCWJyZWFrOwotCQljYXNlIFBST1BfVFlQRV9CSVRfT0ZGU0VUX0FS UkFZOgotCQkJb2ZfZ2V0X3Byb3BlcnR5KG5wLCBkcHVfcHJvcFtpXS5wcm9wX25hbWUsICZ2YWwp OwotCQkJcHJvcF9jb3VudFtpXSA9IHZhbCAvIChNQVhfQklUX09GRlNFVCAqIHNpemVvZih1MzIp KTsKLQkJCWJyZWFrOwotCQljYXNlIFBST1BfVFlQRV9OT0RFOgotCQkJc25wID0gb2ZfZ2V0X2No aWxkX2J5X25hbWUobnAsCi0JCQkJCWRwdV9wcm9wW2ldLnByb3BfbmFtZSk7Ci0JCQlpZiAoIXNu cCkKLQkJCQlyYyA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCURQVV9ERUJV RygiaW52YWxpZCBwcm9wZXJ0eSB0eXBlOiVkXG4iLAotCQkJCQkJCWRwdV9wcm9wW2ldLnR5cGUp OwotCQkJYnJlYWs7Ci0JCX0KLQkJRFBVX0RFQlVHKAotCQkJInByb3AgaWQ6JWQgcHJvcCBuYW1l OiVzIHByb3AgdHlwZTolZCBwcm9wX2NvdW50OiVkXG4iLAotCQkJaSwgZHB1X3Byb3BbaV0ucHJv cF9uYW1lLAotCQkJZHB1X3Byb3BbaV0udHlwZSwgcHJvcF9jb3VudFtpXSk7Ci0KLQkJaWYgKHJj ICYmIGRwdV9wcm9wW2ldLmlzX21hbmRhdG9yeSAmJgotCQkgICAoKGRwdV9wcm9wW2ldLnR5cGUg PT0gUFJPUF9UWVBFX1UzMikgfHwKLQkJICAgIChkcHVfcHJvcFtpXS50eXBlID09IFBST1BfVFlQ RV9OT0RFKSkpIHsKLQkJCURQVV9FUlJPUigicHJvcDolcyBub3QgcHJlc2VudFxuIiwKLQkJCQkJ CWRwdV9wcm9wW2ldLnByb3BfbmFtZSk7Ci0JCQlnb3RvIGVuZDsKLQkJfSBlbHNlIGlmIChkcHVf cHJvcFtpXS50eXBlID09IFBST1BfVFlQRV9VMzIgfHwKLQkJCWRwdV9wcm9wW2ldLnR5cGUgPT0g UFJPUF9UWVBFX0JPT0wgfHwKLQkJCWRwdV9wcm9wW2ldLnR5cGUgPT0gUFJPUF9UWVBFX05PREUp IHsKLQkJCXJjID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKG9mZl9jb3VudCAmJiAo cHJvcF9jb3VudFtpXSAhPSAqb2ZmX2NvdW50KSAmJgotCQkJCWRwdV9wcm9wW2ldLmlzX21hbmRh dG9yeSkgewotCQkJRFBVX0VSUk9SKAotCQkJCSJwcm9wOiVzIGNvdW50OiVkIGlzIGRpZmZlcmVu dCBjb21wYXJlZCB0byBvZmZzZXQgYXJyYXk6JWRcbiIsCi0JCQkJZHB1X3Byb3BbaV0ucHJvcF9u YW1lLAotCQkJCXByb3BfY291bnRbaV0sICpvZmZfY291bnQpOwotCQkJcmMgPSAtRUlOVkFMOwot CQkJZ290byBlbmQ7Ci0JCX0gZWxzZSBpZiAob2ZmX2NvdW50ICYmIHByb3BfY291bnRbaV0gIT0g Km9mZl9jb3VudCkgewotCQkJRFBVX0RFQlVHKAotCQkJCSJwcm9wOiVzIGNvdW50OiVkIGlzIGRp ZmZlcmVudCBjb21wYXJlZCB0byBvZmZzZXQgYXJyYXk6JWRcbiIsCi0JCQkJZHB1X3Byb3BbaV0u cHJvcF9uYW1lLAotCQkJCXByb3BfY291bnRbaV0sICpvZmZfY291bnQpOwotCQkJcmMgPSAwOwot CQkJcHJvcF9jb3VudFtpXSA9IDA7Ci0JCX0KLQkJaWYgKHByb3BfY291bnRbaV0gPCAwKSB7Ci0J CQlwcm9wX2NvdW50W2ldID0gMDsKLQkJCWlmIChkcHVfcHJvcFtpXS5pc19tYW5kYXRvcnkpIHsK LQkJCQlEUFVfRVJST1IoInByb3A6JXMgY291bnQ6JWQgaXMgbmVnYXRpdmVcbiIsCi0JCQkJCWRw dV9wcm9wW2ldLnByb3BfbmFtZSwgcHJvcF9jb3VudFtpXSk7Ci0JCQkJcmMgPSAtRUlOVkFMOwot CQkJfSBlbHNlIHsKLQkJCQlyYyA9IDA7Ci0JCQkJRFBVX0RFQlVHKCJwcm9wOiVzIGNvdW50OiVk IGlzIG5lZ2F0aXZlXG4iLAotCQkJCQlkcHVfcHJvcFtpXS5wcm9wX25hbWUsIHByb3BfY291bnRb aV0pOwotCQkJfQotCQl9Ci0JfQotCi1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50 IF9yZWFkX2R0X2VudHJ5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0Jc3RydWN0IGRwdV9wcm9w X3R5cGUgKmRwdV9wcm9wLCB1MzIgcHJvcF9zaXplLCBpbnQgKnByb3BfY291bnQsCi0JYm9vbCAq cHJvcF9leGlzdHMsCi0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlKQotewotCWlu dCByYyA9IDAsIGksIGo7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHJvcF9zaXplOyBpKyspIHsKLQkJ cHJvcF9leGlzdHNbaV0gPSB0cnVlOwotCQlzd2l0Y2ggKGRwdV9wcm9wW2ldLnR5cGUpIHsKLQkJ Y2FzZSBQUk9QX1RZUEVfVTMyOgotCQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgZHB1 X3Byb3BbaV0ucHJvcF9uYW1lLAotCQkJCSZQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBp LCAwKSk7Ci0JCQlEUFVfREVCVUcoCi0JCQkJInByb3AgaWQ6JWQgcHJvcCBuYW1lOiVzIHByb3Ag dHlwZTolZCB2YWx1ZToweCV4XG4iLAotCQkJCWksIGRwdV9wcm9wW2ldLnByb3BfbmFtZSwKLQkJ CQlkcHVfcHJvcFtpXS50eXBlLAotCQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIGks IDApKTsKLQkJCWlmIChyYykKLQkJCQlwcm9wX2V4aXN0c1tpXSA9IGZhbHNlOwotCQkJYnJlYWs7 Ci0JCWNhc2UgUFJPUF9UWVBFX0JPT0w6Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVl LCBpLCAwKSA9Ci0JCQkJb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLAotCQkJCQlkcHVfcHJvcFtp XS5wcm9wX25hbWUpOwotCQkJRFBVX0RFQlVHKAotCQkJCSJwcm9wIGlkOiVkIHByb3AgbmFtZTol cyBwcm9wIHR5cGU6JWQgdmFsdWU6MHgleFxuIiwKLQkJCQlpLCBkcHVfcHJvcFtpXS5wcm9wX25h bWUsCi0JCQkJZHB1X3Byb3BbaV0udHlwZSwKLQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3Zh bHVlLCBpLCAwKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQUk9QX1RZUEVfVTMyX0FSUkFZOgotCQkJ cmMgPSBfcGFyc2VfZHRfdTMyX2hhbmRsZXIobnAsIGRwdV9wcm9wW2ldLnByb3BfbmFtZSwKLQkJ CQkmUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgaSwgMCksCi0JCQkJcHJvcF9jb3VudFtp XSwgZHB1X3Byb3BbaV0uaXNfbWFuZGF0b3J5KTsKLQkJCWlmIChyYyAmJiBkcHVfcHJvcFtpXS5p c19tYW5kYXRvcnkpIHsKLQkJCQlEUFVfRVJST1IoCi0JCQkJCSIlcyBwcm9wIHZhbGlkYXRpb24g c3VjY2VzcyBidXQgcmVhZCBmYWlsZWRcbiIsCi0JCQkJCWRwdV9wcm9wW2ldLnByb3BfbmFtZSk7 Ci0JCQkJcHJvcF9leGlzdHNbaV0gPSBmYWxzZTsKLQkJCQlnb3RvIGVuZDsKLQkJCX0gZWxzZSB7 Ci0JCQkJaWYgKHJjKQotCQkJCQlwcm9wX2V4aXN0c1tpXSA9IGZhbHNlOwotCQkJCS8qIG9ubHkg Zm9yIGRlYnVnIHB1cnBvc2UgKi8KLQkJCQlEUFVfREVCVUcoInByb3AgaWQ6JWQgcHJvcCBuYW1l OiVzIHByb3AgdHlwZTolZCIKLQkJCQkJLCBpLCBkcHVfcHJvcFtpXS5wcm9wX25hbWUsCi0JCQkJ CWRwdV9wcm9wW2ldLnR5cGUpOwotCQkJCWZvciAoaiA9IDA7IGogPCBwcm9wX2NvdW50W2ldOyBq KyspCi0JCQkJCURQVV9ERUJVRygiIHZhbHVlWyVkXToweCV4ICIsIGosCi0JCQkJCQlQUk9QX1ZB TFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBpLAotCQkJCQkJCQlqKSk7Ci0JCQkJRFBVX0RFQlVHKCJc biIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUFJPUF9UWVBFX0JJVF9PRkZTRVRfQVJSQVk6 Ci0JCQlyYyA9IF9wYXJzZV9kdF9iaXRfb2Zmc2V0KG5wLCBkcHVfcHJvcFtpXS5wcm9wX25hbWUs Ci0JCQkJcHJvcF92YWx1ZSwgaSwgcHJvcF9jb3VudFtpXSwKLQkJCQlkcHVfcHJvcFtpXS5pc19t YW5kYXRvcnkpOwotCQkJaWYgKHJjICYmIGRwdV9wcm9wW2ldLmlzX21hbmRhdG9yeSkgewotCQkJ CURQVV9FUlJPUigKLQkJCQkJIiVzIHByb3AgdmFsaWRhdGlvbiBzdWNjZXNzIGJ1dCByZWFkIGZh aWxlZFxuIiwKLQkJCQkJZHB1X3Byb3BbaV0ucHJvcF9uYW1lKTsKLQkJCQlwcm9wX2V4aXN0c1tp XSA9IGZhbHNlOwotCQkJCWdvdG8gZW5kOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocmMpCi0JCQkJ CXByb3BfZXhpc3RzW2ldID0gZmFsc2U7Ci0JCQkJRFBVX0RFQlVHKAotCQkJCQkicHJvcCBpZDol ZCBwcm9wIG5hbWU6JXMgcHJvcCB0eXBlOiVkIiwKLQkJCQkJaSwgZHB1X3Byb3BbaV0ucHJvcF9u YW1lLAotCQkJCQlkcHVfcHJvcFtpXS50eXBlKTsKLQkJCQlmb3IgKGogPSAwOyBqIDwgcHJvcF9j b3VudFtpXTsgaisrKQotCQkJCQlEUFVfREVCVUcoCi0JCQkJCSJjb3VudFslZF06IGJpdDoweCV4 IG9mZjoweCV4XG4iLCBqLAotCQkJCQlQUk9QX0JJVFZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAot CQkJCQkJaSwgaiwgMCksCi0JCQkJCVBST1BfQklUVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0J CQkJCQlpLCBqLCAxKSk7Ci0JCQkJRFBVX0RFQlVHKCJcbiIpOwotCQkJfQotCQkJYnJlYWs7Ci0J CWNhc2UgUFJPUF9UWVBFX05PREU6Ci0JCQkvKiBOb2RlIHdpbGwgYmUgcGFyc2VkIGluIGNhbGxp bmcgZnVuY3Rpb24gKi8KLQkJCXJjID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJRFBV X0RFQlVHKCJpbnZhbGlkIHByb3BlcnR5IHR5cGU6JWRcbiIsCi0JCQkJCQkJZHB1X3Byb3BbaV0u dHlwZSk7Ci0JCQlicmVhazsKLQkJfQotCQlyYyA9IDA7Ci0JfQotCi1lbmQ6Ci0JcmV0dXJuIHJj OwotfQotCi1zdGF0aWMgdm9pZCBfZHB1X3NzcHBfc2V0dXBfdmlnKHN0cnVjdCBkcHVfbWRzc19j ZmcgKmRwdV9jZmcsCi0Jc3RydWN0IGRwdV9zc3BwX2NmZyAqc3NwcCwgc3RydWN0IGRwdV9zc3Bw X3N1Yl9ibGtzICpzYmxrLAotCWJvb2wgKnByb3BfZXhpc3RzLCBzdHJ1Y3QgZHB1X3Byb3BfdmFs dWUgKnByb3BfdmFsdWUsIHUzMiAqdmlnX2NvdW50KQotewotCXNibGstPm1heHVwc2NhbGUgPSBN QVhfVVBTQ0FMRV9SQVRJTzsKLQlzYmxrLT5tYXhkd25zY2FsZSA9IE1BWF9ET1dOU0NBTEVfUkFU SU87Ci0Jc3NwcC0+aWQgPSBTU1BQX1ZJRzAgKyAqdmlnX2NvdW50OwotCXNucHJpbnRmKHNzcHAt Pm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4sICJzc3BwXyV1IiwKLQkJCXNzcHAtPmlkIC0gU1NQ UF9WSUcwKTsKLQlzc3BwLT5jbGtfY3RybCA9IERQVV9DTEtfQ1RSTF9WSUcwICsgKnZpZ19jb3Vu dDsKLQlzc3BwLT50eXBlID0gU1NQUF9UWVBFX1ZJRzsKLQlzZXRfYml0KERQVV9TU1BQX1FPUywg JnNzcHAtPmZlYXR1cmVzKTsKLQlpZiAoZHB1X2NmZy0+dmJpZl9xb3Nfbmx2bCA9PSA4KQotCQlz ZXRfYml0KERQVV9TU1BQX1FPU184TFZMLCAmc3NwcC0+ZmVhdHVyZXMpOwotCSgqdmlnX2NvdW50 KSsrOwotCi0JaWYgKCFwcm9wX3ZhbHVlKQotCQlyZXR1cm47Ci0KLQlpZiAoZHB1X2NmZy0+cXNl ZWRfdHlwZSA9PSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQyKSB7Ci0JCXNldF9iaXQoRFBVX1NTUFBf U0NBTEVSX1FTRUVEMiwgJnNzcHAtPmZlYXR1cmVzKTsKLQkJc2Jsay0+c2NhbGVyX2Jsay5pZCA9 IERQVV9TU1BQX1NDQUxFUl9RU0VFRDI7Ci0JCXNibGstPnNjYWxlcl9ibGsuYmFzZSA9IFBST1Bf VkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlWSUdfUVNFRURfT0ZGLCAwKTsKLQkJc2Jsay0+ c2NhbGVyX2Jsay5sZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJVklHX1FT RUVEX0xFTiwgMCk7Ci0JCXNucHJpbnRmKHNibGstPnNjYWxlcl9ibGsubmFtZSwgRFBVX0hXX0JM S19OQU1FX0xFTiwKLQkJCQkic3NwcF9zY2FsZXIldSIsIHNzcHAtPmlkIC0gU1NQUF9WSUcwKTsK LQl9IGVsc2UgaWYgKGRwdV9jZmctPnFzZWVkX3R5cGUgPT0gRFBVX1NTUFBfU0NBTEVSX1FTRUVE MykgewotCQlzZXRfYml0KERQVV9TU1BQX1NDQUxFUl9RU0VFRDMsICZzc3BwLT5mZWF0dXJlcyk7 Ci0JCXNibGstPnNjYWxlcl9ibGsuaWQgPSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzOwotCQlzYmxr LT5zY2FsZXJfYmxrLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJVklH X1FTRUVEX09GRiwgMCk7Ci0JCXNibGstPnNjYWxlcl9ibGsubGVuID0gUFJPUF9WQUxVRV9BQ0NF U1MocHJvcF92YWx1ZSwKLQkJCVZJR19RU0VFRF9MRU4sIDApOwotCQlzbnByaW50ZihzYmxrLT5z Y2FsZXJfYmxrLm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4sCi0JCQkic3NwcF9zY2FsZXIldSIs IHNzcHAtPmlkIC0gU1NQUF9WSUcwKTsKLQl9Ci0KLQlzYmxrLT5jc2NfYmxrLmlkID0gRFBVX1NT UFBfQ1NDOwotCXNucHJpbnRmKHNibGstPmNzY19ibGsubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xF TiwKLQkJCSJzc3BwX2NzYyV1Iiwgc3NwcC0+aWQgLSBTU1BQX1ZJRzApOwotCWlmIChkcHVfY2Zn LT5jc2NfdHlwZSA9PSBEUFVfU1NQUF9DU0MpIHsKLQkJc2V0X2JpdChEUFVfU1NQUF9DU0MsICZz c3BwLT5mZWF0dXJlcyk7Ci0JCXNibGstPmNzY19ibGsuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNT KHByb3BfdmFsdWUsCi0JCQkJCQkJVklHX0NTQ19PRkYsIDApOwotCX0gZWxzZSBpZiAoZHB1X2Nm Zy0+Y3NjX3R5cGUgPT0gRFBVX1NTUFBfQ1NDXzEwQklUKSB7Ci0JCXNldF9iaXQoRFBVX1NTUFBf Q1NDXzEwQklULCAmc3NwcC0+ZmVhdHVyZXMpOwotCQlzYmxrLT5jc2NfYmxrLmJhc2UgPSBQUk9Q X1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJCQkJCVZJR19DU0NfT0ZGLCAwKTsKLQl9Ci0K LQlzYmxrLT5oc2ljX2Jsay5pZCA9IERQVV9TU1BQX0hTSUM7Ci0Jc25wcmludGYoc2Jsay0+aHNp Y19ibGsubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwKLQkJCSJzc3BwX2hzaWMldSIsIHNzcHAt PmlkIC0gU1NQUF9WSUcwKTsKLQlpZiAocHJvcF9leGlzdHNbVklHX0hTSUNfUFJPUF0pIHsKLQkJ c2Jsay0+aHNpY19ibGsuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlW SUdfSFNJQ19QUk9QLCAwKTsKLQkJc2Jsay0+aHNpY19ibGsudmVyc2lvbiA9IFBST1BfVkFMVUVf QUNDRVNTKHByb3BfdmFsdWUsCi0JCQlWSUdfSFNJQ19QUk9QLCAxKTsKLQkJc2Jsay0+aHNpY19i bGsubGVuID0gMDsKLQkJc2V0X2JpdChEUFVfU1NQUF9IU0lDLCAmc3NwcC0+ZmVhdHVyZXMpOwot CX0KLQotCXNibGstPm1lbWNvbG9yX2Jsay5pZCA9IERQVV9TU1BQX01FTUNPTE9SOwotCXNucHJp bnRmKHNibGstPm1lbWNvbG9yX2Jsay5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLAotCQkJInNz cHBfbWVtY29sb3IldSIsIHNzcHAtPmlkIC0gU1NQUF9WSUcwKTsKLQlpZiAocHJvcF9leGlzdHNb VklHX01FTUNPTE9SX1BST1BdKSB7Ci0JCXNibGstPm1lbWNvbG9yX2Jsay5iYXNlID0gUFJPUF9W QUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCVZJR19NRU1DT0xPUl9QUk9QLCAwKTsKLQkJc2Js ay0+bWVtY29sb3JfYmxrLnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAot CQkJVklHX01FTUNPTE9SX1BST1AsIDEpOwotCQlzYmxrLT5tZW1jb2xvcl9ibGsubGVuID0gMDsK LQkJc2V0X2JpdChEUFVfU1NQUF9NRU1DT0xPUiwgJnNzcHAtPmZlYXR1cmVzKTsKLQl9Ci0KLQlz YmxrLT5wY2NfYmxrLmlkID0gRFBVX1NTUFBfUENDOwotCXNucHJpbnRmKHNibGstPnBjY19ibGsu bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwKLQkJCSJzc3BwX3BjYyV1Iiwgc3NwcC0+aWQgLSBT U1BQX1ZJRzApOwotCWlmIChwcm9wX2V4aXN0c1tWSUdfUENDX1BST1BdKSB7Ci0JCXNibGstPnBj Y19ibGsuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlWSUdfUENDX1BS T1AsIDApOwotCQlzYmxrLT5wY2NfYmxrLnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9w X3ZhbHVlLAotCQkJVklHX1BDQ19QUk9QLCAxKTsKLQkJc2Jsay0+cGNjX2Jsay5sZW4gPSAwOwot CQlzZXRfYml0KERQVV9TU1BQX1BDQywgJnNzcHAtPmZlYXR1cmVzKTsKLQl9Ci0KLQlzYmxrLT5m b3JtYXRfbGlzdCA9IGRwdV9jZmctPnZpZ19mb3JtYXRzOwotCXNibGstPnZpcnRfZm9ybWF0X2xp c3QgPSBkcHVfY2ZnLT5kbWFfZm9ybWF0czsKLX0KLQotc3RhdGljIHZvaWQgX2RwdV9zc3BwX3Nl dHVwX3JnYihzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnLAotCXN0cnVjdCBkcHVfc3NwcF9j ZmcgKnNzcHAsIHN0cnVjdCBkcHVfc3NwcF9zdWJfYmxrcyAqc2JsaywKLQlib29sICpwcm9wX2V4 aXN0cywgc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlLCB1MzIgKnJnYl9jb3VudCkK LXsKLQlzYmxrLT5tYXh1cHNjYWxlID0gTUFYX1VQU0NBTEVfUkFUSU87Ci0Jc2Jsay0+bWF4ZHdu c2NhbGUgPSBNQVhfRE9XTlNDQUxFX1JBVElPOwotCXNzcHAtPmlkID0gU1NQUF9SR0IwICsgKnJn Yl9jb3VudDsKLQlzbnByaW50Zihzc3BwLT5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAic3Nw cF8ldSIsCi0JCQlzc3BwLT5pZCAtIFNTUFBfVklHMCk7Ci0Jc3NwcC0+Y2xrX2N0cmwgPSBEUFVf Q0xLX0NUUkxfUkdCMCArICpyZ2JfY291bnQ7Ci0Jc3NwcC0+dHlwZSA9IFNTUFBfVFlQRV9SR0I7 Ci0Jc2V0X2JpdChEUFVfU1NQUF9RT1MsICZzc3BwLT5mZWF0dXJlcyk7Ci0JaWYgKGRwdV9jZmct PnZiaWZfcW9zX25sdmwgPT0gOCkKLQkJc2V0X2JpdChEUFVfU1NQUF9RT1NfOExWTCwgJnNzcHAt PmZlYXR1cmVzKTsKLQkoKnJnYl9jb3VudCkrKzsKLQotCWlmICghcHJvcF92YWx1ZSkKLQkJcmV0 dXJuOwotCi0JaWYgKGRwdV9jZmctPnFzZWVkX3R5cGUgPT0gRFBVX1NTUFBfU0NBTEVSX1FTRUVE MikgewotCQlzZXRfYml0KERQVV9TU1BQX1NDQUxFUl9SR0IsICZzc3BwLT5mZWF0dXJlcyk7Ci0J CXNibGstPnNjYWxlcl9ibGsuaWQgPSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQyOwotCQlzYmxrLT5z Y2FsZXJfYmxrLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJUkdCX1ND QUxFUl9PRkYsIDApOwotCQlzYmxrLT5zY2FsZXJfYmxrLmxlbiA9IFBST1BfVkFMVUVfQUNDRVNT KHByb3BfdmFsdWUsCi0JCQlSR0JfU0NBTEVSX0xFTiwgMCk7Ci0JCXNucHJpbnRmKHNibGstPnNj YWxlcl9ibGsubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwKLQkJCSJzc3BwX3NjYWxlciV1Iiwg c3NwcC0+aWQgLSBTU1BQX1ZJRzApOwotCX0gZWxzZSBpZiAoZHB1X2NmZy0+cXNlZWRfdHlwZSA9 PSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzKSB7Ci0JCXNldF9iaXQoRFBVX1NTUFBfU0NBTEVSX1JH QiwgJnNzcHAtPmZlYXR1cmVzKTsKLQkJc2Jsay0+c2NhbGVyX2Jsay5pZCA9IERQVV9TU1BQX1ND QUxFUl9RU0VFRDM7Ci0JCXNibGstPnNjYWxlcl9ibGsuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNT KHByb3BfdmFsdWUsCi0JCQlSR0JfU0NBTEVSX0xFTiwgMCk7Ci0JCXNibGstPnNjYWxlcl9ibGsu bGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCVNTUFBfU0NBTEVfU0laRSwg MCk7Ci0JCXNucHJpbnRmKHNibGstPnNjYWxlcl9ibGsubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xF TiwKLQkJCSJzc3BwX3NjYWxlciV1Iiwgc3NwcC0+aWQgLSBTU1BQX1ZJRzApOwotCX0KLQotCXNi bGstPnBjY19ibGsuaWQgPSBEUFVfU1NQUF9QQ0M7Ci0JaWYgKHByb3BfZXhpc3RzW1JHQl9QQ0Nf UFJPUF0pIHsKLQkJc2Jsay0+cGNjX2Jsay5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92 YWx1ZSwKLQkJCVJHQl9QQ0NfUFJPUCwgMCk7Ci0JCXNibGstPnBjY19ibGsudmVyc2lvbiA9IFBS T1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlSR0JfUENDX1BST1AsIDEpOwotCQlzYmxr LT5wY2NfYmxrLmxlbiA9IDA7Ci0JCXNldF9iaXQoRFBVX1NTUFBfUENDLCAmc3NwcC0+ZmVhdHVy ZXMpOwotCX0KLQotCXNibGstPmZvcm1hdF9saXN0ID0gZHB1X2NmZy0+ZG1hX2Zvcm1hdHM7Ci0J c2Jsay0+dmlydF9mb3JtYXRfbGlzdCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9kcHVfc3Nw cF9zZXR1cF9jdXJzb3Ioc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZywKLQlzdHJ1Y3QgZHB1 X3NzcHBfY2ZnICpzc3BwLCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3MgKnNibGssCi0Jc3RydWN0 IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlLCB1MzIgKmN1cnNvcl9jb3VudCkKLXsKLQlpZiAo IUlTX0RQVV9NQUpPUl9NSU5PUl9TQU1FKGRwdV9jZmctPmh3dmVyc2lvbiwgRFBVX0hXX1ZFUl8z MDApKQotCQlEUFVfRVJST1IoImludmFsaWQgc3NwcCB0eXBlICVkLCB4aW4gaWQgJWRcbiIsCi0J CQkJc3NwcC0+dHlwZSwgc3NwcC0+eGluX2lkKTsKLQlzZXRfYml0KERQVV9TU1BQX0NVUlNPUiwg JnNzcHAtPmZlYXR1cmVzKTsKLQlzYmxrLT5tYXh1cHNjYWxlID0gU1NQUF9VTklUWV9TQ0FMRTsK LQlzYmxrLT5tYXhkd25zY2FsZSA9IFNTUFBfVU5JVFlfU0NBTEU7Ci0Jc2Jsay0+Zm9ybWF0X2xp c3QgPSBkcHVfY2ZnLT5jdXJzb3JfZm9ybWF0czsKLQlzYmxrLT52aXJ0X2Zvcm1hdF9saXN0ID0g TlVMTDsKLQlzc3BwLT5pZCA9IFNTUFBfQ1VSU09SMCArICpjdXJzb3JfY291bnQ7Ci0Jc25wcmlu dGYoc3NwcC0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgInNzcHBfJXUiLAotCQkJc3NwcC0+ aWQgLSBTU1BQX1ZJRzApOwotCXNzcHAtPmNsa19jdHJsID0gRFBVX0NMS19DVFJMX0NVUlNPUjAg KyAqY3Vyc29yX2NvdW50OwotCXNzcHAtPnR5cGUgPSBTU1BQX1RZUEVfQ1VSU09SOwotCSgqY3Vy c29yX2NvdW50KSsrOwotfQotCi1zdGF0aWMgdm9pZCBfZHB1X3NzcHBfc2V0dXBfZG1hKHN0cnVj dCBkcHVfbWRzc19jZmcgKmRwdV9jZmcsCi0Jc3RydWN0IGRwdV9zc3BwX2NmZyAqc3NwcCwgc3Ry dWN0IGRwdV9zc3BwX3N1Yl9ibGtzICpzYmxrLAotCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJv cF92YWx1ZSwgdTMyICpkbWFfY291bnQpCi17Ci0Jc2Jsay0+bWF4dXBzY2FsZSA9IFNTUFBfVU5J VFlfU0NBTEU7Ci0Jc2Jsay0+bWF4ZHduc2NhbGUgPSBTU1BQX1VOSVRZX1NDQUxFOwotCXNibGst PmZvcm1hdF9saXN0ID0gZHB1X2NmZy0+ZG1hX2Zvcm1hdHM7Ci0Jc2Jsay0+dmlydF9mb3JtYXRf bGlzdCA9IGRwdV9jZmctPmRtYV9mb3JtYXRzOwotCXNzcHAtPmlkID0gU1NQUF9ETUEwICsgKmRt YV9jb3VudDsKLQlzc3BwLT5jbGtfY3RybCA9IERQVV9DTEtfQ1RSTF9ETUEwICsgKmRtYV9jb3Vu dDsKLQlzbnByaW50Zihzc3BwLT5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAic3NwcF8ldSIs Ci0JCQlzc3BwLT5pZCAtIFNTUFBfVklHMCk7Ci0Jc3NwcC0+dHlwZSA9IFNTUFBfVFlQRV9ETUE7 Ci0Jc2V0X2JpdChEUFVfU1NQUF9RT1MsICZzc3BwLT5mZWF0dXJlcyk7Ci0JaWYgKGRwdV9jZmct PnZiaWZfcW9zX25sdmwgPT0gOCkKLQkJc2V0X2JpdChEUFVfU1NQUF9RT1NfOExWTCwgJnNzcHAt PmZlYXR1cmVzKTsKLQkoKmRtYV9jb3VudCkrKzsKLX0KLQotc3RhdGljIGludCBkcHVfc3NwcF9w YXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCXN0cnVjdCBkcHVfbWRzc19jZmcgKmRw dV9jZmcpCi17Ci0JaW50IHJjLCBwcm9wX2NvdW50W1NTUFBfUFJPUF9NQVhdLCBvZmZfY291bnQs IGksIGo7Ci0JaW50IHZpZ19wcm9wX2NvdW50W1ZJR19QUk9QX01BWF0sIHJnYl9wcm9wX2NvdW50 W1JHQl9QUk9QX01BWF07Ci0JYm9vbCBwcm9wX2V4aXN0c1tTU1BQX1BST1BfTUFYXSwgdmlnX3By b3BfZXhpc3RzW1ZJR19QUk9QX01BWF07Ci0JYm9vbCByZ2JfcHJvcF9leGlzdHNbUkdCX1BST1Bf TUFYXTsKLQlzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUgKnByb3BfdmFsdWUgPSBOVUxMOwotCXN0cnVj dCBkcHVfcHJvcF92YWx1ZSAqdmlnX3Byb3BfdmFsdWUgPSBOVUxMLCAqcmdiX3Byb3BfdmFsdWUg PSBOVUxMOwotCWNvbnN0IGNoYXIgKnR5cGU7Ci0Jc3RydWN0IGRwdV9zc3BwX2NmZyAqc3NwcDsK LQlzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3MgKnNibGs7Ci0JdTMyIHZpZ19jb3VudCA9IDAsIGRt YV9jb3VudCA9IDAsIHJnYl9jb3VudCA9IDAsIGN1cnNvcl9jb3VudCA9IDA7Ci0Jc3RydWN0IGRl dmljZV9ub2RlICpzbnAgPSBOVUxMOwotCi0JcHJvcF92YWx1ZSA9IGtjYWxsb2MoU1NQUF9QUk9Q X01BWCwKLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKLQlp ZiAoIXByb3BfdmFsdWUpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQly YyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgc3NwcF9wcm9wLCBBUlJBWV9TSVpFKHNzcHBfcHJv cCksCi0JCXByb3BfY291bnQsICZvZmZfY291bnQpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0K LQlyYyA9IF9yZWFkX2R0X2VudHJ5KG5wLCBzc3BwX3Byb3AsIEFSUkFZX1NJWkUoc3NwcF9wcm9w KSwgcHJvcF9jb3VudCwKLQkJCQkJcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwotCWlmIChyYykK LQkJZ290byBlbmQ7Ci0KLQlkcHVfY2ZnLT5zc3BwX2NvdW50ID0gb2ZmX2NvdW50OwotCi0JLyog Z2V0IHZpZyBmZWF0dXJlIGR0IHByb3BlcnRpZXMgaWYgdGhleSBleGlzdCAqLwotCXNucCA9IG9m X2dldF9jaGlsZF9ieV9uYW1lKG5wLCBzc3BwX3Byb3BbU1NQUF9WSUdfQkxPQ0tTXS5wcm9wX25h bWUpOwotCWlmIChzbnApIHsKLQkJdmlnX3Byb3BfdmFsdWUgPSBrY2FsbG9jKFZJR19QUk9QX01B WCwKLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKLQkJaWYg KCF2aWdfcHJvcF92YWx1ZSkgewotCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBlbmQ7Ci0JCX0K LQkJcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkoc25wLCB2aWdfcHJvcCwgQVJSQVlfU0laRSh2aWdf cHJvcCksCi0JCQl2aWdfcHJvcF9jb3VudCwgTlVMTCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gZW5k OwotCQlyYyA9IF9yZWFkX2R0X2VudHJ5KHNucCwgdmlnX3Byb3AsIEFSUkFZX1NJWkUodmlnX3By b3ApLAotCQkJCXZpZ19wcm9wX2NvdW50LCB2aWdfcHJvcF9leGlzdHMsCi0JCQkJdmlnX3Byb3Bf dmFsdWUpOwotCX0KLQotCS8qIGdldCByZ2IgZmVhdHVyZSBkdCBwcm9wZXJ0aWVzIGlmIHRoZXkg ZXhpc3QgKi8KLQlzbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgc3NwcF9wcm9wW1NTUFBf UkdCX0JMT0NLU10ucHJvcF9uYW1lKTsKLQlpZiAoc25wKSB7Ci0JCXJnYl9wcm9wX3ZhbHVlID0g a2NhbGxvYyhSR0JfUFJPUF9NQVgsCi0JCQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUp LAotCQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKCFyZ2JfcHJvcF92YWx1ZSkgewotCQkJcmMgPSAt RU5PTUVNOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkoc25w LCByZ2JfcHJvcCwgQVJSQVlfU0laRShyZ2JfcHJvcCksCi0JCQlyZ2JfcHJvcF9jb3VudCwgTlVM TCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gZW5kOwotCQlyYyA9IF9yZWFkX2R0X2VudHJ5KHNucCwg cmdiX3Byb3AsIEFSUkFZX1NJWkUocmdiX3Byb3ApLAotCQkJCXJnYl9wcm9wX2NvdW50LCByZ2Jf cHJvcF9leGlzdHMsCi0JCQkJcmdiX3Byb3BfdmFsdWUpOwotCX0KLQotCWZvciAoaSA9IDA7IGkg PCBvZmZfY291bnQ7IGkrKykgewotCQlzc3BwID0gZHB1X2NmZy0+c3NwcCArIGk7Ci0JCXNibGsg PSBremFsbG9jKHNpemVvZigqc2JsayksIEdGUF9LRVJORUwpOwotCQlpZiAoIXNibGspIHsKLQkJ CXJjID0gLUVOT01FTTsKLQkJCS8qIGNhdGFsb2cgZGVpbml0IHdpbGwgcmVsZWFzZSB0aGUgYWxs b2NhdGVkIGJsb2NrcyAqLwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJc3NwcC0+c2JsayA9IHNibGs7 Ci0KLQkJc3NwcC0+YmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFNTUFBfT0ZG LCBpKTsKLQkJc3NwcC0+bGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgU1NQUF9T SVpFLCAwKTsKLQkJc2Jsay0+bWF4bGluZXdpZHRoID0gZHB1X2NmZy0+bWF4X3NzcHBfbGluZXdp ZHRoOwotCi0JCXNldF9iaXQoRFBVX1NTUFBfU1JDLCAmc3NwcC0+ZmVhdHVyZXMpOwotCi0JCWlm IChkcHVfY2ZnLT5oYXNfY2RwKQotCQkJc2V0X2JpdChEUFVfU1NQUF9DRFAsICZzc3BwLT5mZWF0 dXJlcyk7Ci0KLQkJaWYgKGRwdV9jZmctPnRzX3ByZWZpbGxfcmV2ID09IDEpIHsKLQkJCXNldF9i aXQoRFBVX1NTUFBfVFNfUFJFRklMTCwgJnNzcHAtPmZlYXR1cmVzKTsKLQkJfSBlbHNlIGlmIChk cHVfY2ZnLT50c19wcmVmaWxsX3JldiA9PSAyKSB7Ci0JCQlzZXRfYml0KERQVV9TU1BQX1RTX1BS RUZJTEwsICZzc3BwLT5mZWF0dXJlcyk7Ci0JCQlzZXRfYml0KERQVV9TU1BQX1RTX1BSRUZJTExf UkVDMSwgJnNzcHAtPmZlYXR1cmVzKTsKLQkJfQotCi0JCXNibGstPnNtYXJ0X2RtYV9wcmlvcml0 eSA9Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBTU1BQX1NNQVJUX0RNQSwgaSk7 Ci0KLQkJaWYgKHNibGstPnNtYXJ0X2RtYV9wcmlvcml0eSAmJiBkcHVfY2ZnLT5zbWFydF9kbWFf cmV2KQotCQkJc2V0X2JpdChkcHVfY2ZnLT5zbWFydF9kbWFfcmV2LCAmc3NwcC0+ZmVhdHVyZXMp OwotCi0JCXNibGstPnNyY19ibGsuaWQgPSBEUFVfU1NQUF9TUkM7Ci0KLQkJb2ZfcHJvcGVydHlf cmVhZF9zdHJpbmdfaW5kZXgobnAsCi0JCQkJc3NwcF9wcm9wW1NTUFBfVFlQRV0ucHJvcF9uYW1l LCBpLCAmdHlwZSk7Ci0JCWlmICghc3RyY21wKHR5cGUsICJ2aWciKSkgewotCQkJX2RwdV9zc3Bw X3NldHVwX3ZpZyhkcHVfY2ZnLCBzc3BwLCBzYmxrLAotCQkJCXZpZ19wcm9wX2V4aXN0cywgdmln X3Byb3BfdmFsdWUsICZ2aWdfY291bnQpOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgInJn YiIpKSB7Ci0JCQlfZHB1X3NzcHBfc2V0dXBfcmdiKGRwdV9jZmcsIHNzcHAsIHNibGssCi0JCQkJ cmdiX3Byb3BfZXhpc3RzLCByZ2JfcHJvcF92YWx1ZSwgJnJnYl9jb3VudCk7Ci0JCX0gZWxzZSBp ZiAoIXN0cmNtcCh0eXBlLCAiY3Vyc29yIikpIHsKLQkJCS8qIE5vIHByb3AgdmFsdWVzIGZvciBj dXJzb3IgcGlwZXMgKi8KLQkJCV9kcHVfc3NwcF9zZXR1cF9jdXJzb3IoZHB1X2NmZywgc3NwcCwg c2JsaywgTlVMTCwKLQkJCQkJCQkJJmN1cnNvcl9jb3VudCk7Ci0JCX0gZWxzZSBpZiAoIXN0cmNt cCh0eXBlLCAiZG1hIikpIHsKLQkJCS8qIE5vIHByb3AgdmFsdWVzIGZvciBETUEgcGlwZXMgKi8K LQkJCV9kcHVfc3NwcF9zZXR1cF9kbWEoZHB1X2NmZywgc3NwcCwgc2JsaywgTlVMTCwKLQkJCQkJ CQkJJmRtYV9jb3VudCk7Ci0JCX0gZWxzZSB7Ci0JCQlEUFVfRVJST1IoImludmFsaWQgc3NwcCB0 eXBlOiVzXG4iLCB0eXBlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gZW5kOwotCQl9Ci0K LQkJc25wcmludGYoc2Jsay0+c3JjX2Jsay5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAic3Nw cF9zcmNfJXUiLAotCQkJCXNzcHAtPmlkIC0gU1NQUF9WSUcwKTsKLQotCQlpZiAoc3NwcC0+Y2xr X2N0cmwgPj0gRFBVX0NMS19DVFJMX01BWCkgewotCQkJRFBVX0VSUk9SKCIlczogaW52YWxpZCBj bGsgY3RybDogJWRcbiIsCi0JCQkJCXNibGstPnNyY19ibGsubmFtZSwgc3NwcC0+Y2xrX2N0cmwp OwotCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBlbmQ7Ci0JCX0KLQotCQlzYmxrLT5tYXhoZGVj aWV4cCA9IE1BWF9IT1JaX0RFQ0lNQVRJT047Ci0JCXNibGstPm1heHZkZWNpZXhwID0gTUFYX1ZF UlRfREVDSU1BVElPTjsKLQotCQlzc3BwLT54aW5faWQgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9w X3ZhbHVlLCBTU1BQX1hJTiwgaSk7Ci0JCXNibGstPnBpeGVsX3JhbV9zaXplID0gREVGQVVMVF9Q SVhFTF9SQU1fU0laRTsKLQkJc2Jsay0+c3JjX2Jsay5sZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhw cm9wX3ZhbHVlLCBTU1BQX1NJWkUsIDApOwotCi0JCWlmIChQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9w X3ZhbHVlLCBTU1BQX0VYQ0xfUkVDVCwgaSkgPT0gMSkKLQkJCXNldF9iaXQoRFBVX1NTUFBfRVhD TF9SRUNULCAmc3NwcC0+ZmVhdHVyZXMpOwotCi0JCWlmIChwcm9wX2V4aXN0c1tTU1BQX01BWF9Q RVJfUElQRV9CV10pCi0JCQlzYmxrLT5tYXhfcGVyX3BpcGVfYncgPSBQUk9QX1ZBTFVFX0FDQ0VT Uyhwcm9wX3ZhbHVlLAotCQkJCQlTU1BQX01BWF9QRVJfUElQRV9CVywgaSk7Ci0JCWVsc2UKLQkJ CXNibGstPm1heF9wZXJfcGlwZV9idyA9IERFRkFVTFRfTUFYX1BFUl9QSVBFX0JXOwotCi0JCWZv ciAoaiA9IDA7IGogPCBkcHVfY2ZnLT5tZHBfY291bnQ7IGorKykgewotCQkJZHB1X2NmZy0+bWRw W2pdLmNsa19jdHJsc1tzc3BwLT5jbGtfY3RybF0ucmVnX29mZiA9Ci0JCQkJUFJPUF9CSVRWQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCQkJCVNTUFBfQ0xLX0NUUkwsIGksIDApOwotCQkJZHB1 X2NmZy0+bWRwW2pdLmNsa19jdHJsc1tzc3BwLT5jbGtfY3RybF0uYml0X29mZiA9Ci0JCQkJUFJP UF9CSVRWQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCQkJCVNTUFBfQ0xLX0NUUkwsIGksIDEp OwotCQl9Ci0KLQkJRFBVX0RFQlVHKAotCQkJInhpbjolZCByYW06JWQgY2xrJWQ6JXgvJWRcbiIs Ci0JCQlzc3BwLT54aW5faWQsCi0JCQlzYmxrLT5waXhlbF9yYW1fc2l6ZSwKLQkJCXNzcHAtPmNs a19jdHJsLAotCQkJZHB1X2NmZy0+bWRwWzBdLmNsa19jdHJsc1tzc3BwLT5jbGtfY3RybF0ucmVn X29mZiwKLQkJCWRwdV9jZmctPm1kcFswXS5jbGtfY3RybHNbc3NwcC0+Y2xrX2N0cmxdLmJpdF9v ZmYpOwotCX0KLQotZW5kOgotCWtmcmVlKHByb3BfdmFsdWUpOwotCWtmcmVlKHZpZ19wcm9wX3Zh bHVlKTsKLQlrZnJlZShyZ2JfcHJvcF92YWx1ZSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IGRwdV9jdGxfcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJc3RydWN0IGRw dV9tZHNzX2NmZyAqZHB1X2NmZykKLXsKLQlpbnQgcmMsIHByb3BfY291bnRbSFdfUFJPUF9NQVhd LCBpOwotCWJvb2wgcHJvcF9leGlzdHNbSFdfUFJPUF9NQVhdOwotCXN0cnVjdCBkcHVfcHJvcF92 YWx1ZSAqcHJvcF92YWx1ZSA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9jdGxfY2ZnICpjdGw7Ci0JdTMy IG9mZl9jb3VudDsKLQotCWlmICghZHB1X2NmZykgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJn dW1lbnQgaW5wdXQgcGFyYW1cbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0K LQotCXByb3BfdmFsdWUgPSBremFsbG9jKEhXX1BST1BfTUFYICoKLQkJCXNpemVvZihzdHJ1Y3Qg ZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3BfdmFsdWUpIHsKLQkJcmMg PSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShu cCwgY3RsX3Byb3AsIEFSUkFZX1NJWkUoY3RsX3Byb3ApLCBwcm9wX2NvdW50LAotCQkmb2ZmX2Nv dW50KTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JZHB1X2NmZy0+Y3RsX2NvdW50ID0gb2Zm X2NvdW50OwotCi0JcmMgPSBfcmVhZF9kdF9lbnRyeShucCwgY3RsX3Byb3AsIEFSUkFZX1NJWkUo Y3RsX3Byb3ApLCBwcm9wX2NvdW50LAotCQlwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Ci0JaWYg KHJjKQotCQlnb3RvIGVuZDsKLQotCWZvciAoaSA9IDA7IGkgPCBvZmZfY291bnQ7IGkrKykgewot CQljdGwgPSBkcHVfY2ZnLT5jdGwgKyBpOwotCQljdGwtPmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VT Uyhwcm9wX3ZhbHVlLCBIV19PRkYsIGkpOwotCQljdGwtPmxlbiA9IFBST1BfVkFMVUVfQUNDRVNT KHByb3BfdmFsdWUsIEhXX0xFTiwgMCk7Ci0JCWN0bC0+aWQgPSBDVExfMCArIGk7Ci0JCXNucHJp bnRmKGN0bC0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgImN0bF8ldSIsCi0JCQkJY3RsLT5p ZCAtIENUTF8wKTsKLQotCQlpZiAoaSA8IE1BWF9TUExJVF9ESVNQTEFZX0NUTCkKLQkJCXNldF9i aXQoRFBVX0NUTF9TUExJVF9ESVNQTEFZLCAmY3RsLT5mZWF0dXJlcyk7Ci0JCWlmIChpIDwgTUFY X1BQX1NQTElUX0RJU1BMQVlfQ1RMKQotCQkJc2V0X2JpdChEUFVfQ1RMX1BJTkdQT05HX1NQTElU LCAmY3RsLT5mZWF0dXJlcyk7Ci0JfQotCi1lbmQ6Ci0Ja2ZyZWUocHJvcF92YWx1ZSk7Ci0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV9taXhlcl9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNl X25vZGUgKm5wLAotCQkJCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKLXsKLQlpbnQg cmMsIHByb3BfY291bnRbTUlYRVJfUFJPUF9NQVhdLCBpLCBqOwotCWludCBibG9ja3NfcHJvcF9j b3VudFtNSVhFUl9CTE9DS1NfUFJPUF9NQVhdOwotCWludCBibGVuZF9wcm9wX2NvdW50W01JWEVS X0JMRU5EX1BST1BfTUFYXTsKLQlib29sIHByb3BfZXhpc3RzW01JWEVSX1BST1BfTUFYXTsKLQli b29sIGJsb2Nrc19wcm9wX2V4aXN0c1tNSVhFUl9CTE9DS1NfUFJPUF9NQVhdOwotCWJvb2wgYmxl bmRfcHJvcF9leGlzdHNbTUlYRVJfQkxFTkRfUFJPUF9NQVhdOwotCXN0cnVjdCBkcHVfcHJvcF92 YWx1ZSAqcHJvcF92YWx1ZSA9IE5VTEwsICpibG9ja3NfcHJvcF92YWx1ZSA9IE5VTEw7Ci0Jc3Ry dWN0IGRwdV9wcm9wX3ZhbHVlICpibGVuZF9wcm9wX3ZhbHVlID0gTlVMTDsKLQl1MzIgb2ZmX2Nv dW50LCBibGVuZF9vZmZfY291bnQsIG1heF9ibGVuZHN0YWdlcywgbG1fcGFpcl9tYXNrOwotCXN0 cnVjdCBkcHVfbG1fY2ZnICptaXhlcjsKLQlzdHJ1Y3QgZHB1X2xtX3N1Yl9ibGtzICpzYmxrOwot CWludCBwcF9jb3VudCwgZHNwcF9jb3VudCwgZHNfY291bnQ7Ci0JdTMyIHBwX2lkeCwgZHNwcF9p ZHgsIGRzX2lkeDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNucCA9IE5VTEw7Ci0KLQlpZiAoIWRw dV9jZmcpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50IGlucHV0IHBhcmFtXG4iKTsK LQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0JbWF4X2JsZW5kc3RhZ2VzID0gZHB1 X2NmZy0+bWF4X21peGVyX2JsZW5kc3RhZ2VzOwotCi0JcHJvcF92YWx1ZSA9IGtjYWxsb2MoTUlY RVJfUFJPUF9NQVgsCi0JCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tFUk5F TCk7Ci0JaWYgKCFwcm9wX3ZhbHVlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlbmQ7Ci0J fQotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsIG1peGVyX3Byb3AsIEFSUkFZX1NJWkUo bWl4ZXJfcHJvcCksCi0JCXByb3BfY291bnQsICZvZmZfY291bnQpOwotCWlmIChyYykKLQkJZ290 byBlbmQ7Ci0KLQlkcHVfY2ZnLT5taXhlcl9jb3VudCA9IG9mZl9jb3VudDsKLQotCXJjID0gX3Jl YWRfZHRfZW50cnkobnAsIG1peGVyX3Byb3AsIEFSUkFZX1NJWkUobWl4ZXJfcHJvcCksIHByb3Bf Y291bnQsCi0JCXByb3BfZXhpc3RzLCBwcm9wX3ZhbHVlKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5k OwotCi0JcHBfY291bnQgPSBkcHVfY2ZnLT5waW5ncG9uZ19jb3VudDsKLQlkc3BwX2NvdW50ID0g ZHB1X2NmZy0+ZHNwcF9jb3VudDsKLQlkc19jb3VudCA9IGRwdV9jZmctPmRzX2NvdW50OwotCi0J LyogZ2V0IG1peGVyIGZlYXR1cmUgZHQgcHJvcGVydGllcyBpZiB0aGV5IGV4aXN0ICovCi0Jc25w ID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIG1peGVyX3Byb3BbTUlYRVJfQkxPQ0tTXS5wcm9w X25hbWUpOwotCWlmIChzbnApIHsKLQkJYmxvY2tzX3Byb3BfdmFsdWUgPSBremFsbG9jKE1JWEVS X0JMT0NLU19QUk9QX01BWCAqCi0JCQkJTUFYX0RQVV9IV19CTEsgKiBzaXplb2Yoc3RydWN0IGRw dV9wcm9wX3ZhbHVlKSwKLQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKCFibG9ja3NfcHJvcF92YWx1 ZSkgewotCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJcmMgPSBfdmFsaWRh dGVfZHRfZW50cnkoc25wLCBtaXhlcl9ibG9ja3NfcHJvcCwKLQkJCUFSUkFZX1NJWkUobWl4ZXJf YmxvY2tzX3Byb3ApLCBibG9ja3NfcHJvcF9jb3VudCwgTlVMTCk7Ci0JCWlmIChyYykKLQkJCWdv dG8gZW5kOwotCQlyYyA9IF9yZWFkX2R0X2VudHJ5KHNucCwgbWl4ZXJfYmxvY2tzX3Byb3AsCi0J CQkJQVJSQVlfU0laRShtaXhlcl9ibG9ja3NfcHJvcCksCi0JCQkJYmxvY2tzX3Byb3BfY291bnQs IGJsb2Nrc19wcm9wX2V4aXN0cywKLQkJCQlibG9ja3NfcHJvcF92YWx1ZSk7Ci0JfQotCi0JLyog Z2V0IHRoZSBibGVuZF9vcCByZWdpc3RlciBvZmZzZXRzICovCi0JYmxlbmRfcHJvcF92YWx1ZSA9 IGt6YWxsb2MoTUlYRVJfQkxFTkRfUFJPUF9NQVggKgotCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJv cF92YWx1ZSksIEdGUF9LRVJORUwpOwotCWlmICghYmxlbmRfcHJvcF92YWx1ZSkgewotCQlyYyA9 IC1FTk9NRU07Ci0JCWdvdG8gZW5kOwotCX0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwg bWl4ZXJfYmxlbmRfcHJvcCwKLQkJQVJSQVlfU0laRShtaXhlcl9ibGVuZF9wcm9wKSwgYmxlbmRf cHJvcF9jb3VudCwKLQkJJmJsZW5kX29mZl9jb3VudCk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsK LQotCXJjID0gX3JlYWRfZHRfZW50cnkobnAsIG1peGVyX2JsZW5kX3Byb3AsIEFSUkFZX1NJWkUo bWl4ZXJfYmxlbmRfcHJvcCksCi0JCWJsZW5kX3Byb3BfY291bnQsIGJsZW5kX3Byb3BfZXhpc3Rz LCBibGVuZF9wcm9wX3ZhbHVlKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JZm9yIChpID0g MCwgcHBfaWR4ID0gMCwgZHNwcF9pZHggPSAwLCBkc19pZHggPSAwOyBpIDwgb2ZmX2NvdW50OyBp KyspIHsKLQkJbWl4ZXIgPSBkcHVfY2ZnLT5taXhlciArIGk7Ci0JCXNibGsgPSBremFsbG9jKHNp emVvZigqc2JsayksIEdGUF9LRVJORUwpOwotCQlpZiAoIXNibGspIHsKLQkJCXJjID0gLUVOT01F TTsKLQkJCS8qIGNhdGFsb2cgZGVpbml0IHdpbGwgcmVsZWFzZSB0aGUgYWxsb2NhdGVkIGJsb2Nr cyAqLwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJbWl4ZXItPnNibGsgPSBzYmxrOwotCi0JCW1peGVy LT5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgTUlYRVJfT0ZGLCBpKTsKLQkJ bWl4ZXItPmxlbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIE1JWEVSX0xFTiwgMCk7 Ci0JCW1peGVyLT5pZCA9IExNXzAgKyBpOwotCQlzbnByaW50ZihtaXhlci0+bmFtZSwgRFBVX0hX X0JMS19OQU1FX0xFTiwgImxtXyV1IiwKLQkJCQltaXhlci0+aWQgLSBMTV8wKTsKLQotCQlpZiAo IXByb3BfZXhpc3RzW01JWEVSX0xFTl0pCi0JCQltaXhlci0+bGVuID0gREVGQVVMVF9EUFVfSFdf QkxPQ0tfTEVOOwotCi0JCWxtX3BhaXJfbWFzayA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFs dWUsCi0JCQkJTUlYRVJfUEFJUl9NQVNLLCBpKTsKLQkJaWYgKGxtX3BhaXJfbWFzaykKLQkJCW1p eGVyLT5sbV9wYWlyX21hc2sgPSAxIDw8IGxtX3BhaXJfbWFzazsKLQotCQlzYmxrLT5tYXhibGVu ZHN0YWdlcyA9IG1heF9ibGVuZHN0YWdlczsKLQkJc2Jsay0+bWF4d2lkdGggPSBkcHVfY2ZnLT5t YXhfbWl4ZXJfd2lkdGg7Ci0KLQkJZm9yIChqID0gMDsgaiA8IGJsZW5kX29mZl9jb3VudDsgaisr KQotCQkJc2Jsay0+YmxlbmRzdGFnZV9iYXNlW2pdID0KLQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhi bGVuZF9wcm9wX3ZhbHVlLAotCQkJCQkJTUlYRVJfQkxFTkRfT1BfT0ZGLCBqKTsKLQotCQlpZiAo ZHB1X2NmZy0+aGFzX3NyY19zcGxpdCkKLQkJCXNldF9iaXQoRFBVX01JWEVSX1NPVVJDRVNQTElU LCAmbWl4ZXItPmZlYXR1cmVzKTsKLQkJaWYgKGRwdV9jZmctPmhhc19kaW1fbGF5ZXIpCi0JCQlz ZXRfYml0KERQVV9ESU1fTEFZRVIsICZtaXhlci0+ZmVhdHVyZXMpOwotCi0JCWlmICgoaSA8IFJP VF9MTV9PRkZTRVQpIHx8IChpID49IExJTkVfTE1fT0ZGU0VUKSkgewotCQkJbWl4ZXItPnBpbmdw b25nID0gcHBfY291bnQgPiAwID8gcHBfaWR4ICsgUElOR1BPTkdfMAotCQkJCQkJCQk6IFBJTkdQ T05HX01BWDsKLQkJCW1peGVyLT5kc3BwID0gZHNwcF9jb3VudCA+IDAgPyBkc3BwX2lkeCArIERT UFBfMAotCQkJCQkJCQk6IERTUFBfTUFYOwotCQkJbWl4ZXItPmRzID0gZHNfY291bnQgPiAwID8g ZHNfaWR4ICsgRFNfMCA6IERTX01BWDsKLQkJCXBwX2NvdW50LS07Ci0JCQlkc3BwX2NvdW50LS07 Ci0JCQlkc19jb3VudC0tOwotCQkJcHBfaWR4Kys7Ci0JCQlkc3BwX2lkeCsrOwotCQkJZHNfaWR4 Kys7Ci0JCX0gZWxzZSB7Ci0JCQltaXhlci0+cGluZ3BvbmcgPSBQSU5HUE9OR19NQVg7Ci0JCQlt aXhlci0+ZHNwcCA9IERTUFBfTUFYOwotCQkJbWl4ZXItPmRzID0gRFNfTUFYOwotCQl9Ci0KLQkJ c2Jsay0+Z2MuaWQgPSBEUFVfTUlYRVJfR0M7Ci0JCWlmIChibG9ja3NfcHJvcF92YWx1ZSAmJiBi bG9ja3NfcHJvcF9leGlzdHNbTUlYRVJfR0NfUFJPUF0pIHsKLQkJCXNibGstPmdjLmJhc2UgPSBQ Uk9QX1ZBTFVFX0FDQ0VTUyhibG9ja3NfcHJvcF92YWx1ZSwKLQkJCQkJTUlYRVJfR0NfUFJPUCwg MCk7Ci0JCQlzYmxrLT5nYy52ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1MoYmxvY2tzX3Byb3Bf dmFsdWUsCi0JCQkJCU1JWEVSX0dDX1BST1AsIDEpOwotCQkJc2Jsay0+Z2MubGVuID0gMDsKLQkJ CXNldF9iaXQoRFBVX01JWEVSX0dDLCAmbWl4ZXItPmZlYXR1cmVzKTsKLQkJfQotCX0KLQotZW5k OgotCWtmcmVlKHByb3BfdmFsdWUpOwotCWtmcmVlKGJsb2Nrc19wcm9wX3ZhbHVlKTsKLQlrZnJl ZShibGVuZF9wcm9wX3ZhbHVlKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2lu dGZfcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkJCXN0cnVjdCBkcHVfbWRz c19jZmcgKmRwdV9jZmcpCi17Ci0JaW50IHJjLCBwcm9wX2NvdW50W0lOVEZfUFJPUF9NQVhdLCBp OwotCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1ZSA9IE5VTEw7Ci0JYm9vbCBwcm9w X2V4aXN0c1tJTlRGX1BST1BfTUFYXTsKLQl1MzIgb2ZmX2NvdW50OwotCXUzMiBkc2lfY291bnQg PSAwLCBub25lX2NvdW50ID0gMCwgaGRtaV9jb3VudCA9IDAsIGRwX2NvdW50ID0gMDsKLQljb25z dCBjaGFyICp0eXBlOwotCXN0cnVjdCBkcHVfaW50Zl9jZmcgKmludGY7Ci0KLQlpZiAoIWRwdV9j ZmcpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKLQkJcmMgPSAtRUlOVkFM OwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlwcm9wX3ZhbHVlID0ga3phbGxvYyhJTlRGX1BST1BfTUFY ICoKLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAo IXByb3BfdmFsdWUpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyYyA9 IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgaW50Zl9wcm9wLCBBUlJBWV9TSVpFKGludGZfcHJvcCks Ci0JCXByb3BfY291bnQsICZvZmZfY291bnQpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlk cHVfY2ZnLT5pbnRmX2NvdW50ID0gb2ZmX2NvdW50OwotCi0JcmMgPSBfcmVhZF9kdF9lbnRyeShu cCwgaW50Zl9wcm9wLCBBUlJBWV9TSVpFKGludGZfcHJvcCksIHByb3BfY291bnQsCi0JCXByb3Bf ZXhpc3RzLCBwcm9wX3ZhbHVlKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JZm9yIChpID0g MDsgaSA8IG9mZl9jb3VudDsgaSsrKSB7Ci0JCWludGYgPSBkcHVfY2ZnLT5pbnRmICsgaTsKLQkJ aW50Zi0+YmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIElOVEZfT0ZGLCBpKTsK LQkJaW50Zi0+bGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgSU5URl9MRU4sIDAp OwotCQlpbnRmLT5pZCA9IElOVEZfMCArIGk7Ci0JCXNucHJpbnRmKGludGYtPm5hbWUsIERQVV9I V19CTEtfTkFNRV9MRU4sICJpbnRmXyV1IiwKLQkJCQlpbnRmLT5pZCAtIElOVEZfMCk7Ci0KLQkJ aWYgKCFwcm9wX2V4aXN0c1tJTlRGX0xFTl0pCi0JCQlpbnRmLT5sZW4gPSBERUZBVUxUX0RQVV9I V19CTE9DS19MRU47Ci0KLQkJaW50Zi0+cHJvZ19mZXRjaF9saW5lc193b3JzdF9jYXNlID0KLQkJ CQkhcHJvcF9leGlzdHNbSU5URl9QUkVGRVRDSF0gPwotCQkJCWRwdV9jZmctPnBlcmYubWluX3By ZWZpbGxfbGluZXMgOgotCQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIElOVEZfUFJF RkVUQ0gsIGkpOwotCi0JCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLAotCQkJCWlu dGZfcHJvcFtJTlRGX1RZUEVdLnByb3BfbmFtZSwgaSwgJnR5cGUpOwotCQlpZiAoIXN0cmNtcCh0 eXBlLCAiZHNpIikpIHsKLQkJCWludGYtPnR5cGUgPSBJTlRGX0RTSTsKLQkJCWludGYtPmNvbnRy b2xsZXJfaWQgPSBkc2lfY291bnQ7Ci0JCQlkc2lfY291bnQrKzsKLQkJfSBlbHNlIGlmICghc3Ry Y21wKHR5cGUsICJoZG1pIikpIHsKLQkJCWludGYtPnR5cGUgPSBJTlRGX0hETUk7Ci0JCQlpbnRm LT5jb250cm9sbGVyX2lkID0gaGRtaV9jb3VudDsKLQkJCWhkbWlfY291bnQrKzsKLQkJfSBlbHNl IGlmICghc3RyY21wKHR5cGUsICJkcCIpKSB7Ci0JCQlpbnRmLT50eXBlID0gSU5URl9EUDsKLQkJ CWludGYtPmNvbnRyb2xsZXJfaWQgPSBkcF9jb3VudDsKLQkJCWRwX2NvdW50Kys7Ci0JCX0gZWxz ZSB7Ci0JCQlpbnRmLT50eXBlID0gSU5URl9OT05FOwotCQkJaW50Zi0+Y29udHJvbGxlcl9pZCA9 IG5vbmVfY291bnQ7Ci0JCQlub25lX2NvdW50Kys7Ci0JCX0KLQl9Ci0KLWVuZDoKLQlrZnJlZShw cm9wX3ZhbHVlKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3diX3BhcnNlX2R0 KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmcpCi17 Ci0JaW50IHJjLCBwcm9wX2NvdW50W1dCX1BST1BfTUFYXSwgaSwgajsKLQlzdHJ1Y3QgZHB1X3By b3BfdmFsdWUgKnByb3BfdmFsdWUgPSBOVUxMOwotCWJvb2wgcHJvcF9leGlzdHNbV0JfUFJPUF9N QVhdOwotCXUzMiBvZmZfY291bnQ7Ci0Jc3RydWN0IGRwdV93Yl9jZmcgKndiOwotCXN0cnVjdCBk cHVfd2Jfc3ViX2Jsb2NrcyAqc2JsazsKLQotCWlmICghZHB1X2NmZykgewotCQlEUFVfRVJST1Io ImludmFsaWQgYXJndW1lbnRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0K LQotCXByb3BfdmFsdWUgPSBremFsbG9jKFdCX1BST1BfTUFYICoKLQkJCXNpemVvZihzdHJ1Y3Qg ZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3BfdmFsdWUpIHsKLQkJcmMg PSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShu cCwgd2JfcHJvcCwgQVJSQVlfU0laRSh3Yl9wcm9wKSwgcHJvcF9jb3VudCwKLQkJJm9mZl9jb3Vu dCk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCWRwdV9jZmctPndiX2NvdW50ID0gb2ZmX2Nv dW50OwotCi0JcmMgPSBfcmVhZF9kdF9lbnRyeShucCwgd2JfcHJvcCwgQVJSQVlfU0laRSh3Yl9w cm9wKSwgcHJvcF9jb3VudCwKLQkJcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwotCWlmIChyYykK LQkJZ290byBlbmQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgb2ZmX2NvdW50OyBpKyspIHsKLQkJd2Ig PSBkcHVfY2ZnLT53YiArIGk7Ci0JCXNibGsgPSBremFsbG9jKHNpemVvZigqc2JsayksIEdGUF9L RVJORUwpOwotCQlpZiAoIXNibGspIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJCS8qIGNhdGFsb2cg ZGVpbml0IHdpbGwgcmVsZWFzZSB0aGUgYWxsb2NhdGVkIGJsb2NrcyAqLwotCQkJZ290byBlbmQ7 Ci0JCX0KLQkJd2ItPnNibGsgPSBzYmxrOwotCi0JCXdiLT5iYXNlID0gUFJPUF9WQUxVRV9BQ0NF U1MocHJvcF92YWx1ZSwgV0JfT0ZGLCBpKTsKLQkJd2ItPmlkID0gV0JfMCArIFBST1BfVkFMVUVf QUNDRVNTKHByb3BfdmFsdWUsIFdCX0lELCBpKTsKLQkJc25wcmludGYod2ItPm5hbWUsIERQVV9I V19CTEtfTkFNRV9MRU4sICJ3Yl8ldSIsCi0JCQkJd2ItPmlkIC0gV0JfMCk7Ci0JCXdiLT5jbGtf Y3RybCA9IERQVV9DTEtfQ1RSTF9XQjAgKwotCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1 ZSwgV0JfSUQsIGkpOwotCQl3Yi0+eGluX2lkID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1 ZSwgV0JfWElOX0lELCBpKTsKLQotCQlpZiAod2ItPmNsa19jdHJsID49IERQVV9DTEtfQ1RSTF9N QVgpIHsKLQkJCURQVV9FUlJPUigiJXM6IGludmFsaWQgY2xrIGN0cmw6ICVkXG4iLAotCQkJCQl3 Yi0+bmFtZSwgd2ItPmNsa19jdHJsKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gZW5kOwot CQl9Ci0KLQkJaWYgKElTX0RQVV9NQUpPUl9NSU5PUl9TQU1FKChkcHVfY2ZnLT5od3ZlcnNpb24p LAotCQkJCURQVV9IV19WRVJfMTcwKSkKLQkJCXdiLT52YmlmX2lkeCA9IFZCSUZfTlJUOwotCQll bHNlCi0JCQl3Yi0+dmJpZl9pZHggPSBWQklGX1JUOwotCi0JCXdiLT5sZW4gPSBQUk9QX1ZBTFVF X0FDQ0VTUyhwcm9wX3ZhbHVlLCBXQl9MRU4sIDApOwotCQlpZiAoIXByb3BfZXhpc3RzW1dCX0xF Tl0pCi0JCQl3Yi0+bGVuID0gREVGQVVMVF9EUFVfSFdfQkxPQ0tfTEVOOwotCQlzYmxrLT5tYXhs aW5ld2lkdGggPSBkcHVfY2ZnLT5tYXhfd2JfbGluZXdpZHRoOwotCi0JCWlmICh3Yi0+aWQgPj0g TElORV9NT0RFX1dCX09GRlNFVCkKLQkJCXNldF9iaXQoRFBVX1dCX0xJTkVfTU9ERSwgJndiLT5m ZWF0dXJlcyk7Ci0JCWVsc2UKLQkJCXNldF9iaXQoRFBVX1dCX0JMT0NLX01PREUsICZ3Yi0+ZmVh dHVyZXMpOwotCQlzZXRfYml0KERQVV9XQl9UUkFGRklDX1NIQVBFUiwgJndiLT5mZWF0dXJlcyk7 Ci0JCXNldF9iaXQoRFBVX1dCX1lVVl9DT05GSUcsICZ3Yi0+ZmVhdHVyZXMpOwotCi0JCWlmIChk cHVfY2ZnLT5oYXNfY2RwKQotCQkJc2V0X2JpdChEUFVfV0JfQ0RQLCAmd2ItPmZlYXR1cmVzKTsK LQotCQlzZXRfYml0KERQVV9XQl9RT1MsICZ3Yi0+ZmVhdHVyZXMpOwotCQlpZiAoZHB1X2NmZy0+ dmJpZl9xb3Nfbmx2bCA9PSA4KQotCQkJc2V0X2JpdChEUFVfV0JfUU9TXzhMVkwsICZ3Yi0+ZmVh dHVyZXMpOwotCi0JCWlmIChkcHVfY2ZnLT5oYXNfd2JfdWJ3YykKLQkJCXNldF9iaXQoRFBVX1dC X1VCV0MsICZ3Yi0+ZmVhdHVyZXMpOwotCi0JCWZvciAoaiA9IDA7IGogPCBkcHVfY2ZnLT5tZHBf Y291bnQ7IGorKykgewotCQkJZHB1X2NmZy0+bWRwW2pdLmNsa19jdHJsc1t3Yi0+Y2xrX2N0cmxd LnJlZ19vZmYgPQotCQkJCVBST1BfQklUVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJCQlX Ql9DTEtfQ1RSTCwgaSwgMCk7Ci0JCQlkcHVfY2ZnLT5tZHBbal0uY2xrX2N0cmxzW3diLT5jbGtf Y3RybF0uYml0X29mZiA9Ci0JCQkJUFJPUF9CSVRWQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJ CQkJCVdCX0NMS19DVFJMLCBpLCAxKTsKLQkJfQotCi0JCXdiLT5mb3JtYXRfbGlzdCA9IGRwdV9j ZmctPndiX2Zvcm1hdHM7Ci0KLQkJRFBVX0RFQlVHKAotCQkJIndiOiVkIHhpbjolZCB2YmlmOiVk IGNsayVkOiV4LyVkXG4iLAotCQkJd2ItPmlkIC0gV0JfMCwKLQkJCXdiLT54aW5faWQsCi0JCQl3 Yi0+dmJpZl9pZHgsCi0JCQl3Yi0+Y2xrX2N0cmwsCi0JCQlkcHVfY2ZnLT5tZHBbMF0uY2xrX2N0 cmxzW3diLT5jbGtfY3RybF0ucmVnX29mZiwKLQkJCWRwdV9jZmctPm1kcFswXS5jbGtfY3RybHNb d2ItPmNsa19jdHJsXS5iaXRfb2ZmKTsKLQl9Ci0KLWVuZDoKLQlrZnJlZShwcm9wX3ZhbHVlKTsK LQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIF9kcHVfZHNwcF9zZXR1cF9ibG9ja3Moc3Ry dWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZywKLQlzdHJ1Y3QgZHB1X2RzcHBfY2ZnICpkc3BwLCBz dHJ1Y3QgZHB1X2RzcHBfc3ViX2Jsa3MgKnNibGssCi0JYm9vbCAqcHJvcF9leGlzdHMsIHN0cnVj dCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1ZSkKLXsKLQlzYmxrLT5pZ2MuaWQgPSBEUFVfRFNQ UF9JR0M7Ci0JaWYgKHByb3BfZXhpc3RzW0RTUFBfSUdDX1BST1BdKSB7Ci0JCXNibGstPmlnYy5i YXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCURTUFBfSUdDX1BST1AsIDAp OwotCQlzYmxrLT5pZ2MudmVyc2lvbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0J CQlEU1BQX0lHQ19QUk9QLCAxKTsKLQkJc2Jsay0+aWdjLmxlbiA9IDA7Ci0JCXNldF9iaXQoRFBV X0RTUFBfSUdDLCAmZHNwcC0+ZmVhdHVyZXMpOwotCX0KLQotCXNibGstPnBjYy5pZCA9IERQVV9E U1BQX1BDQzsKLQlpZiAocHJvcF9leGlzdHNbRFNQUF9QQ0NfUFJPUF0pIHsKLQkJc2Jsay0+cGNj LmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJRFNQUF9QQ0NfUFJPUCwg MCk7Ci0JCXNibGstPnBjYy52ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwK LQkJCURTUFBfUENDX1BST1AsIDEpOwotCQlzYmxrLT5wY2MubGVuID0gMDsKLQkJc2V0X2JpdChE UFVfRFNQUF9QQ0MsICZkc3BwLT5mZWF0dXJlcyk7Ci0JfQotCi0Jc2Jsay0+Z2MuaWQgPSBEUFVf RFNQUF9HQzsKLQlpZiAocHJvcF9leGlzdHNbRFNQUF9HQ19QUk9QXSkgewotCQlzYmxrLT5nYy5i YXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgRFNQUF9HQ19QUk9QLCAwKTsKLQkJ c2Jsay0+Z2MudmVyc2lvbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQ X0dDX1BST1AsIDEpOwotCQlzYmxrLT5nYy5sZW4gPSAwOwotCQlzZXRfYml0KERQVV9EU1BQX0dD LCAmZHNwcC0+ZmVhdHVyZXMpOwotCX0KLQotCXNibGstPmdhbXV0LmlkID0gRFBVX0RTUFBfR0FN VVQ7Ci0JaWYgKHByb3BfZXhpc3RzW0RTUFBfR0FNVVRfUFJPUF0pIHsKLQkJc2Jsay0+Z2FtdXQu YmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQX0dBTVVUX1BST1As IDApOwotCQlzYmxrLT5nYW11dC52ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1 ZSwKLQkJCURTUFBfR0FNVVRfUFJPUCwgMSk7Ci0JCXNibGstPmdhbXV0LmxlbiA9IDA7Ci0JCXNl dF9iaXQoRFBVX0RTUFBfR0FNVVQsICZkc3BwLT5mZWF0dXJlcyk7Ci0JfQotCi0Jc2Jsay0+ZGl0 aGVyLmlkID0gRFBVX0RTUFBfRElUSEVSOwotCWlmIChwcm9wX2V4aXN0c1tEU1BQX0RJVEhFUl9Q Uk9QXSkgewotCQlzYmxrLT5kaXRoZXIuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFs dWUsCi0JCQlEU1BQX0RJVEhFUl9QUk9QLCAwKTsKLQkJc2Jsay0+ZGl0aGVyLnZlcnNpb24gPSBQ Uk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJRFNQUF9ESVRIRVJfUFJPUCwgMSk7Ci0J CXNibGstPmRpdGhlci5sZW4gPSAwOwotCQlzZXRfYml0KERQVV9EU1BQX0RJVEhFUiwgJmRzcHAt PmZlYXR1cmVzKTsKLQl9Ci0KLQlzYmxrLT5oaXN0LmlkID0gRFBVX0RTUFBfSElTVDsKLQlpZiAo cHJvcF9leGlzdHNbRFNQUF9ISVNUX1BST1BdKSB7Ci0JCXNibGstPmhpc3QuYmFzZSA9IFBST1Bf VkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQX0hJU1RfUFJPUCwgMCk7Ci0JCXNibGst Pmhpc3QudmVyc2lvbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQX0hJ U1RfUFJPUCwgMSk7Ci0JCXNibGstPmhpc3QubGVuID0gMDsKLQkJc2V0X2JpdChEUFVfRFNQUF9I SVNULCAmZHNwcC0+ZmVhdHVyZXMpOwotCX0KLQotCXNibGstPmhzaWMuaWQgPSBEUFVfRFNQUF9I U0lDOwotCWlmIChwcm9wX2V4aXN0c1tEU1BQX0hTSUNfUFJPUF0pIHsKLQkJc2Jsay0+aHNpYy5i YXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCURTUFBfSFNJQ19QUk9QLCAw KTsKLQkJc2Jsay0+aHNpYy52ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwK LQkJCURTUFBfSFNJQ19QUk9QLCAxKTsKLQkJc2Jsay0+aHNpYy5sZW4gPSAwOwotCQlzZXRfYml0 KERQVV9EU1BQX0hTSUMsICZkc3BwLT5mZWF0dXJlcyk7Ci0JfQotCi0Jc2Jsay0+bWVtY29sb3Iu aWQgPSBEUFVfRFNQUF9NRU1DT0xPUjsKLQlpZiAocHJvcF9leGlzdHNbRFNQUF9NRU1DT0xPUl9Q Uk9QXSkgewotCQlzYmxrLT5tZW1jb2xvci5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92 YWx1ZSwKLQkJCURTUFBfTUVNQ09MT1JfUFJPUCwgMCk7Ci0JCXNibGstPm1lbWNvbG9yLnZlcnNp b24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJRFNQUF9NRU1DT0xPUl9QUk9Q LCAxKTsKLQkJc2Jsay0+bWVtY29sb3IubGVuID0gMDsKLQkJc2V0X2JpdChEUFVfRFNQUF9NRU1D T0xPUiwgJmRzcHAtPmZlYXR1cmVzKTsKLQl9Ci0KLQlzYmxrLT5zaXh6b25lLmlkID0gRFBVX0RT UFBfU0lYWk9ORTsKLQlpZiAocHJvcF9leGlzdHNbRFNQUF9TSVhaT05FX1BST1BdKSB7Ci0JCXNi bGstPnNpeHpvbmUuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQ X1NJWFpPTkVfUFJPUCwgMCk7Ci0JCXNibGstPnNpeHpvbmUudmVyc2lvbiA9IFBST1BfVkFMVUVf QUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQX1NJWFpPTkVfUFJPUCwgMSk7Ci0JCXNibGstPnNp eHpvbmUubGVuID0gMDsKLQkJc2V0X2JpdChEUFVfRFNQUF9TSVhaT05FLCAmZHNwcC0+ZmVhdHVy ZXMpOwotCX0KLQotCXNibGstPnZsdXQuaWQgPSBEUFVfRFNQUF9WTFVUOwotCWlmIChwcm9wX2V4 aXN0c1tEU1BQX1ZMVVRfUFJPUF0pIHsKLQkJc2Jsay0+dmx1dC5iYXNlID0gUFJPUF9WQUxVRV9B Q0NFU1MocHJvcF92YWx1ZSwKLQkJCURTUFBfVkxVVF9QUk9QLCAwKTsKLQkJc2Jsay0+dmx1dC52 ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCURTUFBfVkxVVF9QUk9Q LCAxKTsKLQkJc2Jsay0+c2l4em9uZS5sZW4gPSAwOwotCQlzZXRfYml0KERQVV9EU1BQX1ZMVVQs ICZkc3BwLT5mZWF0dXJlcyk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRwdV9kc3BwX3RvcF9wYXJz ZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVf Y2ZnKQotewotCWludCByYywgcHJvcF9jb3VudFtEU1BQX1RPUF9QUk9QX01BWF07Ci0JYm9vbCBw cm9wX2V4aXN0c1tEU1BQX1RPUF9QUk9QX01BWF07Ci0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpw cm9wX3ZhbHVlID0gTlVMTDsKLQl1MzIgb2ZmX2NvdW50OwotCi0JaWYgKCFkcHVfY2ZnKSB7Ci0J CURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290 byBlbmQ7Ci0JfQotCi0JcHJvcF92YWx1ZSA9IGt6YWxsb2MoRFNQUF9UT1BfUFJPUF9NQVggKgot CQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdGUF9LRVJORUwpOwotCWlmICghcHJv cF92YWx1ZSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJjID0gX3Zh bGlkYXRlX2R0X2VudHJ5KG5wLCBkc3BwX3RvcF9wcm9wLCBBUlJBWV9TSVpFKGRzcHBfdG9wX3By b3ApLAotCQlwcm9wX2NvdW50LCAmb2ZmX2NvdW50KTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwot Ci0JcmMgPSBfcmVhZF9kdF9lbnRyeShucCwgZHNwcF90b3BfcHJvcCwgQVJSQVlfU0laRShkc3Bw X3RvcF9wcm9wKSwKLQkJcHJvcF9jb3VudCwgcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwotCWlm IChyYykKLQkJZ290byBlbmQ7Ci0KLQlpZiAob2ZmX2NvdW50ICE9IDEpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIGRzcHBfdG9wIG9mZl9jb3VudDolZFxuIiwgb2ZmX2NvdW50KTsKLQkJcmMgPSAt RUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlkcHVfY2ZnLT5kc3BwX3RvcC5iYXNlID0KLQkJ UFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgRFNQUF9UT1BfT0ZGLCAwKTsKLQlkcHVfY2Zn LT5kc3BwX3RvcC5sZW4gPQotCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBEU1BQX1RP UF9TSVpFLCAwKTsKLQlzbnByaW50ZihkcHVfY2ZnLT5kc3BwX3RvcC5uYW1lLCBEUFVfSFdfQkxL X05BTUVfTEVOLCAiZHNwcF90b3AiKTsKLQotZW5kOgotCWtmcmVlKHByb3BfdmFsdWUpOwotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGludCBkcHVfZHNwcF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNl X25vZGUgKm5wLAotCQkJCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKKy8qCisgKiBz ZG04NDVfY2ZnX2luaXQoKTogcG9wdWxhdGUgc2RtODQ1IGRwdSBzdWItYmxvY2tzIHJlZyBvZmZz ZXRzCisgKiBhbmQgaW5zdGFuY2UgY291bnRzLgorICovCit2b2lkIHNkbTg0NV9jZmdfaW5pdChz dHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQogewotCWludCByYywgcHJvcF9jb3VudFtEU1BQ X1BST1BfTUFYXSwgaTsKLQlpbnQgYWRfcHJvcF9jb3VudFtBRF9QUk9QX01BWF07Ci0JYm9vbCBw cm9wX2V4aXN0c1tEU1BQX1BST1BfTUFYXSwgYWRfcHJvcF9leGlzdHNbQURfUFJPUF9NQVhdOwot CWJvb2wgYmxvY2tzX3Byb3BfZXhpc3RzW0RTUFBfQkxPQ0tTX1BST1BfTUFYXTsKLQlzdHJ1Y3Qg ZHB1X3Byb3BfdmFsdWUgKmFkX3Byb3BfdmFsdWUgPSBOVUxMOwotCWludCBibG9ja3NfcHJvcF9j b3VudFtEU1BQX0JMT0NLU19QUk9QX01BWF07Ci0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9w X3ZhbHVlID0gTlVMTCwgKmJsb2Nrc19wcm9wX3ZhbHVlID0gTlVMTDsKLQl1MzIgb2ZmX2NvdW50 LCBhZF9vZmZfY291bnQ7Ci0Jc3RydWN0IGRwdV9kc3BwX2NmZyAqZHNwcDsKLQlzdHJ1Y3QgZHB1 X2RzcHBfc3ViX2Jsa3MgKnNibGs7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpzbnAgPSBOVUxMOwot Ci0JaWYgKCFkcHVfY2ZnKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7Ci0J CXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcHJvcF92YWx1ZSA9IGt6YWxsb2Mo RFNQUF9QUk9QX01BWCAqCi0JCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFwcm9wX3ZhbHVlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlbmQ7 Ci0JfQotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsIGRzcHBfcHJvcCwgQVJSQVlfU0la RShkc3BwX3Byb3ApLAotCQlwcm9wX2NvdW50LCAmb2ZmX2NvdW50KTsKLQlpZiAocmMpCi0JCWdv dG8gZW5kOwotCi0JZHB1X2NmZy0+ZHNwcF9jb3VudCA9IG9mZl9jb3VudDsKLQotCXJjID0gX3Jl YWRfZHRfZW50cnkobnAsIGRzcHBfcHJvcCwgQVJSQVlfU0laRShkc3BwX3Byb3ApLCBwcm9wX2Nv dW50LAotCQlwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsK LQotCS8qIFBhcnNlIEFEIGR0c2kgZW50cmllcyAqLwotCWFkX3Byb3BfdmFsdWUgPSBrY2FsbG9j KEFEX1BST1BfTUFYLAotCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdGUF9LRVJO RUwpOwotCWlmICghYWRfcHJvcF92YWx1ZSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZW5k OwotCX0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgYWRfcHJvcCwgQVJSQVlfU0laRShh ZF9wcm9wKSwKLQkJYWRfcHJvcF9jb3VudCwgJmFkX29mZl9jb3VudCk7Ci0JaWYgKHJjKQotCQln b3RvIGVuZDsKLQlyYyA9IF9yZWFkX2R0X2VudHJ5KG5wLCBhZF9wcm9wLCBBUlJBWV9TSVpFKGFk X3Byb3ApLCBhZF9wcm9wX2NvdW50LAotCQlhZF9wcm9wX2V4aXN0cywgYWRfcHJvcF92YWx1ZSk7 Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCS8qIGdldCBEU1BQIGZlYXR1cmUgZHQgcHJvcGVy dGllcyBpZiB0aGV5IGV4aXN0ICovCi0Jc25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIGRz cHBfcHJvcFtEU1BQX0JMT0NLU10ucHJvcF9uYW1lKTsKLQlpZiAoc25wKSB7Ci0JCWJsb2Nrc19w cm9wX3ZhbHVlID0ga3phbGxvYyhEU1BQX0JMT0NLU19QUk9QX01BWCAqCi0JCQkJTUFYX0RQVV9I V19CTEsgKiBzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwKLQkJCQlHRlBfS0VSTkVMKTsK LQkJaWYgKCFibG9ja3NfcHJvcF92YWx1ZSkgewotCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBl bmQ7Ci0JCX0KLQkJcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkoc25wLCBkc3BwX2Jsb2Nrc19wcm9w LAotCQkJQVJSQVlfU0laRShkc3BwX2Jsb2Nrc19wcm9wKSwgYmxvY2tzX3Byb3BfY291bnQsIE5V TEwpOwotCQlpZiAocmMpCi0JCQlnb3RvIGVuZDsKLQkJcmMgPSBfcmVhZF9kdF9lbnRyeShzbnAs IGRzcHBfYmxvY2tzX3Byb3AsCi0JCQlBUlJBWV9TSVpFKGRzcHBfYmxvY2tzX3Byb3ApLCBibG9j a3NfcHJvcF9jb3VudCwKLQkJCWJsb2Nrc19wcm9wX2V4aXN0cywgYmxvY2tzX3Byb3BfdmFsdWUp OwotCQlpZiAocmMpCi0JCQlnb3RvIGVuZDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgb2ZmX2Nv dW50OyBpKyspIHsKLQkJZHNwcCA9IGRwdV9jZmctPmRzcHAgKyBpOwotCQlkc3BwLT5iYXNlID0g UFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgRFNQUF9PRkYsIGkpOwotCQlkc3BwLT5sZW4g PSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBEU1BQX1NJWkUsIDApOwotCQlkc3BwLT5p ZCA9IERTUFBfMCArIGk7Ci0JCXNucHJpbnRmKGRzcHAtPm5hbWUsIERQVV9IV19CTEtfTkFNRV9M RU4sICJkc3BwXyV1IiwKLQkJCQlkc3BwLT5pZCAtIERTUFBfMCk7Ci0KLQkJc2JsayA9IGt6YWxs b2Moc2l6ZW9mKCpzYmxrKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2JsaykgewotCQkJcmMgPSAt RU5PTUVNOwotCQkJLyogY2F0YWxvZyBkZWluaXQgd2lsbCByZWxlYXNlIHRoZSBhbGxvY2F0ZWQg YmxvY2tzICovCi0JCQlnb3RvIGVuZDsKLQkJfQotCQlkc3BwLT5zYmxrID0gc2JsazsKLQotCQlp ZiAoYmxvY2tzX3Byb3BfdmFsdWUpCi0JCQlfZHB1X2RzcHBfc2V0dXBfYmxvY2tzKGRwdV9jZmcs IGRzcHAsIHNibGssCi0JCQkJCWJsb2Nrc19wcm9wX2V4aXN0cywgYmxvY2tzX3Byb3BfdmFsdWUp OwotCi0JCXNibGstPmFkLmlkID0gRFBVX0RTUFBfQUQ7Ci0JCWRwdV9jZmctPmFkX2NvdW50ID0g YWRfb2ZmX2NvdW50OwotCQlpZiAoYWRfcHJvcF92YWx1ZSAmJiAoaSA8IGFkX29mZl9jb3VudCkg JiYKLQkJICAgIGFkX3Byb3BfZXhpc3RzW0FEX09GRl0pIHsKLQkJCXNibGstPmFkLmJhc2UgPSBQ Uk9QX1ZBTFVFX0FDQ0VTUyhhZF9wcm9wX3ZhbHVlLAotCQkJCUFEX09GRiwgaSk7Ci0JCQlzYmxr LT5hZC52ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1MoYWRfcHJvcF92YWx1ZSwKLQkJCQlBRF9W RVJTSU9OLCAwKTsKLQkJCXNldF9iaXQoRFBVX0RTUFBfQUQsICZkc3BwLT5mZWF0dXJlcyk7Ci0J CX0KLQl9Ci0KLWVuZDoKLQlrZnJlZShwcm9wX3ZhbHVlKTsKLQlrZnJlZShhZF9wcm9wX3ZhbHVl KTsKLQlrZnJlZShibG9ja3NfcHJvcF92YWx1ZSk7Ci0JcmV0dXJuIHJjOworCSpkcHVfY2ZnID0g KHN0cnVjdCBkcHVfbWRzc19jZmcpeworCQkuY2FwcyA9ICZzZG04NDVfZHB1X2NhcHMsCisJCS5t ZHNzX2NvdW50ID0gQVJSQVlfU0laRShzZG04NDVfbWRzcyksCisJCS5tZHNzID0gc2RtODQ1X21k c3MsCisJCS5tZHBfY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV9tZHApLAorCQkubWRwID0gc2Rt ODQ1X21kcCwKKwkJLmN0bF9jb3VudCA9IEFSUkFZX1NJWkUoc2RtODQ1X2N0bCksCisJCS5jdGwg PSBzZG04NDVfY3RsLAorCQkuc3NwcF9jb3VudCA9IEFSUkFZX1NJWkUoc2RtODQ1X3NzcHApLAor CQkuc3NwcCA9IHNkbTg0NV9zc3BwLAorCQkubWl4ZXJfY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0 NV9sbSksCisJCS5taXhlciA9IHNkbTg0NV9sbSwKKwkJLmRzcHBfdG9wID0gc2RtODQ1X2RzcHBf dG9wLAorCQkuZHNwcF9jb3VudCA9IEFSUkFZX1NJWkUoc2RtODQ1X2RzcHApLAorCQkuZHNwcCA9 IHNkbTg0NV9kc3BwLAorCQkuZHNfY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV9kcyksCisJCS5k cyA9IHNkbTg0NV9kcywKKwkJLnBpbmdwb25nX2NvdW50ID0gQVJSQVlfU0laRShzZG04NDVfcHAp LAorCQkucGluZ3BvbmcgPSBzZG04NDVfcHAsCisJCS5kc2NfY291bnQgPSBBUlJBWV9TSVpFKHNk bTg0NV9kc2MpLAorCQkuZHNjID0gc2RtODQ1X2RzYywKKwkJLmNkbV9jb3VudCA9IEFSUkFZX1NJ WkUoc2RtODQ1X2NkbSksCisJCS5jZG0gPSBzZG04NDVfY2RtLAorCQkuaW50Zl9jb3VudCA9IEFS UkFZX1NJWkUoc2RtODQ1X2ludGYpLAorCQkuaW50ZiA9IHNkbTg0NV9pbnRmLAorCQkud2JfY291 bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV93YiksCisJCS53YiA9IHNkbTg0NV93YiwKKwkJLnZiaWZf Y291bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV92YmlmKSwKKwkJLnZiaWYgPSBzZG04NDVfdmJpZiwK KwkJLnJlZ19kbWFfY291bnQgPSAxLAorCQkuZG1hX2NmZyA9IHNkbTg0NV9yZWdkbWEsCisJCS5w ZXJmID0gc2RtODQ1X3BlcmZfZGF0YSwKKwl9OwogfQogCi1zdGF0aWMgaW50IGRwdV9kc19wYXJz ZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1 X2NmZykKLXsKLQlpbnQgcmMsIHByb3BfY291bnRbRFNfUFJPUF9NQVhdLCB0b3BfcHJvcF9jb3Vu dFtEU19UT1BfUFJPUF9NQVhdLCBpOwotCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1 ZSA9IE5VTEwsICp0b3BfcHJvcF92YWx1ZSA9IE5VTEw7Ci0JYm9vbCBwcm9wX2V4aXN0c1tEU19Q Uk9QX01BWF0sIHRvcF9wcm9wX2V4aXN0c1tEU19UT1BfUFJPUF9NQVhdOwotCXUzMiBvZmZfY291 bnQgPSAwLCB0b3Bfb2ZmX2NvdW50ID0gMDsKLQlzdHJ1Y3QgZHB1X2RzX2NmZyAqZHM7Ci0Jc3Ry dWN0IGRwdV9kc190b3BfY2ZnICpkc190b3AgPSBOVUxMOwotCi0JaWYgKCFkcHVfY2ZnKSB7Ci0J CURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290 byBlbmQ7Ci0JfQotCi0JaWYgKCFkcHVfY2ZnLT5tZHBbMF0uaGFzX2Rlc3Rfc2NhbGVyKSB7Ci0J CURQVV9ERUJVRygiZGVzdCBzY2FsZXIgZmVhdHVyZSBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmMg PSAwOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBQYXJzZSB0aGUgZGVzdCBzY2FsZXIgdG9wIHJl Z2lzdGVyIG9mZnNldCBhbmQgY2FwYWJpbGl0aWVzICovCi0JdG9wX3Byb3BfdmFsdWUgPSBremFs bG9jKERTX1RPUF9QUk9QX01BWCAqCi0JCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCF0b3BfcHJvcF92YWx1ZSkgewotCQlyYyA9IC1FTk9NRU07Ci0J CWdvdG8gZW5kOwotCX0KLQotCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCBkc190b3BfcHJv cCwKLQkJCQlBUlJBWV9TSVpFKGRzX3RvcF9wcm9wKSwKLQkJCQl0b3BfcHJvcF9jb3VudCwgJnRv cF9vZmZfY291bnQpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlyYyA9IF9yZWFkX2R0X2Vu dHJ5KG5wLCBkc190b3BfcHJvcCwKLQkJCUFSUkFZX1NJWkUoZHNfdG9wX3Byb3ApLCB0b3BfcHJv cF9jb3VudCwKLQkJCXRvcF9wcm9wX2V4aXN0cywgdG9wX3Byb3BfdmFsdWUpOwotCWlmIChyYykK LQkJZ290byBlbmQ7Ci0KLQkvKiBQYXJzZSB0aGUgb2Zmc2V0IG9mIGVhY2ggZGVzdCBzY2FsZXIg YmxvY2sgKi8KLQlwcm9wX3ZhbHVlID0ga2NhbGxvYyhEU19QUk9QX01BWCwKLQkJCXNpemVvZihz dHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3BfdmFsdWUpIHsK LQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9l bnRyeShucCwgZHNfcHJvcCwgQVJSQVlfU0laRShkc19wcm9wKSwgcHJvcF9jb3VudCwKLQkJJm9m Zl9jb3VudCk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCWRwdV9jZmctPmRzX2NvdW50ID0g b2ZmX2NvdW50OwotCi0JcmMgPSBfcmVhZF9kdF9lbnRyeShucCwgZHNfcHJvcCwgQVJSQVlfU0la RShkc19wcm9wKSwgcHJvcF9jb3VudCwKLQkJcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwotCWlm IChyYykKLQkJZ290byBlbmQ7Ci0KLQlpZiAoIW9mZl9jb3VudCkKLQkJZ290byBlbmQ7Ci0KLQlk c190b3AgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHB1X2RzX3RvcF9jZmcpLCBHRlBfS0VSTkVM KTsKLQlpZiAoIWRzX3RvcCkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZW5kOwotCX0KLQot CWRzX3RvcC0+aWQgPSBEU19UT1A7Ci0Jc25wcmludGYoZHNfdG9wLT5uYW1lLCBEUFVfSFdfQkxL X05BTUVfTEVOLCAiZHNfdG9wXyV1IiwKLQkJZHNfdG9wLT5pZCAtIERTX1RPUCk7Ci0JZHNfdG9w LT5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1ModG9wX3Byb3BfdmFsdWUsIERTX1RPUF9PRkYsIDAp OwotCWRzX3RvcC0+bGVuID0gUFJPUF9WQUxVRV9BQ0NFU1ModG9wX3Byb3BfdmFsdWUsIERTX1RP UF9MRU4sIDApOwotCWRzX3RvcC0+bWF4dXBzY2FsZSA9IE1BWF9VUFNDQUxFX1JBVElPOwotCi0J ZHNfdG9wLT5tYXhpbnB1dHdpZHRoID0gUFJPUF9WQUxVRV9BQ0NFU1ModG9wX3Byb3BfdmFsdWUs Ci0JCQlEU19UT1BfSU5QVVRfTElORVdJRFRILCAwKTsKLQlpZiAoIXRvcF9wcm9wX2V4aXN0c1tE U19UT1BfSU5QVVRfTElORVdJRFRIXSkKLQkJZHNfdG9wLT5tYXhpbnB1dHdpZHRoID0gREVGQVVM VF9EUFVfTElORV9XSURUSDsKLQotCWRzX3RvcC0+bWF4b3V0cHV0d2lkdGggPSBQUk9QX1ZBTFVF X0FDQ0VTUyh0b3BfcHJvcF92YWx1ZSwKLQkJCURTX1RPUF9PVVRQVVRfTElORVdJRFRILCAwKTsK LQlpZiAoIXRvcF9wcm9wX2V4aXN0c1tEU19UT1BfT1VUUFVUX0xJTkVXSURUSF0pCi0JCWRzX3Rv cC0+bWF4b3V0cHV0d2lkdGggPSBERUZBVUxUX0RQVV9PVVRQVVRfTElORV9XSURUSDsKLQotCWZv ciAoaSA9IDA7IGkgPCBvZmZfY291bnQ7IGkrKykgewotCQlkcyA9IGRwdV9jZmctPmRzICsgaTsK LQkJZHMtPnRvcCA9IGRzX3RvcDsKLQkJZHMtPmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9w X3ZhbHVlLCBEU19PRkYsIGkpOwotCQlkcy0+aWQgPSBEU18wICsgaTsKLQkJZHMtPmxlbiA9IFBS T1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIERTX0xFTiwgMCk7Ci0JCXNucHJpbnRmKGRzLT5u YW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAiZHNfJXUiLAotCQkJZHMtPmlkIC0gRFNfMCk7Ci0K LQkJaWYgKCFwcm9wX2V4aXN0c1tEU19MRU5dKQotCQkJZHMtPmxlbiA9IERFRkFVTFRfRFBVX0hX X0JMT0NLX0xFTjsKLQotCQlpZiAoZHB1X2NmZy0+cXNlZWRfdHlwZSA9PSBEUFVfU1NQUF9TQ0FM RVJfUVNFRUQzKQotCQkJc2V0X2JpdChEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzLCAmZHMtPmZlYXR1 cmVzKTsKLQl9Ci0KLWVuZDoKLQlrZnJlZSh0b3BfcHJvcF92YWx1ZSk7Ci0Ja2ZyZWUocHJvcF92 YWx1ZSk7Ci0JcmV0dXJuIHJjOworc3RhdGljIHN0cnVjdCBkcHVfbWRzc19od19jZmdfaGFuZGxl ciBjZmdfaGFuZGxlcltdID0geworCXsgLmh3X3JldiA9IERQVV9IV19WRVJfNDAwLCAuY2ZnX2lu aXQgPSBzZG04NDVfY2ZnX2luaXR9LAorCXsgLmh3X3JldiA9IERQVV9IV19WRVJfNDAxLCAuY2Zn X2luaXQgPSBzZG04NDVfY2ZnX2luaXR9LAogfTsKIAotc3RhdGljIGludCBkcHVfZHNjX3BhcnNl X2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVf Y2ZnKQotewotCWludCByYywgcHJvcF9jb3VudFtNQVhfQkxPQ0tTXSwgaTsKLQlzdHJ1Y3QgZHB1 X3Byb3BfdmFsdWUgKnByb3BfdmFsdWUgPSBOVUxMOwotCWJvb2wgcHJvcF9leGlzdHNbRFNDX1BS T1BfTUFYXTsKLQl1MzIgb2ZmX2NvdW50OwotCXN0cnVjdCBkcHVfZHNjX2NmZyAqZHNjOwotCi0J aWYgKCFkcHVfY2ZnKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7Ci0JCXJj ID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcHJvcF92YWx1ZSA9IGt6YWxsb2MoRFND X1BST1BfTUFYICoKLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVM KTsKLQlpZiAoIXByb3BfdmFsdWUpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9 Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgZHNjX3Byb3AsIEFSUkFZX1NJWkUoZHNj X3Byb3ApLCBwcm9wX2NvdW50LAotCQkmb2ZmX2NvdW50KTsKLQlpZiAocmMpCi0JCWdvdG8gZW5k OwotCi0JZHB1X2NmZy0+ZHNjX2NvdW50ID0gb2ZmX2NvdW50OwotCi0JcmMgPSBfcmVhZF9kdF9l bnRyeShucCwgZHNjX3Byb3AsIEFSUkFZX1NJWkUoZHNjX3Byb3ApLCBwcm9wX2NvdW50LAotCQlw cm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCWZvciAo aSA9IDA7IGkgPCBvZmZfY291bnQ7IGkrKykgewotCQlkc2MgPSBkcHVfY2ZnLT5kc2MgKyBpOwot CQlkc2MtPmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBEU0NfT0ZGLCBpKTsK LQkJZHNjLT5pZCA9IERTQ18wICsgaTsKLQkJZHNjLT5sZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhw cm9wX3ZhbHVlLCBEU0NfTEVOLCAwKTsKLQkJc25wcmludGYoZHNjLT5uYW1lLCBEUFVfSFdfQkxL X05BTUVfTEVOLCAiZHNjXyV1IiwKLQkJCQlkc2MtPmlkIC0gRFNDXzApOwotCi0JCWlmICghcHJv cF9leGlzdHNbRFNDX0xFTl0pCi0JCQlkc2MtPmxlbiA9IERFRkFVTFRfRFBVX0hXX0JMT0NLX0xF TjsKLQl9Ci0KLWVuZDoKLQlrZnJlZShwcm9wX3ZhbHVlKTsKLQlyZXR1cm4gcmM7Ci19OwotCi1z dGF0aWMgaW50IGRwdV9jZG1fcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQlz dHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQotewotCWludCByYywgcHJvcF9jb3VudFtIV19Q Uk9QX01BWF0sIGk7Ci0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlID0gTlVMTDsK LQlib29sIHByb3BfZXhpc3RzW0hXX1BST1BfTUFYXTsKLQl1MzIgb2ZmX2NvdW50OwotCXN0cnVj dCBkcHVfY2RtX2NmZyAqY2RtOwotCi0JaWYgKCFkcHVfY2ZnKSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBhcmd1bWVudFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0J cHJvcF92YWx1ZSA9IGt6YWxsb2MoSFdfUFJPUF9NQVggKgotCQkJc2l6ZW9mKHN0cnVjdCBkcHVf cHJvcF92YWx1ZSksIEdGUF9LRVJORUwpOwotCWlmICghcHJvcF92YWx1ZSkgewotCQlyYyA9IC1F Tk9NRU07Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCBj ZG1fcHJvcCwgQVJSQVlfU0laRShjZG1fcHJvcCksIHByb3BfY291bnQsCi0JCSZvZmZfY291bnQp OwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlkcHVfY2ZnLT5jZG1fY291bnQgPSBvZmZfY291 bnQ7Ci0KLQlyYyA9IF9yZWFkX2R0X2VudHJ5KG5wLCBjZG1fcHJvcCwgQVJSQVlfU0laRShjZG1f cHJvcCksIHByb3BfY291bnQsCi0JCXByb3BfZXhpc3RzLCBwcm9wX3ZhbHVlKTsKLQlpZiAocmMp Ci0JCWdvdG8gZW5kOwotCi0JZm9yIChpID0gMDsgaSA8IG9mZl9jb3VudDsgaSsrKSB7Ci0JCWNk bSA9IGRwdV9jZmctPmNkbSArIGk7Ci0JCWNkbS0+YmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHBy b3BfdmFsdWUsIEhXX09GRiwgaSk7Ci0JCWNkbS0+aWQgPSBDRE1fMCArIGk7Ci0JCXNucHJpbnRm KGNkbS0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgImNkbV8ldSIsCi0JCQkJY2RtLT5pZCAt IENETV8wKTsKLQkJY2RtLT5sZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBIV19M RU4sIDApOwotCi0JCS8qIGludGYzIGFuZCB3YjIgZm9yIGNkbSBibG9jayAqLwotCQljZG0tPndi X2Nvbm5lY3QgPSBkcHVfY2ZnLT53Yl9jb3VudCA/IEJJVChXQl8yKSA6IEJJVCgzMSk7Ci0JCWNk bS0+aW50Zl9jb25uZWN0ID0gZHB1X2NmZy0+aW50Zl9jb3VudCA/IEJJVChJTlRGXzMpIDogQklU KDMxKTsKLQl9Ci0KLWVuZDoKLQlrZnJlZShwcm9wX3ZhbHVlKTsKLQlyZXR1cm4gcmM7Ci19Ci0K LXN0YXRpYyBpbnQgZHB1X3ZiaWZfcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJ CQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQotewotCWludCByYywgcHJvcF9jb3VudFtW QklGX1BST1BfTUFYXSwgaSwgaiwgazsKLQlzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUgKnByb3BfdmFs dWUgPSBOVUxMOwotCWJvb2wgcHJvcF9leGlzdHNbVkJJRl9QUk9QX01BWF07Ci0JdTMyIG9mZl9j b3VudCwgdmJpZl9sZW47Ci0Jc3RydWN0IGRwdV92YmlmX2NmZyAqdmJpZjsKLQotCWlmICghZHB1 X2NmZykgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOwotCQlyYyA9IC1FSU5W QUw7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXByb3BfdmFsdWUgPSBremFsbG9jKFZCSUZfUFJPUF9N QVggKgotCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdGUF9LRVJORUwpOwotCWlm ICghcHJvcF92YWx1ZSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJj ID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCB2YmlmX3Byb3AsIEFSUkFZX1NJWkUodmJpZl9wcm9w KSwKLQkJCXByb3BfY291bnQsICZvZmZfY291bnQpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0K LQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgJnZiaWZfcHJvcFtWQklGX0RZTkFNSUNfT1Rf UkRfTElNSVRdLCAxLAotCQkJJnByb3BfY291bnRbVkJJRl9EWU5BTUlDX09UX1JEX0xJTUlUXSwg TlVMTCk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5 KG5wLCAmdmJpZl9wcm9wW1ZCSUZfRFlOQU1JQ19PVF9XUl9MSU1JVF0sIDEsCi0JCQkmcHJvcF9j b3VudFtWQklGX0RZTkFNSUNfT1RfV1JfTElNSVRdLCBOVUxMKTsKLQlpZiAocmMpCi0JCWdvdG8g ZW5kOwotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZ2YmlmX3Byb3BbVkJJRl9RT1Nf UlRfUkVNQVBdLCAxLAotCQkJJnByb3BfY291bnRbVkJJRl9RT1NfUlRfUkVNQVBdLCBOVUxMKTsK LQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZ2 YmlmX3Byb3BbVkJJRl9RT1NfTlJUX1JFTUFQXSwgMSwKLQkJCSZwcm9wX2NvdW50W1ZCSUZfUU9T X05SVF9SRU1BUF0sIE5VTEwpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlyYyA9IF92YWxp ZGF0ZV9kdF9lbnRyeShucCwgJnZiaWZfcHJvcFtWQklGX01FTVRZUEVfMF0sIDEsCi0JCQkmcHJv cF9jb3VudFtWQklGX01FTVRZUEVfMF0sIE5VTEwpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0K LQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgJnZiaWZfcHJvcFtWQklGX01FTVRZUEVfMV0s IDEsCi0JCQkmcHJvcF9jb3VudFtWQklGX01FTVRZUEVfMV0sIE5VTEwpOwotCWlmIChyYykKLQkJ Z290byBlbmQ7Ci0KLQlkcHVfY2ZnLT52YmlmX2NvdW50ID0gb2ZmX2NvdW50OwotCi0JcmMgPSBf cmVhZF9kdF9lbnRyeShucCwgdmJpZl9wcm9wLCBBUlJBWV9TSVpFKHZiaWZfcHJvcCksIHByb3Bf Y291bnQsCi0JCXByb3BfZXhpc3RzLCBwcm9wX3ZhbHVlKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5k OwotCi0JdmJpZl9sZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBWQklGX0xFTiwg MCk7Ci0JaWYgKCFwcm9wX2V4aXN0c1tWQklGX0xFTl0pCi0JCXZiaWZfbGVuID0gREVGQVVMVF9E UFVfSFdfQkxPQ0tfTEVOOwotCi0JZm9yIChpID0gMDsgaSA8IG9mZl9jb3VudDsgaSsrKSB7Ci0J CXZiaWYgPSBkcHVfY2ZnLT52YmlmICsgaTsKLQkJdmJpZi0+YmFzZSA9IFBST1BfVkFMVUVfQUND RVNTKHByb3BfdmFsdWUsIFZCSUZfT0ZGLCBpKTsKLQkJdmJpZi0+bGVuID0gdmJpZl9sZW47Ci0J CXZiaWYtPmlkID0gVkJJRl8wICsgUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgVkJJRl9J RCwgaSk7Ci0JCXNucHJpbnRmKHZiaWYtPm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4sICJ2Ymlm XyV1IiwKLQkJCQl2YmlmLT5pZCAtIFZCSUZfMCk7Ci0KLQkJRFBVX0RFQlVHKCJ2YmlmOiVkXG4i LCB2YmlmLT5pZCAtIFZCSUZfMCk7Ci0KLQkJdmJpZi0+eGluX2hhbHRfdGltZW91dCA9IFZCSUZf WElOX0hBTFRfVElNRU9VVDsKLQotCQl2YmlmLT5kZWZhdWx0X290X3JkX2xpbWl0ID0gUFJPUF9W QUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCQlWQklGX0RFRkFVTFRfT1RfUkRfTElNSVQsIDAp OwotCQlEUFVfREVCVUcoImRlZmF1bHRfb3RfcmRfbGltaXQ9JXVcbiIsCi0JCQkJdmJpZi0+ZGVm YXVsdF9vdF9yZF9saW1pdCk7Ci0KLQkJdmJpZi0+ZGVmYXVsdF9vdF93cl9saW1pdCA9IFBST1Bf VkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJVkJJRl9ERUZBVUxUX09UX1dSX0xJTUlULCAw KTsKLQkJRFBVX0RFQlVHKCJkZWZhdWx0X290X3dyX2xpbWl0PSV1XG4iLAotCQkJCXZiaWYtPmRl ZmF1bHRfb3Rfd3JfbGltaXQpOwotCi0JCXZiaWYtPmR5bmFtaWNfb3RfcmRfdGJsLmNvdW50ID0K LQkJCQlwcm9wX2NvdW50W1ZCSUZfRFlOQU1JQ19PVF9SRF9MSU1JVF0gLyAyOwotCQlEUFVfREVC VUcoImR5bmFtaWNfb3RfcmRfdGJsLmNvdW50PSV1XG4iLAotCQkJCXZiaWYtPmR5bmFtaWNfb3Rf cmRfdGJsLmNvdW50KTsKLQkJaWYgKHZiaWYtPmR5bmFtaWNfb3RfcmRfdGJsLmNvdW50KSB7Ci0J CQl2YmlmLT5keW5hbWljX290X3JkX3RibC5jZmcgPSBrY2FsbG9jKAotCQkJCXZiaWYtPmR5bmFt aWNfb3RfcmRfdGJsLmNvdW50LAotCQkJCXNpemVvZihzdHJ1Y3QgZHB1X3ZiaWZfZHluYW1pY19v dF9jZmcpLAotCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKCF2YmlmLT5keW5hbWljX290X3JkX3Ri bC5jZmcpIHsKLQkJCQlyYyA9IC1FTk9NRU07Ci0JCQkJZ290byBlbmQ7Ci0JCQl9Ci0JCX0KLQot CQlmb3IgKGogPSAwLCBrID0gMDsgaiA8IHZiaWYtPmR5bmFtaWNfb3RfcmRfdGJsLmNvdW50OyBq KyspIHsKLQkJCXZiaWYtPmR5bmFtaWNfb3RfcmRfdGJsLmNmZ1tqXS5wcHMgPSAodTY0KQotCQkJ CVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJVkJJRl9EWU5BTUlDX09UX1JEX0xJ TUlULCBrKyspOwotCQkJdmJpZi0+ZHluYW1pY19vdF9yZF90YmwuY2ZnW2pdLm90X2xpbWl0ID0K LQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJCVZCSUZfRFlOQU1JQ19PVF9S RF9MSU1JVCwgaysrKTsKLQkJCURQVV9ERUJVRygiZHluYW1pY19vdF9yZF90YmxbJWRdLmNmZz08 JWxsdSAldT5cbiIsIGosCi0JCQkJdmJpZi0+ZHluYW1pY19vdF9yZF90YmwuY2ZnW2pdLnBwcywK LQkJCQl2YmlmLT5keW5hbWljX290X3JkX3RibC5jZmdbal0ub3RfbGltaXQpOwotCQl9Ci0KLQkJ dmJpZi0+ZHluYW1pY19vdF93cl90YmwuY291bnQgPQotCQkJCXByb3BfY291bnRbVkJJRl9EWU5B TUlDX09UX1dSX0xJTUlUXSAvIDI7Ci0JCURQVV9ERUJVRygiZHluYW1pY19vdF93cl90YmwuY291 bnQ9JXVcbiIsCi0JCQkJdmJpZi0+ZHluYW1pY19vdF93cl90YmwuY291bnQpOwotCQlpZiAodmJp Zi0+ZHluYW1pY19vdF93cl90YmwuY291bnQpIHsKLQkJCXZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJs LmNmZyA9IGtjYWxsb2MoCi0JCQkJdmJpZi0+ZHluYW1pY19vdF93cl90YmwuY291bnQsCi0JCQkJ c2l6ZW9mKHN0cnVjdCBkcHVfdmJpZl9keW5hbWljX290X2NmZyksCi0JCQkJR0ZQX0tFUk5FTCk7 Ci0JCQlpZiAoIXZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNmZykgewotCQkJCXJjID0gLUVOT01F TTsKLQkJCQlnb3RvIGVuZDsKLQkJCX0KLQkJfQotCi0JCWZvciAoaiA9IDAsIGsgPSAwOyBqIDwg dmJpZi0+ZHluYW1pY19vdF93cl90YmwuY291bnQ7IGorKykgewotCQkJdmJpZi0+ZHluYW1pY19v dF93cl90YmwuY2ZnW2pdLnBwcyA9ICh1NjQpCi0JCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92 YWx1ZSwKLQkJCQlWQklGX0RZTkFNSUNfT1RfV1JfTElNSVQsIGsrKyk7Ci0JCQl2YmlmLT5keW5h bWljX290X3dyX3RibC5jZmdbal0ub3RfbGltaXQgPQotCQkJCVBST1BfVkFMVUVfQUNDRVNTKHBy b3BfdmFsdWUsCi0JCQkJVkJJRl9EWU5BTUlDX09UX1dSX0xJTUlULCBrKyspOwotCQkJRFBVX0RF QlVHKCJkeW5hbWljX290X3dyX3RibFslZF0uY2ZnPTwlbGx1ICV1PlxuIiwgaiwKLQkJCQl2Ymlm LT5keW5hbWljX290X3dyX3RibC5jZmdbal0ucHBzLAotCQkJCXZiaWYtPmR5bmFtaWNfb3Rfd3Jf dGJsLmNmZ1tqXS5vdF9saW1pdCk7Ci0JCX0KLQotCQlpZiAodmJpZi0+ZGVmYXVsdF9vdF9yZF9s aW1pdCB8fCB2YmlmLT5kZWZhdWx0X290X3dyX2xpbWl0IHx8Ci0JCQkJdmJpZi0+ZHluYW1pY19v dF9yZF90YmwuY291bnQgfHwKLQkJCQl2YmlmLT5keW5hbWljX290X3dyX3RibC5jb3VudCkKLQkJ CXNldF9iaXQoRFBVX1ZCSUZfUU9TX09UTElNLCAmdmJpZi0+ZmVhdHVyZXMpOwotCi0JCXZiaWYt PnFvc19ydF90YmwubnByaW9yaXR5X2x2bCA9Ci0JCQkJcHJvcF9jb3VudFtWQklGX1FPU19SVF9S RU1BUF07Ci0JCURQVV9ERUJVRygicW9zX3J0X3RibC5ucHJpb3JpdHlfbHZsPSV1XG4iLAotCQkJ CXZiaWYtPnFvc19ydF90YmwubnByaW9yaXR5X2x2bCk7Ci0JCWlmICh2YmlmLT5xb3NfcnRfdGJs Lm5wcmlvcml0eV9sdmwgPT0gZHB1X2NmZy0+dmJpZl9xb3Nfbmx2bCkgewotCQkJdmJpZi0+cW9z X3J0X3RibC5wcmlvcml0eV9sdmwgPSBrY2FsbG9jKAotCQkJCXZiaWYtPnFvc19ydF90YmwubnBy aW9yaXR5X2x2bCwgc2l6ZW9mKHUzMiksCi0JCQkJR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIXZiaWYt PnFvc19ydF90YmwucHJpb3JpdHlfbHZsKSB7Ci0JCQkJcmMgPSAtRU5PTUVNOwotCQkJCWdvdG8g ZW5kOwotCQkJfQotCQl9IGVsc2UgaWYgKHZiaWYtPnFvc19ydF90YmwubnByaW9yaXR5X2x2bCkg ewotCQkJdmJpZi0+cW9zX3J0X3RibC5ucHJpb3JpdHlfbHZsID0gMDsKLQkJCXZiaWYtPnFvc19y dF90YmwucHJpb3JpdHlfbHZsID0gTlVMTDsKLQkJCURQVV9FUlJPUigiaW52YWxpZCBxb3MgcnQg dGFibGVcbiIpOwotCQl9Ci0KLQkJZm9yIChqID0gMDsgaiA8IHZiaWYtPnFvc19ydF90YmwubnBy aW9yaXR5X2x2bDsgaisrKSB7Ci0JCQl2YmlmLT5xb3NfcnRfdGJsLnByaW9yaXR5X2x2bFtqXSA9 Ci0JCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCQkJCVZCSUZfUU9TX1JUX1JF TUFQLCBqKTsKLQkJCURQVV9ERUJVRygibHZsWyVkXT0ldVxuIiwgaiwKLQkJCQkJdmJpZi0+cW9z X3J0X3RibC5wcmlvcml0eV9sdmxbal0pOwotCQl9Ci0KLQkJdmJpZi0+cW9zX25ydF90YmwubnBy aW9yaXR5X2x2bCA9Ci0JCQkJcHJvcF9jb3VudFtWQklGX1FPU19OUlRfUkVNQVBdOwotCQlEUFVf REVCVUcoInFvc19ucnRfdGJsLm5wcmlvcml0eV9sdmw9JXVcbiIsCi0JCQkJdmJpZi0+cW9zX25y dF90YmwubnByaW9yaXR5X2x2bCk7Ci0KLQkJaWYgKHZiaWYtPnFvc19ucnRfdGJsLm5wcmlvcml0 eV9sdmwgPT0gZHB1X2NmZy0+dmJpZl9xb3Nfbmx2bCkgewotCQkJdmJpZi0+cW9zX25ydF90Ymwu cHJpb3JpdHlfbHZsID0ga2NhbGxvYygKLQkJCQl2YmlmLT5xb3NfbnJ0X3RibC5ucHJpb3JpdHlf bHZsLCBzaXplb2YodTMyKSwKLQkJCQlHRlBfS0VSTkVMKTsKLQkJCWlmICghdmJpZi0+cW9zX25y dF90YmwucHJpb3JpdHlfbHZsKSB7Ci0JCQkJcmMgPSAtRU5PTUVNOwotCQkJCWdvdG8gZW5kOwot CQkJfQotCQl9IGVsc2UgaWYgKHZiaWYtPnFvc19ucnRfdGJsLm5wcmlvcml0eV9sdmwpIHsKLQkJ CXZiaWYtPnFvc19ucnRfdGJsLm5wcmlvcml0eV9sdmwgPSAwOwotCQkJdmJpZi0+cW9zX25ydF90 YmwucHJpb3JpdHlfbHZsID0gTlVMTDsKLQkJCURQVV9FUlJPUigiaW52YWxpZCBxb3MgbnJ0IHRh YmxlXG4iKTsKLQkJfQotCi0JCWZvciAoaiA9IDA7IGogPCB2YmlmLT5xb3NfbnJ0X3RibC5ucHJp b3JpdHlfbHZsOyBqKyspIHsKLQkJCXZiaWYtPnFvc19ucnRfdGJsLnByaW9yaXR5X2x2bFtqXSA9 Ci0JCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCQkJCVZCSUZfUU9TX05SVF9S RU1BUCwgaik7Ci0JCQlEUFVfREVCVUcoImx2bFslZF09JXVcbiIsIGosCi0JCQkJCXZiaWYtPnFv c19ucnRfdGJsLnByaW9yaXR5X2x2bFtqXSk7Ci0JCX0KLQotCQlpZiAodmJpZi0+cW9zX3J0X3Ri bC5ucHJpb3JpdHlfbHZsIHx8Ci0JCQkJdmJpZi0+cW9zX25ydF90YmwubnByaW9yaXR5X2x2bCkK LQkJCXNldF9iaXQoRFBVX1ZCSUZfUU9TX1JFTUFQLCAmdmJpZi0+ZmVhdHVyZXMpOwotCi0JCXZi aWYtPm1lbXR5cGVfY291bnQgPSBwcm9wX2NvdW50W1ZCSUZfTUVNVFlQRV8wXSArCi0JCQkJCXBy b3BfY291bnRbVkJJRl9NRU1UWVBFXzFdOwotCQlpZiAodmJpZi0+bWVtdHlwZV9jb3VudCA+IE1B WF9YSU5fQ09VTlQpIHsKLQkJCXZiaWYtPm1lbXR5cGVfY291bnQgPSAwOwotCQkJRFBVX0VSUk9S KCJ0b28gbWFueSBtZW10eXBlIGRlZnMsIGlnbm9yaW5nIGVudHJpZXNcbiIpOwotCQl9Ci0JCWZv ciAoaiA9IDAsIGsgPSAwOyBqIDwgcHJvcF9jb3VudFtWQklGX01FTVRZUEVfMF07IGorKykKLQkJ CXZiaWYtPm1lbXR5cGVbaysrXSA9IFBST1BfVkFMVUVfQUNDRVNTKAotCQkJCQlwcm9wX3ZhbHVl LCBWQklGX01FTVRZUEVfMCwgaik7Ci0JCWZvciAoaiA9IDA7IGogPCBwcm9wX2NvdW50W1ZCSUZf TUVNVFlQRV8xXTsgaisrKQotCQkJdmJpZi0+bWVtdHlwZVtrKytdID0gUFJPUF9WQUxVRV9BQ0NF U1MoCi0JCQkJCXByb3BfdmFsdWUsIFZCSUZfTUVNVFlQRV8xLCBqKTsKLQl9Ci0KLWVuZDoKLQlr ZnJlZShwcm9wX3ZhbHVlKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3BwX3Bh cnNlX2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9j ZmcpCi17Ci0JaW50IHJjLCBwcm9wX2NvdW50W1BQX1BST1BfTUFYXSwgaTsKLQlzdHJ1Y3QgZHB1 X3Byb3BfdmFsdWUgKnByb3BfdmFsdWUgPSBOVUxMOwotCWJvb2wgcHJvcF9leGlzdHNbUFBfUFJP UF9NQVhdOwotCXUzMiBvZmZfY291bnQ7Ci0Jc3RydWN0IGRwdV9waW5ncG9uZ19jZmcgKnBwOwot CXN0cnVjdCBkcHVfcGluZ3Bvbmdfc3ViX2Jsa3MgKnNibGs7Ci0KLQlpZiAoIWRwdV9jZmcpIHsK LQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQln b3RvIGVuZDsKLQl9Ci0KLQlwcm9wX3ZhbHVlID0ga3phbGxvYyhQUF9QUk9QX01BWCAqCi0JCQlz aXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcm9wX3Zh bHVlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmMgPSBfdmFsaWRh dGVfZHRfZW50cnkobnAsIHBwX3Byb3AsIEFSUkFZX1NJWkUocHBfcHJvcCksIHByb3BfY291bnQs Ci0JCSZvZmZfY291bnQpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlkcHVfY2ZnLT5waW5n cG9uZ19jb3VudCA9IG9mZl9jb3VudDsKLQotCXJjID0gX3JlYWRfZHRfZW50cnkobnAsIHBwX3By b3AsIEFSUkFZX1NJWkUocHBfcHJvcCksIHByb3BfY291bnQsCi0JCXByb3BfZXhpc3RzLCBwcm9w X3ZhbHVlKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JZm9yIChpID0gMDsgaSA8IG9mZl9j b3VudDsgaSsrKSB7Ci0JCXBwID0gZHB1X2NmZy0+cGluZ3BvbmcgKyBpOwotCQlzYmxrID0ga3ph bGxvYyhzaXplb2YoKnNibGspLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzYmxrKSB7Ci0JCQlyYyA9 IC1FTk9NRU07Ci0JCQkvKiBjYXRhbG9nIGRlaW5pdCB3aWxsIHJlbGVhc2UgdGhlIGFsbG9jYXRl ZCBibG9ja3MgKi8KLQkJCWdvdG8gZW5kOwotCQl9Ci0JCXBwLT5zYmxrID0gc2JsazsKLQotCQlw cC0+YmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFBQX09GRiwgaSk7Ci0JCXBw LT5pZCA9IFBJTkdQT05HXzAgKyBpOwotCQlzbnByaW50ZihwcC0+bmFtZSwgRFBVX0hXX0JMS19O QU1FX0xFTiwgInBpbmdwb25nXyV1IiwKLQkJCQlwcC0+aWQgLSBQSU5HUE9OR18wKTsKLQkJcHAt PmxlbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFBQX0xFTiwgMCk7Ci0KLQkJc2Js ay0+dGUuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFRFX09GRiwgaSk7Ci0J CXNibGstPnRlLmlkID0gRFBVX1BJTkdQT05HX1RFOwotCQlzbnByaW50ZihzYmxrLT50ZS5uYW1l LCBEUFVfSFdfQkxLX05BTUVfTEVOLCAidGVfJXUiLAotCQkJCXBwLT5pZCAtIFBJTkdQT05HXzAp OwotCQlzZXRfYml0KERQVV9QSU5HUE9OR19URSwgJnBwLT5mZWF0dXJlcyk7Ci0KLQkJc2Jsay0+ dGUyLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBURTJfT0ZGLCBpKTsKLQkJ aWYgKHNibGstPnRlMi5iYXNlKSB7Ci0JCQlzYmxrLT50ZTIuaWQgPSBEUFVfUElOR1BPTkdfVEUy OwotCQkJc25wcmludGYoc2Jsay0+dGUyLm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4sICJ0ZTJf JXUiLAotCQkJCQlwcC0+aWQgLSBQSU5HUE9OR18wKTsKLQkJCXNldF9iaXQoRFBVX1BJTkdQT05H X1RFMiwgJnBwLT5mZWF0dXJlcyk7Ci0JCQlzZXRfYml0KERQVV9QSU5HUE9OR19TUExJVCwgJnBw LT5mZWF0dXJlcyk7Ci0JCX0KLQotCQlpZiAoUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwg UFBfU0xBVkUsIGkpKQotCQkJc2V0X2JpdChEUFVfUElOR1BPTkdfU0xBVkUsICZwcC0+ZmVhdHVy ZXMpOwotCi0JCXNibGstPmRzYy5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwg RFNDX09GRiwgaSk7Ci0JCWlmIChzYmxrLT5kc2MuYmFzZSkgewotCQkJc2Jsay0+ZHNjLmlkID0g RFBVX1BJTkdQT05HX0RTQzsKLQkJCXNucHJpbnRmKHNibGstPmRzYy5uYW1lLCBEUFVfSFdfQkxL X05BTUVfTEVOLCAiZHNjXyV1IiwKLQkJCQkJcHAtPmlkIC0gUElOR1BPTkdfMCk7Ci0JCQlzZXRf Yml0KERQVV9QSU5HUE9OR19EU0MsICZwcC0+ZmVhdHVyZXMpOwotCQl9Ci0KLQkJc2Jsay0+ZGl0 aGVyLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBESVRIRVJfT0ZGLAotCQkJ CQkJCWkpOwotCQlpZiAoc2Jsay0+ZGl0aGVyLmJhc2UpIHsKLQkJCXNibGstPmRpdGhlci5pZCA9 IERQVV9QSU5HUE9OR19ESVRIRVI7Ci0JCQlzbnByaW50ZihzYmxrLT5kaXRoZXIubmFtZSwgRFBV X0hXX0JMS19OQU1FX0xFTiwKLQkJCQkJImRpdGhlcl8ldSIsIHBwLT5pZCk7Ci0JCQlzZXRfYml0 KERQVV9QSU5HUE9OR19ESVRIRVIsICZwcC0+ZmVhdHVyZXMpOwotCQl9Ci0JCXNibGstPmRpdGhl ci5sZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBESVRIRVJfTEVOLCAwKTsKLQkJ c2Jsay0+ZGl0aGVyLnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBESVRI RVJfVkVSLAotCQkJCQkJCQkwKTsKLQl9Ci0KLWVuZDoKLQlrZnJlZShwcm9wX3ZhbHVlKTsKLQly ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vfbm9k ZSAqbnAsIHN0cnVjdCBkcHVfbWRzc19jZmcgKmNmZykKLXsKLQlpbnQgcmMsIGRtYV9yYywgbGVu LCBwcm9wX2NvdW50W0RQVV9QUk9QX01BWF07Ci0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9w X3ZhbHVlID0gTlVMTDsKLQlib29sIHByb3BfZXhpc3RzW0RQVV9QUk9QX01BWF07Ci0JY29uc3Qg Y2hhciAqdHlwZTsKLQotCWlmICghY2ZnKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVu dFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcHJvcF92YWx1ZSA9 IGt6YWxsb2MoRFBVX1BST1BfTUFYICoKLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUp LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3BfdmFsdWUpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQln b3RvIGVuZDsKLQl9Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgZHB1X3Byb3AsIEFS UkFZX1NJWkUoZHB1X3Byb3ApLCBwcm9wX2NvdW50LAotCQkmbGVuKTsKLQlpZiAocmMpCi0JCWdv dG8gZW5kOwotCi0JcmMgPSBfcmVhZF9kdF9lbnRyeShucCwgZHB1X3Byb3AsIEFSUkFZX1NJWkUo ZHB1X3Byb3ApLCBwcm9wX2NvdW50LAotCQlwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Ci0JaWYg KHJjKQotCQlnb3RvIGVuZDsKLQotCWNmZy0+bWRzc19jb3VudCA9IDE7Ci0JY2ZnLT5tZHNzWzBd LmJhc2UgPSBNRFNTX0JBU0VfT0ZGU0VUOwotCWNmZy0+bWRzc1swXS5pZCA9IE1EUF9UT1A7Ci0J c25wcmludGYoY2ZnLT5tZHNzWzBdLm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4sICJtZHNzXyV1 IiwKLQkJCWNmZy0+bWRzc1swXS5pZCAtIE1EUF9UT1ApOwotCi0JY2ZnLT5tZHBfY291bnQgPSAx OwotCWNmZy0+bWRwWzBdLmlkID0gTURQX1RPUDsKLQlzbnByaW50ZihjZmctPm1kcFswXS5uYW1l LCBEUFVfSFdfQkxLX05BTUVfTEVOLCAidG9wXyV1IiwKLQkJY2ZnLT5tZHBbMF0uaWQgLSBNRFBf VE9QKTsKLQljZmctPm1kcFswXS5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwg RFBVX09GRiwgMCk7Ci0JY2ZnLT5tZHBbMF0ubGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92 YWx1ZSwgRFBVX0xFTiwgMCk7Ci0JaWYgKCFwcm9wX2V4aXN0c1tEUFVfTEVOXSkKLQkJY2ZnLT5t ZHBbMF0ubGVuID0gREVGQVVMVF9EUFVfSFdfQkxPQ0tfTEVOOwotCi0JY2ZnLT5tYXhfc3NwcF9s aW5ld2lkdGggPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJU1NQUF9MSU5FV0lE VEgsIDApOwotCWlmICghcHJvcF9leGlzdHNbU1NQUF9MSU5FV0lEVEhdKQotCQljZmctPm1heF9z c3BwX2xpbmV3aWR0aCA9IERFRkFVTFRfRFBVX0xJTkVfV0lEVEg7Ci0KLQljZmctPm1heF9taXhl cl93aWR0aCA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlNSVhFUl9MSU5FV0lE VEgsIDApOwotCWlmICghcHJvcF9leGlzdHNbTUlYRVJfTElORVdJRFRIXSkKLQkJY2ZnLT5tYXhf bWl4ZXJfd2lkdGggPSBERUZBVUxUX0RQVV9MSU5FX1dJRFRIOwotCi0JY2ZnLT5tYXhfbWl4ZXJf YmxlbmRzdGFnZXMgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJTUlYRVJfQkxF TkQsIDApOwotCWlmICghcHJvcF9leGlzdHNbTUlYRVJfQkxFTkRdKQotCQljZmctPm1heF9taXhl cl9ibGVuZHN0YWdlcyA9IERFRkFVTFRfRFBVX01JWEVSX0JMRU5EU1RBR0VTOwotCi0JY2ZnLT5t YXhfd2JfbGluZXdpZHRoID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgV0JfTElORVdJ RFRILCAwKTsKLQlpZiAoIXByb3BfZXhpc3RzW1dCX0xJTkVXSURUSF0pCi0JCWNmZy0+bWF4X3di X2xpbmV3aWR0aCA9IERFRkFVTFRfRFBVX0xJTkVfV0lEVEg7Ci0KLQljZmctPm1kcFswXS5oaWdo ZXN0X2JhbmtfYml0ID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCUJBTktfQklU LCAwKTsKLQlpZiAoIXByb3BfZXhpc3RzW0JBTktfQklUXSkKLQkJY2ZnLT5tZHBbMF0uaGlnaGVz dF9iYW5rX2JpdCA9IERFRkFVTFRfRFBVX0hJR0hFU1RfQkFOS19CSVQ7Ci0KLQljZmctPnVid2Nf dmVyc2lvbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFVCV0NfVkVSU0lPTiwgMCk7 Ci0JaWYgKCFwcm9wX2V4aXN0c1tVQldDX1ZFUlNJT05dKQotCQljZmctPnVid2NfdmVyc2lvbiA9 IERFRkFVTFRfRFBVX1VCV0NfVkVSU0lPTjsKLQotCWNmZy0+bWRwWzBdLnVid2Nfc3RhdGljID0g UFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgVUJXQ19TVEFUSUMsIDApOwotCWlmICghcHJv cF9leGlzdHNbVUJXQ19TVEFUSUNdKQotCQljZmctPm1kcFswXS51YndjX3N0YXRpYyA9IERFRkFV TFRfRFBVX1VCV0NfU1RBVElDOwotCi0JY2ZnLT5tZHBbMF0udWJ3Y19zd2l6emxlID0gUFJPUF9W QUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCVVCV0NfU1dJWlpMRSwgMCk7Ci0JaWYgKCFwcm9w X2V4aXN0c1tVQldDX1NXSVpaTEVdKQotCQljZmctPm1kcFswXS51YndjX3N3aXp6bGUgPSBERUZB VUxUX0RQVV9VQldDX1NXSVpaTEU7Ci0KLQljZmctPm1kcFswXS5oYXNfZGVzdF9zY2FsZXIgPQot CQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBERVNUX1NDQUxFUiwgMCk7Ci0KLQlyYyA9 IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBkcHVfcHJvcFtRU0VFRF9UWVBFXS5wcm9wX25h bWUsICZ0eXBlKTsKLQlpZiAoIXJjICYmICFzdHJjbXAodHlwZSwgInFzZWVkdjMiKSkgewotCQlj ZmctPnFzZWVkX3R5cGUgPSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzOwotCX0gZWxzZSBpZiAoIXJj ICYmICFzdHJjbXAodHlwZSwgInFzZWVkdjIiKSkgewotCQljZmctPnFzZWVkX3R5cGUgPSBEUFVf U1NQUF9TQ0FMRVJfUVNFRUQyOwotCX0gZWxzZSBpZiAocmMpIHsKLQkJRFBVX0RFQlVHKCJpbnZh bGlkIFFTRUVEIGNvbmZpZ3VyYXRpb25cbiIpOwotCQlyYyA9IDA7Ci0JfQotCi0JcmMgPSBvZl9w cm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgZHB1X3Byb3BbQ1NDX1RZUEVdLnByb3BfbmFtZSwgJnR5 cGUpOwotCWlmICghcmMgJiYgIXN0cmNtcCh0eXBlLCAiY3NjIikpIHsKLQkJY2ZnLT5jc2NfdHlw ZSA9IERQVV9TU1BQX0NTQzsKLQl9IGVsc2UgaWYgKCFyYyAmJiAhc3RyY21wKHR5cGUsICJjc2Mt MTBiaXQiKSkgewotCQljZmctPmNzY190eXBlID0gRFBVX1NTUFBfQ1NDXzEwQklUOwotCX0gZWxz ZSBpZiAocmMpIHsKLQkJRFBVX0RFQlVHKCJpbnZhbGlkIGNzYyBjb25maWd1cmF0aW9uXG4iKTsK LQkJcmMgPSAwOwotCX0KLQotCS8qCi0JICogQ3VycmVudCBEUFUgc3VwcG9ydCBvbmx5IFNtYXJ0 IERNQSAyLjAuCi0JICogTm8gc3VwcG9ydCBmb3IgU21hcnQgRE1BIDEuMCB5ZXQuCi0JICovCi0J Y2ZnLT5zbWFydF9kbWFfcmV2ID0gMDsKLQlkbWFfcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmlu ZyhucCwgZHB1X3Byb3BbU01BUlRfRE1BX1JFVl0ucHJvcF9uYW1lLAotCQkJJnR5cGUpOwotCWlm ICghZG1hX3JjICYmICFzdHJjbXAodHlwZSwgInNtYXJ0X2RtYV92MiIpKSB7Ci0JCWNmZy0+c21h cnRfZG1hX3JldiA9IERQVV9TU1BQX1NNQVJUX0RNQV9WMjsKLQl9IGVsc2UgaWYgKCFkbWFfcmMg JiYgIXN0cmNtcCh0eXBlLCAic21hcnRfZG1hX3YxIikpIHsKLQkJRFBVX0VSUk9SKCJzbWFydCBk bWEgMS4wIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRFBVXG4iKTsKLQkJY2ZnLT5zbWFydF9kbWFfcmV2 ID0gMDsKLQl9Ci0KLQljZmctPmhhc19zcmNfc3BsaXQgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9w X3ZhbHVlLCBTUkNfU1BMSVQsIDApOwotCWNmZy0+aGFzX2RpbV9sYXllciA9IFBST1BfVkFMVUVf QUNDRVNTKHByb3BfdmFsdWUsIERJTV9MQVlFUiwgMCk7Ci0JY2ZnLT5oYXNfaWRsZV9wYyA9IFBS T1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIElETEVfUEMsIDApOwotZW5kOgotCWtmcmVlKHBy b3BfdmFsdWUpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkcHVfcGFyc2VfcmVnX2Rt YV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVf Y2ZnKQotewotCXUzMiB2YWw7Ci0JaW50IHJjID0gMDsKLQlpbnQgaSA9IDA7Ci0KLQlkcHVfY2Zn LT5yZWdfZG1hX2NvdW50ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgUkVHX0RNQV9QUk9QX01BWDsg aSsrKSB7Ci0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIHJlZ19kbWFfcHJvcFtpXS5w cm9wX25hbWUsCi0JCQkJJnZhbCk7Ci0JCWlmIChyYykKLQkJCWJyZWFrOwotCQlzd2l0Y2ggKGkp IHsKLQkJY2FzZSBSRUdfRE1BX09GRjoKLQkJCWRwdV9jZmctPmRtYV9jZmcuYmFzZSA9IHZhbDsK LQkJCWJyZWFrOwotCQljYXNlIFJFR19ETUFfVkVSU0lPTjoKLQkJCWRwdV9jZmctPmRtYV9jZmcu dmVyc2lvbiA9IHZhbDsKLQkJCWJyZWFrOwotCQljYXNlIFJFR19ETUFfVFJJR0dFUl9PRkY6Ci0J CQlkcHVfY2ZnLT5kbWFfY2ZnLnRyaWdnZXJfc2VsX29mZiA9IHZhbDsKLQkJCWJyZWFrOwotCQlk ZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKCFyYyAmJiBpID09IFJFR19ETUFfUFJP UF9NQVgpCi0JCWRwdV9jZmctPnJlZ19kbWFfY291bnQgPSAxOwotCS8qIHJlZyBkbWEgaXMgb3B0 aW9uYWwgZmVhdHVyZSBoZW5jZSByZXR1cm4gMCAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMg aW50IGRwdV9wZXJmX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBkcHVf bWRzc19jZmcgKmNmZykKLXsKLQlpbnQgcmMsIGxlbiwgcHJvcF9jb3VudFtQRVJGX1BST1BfTUFY XTsKLQlzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUgKnByb3BfdmFsdWUgPSBOVUxMOwotCWJvb2wgcHJv cF9leGlzdHNbUEVSRl9QUk9QX01BWF07Ci0JY29uc3QgY2hhciAqc3RyID0gTlVMTDsKLQlpbnQg aiwgazsKLQotCWlmICghY2ZnKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7 Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcHJvcF92YWx1ZSA9IGt6YWxs b2MoUEVSRl9QUk9QX01BWCAqCi0JCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQ X0tFUk5FTCk7Ci0JaWYgKCFwcm9wX3ZhbHVlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBl bmQ7Ci0JfQotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsIGRwdV9wZXJmX3Byb3AsIEFS UkFZX1NJWkUoZHB1X3BlcmZfcHJvcCksCi0JCQlwcm9wX2NvdW50LCAmbGVuKTsKLQlpZiAocmMp Ci0JCWdvdG8gZnJlZXByb3A7Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgJmRwdV9w ZXJmX3Byb3BbUEVSRl9EQU5HRVJfTFVUXSwgMSwKLQkJCSZwcm9wX2NvdW50W1BFUkZfREFOR0VS X0xVVF0sIE5VTEwpOwotCWlmIChyYykKLQkJZ290byBmcmVlcHJvcDsKLQotCXJjID0gX3ZhbGlk YXRlX2R0X2VudHJ5KG5wLCAmZHB1X3BlcmZfcHJvcFtQRVJGX1NBRkVfTFVUXSwgMSwKLQkJCSZw cm9wX2NvdW50W1BFUkZfU0FGRV9MVVRdLCBOVUxMKTsKLQlpZiAocmMpCi0JCWdvdG8gZnJlZXBy b3A7Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgJmRwdV9wZXJmX3Byb3BbUEVSRl9R T1NfTFVUX0xJTkVBUl0sIDEsCi0JCQkmcHJvcF9jb3VudFtQRVJGX1FPU19MVVRfTElORUFSXSwg TlVMTCk7Ci0JaWYgKHJjKQotCQlnb3RvIGZyZWVwcm9wOwotCi0JcmMgPSBfdmFsaWRhdGVfZHRf ZW50cnkobnAsICZkcHVfcGVyZl9wcm9wW1BFUkZfUU9TX0xVVF9NQUNST1RJTEVdLCAxLAotCQkJ JnByb3BfY291bnRbUEVSRl9RT1NfTFVUX01BQ1JPVElMRV0sIE5VTEwpOwotCWlmIChyYykKLQkJ Z290byBmcmVlcHJvcDsKLQotCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCAmZHB1X3BlcmZf cHJvcFtQRVJGX1FPU19MVVRfTlJUXSwgMSwKLQkJCSZwcm9wX2NvdW50W1BFUkZfUU9TX0xVVF9O UlRdLCBOVUxMKTsKLQlpZiAocmMpCi0JCWdvdG8gZnJlZXByb3A7Ci0KLQlyYyA9IF92YWxpZGF0 ZV9kdF9lbnRyeShucCwgJmRwdV9wZXJmX3Byb3BbUEVSRl9RT1NfTFVUX0NXQl0sIDEsCi0JCQkm cHJvcF9jb3VudFtQRVJGX1FPU19MVVRfQ1dCXSwgTlVMTCk7Ci0JaWYgKHJjKQotCQlnb3RvIGZy ZWVwcm9wOwotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZkcHVfcGVyZl9wcm9wW1BF UkZfQ0RQX1NFVFRJTkddLCAxLAotCQkJJnByb3BfY291bnRbUEVSRl9DRFBfU0VUVElOR10sIE5V TEwpOwotCWlmIChyYykKLQkJZ290byBmcmVlcHJvcDsKLQotCXJjID0gX3JlYWRfZHRfZW50cnko bnAsIGRwdV9wZXJmX3Byb3AsIEFSUkFZX1NJWkUoZHB1X3BlcmZfcHJvcCksCi0JCQlwcm9wX2Nv dW50LCBwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Ci0JaWYgKHJjKQotCQlnb3RvIGZyZWVwcm9w OwotCi0JY2ZnLT5wZXJmLm1heF9id19sb3cgPQotCQkJcHJvcF9leGlzdHNbUEVSRl9NQVhfQldf TE9XXSA/Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBQRVJGX01BWF9CV19MT1cs IDApIDoKLQkJCURFRkFVTFRfTUFYX0JXX0xPVzsKLQljZmctPnBlcmYubWF4X2J3X2hpZ2ggPQot CQkJcHJvcF9leGlzdHNbUEVSRl9NQVhfQldfSElHSF0gPwotCQkJUFJPUF9WQUxVRV9BQ0NFU1Mo cHJvcF92YWx1ZSwgUEVSRl9NQVhfQldfSElHSCwgMCkgOgotCQkJREVGQVVMVF9NQVhfQldfSElH SDsKLQljZmctPnBlcmYubWluX2NvcmVfaWIgPQotCQkJcHJvcF9leGlzdHNbUEVSRl9NSU5fQ09S RV9JQl0gPwotCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgUEVSRl9NSU5fQ09SRV9J QiwgMCkgOgotCQkJREVGQVVMVF9NQVhfQldfTE9XOwotCWNmZy0+cGVyZi5taW5fbGxjY19pYiA9 Ci0JCQlwcm9wX2V4aXN0c1tQRVJGX01JTl9MTENDX0lCXSA/Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VT Uyhwcm9wX3ZhbHVlLCBQRVJGX01JTl9MTENDX0lCLCAwKSA6Ci0JCQlERUZBVUxUX01BWF9CV19M T1c7Ci0JY2ZnLT5wZXJmLm1pbl9kcmFtX2liID0KLQkJCXByb3BfZXhpc3RzW1BFUkZfTUlOX0RS QU1fSUJdID8KLQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFBFUkZfTUlOX0RSQU1f SUIsIDApIDoKLQkJCURFRkFVTFRfTUFYX0JXX0xPVzsKLQotCS8qCi0JICogVGhlIGZvbGxvd2lu ZyBwZXJmb3JtYW5jZSBwYXJhbWV0ZXJzIChlLmcuIGNvcmVfaWJfZmYpIGFyZQotCSAqIG1hcHBl ZCBkaXJlY3RseSBhcyBkZXZpY2UgdHJlZSBzdHJpbmcgY29uc3RhbnRzLgotCSAqLwotCXJjID0g b2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsCi0JCQlkcHVfcGVyZl9wcm9wW1BFUkZfQ09SRV9J Ql9GRl0ucHJvcF9uYW1lLCAmc3RyKTsKLQljZmctPnBlcmYuY29yZV9pYl9mZiA9IHJjID8gREVG QVVMVF9DT1JFX0lCX0ZGIDogc3RyOwotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAs Ci0JCQlkcHVfcGVyZl9wcm9wW1BFUkZfQ09SRV9DTEtfRkZdLnByb3BfbmFtZSwgJnN0cik7Ci0J Y2ZnLT5wZXJmLmNvcmVfY2xrX2ZmID0gcmMgPyBERUZBVUxUX0NPUkVfQ0xLX0ZGIDogc3RyOwot CXJjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsCi0JCQlkcHVfcGVyZl9wcm9wW1BFUkZf Q09NUF9SQVRJT19SVF0ucHJvcF9uYW1lLCAmc3RyKTsKLQljZmctPnBlcmYuY29tcF9yYXRpb19y dCA9IHJjID8gREVGQVVMVF9DT01QX1JBVElPX1JUIDogc3RyOwotCXJjID0gb2ZfcHJvcGVydHlf cmVhZF9zdHJpbmcobnAsCi0JCQlkcHVfcGVyZl9wcm9wW1BFUkZfQ09NUF9SQVRJT19OUlRdLnBy b3BfbmFtZSwgJnN0cik7Ci0JY2ZnLT5wZXJmLmNvbXBfcmF0aW9fbnJ0ID0gcmMgPyBERUZBVUxU X0NPTVBfUkFUSU9fTlJUIDogc3RyOwotCXJjID0gMDsKLQotCWNmZy0+cGVyZi51bmRlcnNpemVk X3ByZWZpbGxfbGluZXMgPQotCQkJcHJvcF9leGlzdHNbUEVSRl9VTkRFUlNJWkVEX1BSRUZJTExf TElORVNdID8KLQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJCVBFUkZfVU5E RVJTSVpFRF9QUkVGSUxMX0xJTkVTLCAwKSA6Ci0JCQlERUZBVUxUX1VOREVSU0laRURfUFJFRklM TF9MSU5FUzsKLQljZmctPnBlcmYueHRyYV9wcmVmaWxsX2xpbmVzID0KLQkJCXByb3BfZXhpc3Rz W1BFUkZfWFRSQV9QUkVGSUxMX0xJTkVTXSA/Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3Zh bHVlLAotCQkJCQlQRVJGX1hUUkFfUFJFRklMTF9MSU5FUywgMCkgOgotCQkJREVGQVVMVF9YVFJB X1BSRUZJTExfTElORVM7Ci0JY2ZnLT5wZXJmLmRlc3Rfc2NhbGVfcHJlZmlsbF9saW5lcyA9Ci0J CQlwcm9wX2V4aXN0c1tQRVJGX0RFU1RfU0NBTEVfUFJFRklMTF9MSU5FU10gPwotCQkJUFJPUF9W QUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCQkJUEVSRl9ERVNUX1NDQUxFX1BSRUZJTExfTElO RVMsIDApIDoKLQkJCURFRkFVTFRfREVTVF9TQ0FMRV9QUkVGSUxMX0xJTkVTOwotCWNmZy0+cGVy Zi5tYWNyb3RpbGVfcHJlZmlsbF9saW5lcyA9Ci0JCQlwcm9wX2V4aXN0c1tQRVJGX01BQ1JPVElM RV9QUkVGSUxMX0xJTkVTXSA/Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJ CQlQRVJGX01BQ1JPVElMRV9QUkVGSUxMX0xJTkVTLCAwKSA6Ci0JCQlERUZBVUxUX01BQ1JPVElM RV9QUkVGSUxMX0xJTkVTOwotCWNmZy0+cGVyZi55dXZfbnYxMl9wcmVmaWxsX2xpbmVzID0KLQkJ CXByb3BfZXhpc3RzW1BFUkZfWVVWX05WMTJfUFJFRklMTF9MSU5FU10gPwotCQkJUFJPUF9WQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCQkJUEVSRl9ZVVZfTlYxMl9QUkVGSUxMX0xJTkVTLCAw KSA6Ci0JCQlERUZBVUxUX1lVVl9OVjEyX1BSRUZJTExfTElORVM7Ci0JY2ZnLT5wZXJmLmxpbmVh cl9wcmVmaWxsX2xpbmVzID0KLQkJCXByb3BfZXhpc3RzW1BFUkZfTElORUFSX1BSRUZJTExfTElO RVNdID8KLQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJCVBFUkZfTElORUFS X1BSRUZJTExfTElORVMsIDApIDoKLQkJCURFRkFVTFRfTElORUFSX1BSRUZJTExfTElORVM7Ci0J Y2ZnLT5wZXJmLmRvd25zY2FsaW5nX3ByZWZpbGxfbGluZXMgPQotCQkJcHJvcF9leGlzdHNbUEVS Rl9ET1dOU0NBTElOR19QUkVGSUxMX0xJTkVTXSA/Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9w X3ZhbHVlLAotCQkJCQlQRVJGX0RPV05TQ0FMSU5HX1BSRUZJTExfTElORVMsIDApIDoKLQkJCURF RkFVTFRfRE9XTlNDQUxJTkdfUFJFRklMTF9MSU5FUzsKLQljZmctPnBlcmYuYW1vcnRpemFibGVf dGhyZXNob2xkID0KLQkJCXByb3BfZXhpc3RzW1BFUkZfQU1PUlRJWkFCTEVfVEhSRVNIT0xEXSA/ Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJCQlQRVJGX0FNT1JUSVpBQkxF X1RIUkVTSE9MRCwgMCkgOgotCQkJREVGQVVMVF9BTU9SVElaQUJMRV9USFJFU0hPTEQ7Ci0KLQlp ZiAocHJvcF9leGlzdHNbUEVSRl9EQU5HRVJfTFVUXSAmJiBwcm9wX2NvdW50W1BFUkZfREFOR0VS X0xVVF0gPD0KLQkJCURQVV9RT1NfTFVUX1VTQUdFX01BWCkgewotCQlmb3IgKGogPSAwOyBqIDwg cHJvcF9jb3VudFtQRVJGX0RBTkdFUl9MVVRdOyBqKyspIHsKLQkJCWNmZy0+cGVyZi5kYW5nZXJf bHV0X3RibFtqXSA9Ci0JCQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJCQlQ RVJGX0RBTkdFUl9MVVQsIGopOwotCQkJRFBVX0RFQlVHKCJkYW5nZXIgdXNhZ2U6JWQgbHV0OjB4 JXhcbiIsCi0JCQkJCWosIGNmZy0+cGVyZi5kYW5nZXJfbHV0X3RibFtqXSk7Ci0JCX0KLQl9Ci0K LQlpZiAocHJvcF9leGlzdHNbUEVSRl9TQUZFX0xVVF0gJiYgcHJvcF9jb3VudFtQRVJGX1NBRkVf TFVUXSA8PQotCQkJRFBVX1FPU19MVVRfVVNBR0VfTUFYKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBw cm9wX2NvdW50W1BFUkZfU0FGRV9MVVRdOyBqKyspIHsKLQkJCWNmZy0+cGVyZi5zYWZlX2x1dF90 Ymxbal0gPQotCQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJCQkJUEVSRl9T QUZFX0xVVCwgaik7Ci0JCQlEUFVfREVCVUcoInNhZmUgdXNhZ2U6JWQgbHV0OjB4JXhcbiIsCi0J CQkJCWosIGNmZy0+cGVyZi5zYWZlX2x1dF90Ymxbal0pOwotCQl9Ci0JfQotCi0JZm9yIChqID0g MDsgaiA8IERQVV9RT1NfTFVUX1VTQUdFX01BWDsgaisrKSB7Ci0JCXN0YXRpYyBjb25zdCB1MzIg cHJvcF9rZXlbRFBVX1FPU19MVVRfVVNBR0VfTUFYXSA9IHsKLQkJCVtEUFVfUU9TX0xVVF9VU0FH RV9MSU5FQVJdID0KLQkJCQkJUEVSRl9RT1NfTFVUX0xJTkVBUiwKLQkJCVtEUFVfUU9TX0xVVF9V U0FHRV9NQUNST1RJTEVdID0KLQkJCQkJUEVSRl9RT1NfTFVUX01BQ1JPVElMRSwKLQkJCVtEUFVf UU9TX0xVVF9VU0FHRV9OUlRdID0KLQkJCQkJUEVSRl9RT1NfTFVUX05SVCwKLQkJCVtEUFVfUU9T X0xVVF9VU0FHRV9DV0JdID0KLQkJCQkJUEVSRl9RT1NfTFVUX0NXQiwKLQkJfTsKLQkJY29uc3Qg dTMyIGVudHJ5X3NpemUgPSAzOwotCQlpbnQgbSwgY291bnQ7Ci0JCWludCBrZXkgPSBwcm9wX2tl eVtqXTsKLQotCQlpZiAoIXByb3BfZXhpc3RzW2tleV0pCi0JCQljb250aW51ZTsKLQotCQljb3Vu dCA9IHByb3BfY291bnRba2V5XSAvIGVudHJ5X3NpemU7Ci0KLQkJY2ZnLT5wZXJmLnFvc19sdXRf dGJsW2pdLmVudHJpZXMgPSBrY2FsbG9jKGNvdW50LAotCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcW9z X2x1dF9lbnRyeSksIEdGUF9LRVJORUwpOwotCQlpZiAoIWNmZy0+cGVyZi5xb3NfbHV0X3RibFtq XS5lbnRyaWVzKSB7Ci0JCQlyYyA9IC1FTk9NRU07Ci0JCQlnb3RvIGZyZWVwcm9wOwotCQl9Ci0K LQkJZm9yIChrID0gMCwgbSA9IDA7IGsgPCBjb3VudDsgaysrLCBtICs9IGVudHJ5X3NpemUpIHsK LQkJCXU2NCBsdXRfaGksIGx1dF9sbzsKLQotCQkJY2ZnLT5wZXJmLnFvc19sdXRfdGJsW2pdLmVu dHJpZXNba10uZmwgPQotCQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBrZXksIG0p OwotCQkJbHV0X2hpID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwga2V5LCBtICsgMSk7 Ci0JCQlsdXRfbG8gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBrZXksIG0gKyAyKTsK LQkJCWNmZy0+cGVyZi5xb3NfbHV0X3RibFtqXS5lbnRyaWVzW2tdLmx1dCA9Ci0JCQkJCShsdXRf aGkgPDwgMzIpIHwgbHV0X2xvOwotCQkJRFBVX0RFQlVHKCJ1c2FnZTolZC4lZCBmbDolZCBsdXQ6 MHglbGx4XG4iLAotCQkJCWosIGssCi0JCQkJY2ZnLT5wZXJmLnFvc19sdXRfdGJsW2pdLmVudHJp ZXNba10uZmwsCi0JCQkJY2ZnLT5wZXJmLnFvc19sdXRfdGJsW2pdLmVudHJpZXNba10ubHV0KTsK LQkJfQotCQljZmctPnBlcmYucW9zX2x1dF90Ymxbal0ubmVudHJ5ID0gY291bnQ7Ci0JfQotCi0J aWYgKHByb3BfZXhpc3RzW1BFUkZfQ0RQX1NFVFRJTkddKSB7Ci0JCWNvbnN0IHUzMiBwcm9wX3Np emUgPSAyOwotCQl1MzIgY291bnQgPSBwcm9wX2NvdW50W1BFUkZfQ0RQX1NFVFRJTkddIC8gcHJv cF9zaXplOwotCi0JCWNvdW50ID0gbWluX3QodTMyLCBjb3VudCwgRFBVX1BFUkZfQ0RQX1VTQUdF X01BWCk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHsKLQkJCWNmZy0+cGVyZi5j ZHBfY2ZnW2pdLnJkX2VuYWJsZSA9Ci0JCQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUs Ci0JCQkJCVBFUkZfQ0RQX1NFVFRJTkcsIGogKiBwcm9wX3NpemUpOwotCQkJY2ZnLT5wZXJmLmNk cF9jZmdbal0ud3JfZW5hYmxlID0KLQkJCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwK LQkJCQkJUEVSRl9DRFBfU0VUVElORywgaiAqIHByb3Bfc2l6ZSArIDEpOwotCQkJRFBVX0RFQlVH KCJjZHAgdXNhZ2U6JWQgcmQ6JWQgd3I6JWRcbiIsCi0JCQkJaiwgY2ZnLT5wZXJmLmNkcF9jZmdb al0ucmRfZW5hYmxlLAotCQkJCWNmZy0+cGVyZi5jZHBfY2ZnW2pdLndyX2VuYWJsZSk7Ci0JCX0K LQotCQljZmctPmhhc19jZHAgPSB0cnVlOwotCX0KLQotZnJlZXByb3A6Ci0Ja2ZyZWUocHJvcF92 YWx1ZSk7Ci1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV9oYXJkd2FyZV9m b3JtYXRfY2FwcyhzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnLAotCXVpbnQzMl90IGh3X3Jl dikKLXsKLQlpbnQgcmMgPSAwOwotCXVpbnQzMl90IGRtYV9saXN0X3NpemUsIHZpZ19saXN0X3Np emUsIHdiMl9saXN0X3NpemU7Ci0JdWludDMyX3QgY3Vyc29yX2xpc3Rfc2l6ZSA9IDA7Ci0JdWlu dDMyX3QgaW5kZXggPSAwOwotCi0JaWYgKElTX0RQVV9NQUpPUl9NSU5PUl9TQU1FKChod19yZXYp LCBEUFVfSFdfVkVSXzMwMCkpIHsKLQkJY3Vyc29yX2xpc3Rfc2l6ZSA9IEFSUkFZX1NJWkUoY3Vy c29yX2Zvcm1hdHMpOwotCQlkcHVfY2ZnLT5jdXJzb3JfZm9ybWF0cyA9IGtjYWxsb2MoY3Vyc29y X2xpc3Rfc2l6ZSwKLQkJCXNpemVvZihzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCksIEdGUF9L RVJORUwpOwotCQlpZiAoIWRwdV9jZmctPmN1cnNvcl9mb3JtYXRzKSB7Ci0JCQlyYyA9IC1FTk9N RU07Ci0JCQlnb3RvIGVuZDsKLQkJfQotCQlpbmRleCA9IGRwdV9jb3B5X2Zvcm1hdHMoZHB1X2Nm Zy0+Y3Vyc29yX2Zvcm1hdHMsCi0JCQljdXJzb3JfbGlzdF9zaXplLCAwLCBjdXJzb3JfZm9ybWF0 cywKLQkJCUFSUkFZX1NJWkUoY3Vyc29yX2Zvcm1hdHMpKTsKLQl9Ci0KLQlkbWFfbGlzdF9zaXpl ID0gQVJSQVlfU0laRShwbGFuZV9mb3JtYXRzKTsKLQl2aWdfbGlzdF9zaXplID0gQVJSQVlfU0la RShwbGFuZV9mb3JtYXRzX3l1dik7Ci0Jd2IyX2xpc3Rfc2l6ZSA9IEFSUkFZX1NJWkUod2IyX2Zv cm1hdHMpOwotCi0JZG1hX2xpc3Rfc2l6ZSArPSBBUlJBWV9TSVpFKHJnYl8xMGJpdF9mb3JtYXRz KTsKLQl2aWdfbGlzdF9zaXplICs9IEFSUkFZX1NJWkUocmdiXzEwYml0X2Zvcm1hdHMpCi0JCSsg QVJSQVlfU0laRSh0cDEwX3Vid2NfZm9ybWF0cykKLQkJKyBBUlJBWV9TSVpFKHAwMTBfZm9ybWF0 cyk7Ci0JaWYgKElTX0RQVV9NQUpPUl9NSU5PUl9TQU1FKChod19yZXYpLCBEUFVfSFdfVkVSXzQw MCkgfHwKLQkJKElTX0RQVV9NQUpPUl9NSU5PUl9TQU1FKChod19yZXYpLCBEUFVfSFdfVkVSXzQx MCkpKQotCQl2aWdfbGlzdF9zaXplICs9IEFSUkFZX1NJWkUocDAxMF91YndjX2Zvcm1hdHMpOwot Ci0Jd2IyX2xpc3Rfc2l6ZSArPSBBUlJBWV9TSVpFKHJnYl8xMGJpdF9mb3JtYXRzKQotCQkrIEFS UkFZX1NJWkUodHAxMF91YndjX2Zvcm1hdHMpOwotCi0JZHB1X2NmZy0+ZG1hX2Zvcm1hdHMgPSBr Y2FsbG9jKGRtYV9saXN0X3NpemUsCi0JCXNpemVvZihzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRl ZCksIEdGUF9LRVJORUwpOwotCWlmICghZHB1X2NmZy0+ZG1hX2Zvcm1hdHMpIHsKLQkJcmMgPSAt RU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlkcHVfY2ZnLT52aWdfZm9ybWF0cyA9IGtjYWxs b2ModmlnX2xpc3Rfc2l6ZSwKLQkJc2l6ZW9mKHN0cnVjdCBkcHVfZm9ybWF0X2V4dGVuZGVkKSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFkcHVfY2ZnLT52aWdfZm9ybWF0cykgewotCQlyYyA9IC1FTk9N RU07Ci0JCWdvdG8gZW5kOwotCX0KLQotCWRwdV9jZmctPndiX2Zvcm1hdHMgPSBrY2FsbG9jKHdi Ml9saXN0X3NpemUsCi0JCXNpemVvZihzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCksIEdGUF9L RVJORUwpOwotCWlmICghZHB1X2NmZy0+d2JfZm9ybWF0cykgewotCQlEUFVfRVJST1IoImZhaWxl ZCB0byBhbGxvY2F0ZSB3YiBmb3JtYXQgbGlzdFxuIik7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290 byBlbmQ7Ci0JfQotCi0JaW5kZXggPSBkcHVfY29weV9mb3JtYXRzKGRwdV9jZmctPmRtYV9mb3Jt YXRzLCBkbWFfbGlzdF9zaXplLAotCQkwLCBwbGFuZV9mb3JtYXRzLCBBUlJBWV9TSVpFKHBsYW5l X2Zvcm1hdHMpKTsKLQlpbmRleCArPSBkcHVfY29weV9mb3JtYXRzKGRwdV9jZmctPmRtYV9mb3Jt YXRzLCBkbWFfbGlzdF9zaXplLAotCQlpbmRleCwgcmdiXzEwYml0X2Zvcm1hdHMsCi0JCUFSUkFZ X1NJWkUocmdiXzEwYml0X2Zvcm1hdHMpKTsKLQotCWluZGV4ID0gZHB1X2NvcHlfZm9ybWF0cyhk cHVfY2ZnLT52aWdfZm9ybWF0cywgdmlnX2xpc3Rfc2l6ZSwKLQkJMCwgcGxhbmVfZm9ybWF0c195 dXYsIEFSUkFZX1NJWkUocGxhbmVfZm9ybWF0c195dXYpKTsKLQlpbmRleCArPSBkcHVfY29weV9m b3JtYXRzKGRwdV9jZmctPnZpZ19mb3JtYXRzLCB2aWdfbGlzdF9zaXplLAotCQlpbmRleCwgcmdi XzEwYml0X2Zvcm1hdHMsCi0JCUFSUkFZX1NJWkUocmdiXzEwYml0X2Zvcm1hdHMpKTsKLQlpbmRl eCArPSBkcHVfY29weV9mb3JtYXRzKGRwdV9jZmctPnZpZ19mb3JtYXRzLCB2aWdfbGlzdF9zaXpl LAotCQlpbmRleCwgcDAxMF9mb3JtYXRzLCBBUlJBWV9TSVpFKHAwMTBfZm9ybWF0cykpOwotCWlm IChJU19EUFVfTUFKT1JfTUlOT1JfU0FNRSgoaHdfcmV2KSwgRFBVX0hXX1ZFUl80MDApIHx8Ci0J CShJU19EUFVfTUFKT1JfTUlOT1JfU0FNRSgoaHdfcmV2KSwgRFBVX0hXX1ZFUl80MTApKSkKLQkJ aW5kZXggKz0gZHB1X2NvcHlfZm9ybWF0cyhkcHVfY2ZnLT52aWdfZm9ybWF0cywKLQkJCXZpZ19s aXN0X3NpemUsIGluZGV4LCBwMDEwX3Vid2NfZm9ybWF0cywKLQkJCUFSUkFZX1NJWkUocDAxMF91 YndjX2Zvcm1hdHMpKTsKLQotCWluZGV4ICs9IGRwdV9jb3B5X2Zvcm1hdHMoZHB1X2NmZy0+dmln X2Zvcm1hdHMsIHZpZ19saXN0X3NpemUsCi0JCWluZGV4LCB0cDEwX3Vid2NfZm9ybWF0cywKLQkJ QVJSQVlfU0laRSh0cDEwX3Vid2NfZm9ybWF0cykpOwotCi0JaW5kZXggPSBkcHVfY29weV9mb3Jt YXRzKGRwdV9jZmctPndiX2Zvcm1hdHMsIHdiMl9saXN0X3NpemUsCi0JCTAsIHdiMl9mb3JtYXRz LCBBUlJBWV9TSVpFKHdiMl9mb3JtYXRzKSk7Ci0JaW5kZXggKz0gZHB1X2NvcHlfZm9ybWF0cyhk cHVfY2ZnLT53Yl9mb3JtYXRzLCB3YjJfbGlzdF9zaXplLAotCQlpbmRleCwgcmdiXzEwYml0X2Zv cm1hdHMsCi0JCUFSUkFZX1NJWkUocmdiXzEwYml0X2Zvcm1hdHMpKTsKLQlpbmRleCArPSBkcHVf Y29weV9mb3JtYXRzKGRwdV9jZmctPndiX2Zvcm1hdHMsIHdiMl9saXN0X3NpemUsCi0JCWluZGV4 LCB0cDEwX3Vid2NfZm9ybWF0cywKLQkJQVJSQVlfU0laRSh0cDEwX3Vid2NfZm9ybWF0cykpOwot ZW5kOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBfZHB1X2hhcmR3YXJlX2NhcHMoc3Ry dWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZywgdWludDMyX3QgaHdfcmV2KQotewotCWludCByYyA9 IDA7Ci0KLQlpZiAoIWRwdV9jZmcpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmMgPSBkcHVfaGFy ZHdhcmVfZm9ybWF0X2NhcHMoZHB1X2NmZywgaHdfcmV2KTsKLQotCWlmIChJU19NU004OTk2X1RB UkdFVChod19yZXYpKSB7Ci0JCS8qIHVwZGF0ZSBtc204OTk2IHRhcmdldCBoZXJlICovCi0JCWRw dV9jZmctPnBlcmYubWluX3ByZWZpbGxfbGluZXMgPSAyMTsKLQl9IGVsc2UgaWYgKElTX01TTTg5 OThfVEFSR0VUKGh3X3JldikpIHsKLQkJLyogdXBkYXRlIG1zbTg5OTggdGFyZ2V0IGhlcmUgKi8K LQkJZHB1X2NmZy0+aGFzX3diX3Vid2MgPSB0cnVlOwotCQlkcHVfY2ZnLT5wZXJmLm1pbl9wcmVm aWxsX2xpbmVzID0gMjU7Ci0JCWRwdV9jZmctPnZiaWZfcW9zX25sdmwgPSA0OwotCQlkcHVfY2Zn LT50c19wcmVmaWxsX3JldiA9IDE7Ci0JfSBlbHNlIGlmIChJU19TRE04NDVfVEFSR0VUKGh3X3Jl dikgfHwgSVNfU0RNNjcwX1RBUkdFVChod19yZXYpKSB7Ci0JCS8qIHVwZGF0ZSBzZG04NDUgdGFy Z2V0IGhlcmUgKi8KLQkJZHB1X2NmZy0+aGFzX3diX3Vid2MgPSB0cnVlOwotCQlkcHVfY2ZnLT5w ZXJmLm1pbl9wcmVmaWxsX2xpbmVzID0gMjQ7Ci0JCWRwdV9jZmctPnZiaWZfcW9zX25sdmwgPSA4 OwotCQlkcHVfY2ZnLT50c19wcmVmaWxsX3JldiA9IDI7Ci0JfSBlbHNlIGlmIChJU19TRE04NTVf VEFSR0VUKGh3X3JldikpIHsKLQkJZHB1X2NmZy0+aGFzX3diX3Vid2MgPSB0cnVlOwotCQlkcHVf Y2ZnLT5wZXJmLm1pbl9wcmVmaWxsX2xpbmVzID0gMjQ7Ci0JfSBlbHNlIHsKLQkJRFBVX0VSUk9S KCJ1bnN1cHBvcnRlZCBjaGlwc2V0IGlkOiVYXG4iLCBod19yZXYpOwotCQlkcHVfY2ZnLT5wZXJm Lm1pbl9wcmVmaWxsX2xpbmVzID0gMHhmZmZmOwotCQlyYyA9IC1FTk9ERVY7Ci0JfQotCi0JcmV0 dXJuIHJjOwotfQotCiB2b2lkIGRwdV9od19jYXRhbG9nX2RlaW5pdChzdHJ1Y3QgZHB1X21kc3Nf Y2ZnICpkcHVfY2ZnKQogewotCWludCBpOwotCi0JaWYgKCFkcHVfY2ZnKQotCQlyZXR1cm47Ci0K LQlmb3IgKGkgPSAwOyBpIDwgZHB1X2NmZy0+c3NwcF9jb3VudDsgaSsrKQotCQlrZnJlZShkcHVf Y2ZnLT5zc3BwW2ldLnNibGspOwotCi0JZm9yIChpID0gMDsgaSA8IGRwdV9jZmctPm1peGVyX2Nv dW50OyBpKyspCi0JCWtmcmVlKGRwdV9jZmctPm1peGVyW2ldLnNibGspOwotCi0JZm9yIChpID0g MDsgaSA8IGRwdV9jZmctPndiX2NvdW50OyBpKyspCi0JCWtmcmVlKGRwdV9jZmctPndiW2ldLnNi bGspOwotCi0JZm9yIChpID0gMDsgaSA8IGRwdV9jZmctPmRzcHBfY291bnQ7IGkrKykKLQkJa2Zy ZWUoZHB1X2NmZy0+ZHNwcFtpXS5zYmxrKTsKLQotCWlmIChkcHVfY2ZnLT5kc19jb3VudCkKLQkJ a2ZyZWUoZHB1X2NmZy0+ZHNbMF0udG9wKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkcHVfY2ZnLT5w aW5ncG9uZ19jb3VudDsgaSsrKQotCQlrZnJlZShkcHVfY2ZnLT5waW5ncG9uZ1tpXS5zYmxrKTsK LQotCWZvciAoaSA9IDA7IGkgPCBkcHVfY2ZnLT52YmlmX2NvdW50OyBpKyspIHsKLQkJa2ZyZWUo ZHB1X2NmZy0+dmJpZltpXS5keW5hbWljX290X3JkX3RibC5jZmcpOwotCQlrZnJlZShkcHVfY2Zn LT52YmlmW2ldLmR5bmFtaWNfb3Rfd3JfdGJsLmNmZyk7Ci0JCWtmcmVlKGRwdV9jZmctPnZiaWZb aV0ucW9zX3J0X3RibC5wcmlvcml0eV9sdmwpOwotCQlrZnJlZShkcHVfY2ZnLT52YmlmW2ldLnFv c19ucnRfdGJsLnByaW9yaXR5X2x2bCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IERQVV9RT1Nf TFVUX1VTQUdFX01BWDsgaSsrKQotCQlrZnJlZShkcHVfY2ZnLT5wZXJmLnFvc19sdXRfdGJsW2ld LmVudHJpZXMpOwotCi0Ja2ZyZWUoZHB1X2NmZy0+ZG1hX2Zvcm1hdHMpOwotCWtmcmVlKGRwdV9j ZmctPmN1cnNvcl9mb3JtYXRzKTsKLQlrZnJlZShkcHVfY2ZnLT52aWdfZm9ybWF0cyk7Ci0Ja2Zy ZWUoZHB1X2NmZy0+d2JfZm9ybWF0cyk7Ci0KIAlrZnJlZShkcHVfY2ZnKTsKIH0KIAotLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK LSAqIGhhcmR3YXJlIGNhdGFsb2cgaW5pdAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgZHB1X21kc3NfY2ZnICpk cHVfaHdfY2F0YWxvZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBod19yZXYpCitz dHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfaHdfY2F0YWxvZ19pbml0KHUzMiBod19yZXYpCiB7Ci0J aW50IHJjOworCWludCBpOwogCXN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmc7Ci0Jc3RydWN0 IGRldmljZV9ub2RlICpucCA9IGRldi0+ZGV2LT5vZl9ub2RlOwogCiAJZHB1X2NmZyA9IGt6YWxs b2Moc2l6ZW9mKCpkcHVfY2ZnKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkcHVfY2ZnKQogCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWRwdV9jZmctPmh3dmVyc2lvbiA9IGh3X3JldjsKLQot CXJjID0gX2RwdV9oYXJkd2FyZV9jYXBzKGRwdV9jZmcsIGh3X3Jldik7Ci0JaWYgKHJjKQotCQln b3RvIGVuZDsKLQotCXJjID0gZHB1X3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsKLQlpZiAocmMpCi0J CWdvdG8gZW5kOwotCi0JcmMgPSBkcHVfcGVyZl9wYXJzZV9kdChucCwgZHB1X2NmZyk7Ci0JaWYg KHJjKQotCQlnb3RvIGVuZDsKLQotCXJjID0gZHB1X2N0bF9wYXJzZV9kdChucCwgZHB1X2NmZyk7 Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCXJjID0gZHB1X3NzcHBfcGFyc2VfZHQobnAsIGRw dV9jZmcpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlyYyA9IGRwdV9kc3BwX3RvcF9wYXJz ZV9kdChucCwgZHB1X2NmZyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCXJjID0gZHB1X2Rz cHBfcGFyc2VfZHQobnAsIGRwdV9jZmcpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlyYyA9 IGRwdV9kc19wYXJzZV9kdChucCwgZHB1X2NmZyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQot CXJjID0gZHB1X2RzY19wYXJzZV9kdChucCwgZHB1X2NmZyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVu ZDsKLQotCXJjID0gZHB1X3BwX3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsKLQlpZiAocmMpCi0JCWdv dG8gZW5kOwotCi0JLyogbWl4ZXIgcGFyc2luZyBzaG91bGQgYmUgZG9uZSBhZnRlciBkc3BwLAot CSAqIGRzIGFuZCBwcCBmb3IgbWFwcGluZyBzZXR1cAotCSAqLwotCXJjID0gZHB1X21peGVyX3Bh cnNlX2R0KG5wLCBkcHVfY2ZnKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JcmMgPSBkcHVf aW50Zl9wYXJzZV9kdChucCwgZHB1X2NmZyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCXJj ID0gZHB1X3diX3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwot Ci0JLyogY2RtIHBhcnNpbmcgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgaW50ZiBhbmQgd2IgZm9yIG1h cHBpbmcgc2V0dXAgKi8KLQlyYyA9IGRwdV9jZG1fcGFyc2VfZHQobnAsIGRwdV9jZmcpOwotCWlm IChyYykKLQkJZ290byBlbmQ7Ci0KLQlyYyA9IGRwdV92YmlmX3BhcnNlX2R0KG5wLCBkcHVfY2Zn KTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JcmMgPSBkcHVfcGFyc2VfcmVnX2RtYV9kdChu cCwgZHB1X2NmZyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCXJldHVybiBkcHVfY2ZnOwor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNmZ19oYW5kbGVyKTsgaSsrKSB7CisJCWlmIChj ZmdfaGFuZGxlcltpXS5od19yZXYgPT0gaHdfcmV2KSB7CisJCQljZmdfaGFuZGxlcltpXS5jZmdf aW5pdChkcHVfY2ZnKTsKKwkJCWRwdV9jZmctPmh3dmVyc2lvbiA9IGh3X3JldjsKKwkJCXJldHVy biBkcHVfY2ZnOworCQl9CisJfQogCi1lbmQ6CisJRFBVX0VSUk9SKCJ1bnN1cHBvcnRlZCBjaGlw c2V0IGlkOiVYXG4iLCBod19yZXYpOwogCWRwdV9od19jYXRhbG9nX2RlaW5pdChkcHVfY2ZnKTsK LQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIH0KKwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaCBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmgKaW5kZXggNDAyZTkyOS4u NDBkOTBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X2NhdGFsb2cuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0 YWxvZy5oCkBAIC0zODEsMTMgKzM4MSw1MSBAQCBzdHJ1Y3QgZHB1X3Fvc19sdXRfdGJsIHsKIH07 CiAKIC8qKgorICogc3RydWN0IGRwdV9jYXBzIC0gZGVmaW5lIERQVSBjYXBhYmlsaXRpZXMKKyAq IEBtYXhfbWl4ZXJfd2lkdGggICAgbWF4IGxheWVyIG1peGVyIGxpbmUgd2lkdGggc3VwcG9ydC4K KyAqIEBtYXhfbWl4ZXJfYmxlbmRzdGFnZXMgbWF4IGxheWVyIG1peGVyIGJsZW5kIHN0YWdlcyBv cgorICogICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCB6IG9yZGVyCisgKiBAcXNlZWRf dHlwZSAgICAgICAgIHFzZWVkMiBvciBxc2VlZDMgc3VwcG9ydC4KKyAqIEBzbWFydF9kbWFfcmV2 ICAgICAgU3VwcG9ydGVkIHZlcnNpb24gb2YgU21hcnRETUEgZmVhdHVyZS4KKyAqIEB1YndjX3Zl cnNpb24gICAgICAgVUJXQyBmZWF0dXJlIHZlcnNpb24gKDB4MCBmb3Igbm90IHN1cHBvcnRlZCkK KyAqIEBoYXNfc3JjX3NwbGl0ICAgICAgc291cmNlIHNwbGl0IGZlYXR1cmUgc3RhdHVzCisgKiBA aGFzX2RpbV9sYXllciAgICAgIGRpbSBsYXllciBmZWF0dXJlIHN0YXR1cworICogQGhhc19pZGxl X3BjICAgICAgICBpbmRpY2F0ZSBpZiBpZGxlIHBvd2VyIGNvbGxhcHNlIGZlYXR1cmUgaXMgc3Vw cG9ydGVkCisgKi8KK3N0cnVjdCBkcHVfY2FwcyB7CisJdTMyIG1heF9taXhlcl93aWR0aDsKKwl1 MzIgbWF4X21peGVyX2JsZW5kc3RhZ2VzOworCXUzMiBxc2VlZF90eXBlOworCXUzMiBzbWFydF9k bWFfcmV2OworCXUzMiB1YndjX3ZlcnNpb247CisJYm9vbCBoYXNfc3JjX3NwbGl0OworCWJvb2wg aGFzX2RpbV9sYXllcjsKKwlib29sIGhhc19pZGxlX3BjOworfTsKKworLyoqCisgKiBzdHJ1Y3Qg ZHB1X3NzcHBfYmxrc19jb21tb24gOiBTU1BQIHN1Yi1ibG9ja3MgY29tbW9uIGNvbmZpZ3VyYXRp b24KKyAqIEBtYXh3aWR0aDogbWF4IHBpeGVsd2lkdGggc3VwcG9ydGVkIGJ5IHRoaXMgcGlwZQor ICogQHBpeGVsX3JhbV9zaXplOiBzaXplIG9mIGxhdGVuY3kgaGlkaW5nIGFuZCBkZS10aWxpbmcg YnVmZmVyIGluIGJ5dGVzCisgKiBAbWF4aGRlY2lleHA6IG1heCBob3Jpem9udGFsIGRlY2ltYXRp b24gc3VwcG9ydGVkIGJ5IHRoaXMgcGlwZQorICoJCQkJKG1heCBpcyAyXnZhbHVlKQorICogQG1h eHZkZWNpZXhwOiBtYXggdmVydGljYWwgZGVjaW1hdGlvbiBzdXBwb3J0ZWQgYnkgdGhpcyBwaXBl CisgKgkJCQkobWF4IGlzIDJedmFsdWUpCisgKi8KK3N0cnVjdCBkcHVfc3NwcF9ibGtzX2NvbW1v biB7CisJdTMyIG1heGxpbmV3aWR0aDsKKwl1MzIgcGl4ZWxfcmFtX3NpemU7CisJdTMyIG1heGhk ZWNpZXhwOworCXUzMiBtYXh2ZGVjaWV4cDsKK307CisKKy8qKgogICogc3RydWN0IGRwdV9zc3Bw X3N1Yl9ibGtzIDogU1NQUCBzdWItYmxvY2tzCi0gKiBAbWF4ZHduc2NhbGU6IG1heCBkb3duc2Nh bGUgcmF0aW8gc3VwcG9ydGVkKHdpdGhvdXQgREVDSU1BVElPTikKLSAqIEBtYXh1cHNjYWxlOiAg bWF4dXBzY2FsZSByYXRpbyBzdXBwb3J0ZWQKLSAqIEBtYXh3aWR0aDogICAgbWF4IHBpeGVsd2lk dGggc3VwcG9ydGVkIGJ5IHRoaXMgcGlwZQorICogY29tbW9uOiBQb2ludGVyIHRvIGNvbW1vbiBj b25maWd1cmF0aW9ucyBzaGFyZWQgYnkgc3ViIGJsb2NrcwogICogQGNyZXFfdmJsYW5rOiBjcmVx IHByaW9yaXR5IGR1cmluZyB2ZXJ0aWNhbCBibGFua2luZwogICogQGRhbmdlcl92Ymxhbms6IGRh bmdlciBwcmlvcml0eSBkdXJpbmcgdmVydGljYWwgYmxhbmtpbmcKLSAqIEBwaXhlbF9yYW1fc2l6 ZTogc2l6ZSBvZiBsYXRlbmN5IGhpZGluZyBhbmQgZGUtdGlsaW5nIGJ1ZmZlciBpbiBieXRlcwor ICogQG1heGR3bnNjYWxlOiBtYXggZG93bnNjYWxlIHJhdGlvIHN1cHBvcnRlZCh3aXRob3V0IERF Q0lNQVRJT04pCisgKiBAbWF4dXBzY2FsZTogIG1heHVwc2NhbGUgcmF0aW8gc3VwcG9ydGVkCiAg KiBAc21hcnRfZG1hX3ByaW9yaXR5OiBodyBwcmlvcml0eSBvZiByZWN0MSBvZiBtdWx0aXJlY3Qg cGlwZQogICogQG1heF9wZXJfcGlwZV9idzogbWF4aW11bSBhbGxvd2FibGUgYmFuZHdpZHRoIG9m IHRoaXMgcGlwZSBpbiBrQnBzCiAgKiBAc3JjX2JsazoKQEAgLTQwMSwxNCArNDM5LDExIEBAIHN0 cnVjdCBkcHVfcW9zX2x1dF90YmwgewogICogQHZpcnRfZm9ybWF0X2xpc3Q6IFBvaW50ZXIgdG8g bGlzdCBvZiBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgdmlydHVhbCBwbGFuZXMKICAqLwogc3RydWN0 IGRwdV9zc3BwX3N1Yl9ibGtzIHsKLQl1MzIgbWF4bGluZXdpZHRoOworCWNvbnN0IHN0cnVjdCBk cHVfc3NwcF9ibGtzX2NvbW1vbiAqY29tbW9uOwogCXUzMiBjcmVxX3ZibGFuazsKIAl1MzIgZGFu Z2VyX3ZibGFuazsKLQl1MzIgcGl4ZWxfcmFtX3NpemU7CiAJdTMyIG1heGR3bnNjYWxlOwogCXUz MiBtYXh1cHNjYWxlOwotCXUzMiBtYXhoZGVjaWV4cDsgLyogbWF4IGRlY2ltYXRpb24gaXMgMl52 YWx1ZSAqLwotCXUzMiBtYXh2ZGVjaWV4cDsgLyogbWF4IGRlY2ltYXRpb24gaXMgMl52YWx1ZSAq LwogCXUzMiBzbWFydF9kbWFfcHJpb3JpdHk7CiAJdTMyIG1heF9wZXJfcGlwZV9idzsKIAlzdHJ1 Y3QgZHB1X3NyY19ibGsgc3JjX2JsazsKQEAgLTg0NSw4NSArODgwLDU2IEBAIHN0cnVjdCBkcHVf cGVyZl9jZmcgewogICogdGhpcyBIVyB2ZXJzaW9uLiBDb250YWlucyBudW1iZXIgb2YgaW5zdGFu Y2VzLAogICogcmVnaXN0ZXIgb2Zmc2V0cywgY2FwYWJpbGl0aWVzIG9mIHRoZSBhbGwgTURTUyBI VyBzdWItYmxvY2tzLgogICoKLSAqIEBtYXhfc3NwcF9saW5ld2lkdGggbWF4IHNvdXJjZSBwaXBl IGxpbmUgd2lkdGggc3VwcG9ydC4KLSAqIEBtYXhfbWl4ZXJfd2lkdGggICAgbWF4IGxheWVyIG1p eGVyIGxpbmUgd2lkdGggc3VwcG9ydC4KLSAqIEBtYXhfbWl4ZXJfYmxlbmRzdGFnZXMgbWF4IGxh eWVyIG1peGVyIGJsZW5kIHN0YWdlcyBvcgotICogICAgICAgICAgICAgICAgICAgICAgIHN1cHBv cnRlZCB6IG9yZGVyCi0gKiBAbWF4X3diX2xpbmV3aWR0aCAgIG1heCB3cml0ZWJhY2sgbGluZSB3 aWR0aCBzdXBwb3J0LgotICogQHFzZWVkX3R5cGUgICAgICAgICBxc2VlZDIgb3IgcXNlZWQzIHN1 cHBvcnQuCi0gKiBAY3NjX3R5cGUgICAgICAgICAgIGNzYyBvciBjc2NfMTBiaXQgc3VwcG9ydC4K LSAqIEBzbWFydF9kbWFfcmV2ICAgICAgU3VwcG9ydGVkIHZlcnNpb24gb2YgU21hcnRETUEgZmVh dHVyZS4KLSAqIEBoYXNfc3JjX3NwbGl0ICAgICAgc291cmNlIHNwbGl0IGZlYXR1cmUgc3RhdHVz Ci0gKiBAaGFzX2NkcCAgICAgICAgICAgIENsaWVudCBkcml2ZW4gcHJlZmV0Y2ggZmVhdHVyZSBz dGF0dXMKLSAqIEBoYXNfd2JfdWJ3YyAgICAgICAgVUJXQyBmZWF0dXJlIHN1cHBvcnRlZCBvbiBX QgotICogQHVid2NfdmVyc2lvbiAgICAgICBVQldDIGZlYXR1cmUgdmVyc2lvbiAoMHgwIGZvciBu b3Qgc3VwcG9ydGVkKQotICogQGhhc19pZGxlX3BjICAgICAgICBpbmRpY2F0ZSBpZiBpZGxlIHBv d2VyIGNvbGxhcHNlIGZlYXR1cmUgaXMgc3VwcG9ydGVkCiAgKiBAZG1hX2Zvcm1hdHMgICAgICAg IFN1cHBvcnRlZCBmb3JtYXRzIGZvciBkbWEgcGlwZQogICogQGN1cnNvcl9mb3JtYXRzICAgICBT dXBwb3J0ZWQgZm9ybWF0cyBmb3IgY3Vyc29yIHBpcGUKICAqIEB2aWdfZm9ybWF0cyAgICAgICAg U3VwcG9ydGVkIGZvcm1hdHMgZm9yIHZpZyBwaXBlCiAgKiBAd2JfZm9ybWF0cyAgICAgICAgIFN1 cHBvcnRlZCBmb3JtYXRzIGZvciB3YgotICogQHZiaWZfcW9zX25sdmwgICAgICBudW1iZXIgb2Yg dmJpZiBRb1MgcHJpb3JpdHkgbGV2ZWwKLSAqIEB0c19wcmVmaWxsX3JldiAgICAgcHJlZmlsbCB0 cmFmZmljIHNoYXBlciBmZWF0dXJlIHJldmlzaW9uCiAgKi8KIHN0cnVjdCBkcHVfbWRzc19jZmcg ewogCXUzMiBod3ZlcnNpb247CiAKLQl1MzIgbWF4X3NzcHBfbGluZXdpZHRoOwotCXUzMiBtYXhf bWl4ZXJfd2lkdGg7Ci0JdTMyIG1heF9taXhlcl9ibGVuZHN0YWdlczsKLQl1MzIgbWF4X3diX2xp bmV3aWR0aDsKLQl1MzIgcXNlZWRfdHlwZTsKLQl1MzIgY3NjX3R5cGU7Ci0JdTMyIHNtYXJ0X2Rt YV9yZXY7Ci0JYm9vbCBoYXNfc3JjX3NwbGl0OwotCWJvb2wgaGFzX2NkcDsKLQlib29sIGhhc19k aW1fbGF5ZXI7Ci0JYm9vbCBoYXNfd2JfdWJ3YzsKLQl1MzIgdWJ3Y192ZXJzaW9uOwotCWJvb2wg aGFzX2lkbGVfcGM7Ci0JdTMyIHZiaWZfcW9zX25sdmw7Ci0JdTMyIHRzX3ByZWZpbGxfcmV2Owor CWNvbnN0IHN0cnVjdCBkcHVfY2FwcyAqY2FwczsKIAogCXUzMiBtZHNzX2NvdW50OwotCXN0cnVj dCBkcHVfbWRzc19iYXNlX2NmZyBtZHNzW01BWF9CTE9DS1NdOworCXN0cnVjdCBkcHVfbWRzc19i YXNlX2NmZyAqbWRzczsKIAogCXUzMiBtZHBfY291bnQ7Ci0Jc3RydWN0IGRwdV9tZHBfY2ZnIG1k cFtNQVhfQkxPQ0tTXTsKKwlzdHJ1Y3QgZHB1X21kcF9jZmcgKm1kcDsKIAogCXUzMiBjdGxfY291 bnQ7Ci0Jc3RydWN0IGRwdV9jdGxfY2ZnIGN0bFtNQVhfQkxPQ0tTXTsKKwlzdHJ1Y3QgZHB1X2N0 bF9jZmcgKmN0bDsKIAogCXUzMiBzc3BwX2NvdW50OwotCXN0cnVjdCBkcHVfc3NwcF9jZmcgc3Nw cFtNQVhfQkxPQ0tTXTsKKwlzdHJ1Y3QgZHB1X3NzcHBfY2ZnICpzc3BwOwogCiAJdTMyIG1peGVy X2NvdW50OwotCXN0cnVjdCBkcHVfbG1fY2ZnIG1peGVyW01BWF9CTE9DS1NdOworCXN0cnVjdCBk cHVfbG1fY2ZnICptaXhlcjsKIAogCXN0cnVjdCBkcHVfZHNwcF90b3BfY2ZnIGRzcHBfdG9wOwog CiAJdTMyIGRzcHBfY291bnQ7Ci0Jc3RydWN0IGRwdV9kc3BwX2NmZyBkc3BwW01BWF9CTE9DS1Nd OworCXN0cnVjdCBkcHVfZHNwcF9jZmcgKmRzcHA7CiAKIAl1MzIgZHNfY291bnQ7Ci0Jc3RydWN0 IGRwdV9kc19jZmcgZHNbTUFYX0JMT0NLU107CisJc3RydWN0IGRwdV9kc19jZmcgKmRzOwogCiAJ dTMyIHBpbmdwb25nX2NvdW50OwotCXN0cnVjdCBkcHVfcGluZ3BvbmdfY2ZnIHBpbmdwb25nW01B WF9CTE9DS1NdOworCXN0cnVjdCBkcHVfcGluZ3BvbmdfY2ZnICpwaW5ncG9uZzsKIAogCXUzMiBk c2NfY291bnQ7Ci0Jc3RydWN0IGRwdV9kc2NfY2ZnIGRzY1tNQVhfQkxPQ0tTXTsKKwlzdHJ1Y3Qg ZHB1X2RzY19jZmcgKmRzYzsKIAogCXUzMiBjZG1fY291bnQ7Ci0Jc3RydWN0IGRwdV9jZG1fY2Zn IGNkbVtNQVhfQkxPQ0tTXTsKKwlzdHJ1Y3QgZHB1X2NkbV9jZmcgKmNkbTsKIAogCXUzMiBpbnRm X2NvdW50OwotCXN0cnVjdCBkcHVfaW50Zl9jZmcgaW50ZltNQVhfQkxPQ0tTXTsKKwlzdHJ1Y3Qg ZHB1X2ludGZfY2ZnICppbnRmOwogCiAJdTMyIHdiX2NvdW50OwotCXN0cnVjdCBkcHVfd2JfY2Zn IHdiW01BWF9CTE9DS1NdOworCXN0cnVjdCBkcHVfd2JfY2ZnICp3YjsKIAogCXUzMiB2YmlmX2Nv dW50OwotCXN0cnVjdCBkcHVfdmJpZl9jZmcgdmJpZltNQVhfQkxPQ0tTXTsKKwlzdHJ1Y3QgZHB1 X3ZiaWZfY2ZnICp2YmlmOwogCiAJdTMyIHJlZ19kbWFfY291bnQ7CiAJc3RydWN0IGRwdV9yZWdf ZG1hX2NmZyBkbWFfY2ZnOwpAQCAtOTQwLDkgKzk0Niw4IEBAIHN0cnVjdCBkcHVfbWRzc19jZmcg ewogfTsKIAogc3RydWN0IGRwdV9tZHNzX2h3X2NmZ19oYW5kbGVyIHsKLQl1MzIgbWFqb3I7Ci0J dTMyIG1pbm9yOwotCXN0cnVjdCBkcHVfbWRzc19jZmcqICgqY2ZnX2luaXQpKHUzMik7CisJdTMy IGh3X3JldjsKKwl2b2lkICgqY2ZnX2luaXQpKHN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmcp OwogfTsKIAogLyoKQEAgLTk2NCwxNCArOTY5LDEzIEBAIHN0cnVjdCBkcHVfbWRzc19od19jZmdf aGFuZGxlciB7CiAjZGVmaW5lIEJMS19BRChzKSAoKHMpLT5hZCkKIAogLyoqCi0gKiBkcHVfaHdf Y2F0YWxvZ19pbml0IC0gZHB1IGhhcmR3YXJlIGNhdGFsb2cgaW5pdCBBUEkgcGFyc2VzIGR0c2kg cHJvcGVydHkKLSAqIGFuZCBzdG9yZXMgYWxsIHBhcnNlZCBvZmZzZXQsIGhhcmR3YXJlIGNhcGFi aWxpdGllcyBpbiBjb25maWcgc3RydWN0dXJlLgotICogQGRldjogICAgICAgICAgZHJtIGRldmlj ZSBub2RlLgotICogQGh3X3JldjogICAgICAgY2FsbGVyIG5lZWRzIHByb3ZpZGUgdGhlIGhhcmR3 YXJlIHJldmlzaW9uIGJlZm9yZSBwYXJzaW5nLgorICogZHB1X2h3X2NhdGFsb2dfaW5pdCAtIGRw dSBoYXJkd2FyZSBjYXRhbG9nIGluaXQgQVBJIHJldHJpZXZlcworICogaGFyZGNvZGVkIHRhcmdl dCBzcGVjaWZpYyBjYXRhbG9nIGluZm9ybWF0aW9uIGluIGNvbmZpZyBzdHJ1Y3R1cmUKKyAqIEBo d19yZXY6ICAgICAgIGNhbGxlciBuZWVkcyBwcm92aWRlIHRoZSBoYXJkd2FyZSByZXZpc2lvbi4K ICAqCi0gKiBSZXR1cm46IHBhcnNlZCBkcHUgY29uZmlnIHN0cnVjdHVyZQorICogUmV0dXJuOiBk cHUgY29uZmlnIHN0cnVjdHVyZQogICovCi1zdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfaHdfY2F0 YWxvZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBod19yZXYpOworc3RydWN0IGRw dV9tZHNzX2NmZyAqZHB1X2h3X2NhdGFsb2dfaW5pdCh1MzIgaHdfcmV2KTsKIAogLyoqCiAgKiBk cHVfaHdfY2F0YWxvZ19kZWluaXQgLSBkcHUgaGFyZHdhcmUgY2F0YWxvZyBjbGVhbnVwCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuYwppbmRleCA1MzQzMTg0Li4x MGJkY2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf c3NwcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmMK QEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1cF9mb3JtYXQo c3RydWN0IGRwdV9od19waXBlICpjdHgsCiAJCURQVV9SRUdfV1JJVEUoYywgU1NQUF9GRVRDSF9D T05GSUcsCiAJCQlEUFVfRkVUQ0hfQ09ORklHX1JFU0VUX1ZBTFVFIHwKIAkJCWN0eC0+bWRwLT5o aWdoZXN0X2JhbmtfYml0IDw8IDE4KTsKLQkJaWYgKElTX1VCV0NfMjBfU1VQUE9SVEVEKGN0eC0+ Y2F0YWxvZy0+dWJ3Y192ZXJzaW9uKSkgeworCQlpZiAoSVNfVUJXQ18yMF9TVVBQT1JURUQoY3R4 LT5jYXRhbG9nLT5jYXBzLT51YndjX3ZlcnNpb24pKSB7CiAJCQlmYXN0X2NsZWFyID0gZm10LT5h bHBoYV9lbmFibGUgPyBCSVQoMzEpIDogMDsKIAkJCURQVV9SRUdfV1JJVEUoYywgU1NQUF9VQldD X1NUQVRJQ19DVFJMLAogCQkJCQlmYXN0X2NsZWFyIHwgKGN0eC0+bWRwLT51YndjX3N3aXp6bGUp IHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190b3Au YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190b3AuYwppbmRleCBmNzY0 OTUxLi4wY2FhZGNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X3RvcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190 b3AuYwpAQCAtMzQwLDcgKzM0MCw3IEBAIHZvaWQgZHB1X2h3X3Jlc2V0X3Vid2Moc3RydWN0IGRw dV9od19tZHAgKm1kcCwgc3RydWN0IGRwdV9tZHNzX2NmZyAqbSkKIAlpZiAoIW1kcCB8fCAhbSkK IAkJcmV0dXJuOwogCi0JaWYgKCFJU19VQldDXzIwX1NVUFBPUlRFRChtLT51YndjX3ZlcnNpb24p KQorCWlmICghSVNfVUJXQ18yMF9TVVBQT1JURUQobS0+Y2Fwcy0+dWJ3Y192ZXJzaW9uKSkKIAkJ cmV0dXJuOwogCiAJLyogZm9yY2UgYmxrIG9mZnNldCB0byB6ZXJvIHRvIGFjY2VzcyBiZWdpbm5p bmcgb2YgcmVnaXN0ZXIgcmVnaW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfd2IuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od193Yi5jCmluZGV4IGZiMDJkZjQuLjkwYjJhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od193Yi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od193Yi5jCkBAIC0xNDcsNyArMTQ3LDcgQEAgc3RhdGljIHZvaWQgZHB1 X2h3X3diX3NldHVwX2Zvcm1hdChzdHJ1Y3QgZHB1X2h3X3diICpjdHgsCiAJCXdyaXRlX2NvbmZp ZyB8PSAoY3R4LT5tZHAtPmhpZ2hlc3RfYmFua19iaXQgPDwgOCk7CiAJCWlmIChmbXQtPmJhc2Uu cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfUkdCNTY1KQogCQkJd3JpdGVfY29uZmlnIHw9IDB4 ODsKLQkJaWYgKElTX1VCV0NfMjBfU1VQUE9SVEVEKGN0eC0+Y2F0YWxvZy0+dWJ3Y192ZXJzaW9u KSkKKwkJaWYgKElTX1VCV0NfMjBfU1VQUE9SVEVEKGN0eC0+Y2F0YWxvZy0+Y2Fwcy0+dWJ3Y192 ZXJzaW9uKSkKIAkJCURQVV9SRUdfV1JJVEUoYywgV0JfVUJXQ19TVEFUSUNfQ1RSTCwKIAkJCQkJ KGN0eC0+bWRwLT51YndjX3N3aXp6bGUgPDwgMCkgfAogCQkJCQkoY3R4LT5tZHAtPmhpZ2hlc3Rf YmFua19iaXQgPDwgNCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCmlu ZGV4IDcxODZjNjQuLjc0YWZhMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf a21zLmMKQEAgLTE4NzYsNyArMTg3Niw3IEBAIHN0YXRpYyBpbnQgZHB1X2ttc19od19pbml0KHN0 cnVjdCBtc21fa21zICprbXMpCiAKIAlwcl9pbmZvKCJkcHUgaGFyZHdhcmUgcmV2aXNpb246MHgl eFxuIiwgZHB1X2ttcy0+Y29yZV9yZXYpOwogCi0JZHB1X2ttcy0+Y2F0YWxvZyA9IGRwdV9od19j YXRhbG9nX2luaXQoZGV2LCBkcHVfa21zLT5jb3JlX3Jldik7CisJZHB1X2ttcy0+Y2F0YWxvZyA9 IGRwdV9od19jYXRhbG9nX2luaXQoZHB1X2ttcy0+Y29yZV9yZXYpOwogCWlmIChJU19FUlJfT1Jf TlVMTChkcHVfa21zLT5jYXRhbG9nKSkgewogCQlyYyA9IFBUUl9FUlIoZHB1X2ttcy0+Y2F0YWxv Zyk7CiAJCWlmICghZHB1X2ttcy0+Y2F0YWxvZykKQEAgLTE5ODEsNyArMTk4MSw4IEBAIHN0YXRp YyBpbnQgZHB1X2ttc19od19pbml0KHN0cnVjdCBtc21fa21zICprbXMpCiAJICogbWF4IGNydGMg d2lkdGggaXMgZXF1YWwgdG8gdGhlIG1heCBtaXhlciB3aWR0aCAqIDIgYW5kIG1heCBoZWlnaHQg aXMKIAkgKiBpcyA0SwogCSAqLwotCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gZHB1X2tt cy0+Y2F0YWxvZy0+bWF4X21peGVyX3dpZHRoICogMjsKKwlkZXYtPm1vZGVfY29uZmlnLm1heF93 aWR0aCA9CisJCQlkcHVfa21zLT5jYXRhbG9nLT5jYXBzLT5tYXhfbWl4ZXJfd2lkdGggKiAyOwog CWRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDQwOTY7CiAKIAkvKgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwppbmRleCBjNjU3ZTZiLi4zM2E4OTRlIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwpAQCAtMTg4LDcgKzE4OCw3 IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9kcHVfcGxhbmVfY2FsY19maWxsX2xldmVsKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAogCiAJcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7CiAJcHN0YXRl ID0gdG9fZHB1X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Ci0JZml4ZWRfYnVmZl9zaXplID0g cGRwdS0+cGlwZV9zYmxrLT5waXhlbF9yYW1fc2l6ZTsKKwlmaXhlZF9idWZmX3NpemUgPSBwZHB1 LT5waXBlX3NibGstPmNvbW1vbi0+cGl4ZWxfcmFtX3NpemU7CiAKIAlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHRtcCwgJnBkcHUtPm1wbGFuZV9saXN0LCBtcGxhbmVfbGlzdCkgewogCQlpZiAoIWRwdV9w bGFuZV9lbmFibGVkKHRtcC0+YmFzZS5zdGF0ZSkpCkBAIC0xMzIwLDcgKzEzMjAsNyBAQCBpbnQg ZHB1X3BsYW5lX3ZhbGlkYXRlX211bHRpcmVjdF92MihzdHJ1Y3QgZHB1X211bHRpcmVjdF9wbGFu ZV9zdGF0ZXMgKnBsYW5lKQogCQkgKiBTbyB3ZSBjYW5ub3Qgc3VwcG9ydCBtb3JlIHRoYW4gaGFs ZiBvZiB0aGUgc3VwcG9ydGVkIFNTUFAKIAkJICogd2lkdGggZm9yIHRpbGVkIGZvcm1hdHMuCiAJ CSAqLwotCQl3aWR0aF90aHJlc2hvbGQgPSBkcHVfcGxhbmVbaV0tPnBpcGVfc2Jsay0+bWF4bGlu ZXdpZHRoOworCQl3aWR0aF90aHJlc2hvbGQgPSBkcHVfcGxhbmVbaV0tPnBpcGVfc2Jsay0+Y29t bW9uLT5tYXhsaW5ld2lkdGg7CiAJCWlmIChoYXNfdGlsZWRfcmVjdCkKIAkJCXdpZHRoX3RocmVz aG9sZCAvPSAyOwogCkBAIC0xNjg0LDcgKzE2ODQsNyBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9z c3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAogCW1heF91cHNjYWxl ID0gcGRwdS0+cGlwZV9zYmxrLT5tYXh1cHNjYWxlOwogCW1heF9kb3duc2NhbGUgPSBwZHB1LT5w aXBlX3NibGstPm1heGR3bnNjYWxlOwotCW1heF9saW5ld2lkdGggPSBwZHB1LT5waXBlX3NibGst Pm1heGxpbmV3aWR0aDsKKwltYXhfbGluZXdpZHRoID0gcGRwdS0+cGlwZV9zYmxrLT5jb21tb24t Pm1heGxpbmV3aWR0aDsKIAogCURQVV9ERUJVR19QTEFORShwZHB1LCAiY2hlY2sgJWQgLT4gJWRc biIsCiAJCWRwdV9wbGFuZV9lbmFibGVkKHBsYW5lLT5zdGF0ZSksIGRwdV9wbGFuZV9lbmFibGVk KHN0YXRlKSk7CkBAIC0xNzI5LDggKzE3MjksOCBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3Bw X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAogCS8qIGRlY2ltYXRpb24g dmFsaWRhdGlvbiAqLwogCX0gZWxzZSBpZiAoZGVjaV93IHx8IGRlY2lfaCkgewotCQlpZiAoKGRl Y2lfdyA+IHBkcHUtPnBpcGVfc2Jsay0+bWF4aGRlY2lleHApIHx8Ci0JCQkoZGVjaV9oID4gcGRw dS0+cGlwZV9zYmxrLT5tYXh2ZGVjaWV4cCkpIHsKKwkJaWYgKChkZWNpX3cgPiBwZHB1LT5waXBl X3NibGstPmNvbW1vbi0+bWF4aGRlY2lleHApIHx8CisJCQkoZGVjaV9oID4gcGRwdS0+cGlwZV9z YmxrLT5jb21tb24tPm1heHZkZWNpZXhwKSkgewogCQkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsCiAJ CQkJCSJ0b28gbXVjaCBkZWNpbWF0aW9uIHJlcXVlc3RlZFxuIik7CiAJCQlyZXQgPSAtRUlOVkFM OwpAQCAtMjI2OCwxNyArMjI2OCwxNyBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX2luc3RhbGxf cHJvcGVydGllcyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJMHgwLCAwLCAyNTUsIDI1NSwg UExBTkVfUFJPUF9BTFBIQSk7CiAKIAlpZiAoIW1hc3Rlcl9wbGFuZV9pZCkgewotCQlpZiAocGRw dS0+cGlwZV9zYmxrLT5tYXhoZGVjaWV4cCkgeworCQlpZiAocGRwdS0+cGlwZV9zYmxrLT5jb21t b24tPm1heGhkZWNpZXhwKSB7CiAJCQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmcGRwdS0+ cHJvcGVydHlfaW5mbywKIAkJCQkJImhfZGVjaW1hdGUiLCAweDAsIDAsCi0JCQkJCXBkcHUtPnBp cGVfc2Jsay0+bWF4aGRlY2lleHAsIDAsCisJCQkJCXBkcHUtPnBpcGVfc2Jsay0+Y29tbW9uLT5t YXhoZGVjaWV4cCwgMCwKIAkJCQkJUExBTkVfUFJPUF9IX0RFQ0lNQVRFKTsKIAkJfQogCi0JCWlm IChwZHB1LT5waXBlX3NibGstPm1heHZkZWNpZXhwKSB7CisJCWlmIChwZHB1LT5waXBlX3NibGst PmNvbW1vbi0+bWF4dmRlY2lleHApIHsKIAkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZw ZHB1LT5wcm9wZXJ0eV9pbmZvLAogCQkJCQkidl9kZWNpbWF0ZSIsIDB4MCwgMCwKLQkJCQkJcGRw dS0+cGlwZV9zYmxrLT5tYXh2ZGVjaWV4cCwgMCwKKwkJCQkJcGRwdS0+cGlwZV9zYmxrLT5jb21t b24tPm1heHZkZWNpZXhwLCAwLAogCQkJCQlQTEFORV9QUk9QX1ZfREVDSU1BVEUpOwogCQl9CiAK QEAgLTIzODksMTUgKzIzODksMTUgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9pbnN0YWxsX3By b3BlcnRpZXMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQlwZHB1LT5waXBlX2h3LT5vcHMu Z2V0X3NjYWxlcl92ZXIocGRwdS0+cGlwZV9odykpOwogCiAJZHB1X2ttc19pbmZvX2FkZF9rZXlp bnQoaW5mbywgIm1heF9saW5ld2lkdGgiLAotCQkJcGRwdS0+cGlwZV9zYmxrLT5tYXhsaW5ld2lk dGgpOworCQkJcGRwdS0+cGlwZV9zYmxrLT5jb21tb24tPm1heGxpbmV3aWR0aCk7CiAJZHB1X2tt c19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1heF91cHNjYWxlIiwKIAkJCXBkcHUtPnBpcGVfc2Js ay0+bWF4dXBzY2FsZSk7CiAJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1heF9kb3du c2NhbGUiLAogCQkJcGRwdS0+cGlwZV9zYmxrLT5tYXhkd25zY2FsZSk7CiAJZHB1X2ttc19pbmZv X2FkZF9rZXlpbnQoaW5mbywgIm1heF9ob3Jpem9udGFsX2RlY2kiLAotCQkJcGRwdS0+cGlwZV9z YmxrLT5tYXhoZGVjaWV4cCk7CisJCQlwZHB1LT5waXBlX3NibGstPmNvbW1vbi0+bWF4aGRlY2ll eHApOwogCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfdmVydGljYWxfZGVjaSIs Ci0JCQlwZHB1LT5waXBlX3NibGstPm1heHZkZWNpZXhwKTsKKwkJCXBkcHUtPnBpcGVfc2Jsay0+ Y29tbW9uLT5tYXh2ZGVjaWV4cCk7CiAJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1h eF9wZXJfcGlwZV9idyIsCiAJCQlwZHB1LT5waXBlX3NibGstPm1heF9wZXJfcGlwZV9idyAqIDEw MDBMTCk7CiAJbXNtX3Byb3BlcnR5X3NldF9ibG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAmcGRw dS0+YmxvYl9pbmZvLAotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlz IGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBGb3VuZGF0aW9uIENv bGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZnJlZWRyZW5vCg==