From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 1/3] drm: Add support for panic message output Date: Mon, 11 Mar 2019 20:23:38 +0100 Message-ID: <20190311192338.GR2665@phenom.ffwll.local> References: <20190311174218.51899-1-noralf@tronnes.org> <20190311174218.51899-2-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7D0518989F for ; Mon, 11 Mar 2019 19:23:42 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id n17so223311edt.13 for ; Mon, 11 Mar 2019 12:23:42 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190311174218.51899-2-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, darwish.07@gmail.com, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBNYXIgMTEsIDIwMTkgYXQgMDY6NDI6MTZQTSArMDEwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IFRoaXMgYWRkcyBzdXBwb3J0IGZvciBvdXRwdXR0aW5nIGtlcm5lbCBtZXNzYWdl cyBvbiBwYW5pYygpLgo+IEEga2VybmVsIG1lc3NhZ2UgZHVtcGVyIGlzIHVzZWQgdG8gZHVtcCB0 aGUgbG9nLiBUaGUgZHVtcGVyIGl0ZXJhdGVzCj4gb3ZlciBlYWNoIERSTSBkZXZpY2UgYW5kIGl0 J3MgY3J0YydzIHRvIGZpbmQgc3VpdGFibGUgZnJhbWVidWZmZXJzLgo+IAo+IEFsbCB0aGUgb3Ro ZXIgZHVtcGVycyBhcmUgcnVuIGJlZm9yZSB0aGlzIG9uZSBleGNlcHQgbXRkb29wcy4KPiBPbmx5 IGF0b21pYyBkcml2ZXJzIGFyZSBzdXBwb3J0ZWQuCj4gCj4gU2lnbmVkLW9mZi1ieTogTm9yYWxm IFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+CgpCdW5jaCBvZiBjb21tZW50cy9pZGVhcyBm b3IgeW91IG9yIERhcndpc2ggYmVsb3csIHdob2V2ZXIgcGlja3MgdGhpcyB1cC4KLURhbmllbAoK PiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgIHwgICAzICsKPiAgZHJp dmVycy9ncHUvZHJtL2RybV9kcnYuYyAgICAgICAgIHwgICAzICsKPiAgZHJpdmVycy9ncHUvZHJt L2RybV9mcmFtZWJ1ZmZlci5jIHwgMTE3ICsrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2Ry bV9pbnRlcm5hbC5oICAgIHwgICA0ICsKPiAgZHJpdmVycy9ncHUvZHJtL2RybV9wYW5pYy5jICAg ICAgIHwgMzYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBpbmNsdWRlL2RybS9k cm1fZnJhbWVidWZmZXIuaCAgICAgfCAgNDEgKysrKwo+ICA2IGZpbGVzIGNoYW5nZWQsIDUzMSBp bnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX3Bh bmljLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJz L2dwdS9kcm0vS2NvbmZpZwo+IGluZGV4IGJkOTQzYTcxNzU2Yy4uNzRjMzc1NDJmODU3IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L0tjb25maWcKPiBAQCAtMTQsNiArMTQsOSBAQCBtZW51Y29uZmlnIERSTQo+ICAJc2VsZWN0IEky Q19BTEdPQklUCj4gIAlzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVIKPiAgCXNlbGVjdCBTWU5DX0ZJ TEUKPiArCXNlbGVjdCBGT05UX1NVUFBPUlQKPiArCXNlbGVjdCBGT05UXzh4OAo+ICsJc2VsZWN0 IEZPTlRfOHgxNgo+ICAJaGVscAo+ICAJICBLZXJuZWwtbGV2ZWwgc3VwcG9ydCBmb3IgdGhlIERp cmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkKPiAgCSAgaW50cm9kdWNlZCBpbiBY RnJlZTg2IDQuMC4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSBuZWVkIHRvIHNlbGVjdAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9k cnYuYwo+IGluZGV4IDUwZDg0OWQxYmM2ZS4uYjBiODcwYjVkZDU1IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5j Cj4gQEAgLTExNDcsNiArMTE0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIGRybV9zdHViX2ZvcHMgPSB7Cj4gIAo+ICBzdGF0aWMgdm9pZCBkcm1fY29yZV9leGl0KHZv aWQpCj4gIHsKPiArCWRybV9wYW5pY19leGl0KGRybV9kZWJ1Z2ZzX3Jvb3QpOwo+ICAJdW5yZWdp c3Rlcl9jaHJkZXYoRFJNX01BSk9SLCAiZHJtIik7Cj4gIAlkZWJ1Z2ZzX3JlbW92ZShkcm1fZGVi dWdmc19yb290KTsKPiAgCWRybV9zeXNmc19kZXN0cm95KCk7Cj4gQEAgLTExNzgsNiArMTE3OSw4 IEBAIHN0YXRpYyBpbnQgX19pbml0IGRybV9jb3JlX2luaXQodm9pZCkKPiAgCWlmIChyZXQgPCAw KQo+ICAJCWdvdG8gZXJyb3I7Cj4gIAo+ICsJZHJtX3BhbmljX2luaXQoZHJtX2RlYnVnZnNfcm9v dCk7Cj4gKwo+ICAJZHJtX2NvcmVfaW5pdF9jb21wbGV0ZSA9IHRydWU7Cj4gIAo+ICAJRFJNX0RF QlVHKCJJbml0aWFsaXplZFxuIik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZnJhbWVidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZmZXIuYwo+IGluZGV4 IGQ4ZDc1ZTI1ZjZmYi4uZGEyMjg1YzVhZTkwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZnJhbWVidWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZm ZXIuYwo+IEBAIC0xMDg3LDMgKzEwODcsMTIwIEBAIGludCBkcm1fZnJhbWVidWZmZXJfZGVidWdm c19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQo+ICAJCQkJbWlub3ItPmRlYnVnZnNfcm9v dCwgbWlub3IpOwo+ICB9Cj4gICNlbmRpZgo+ICsKPiArLyoqCj4gKyAqIGRybV9mcmFtZWJ1ZmZl cl9wYW5pY19kcmF3X3h5IC0gZHJhdyBwaXhlbCBvbiBmYiBkdXJpbmcgcGFuaWMoKQo+ICsgKiBA ZmI6IERSTSBmcmFtZWJ1ZmZlcgo+ICsgKiBAdm1hcDogTGluZWFyIHZpcnR1YWwgbWFwcGluZwo+ ICsgKiBAeDogWCBjb29yZGluYXRlCj4gKyAqIEB5OiBZIGNvb3JkaW5hdGUKPiArICogQGZvcmVn cm91bmQ6IEZvcmVncm91bmQgcGl4ZWwKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBjYW4gYmUg dXNlZCB0byBkcmF3IGEgcGl4ZWwgZHVyaW5nIHBhbmljIG1lc3NhZ2UgcmVuZGVyaW5nLgo+ICsg KiBJdCByZXF1aXJlcyBAdm1hcCB0byBiZSBhIGxpbmVhciBtYXBwaW5nLiBUaGlzIGlzIHRoZSBk ZWZhdWx0IGltcGxlbWVudGF0aW9uCj4gKyAqIHVzZWQgaWYgJmRybV9mcmFtZWJ1ZmZlcl9mdW5j cy0+cGFuaWNfZHJhd194eSBpcyBub3Qgc2V0Lgo+ICsgKi8KPiArdm9pZCBkcm1fZnJhbWVidWZm ZXJfcGFuaWNfZHJhd194eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgdm9pZCAqdm1hcCwK PiArCQkJCSAgIGludCB4LCBpbnQgeSwgYm9vbCBmb3JlZ3JvdW5kKQo+ICt7Cj4gKwl2b2lkICpw aXggPSB2bWFwICsgZmItPm9mZnNldHNbMF0gKyAoeSAqIGZiLT5waXRjaGVzWzBdKTsKPiArCXU4 ICpwaXg4ID0gcGl4Owo+ICsJdTE2ICpwaXgxNiA9IHBpeDsKPiArCXUzMiAqcGl4MzIgPSBwaXg7 Cj4gKwo+ICsJc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3JtYXQgJiB+RFJNX0ZPUk1BVF9CSUdfRU5E SUFOKSB7Cj4gKwljYXNlIERSTV9GT1JNQVRfQzg6Cj4gKwo+ICsJY2FzZSBEUk1fRk9STUFUX1JH QjMzMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1IyMzM6Cj4gKwo+ICsJY2FzZSBEUk1fRk9STUFU X05WMTI6Cj4gKwljYXNlIERSTV9GT1JNQVRfTlYyMToKPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjE2 Ogo+ICsJY2FzZSBEUk1fRk9STUFUX05WNjE6Cj4gKwljYXNlIERSTV9GT1JNQVRfTlYyNDoKPiAr CWNhc2UgRFJNX0ZPUk1BVF9OVjQyOgo+ICsKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MTA6Cj4g KwljYXNlIERSTV9GT1JNQVRfWVZVNDEwOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQxMToKPiAr CWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTE6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDIwOgo+ICsJ Y2FzZSBEUk1fRk9STUFUX1lWVTQyMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjI6Cj4gKwlj YXNlIERSTV9GT1JNQVRfWVZVNDIyOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQ0NDoKPiArCWNh c2UgRFJNX0ZPUk1BVF9ZVlU0NDQ6Cj4gKwkJcGl4OFt4XSA9IGZvcmVncm91bmQgPyAweGZmIDog MHgwMDsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjQ0NDQ6Cj4gKwlj YXNlIERSTV9GT1JNQVRfQVJHQjQ0NDQ6Cj4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjQ0NDQ6Cj4g KwljYXNlIERSTV9GT1JNQVRfQUJHUjQ0NDQ6Cj4gKwkJcGl4MTZbeF0gPSBmb3JlZ3JvdW5kID8g MHhmZmZmIDogMHhmMDAwOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JY NDQ0NDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JBNDQ0NDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9C R1JYNDQ0NDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNDQ0NDoKPiArCQlwaXgxNlt4XSA9IGZv cmVncm91bmQgPyAweGZmZmYgOiAweDAwMGY7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBEUk1f Rk9STUFUX1hSR0IxNTU1Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1Ogo+ICsJY2FzZSBE Uk1fRk9STUFUX1hCR1IxNTU1Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0FCR1IxNTU1Ogo+ICsJCXBp eDE2W3hdID0gZm9yZWdyb3VuZCA/IDB4ZmZmZiA6IDB4ODAwMDsKPiArCQlicmVhazsKPiArCj4g KwljYXNlIERSTV9GT1JNQVRfUkdCWDU1NTE6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6 Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSWDU1NTE6Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSQTU1 NTE6Cj4gKwkJcGl4MTZbeF0gPSBmb3JlZ3JvdW5kID8gMHhmZmZmIDogMHgwMDAxOwo+ICsJCWJy ZWFrOwo+ICsKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Cj4gKwljYXNlIERSTV9GT1JNQVRf QkdSNTY1Ogo+ICsJCXBpeDE2W3hdID0gZm9yZWdyb3VuZCA/IDB4ZmZmZiA6IDB4MDAwMDsKPiAr CQlicmVhazsKPiArCj4gKwljYXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+ICsJY2FzZSBEUk1fRk9S TUFUX0JHUjg4ODoKPiArCQlwaXg4W3ggKiAzXSA9IGZvcmVncm91bmQgPyAweGZmIDogMHgwMDsK PiArCQlwaXg4Wyh4ICogMykgKyAxXSA9IHBpeDhbeF07Cj4gKwkJcGl4OFsoeCAqIDMpICsgMl0g PSBwaXg4W3hdOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoK PiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4 ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiArCQlwaXgzMlt4XSA9IGZvcmVncm91 bmQgPyAweGZmZmZmZmZmIDogMHhmZjAwMDAwMDsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIERS TV9GT1JNQVRfUkdCWDg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6Cj4gKwljYXNl IERSTV9GT1JNQVRfQkdSWDg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6Cj4gKwkJ cGl4MzJbeF0gPSBmb3JlZ3JvdW5kID8gMHhmZmZmZmZmZiA6IDB4MDAwMDAwZmY7Cj4gKwkJYnJl YWs7Cj4gKwo+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgo+ICsJY2FzZSBEUk1fRk9S TUFUX0FSR0IyMTAxMDEwOgo+ICsJY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgo+ICsJY2Fz ZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgo+ICsJCXBpeDMyW3hdID0gZm9yZWdyb3VuZCA/IDB4 ZmZmZmZmZmYgOiAweGMwMDAwMDAwOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgRFJNX0ZPUk1B VF9SR0JYMTAxMDEwMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMjoKPiArCWNhc2Ug RFJNX0ZPUk1BVF9CR1JYMTAxMDEwMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JBMTAxMDEwMjoK PiArCQlwaXgzMlt4XSA9IGZvcmVncm91bmQgPyAweGZmZmZmZmZmIDogMHgwMDAwMDAwMzsKPiAr CQlicmVhazsKPiArCX0KPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9mcmFtZWJ1ZmZlcl9wYW5p Y19kcmF3X3h5KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5o IGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oCj4gaW5kZXggMjUxZDY3ZTA0YzJkLi42 OTRhNTgwM2FjM2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oCj4gQEAgLTE5MSwzICsxOTEs NyBAQCBpbnQgZHJtX3N5bmNvYmpfc2lnbmFsX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEsCj4gIHZvaWQgZHJtX2ZyYW1lYnVmZmVyX3ByaW50X2luZm8oc3RydWN0IGRy bV9wcmludGVyICpwLCB1bnNpZ25lZCBpbnQgaW5kZW50LAo+ICAJCQkJY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIpOwo+ICBpbnQgZHJtX2ZyYW1lYnVmZmVyX2RlYnVnZnNfaW5pdChz dHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cj4gKwo+ICsvKiBkcm1fcGFuaWMuYyAqLwo+ICt2b2lk IGRybV9wYW5pY19pbml0KHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdCk7Cj4gK3ZvaWQgZHJt X3BhbmljX2V4aXQoc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290KTsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2RybV9wYW5pYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wYW5pYy5j Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjRiY2E3ZjBiYzM2 OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmljLmMKPiBA QCAtMCwwICsxLDM2MyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ ICsvLyBDb3B5cmlnaHQgMjAxOCBOb3JhbGYgVHLDuG5uZXMKPiArCj4gKyNpbmNsdWRlIDxsaW51 eC9kZWJ1Z2ZzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9mb250Lmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2ttc2dfZHVtcC5oPgo+ICsjaW5jbHVkZSA8 bGludXgvc2VxX2ZpbGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUg PGxpbnV4L3VhY2Nlc3MuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZyYW1lYnVmZmVy Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9wbGFuZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ICsjaW5jbHVkZSA8ZHJt L2RybVAuaD4KPiArCj4gKyNpbmNsdWRlICJkcm1faW50ZXJuYWwuaCIKPiArCj4gKy8qCj4gKyAq IFRoZSBsb2cgbGluZXMgaW4gYW4gQVJNIHN0YWNrIGR1bXAgYXJlIDkyIGNoYXJhY3RlcnMgbG9u Zwo+ICsgKiBhbmQgMTIwIGlzIGEgbmljZSBtdWx0aXBsZSBmb3IgSEQgYW5kIDRLLgo+ICsgKi8K PiArI2RlZmluZSBEUk1fUEFOSUNfQ09MVU1OX1dJRFRICTEyMAoKSSB0aGluayB3ZSBzaG91bGQg Y29tcHV0ZSB0aGlzIGR5bmFtaWNhbGx5IGZyb20gdGhlIGFjdHVhbCBmYiB3aWR0aCBhbmQKZm9u dCB3aXRkdGguCgo+ICsKPiArc3RydWN0IGRybV9wYW5pY19jdHggewo+ICsJc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmI7Cj4gKwl1bnNpZ25lZCBpbnQgd2lkdGg7Cj4gKwl1bnNpZ25lZCBpbnQg aGVpZ2h0Owo+ICsJdm9pZCAqdm1hcDsKPiArCj4gKwljb25zdCBzdHJ1Y3QgZm9udF9kZXNjICpm b250Owo+ICsJdW5zaWduZWQgaW50IGNvbF93aWR0aDsKPiArCXVuc2lnbmVkIGludCBib3R0b21f eTsKPiArCXNpemVfdCBtYXhfbGluZV9sZW5ndGg7Cj4gKwo+ICsJdW5zaWduZWQgaW50IHg7Cj4g Kwl1bnNpZ25lZCBpbnQgeTsKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZm9udF9k ZXNjICpkcm1fcGFuaWNfZm9udDh4OCwgKmRybV9wYW5pY19mb250OHgxNjsKPiArCj4gK3N0YXRp YyB2b2lkIGRybV9wYW5pY19kcmF3X3h5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB2b2lk ICp2bWFwLAo+ICsJCQkgICAgICBpbnQgeCwgaW50IHksIGJvb2wgZmcpCj4gK3sKPiArCWlmIChm Yi0+ZnVuY3MtPnBhbmljX2RyYXdfeHkpCj4gKwkJZmItPmZ1bmNzLT5wYW5pY19kcmF3X3h5KGZi LCB2bWFwLCB4LCB5LCBmZyk7Cj4gKwllbHNlCj4gKwkJZHJtX2ZyYW1lYnVmZmVyX3BhbmljX2Ry YXdfeHkoZmIsIHZtYXAsIHgsIHksIGZnKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHJtX3Bh bmljX3JlbmRlcl9jaGFyKHN0cnVjdCBkcm1fcGFuaWNfY3R4ICpjdHgsCj4gKwkJCQkgIHVuc2ln bmVkIGludCBvZmZzZXQsIGNoYXIgYykKPiArewo+ICsJdW5zaWduZWQgaW50IGgsIHcsIHgsIHk7 Cj4gKwl1OCBmb250bGluZTsKPiArCj4gKwlmb3IgKGggPSAwOyBoIDwgY3R4LT5mb250LT5oZWln aHQ7IGgrKykgewo+ICsJCWZvbnRsaW5lID0gKih1OCAqKShjdHgtPmZvbnQtPmRhdGEgKyBjICog Y3R4LT5mb250LT5oZWlnaHQgKyBoKTsKPiArCj4gKwkJZm9yICh3ID0gMDsgdyA8IGN0eC0+Zm9u dC0+d2lkdGg7IHcrKykgewo+ICsJCQl4ID0gY3R4LT54ICsgKG9mZnNldCAqIGN0eC0+Zm9udC0+ d2lkdGgpICsgdzsKPiArCQkJeSA9IGN0eC0+eSArIGg7Cj4gKwkJCWRybV9wYW5pY19kcmF3X3h5 KGN0eC0+ZmIsIGN0eC0+dm1hcCwgeCwgeSwKPiArCQkJCQkgIGZvbnRsaW5lICYgQklUKDcgLSB3 KSk7Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfcmVuZGVy X2xpbmUoc3RydWN0IGRybV9wYW5pY19jdHggKmN0eCwKPiArCQkJCSAgY29uc3QgY2hhciAqbGlu ZSwgc2l6ZV90IGxlbikKPiArewo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJZm9yIChpID0g MDsgaSA8IGxlbjsgaSsrKQo+ICsJCWRybV9wYW5pY19yZW5kZXJfY2hhcihjdHgsIGksIGxpbmVb aV0pOwo+ICsKPiArCS8qIENsZWFyIG91dCB0aGUgcmVzdCBvZiB0aGUgbGluZSAqLwo+ICsJZm9y IChpID0gbGVuOyBpIDwgY3R4LT5tYXhfbGluZV9sZW5ndGg7IGkrKykKPiArCQlkcm1fcGFuaWNf cmVuZGVyX2NoYXIoY3R4LCBpLCAnICcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBkcm1fcGFu aWNfbmV3bGluZShzdHJ1Y3QgZHJtX3BhbmljX2N0eCAqY3R4KQo+ICt7Cj4gKwlpZiAoY3R4LT54 ID09IDAgJiYgY3R4LT55ID09IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJaWYgKGN0eC0+eSA9 PSAwKSB7Cj4gKwkJY3R4LT54IC09IGN0eC0+Y29sX3dpZHRoOwo+ICsJCWN0eC0+eSA9IGN0eC0+ Ym90dG9tX3k7Cj4gKwl9IGVsc2Ugewo+ICsJCWN0eC0+eSAtPSBjdHgtPmZvbnQtPmhlaWdodDsK PiArCX0KPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArLyogUmVuZGVyIGZyb20gYm90 dG9tIHJpZ2h0IG1vc3QgY29sdW1uICovCj4gK3N0YXRpYyBib29sIGRybV9wYW5pY19yZW5kZXJf bGluZXMoc3RydWN0IGRybV9wYW5pY19jdHggKmN0eCwKPiArCQkJCSAgIGNvbnN0IGNoYXIgKnN0 ciwgc2l6ZV90IGxlbikKPiArewo+ICsJc2l6ZV90IGwsIGxpbmVfbGVuZ3RoOwo+ICsJY29uc3Qg Y2hhciAqcG9zOwo+ICsJaW50IGk7Cj4gKwo+ICsJd2hpbGUgKGxlbikgewo+ICsJCXBvcyA9IHN0 ciArIGxlbiAtIDE7Cj4gKwo+ICsJCWlmICgqcG9zID09ICdcbicpIHsKPiArCQkJbGVuLS07Cj4g KwkJCWlmICghZHJtX3BhbmljX25ld2xpbmUoY3R4KSkKPiArCQkJCXJldHVybiBmYWxzZTsKPiAr CQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQl3aGlsZSAocG9zID4gc3RyICYmICoocG9zIC0g MSkgIT0gJ1xuJykKPiArCQkJcG9zLS07Cj4gKwo+ICsJCWxpbmVfbGVuZ3RoID0gbGVuIC0gKHBv cyAtIHN0cik7Cj4gKwo+ICsJCWlmICghbGluZV9sZW5ndGggfHwgbGVuIDwgbGluZV9sZW5ndGgp IHsKPiArCQkJcHJfZXJyKCIlczogQnVnISBsaW5lX2xlbmd0aD0lenUgbGVuPSV6dVxuIiwKPiAr CQkJICAgICAgIF9fZnVuY19fLCBsaW5lX2xlbmd0aCwgbGVuKTsKPiArCQkJcmV0dXJuIGZhbHNl Owo+ICsJCX0KPiArCj4gKwkJbGVuIC09IGxpbmVfbGVuZ3RoOwo+ICsKPiArCQlmb3IgKGkgPSBE SVZfUk9VTkRfVVAobGluZV9sZW5ndGgsIGN0eC0+bWF4X2xpbmVfbGVuZ3RoKSAtIDE7IGkgPj0g MDsgaS0tKSB7Cj4gKwkJCWwgPSBtaW4oY3R4LT5tYXhfbGluZV9sZW5ndGgsIGxpbmVfbGVuZ3Ro IC0gaSAqIGN0eC0+bWF4X2xpbmVfbGVuZ3RoKTsKPiArCQkJZHJtX3BhbmljX3JlbmRlcl9saW5l KGN0eCwgcG9zICsgKGkgKiBjdHgtPm1heF9saW5lX2xlbmd0aCksIGwpOwo+ICsJCQlpZiAoaSAm JiAhZHJtX3BhbmljX25ld2xpbmUoY3R4KSkKPiArCQkJCXJldHVybiBmYWxzZTsKPiArCQl9Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRybV9wYW5p Y19rbXNnX3JlbmRlcl9zY3JlZW4oc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkJIHN0 cnVjdCBrbXNnX2R1bXBlciAqZHVtcGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHBsYW5lLT5zdGF0ZS0+ZmI7Cj4gKwlib29sIGZpcnN0X2l0ZXJhdGlvbiA9IHRydWU7 Cj4gKwlzdHJ1Y3QgZHJtX3BhbmljX2N0eCBjdHg7Cj4gKwlzdGF0aWMgY2hhciB0ZXh0WzEwMjRd Owo+ICsJc2l6ZV90IGxlbjsKPiArCj4gKwljdHgudm1hcCA9IGZiLT5mdW5jcy0+cGFuaWNfdm1h cChmYik7Cj4gKwo+ICsJLyogUHJpbnQgc29tZSBpbmZvIHdoZW4gdGVzdGluZyAqLwo+ICsJaWYg KGR1bXBlci0+bWF4X3JlYXNvbiA9PSBLTVNHX0RVTVBfT09QUykgewo+ICsJCXN0cnVjdCBkcm1f Zm9ybWF0X25hbWVfYnVmIGZvcm1hdF9uYW1lOwo+ICsKPiArCQlwcl9pbmZvKCIlczogW0ZCOiVk XSAldXgldSBmb3JtYXQ9JXMgdm1hcD0lcFxuIiwKPiArCQkJX19mdW5jX18sIGZiLT5iYXNlLmlk LCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCj4gKwkJCWRybV9nZXRfZm9ybWF0X25hbWUoZmItPmZv cm1hdC0+Zm9ybWF0LCAmZm9ybWF0X25hbWUpLAo+ICsJCQljdHgudm1hcCk7Cj4gKwl9Cj4gKwo+ ICsJaWYgKCFjdHgudm1hcCkKPiArCQlyZXR1cm47CgpGb3Igc29tZSBmcmFtZWJ1ZmZlcnMgaXQg bWlnaHQgYmUgdXNlZnVsIHRvIG5vdCByZXF1aXJlIHZtYXAsIGJ1dCBpbnN0ZWFkCmhhdmUgc29t ZSBwYWdlLWJ5LXBhZ2Uga2luZCBvZiBhY2Nlc3MgaGVscGVyLiBTaW5jZSBwcmVlbXB0aXZlbHkg c2V0dGluZwp1cCBhIHZtYXAgZm9yIGFsbCB0aGUgbm9uLWNvbnRpbm91cyBidWZmZXJzIGlzIGEg Yml0IG11Y2gsIGFuZCB3ZSByZWFsbHkKY2FuJ3Qgc2V0IHVwIHRoZSB2bWFwIGluIHRoZSBwYW5p YyBoYW5kbGVyLgoKTWF5YmUgd2Ugc2hvdWxkIGNhbGwgdGhpcyBwYW5pY19wcmVwYXJlL3Bhbmlj X2ZpbmlzaCBhbmQKcy92bWFwL2Nvb2tpZS8sIHRvIG1ha2UgaXQgZW50aXJlbHkgb3BhcXVlPwoK QnV0IGEgYml0IG92ZXJlbmdpbmVlcmluZyBwZXJoYXBzIDotKQoKPiArCj4gKwljdHguZmIgPSBm YjsKPiArCWN0eC53aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZS0+c3RhdGUtPnNyYykgPj4g MTY7Cj4gKwljdHguaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZS0+c3RhdGUtPnNyYykg Pj4gMTY7Cj4gKwo+ICsJLyoKPiArCSAqIFRPRE86Cj4gKwkgKiBGaW5kIHdoaWNoIHBhcnQgb2Yg dGhlIGZiIHRoYXQgaXMgdmlzaWJsZS4KPiArCSAqIFdpZHRoIGFuZCBoZWlnaHQgYXJlIHplcm8g b24gdmM0Cj4gKwkgKi8KPiArCWlmICghY3R4LndpZHRoIHx8ICFjdHguaGVpZ2h0KSB7Cj4gKwkJ Y3R4LndpZHRoID0gZmItPndpZHRoOwo+ICsJCWN0eC5oZWlnaHQgPSBmYi0+aGVpZ2h0Owo+ICsJ fQo+ICsKPiArCS8qIFRyeSB0byBmaXQgNTAgbGluZXMgKi8KPiArCWlmIChjdHguaGVpZ2h0IDwg NTAgKiAxNiAmJiBkcm1fcGFuaWNfZm9udDh4OCkKPiArCQljdHguZm9udCA9IGRybV9wYW5pY19m b250OHg4Owo+ICsJZWxzZQo+ICsJCWN0eC5mb250ID0gZHJtX3BhbmljX2ZvbnQ4eDE2Owo+ICsK PiArCWN0eC5jb2xfd2lkdGggPSBEUk1fUEFOSUNfQ09MVU1OX1dJRFRIICogY3R4LmZvbnQtPndp ZHRoOwo+ICsJY3R4LmJvdHRvbV95ID0gKChjdHguaGVpZ2h0IC8gY3R4LmZvbnQtPmhlaWdodCkg LSAxKSAqIGN0eC5mb250LT5oZWlnaHQ7Cj4gKwo+ICsJaWYgKGN0eC53aWR0aCA8IDIgKiBjdHgu Y29sX3dpZHRoKQo+ICsJCWN0eC5tYXhfbGluZV9sZW5ndGggPSBjdHgud2lkdGggLyBjdHguZm9u dC0+d2lkdGg7Cj4gKwllbHNlCj4gKwkJY3R4Lm1heF9saW5lX2xlbmd0aCA9IERSTV9QQU5JQ19D T0xVTU5fV0lEVEggLSAyOyAvKiBib3JkZXI9MiAqLwo+ICsKPiArCWN0eC54ID0gMDsKPiArCWN0 eC55ID0gY3R4LmJvdHRvbV95Owo+ICsJaWYgKGN0eC53aWR0aCA+IGN0eC5jb2xfd2lkdGgpCj4g KwkJY3R4LnggPSAoKGN0eC53aWR0aCAvIGN0eC5jb2xfd2lkdGgpIC0gMSkgKiBjdHguY29sX3dp ZHRoOwo+ICsKPiArCXByX2RlYnVnKCIlczogZm9udD0lcyAldXgldSBtYXhfbGluZV9sZW5ndGg9 JXp1ICgldSwldSlcbiIsCj4gKwkJIF9fZnVuY19fLCBjdHguZm9udC0+bmFtZSwgY3R4LndpZHRo LCBjdHguaGVpZ2h0LAo+ICsJCSBjdHgubWF4X2xpbmVfbGVuZ3RoLCBjdHgueCwgY3R4LnkpOwo+ ICsKPiArCWttc2dfZHVtcF9yZXdpbmQoZHVtcGVyKTsKPiArCj4gKwkvKiBUaGUgbGF0ZXN0IG1l c3NhZ2VzIGFyZSBmZXRjaGVkIGZpcnN0ICovCj4gKwl3aGlsZSAoa21zZ19kdW1wX2dldF9idWZm ZXIoZHVtcGVyLCBmYWxzZSwgdGV4dCwgc2l6ZW9mKHRleHQpLCAmbGVuKSkgewo+ICsJCS8qIFN0 cmlwIG9mZiB0aGUgdmVyeSBsYXN0IG5ld2xpbmUgc28gd2Ugc3RhcnQgYXQgdGhlIGJvdHRvbSAq Lwo+ICsJCWlmIChmaXJzdF9pdGVyYXRpb24pIHsKPiArCQkJbGVuLS07Cj4gKwkJCWZpcnN0X2l0 ZXJhdGlvbiA9IGZhbHNlOwo+ICsJCX0KPiArCj4gKwkJaWYgKCFkcm1fcGFuaWNfcmVuZGVyX2xp bmVzKCZjdHgsIHRleHQsIGxlbikpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWlmIChmYi0+ ZnVuY3MtPnBhbmljX3Z1bm1hcCkKPiArCQlmYi0+ZnVuY3MtPnBhbmljX3Z1bm1hcChmYiwgdm1h cCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRybV9wYW5pY190cnlfZGV2KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHN0cnVjdCBrbXNnX2R1bXBlciAqZHVtcGVyKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ICsJc3Ry dWN0IGRybV9jcnRjICpjcnRjOwo+ICsKPiArCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShk ZXYsIERSSVZFUl9BVE9NSUMpKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoZHVtcGVyLT5tYXhf cmVhc29uID09IEtNU0dfRFVNUF9PT1BTKQo+ICsJCXByX2luZm8oIiVzOiAlcyBvbiBtaW5vciAl ZFxuIiwgX19mdW5jX18sIGRldi0+ZHJpdmVyLT5uYW1lLAo+ICsJCQlkZXYtPnByaW1hcnktPmlu ZGV4KTsKPiArCj4gKwlkcm1fZm9yX2VhY2hfY3J0YyhjcnRjLCBkZXYpIHsKPiArCQlpZiAoIXd3 X211dGV4X3RyeWxvY2soJmNydGMtPm11dGV4Lm11dGV4KSkKPiArCQkJY29udGludWU7Cj4gKwo+ ICsJCWlmICghY3J0Yy0+ZW5hYmxlZCB8fCAhY3J0Yy0+cHJpbWFyeSkKPiArCQkJZ290byBjcnRj X3VubG9jazsKPiArCj4gKwkJaWYgKCFjcnRjLT5zdGF0ZSB8fCAhY3J0Yy0+c3RhdGUtPmFjdGl2 ZSkKPiArCQkJZ290byBjcnRjX3VubG9jazsKPiArCj4gKwkJcGxhbmUgPSBjcnRjLT5wcmltYXJ5 Owo+ICsJCWlmICghd3dfbXV0ZXhfdHJ5bG9jaygmcGxhbmUtPm11dGV4Lm11dGV4KSkKPiArCQkJ Z290byBjcnRjX3VubG9jazsKPiArCj4gKwkJLyoKPiArCQkgKiBUT0RPOiBTaG91bGQgd2UgY2hl Y2sgcGxhbmVfc3RhdGUtPnZpc2libGU/Cj4gKwkJICogSXQgaXMgbm90IHNldCBvbiB2YzQKCkkg dGhpbmsgd2Ugc2hvdWxkLiBXZSBzaG91bGQgYWxzbyBjaGVjayB3aGV0aGVyIHRoYXQgcHJpbWFy eSBpcyBjb25uZWN0ZWQKdG8gdGhlIGNydGMgKHNvbWUgaHcgeW91IGNhbiByZWFzc2lnbiBwbGFu ZXMgZnJlZWx5IGJldHdlZW4gY3J0YywgYW5kIHRoZQpjcnRjLT5wcmltYXJ5IHBvaW50ZXIgaXMg b25seSB1c2VkIGZvciBjb21wYXQgd2l0aCBsZWdhY3kgaW9jdGwpLgoKPiArCQlpZiAoIXBsYW5l LT5zdGF0ZSB8fCAhcGxhbmUtPnN0YXRlLT52aXNpYmxlKQo+ICsJCSAqLwo+ICsJCWlmICghcGxh bmUtPnN0YXRlKQo+ICsJCQlnb3RvIHBsYW5lX3VubG9jazsKPiArCj4gKwkJZmIgPSBwbGFuZS0+ c3RhdGUtPmZiOwo+ICsJCWlmICghZmIgfHwgIWZiLT5mdW5jcy0+cGFuaWNfdm1hcCkKCkRvY3Mg c2F5cyB0aGlzIGlzIG9wdGlvbmFsLCBkb2Vzbid0IHNlZW0gdG8gYmUgYWxsIHRoYXQgb3B0aW9u YWwuIEknZApjaGVjayBmb3IgdGhpcyBvciBhIGRyaXZlci1zcGVjaWZpYyAtPnBhbmljX2RyYXdf eHkgaW5zdGVhZC4KPiArCQkJZ290byBwbGFuZV91bmxvY2s7Cj4gKwo+ICsJCS8qCj4gKwkJICog ZmJjb24gcHV0cyBvdXQgcGFuaWMgbWVzc2FnZXMgc28gc3RheSBhd2F5IHRvIGF2b2lkIGp1bWJs ZWQKPiArCQkgKiBvdXRwdXQuIElmIHZjLT52Y19tb2RlICE9IEtEX1RFWFQgZmJjb24gd29uJ3Qg cHV0IG91dAo+ICsJCSAqIG1lc3NhZ2VzIChzZWUgdnRfY29uc29sZV9wcmludCkuCj4gKwkJICov Cj4gKwkJaWYgKGRldi0+ZmJfaGVscGVyICYmIGRldi0+ZmJfaGVscGVyLT5mYiA9PSBmYikKPiAr CQkJZ290byBwbGFuZV91bmxvY2s7Cj4gKwo+ICsJCWRybV9wYW5pY19rbXNnX3JlbmRlcl9zY3Jl ZW4ocGxhbmUsIGR1bXBlcik7Cj4gK3BsYW5lX3VubG9jazoKPiArCQl3d19tdXRleF91bmxvY2so JnBsYW5lLT5tdXRleC5tdXRleCk7Cj4gK2NydGNfdW5sb2NrOgo+ICsJCXd3X211dGV4X3VubG9j aygmY3J0Yy0+bXV0ZXgubXV0ZXgpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9w YW5pY19kZXZfaXRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0 cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJaWYg KG1pbm9yICYmIG1pbm9yLT50eXBlID09IERSTV9NSU5PUl9QUklNQVJZKQo+ICsJCWRybV9wYW5p Y190cnlfZGV2KG1pbm9yLT5kZXYsIGRhdGEpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfa21zZ19kdW1wKHN0cnVjdCBrbXNnX2R1bXBlciAqZHVt cGVyLAo+ICsJCQkJZW51bSBrbXNnX2R1bXBfcmVhc29uIHJlYXNvbikKPiArewo+ICsJY2xhc3Nf Zm9yX2VhY2hfZGV2aWNlKGRybV9jbGFzcywgTlVMTCwgZHVtcGVyLCBkcm1fcGFuaWNfZGV2X2l0 ZXIpOwoKY2xhc3NfZm9yX2VhY2hfZGV2aWNlIHVzZXMga2xpc3QsIHdoaWNoIG9ubHkgdXNlcyBh biBpcnFzYXZlIHNwaW5sb2NrLiBJCnRoaW5rIHRoYXQncyBnb29kIGVub3VnaC4gQ29tbWVudCB0 byB0aGF0IGVmZmVjdCB3b3VsZCBiZSBnb29kIGUuZy4KCgkvKiBiYXNlZCBvbiBrbGlzdCwgd2hp Y2ggdXNlcyBvbmx5IGEgc3Bpbl9sb2NrX2lycXNhdmUsIHdoaWNoIHdlCgkgKiBhc3N1bWUgc3Rp bGwgd29ya3MgKi8KCklmIHdlIGFpbSBmb3IgcGVyZmVjdCB0aGlzIHNob3VsZCBiZSBhIHRyeWxv Y2sgc3RpbGwsIG1heWJlIHVzaW5nIG91ciBvd24KZGV2aWNlIGxpc3QuCgo+ICt9Cj4gKwo+ICtz dGF0aWMgc3RydWN0IGttc2dfZHVtcGVyIGRybV9wYW5pY19rbXNnX2R1bXBlciA9IHsKPiArCS5k dW1wID0gZHJtX3BhbmljX2ttc2dfZHVtcCwKPiArCS5tYXhfcmVhc29uID0gS01TR19EVU1QX1BB TklDLAo+ICt9Owo+ICsKPiArc3RhdGljIHNzaXplX3QgZHJtX3BhbmljX2ZpbGVfcGFuaWNfd3Jp dGUoc3RydWN0IGZpbGUgKmZpbGUsCj4gKwkJCQkJICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9i dWYsCj4gKwkJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKPiArewo+ICsJdW5zaWdu ZWQgbG9uZyBsb25nIHZhbDsKPiArCWNoYXIgYnVmWzI0XTsKPiArCXNpemVfdCBzaXplOwo+ICsJ c3NpemVfdCByZXQ7Cj4gKwo+ICsJc2l6ZSA9IG1pbihzaXplb2YoYnVmKSAtIDEsIGNvdW50KTsK PiArCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBzaXplKSkKPiArCQlyZXR1cm4g LUVGQVVMVDsKPiArCj4gKwlidWZbc2l6ZV0gPSAnXDAnOwo+ICsJcmV0ID0ga3N0cnRvdWxsKGJ1 ZiwgMCwgJnZhbCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJZHJtX3Bh bmljX2ttc2dfZHVtcGVyLm1heF9yZWFzb24gPSBLTVNHX0RVTVBfT09QUzsKPiArCXdtYigpOwo+ ICsKPiArCS8qIERvIGEgcmVhbCB0ZXN0IHdpdGg6IGVjaG8gYyA+IC9wcm9jL3N5c3JxLXRyaWdn ZXIgKi8KPiArCj4gKwlpZiAodmFsID09IDApIHsKPiArCQlwcl9pbmZvKCJUZXN0IHBhbmljIHNj cmVlbiB1c2luZyBrbXNnX2R1bXAoT09QUylcbiIpOwo+ICsJCWttc2dfZHVtcChLTVNHX0RVTVBf T09QUyk7Cj4gKwl9IGVsc2UgaWYgKHZhbCA9PSAxKSB7Cj4gKwkJY2hhciAqbnVsbF9wb2ludGVy ID0gTlVMTDsKPiArCj4gKwkJcHJfaW5mbygiVGVzdCBwYW5pYyBzY3JlZW4gdXNpbmcgTlVMTCBw b2ludGVyIGRlcmVmZXJlbmNlXG4iKTsKPiArCQkqbnVsbF9wb2ludGVyID0gMTsKPiArCX0gZWxz ZSB7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9CgpUaGlzIGlzbid0IHF1aXRlIHdoYXQgSSBo YWQgaW4gbWluZCwgc2luY2UgaXQgc3RpbGwga2lsbHMgdGhlIGtlcm5lbCAobGlrZQpzeXNycS10 cmlnZ2VyKS4gSW5zdGVhZCB3aGF0IEkgaGFkIGluIG1pbmQgaXMgdG8gcmVjcmVhdGUgdGhlIHdv cnN0CnBvc3NpYmxlIHBhbmljIGNvbnRleHQgYXMgbXVjaCBhcyBmZWFzaWJsZSAoZGlzYWJsaW5n IGludGVycnVwdHMgc2hvdWxkIGJlCmEgZ29vZCBzdGFydCwgbWF5YmUgd2UgY2FuIGV2ZW4gZG8g YW4gbm1pIGNhbGxiYWNrKSwgYW5kIHRoZW4gY2FsbCBvdXIKcGFuaWMgaW1wbGVtZW50YXRpb24u IFRoYXQgd2F5IHdlIGNhbiB0ZXN0IHRoZSBwYW5pYyBoYW5kbGVyIGluIGEKbm9uLWRlc3RydWN0 aXZlIHdheSAoaS5lLiBhc2lkZSBmcm9tIGxhc3QgZG1lc2cgbGluZXMgcHJpbnRlZCB0byB0aGUK c2NyZWVuIG5vdGhpbmcgYmFkIGhhcHBlbnMgdG8gdGhlIGtlcm5lbDogTm8gcmVhbCBwYW5pYywg bm8gb29wcywgbm8KdGFpbnRpbmcpLgoKQW5kIGlndCB0ZXN0Y2FzZSBjb3VsZCB0aGVuIGV4ZXJj aXNlIHRoaXMsIGFuZCBDSSBydW4gaXQuCgo+ICsKPiArCXJldHVybiBjb3VudDsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJtX3BhbmljX3BhbmljX29w cyA9IHsKPiArCS53cml0ZSA9ICAgICAgICBkcm1fcGFuaWNfZmlsZV9wYW5pY193cml0ZSwKPiAr CS5vcGVuID0gICAgICAgICBzaW1wbGVfb3BlbiwKPiArCS5sbHNlZWsgPSAgICAgICBkZWZhdWx0 X2xsc2VlaywKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkcm1fcGFuaWNfZF9w YW5pYzsKPiArCj4gK3ZvaWQgX19pbml0IGRybV9wYW5pY19pbml0KHN0cnVjdCBkZW50cnkgKmRl YnVnZnNfcm9vdCkKPiArewo+ICsJZHJtX3BhbmljX2ZvbnQ4eDggPSBmaW5kX2ZvbnQoIlZHQTh4 OCIpOwo+ICsJZHJtX3BhbmljX2ZvbnQ4eDE2ID0gZmluZF9mb250KCJWR0E4eDE2Iik7Cj4gKwlp ZiAoIWRybV9wYW5pY19mb250OHgxNikgewo+ICsJCURSTV9XQVJOKCJDb3VsZG4ndCBmaW5kIGZv bnQsIHBhbmljIHNjcmVlbiBkaXNhYmxlZFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiAr CWRybV9wYW5pY19kX3BhbmljID0gZGVidWdmc19jcmVhdGVfZmlsZSgicGFuaWMtdGVzdCIsIDAy MDAsCj4gKwkJCQkJCWRlYnVnZnNfcm9vdCwgTlVMTCwKPiArCQkJCQkJJmRybV9wYW5pY19wYW5p Y19vcHMpOwo+ICsJa21zZ19kdW1wX3JlZ2lzdGVyKCZkcm1fcGFuaWNfa21zZ19kdW1wZXIpOwo+ ICt9Cj4gKwo+ICt2b2lkIGRybV9wYW5pY19leGl0KHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9v dCkKPiArewo+ICsJa21zZ19kdW1wX3VucmVnaXN0ZXIoJmRybV9wYW5pY19rbXNnX2R1bXBlcik7 Cj4gKwlkZWJ1Z2ZzX3JlbW92ZShkcm1fcGFuaWNfZF9wYW5pYyk7Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmggYi9pbmNsdWRlL2RybS9kcm1fZnJhbWVi dWZmZXIuaAo+IGluZGV4IGYwYjM0Yzk3N2VjNS4uZjMyNzQ3OThlY2ZlIDEwMDY0NAo+IC0tLSBh L2luY2x1ZGUvZHJtL2RybV9mcmFtZWJ1ZmZlci5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Zy YW1lYnVmZmVyLmgKPiBAQCAtOTQsNiArOTQsNDQgQEAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9m dW5jcyB7Cj4gIAkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgdW5zaWduZWQgZmxh Z3MsCj4gIAkJICAgICB1bnNpZ25lZCBjb2xvciwgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBz LAo+ICAJCSAgICAgdW5zaWduZWQgbnVtX2NsaXBzKTsKPiArCj4gKwkvKioKPiArCSAqIEBwYW5p Y192bWFwOgo+ICsJICoKPiArCSAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBwYW5pYyBoYW5kbGlu Zy4KPiArCSAqCj4gKwkgKiBGb3Igdm1hcHBpbmcgdGhlIHNlbGVjdGVkIGZyYW1lYnVmZmVyIGlu IGEgcGFuaWMgY29udGV4dC4gTXVzdAo+ICsJICogYmUgc3VwZXIgY2FyZWZ1bCBhYm91dCBsb2Nr aW5nIChvbmx5IHRyeWxvY2tpbmcgYWxsb3dlZCkuCj4gKwkgKgo+ICsJICogUkVUVVJOUzoKPiAr CSAqCj4gKwkgKiBOVUxMIGlmIGl0IGRpZG4ndCB3b3JrIG91dCwgb3RoZXJ3aXNlIGFuIG9wYXF1 ZSBjb29raWUgd2hpY2ggaXMKPiArCSAqIHBhc3NlZCB0byBAcGFuaWNfZHJhd194eS4gSXQgY2Fu IGJlIGFueXRoaW5nOiB2bWFwIGFyZWEsIHN0cnVjdHVyZQo+ICsJICogd2l0aCBtb3JlIGRldGFp bHMsIGp1c3QgYSBmZXcgZmxhZ3MsIC4uLgo+ICsJICovCj4gKwl2b2lkICooKnBhbmljX3ZtYXAp KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKPiArCj4gKwkvKioKPiArCSAqIEBwYW5pY192 dW5tYXA6Cj4gKwkgKgo+ICsJICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGNsZWFuaW5nIHVwIGFm dGVyIHBhbmljIHRlc3RpbmcuCj4gKwkgKgo+ICsJICogQ3J0YyBhbmQgcGxhbmUgbG9ja3MgYXJl IHJlbGVhc2VkIGFmdGVyIHRoaXMgY2FsbGJhY2sgaGFzIHJ1bi4KPiArCSAqIHZtYXAgaXMgdGhl IGNvb2tpZSByZXR1cm5lZCBieSBAcGFuaWNfdm1hcC4KPiArCSAqLwo+ICsJdm9pZCAoKnBhbmlj X3Z1bm1hcCkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHZvaWQgKnZtYXApOwo+ICsKPiAr CS8qKgo+ICsJICogQHBhbmljX2RyYXdfeHk6Cj4gKwkgKgo+ICsJICogT3B0aW9uYWwgY2FsbGJh Y2sgZm9yIGRyYXdpbmcgcGl4ZWxzIGR1cmluZyBwYW5pYy4KPiArCSAqCj4gKwkgKiBGb3IgZHJh d2luZyBwaXhlbHMgb250byBhIGZyYW1lYnVmZmVyIHByZXBhcmVkIHdpdGggQHBhbmljX3ZtYXAu Cj4gKwkgKiB2bWFwIGlzIHRoZSBjb29raWUgcmV0dXJuZWQgYnkgQHBhbmljX3ZtYXAuCj4gKwkg KiBJZiBpdCdzIG5vdCBzZXQsIGRybV9mcmFtZWJ1ZmZlcl9wYW5pY19kcmF3X3h5KCkgaXMgdXNl ZC4KPiArCSAqLwo+ICsJdm9pZCAoKnBhbmljX2RyYXdfeHkpKHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCB2b2lkICp2bWFwLAo+ICsJCQkgICAgICBpbnQgeCwgaW50IHksIGJvb2wgZm9yZWdy b3VuZCk7Cj4gIH07Cj4gIAo+ICAvKioKPiBAQCAtMjkzLDQgKzMzMSw3IEBAIGludCBkcm1fZnJh bWVidWZmZXJfcGxhbmVfd2lkdGgoaW50IHdpZHRoLAo+ICBpbnQgZHJtX2ZyYW1lYnVmZmVyX3Bs YW5lX2hlaWdodChpbnQgaGVpZ2h0LAo+ICAJCQkJIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUpOwo+ICAKPiArdm9pZCBkcm1fZnJhbWVidWZmZXJfcGFuaWNfZHJh d194eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgdm9pZCAqdm1hcCwKPiArCQkJCSAgIGlu dCB4LCBpbnQgeSwgYm9vbCBmb3JlZ3JvdW5kKTsKPiArCj4gICNlbmRpZgo+IC0tIAo+IDIuMjAu MQo+IAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0 aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeA==