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: Tue, 12 Mar 2019 11:58:10 +0100 Message-ID: <20190312105810.GZ2665@phenom.ffwll.local> References: <20190311174218.51899-1-noralf@tronnes.org> <20190311174218.51899-2-noralf@tronnes.org> <20190311192338.GR2665@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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 T24gTW9uLCBNYXIgMTEsIDIwMTkgYXQgMTE6MzM6MTVQTSArMDEwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IAo+IAo+IERlbiAxMS4wMy4yMDE5IDIwLjIzLCBza3JldiBEYW5pZWwgVmV0dGVy Ogo+ID4gT24gTW9uLCBNYXIgMTEsIDIwMTkgYXQgMDY6NDI6MTZQTSArMDEwMCwgTm9yYWxmIFRy w7hubmVzIHdyb3RlOgo+ID4+IFRoaXMgYWRkcyBzdXBwb3J0IGZvciBvdXRwdXR0aW5nIGtlcm5l bCBtZXNzYWdlcyBvbiBwYW5pYygpLgo+ID4+IEEga2VybmVsIG1lc3NhZ2UgZHVtcGVyIGlzIHVz ZWQgdG8gZHVtcCB0aGUgbG9nLiBUaGUgZHVtcGVyIGl0ZXJhdGVzCj4gPj4gb3ZlciBlYWNoIERS TSBkZXZpY2UgYW5kIGl0J3MgY3J0YydzIHRvIGZpbmQgc3VpdGFibGUgZnJhbWVidWZmZXJzLgo+ ID4+Cj4gPj4gQWxsIHRoZSBvdGhlciBkdW1wZXJzIGFyZSBydW4gYmVmb3JlIHRoaXMgb25lIGV4 Y2VwdCBtdGRvb3BzLgo+ID4+IE9ubHkgYXRvbWljIGRyaXZlcnMgYXJlIHN1cHBvcnRlZC4KPiA+ Pgo+ID4+IFNpZ25lZC1vZmYtYnk6IE5vcmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3Jn Pgo+ID4gCj4gPiBCdW5jaCBvZiBjb21tZW50cy9pZGVhcyBmb3IgeW91IG9yIERhcndpc2ggYmVs b3csIHdob2V2ZXIgcGlja3MgdGhpcyB1cC4KPiAKPiBBY3R1YWxseSBpdCB3b3VsZCBuZSBuaWNl IGlmIERhcndpc2ggY291bGQgcGljayBpdCB1cCBzaW5jZSBoZSB3aWxsIGRvCj4gaXQgb24gaTkx NSB3aGljaCB3aWxsIGJlIHVzZWZ1bCB0byBhIG11Y2ggYnJvYWRlciBhdWRpZW5jZS4KPiBJZiBu b3QgSSdsbCByZXNwaW4gd2hlbiBJJ20gZG9uZSB3aXRoIHRoZSBkcm1fZmJfaGVscGVyIHJlZmFj dG9yaW5nLgo+IAo+IDxzbmlwPgo+IAo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX3BhbmljLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmljLmMKPiA+PiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+ID4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNGJjYTdmMGJjMzY5Cj4gPj4gLS0t IC9kZXYvbnVsbAo+ID4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFuaWMuYwo+ID4+IEBA IC0wLDAgKzEsMzYzIEBACj4gPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Cj4gPj4gKy8vIENvcHlyaWdodCAyMDE4IE5vcmFsZiBUcsO4bm5lcwo+ID4+ICsKPiA+PiArI2lu Y2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L2ZvbnQuaD4KPiA+ PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgva21zZ19k dW1wLmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgo+ID4+ICsjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+ID4+ICsKPiA+ PiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ID4+ICsjaW5jbHVkZSA8ZHJtL2RybV9kZXZp Y2UuaD4KPiA+PiArI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+Cj4gPj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2ZpbGUuaD4KPiA+PiArI2luY2x1ZGUgPGRybS9kcm1fZnJhbWVidWZmZXIuaD4KPiA+PiAr I2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gPj4gKyNpbmNsdWRlIDxkcm0vZHJtX3Bs YW5lLmg+Cj4gPj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+Cj4gPj4gKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgo+ID4+ICsKPiA+PiArI2luY2x1ZGUgImRybV9pbnRlcm5hbC5oIgo+ID4+ICsK PiA+PiArLyoKPiA+PiArICogVGhlIGxvZyBsaW5lcyBpbiBhbiBBUk0gc3RhY2sgZHVtcCBhcmUg OTIgY2hhcmFjdGVycyBsb25nCj4gPj4gKyAqIGFuZCAxMjAgaXMgYSBuaWNlIG11bHRpcGxlIGZv ciBIRCBhbmQgNEsuCj4gPj4gKyAqLwo+ID4+ICsjZGVmaW5lIERSTV9QQU5JQ19DT0xVTU5fV0lE VEgJMTIwCj4gPiAKPiA+IEkgdGhpbmsgd2Ugc2hvdWxkIGNvbXB1dGUgdGhpcyBkeW5hbWljYWxs eSBmcm9tIHRoZSBhY3R1YWwgZmIgd2lkdGggYW5kCj4gPiBmb250IHdpdGR0aC4KPiAKPiBUaGUg Zm9udCBpcyBwaWNrZWQgYmFzZWQgb24gd2hldGhlciBpdCBjYW4gZml0IDUwIGxpbmVzIG9mIHRl eHQuCj4gCj4gVGhlIG5leHQgcnVsZSBpcyB0byBkZWNpZGUgd2hlbiB0byBhZGQgYW5vdGhlciBj b2x1bW4uIEkgZGVjaWRlZCB0byB1c2UKPiBhIG51bWJlciB0aGF0IGdldHMgbW9zdCBsb2cgbGlu ZXMgaW4gb25lIGxpbmUgb24gdGhlIHNjcmVlbi4gSWYgbW9zdAo+IGxpbmVzIGdldCBicm9rZW4g aW50byB0d28gbGluZXMsIHRoZXJlJ3Mgbm90IG11Y2ggdXNlIGluIGFuIGV4dHJhIGNvbHVtbi4K PiAKPiBEbyB5b3UgaGF2ZSBhbm90aGVyIGlkZWEgb24gaG93IHRvIGRvIHRoaXM/Cj4gCj4gKFRo ZXJlJ3MgZXZlbiBhIDE2eDMyIGZvbnQgbm93IHRoYXQgd2Fzbid0IGF2YWlsYWJsZSB3aGVuIEkg ZGlkIHRoaXMuKQoKT2ggSSBoYWQgbm8gaWRlYSB0aGF0IHRoaXMgaXMgZm9yIG11bHRpLWNvbHVt biBvb3BzIHByaW50aW5nLiBUaGF0J3MKaW5kZWVkIG5lYXQgZm9yIDRrIHNjcmVlbnMuCj4gCj4g PiAKPiA+PiArCj4gPj4gK3N0cnVjdCBkcm1fcGFuaWNfY3R4IHsKPiA+PiArCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiOwo+ID4+ICsJdW5zaWduZWQgaW50IHdpZHRoOwo+ID4+ICsJdW5zaWdu ZWQgaW50IGhlaWdodDsKPiA+PiArCXZvaWQgKnZtYXA7Cj4gPj4gKwo+ID4+ICsJY29uc3Qgc3Ry dWN0IGZvbnRfZGVzYyAqZm9udDsKPiA+PiArCXVuc2lnbmVkIGludCBjb2xfd2lkdGg7Cj4gPj4g Kwl1bnNpZ25lZCBpbnQgYm90dG9tX3k7Cj4gPj4gKwlzaXplX3QgbWF4X2xpbmVfbGVuZ3RoOwo+ ID4+ICsKPiA+PiArCXVuc2lnbmVkIGludCB4Owo+ID4+ICsJdW5zaWduZWQgaW50IHk7Cj4gPj4g K307Cj4gPj4gKwo+ID4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZvbnRfZGVzYyAqZHJtX3Bhbmlj X2ZvbnQ4eDgsICpkcm1fcGFuaWNfZm9udDh4MTY7Cj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9pZCBk cm1fcGFuaWNfZHJhd194eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgdm9pZCAqdm1hcCwK PiA+PiArCQkJICAgICAgaW50IHgsIGludCB5LCBib29sIGZnKQo+ID4+ICt7Cj4gPj4gKwlpZiAo ZmItPmZ1bmNzLT5wYW5pY19kcmF3X3h5KQo+ID4+ICsJCWZiLT5mdW5jcy0+cGFuaWNfZHJhd194 eShmYiwgdm1hcCwgeCwgeSwgZmcpOwo+ID4+ICsJZWxzZQo+ID4+ICsJCWRybV9mcmFtZWJ1ZmZl cl9wYW5pY19kcmF3X3h5KGZiLCB2bWFwLCB4LCB5LCBmZyk7Cj4gPj4gK30KPiA+PiArCj4gPj4g K3N0YXRpYyB2b2lkIGRybV9wYW5pY19yZW5kZXJfY2hhcihzdHJ1Y3QgZHJtX3BhbmljX2N0eCAq Y3R4LAo+ID4+ICsJCQkJICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBjaGFyIGMpCj4gPj4gK3sKPiA+ PiArCXVuc2lnbmVkIGludCBoLCB3LCB4LCB5Owo+ID4+ICsJdTggZm9udGxpbmU7Cj4gPj4gKwo+ ID4+ICsJZm9yIChoID0gMDsgaCA8IGN0eC0+Zm9udC0+aGVpZ2h0OyBoKyspIHsKPiA+PiArCQlm b250bGluZSA9ICoodTggKikoY3R4LT5mb250LT5kYXRhICsgYyAqIGN0eC0+Zm9udC0+aGVpZ2h0 ICsgaCk7Cj4gPj4gKwo+ID4+ICsJCWZvciAodyA9IDA7IHcgPCBjdHgtPmZvbnQtPndpZHRoOyB3 KyspIHsKPiA+PiArCQkJeCA9IGN0eC0+eCArIChvZmZzZXQgKiBjdHgtPmZvbnQtPndpZHRoKSAr IHc7Cj4gPj4gKwkJCXkgPSBjdHgtPnkgKyBoOwo+ID4+ICsJCQlkcm1fcGFuaWNfZHJhd194eShj dHgtPmZiLCBjdHgtPnZtYXAsIHgsIHksCj4gPj4gKwkJCQkJICBmb250bGluZSAmIEJJVCg3IC0g dykpOwo+ID4+ICsJCX0KPiA+PiArCX0KPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQg ZHJtX3BhbmljX3JlbmRlcl9saW5lKHN0cnVjdCBkcm1fcGFuaWNfY3R4ICpjdHgsCj4gPj4gKwkJ CQkgIGNvbnN0IGNoYXIgKmxpbmUsIHNpemVfdCBsZW4pCj4gPj4gK3sKPiA+PiArCXVuc2lnbmVk IGludCBpOwo+ID4+ICsKPiA+PiArCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKPiA+PiArCQlk cm1fcGFuaWNfcmVuZGVyX2NoYXIoY3R4LCBpLCBsaW5lW2ldKTsKPiA+PiArCj4gPj4gKwkvKiBD bGVhciBvdXQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgKi8KPiA+PiArCWZvciAoaSA9IGxlbjsgaSA8 IGN0eC0+bWF4X2xpbmVfbGVuZ3RoOyBpKyspCj4gPj4gKwkJZHJtX3BhbmljX3JlbmRlcl9jaGFy KGN0eCwgaSwgJyAnKTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGJvb2wgZHJtX3Bhbmlj X25ld2xpbmUoc3RydWN0IGRybV9wYW5pY19jdHggKmN0eCkKPiA+PiArewo+ID4+ICsJaWYgKGN0 eC0+eCA9PSAwICYmIGN0eC0+eSA9PSAwKQo+ID4+ICsJCXJldHVybiBmYWxzZTsKPiA+PiArCWlm IChjdHgtPnkgPT0gMCkgewo+ID4+ICsJCWN0eC0+eCAtPSBjdHgtPmNvbF93aWR0aDsKPiA+PiAr CQljdHgtPnkgPSBjdHgtPmJvdHRvbV95Owo+ID4+ICsJfSBlbHNlIHsKPiA+PiArCQljdHgtPnkg LT0gY3R4LT5mb250LT5oZWlnaHQ7Cj4gPj4gKwl9Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIHRydWU7 Cj4gPj4gK30KPiA+PiArCj4gPj4gKy8qIFJlbmRlciBmcm9tIGJvdHRvbSByaWdodCBtb3N0IGNv bHVtbiAqLwo+ID4+ICtzdGF0aWMgYm9vbCBkcm1fcGFuaWNfcmVuZGVyX2xpbmVzKHN0cnVjdCBk cm1fcGFuaWNfY3R4ICpjdHgsCj4gPj4gKwkJCQkgICBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBs ZW4pCj4gPj4gK3sKPiA+PiArCXNpemVfdCBsLCBsaW5lX2xlbmd0aDsKPiA+PiArCWNvbnN0IGNo YXIgKnBvczsKPiA+PiArCWludCBpOwo+ID4+ICsKPiA+PiArCXdoaWxlIChsZW4pIHsKPiA+PiAr CQlwb3MgPSBzdHIgKyBsZW4gLSAxOwo+ID4+ICsKPiA+PiArCQlpZiAoKnBvcyA9PSAnXG4nKSB7 Cj4gPj4gKwkJCWxlbi0tOwo+ID4+ICsJCQlpZiAoIWRybV9wYW5pY19uZXdsaW5lKGN0eCkpCj4g Pj4gKwkJCQlyZXR1cm4gZmFsc2U7Cj4gPj4gKwkJCWNvbnRpbnVlOwo+ID4+ICsJCX0KPiA+PiAr Cj4gPj4gKwkJd2hpbGUgKHBvcyA+IHN0ciAmJiAqKHBvcyAtIDEpICE9ICdcbicpCj4gPj4gKwkJ CXBvcy0tOwo+ID4+ICsKPiA+PiArCQlsaW5lX2xlbmd0aCA9IGxlbiAtIChwb3MgLSBzdHIpOwo+ ID4+ICsKPiA+PiArCQlpZiAoIWxpbmVfbGVuZ3RoIHx8IGxlbiA8IGxpbmVfbGVuZ3RoKSB7Cj4g Pj4gKwkJCXByX2VycigiJXM6IEJ1ZyEgbGluZV9sZW5ndGg9JXp1IGxlbj0lenVcbiIsCj4gPj4g KwkJCSAgICAgICBfX2Z1bmNfXywgbGluZV9sZW5ndGgsIGxlbik7Cj4gPj4gKwkJCXJldHVybiBm YWxzZTsKPiA+PiArCQl9Cj4gPj4gKwo+ID4+ICsJCWxlbiAtPSBsaW5lX2xlbmd0aDsKPiA+PiAr Cj4gPj4gKwkJZm9yIChpID0gRElWX1JPVU5EX1VQKGxpbmVfbGVuZ3RoLCBjdHgtPm1heF9saW5l X2xlbmd0aCkgLSAxOyBpID49IDA7IGktLSkgewo+ID4+ICsJCQlsID0gbWluKGN0eC0+bWF4X2xp bmVfbGVuZ3RoLCBsaW5lX2xlbmd0aCAtIGkgKiBjdHgtPm1heF9saW5lX2xlbmd0aCk7Cj4gPj4g KwkJCWRybV9wYW5pY19yZW5kZXJfbGluZShjdHgsIHBvcyArIChpICogY3R4LT5tYXhfbGluZV9s ZW5ndGgpLCBsKTsKPiA+PiArCQkJaWYgKGkgJiYgIWRybV9wYW5pY19uZXdsaW5lKGN0eCkpCj4g Pj4gKwkJCQlyZXR1cm4gZmFsc2U7Cj4gPj4gKwkJfQo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCXJl dHVybiB0cnVlOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfa21z Z19yZW5kZXJfc2NyZWVuKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4+ICsJCQkJCSBzdHJ1 Y3Qga21zZ19kdW1wZXIgKmR1bXBlcikKPiA+PiArewo+ID4+ICsJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIgPSBwbGFuZS0+c3RhdGUtPmZiOwo+ID4+ICsJYm9vbCBmaXJzdF9pdGVyYXRpb24g PSB0cnVlOwo+ID4+ICsJc3RydWN0IGRybV9wYW5pY19jdHggY3R4Owo+ID4+ICsJc3RhdGljIGNo YXIgdGV4dFsxMDI0XTsKPiA+PiArCXNpemVfdCBsZW47Cj4gPj4gKwo+ID4+ICsJY3R4LnZtYXAg PSBmYi0+ZnVuY3MtPnBhbmljX3ZtYXAoZmIpOwo+ID4+ICsKPiA+PiArCS8qIFByaW50IHNvbWUg aW5mbyB3aGVuIHRlc3RpbmcgKi8KPiA+PiArCWlmIChkdW1wZXItPm1heF9yZWFzb24gPT0gS01T R19EVU1QX09PUFMpIHsKPiA+PiArCQlzdHJ1Y3QgZHJtX2Zvcm1hdF9uYW1lX2J1ZiBmb3JtYXRf bmFtZTsKPiA+PiArCj4gPj4gKwkJcHJfaW5mbygiJXM6IFtGQjolZF0gJXV4JXUgZm9ybWF0PSVz IHZtYXA9JXBcbiIsCj4gPj4gKwkJCV9fZnVuY19fLCBmYi0+YmFzZS5pZCwgZmItPndpZHRoLCBm Yi0+aGVpZ2h0LAo+ID4+ICsJCQlkcm1fZ2V0X2Zvcm1hdF9uYW1lKGZiLT5mb3JtYXQtPmZvcm1h dCwgJmZvcm1hdF9uYW1lKSwKPiA+PiArCQkJY3R4LnZtYXApOwo+ID4+ICsJfQo+ID4+ICsKPiA+ PiArCWlmICghY3R4LnZtYXApCj4gPj4gKwkJcmV0dXJuOwo+ID4gCj4gPiBGb3Igc29tZSBmcmFt ZWJ1ZmZlcnMgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIG5vdCByZXF1aXJlIHZtYXAsIGJ1dCBpbnN0 ZWFkCj4gPiBoYXZlIHNvbWUgcGFnZS1ieS1wYWdlIGtpbmQgb2YgYWNjZXNzIGhlbHBlci4gU2lu Y2UgcHJlZW1wdGl2ZWx5IHNldHRpbmcKPiA+IHVwIGEgdm1hcCBmb3IgYWxsIHRoZSBub24tY29u dGlub3VzIGJ1ZmZlcnMgaXMgYSBiaXQgbXVjaCwgYW5kIHdlIHJlYWxseQo+ID4gY2FuJ3Qgc2V0 IHVwIHRoZSB2bWFwIGluIHRoZSBwYW5pYyBoYW5kbGVyLgo+ID4gCj4gPiBNYXliZSB3ZSBzaG91 bGQgY2FsbCB0aGlzIHBhbmljX3ByZXBhcmUvcGFuaWNfZmluaXNoIGFuZAo+ID4gcy92bWFwL2Nv b2tpZS8sIHRvIG1ha2UgaXQgZW50aXJlbHkgb3BhcXVlPwo+ID4gCj4gPiBCdXQgYSBiaXQgb3Zl cmVuZ2luZWVyaW5nIHBlcmhhcHMgOi0pCj4gPiAKPiAKPiBJIGd1ZXNzIGk5MTUgd2FudHMgc29t ZXRoaW5nIGVsc2UgdGhhbiB2bWFwLCBidXQgSSBoYXZlIG5vIGlkZWEgaG93IGEKPiBwYWdlLWJ5 LXBhZ2Ugc29sdXRpb24gaXMgdG8gYmUgaW1wbGVtZW50ZWQuCgppOTE1IHNob3VsZCBiZSBtb3N0 bHkgZmluZSwgc2luY2Ugd2UgaGF2ZSBhIEdUVCBmb3IgcmVtYXBwaW5nIGFuZCBjYW4gbWFrZQpp dCBsb29rIGNvbnRpbnVvdXMuIEl0IG1pZ2h0IG5vdCBiZSBpbiB0aGUgcGFydCBvZiB0aGUgR1RU IGFjY2Vzc2libGUgYnkKdGhlIGNwdSB0aG91Z2guCgpXcnQgaW1wbGVtZW50YXRpb246IE15IGlk ZWEgd291bGQgYmUgdG8gZXh0cmFjdCB0aGUgcGl4ZWwgd3JpdGluZyBmdW5jdGlvbgphbmQgZXhw b3J0IGl0IHRvIGRyaXZlcnMuIFRoZSBkcml2ZXIgd291bGQgdGhlbiBpbXBsZW1lbnQgYQotPnBh bmljX2RyYXdfeHkgZnVuY3Rpb24gd2hpY2ggbG9va3MgdXAgdGhlIHJpZ2h0IHBhZ2UsIGNvbXB1 dGVzIGl0CmFkZHJlc3MsIGNvbXB1dGVzIHRoZSB4L3kgb2Zmc2V0IHdpdGhpbiAodGFraW5nIGlu dG8gYWNjb3VudCB0aWxpbmcgYW5kCnN0dWZmIGxpa2UgdGhhdCksIGFuZCB0aGVuIHVzZXMgdGhl IGhlbHBlciBmdW5jdGlvbiB0byBkcmF3IHRoZSByaWdodApwaXhlbCB2YWx1ZSBmb3IgdGhlIGZv cm1hdCBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4KClRoYXQncyB3aHkgSSBzdWdnZXN0ZWQgdGhhdCBk cml2ZXJzIG5lZWQgdG8gZWl0aGVyIGltcGxlbWVudAotPnBhbmljX3ByZXBhcmUgb3IgLT5wYW5p Y19kcmF3X3h5LiBTaW5jZSBmb3IgdGhpcyBhcHByb2FjaCB5b3UgbWlnaHQgbm90Cm5lZWQgYSAt PnBhbmljX3ByZXBhcmUvY2xlYW51cCBpbXBsZW1lbnRhdGlvbiwgc2luY2UgaXQncyBhbGwgZG9u ZSBpbgotPnBhbmljX2RyYXdfeHkgb24gYSBwaXhlbC1ieS1waXhlbCBiYXNpcy4KCj4gV2hlbiB3 ZSBnZXQgYm9vdHNwbGFzaCwgd2Ugd2lsbCBhdCBsZWFzdCBoYXZlIGEga2VybmVsIGFkZHJlc3Mg ZHVyaW5nCj4gdGhhdCBwaGFzZSBmb3IgYWxsIGRyaXZlcnMgc3VwcG9ydGluZyBpdC4KCkhtLCBu b3QgZm9sbG93aW5nIHdoYXQgeW91IG1lYW4gaGVyZS4gV2h5IGlzIGJvb3RzcGxhc2ggc3BlY2lh bD8KCj4gPj4gKwo+ID4+ICsJY3R4LmZiID0gZmI7Cj4gPj4gKwljdHgud2lkdGggPSBkcm1fcmVj dF93aWR0aCgmcGxhbmUtPnN0YXRlLT5zcmMpID4+IDE2Owo+ID4+ICsJY3R4LmhlaWdodCA9IGRy bV9yZWN0X2hlaWdodCgmcGxhbmUtPnN0YXRlLT5zcmMpID4+IDE2Owo+ID4+ICsKPiA+PiArCS8q Cj4gPj4gKwkgKiBUT0RPOgo+ID4+ICsJICogRmluZCB3aGljaCBwYXJ0IG9mIHRoZSBmYiB0aGF0 IGlzIHZpc2libGUuCj4gPj4gKwkgKiBXaWR0aCBhbmQgaGVpZ2h0IGFyZSB6ZXJvIG9uIHZjNAo+ ID4+ICsJICovCj4gPj4gKwlpZiAoIWN0eC53aWR0aCB8fCAhY3R4LmhlaWdodCkgewo+ID4+ICsJ CWN0eC53aWR0aCA9IGZiLT53aWR0aDsKPiA+PiArCQljdHguaGVpZ2h0ID0gZmItPmhlaWdodDsK PiA+PiArCX0KPiA+PiArCj4gPj4gKwkvKiBUcnkgdG8gZml0IDUwIGxpbmVzICovCj4gPj4gKwlp ZiAoY3R4LmhlaWdodCA8IDUwICogMTYgJiYgZHJtX3BhbmljX2ZvbnQ4eDgpCj4gPj4gKwkJY3R4 LmZvbnQgPSBkcm1fcGFuaWNfZm9udDh4ODsKPiA+PiArCWVsc2UKPiA+PiArCQljdHguZm9udCA9 IGRybV9wYW5pY19mb250OHgxNjsKPiA+PiArCj4gPj4gKwljdHguY29sX3dpZHRoID0gRFJNX1BB TklDX0NPTFVNTl9XSURUSCAqIGN0eC5mb250LT53aWR0aDsKPiA+PiArCWN0eC5ib3R0b21feSA9 ICgoY3R4LmhlaWdodCAvIGN0eC5mb250LT5oZWlnaHQpIC0gMSkgKiBjdHguZm9udC0+aGVpZ2h0 Owo+ID4+ICsKPiA+PiArCWlmIChjdHgud2lkdGggPCAyICogY3R4LmNvbF93aWR0aCkKPiA+PiAr CQljdHgubWF4X2xpbmVfbGVuZ3RoID0gY3R4LndpZHRoIC8gY3R4LmZvbnQtPndpZHRoOwo+ID4+ ICsJZWxzZQo+ID4+ICsJCWN0eC5tYXhfbGluZV9sZW5ndGggPSBEUk1fUEFOSUNfQ09MVU1OX1dJ RFRIIC0gMjsgLyogYm9yZGVyPTIgKi8KPiA+PiArCj4gPj4gKwljdHgueCA9IDA7Cj4gPj4gKwlj dHgueSA9IGN0eC5ib3R0b21feTsKPiA+PiArCWlmIChjdHgud2lkdGggPiBjdHguY29sX3dpZHRo KQo+ID4+ICsJCWN0eC54ID0gKChjdHgud2lkdGggLyBjdHguY29sX3dpZHRoKSAtIDEpICogY3R4 LmNvbF93aWR0aDsKPiA+PiArCj4gPj4gKwlwcl9kZWJ1ZygiJXM6IGZvbnQ9JXMgJXV4JXUgbWF4 X2xpbmVfbGVuZ3RoPSV6dSAoJXUsJXUpXG4iLAo+ID4+ICsJCSBfX2Z1bmNfXywgY3R4LmZvbnQt Pm5hbWUsIGN0eC53aWR0aCwgY3R4LmhlaWdodCwKPiA+PiArCQkgY3R4Lm1heF9saW5lX2xlbmd0 aCwgY3R4LngsIGN0eC55KTsKPiA+PiArCj4gPj4gKwlrbXNnX2R1bXBfcmV3aW5kKGR1bXBlcik7 Cj4gPj4gKwo+ID4+ICsJLyogVGhlIGxhdGVzdCBtZXNzYWdlcyBhcmUgZmV0Y2hlZCBmaXJzdCAq Lwo+ID4+ICsJd2hpbGUgKGttc2dfZHVtcF9nZXRfYnVmZmVyKGR1bXBlciwgZmFsc2UsIHRleHQs IHNpemVvZih0ZXh0KSwgJmxlbikpIHsKPiA+PiArCQkvKiBTdHJpcCBvZmYgdGhlIHZlcnkgbGFz dCBuZXdsaW5lIHNvIHdlIHN0YXJ0IGF0IHRoZSBib3R0b20gKi8KPiA+PiArCQlpZiAoZmlyc3Rf aXRlcmF0aW9uKSB7Cj4gPj4gKwkJCWxlbi0tOwo+ID4+ICsJCQlmaXJzdF9pdGVyYXRpb24gPSBm YWxzZTsKPiA+PiArCQl9Cj4gPj4gKwo+ID4+ICsJCWlmICghZHJtX3BhbmljX3JlbmRlcl9saW5l cygmY3R4LCB0ZXh0LCBsZW4pKQo+ID4+ICsJCQlicmVhazsKPiA+PiArCX0KPiA+PiArCj4gPj4g KwlpZiAoZmItPmZ1bmNzLT5wYW5pY192dW5tYXApCj4gPj4gKwkJZmItPmZ1bmNzLT5wYW5pY192 dW5tYXAoZmIsIHZtYXApOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9pZCBkcm1fcGFu aWNfdHJ5X2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga21zZ19kdW1wZXIgKmR1 bXBlcikKPiA+PiArewo+ID4+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gPj4gKwlz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiA+PiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+ PiArCj4gPj4gKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfQVRPTUlD KSkKPiA+PiArCQlyZXR1cm47Cj4gPj4gKwo+ID4+ICsJaWYgKGR1bXBlci0+bWF4X3JlYXNvbiA9 PSBLTVNHX0RVTVBfT09QUykKPiA+PiArCQlwcl9pbmZvKCIlczogJXMgb24gbWlub3IgJWRcbiIs IF9fZnVuY19fLCBkZXYtPmRyaXZlci0+bmFtZSwKPiA+PiArCQkJZGV2LT5wcmltYXJ5LT5pbmRl eCk7Cj4gPj4gKwo+ID4+ICsJZHJtX2Zvcl9lYWNoX2NydGMoY3J0YywgZGV2KSB7Cj4gPj4gKwkJ aWYgKCF3d19tdXRleF90cnlsb2NrKCZjcnRjLT5tdXRleC5tdXRleCkpCj4gPj4gKwkJCWNvbnRp bnVlOwo+ID4+ICsKPiA+PiArCQlpZiAoIWNydGMtPmVuYWJsZWQgfHwgIWNydGMtPnByaW1hcnkp Cj4gPj4gKwkJCWdvdG8gY3J0Y191bmxvY2s7Cj4gPj4gKwo+ID4+ICsJCWlmICghY3J0Yy0+c3Rh dGUgfHwgIWNydGMtPnN0YXRlLT5hY3RpdmUpCj4gPj4gKwkJCWdvdG8gY3J0Y191bmxvY2s7Cj4g Pj4gKwo+ID4+ICsJCXBsYW5lID0gY3J0Yy0+cHJpbWFyeTsKPiA+PiArCQlpZiAoIXd3X211dGV4 X3RyeWxvY2soJnBsYW5lLT5tdXRleC5tdXRleCkpCj4gPj4gKwkJCWdvdG8gY3J0Y191bmxvY2s7 Cj4gPj4gKwo+ID4+ICsJCS8qCj4gPj4gKwkJICogVE9ETzogU2hvdWxkIHdlIGNoZWNrIHBsYW5l X3N0YXRlLT52aXNpYmxlPwo+ID4+ICsJCSAqIEl0IGlzIG5vdCBzZXQgb24gdmM0Cj4gPiAKPiA+ IEkgdGhpbmsgd2Ugc2hvdWxkLiAKPiAKPiBJIG5lZWQgdG8gcmVjaGVjayB2YzQsIGJlY2F1c2Ug d2hlbiBJIGRpZCB0aGlzIGEgeWVhciBhZ28gLT52aXNpYmxlIHdhcwo+IG5vdCBzZXQgb24gdmM0 LgoKSSB0aGluayBpZiB5b3UgbG9vayBhdCBwbGFuZV9zdGF0ZS0+c3JjIChpLmUuIHRoZSBjbGlw cGVkIHNyYyByZWN0KSB0aGVuCmlmIHRoYXQgaXMgbm9uLXplcm8gSSB0aGluayB5b3UgY2FuIGFz c3VtZSAtPnZpc2libGUgaXMgYWxzbyBzZXQuIEJlY3Vhc2UKdGhhdCdzIGJvdGggY29tcHV0ZWQg YnkgdGhlIHNhbWUgaGVscGVycy4KCkFuZCBpZiB0aGF0J3Mgbm90IHRoZSBjYXNlLCBmYWxsIGJh Y2sgdG8gLT5zcmNfeC95L2gvdyBhbmQganVzdCBhc3N1bWUgdGhlCnBsYW5lIGlzIHZpc2libGUg KHVzdWFsbHkgdGhvc2UgYXJlIHRoZSBzaW1wbGVyIGRyaXZlcnMgYW55d2F5KS4KCj4gPiBXZSBz aG91bGQgYWxzbyBjaGVjayB3aGV0aGVyIHRoYXQgcHJpbWFyeSBpcyBjb25uZWN0ZWQKPiA+IHRv IHRoZSBjcnRjIChzb21lIGh3IHlvdSBjYW4gcmVhc3NpZ24gcGxhbmVzIGZyZWVseSBiZXR3ZWVu IGNydGMsIGFuZCB0aGUKPiA+IGNydGMtPnByaW1hcnkgcG9pbnRlciBpcyBvbmx5IHVzZWQgZm9y IGNvbXBhdCB3aXRoIGxlZ2FjeSBpb2N0bCkuCj4gCj4gTGlrZSB0aGlzPwo+IAkJLyogQ2hlY2sg dGhhdCB0aGUgcGxhbmUgaGFzIG5vdCBiZWVuIHJlYXNzaWduZWQgKi8KPiAJCWlmIChwbGFuZS0+ c3RhdGUtPmNydGMgIT0gY3J0YykKPiAJCQlnb3RvIHBsYW5lX3VubG9jazsKCll1cC4KCj4gPj4g KwkJaWYgKCFwbGFuZS0+c3RhdGUgfHwgIXBsYW5lLT5zdGF0ZS0+dmlzaWJsZSkKPiA+PiArCQkg Ki8KPiA+PiArCQlpZiAoIXBsYW5lLT5zdGF0ZSkKPiA+PiArCQkJZ290byBwbGFuZV91bmxvY2s7 Cj4gPj4gKwo+ID4+ICsJCWZiID0gcGxhbmUtPnN0YXRlLT5mYjsKPiA+PiArCQlpZiAoIWZiIHx8 ICFmYi0+ZnVuY3MtPnBhbmljX3ZtYXApCj4gPiAKPiA+IERvY3Mgc2F5cyB0aGlzIGlzIG9wdGlv bmFsLCBkb2Vzbid0IHNlZW0gdG8gYmUgYWxsIHRoYXQgb3B0aW9uYWwuIEknZAo+ID4gY2hlY2sg Zm9yIHRoaXMgb3IgYSBkcml2ZXItc3BlY2lmaWMgLT5wYW5pY19kcmF3X3h5IGluc3RlYWQuCj4g Cj4gLT5wYW5pY192bWFwIGRldGVybWluZXMgd2hldGhlciBwYW5pYyBpcyBzdXBwb3J0ZWQgb3Ig bm90LCBzbyBpbiB0aGF0Cj4gc2Vuc2UgaXQncyBvcHRpb25hbC4gLT5wYW5pY19kcmF3X3h5IGlz IG9wdGlvbmFsIHdpdGggYSBkZWZhdWx0IGZhbGxiYWNrCj4gZm9yIHRoZSBsaW5lYXIgY2FzZS4K PiAKPiA+PiArCQkJZ290byBwbGFuZV91bmxvY2s7Cj4gPj4gKwo+ID4+ICsJCS8qCj4gPj4gKwkJ ICogZmJjb24gcHV0cyBvdXQgcGFuaWMgbWVzc2FnZXMgc28gc3RheSBhd2F5IHRvIGF2b2lkIGp1 bWJsZWQKPiA+PiArCQkgKiBvdXRwdXQuIElmIHZjLT52Y19tb2RlICE9IEtEX1RFWFQgZmJjb24g d29uJ3QgcHV0IG91dAo+ID4+ICsJCSAqIG1lc3NhZ2VzIChzZWUgdnRfY29uc29sZV9wcmludCku Cj4gPj4gKwkJICovCj4gPj4gKwkJaWYgKGRldi0+ZmJfaGVscGVyICYmIGRldi0+ZmJfaGVscGVy LT5mYiA9PSBmYikKPiA+PiArCQkJZ290byBwbGFuZV91bmxvY2s7Cj4gPj4gKwo+ID4+ICsJCWRy bV9wYW5pY19rbXNnX3JlbmRlcl9zY3JlZW4ocGxhbmUsIGR1bXBlcik7Cj4gPj4gK3BsYW5lX3Vu bG9jazoKPiA+PiArCQl3d19tdXRleF91bmxvY2soJnBsYW5lLT5tdXRleC5tdXRleCk7Cj4gPj4g K2NydGNfdW5sb2NrOgo+ID4+ICsJCXd3X211dGV4X3VubG9jaygmY3J0Yy0+bXV0ZXgubXV0ZXgp Owo+ID4+ICsJfQo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IGRybV9wYW5pY19kZXZf aXRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4gPj4gK3sKPiA+PiArCXN0cnVj dCBkcm1fbWlub3IgKm1pbm9yID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPj4gKwo+ID4+ICsJ aWYgKG1pbm9yICYmIG1pbm9yLT50eXBlID09IERSTV9NSU5PUl9QUklNQVJZKQo+ID4+ICsJCWRy bV9wYW5pY190cnlfZGV2KG1pbm9yLT5kZXYsIGRhdGEpOwo+ID4+ICsKPiA+PiArCXJldHVybiAw Owo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfa21zZ19kdW1wKHN0 cnVjdCBrbXNnX2R1bXBlciAqZHVtcGVyLAo+ID4+ICsJCQkJZW51bSBrbXNnX2R1bXBfcmVhc29u IHJlYXNvbikKPiA+PiArewo+ID4+ICsJY2xhc3NfZm9yX2VhY2hfZGV2aWNlKGRybV9jbGFzcywg TlVMTCwgZHVtcGVyLCBkcm1fcGFuaWNfZGV2X2l0ZXIpOwo+ID4gCj4gPiBjbGFzc19mb3JfZWFj aF9kZXZpY2UgdXNlcyBrbGlzdCwgd2hpY2ggb25seSB1c2VzIGFuIGlycXNhdmUgc3BpbmxvY2su IEkKPiA+IHRoaW5rIHRoYXQncyBnb29kIGVub3VnaC4gQ29tbWVudCB0byB0aGF0IGVmZmVjdCB3 b3VsZCBiZSBnb29kIGUuZy4KPiA+IAo+ID4gCS8qIGJhc2VkIG9uIGtsaXN0LCB3aGljaCB1c2Vz IG9ubHkgYSBzcGluX2xvY2tfaXJxc2F2ZSwgd2hpY2ggd2UKPiA+IAkgKiBhc3N1bWUgc3RpbGwg d29ya3MgKi8KPiA+IAo+ID4gSWYgd2UgYWltIGZvciBwZXJmZWN0IHRoaXMgc2hvdWxkIGJlIGEg dHJ5bG9jayBzdGlsbCwgbWF5YmUgdXNpbmcgb3VyIG93bgo+ID4gZGV2aWNlIGxpc3QuCj4gPiAK PiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHN0cnVjdCBrbXNnX2R1bXBlciBkcm1fcGFuaWNf a21zZ19kdW1wZXIgPSB7Cj4gPj4gKwkuZHVtcCA9IGRybV9wYW5pY19rbXNnX2R1bXAsCj4gPj4g KwkubWF4X3JlYXNvbiA9IEtNU0dfRFVNUF9QQU5JQywKPiA+PiArfTsKPiA+PiArCj4gPj4gK3N0 YXRpYyBzc2l6ZV90IGRybV9wYW5pY19maWxlX3BhbmljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxl LAo+ID4+ICsJCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAo+ID4+ICsJCQkJCSAg c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCj4gPj4gK3sKPiA+PiArCXVuc2lnbmVkIGxvbmcg bG9uZyB2YWw7Cj4gPj4gKwljaGFyIGJ1ZlsyNF07Cj4gPj4gKwlzaXplX3Qgc2l6ZTsKPiA+PiAr CXNzaXplX3QgcmV0Owo+ID4+ICsKPiA+PiArCXNpemUgPSBtaW4oc2l6ZW9mKGJ1ZikgLSAxLCBj b3VudCk7Cj4gPj4gKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1Ziwgc2l6ZSkpCj4g Pj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gPj4gKwo+ID4+ICsJYnVmW3NpemVdID0gJ1wwJzsKPiA+ PiArCXJldCA9IGtzdHJ0b3VsbChidWYsIDAsICZ2YWwpOwo+ID4+ICsJaWYgKHJldCkKPiA+PiAr CQlyZXR1cm4gcmV0Owo+ID4+ICsKPiA+PiArCWRybV9wYW5pY19rbXNnX2R1bXBlci5tYXhfcmVh c29uID0gS01TR19EVU1QX09PUFM7Cj4gPj4gKwl3bWIoKTsKPiA+PiArCj4gPj4gKwkvKiBEbyBh IHJlYWwgdGVzdCB3aXRoOiBlY2hvIGMgPiAvcHJvYy9zeXNycS10cmlnZ2VyICovCj4gPj4gKwo+ ID4+ICsJaWYgKHZhbCA9PSAwKSB7Cj4gPj4gKwkJcHJfaW5mbygiVGVzdCBwYW5pYyBzY3JlZW4g dXNpbmcga21zZ19kdW1wKE9PUFMpXG4iKTsKPiA+PiArCQlrbXNnX2R1bXAoS01TR19EVU1QX09P UFMpOwo+ID4+ICsJfSBlbHNlIGlmICh2YWwgPT0gMSkgewo+ID4+ICsJCWNoYXIgKm51bGxfcG9p bnRlciA9IE5VTEw7Cj4gPj4gKwo+ID4+ICsJCXByX2luZm8oIlRlc3QgcGFuaWMgc2NyZWVuIHVz aW5nIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZVxuIik7Cj4gPj4gKwkJKm51bGxfcG9pbnRlciA9 IDE7Cj4gPj4gKwl9IGVsc2Ugewo+ID4+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4+ICsJfQo+ID4g Cj4gPiBUaGlzIGlzbid0IHF1aXRlIHdoYXQgSSBoYWQgaW4gbWluZCwgc2luY2UgaXQgc3RpbGwg a2lsbHMgdGhlIGtlcm5lbCAobGlrZQo+ID4gc3lzcnEtdHJpZ2dlcikuIAo+IAo+IElmIHZhbCA9 PSAwLCBpdCBkb2Vzbid0IGtpbGwgdGhlIGtlcm5lbCwgaXQgb25seSBkdW1wcyB0aGUga2VybmVs IGxvZy4KPiBBbmQgaXQgZG9lc24ndCB0YWludCB0aGUga2VybmVsIGVpdGhlci4KCkFoIEkgZGlk bid0IHJlYWxpemUgdGhhdC4gU291bmRzIGxpa2UgYSBnb29kIG9wdGlvbiB0byBrZWVwLgoKPiA+ IEluc3RlYWQgd2hhdCBJIGhhZCBpbiBtaW5kIGlzIHRvIHJlY3JlYXRlIHRoZSB3b3JzdAo+ID4g cG9zc2libGUgcGFuaWMgY29udGV4dCBhcyBtdWNoIGFzIGZlYXNpYmxlIChkaXNhYmxpbmcgaW50 ZXJydXB0cyBzaG91bGQgYmUKPiA+IGEgZ29vZCBzdGFydCwgbWF5YmUgd2UgY2FuIGV2ZW4gZG8g YW4gbm1pIGNhbGxiYWNrKSwgYW5kIHRoZW4gY2FsbCBvdXIKPiA+IHBhbmljIGltcGxlbWVudGF0 aW9uLiBUaGF0IHdheSB3ZSBjYW4gdGVzdCB0aGUgcGFuaWMgaGFuZGxlciBpbiBhCj4gPiBub24t ZGVzdHJ1Y3RpdmUgd2F5IChpLmUuIGFzaWRlIGZyb20gbGFzdCBkbWVzZyBsaW5lcyBwcmludGVk IHRvIHRoZQo+ID4gc2NyZWVuIG5vdGhpbmcgYmFkIGhhcHBlbnMgdG8gdGhlIGtlcm5lbDogTm8g cmVhbCBwYW5pYywgbm8gb29wcywgbm8KPiA+IHRhaW50aW5nKS4KPiAKPiBUaGUgaW50ZXJydXB0 IGNhc2UgSSBjYW4gZG8sIG5taSBJIGhhdmUgbm8gaWRlYS4KCkkganVzdCByZWFkIHRoZSBwcmlu dGsgbm1pIGNvZGUgYWdhaW4gYW5kIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBub3cgZXZlbgptb3Jl IHNwZWNpYWwgaGFuZGxpbmcgZm9yIGlzc3VlcyBoYXBwZW5pbmcgaW4gbm1pIGNvbnRleHQsIHNv IHdlIHNob3VsZApuZXZlciBzZWUgYW4gb29wcyBmcm9tIG5taSBjb250ZXh0LiBTbyBsb2NhbF9p cnFfZGlzYWJsZSgpIHdyYXBwaW5nIHNob3VsZApiZSBnb29kIGVub3VnaCBmb3IgdGVzdGluZy4K LURhbmllbAoKPiAKPiBOb3JhbGYuCj4gCj4gPiAKPiA+IEFuZCBpZ3QgdGVzdGNhc2UgY291bGQg dGhlbiBleGVyY2lzZSB0aGlzLCBhbmQgQ0kgcnVuIGl0Lgo+ID4gCj4gPj4gKwo+ID4+ICsJcmV0 dXJuIGNvdW50Owo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBkcm1fcGFuaWNfcGFuaWNfb3BzID0gewo+ID4+ICsJLndyaXRlID0gICAgICAg IGRybV9wYW5pY19maWxlX3BhbmljX3dyaXRlLAo+ID4+ICsJLm9wZW4gPSAgICAgICAgIHNpbXBs ZV9vcGVuLAo+ID4+ICsJLmxsc2VlayA9ICAgICAgIGRlZmF1bHRfbGxzZWVrLAo+ID4+ICt9Owo+ ID4+ICsKPiA+PiArc3RhdGljIHN0cnVjdCBkZW50cnkgKmRybV9wYW5pY19kX3BhbmljOwo+ID4+ ICsKPiA+PiArdm9pZCBfX2luaXQgZHJtX3BhbmljX2luaXQoc3RydWN0IGRlbnRyeSAqZGVidWdm c19yb290KQo+ID4+ICt7Cj4gPj4gKwlkcm1fcGFuaWNfZm9udDh4OCA9IGZpbmRfZm9udCgiVkdB OHg4Iik7Cj4gPj4gKwlkcm1fcGFuaWNfZm9udDh4MTYgPSBmaW5kX2ZvbnQoIlZHQTh4MTYiKTsK PiA+PiArCWlmICghZHJtX3BhbmljX2ZvbnQ4eDE2KSB7Cj4gPj4gKwkJRFJNX1dBUk4oIkNvdWxk bid0IGZpbmQgZm9udCwgcGFuaWMgc2NyZWVuIGRpc2FibGVkXG4iKTsKPiA+PiArCQlyZXR1cm47 Cj4gPj4gKwl9Cj4gPj4gKwo+ID4+ICsJZHJtX3BhbmljX2RfcGFuaWMgPSBkZWJ1Z2ZzX2NyZWF0 ZV9maWxlKCJwYW5pYy10ZXN0IiwgMDIwMCwKPiA+PiArCQkJCQkJZGVidWdmc19yb290LCBOVUxM LAo+ID4+ICsJCQkJCQkmZHJtX3BhbmljX3BhbmljX29wcyk7Cj4gPj4gKwlrbXNnX2R1bXBfcmVn aXN0ZXIoJmRybV9wYW5pY19rbXNnX2R1bXBlcik7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3ZvaWQg ZHJtX3BhbmljX2V4aXQoc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290KQo+ID4+ICt7Cj4gPj4g KwlrbXNnX2R1bXBfdW5yZWdpc3RlcigmZHJtX3BhbmljX2ttc2dfZHVtcGVyKTsKPiA+PiArCWRl YnVnZnNfcmVtb3ZlKGRybV9wYW5pY19kX3BhbmljKTsKPiA+PiArfQo+ID4+IGRpZmYgLS1naXQg YS9pbmNsdWRlL2RybS9kcm1fZnJhbWVidWZmZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mcmFtZWJ1 ZmZlci5oCj4gPj4gaW5kZXggZjBiMzRjOTc3ZWM1Li5mMzI3NDc5OGVjZmUgMTAwNjQ0Cj4gPj4g LS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmgKPiA+PiArKysgYi9pbmNsdWRlL2Ry bS9kcm1fZnJhbWVidWZmZXIuaAo+ID4+IEBAIC05NCw2ICs5NCw0NCBAQCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyX2Z1bmNzIHsKPiA+PiAgCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LCB1bnNpZ25lZCBmbGFncywKPiA+PiAgCQkgICAgIHVuc2lnbmVkIGNvbG9yLCBzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqY2xpcHMsCj4gPj4gIAkJICAgICB1bnNpZ25lZCBudW1fY2xpcHMpOwo+ID4+ ICsKPiA+PiArCS8qKgo+ID4+ICsJICogQHBhbmljX3ZtYXA6Cj4gPj4gKwkgKgo+ID4+ICsJICog T3B0aW9uYWwgY2FsbGJhY2sgZm9yIHBhbmljIGhhbmRsaW5nLgo+ID4+ICsJICoKPiA+PiArCSAq IEZvciB2bWFwcGluZyB0aGUgc2VsZWN0ZWQgZnJhbWVidWZmZXIgaW4gYSBwYW5pYyBjb250ZXh0 LiBNdXN0Cj4gPj4gKwkgKiBiZSBzdXBlciBjYXJlZnVsIGFib3V0IGxvY2tpbmcgKG9ubHkgdHJ5 bG9ja2luZyBhbGxvd2VkKS4KPiA+PiArCSAqCj4gPj4gKwkgKiBSRVRVUk5TOgo+ID4+ICsJICoK PiA+PiArCSAqIE5VTEwgaWYgaXQgZGlkbid0IHdvcmsgb3V0LCBvdGhlcndpc2UgYW4gb3BhcXVl IGNvb2tpZSB3aGljaCBpcwo+ID4+ICsJICogcGFzc2VkIHRvIEBwYW5pY19kcmF3X3h5LiBJdCBj YW4gYmUgYW55dGhpbmc6IHZtYXAgYXJlYSwgc3RydWN0dXJlCj4gPj4gKwkgKiB3aXRoIG1vcmUg ZGV0YWlscywganVzdCBhIGZldyBmbGFncywgLi4uCj4gPj4gKwkgKi8KPiA+PiArCXZvaWQgKigq cGFuaWNfdm1hcCkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOwo+ID4+ICsKPiA+PiArCS8q Kgo+ID4+ICsJICogQHBhbmljX3Z1bm1hcDoKPiA+PiArCSAqCj4gPj4gKwkgKiBPcHRpb25hbCBj YWxsYmFjayBmb3IgY2xlYW5pbmcgdXAgYWZ0ZXIgcGFuaWMgdGVzdGluZy4KPiA+PiArCSAqCj4g Pj4gKwkgKiBDcnRjIGFuZCBwbGFuZSBsb2NrcyBhcmUgcmVsZWFzZWQgYWZ0ZXIgdGhpcyBjYWxs YmFjayBoYXMgcnVuLgo+ID4+ICsJICogdm1hcCBpcyB0aGUgY29va2llIHJldHVybmVkIGJ5IEBw YW5pY192bWFwLgo+ID4+ICsJICovCj4gPj4gKwl2b2lkICgqcGFuaWNfdnVubWFwKShzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwgdm9pZCAqdm1hcCk7Cj4gPj4gKwo+ID4+ICsJLyoqCj4gPj4g KwkgKiBAcGFuaWNfZHJhd194eToKPiA+PiArCSAqCj4gPj4gKwkgKiBPcHRpb25hbCBjYWxsYmFj ayBmb3IgZHJhd2luZyBwaXhlbHMgZHVyaW5nIHBhbmljLgo+ID4+ICsJICoKPiA+PiArCSAqIEZv ciBkcmF3aW5nIHBpeGVscyBvbnRvIGEgZnJhbWVidWZmZXIgcHJlcGFyZWQgd2l0aCBAcGFuaWNf dm1hcC4KPiA+PiArCSAqIHZtYXAgaXMgdGhlIGNvb2tpZSByZXR1cm5lZCBieSBAcGFuaWNfdm1h cC4KPiA+PiArCSAqIElmIGl0J3Mgbm90IHNldCwgZHJtX2ZyYW1lYnVmZmVyX3BhbmljX2RyYXdf eHkoKSBpcyB1c2VkLgo+ID4+ICsJICovCj4gPj4gKwl2b2lkICgqcGFuaWNfZHJhd194eSkoc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHZvaWQgKnZtYXAsCj4gPj4gKwkJCSAgICAgIGludCB4 LCBpbnQgeSwgYm9vbCBmb3JlZ3JvdW5kKTsKPiA+PiAgfTsKPiA+PiAgCj4gPj4gIC8qKgo+ID4+ IEBAIC0yOTMsNCArMzMxLDcgQEAgaW50IGRybV9mcmFtZWJ1ZmZlcl9wbGFuZV93aWR0aChpbnQg d2lkdGgsCj4gPj4gIGludCBkcm1fZnJhbWVidWZmZXJfcGxhbmVfaGVpZ2h0KGludCBoZWlnaHQs Cj4gPj4gIAkJCQkgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSk7 Cj4gPj4gIAo+ID4+ICt2b2lkIGRybV9mcmFtZWJ1ZmZlcl9wYW5pY19kcmF3X3h5KHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiLCB2b2lkICp2bWFwLAo+ID4+ICsJCQkJICAgaW50IHgsIGludCB5 LCBib29sIGZvcmVncm91bmQpOwo+ID4+ICsKPiA+PiAgI2VuZGlmCj4gPj4gLS0gCj4gPj4gMi4y MC4xCj4gPj4KPiA+IAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVs IENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==