From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [1/8] phy: tegra: xusb: t210: add XUSB device mode support From: Thierry Reding Message-Id: <20190204122745.GE10412@ulmo> Date: Mon, 4 Feb 2019 13:27:45 +0100 To: Nagarjuna Kristam Cc: balbi@kernel.org, gregkh@linuxfoundation.org, jonathanh@nvidia.com, linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org List-ID: T24gVGh1LCBKYW4gMDMsIDIwMTkgYXQgMDM6MzQ6NTJQTSArMDUzMCwgTmFnYXJqdW5hIEtyaXN0 YW0gd3JvdGU6Cj4gQWRkIHN1cHBvcnQgZm9yIFhVU0IgZGV2aWNlIG1vZGUgY29udHJvbGxlciBv biBUZWdyYTIxMC4KPiBVcGRhdGUgUEFEQ1RMIGRyaXZlciB0byBzZXQgcG9ydCBjYXAgYmFzZWQg b24gRFQgY29uZmlnLgo+IEFkZCBjb2RlIHRvIGhhbmRsZSBwcm9wZXJ0eSAibnZpZGlhLHVzYjMt cG9ydC1mYWtlIgo+IFByb3ZpZGUgQVBJJ3MgdG8gY29udHJvbCB2YnVzIG92ZXJyaWRlIGFuZCB1 dG1pIHBhZCBwb3dlciBjb250cm9sCgpZb3UgZXNzZW50aWFsbHkgbGlzdCB0aHJlZSBmZWF0dXJl cyBhZGRpdGlvbnMgaGVyZSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8KcHJvdmlkZSBlYWNoIG9mIHRo ZW0gaW4gYSBzZXBhcmF0ZSBwYXRjaC4gVGhhdCBoZWxwcyByZXZpZXdlcnMKY29uY2VudHJhdGUg b24gb25lIGZlYXR1cmUgYXQgYSB0aW1lIHdpdGhvdXQgaGF2aW5nIHRvIGxvYWQgY29udGV4dCBm b3IKdGhyZWUgZGlmZmVyZW50IHRoaW5ncyBpbiBwYXJhbGxlbC4KCkFsc28sIGZvciBlYWNoIGZl YXR1cmUgcGxlYXNlIHByb3ZpZGUgYSBiaXQgbW9yZSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uCmFz IHdlbGwgYXMgcmVhc29ucyBmb3Igd2h5IHRoZXkgYXJlIGFkZGVkLgoKPiBTaWduZWQtb2ZmLWJ5 OiBOYWdhcmp1bmEgS3Jpc3RhbSA8bmtyaXN0YW1AbnZpZGlhLmNvbT4KPiAtLS0KPiAgZHJpdmVy cy9waHkvdGVncmEveHVzYi10ZWdyYTIxMC5jIHwgMjk3ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystCj4gIGRyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYyAgICAgICAgICB8ICA3 NSArKysrKysrKystCj4gIGRyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuaCAgICAgICAgICB8ICAxNiAr LQo+ICBpbmNsdWRlL2xpbnV4L3BoeS90ZWdyYS94dXNiLmggICAgfCAgIDcgKy0KPiAgNCBmaWxl cyBjaGFuZ2VkLCAzODYgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9waHkvdGVncmEveHVzYi10ZWdyYTIxMC5jIGIvZHJpdmVycy9waHkvdGVn cmEveHVzYi10ZWdyYTIxMC5jCj4gaW5kZXggMDViZWUzMi4uMDI4OWUxMCAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL3BoeS90ZWdyYS94dXNiLXRlZ3JhMjEwLmMKPiArKysgYi9kcml2ZXJzL3BoeS90 ZWdyYS94dXNiLXRlZ3JhMjEwLmMKPiBAQCAtMSw1ICsxLDUgQEAKPiAgLyoKPiAtICogQ29weXJp Z2h0IChjKSAyMDE0LCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCwgTlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KPiAgICogQ29weXJpZ2h0IChDKSAyMDE1IEdvb2dsZSwgSW5jLgo+ICAg Kgo+ICAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdAo+IEBAIC00Nyw3ICs0NywxMCBAQAo+ICAjZGVmaW5lIFhV U0JfUEFEQ1RMX1VTQjJfUEFEX01VWF9VU0IyX0JJQVNfUEFEX1hVU0IgMHgxCj4gIAo+ICAjZGVm aW5lIFhVU0JfUEFEQ1RMX1VTQjJfUE9SVF9DQVAgMHgwMDgKPiArI2RlZmluZSBYVVNCX1BBRENU TF9VU0IyX1BPUlRfQ0FQX1BPUlRYX0NBUF9ESVNBQkxFRCh4KSAoMHgwIDw8ICgoeCkgKiA0KSkK PiAgI2RlZmluZSBYVVNCX1BBRENUTF9VU0IyX1BPUlRfQ0FQX1BPUlRYX0NBUF9IT1NUKHgpICgw eDEgPDwgKCh4KSAqIDQpKQo+ICsjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJfUE9SVF9DQVBfUE9S VFhfQ0FQX0RFVklDRSh4KSAoMHgyIDw8ICgoeCkgKiA0KSkKPiArI2RlZmluZSBYVVNCX1BBRENU TF9VU0IyX1BPUlRfQ0FQX1BPUlRYX0NBUF9PVEcoeCkgKDB4MyA8PCAoKHgpICogNCkpCj4gICNk ZWZpbmUgWFVTQl9QQURDVExfVVNCMl9QT1JUX0NBUF9QT1JUWF9DQVBfTUFTSyh4KSAoMHgzIDw8 ICgoeCkgKiA0KSkKPiAgCj4gICNkZWZpbmUgWFVTQl9QQURDVExfU1NfUE9SVF9NQVAgMHgwMTQK PiBAQCAtNTUsNiArNTgsNyBAQAo+ICAjZGVmaW5lIFhVU0JfUEFEQ1RMX1NTX1BPUlRfTUFQX1BP UlRYX01BUF9TSElGVCh4KSAoKHgpICogNSkKPiAgI2RlZmluZSBYVVNCX1BBRENUTF9TU19QT1JU X01BUF9QT1JUWF9NQVBfTUFTSyh4KSAoMHg3IDw8ICgoeCkgKiA1KSkKPiAgI2RlZmluZSBYVVNC X1BBRENUTF9TU19QT1JUX01BUF9QT1JUWF9NQVAoeCwgdikgKCgodikgJiAweDcpIDw8ICgoeCkg KiA1KSkKPiArI2RlZmluZSBYVVNCX1BBRENUTF9TU19QT1JUX01BUF9QT1JUX0RJU0FCTEVEIDB4 Nwo+ICAKPiAgI2RlZmluZSBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xIDB4MDI0Cj4gICNkZWZp bmUgWFVTQl9QQURDVExfRUxQR19QUk9HUkFNMV9BVVhfTVVYX0xQMF9WQ09SRV9ET1dOICgxIDw8 IDMxKQo+IEBAIC02OSw5ICs3MywxNCBAQAo+ICAjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjNfUEFE X01VWF9QQ0lFX0lERFFfRElTQUJMRSh4KSAoMSA8PCAoMSArICh4KSkpCj4gICNkZWZpbmUgWFVT Ql9QQURDVExfVVNCM19QQURfTVVYX1NBVEFfSUREUV9ESVNBQkxFKHgpICgxIDw8ICg4ICsgKHgp KSkKPiAgCj4gKyNkZWZpbmUgWFVTQl9QQURDVExfVVNCMl9CQVRURVJZX0NIUkdfT1RHUEFEWF9D VEwwKHgpICgweDA4MCArICh4KSAqIDB4NDApCj4gKyNkZWZpbmUgWFVTQl9QQURDVExfVVNCMl9C QVRURVJZX0NIUkdfT1RHUEFEX0NUTDBfWklQICgxIDw8IDE4KQo+ICsjZGVmaW5lIFhVU0JfUEFE Q1RMX1VTQjJfQkFUVEVSWV9DSFJHX09UR1BBRF9DVEwwX1pJTiAoMSA8PCAyMikKPiArCj4gICNk ZWZpbmUgWFVTQl9QQURDVExfVVNCMl9CQVRURVJZX0NIUkdfT1RHUEFEWF9DVEwxKHgpICgweDA4 NCArICh4KSAqIDB4NDApCj4gICNkZWZpbmUgWFVTQl9QQURDVExfVVNCMl9CQVRURVJZX0NIUkdf T1RHUEFEX0NUTDFfVlJFR19MRVZfU0hJRlQgNwo+ICAjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJf QkFUVEVSWV9DSFJHX09UR1BBRF9DVEwxX1ZSRUdfTEVWX01BU0sgMHgzCj4gKyNkZWZpbmUgWFVT Ql9QQURDVExfVVNCMl9CQVRURVJZX0NIUkdfT1RHUEFEX0NUTDFfVlJFR19MRVZfVkFMIDB4MQo+ ICAjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJfQkFUVEVSWV9DSFJHX09UR1BBRF9DVEwxX1ZSRUdf RklYMTggKDEgPDwgNikKPiAgCj4gICNkZWZpbmUgWFVTQl9QQURDVExfVVNCMl9PVEdfUEFEWF9D VEwwKHgpICgweDA4OCArICh4KSAqIDB4NDApCj4gQEAgLTIzMCw2ICsyMzksMTIgQEAKPiAgI2Rl ZmluZSBYVVNCX1BBRENUTF9VUEhZX1VTQjNfUEFEWF9FQ1RMNih4KSAoMHhhNzQgKyAoeCkgKiAw eDQwKQo+ICAjZGVmaW5lIFhVU0JfUEFEQ1RMX1VQSFlfVVNCM19QQURfRUNUTDZfUlhfRVFfQ1RS TF9IX1ZBTCAweGZjZjAxMzY4Cj4gIAo+ICsjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19J RCAweGM2MAo+ICsjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19JRF9PVkVSUklERV9WQlVT X09OICgxIDw8IDE0KQo+ICsjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19JRF9PVkVSUklE RV9TSElGVCAxOAo+ICsjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19JRF9PVkVSUklERV9N QVNLIDB4Zgo+ICsjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19JRF9PVkVSUklERV9WQUwg OAo+ICsKPiAgc3RydWN0IHRlZ3JhMjEwX3h1c2JfZnVzZV9jYWxpYnJhdGlvbiB7Cj4gIAl1MzIg aHNfY3Vycl9sZXZlbFs0XTsKPiAgCXUzMiBoc190ZXJtX3JhbmdlX2FkajsKPiBAQCAtOTA1LDYg KzkyMCwxNjEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV94dXNiX2xhbmVfb3BzIHRlZ3Jh MjEwX3VzYjJfbGFuZV9vcHMgPSB7Cj4gIAkucmVtb3ZlID0gdGVncmEyMTBfdXNiMl9sYW5lX3Jl bW92ZSwKPiAgfTsKPiAgCj4gKy8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIHBhZGN0bC0+bG9jayAq Lwo+ICtzdGF0aWMgdm9pZCB0ZWdyYTIxMF91dG1pX2JpYXNfcGFkX3Bvd2VyX29uKHN0cnVjdCB0 ZWdyYV94dXNiX3BhZGN0bCAqcGFkY3RsLAo+ICsJCQkJc3RydWN0IHRlZ3JhX3h1c2JfdXNiMl9w YWQgKnBhZCkKPiArewo+ICsJdTMyIHJlZzsKPiArCj4gKwlpZiAocGFkLT5lbmFibGUrKyA+IDAp Cj4gKwkJcmV0dXJuOwo+ICsKPiArCWRldl9kYmcocGFkY3RsLT5kZXYsICJwb3dlciBvbiBCSUFT IFBBRCAmIFVTQjIgdHJhY2tpbmdcbiIpOwo+ICsKPiArCWlmIChjbGtfcHJlcGFyZV9lbmFibGUo cGFkLT5jbGspKQo+ICsJCWRldl93YXJuKHBhZGN0bC0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBC SUFTIFBBRCAmIFVTQjIgdHJhY2tpbmdcbiIpOwoKTWF5YmUga2VlcCB0cmFjayBvZiB0aGUgZXhh Y3QgZXJyb3IgYW5kIG1ha2UgdGhhdCBwYXJ0IG9mIHRoZSBlcnJvcgptZXNzYWdlPwoKPiArCj4g KwlyZWcgPSBwYWRjdGxfcmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NU TDEpOwo+ICsKPiArCXJlZyAmPSB+KChYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDFfVFJL X1NUQVJUX1RJTUVSX01BU0sgPDwKPiArCQkgICAgWFVTQl9QQURDVExfVVNCMl9CSUFTX1BBRF9D VEwxX1RSS19TVEFSVF9USU1FUl9TSElGVCkgfAo+ICsJCSAgIChYVVNCX1BBRENUTF9VU0IyX0JJ QVNfUEFEX0NUTDFfVFJLX0RPTkVfUkVTRVRfVElNRVJfTUFTSyA8PAo+ICsJCSAgICBYVVNCX1BB RENUTF9VU0IyX0JJQVNfUEFEX0NUTDFfVFJLX0RPTkVfUkVTRVRfVElNRVJfU0hJRlQpKTsKPiAr CXJlZyB8PSAoWFVTQl9QQURDVExfVVNCMl9CSUFTX1BBRF9DVEwxX1RSS19TVEFSVF9USU1FUl9W QUwgPDwKPiArCQkgIFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMV9UUktfU1RBUlRfVElN RVJfU0hJRlQpIHwKPiArCQkgKFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMV9UUktfRE9O RV9SRVNFVF9USU1FUl9WQUwgPDwKPiArCQkgIFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RM MV9UUktfRE9ORV9SRVNFVF9USU1FUl9TSElGVCk7Cj4gKwlwYWRjdGxfd3JpdGVsKHBhZGN0bCwg cmVnLCBYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDEpOwo+ICsKPiArCXJlZyA9IHBhZGN0 bF9yZWFkbChwYWRjdGwsIFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMCk7Cj4gKwlyZWcg Jj0gflhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMF9QRDsKPiArCj4gKwlyZWcgJj0gfigo WFVTQl9QQURDVExfVVNCMl9CSUFTX1BBRF9DVEwwX0hTX1NRVUVMQ0hfTEVWRUxfTUFTSyA8PAo+ ICsJCSAgICBYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDBfSFNfU1FVRUxDSF9MRVZFTF9T SElGVCkgfAo+ICsJCSAgIChYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDBfSFNfRElTQ09O X0xFVkVMX01BU0sgPDwKPiArCQkgICAgWFVTQl9QQURDVExfVVNCMl9CSUFTX1BBRF9DVEwwX0hT X0RJU0NPTl9MRVZFTF9TSElGVCkpOwo+ICsJcmVnIHw9IChYVVNCX1BBRENUTF9VU0IyX0JJQVNf UEFEX0NUTDBfSFNfRElTQ09OX0xFVkVMX1ZBTCA8PAo+ICsJCSAgWFVTQl9QQURDVExfVVNCMl9C SUFTX1BBRF9DVEwwX0hTX0RJU0NPTl9MRVZFTF9TSElGVCk7Cj4gKwo+ICsJaWYgKHRlZ3JhX3Nr dV9pbmZvLnJldmlzaW9uIDwgVEVHUkFfUkVWSVNJT05fQTAyKQo+ICsJCXJlZyB8PSAoWFVTQl9Q QURDVExfVVNCMl9CSUFTX1BBRF9DVEwwX0hTX1NRVUVMQ0hfTEVWRUxfVkFMIDw8Cj4gKwkJCVhV U0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMF9IU19TUVVFTENIX0xFVkVMX1NISUZUKTsKPiAr CXBhZGN0bF93cml0ZWwocGFkY3RsLCByZWcsIFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RM MCk7Cj4gKwo+ICsJdWRlbGF5KDEpOwo+ICsKPiArCXJlZyA9IHBhZGN0bF9yZWFkbChwYWRjdGws IFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMSk7Cj4gKwlyZWcgJj0gflhVU0JfUEFEQ1RM X1VTQjJfQklBU19QQURfQ1RMMV9QRF9UUks7Cj4gKwlwYWRjdGxfd3JpdGVsKHBhZGN0bCwgcmVn LCBYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDEpOwo+ICt9Cj4gKwo+ICsvKiBtdXN0IGJl IGNhbGxlZCB1bmRlciBwYWRjdGwtPmxvY2sgKi8KPiArc3RhdGljIHZvaWQgdGVncmEyMTBfdXRt aV9iaWFzX3BhZF9wb3dlcl9vZmYoc3RydWN0IHRlZ3JhX3h1c2JfcGFkY3RsICpwYWRjdGwsCj4g KwkJCQlzdHJ1Y3QgdGVncmFfeHVzYl91c2IyX3BhZCAqcGFkKQo+ICt7Cj4gKwl1MzIgcmVnOwo+ ICsKPiArCWlmIChXQVJOX09OKHBhZC0+ZW5hYmxlID09IDApKQo+ICsJCXJldHVybjsKPiArCj4g KwlpZiAoLS1wYWQtPmVuYWJsZSA+IDApCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRldl9kYmcocGFk Y3RsLT5kZXYsICJwb3dlciBvZmYgVVNCMiB0cmFja2luZ1xuIik7Cj4gKwlyZWcgPSBwYWRjdGxf cmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDEpOwo+ICsJcmVnIHw9 IFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMV9QRF9UUks7Cj4gKwlwYWRjdGxfd3JpdGVs KHBhZGN0bCwgcmVnLCBYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDEpOwo+ICsKPiArCWNs a19kaXNhYmxlX3VucHJlcGFyZShwYWQtPmNsayk7Cj4gK30KPiArCj4gK3ZvaWQgdGVncmEyMTBf dXRtaV9wYWRfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQo+ICt7Cj4gKwlzdHJ1Y3QgdGVncmFf eHVzYl9sYW5lICpsYW5lOwo+ICsJc3RydWN0IHRlZ3JhX3h1c2JfdXNiMl9sYW5lICp1c2IyOwo+ ICsJc3RydWN0IHRlZ3JhX3h1c2JfdXNiMl9wYWQgKnBhZDsKPiArCXN0cnVjdCB0ZWdyYV94dXNi X3BhZGN0bCAqcGFkY3RsOwo+ICsJdW5zaWduZWQgaW50IGluZGV4Owo+ICsJc3RydWN0IGRldmlj ZSAqZGV2Owo+ICsJdTMyIHJlZzsKPiArCj4gKwlpZiAoIXBoeSkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJbGFuZSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+ICsJdXNiMiA9IHRvX3VzYjJfbGFuZShs YW5lKTsKPiArCXBhZCA9IHRvX3VzYjJfcGFkKGxhbmUtPnBhZCk7Cj4gKwlwYWRjdGwgPSBsYW5l LT5wYWQtPnBhZGN0bDsKPiArCWluZGV4ID0gbGFuZS0+aW5kZXg7Cj4gKwlkZXYgPSBwYWRjdGwt PmRldjsKPiArCj4gKwlpZiAodXNiMi0+cG93ZXJlZF9vbikKPiArCQlyZXR1cm47Cj4gKwo+ICsJ bXV0ZXhfbG9jaygmcGFkY3RsLT5sb2NrKTsKPiArCj4gKwlkZXZfaW5mbyhkZXYsICJwb3dlciBv biBVVE1JIHBhZHMgJWRcbiIsIGluZGV4KTsKCmRldl9kYmcoKT8gQWxzbywgaW5kZXggaXMgdW5z aWduZWQsIHNvIHlvdSBzaG91bGQgdXNlICV1IHRvIHByaW50IGl0LgoKPiArCj4gKwl0ZWdyYTIx MF91dG1pX2JpYXNfcGFkX3Bvd2VyX29uKHBhZGN0bCwgcGFkKTsKPiArCj4gKwl1ZGVsYXkoMik7 Cj4gKwo+ICsJcmVnID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwgWFVTQl9QQURDVExfVVNCMl9PVEdf UEFEWF9DVEwwKGluZGV4KSk7Cj4gKwlyZWcgJj0gflhVU0JfUEFEQ1RMX1VTQjJfT1RHX1BBRF9D VEwwX1BEOwo+ICsJcGFkY3RsX3dyaXRlbChwYWRjdGwsIHJlZywgWFVTQl9QQURDVExfVVNCMl9P VEdfUEFEWF9DVEwwKGluZGV4KSk7Cj4gKwo+ICsJcmVnID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwg WFVTQl9QQURDVExfVVNCMl9PVEdfUEFEWF9DVEwxKGluZGV4KSk7Cj4gKwlyZWcgJj0gflhVU0Jf UEFEQ1RMX1VTQjJfT1RHX1BBRF9DVEwxX1BEX0RSOwo+ICsJcGFkY3RsX3dyaXRlbChwYWRjdGws IHJlZywgWFVTQl9QQURDVExfVVNCMl9PVEdfUEFEWF9DVEwxKGluZGV4KSk7Cj4gKwo+ICsJdXNi Mi0+cG93ZXJlZF9vbiA9IHRydWU7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZwYWRjdGwtPmxvY2sp Owo+ICt9Cj4gKwo+ICt2b2lkIHRlZ3JhMjEwX3V0bWlfcGFkX3Bvd2VyX2Rvd24oc3RydWN0IHBo eSAqcGh5KQo+ICt7Cj4gKwlzdHJ1Y3QgdGVncmFfeHVzYl9sYW5lICpsYW5lOwo+ICsJc3RydWN0 IHRlZ3JhX3h1c2JfdXNiMl9sYW5lICp1c2IyOwo+ICsJc3RydWN0IHRlZ3JhX3h1c2JfdXNiMl9w YWQgKnBhZDsKPiArCXN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAqcGFkY3RsOwo+ICsJdW5zaWdu ZWQgaW50IGluZGV4Owo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJdTMyIHJlZzsKPiArCj4g KwlpZiAoIXBoeSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJbGFuZSA9IHBoeV9nZXRfZHJ2ZGF0YShw aHkpOwo+ICsJdXNiMiA9IHRvX3VzYjJfbGFuZShsYW5lKTsKPiArCXBhZCA9IHRvX3VzYjJfcGFk KGxhbmUtPnBhZCk7Cj4gKwlwYWRjdGwgPSBsYW5lLT5wYWQtPnBhZGN0bDsKPiArCWluZGV4ID0g bGFuZS0+aW5kZXg7Cj4gKwlkZXYgPSBwYWRjdGwtPmRldjsKPiArCj4gKwlpZiAoIXVzYjItPnBv d2VyZWRfb24pCj4gKwkJcmV0dXJuOwo+ICsKPiArCW11dGV4X2xvY2soJnBhZGN0bC0+bG9jayk7 Cj4gKwo+ICsJZGV2X2luZm8oZGV2LCAicG93ZXIgZG93biBVVE1JIHBhZCAlZFxuIiwgaW5kZXgp OwoKU2FtZSBhcyBhYm92ZS4KCj4gKwo+ICsJcmVnID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwgWFVT Ql9QQURDVExfVVNCMl9PVEdfUEFEWF9DVEwwKGluZGV4KSk7Cj4gKwlyZWcgfD0gWFVTQl9QQURD VExfVVNCMl9PVEdfUEFEX0NUTDBfUEQ7Cj4gKwlwYWRjdGxfd3JpdGVsKHBhZGN0bCwgcmVnLCBY VVNCX1BBRENUTF9VU0IyX09UR19QQURYX0NUTDAoaW5kZXgpKTsKPiArCj4gKwlyZWcgPSBwYWRj dGxfcmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9VU0IyX09UR19QQURYX0NUTDEoaW5kZXgpKTsK PiArCXJlZyB8PSBYVVNCX1BBRENUTF9VU0IyX09UR19QQURfQ1RMMV9QRF9EUjsKPiArCXBhZGN0 bF93cml0ZWwocGFkY3RsLCByZWcsIFhVU0JfUEFEQ1RMX1VTQjJfT1RHX1BBRFhfQ1RMMShpbmRl eCkpOwo+ICsKPiArCXVkZWxheSgyKTsKPiArCj4gKwl0ZWdyYTIxMF91dG1pX2JpYXNfcGFkX3Bv d2VyX29mZihwYWRjdGwsIHBhZCk7Cj4gKwl1c2IyLT5wb3dlcmVkX29uID0gZmFsc2U7Cj4gKwo+ ICsJbXV0ZXhfdW5sb2NrKCZwYWRjdGwtPmxvY2spOwo+ICt9CgpJJ20gbm90IHN1cmUgSSB1bmRl cnN0YW5kIHRoaXMgY29ycmVjdGx5LiBUaGlzIHNlZW1zIHRvIGltcGxlbWVudCBzb21lCnJlZmVy ZW5jZSBjb3VudGluZyBvZiBpdHMgb3duLiBXaHkgaXMgdGhhdD8gSXMgaXQgYmVjYXVzZSBpdCBp cyBzaGFyZWQKYmV0d2VlbiBtdWx0aXBsZSBwYWRzPyBCdXQgdGhlbiwgeW91J3JlIHdyaXRpbmcg dG8gaW5kZXhlZCByZWdpc3RlcnMsCndoaWNoIGluZGljYXRlcyB0byBtZSB0aGF0IHRoZXNlIGFy ZSBpbiBmYWN0IHNlcGFyYXRlIHBhZHMgYW5kIG5vdCBhCnNoYXJlZCByZXNvdXJjZS4gU28gd2h5 IHRoZSByZWZlcmVuY2UgY291bnRpbmc/CgpJJ20gYWxzbyBub3Qgc3VyZSB3aHkgdGhlc2UgZnVu Y3Rpb25zIG5lZWQgdG8gYmUgYWNjZXNzaWJsZSBvdXRzaWRlIHRoaXMKZmlsZS4gVGhleSBhcmUg bm90IHVzZWQgb3V0c2lkZSwgYXMgZmFyIGFzIEkgY2FuIHRlbGwuCgo+ICBzdGF0aWMgaW50IHRl Z3JhMjEwX3VzYjJfcGh5X2luaXQoc3RydWN0IHBoeSAqcGh5KQo+ICB7Cj4gIAlzdHJ1Y3QgdGVn cmFfeHVzYl9sYW5lICpsYW5lID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gQEAgLTk0OCw2ICsx MTE4LDM0IEBAIHN0YXRpYyBpbnQgdGVncmEyMTBfdXNiMl9waHlfcG93ZXJfb24oc3RydWN0IHBo eSAqcGh5KQo+ICAKPiAgCXByaXYgPSB0b190ZWdyYTIxMF94dXNiX3BhZGN0bChwYWRjdGwpOwo+ ICAKPiArCWlmIChwb3J0LT51c2IzX3BvcnRfZmFrZSAhPSAtMSkgewo+ICsJCXZhbHVlID0gcGFk Y3RsX3JlYWRsKHBhZGN0bCwgWFVTQl9QQURDVExfU1NfUE9SVF9NQVApOwo+ICsJCXZhbHVlICY9 IH5YVVNCX1BBRENUTF9TU19QT1JUX01BUF9QT1JUWF9NQVBfTUFTSygKPiArCQkJCQlwb3J0LT51 c2IzX3BvcnRfZmFrZSk7Cj4gKwkJdmFsdWUgfD0gWFVTQl9QQURDVExfU1NfUE9SVF9NQVBfUE9S VFhfTUFQKAo+ICsJCQkJCXBvcnQtPnVzYjNfcG9ydF9mYWtlLCBpbmRleCk7Cj4gKwkJcGFkY3Rs X3dyaXRlbChwYWRjdGwsIHZhbHVlLCBYVVNCX1BBRENUTF9TU19QT1JUX01BUCk7Cj4gKwo+ICsJ CXZhbHVlID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwgWFVTQl9QQURDVExfRUxQR19QUk9HUkFNMSk7 Cj4gKwkJdmFsdWUgJj0gflhVU0JfUEFEQ1RMX0VMUEdfUFJPR1JBTTFfU1NQWF9FTFBHX1ZDT1JF X0RPV04oCj4gKwkJCQkJcG9ydC0+dXNiM19wb3J0X2Zha2UpOwo+ICsJCXBhZGN0bF93cml0ZWwo cGFkY3RsLCB2YWx1ZSwgWFVTQl9QQURDVExfRUxQR19QUk9HUkFNMSk7Cj4gKwo+ICsJCXVzbGVl cF9yYW5nZSgxMDAsIDIwMCk7Cj4gKwo+ICsJCXZhbHVlID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwg WFVTQl9QQURDVExfRUxQR19QUk9HUkFNMSk7Cj4gKwkJdmFsdWUgJj0gflhVU0JfUEFEQ1RMX0VM UEdfUFJPR1JBTTFfU1NQWF9FTFBHX0NMQU1QX0VOX0VBUkxZKAo+ICsJCQkJCXBvcnQtPnVzYjNf cG9ydF9mYWtlKTsKPiArCQlwYWRjdGxfd3JpdGVsKHBhZGN0bCwgdmFsdWUsIFhVU0JfUEFEQ1RM X0VMUEdfUFJPR1JBTTEpOwo+ICsKPiArCQl1c2xlZXBfcmFuZ2UoMTAwLCAyMDApOwo+ICsKPiAr CQl2YWx1ZSA9IHBhZGN0bF9yZWFkbChwYWRjdGwsIFhVU0JfUEFEQ1RMX0VMUEdfUFJPR1JBTTEp Owo+ICsJCXZhbHVlICY9IH5YVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xX1NTUFhfRUxQR19DTEFN UF9FTigKPiArCQkJCQlwb3J0LT51c2IzX3BvcnRfZmFrZSk7Cj4gKwkJcGFkY3RsX3dyaXRlbChw YWRjdGwsIHZhbHVlLCBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xKTsKPiArCX0KPiArCj4gIAl2 YWx1ZSA9IHBhZGN0bF9yZWFkbChwYWRjdGwsIFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RM MCk7Cj4gIAl2YWx1ZSAmPSB+KChYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDBfSFNfU1FV RUxDSF9MRVZFTF9NQVNLIDw8Cj4gIAkJICAgIFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RM MF9IU19TUVVFTENIX0xFVkVMX1NISUZUKSB8Cj4gQEAgLTk2NSw3ICsxMTYzLDE0IEBAIHN0YXRp YyBpbnQgdGVncmEyMTBfdXNiMl9waHlfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQo+ICAKPiAg CXZhbHVlID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwgWFVTQl9QQURDVExfVVNCMl9QT1JUX0NBUCk7 Cj4gIAl2YWx1ZSAmPSB+WFVTQl9QQURDVExfVVNCMl9QT1JUX0NBUF9QT1JUWF9DQVBfTUFTSyhp bmRleCk7Cj4gLQl2YWx1ZSB8PSBYVVNCX1BBRENUTF9VU0IyX1BPUlRfQ0FQX1BPUlRYX0NBUF9I T1NUKGluZGV4KTsKPiArCWlmIChwb3J0LT5wb3J0X2NhcCA9PSBVU0JfUE9SVF9ESVNBQkxFRCkK PiArCQl2YWx1ZSB8PSBYVVNCX1BBRENUTF9VU0IyX1BPUlRfQ0FQX1BPUlRYX0NBUF9ESVNBQkxF RChpbmRleCk7Cj4gKwllbHNlIGlmIChwb3J0LT5wb3J0X2NhcCA9PSBVU0JfREVWSUNFX0NBUCkK PiArCQl2YWx1ZSB8PSBYVVNCX1BBRENUTF9VU0IyX1BPUlRfQ0FQX1BPUlRYX0NBUF9ERVZJQ0Uo aW5kZXgpOwo+ICsJZWxzZSBpZiAocG9ydC0+cG9ydF9jYXAgPT0gVVNCX0hPU1RfQ0FQKQo+ICsJ CXZhbHVlIHw9IFhVU0JfUEFEQ1RMX1VTQjJfUE9SVF9DQVBfUE9SVFhfQ0FQX0hPU1QoaW5kZXgp Owo+ICsJZWxzZSBpZiAocG9ydC0+cG9ydF9jYXAgPT0gVVNCX09UR19DQVApCj4gKwkJdmFsdWUg fD0gWFVTQl9QQURDVExfVVNCMl9QT1JUX0NBUF9QT1JUWF9DQVBfT1RHKGluZGV4KTsKPiAgCXBh ZGN0bF93cml0ZWwocGFkY3RsLCB2YWx1ZSwgWFVTQl9QQURDVExfVVNCMl9QT1JUX0NBUCk7Cj4g IAo+ICAJdmFsdWUgPSBwYWRjdGxfcmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9VU0IyX09UR19Q QURYX0NUTDAoaW5kZXgpKTsKPiBAQCAtOTk3LDcgKzEyMDIsMTIgQEAgc3RhdGljIGludCB0ZWdy YTIxMF91c2IyX3BoeV9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkpCj4gIAkJCSAgICAgWFVTQl9Q QURDVExfVVNCMl9CQVRURVJZX0NIUkdfT1RHUEFEWF9DVEwxKGluZGV4KSk7Cj4gIAl2YWx1ZSAm PSB+KFhVU0JfUEFEQ1RMX1VTQjJfQkFUVEVSWV9DSFJHX09UR1BBRF9DVEwxX1ZSRUdfTEVWX01B U0sgPDwKPiAgCQkgICBYVVNCX1BBRENUTF9VU0IyX0JBVFRFUllfQ0hSR19PVEdQQURfQ1RMMV9W UkVHX0xFVl9TSElGVCk7Cj4gLQl2YWx1ZSB8PSBYVVNCX1BBRENUTF9VU0IyX0JBVFRFUllfQ0hS R19PVEdQQURfQ1RMMV9WUkVHX0ZJWDE4Owo+ICsJaWYgKHBvcnQtPnBvcnRfY2FwID09IFVTQl9I T1NUX0NBUCkKPiArCQl2YWx1ZSB8PSBYVVNCX1BBRENUTF9VU0IyX0JBVFRFUllfQ0hSR19PVEdQ QURfQ1RMMV9WUkVHX0ZJWDE4Owo+ICsJZWxzZQo+ICsJCXZhbHVlIHw9Cj4gKwkJICAgICAgWFVT Ql9QQURDVExfVVNCMl9CQVRURVJZX0NIUkdfT1RHUEFEX0NUTDFfVlJFR19MRVZfVkFMIDw8Cj4g KwkJICAgICAgWFVTQl9QQURDVExfVVNCMl9CQVRURVJZX0NIUkdfT1RHUEFEX0NUTDFfVlJFR19M RVZfU0hJRlQ7Cj4gIAlwYWRjdGxfd3JpdGVsKHBhZGN0bCwgdmFsdWUsCj4gIAkJICAgICAgWFVT Ql9QQURDVExfVVNCMl9CQVRURVJZX0NIUkdfT1RHUEFEWF9DVEwxKGluZGV4KSk7Cj4gIAo+IEBA IC0xMDcwLDYgKzEyODAsMzQgQEAgc3RhdGljIGludCB0ZWdyYTIxMF91c2IyX3BoeV9wb3dlcl9v ZmYoc3RydWN0IHBoeSAqcGh5KQo+ICAKPiAgCW11dGV4X2xvY2soJnBhZGN0bC0+bG9jayk7Cj4g IAo+ICsJaWYgKHBvcnQtPnVzYjNfcG9ydF9mYWtlICE9IC0xKSB7Cj4gKwkJdmFsdWUgPSBwYWRj dGxfcmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xKTsKPiArCQl2YWx1ZSB8 PSBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xX1NTUFhfRUxQR19DTEFNUF9FTl9FQVJMWSgKPiAr CQkJCQlwb3J0LT51c2IzX3BvcnRfZmFrZSk7Cj4gKwkJcGFkY3RsX3dyaXRlbChwYWRjdGwsIHZh bHVlLCBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xKTsKPiArCj4gKwkJdXNsZWVwX3JhbmdlKDEw MCwgMjAwKTsKPiArCj4gKwkJdmFsdWUgPSBwYWRjdGxfcmVhZGwocGFkY3RsLCBYVVNCX1BBRENU TF9FTFBHX1BST0dSQU0xKTsKPiArCQl2YWx1ZSB8PSBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0x X1NTUFhfRUxQR19DTEFNUF9FTigKPiArCQkJCQlwb3J0LT51c2IzX3BvcnRfZmFrZSk7Cj4gKwkJ cGFkY3RsX3dyaXRlbChwYWRjdGwsIHZhbHVlLCBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xKTsK PiArCj4gKwkJdXNsZWVwX3JhbmdlKDI1MCwgMzUwKTsKPiArCj4gKwkJdmFsdWUgPSBwYWRjdGxf cmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xKTsKPiArCQl2YWx1ZSB8PSBY VVNCX1BBRENUTF9FTFBHX1BST0dSQU0xX1NTUFhfRUxQR19WQ09SRV9ET1dOKAo+ICsJCQkJCXBv cnQtPnVzYjNfcG9ydF9mYWtlKTsKPiArCQlwYWRjdGxfd3JpdGVsKHBhZGN0bCwgdmFsdWUsIFhV U0JfUEFEQ1RMX0VMUEdfUFJPR1JBTTEpOwo+ICsKPiArCQl2YWx1ZSA9IHBhZGN0bF9yZWFkbChw YWRjdGwsIFhVU0JfUEFEQ1RMX1NTX1BPUlRfTUFQKTsKPiArCQl2YWx1ZSAmPSB+WFVTQl9QQURD VExfU1NfUE9SVF9NQVBfUE9SVFhfTUFQX01BU0soCj4gKwkJCQkJcG9ydC0+dXNiM19wb3J0X2Zh a2UpOwo+ICsJCXZhbHVlIHw9IFhVU0JfUEFEQ1RMX1NTX1BPUlRfTUFQX1BPUlRYX01BUF9NQVNL KAo+ICsJCQkJCXBvcnQtPnVzYjNfcG9ydF9mYWtlKTsKPiArCQlwYWRjdGxfd3JpdGVsKHBhZGN0 bCwgdmFsdWUsIFhVU0JfUEFEQ1RMX1NTX1BPUlRfTUFQKTsKPiArCX0KPiArCj4gIAlpZiAoV0FS Tl9PTihwYWQtPmVuYWJsZSA9PSAwKSkKPiAgCQlnb3RvIG91dDsKPiAgCj4gQEAgLTE5NTMsNiAr MjE5MSw1NSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3h1c2JfcG9ydF9vcHMgdGVncmEy MTBfdXNiM19wb3J0X29wcyA9IHsKPiAgCS5tYXAgPSB0ZWdyYTIxMF91c2IzX3BvcnRfbWFwLAo+ ICB9Owo+ICAKPiArc3RhdGljIGludCB0ZWdyYTIxMF94dXNiX3BhZGN0bF92YnVzX292ZXJyaWRl KHN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAqcGFkY3RsLAo+ICsJCQkJCSAgICAgIGJvb2wgc2V0 KQo+ICt7Cj4gKwl1MzIgcmVnOwo+ICsKPiArCWRldl9kYmcocGFkY3RsLT5kZXYsICIlcyB2YnVz IG92ZXJyaWRlXG4iLCBzZXQgPyAic2V0IiA6ICJjbGVhciIpOwo+ICsKPiArCXJlZyA9IHBhZGN0 bF9yZWFkbChwYWRjdGwsIFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19JRCk7Cj4gKwlpZiAoc2V0KSB7 Cj4gKwkJcmVnIHw9IFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19JRF9PVkVSUklERV9WQlVTX09OOwo+ ICsJCXJlZyAmPSB+KFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19JRF9PVkVSUklERV9NQVNLIDw8Cj4g KwkJCSAgIFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19JRF9PVkVSUklERV9TSElGVCk7Cj4gKwkJcmVn IHw9IFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19JRF9PVkVSUklERV9WQUwgPDwKPiArCQkJIFhVU0Jf UEFEQ1RMX1VTQjJfVkJVU19JRF9PVkVSUklERV9TSElGVDsKPiArCX0gZWxzZQo+ICsJCXJlZyAm PSB+WFVTQl9QQURDVExfVVNCMl9WQlVTX0lEX09WRVJSSURFX1ZCVVNfT047Cj4gKwlwYWRjdGxf d3JpdGVsKHBhZGN0bCwgcmVnLCBYVVNCX1BBRENUTF9VU0IyX1ZCVVNfSUQpOwo+ICsKPiArCXJl dHVybiAwOwo+ICt9CgpJdCdkIGJlIGdvb2QgdG8gYnJpZWZseSBleHBsYWluIGluIGEgY29tbWVu dCAob3IgdGhlIGNvbW1pdCBtZXNzYWdlKQp3aGF0IGV4YWN0bHkgdGhpcyBkb2VzIGFuZCB3aGF0 IGl0J3MgdXNlZCBmb3IuCgo+ICsKPiArc3RhdGljIGludCB0ZWdyYTIxMF91dG1pX3BvcnRfcmVz ZXRfcXVpcmsoc3RydWN0IHBoeSAqcGh5KQo+ICt7Cj4gKwlzdHJ1Y3QgdGVncmFfeHVzYl9wYWRj dGwgKnBhZGN0bDsKPiArCXN0cnVjdCB0ZWdyYV94dXNiX2xhbmUgKmxhbmU7Cj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7Cj4gKwl1MzIgcmVnOwo+ICsKPiArCWlmICghcGh5KQo+ICsJCXJldHVybiAt RU5PREVWOwo+ICsKPiArCWxhbmUgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKPiArCXBhZGN0bCA9 IGxhbmUtPnBhZC0+cGFkY3RsOwo+ICsJZGV2ID0gcGFkY3RsLT5kZXY7Cj4gKwo+ICsJcmVnID0g cGFkY3RsX3JlYWRsKHBhZGN0bCwKPiArCQkJCVhVU0JfUEFEQ1RMX1VTQjJfQkFUVEVSWV9DSFJH X09UR1BBRFhfQ1RMMCgwKSk7Cj4gKwlkZXZfZGJnKGRldiwgIkJBVFRFUllfQ0hSR19PVEdQQURY X0NUTDAoMCk6IDB4JXhcbiIsIHJlZyk7Cj4gKwo+ICsJaWYgKChyZWcgJiBYVVNCX1BBRENUTF9V U0IyX0JBVFRFUllfQ0hSR19PVEdQQURfQ1RMMF9aSVApIHx8Cj4gKwkgICAgKHJlZyAmIFhVU0Jf UEFEQ1RMX1VTQjJfQkFUVEVSWV9DSFJHX09UR1BBRF9DVEwwX1pJTikpIHsKPiArCQlkZXZfZGJn KGRldiwgIlRvZ2dsZSB2YnVzXG4iKTsKPiArCQl0ZWdyYTIxMF94dXNiX3BhZGN0bF92YnVzX292 ZXJyaWRlKHBhZGN0bCwgZmFsc2UpOwo+ICsJCXRlZ3JhMjEwX3h1c2JfcGFkY3RsX3ZidXNfb3Zl cnJpZGUocGFkY3RsLCB0cnVlKTsKPiArCQlyZXR1cm4gMTsKPiArCX0KPiArCXJldHVybiAwOwo+ ICt9CgpUaGlzIHVzZXMgdGhlIFZCVVMgb3ZlcnJpZGUgbWVjaGFuaXNtLCBidXQgYXQgdGhlIHNh bWUgdGltZSB5b3UgYWxzbwpleHBvcnQgaXQgdG8gbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIFhVREMg ZHJpdmVyIChwcmVzdW1hYmx5KS4gV2h5IGhhdmUKdHdvIHdheXMgb2YgcnVubmluZyB0aGlzIGNv ZGU/IEFnYWluLCBhbiBleHBsYW5hdGlvbiBvZiB3aGF0IGV4YWN0bHkKdGhpcyBpcyB1c2VkIGZv ciB3b3VsZCBjbGFyaWZ5LgoKPiAgc3RhdGljIGludAo+ICB0ZWdyYTIxMF94dXNiX3JlYWRfZnVz ZV9jYWxpYnJhdGlvbihzdHJ1Y3QgdGVncmEyMTBfeHVzYl9mdXNlX2NhbGlicmF0aW9uICpmdXNl KQo+ICB7Cj4gQEAgLTIwMTUsNiArMjMwMiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3Jh X3h1c2JfcGFkY3RsX29wcyB0ZWdyYTIxMF94dXNiX3BhZGN0bF9vcHMgPSB7Cj4gIAkucmVtb3Zl ID0gdGVncmEyMTBfeHVzYl9wYWRjdGxfcmVtb3ZlLAo+ICAJLnVzYjNfc2V0X2xmcHNfZGV0ZWN0 ID0gdGVncmEyMTBfdXNiM19zZXRfbGZwc19kZXRlY3QsCj4gIAkuaHNpY19zZXRfaWRsZSA9IHRl Z3JhMjEwX2hzaWNfc2V0X2lkbGUsCj4gKwkudmJ1c19vdmVycmlkZSA9IHRlZ3JhMjEwX3h1c2Jf cGFkY3RsX3ZidXNfb3ZlcnJpZGUsCj4gKwkudXRtaV9wYWRfcG93ZXJfb24gPSB0ZWdyYTIxMF91 dG1pX3BhZF9wb3dlcl9vbiwKPiArCS51dG1pX3BhZF9wb3dlcl9kb3duID0gdGVncmEyMTBfdXRt aV9wYWRfcG93ZXJfZG93biwKPiArCS51dG1pX3BvcnRfcmVzZXRfcXVpcmsgPSB0ZWdyYTIxMF91 dG1pX3BvcnRfcmVzZXRfcXVpcmssCj4gIH07Cj4gIAo+ICBjb25zdCBzdHJ1Y3QgdGVncmFfeHVz Yl9wYWRjdGxfc29jIHRlZ3JhMjEwX3h1c2JfcGFkY3RsX3NvYyA9IHsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9waHkvdGVncmEveHVzYi5jIGIvZHJpdmVycy9waHkvdGVncmEveHVzYi5jCj4gaW5k ZXggNWIzYjg4Ni4uOWEyNWI1ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BoeS90ZWdyYS94dXNi LmMKPiArKysgYi9kcml2ZXJzL3BoeS90ZWdyYS94dXNiLmMKPiBAQCAtMSw1ICsxLDUgQEAKPiAg LyoKPiAtICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIE5WSURJQSBDT1JQT1JBVElPTi4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4LCBOVklESUEg Q09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICAgKgo+ICAgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSBpdAo+ICAgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlLAo+IEBAIC01NDYsOSArNTQ2LDI2IEBAIHN0YXRpYyBpbnQgdGVn cmFfeHVzYl91c2IyX3BvcnRfcGFyc2VfZHQoc3RydWN0IHRlZ3JhX3h1c2JfdXNiMl9wb3J0ICp1 c2IyKQo+ICB7Cj4gIAlzdHJ1Y3QgdGVncmFfeHVzYl9wb3J0ICpwb3J0ID0gJnVzYjItPmJhc2U7 Cj4gIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcG9ydC0+ZGV2Lm9mX25vZGU7Cj4gKwljb25z dCBjaGFyICpwcm9wX3N0cmluZzsKPiArCXUzMiB2YWx1ZTsKPiAgCj4gIAl1c2IyLT5pbnRlcm5h bCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgIm52aWRpYSxpbnRlcm5hbCIpOwo+ICAKPiAr CXVzYjItPnBvcnRfY2FwID0gVVNCX1BPUlRfRElTQUJMRUQ7IC8qIGRlZmF1bHQgKi8KPiArCWlm ICghb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJtb2RlIiwgJnByb3Bfc3RyaW5nKSkgewo+ ICsJCWlmICghc3RyY21wKCJob3N0IiwgcHJvcF9zdHJpbmcpKQo+ICsJCQl1c2IyLT5wb3J0X2Nh cCA9IFVTQl9IT1NUX0NBUDsKPiArCQllbHNlIGlmICghc3RyY21wKCJkZXZpY2UiLCBwcm9wX3N0 cmluZykpCj4gKwkJCXVzYjItPnBvcnRfY2FwID0gVVNCX0RFVklDRV9DQVA7Cj4gKwkJZWxzZSBp ZiAoIXN0cmNtcCgib3RnIiwgcHJvcF9zdHJpbmcpKQo+ICsJCQl1c2IyLT5wb3J0X2NhcCA9IFVT Ql9PVEdfQ0FQOwo+ICsJfQoKVGhpcyBzZWVtcyB0byBmdWxmaWxsIHRoZSBzYW1lIHB1cnBvc2Ug YXMgdGhpczoKCglodHRwOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcGF0Y2gvMTAzMTAxNC8KCkFs dGhvdWdoLCBsb29raW5nIG1vcmUgY2xvc2VseSBhdCB0aGF0LCB3ZSBjYW4gcHJvYmFibHkganVz dCB0aGUKdXNiX2dldF9kcl9tb2RlKCkgaGVscGVyIGZvciB0aGlzLiBUaGVyZSdzIGFsc28gYSBz dGFuZGFyZCBwcm9wZXJ0eSBmb3IKdGhlIGR1YWwtcm9sZSBtb2RlLCBuYW1lZCAiZHJfbW9kZSIs IGFsYmVpdCB0aGUgbmFtZSBkb2VzIG5vdCBzZWVtIHRvCm1hdGNoIHN0YW5kYXJkIGJlc3QgcHJh Y3RpY2VzLiBTZWVtcyBsaWtlIGl0IHdvdWxkIHN0aWxsIG1ha2Ugc2Vuc2UgdG8KbW92ZSB0byB0 aGF0IHN0YW5kYXJkIHByb3BlcnR5IG5hbWUuCgo+ICsJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3Uz MihucCwgIm52aWRpYSx1c2IzLXBvcnQtZmFrZSIsICZ2YWx1ZSkpCj4gKwkJdXNiMi0+dXNiM19w b3J0X2Zha2UgPSB2YWx1ZTsKPiArCWVsc2UKPiArCQl1c2IyLT51c2IzX3BvcnRfZmFrZSA9IC0x OyAvKiBkZWZhdWx0ICovCj4gKwo+ICAJdXNiMi0+c3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0 KCZwb3J0LT5kZXYsICJ2YnVzIik7Cj4gIAlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHVzYjItPnN1 cHBseSk7Cj4gIH0KPiBAQCAtOTc2LDcgKzk5Myw3IEBAIGludCB0ZWdyYV94dXNiX3BhZGN0bF91 c2IzX3NhdmVfY29udGV4dChzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0bCwKPiAgCWlm IChwYWRjdGwtPnNvYy0+b3BzLT51c2IzX3NhdmVfY29udGV4dCkKPiAgCQlyZXR1cm4gcGFkY3Rs LT5zb2MtPm9wcy0+dXNiM19zYXZlX2NvbnRleHQocGFkY3RsLCBwb3J0KTsKPiAgCj4gLQlyZXR1 cm4gLUVOT1NZUzsKPiArCXJldHVybiAtRUlOVkFMOwoKV2h5IGNoYW5nZSB0aGUgZXJyb3IgY29k ZSBmb3IgdGhlc2U/IEVJTlZBTCBoYXMgYSBwcmV0dHkgc3RhbmRhcmQKbWVhbmluZyAoImludmFs aWQgYXJndW1lbnQiKSBhbmQgZG9lc24ndCBtYXRjaCB0aGUgZXJyb3IgY29uZGl0aW9uIGF0CmFs bC4gRU5PU1lTIHdhcyBjaG9zZW4gaGVyZSBiZWNhdXNlIGl0J3MgdGhlIGNsb3Nlc3QgdGhlcmUg aXMgdG8gIm5vdAppbXBsZW1lbnRlZCIuIEVOT1NZUyBpcyBzb21ld2hhdCBzcGVjaWFsIGluIHJl bGF0aW9uIHRvIHN5c2NhbGxzLCBidXQKc2luY2Ugd2UgbmV2ZXIgcHJvcGFnYXRlIGVycm9ycyBm cm9tIGhlcmUgdG8gdXNlcnNwYWNlLCBpdCdzIHNhZmUgdG8KdXNlLgoKPiAgfQo+ICBFWFBPUlRf U1lNQk9MX0dQTCh0ZWdyYV94dXNiX3BhZGN0bF91c2IzX3NhdmVfY29udGV4dCk7Cj4gIAo+IEBA IC05ODYsNyArMTAwMyw3IEBAIGludCB0ZWdyYV94dXNiX3BhZGN0bF9oc2ljX3NldF9pZGxlKHN0 cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAqcGFkY3RsLAo+ICAJaWYgKHBhZGN0bC0+c29jLT5vcHMt PmhzaWNfc2V0X2lkbGUpCj4gIAkJcmV0dXJuIHBhZGN0bC0+c29jLT5vcHMtPmhzaWNfc2V0X2lk bGUocGFkY3RsLCBwb3J0LCBpZGxlKTsKPiAgCj4gLQlyZXR1cm4gLUVOT1NZUzsKPiArCXJldHVy biAtRUlOVkFMOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0xfR1BMKHRlZ3JhX3h1c2JfcGFkY3RsX2hz aWNfc2V0X2lkbGUpOwo+ICAKPiBAQCAtOTk3LDEwICsxMDE0LDYwIEBAIGludCB0ZWdyYV94dXNi X3BhZGN0bF91c2IzX3NldF9sZnBzX2RldGVjdChzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBh ZGN0bCwKPiAgCQlyZXR1cm4gcGFkY3RsLT5zb2MtPm9wcy0+dXNiM19zZXRfbGZwc19kZXRlY3Qo cGFkY3RsLCBwb3J0LAo+ICAJCQkJCQkJICAgICAgZW5hYmxlKTsKPiAgCj4gLQlyZXR1cm4gLUVO T1NZUzsKPiArCXJldHVybiAtRUlOVkFMOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0xfR1BMKHRlZ3Jh X3h1c2JfcGFkY3RsX3VzYjNfc2V0X2xmcHNfZGV0ZWN0KTsKPiAgCj4gK2ludCB0ZWdyYV94dXNi X3BhZGN0bF9zZXRfdmJ1c19vdmVycmlkZShzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0 bCkKPiArewo+ICsJaWYgKHBhZGN0bC0+c29jLT5vcHMtPnZidXNfb3ZlcnJpZGUpCj4gKwkJcmV0 dXJuIHBhZGN0bC0+c29jLT5vcHMtPnZidXNfb3ZlcnJpZGUocGFkY3RsLCB0cnVlKTsKPiArCj4g KwlyZXR1cm4gLUVJTlZBTDsKCkl0J2QgYmUgYmVzdCB0byBzdGljayB0byB0aGUgLUVOT1NZUyBl cnJvciBjb2RlIGhlcmUuCgo+ICt2b2lkIHRlZ3JhX3BoeV94dXNiX3V0bWlfcGFkX3Bvd2VyX29u KHN0cnVjdCBwaHkgKnBoeSkKPiArewo+ICsJc3RydWN0IHRlZ3JhX3h1c2JfbGFuZSAqbGFuZSA9 IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+ICsJc3RydWN0IHRlZ3JhX3h1c2JfcGFkY3RsICpwYWRj dGwgPSBsYW5lLT5wYWQtPnBhZGN0bDsKPiArCj4gKwlpZiAocGFkY3RsLT5zb2MtPm9wcy0+dXRt aV9wYWRfcG93ZXJfb24pCj4gKwkJcGFkY3RsLT5zb2MtPm9wcy0+dXRtaV9wYWRfcG93ZXJfb24o cGh5KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh0ZWdyYV9waHlfeHVzYl91dG1pX3BhZF9w b3dlcl9vbik7Cj4gKwo+ICt2b2lkIHRlZ3JhX3BoeV94dXNiX3V0bWlfcGFkX3Bvd2VyX2Rvd24o c3RydWN0IHBoeSAqcGh5KQo+ICt7Cj4gKwlzdHJ1Y3QgdGVncmFfeHVzYl9sYW5lICpsYW5lID0g cGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gKwlzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0 bCA9IGxhbmUtPnBhZC0+cGFkY3RsOwo+ICsKPiArCWlmIChwYWRjdGwtPnNvYy0+b3BzLT51dG1p X3BhZF9wb3dlcl9kb3duKQo+ICsJCXBhZGN0bC0+c29jLT5vcHMtPnV0bWlfcGFkX3Bvd2VyX2Rv d24ocGh5KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh0ZWdyYV9waHlfeHVzYl91dG1pX3Bh ZF9wb3dlcl9kb3duKTsKCkkgYWxyZWFkeSBicmllZmx5IHRvdWNoZWQgb24gdGhpcyBlYXJsaWVy LCBidSB3aHkgZG8gdGhlc2UgaGF2ZSB0byBiZQpleHBvcnRlZCBmdW5jdGlvbnM/IENhbid0IHRo ZXNlIHNpbXBseSBiZSBhYnN0cmFjdGVkIGJlaGluZCB0aGUgUEhZCmFic3RyYWN0aW9uPwoKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvdGVncmEveHVzYi5oIGIvZHJpdmVycy9waHkvdGVncmEv eHVzYi5oCj4gaW5kZXggYjQ5ZGJjMy4uNzRhY2MwOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3Bo eS90ZWdyYS94dXNiLmgKPiArKysgYi9kcml2ZXJzL3BoeS90ZWdyYS94dXNiLmgKPiBAQCAtMSw1 ICsxLDUgQEAKPiAgLyoKPiAtICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIE5WSURJQSBDT1JQ T1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNC0y MDE4LCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICAgKiBDb3B5 cmlnaHQgKGMpIDIwMTUsIEdvb2dsZSBJbmMuCj4gICAqCj4gICAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4g QEAgLTU4LDYgKzU4LDcgQEAgc3RydWN0IHRlZ3JhX3h1c2JfdXNiMl9sYW5lIHsKPiAgCXN0cnVj dCB0ZWdyYV94dXNiX2xhbmUgYmFzZTsKPiAgCj4gIAl1MzIgaHNfY3Vycl9sZXZlbF9vZmZzZXQ7 Cj4gKwlib29sIHBvd2VyZWRfb247Cj4gIH07Cj4gIAo+ICBzdGF0aWMgaW5saW5lIHN0cnVjdCB0 ZWdyYV94dXNiX3VzYjJfbGFuZSAqCj4gQEAgLTI2NywxMSArMjY4LDIwIEBAIHN0cnVjdCB0ZWdy YV94dXNiX3BvcnQgKgo+ICB0ZWdyYV94dXNiX2ZpbmRfcG9ydChzdHJ1Y3QgdGVncmFfeHVzYl9w YWRjdGwgKnBhZGN0bCwgY29uc3QgY2hhciAqdHlwZSwKPiAgCQkgICAgIHVuc2lnbmVkIGludCBp bmRleCk7Cj4gIAo+ICtlbnVtIHRlZ3JhX3h1c2JfdXNiX3BvcnRfY2FwIHsKPiArCVVTQl9QT1JU X0RJU0FCTEVEID0gMCwKPiArCVVTQl9IT1NUX0NBUCwKPiArCVVTQl9ERVZJQ0VfQ0FQLAo+ICsJ VVNCX09UR19DQVAsCj4gK307CgpNYXliZSB1c2UgZW51bSB1c2JfZHJfbW9kZSBmcm9tIGluY2x1 ZGUvbGludXgvdXNiL290Zy5oIGluc3RlYWQgb2YKZXNzZW50aWFsbHkgZHVwbGljYXRpbmcgaXQ/ Cgo+ICsKPiAgc3RydWN0IHRlZ3JhX3h1c2JfdXNiMl9wb3J0IHsKPiAgCXN0cnVjdCB0ZWdyYV94 dXNiX3BvcnQgYmFzZTsKPiAgCj4gIAlzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHk7Cj4gIAlib29s IGludGVybmFsOwo+ICsJZW51bSB0ZWdyYV94dXNiX3VzYl9wb3J0X2NhcCBwb3J0X2NhcDsKPiAr CWludCB1c2IzX3BvcnRfZmFrZTsKPiAgfTsKPiAgCj4gIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRl Z3JhX3h1c2JfdXNiMl9wb3J0ICoKPiBAQCAtMzUzLDYgKzM2MywxMCBAQCBzdHJ1Y3QgdGVncmFf eHVzYl9wYWRjdGxfb3BzIHsKPiAgCQkJICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIGJvb2wgaWRs ZSk7Cj4gIAlpbnQgKCp1c2IzX3NldF9sZnBzX2RldGVjdCkoc3RydWN0IHRlZ3JhX3h1c2JfcGFk Y3RsICpwYWRjdGwsCj4gIAkJCQkgICAgdW5zaWduZWQgaW50IGluZGV4LCBib29sIGVuYWJsZSk7 Cj4gKwlpbnQgKCp2YnVzX292ZXJyaWRlKShzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0 bCwgYm9vbCBzZXQpOwo+ICsJdm9pZCAoKnV0bWlfcGFkX3Bvd2VyX29uKShzdHJ1Y3QgcGh5ICpw aHkpOwo+ICsJdm9pZCAoKnV0bWlfcGFkX3Bvd2VyX2Rvd24pKHN0cnVjdCBwaHkgKnBoeSk7Cj4g KwlpbnQgKCp1dG1pX3BvcnRfcmVzZXRfcXVpcmspKHN0cnVjdCBwaHkgKnBoeSk7Cj4gIH07Cj4g IAo+ICBzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGxfc29jIHsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9saW51eC9waHkvdGVncmEveHVzYi5oIGIvaW5jbHVkZS9saW51eC9waHkvdGVncmEveHVzYi5o Cj4gaW5kZXggOGUxYTU3YS4uMTQzYWY0NCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L3Bo eS90ZWdyYS94dXNiLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3BoeS90ZWdyYS94dXNiLmgKPiBA QCAtMSw1ICsxLDUgQEAKPiAgLyoKPiAtICogQ29weXJpZ2h0IChjKSAyMDE2LCBOVklESUEgQ09S UE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAxOCwgTlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiAgICoKPiAg ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQKPiAgICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKPiBAQCAtMjYsNSArMjYsMTAgQEAgaW50 IHRlZ3JhX3h1c2JfcGFkY3RsX2hzaWNfc2V0X2lkbGUoc3RydWN0IHRlZ3JhX3h1c2JfcGFkY3Rs ICpwYWRjdGwsCj4gIAkJCQkgICAgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgaWRsZSk7Cj4gIGlu dCB0ZWdyYV94dXNiX3BhZGN0bF91c2IzX3NldF9sZnBzX2RldGVjdChzdHJ1Y3QgdGVncmFfeHVz Yl9wYWRjdGwgKnBhZGN0bCwKPiAgCQkJCQkgICB1bnNpZ25lZCBpbnQgcG9ydCwgYm9vbCBlbmFi bGUpOwo+ICtpbnQgdGVncmFfeHVzYl9wYWRjdGxfc2V0X3ZidXNfb3ZlcnJpZGUoc3RydWN0IHRl Z3JhX3h1c2JfcGFkY3RsICpwYWRjdGwpOwo+ICtpbnQgdGVncmFfeHVzYl9wYWRjdGxfY2xlYXJf dmJ1c19vdmVycmlkZShzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0bCk7Cj4gIAo+ICt2 b2lkIHRlZ3JhX3BoeV94dXNiX3V0bWlfcGFkX3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSk7Cj4g K3ZvaWQgdGVncmFfcGh5X3h1c2JfdXRtaV9wYWRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5ICpwaHkp Owo+ICtpbnQgdGVncmFfcGh5X3h1c2JfdXRtaV9wb3J0X3Jlc2V0X3F1aXJrKHN0cnVjdCBwaHkg KnBoeSk7CgpXZSBhbHJlYWR5IGhhdmUgbW9yZSBjdXN0b20gQVBJcyBoZXJlIHRoYW4gSSdkIGxp a2UsIHNvIEkgcmVhbGx5IHdhbnQgdG8KbWFrZSBzdXJlIHRoYXQgd2UncmUgbm90IGFkZGluZyB0 byB0aGVzZSBpZiBub3QgYWJzb2x1dGVseSBuZWNlc3NhcnkuCgpBcmUgdGhlcmUgYW55IHJlYXNv bnMgd2h5IHdlIGNhbid0IHNvbWVob3cgaGlkZSB0aGVzZSBiZWhpbmQgdGhlCmV4aXN0aW5nIFBI WSBmcmFtZXdvcms/Cgp0ZWdyYV9waHlfeHVzYl91dG1pX3BvcnRfcmVzZXRfcXVpcmsoKSBzZWVt cyBsaWtlIHNvbWV0aGluZyB0aGF0IHdlIG1heQpiZSBhYmxlIHRvIGltcGxlbWVudCB1c2luZyB0 aGUgcGh5X29wcy0+cmVzZXQoKSBjYWxsYmFjay4gVGhlIHBvd2VyX29uKCkKYW5kIHBvd2VyX29m ZigpIGZvciB0aGUgVVRNSSBwYWQgc2VlbSBsaWtlIHRoZXkgc2hvdWxkIGJlIGp1c3QgcGFydCBv Zgp0aGUgcmVndWxhciBwYWQgLT5wb3dlcl9vbigpIGFuZCAtPnBvd2VyX29mZigpIGNhbGxiYWNr IGltcGxlbWVudGF0aW9ucwoocGVyaGFwcyB0aGlzIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBpbnRy b2R1Y2UgYW5vdGhlciBwYWQgZm9yIHRoaXM/KS4KClNldC9jbGVhciBWQlVTIG92ZXJyaWRlIHNl ZW1zIGxpa2UgbWF5YmUgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgaGlkZGVuCmJlaGluZCBwaHlf b3BzLT5jb25maWd1cmUoKS4gVGhpcyBpcyBhIGZhaXJseSByZWNlbnQgYWRkaXRpb24sIGJ1dApz b3VuZHMgbGlrZSB3ZSBjb3VsZCBhbHNvIHB1c2ggdGhpbmdzIGxpa2UgSFNJQyBpZGxlIGFuZCBV U0IzIExQRlMKZGV0ZWN0aW9uIGludG8gdGhhdC4KClRoaWVycnkK