From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] tests/kms_color:Color IGT Date: Tue, 24 Nov 2015 18:08:38 +0100 Message-ID: <20151124170838.GV17050@phenom.ffwll.local> References: <1448015244-20300-1-git-send-email-dhanya.p.r@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by gabe.freedesktop.org (Postfix) with ESMTPS id 935C56E9AC for ; Tue, 24 Nov 2015 09:08:42 -0800 (PST) Received: by wmec201 with SMTP id c201so219290503wme.0 for ; Tue, 24 Nov 2015 09:08:41 -0800 (PST) Content-Disposition: inline In-Reply-To: <1448015244-20300-1-git-send-email-dhanya.p.r@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dhanya Pillai Cc: alex.crisan@intel.com, annie.j.matheson@intel.com, intel-gfx@lists.freedesktop.org, yann.argotti@intel.com, nathan.d.ciobanu@intel.com List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBOb3YgMjAsIDIwMTUgYXQgMDM6NTc6MjRQTSArMDUzMCwgRGhhbnlhIFBpbGxhaSB3 cm90ZToKPiBGcm9tOiBEaGFueWEgPGRoYW55YS5wLnJAaW50ZWwuY29tPgo+IAo+IFRoaXMgcGF0 Y2ggd2lsbCB2ZXJpZnkgY29sb3IgY29ycmVjdGlvbiBjYXBhYmlsaXR5IG9mIGEgZGlzcGxheSBk cml2ZXIuCj4gR2FtbWEvQ1NDL0RlLWdhbW1hIHZlcmlmaWNhdGlvbnMgYXJlIHN1cHBvcnRlZC4K PiAKPiBTaWduZWQtb2ZmLWJ5OiBEaGFueWEgPGRoYW55YS5wLnJAaW50ZWwuY29tPgoKRnVuZGFt ZW50YWwgcHJvYmxlbSB3aXRoIHRoaXMgdGVzdCBpcyB0aGF0IHByZXR0eSBtdWNoIGFsbCB2YWxp ZGF0aW9uCnlvdSdyZSBkb2luZyBpcyBjaGVja2luZyBodyByZWdpc3RlcnMuIFRoYXQgdGllcyB0 aGUgdGVzdCB3aXRoIHRoZQpwbGF0Zm9ybSwgbWVhbnMgd2UgbmVlZCB0byB1cGRhdGUgaXQgZXZl cnl3aGVyZSBhbmQgaXMgYWxzbyBub3QgYSByZWFsCmZ1bmN0aW9uYWwgdGVzdGNhc2UuIFBsZWFz ZSByZW1vdmUgdGhhdCBjb2RlLgoKVGhpcyByZWFsbHkgbmVlZHMgdG8gYmUgYnVpbGQgb24gdG9w IG9mIHRoZSBjcmMgaW5mcmFzdHJ1Y3R1cmUgbGlrZSBvdGhlcgprbXMgdGVzdHMuCgpJIGRpZG4n dCBsb29rIGhvdyBnb29kIHRoZSBjb3ZlcmFnZSBmb3IgYmFzaWMgaW5wdXQgdmFsaWRhdGlvbiAo bGlrZSBjb2xvcgptYXRyaXggdGhyb3VnaCBhIHRvbyBzbWFsbC9iaWcgYmxvYiBwcm9wZXJ0eSkg aXMuIEJ1dCBmcm9tIGEgcXVpY2sgbG9vawp0aGVyZSBzZWVtIHRvIGJlIGdhcHMgaW4gdGhhdCBh cmVhIHRvby4KLURhbmllbAo+IC0tLQo+ICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAgMSAr Cj4gIHRlc3RzL2ttc19jb2xvci5jICAgICAgfCAxMDcwICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAyIGZpbGVzIGNoYW5nZWQsIDEwNzEgaW5zZXJ0 aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2NvbG9yLmMKPiAKPiBkaWZm IC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMK PiBpbmRleCA4ZmIyZGU4Li45MDZjMTRmIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTY0LDYgKzY0LDcgQEAg VEVTVFNfcHJvZ3NfTSA9IFwKPiAgCWdlbV93cml0ZV9yZWFkX3Jpbmdfc3dpdGNoIFwKPiAgCWtt c19hZGRmYl9iYXNpYyBcCj4gIAlrbXNfYXRvbWljIFwKPiArCWttc19jb2xvciBcCj4gIAlrbXNf Y3Vyc29yX2NyYyBcCj4gIAlrbXNfZHJhd19jcmMgXAo+ICAJa21zX2ZiY19jcmMgXAo+IGRpZmYg LS1naXQgYS90ZXN0cy9rbXNfY29sb3IuYyBiL3Rlc3RzL2ttc19jb2xvci5jCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5jMjYxYzNmCj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL3Rlc3RzL2ttc19jb2xvci5jCj4gQEAgLTAsMCArMSwxMDcwIEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiAr ICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNv ZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRX QVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxtYXRoLmg+Cj4gKyNpbmNsdWRlICJk cm10ZXN0LmgiCj4gKyNpbmNsdWRlICJkcm0uaCIKPiArI2luY2x1ZGUgImlndF9kZWJ1Z2ZzLmgi Cj4gKyNpbmNsdWRlICJpZ3Rfa21zLmgiCj4gKyNpbmNsdWRlICJpZ3RfY29yZS5oIgo+ICsjaW5j bHVkZSAiaW50ZWxfaW8uaCIKPiArI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKPiArI2luY2x1 ZGUgImlndF9hdXguaCIKPiArI2luY2x1ZGU8dW5pc3RkLmg+Cj4gKyNpbmNsdWRlPHN0ZGxpYi5o Pgo+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ ICsKPiArCj4gK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0IENvbG9yIEZlYXR1cmVzIGF0IFBp cGUgbGV2ZWwiKTsKPiArdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4Owo+ICt0eXBlZGVmIHVpbnQx Nl90IHUxNjsKPiArdHlwZWRlZiB1aW50MzJfdCB1MzI7Cj4gKwo+ICsjZGVmaW5lIENTQ19NQVhf VkFMUyAgICA5Cj4gKwo+ICsjZGVmaW5lIEdFTjlfU1BMSVRHQU1NQV9NQVhfVkFMUyAgICAgICAg ICAgICAgICA1MTIKPiArI2RlZmluZSBHRU45XzhCSVRfR0FNTUFfTUFYX1ZBTFMgICAgICAgICAg ICAgICAgMjU2Cj4gKyNkZWZpbmUgR0VOOV8xMEJJVF9HQU1NQV9NQVhfVkFMUyAgICAgICAgICAg ICAgIDEwMjQKPiArI2RlZmluZSBHRU45XzEyQklUX0dBTU1BX01BWF9WQUxTICAgICAgICAgICAg ICAgNTEzCj4gKyNkZWZpbmUgQkRXX01BWF9HQU1NQSAgICAgICAgICAgICAgICAgICAgICAgICAo KDEgPDwgMjQpIC0gMSkKPiArCj4gKwo+ICsjZGVmaW5lIENTQ19DT0VGRl9NQVggICAweDNGRTAw MDAwMAo+ICsjZGVmaW5lIENTQ19DT0VGRl9NSU4gICAweEZGRkZGRkZDMDAwMDAwMDAKPiArCj4g KyNkZWZpbmUgVkFSX0xFTiAxMDAKPiArLypPRkZTRVRTKi8KPiArCj4gKyNkZWZpbmUgX1BJUEVf QV9DU0NfQ09FRkYgMHg0OTAxMAo+ICsjZGVmaW5lIF9QSVBFX0JfQ1NDX0NPRUZGIDB4NDkxMTAK PiArI2RlZmluZSBHQU1NQV84QklUX1BJUEVBICAweDRBMDAwCj4gKyNkZWZpbmUgR0FNTUFfOEJJ VF9QSVBFQiAgMHg0QTgwMAo+ICsjZGVmaW5lIEdBTU1BXzhCSVRfUElQRUMgIDB4NEIwMDAKPiAr Cj4gKyNkZWZpbmUgR0FNTUFfMTBCSVRfUElQRUEgIDB4NEE0MDQKPiArI2RlZmluZSBHQU1NQV8x MEJJVF9QSVBFQiAgMHg0QUMwNAo+ICsjZGVmaW5lIEdBTU1BXzEwQklUX1BJUEVDICAweDRCNDA0 Cj4gKwo+ICsjZGVmaW5lIENTQ19URVNUIDAKPiArI2RlZmluZSBHQU1NQV9URVNUIDEKPiArI2Rl ZmluZSBERUdBTU1BX1RFU1QgMgo+ICsjZGVmaW5lIEVOQUJMRSAwCj4gKyNkZWZpbmUgRElTQUJM RSAxCj4gKyNkZWZpbmUgUkVEIDAKPiArI2RlZmluZSBHUkVFTiAxCj4gKyNkZWZpbmUgQkxVRSAy Cj4gKyNkZWZpbmUgVU5JVFkgMwo+ICsjZGVmaW5lIEdBTU1BXzEgMAo+ICsjZGVmaW5lIEdBTU1B XzIgMQo+ICsjZGVmaW5lIEdBTU1BXzJfMiAyCj4gKyNkZWZpbmUgUFJJTUFSWSAwCj4gKyNkZWZp bmUgU0VDT05EQVJZIDEKPiArCj4gKyNkZWZpbmUgQ1NDX0NPRUZGX1VOSVRZIDB4MTAwMDAwMDAw Cj4gKwo+ICsjZGVmaW5lIEdFVF9CSVRfTUFTSyhuKSAoKDEgPDwgbikgLSAxKQo+ICsjZGVmaW5l IEdFVF9CSVRTKHgsIHN0YXJ0LCBuYml0cykgKCh4ID4+IHN0YXJ0KSAmIEdFVF9CSVRfTUFTSyhu Yml0cykpCj4gKyNkZWZpbmUgR0VUX0JJVFNfUk9VTkRPRkYoeCwgc3RhcnQsIG5iaXRzKSBcCj4g KwkoKEdFVF9CSVRTKHgsIHN0YXJ0LCAobmJpdHMgKyAxKSkgKyAxKSA+PiAxKQo+ICsKPiArLypT dHJ1Y3R1cmUgZGVmaW5hdGlvbiB3aWxsIGJlIHJlbW92ZWQgb25jZSBpbnRlcmdyYXRlZCBpbiBs aWJkcm0gKi8KPiArc3RydWN0IGRybV9yMzJnMzJiMzIgewo+ICsJX191MzIgcjMyOwo+ICsJX191 MzIgZzMyOwo+ICsJX191MzIgYjMyOwo+ICsJX191MzIgcmVzZXJ2ZWQ7Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgZHJtX3BhbGV0dGUgewo+ICsJc3RydWN0IGRybV9yMzJnMzJiMzIgbHV0WzBdOwo+ICt9 Owo+ICsKPiArc3RydWN0IGRybV9jdG0gewo+ICsJX19zNjQgY3RtX2NvZWZmWzldOwo+ICt9Owo+ ICsKPiArZmxvYXQgY3RtX3JlZFs5XSA9IHsxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwfTsKPiAr ZmxvYXQgY3RtX2dyZWVuWzldID0gezAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDB9Owo+ICtmbG9h dCBjdG1fYmx1ZVs5XSA9IHswLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxfTsKPiArZmxvYXQgY3Rt X3VuaXR5WzldID0gezEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDF9Owo+ICsKPiArc3RydWN0IGRh dGFfdCB7Cj4gKwlpbnQgZmJfaW5pdGlhbDsKPiArCWludCBkcm1fZmQ7Cj4gKwlpbnQgZ2VuOwo+ ICsJaW50IHcsIGg7Cj4gKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7Cj4gKwlzdHJ1Y3QgaWd0X2Zi IGZiX3ByZXA7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIGZiLCBmYjE7Cj4gK307Cj4gKwo+ICsKPiArc3Rh dGljIGludCBjcmVhdGVfYmxvYihpbnQgZmQsIHVpbnQ2NF90ICpkYXRhLCBpbnQgbGVuZ3RoKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2IgYmxvYjsKPiArCWludCByZXQgPSAt MTsKPiArCj4gKwlibG9iLmRhdGEgPSAodWludDY0X3QpZGF0YTsKPiArCWJsb2IubGVuZ3RoID0g bGVuZ3RoOwo+ICsJYmxvYi5ibG9iX2lkID0gLTE7Cj4gKwlyZXQgPSBpb2N0bChmZCwgRFJNX0lP Q1RMX01PREVfQ1JFQVRFUFJPUEJMT0IsICZibG9iKTsKPiArCWlmICghcmV0KQo+ICsJCXJldHVy biBibG9iLmJsb2JfaWQ7Cj4gKwlpZ3RfaW5mbygiQmxvYiBjcmVhdGlvbiBpb2N0bCBmYWlsZWQi KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHByZXBhcmVfY3J0Yyhz dHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPiArCQllbnVtIHBpcGUg cGlwZSwgaWd0X3BsYW5lX3QgKnBsYW5lLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCj4gKwkJZW51 bSBpZ3RfY29tbWl0X3N0eWxlIHMpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAm ZGF0YS0+ZGlzcGxheTsKPiArCj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7 Cj4gKwo+ICsKPiArCS8qIGJlZm9yZSBhbGxvY2F0aW5nLCBmcmVlIGlmIGFueSBvbGRlciBmYiAq Lwo+ICsJaWYgKGRhdGEtPmZiX2luaXRpYWwpIHsKPiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRy bV9mZCwgJmRhdGEtPmZiX3ByZXApOwo+ICsJCWRhdGEtPmZiX2luaXRpYWwgPSAwOwo+ICsJfQo+ ICsKPiArCS8qIGFsbG9jYXRlIGZiIGZvciBwbGFuZSAxICovCj4gKwlkYXRhLT5mYl9pbml0aWFs ID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsCj4gKwkJCW1vZGUtPmhkaXNwbGF5 LCBtb2RlLT52ZGlzcGxheSwKPiArCQkJRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiArCQkJTE9DQUxf STkxNV9GT1JNQVRfTU9EX1hfVElMRUQsIC8qIHRpbGVkICovCj4gKwkJCTAsIDAsIDEuMCwKPiAr CQkJJmRhdGEtPmZiX3ByZXApOwo+ICsJaWd0X2Fzc2VydChkYXRhLT5mYl9pbml0aWFsKTsKPiAr Cj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmJfcHJlcCk7Cj4gKwo+ICsJCWln dF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgcyk7Cj4gK30KPiArc3RhdGljIHZvaWQgY2xlYW51 cF9mYihzdHJ1Y3QgZGF0YV90ICpkYXRhKQo+ICt7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5 ID0gJmRhdGEtPmRpc3BsYXk7Cj4gKwo+ICsJaWYgKGRhdGEtPmZiX2luaXRpYWwpIHsKPiArCQlp Z3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiX3ByZXApOwo+ICsJCWRhdGEtPmZi X2luaXRpYWwgPSAwOwo+ICsJfQo+ICsJaWYgKGRhdGEtPmZiLmZiX2lkKQo+ICsJCWlndF9yZW1v dmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmIpOwo+ICsKPiArfQo+ICtzdGF0aWMgdm9pZCBj bGVhbnVwX2NydGMoc3RydWN0IGRhdGFfdCAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsCj4g KwkJaWd0X3BsYW5lX3QgKnBsYW5lKQo+ICt7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0g JmRhdGEtPmRpc3BsYXk7Cj4gKwo+ICsJaWYgKCFwbGFuZS0+aXNfcHJpbWFyeSkgewo+ICsJCWln dF9wbGFuZV90ICpwcmltYXJ5Owo+ICsKPiArCQlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxh bmUob3V0cHV0LCBJR1RfUExBTkVfUFJJTUFSWSk7Cj4gKwkJaWd0X3BsYW5lX3NldF9mYihwcmlt YXJ5LCBOVUxMKTsKPiArCX0KPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsK PiArCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX0FOWSk7Cj4gKwlpZ3RfZGlzcGxh eV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9VTklWRVJTQUwpOwo+ICsKPiArfQo+ICsKPiArCj4g Kwo+ICtzdGF0aWMgaW50IGdldF9jb2xvcl9wcm9wZXJ0eShpbnQgZHJtX2ZkLCBpbnQgaWQsIGlu dCBvYmplY3QsCj4gKwkJY2hhciAqcHJvcF9uYW1lLCBpbnQgYmxvYl9pZCkKPiArewo+ICsJaW50 IGkgPSAwLCByZXQgPSAwOwo+ICsJdWludDY0X3QgdmFsdWUgPSAwOwo+ICsJc3RydWN0IGRybV9w YWxldHRlICpnYW1tYV9kYXRhID0gTlVMTDsKPiArCWRybU1vZGVPYmplY3RQcm9wZXJ0aWVzUHRy IHByb3BzID0gTlVMTDsKPiArCj4gKwlpZiAoaWQgPCAwIHx8ICgob2JqZWN0ICE9IERSTV9NT0RF X09CSkVDVF9DUlRDKSAmJgo+ICsJCQkJKG9iamVjdCAhPSBEUk1fTU9ERV9PQkpFQ1RfUExBTkUp KSkgewo+ICsJCWlndF93YXJuKCJJbnZhbGlkIGlucHV0IHRvIGdldCBjb2xvciBwcm9wZXJ0eSAl ZCIsIGlkKTsKPiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwl2YWx1ZSA9IGJsb2JfaWQ7Cj4gKwo+ ICsJcHJvcHMgPSBkcm1Nb2RlT2JqZWN0R2V0UHJvcGVydGllcyhkcm1fZmQsIGlkLCBvYmplY3Qp Owo+ICsJaWYgKCFwcm9wcykgewo+ICsJCWlndF93YXJuKCJcbk5vIHByb3BlcnR5IGZvciBvYmpl Y3QgaWQ9JWRcbiIsIGlkKTsKPiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwlmb3IgKGkgPSAwOyBp IDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKPiArCQlkcm1Nb2RlUHJvcGVydHlQdHIgcHJv cCA9IGRybU1vZGVHZXRQcm9wZXJ0eShkcm1fZmQsCj4gKwkJCQlwcm9wcy0+cHJvcHNbaV0pOwo+ ICsJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgcHJvcF9uYW1lKSA9PSAwKSB7Cj4gKwkJCWJsb2Jf aWQgPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQlkcm1N b2RlRnJlZVByb3BlcnR5KHByb3ApOwo+ICsJfQo+ICsKPiArCXJldCA9IGJsb2JfaWQ7Cj4gKwlk cm1Nb2RlRnJlZU9iamVjdFByb3BlcnRpZXMocHJvcHMpOwo+ICsJaWYgKGkgPT0gcHJvcHMtPmNv dW50X3Byb3BzKSB7Cj4gKwkJaWd0X3dhcm4oIiVzIE5vIHN1Y2ggcHJvcGVydHlcbiIsIHByb3Bf bmFtZSk7Cj4gKwkJcmV0dXJuIC0xOwo+ICsJfQo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr Cj4gK3N0YXRpYyBpbnQgc2V0X2NvbG9yX3Byb3BlcnR5KGludCBkcm1fZmQsIGludCBpZCwgaW50 IG9iamVjdCwgY2hhciAqcHJvcF9uYW1lLAo+ICsJCWludCBibG9iX2lkKQo+ICt7Cj4gKwlpbnQg aSA9IDAsIHJlczsKPiArCj4gKwlkcm1Nb2RlT2JqZWN0UHJvcGVydGllc1B0ciBwcm9wcyA9IE5V TEw7Cj4gKwo+ICsJaWYgKGlkIDwgMCB8fCAoKG9iamVjdCAhPSBEUk1fTU9ERV9PQkpFQ1RfQ1JU QykgJiYKPiArCQkJCShvYmplY3QgIT0gRFJNX01PREVfT0JKRUNUX1BMQU5FKSkpIHsKPiArCQlp Z3Rfd2FybigiSW52YWxpZCBpbnB1dCB0byBzZXQgY29sb3IgcHJvcGVydHkgJWQiLCBpZCk7Cj4g KwkJcmV0dXJuIC0xOwo+ICsJfQo+ICsKPiArCXByb3BzID0gZHJtTW9kZU9iamVjdEdldFByb3Bl cnRpZXMoZHJtX2ZkLCBpZCwgb2JqZWN0KTsKPiArCWlmICghcHJvcHMpIHsKPiArCQlpZ3Rfd2Fy bigiXG5ObyBwcm9wZXJ0eSBmb3Igb2JqZWN0IGlkPSVkXG4iLCBpZCk7Cj4gKwkJcmV0dXJuIC0x Owo+ICsJfQo+ICsJZm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Cj4g KwkJZHJtTW9kZVByb3BlcnR5UHRyIHByb3AgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZHJtX2ZkLAo+ ICsJCQkJcHJvcHMtPnByb3BzW2ldKTsKPiArCQlpZiAoc3RyY21wKHByb3AtPm5hbWUsIHByb3Bf bmFtZSkgPT0gMCkgewo+ICsJCQlyZXMgPSBkcm1Nb2RlT2JqZWN0U2V0UHJvcGVydHkoZHJtX2Zk LCBpZCwgb2JqZWN0LAo+ICsJCQkJCSh1aW50MzJfdClwcm9wLT5wcm9wX2lkLCBibG9iX2lkKTsK PiArCj4gKwkJCWlmIChyZXMpIHsKPiArCQkJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4g KwkJCQlkcm1Nb2RlRnJlZU9iamVjdFByb3BlcnRpZXMocHJvcHMpOwo+ICsJCQl9IGVsc2Ugewo+ ICsJCQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4g KwkJfQo+ICsKPiArCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOwo+ICsJfQo+ICsJZHJtTW9k ZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKPiArCWlmIChpID09IHByb3BzLT5jb3VudF9w cm9wcykgewo+ICsJCWlndF93YXJuKCIlcyBObyBzdWNoIHByb3BlcnR5XG4iLCBwcm9wX25hbWUp Owo+ICsJCXJldHVybiAtMTsKPiArCX0KPiArCXJldHVybiAwOwo+ICt9Cj4gK3N0YXRpYyBpbnQ2 NF90ICBjb252ZXJ0RmxvYXRUb0JpbmFyeShkb3VibGUgaW5wdXQpCj4gK3sKPiArCj4gKwlpbnQg aW50ZWdlcl9wYXJ0LCBjb3VudCA9IDA7Cj4gKwl1aW50MzJfdCB0ZW1wX2lwLCBmcmFjX3ZhbCA9 IDB4MDAwMDAwMDA7Cj4gKwl1aW50NjRfdCBpbnRlZ2VyX3ZhbCA9IDB4MDAwMDAwMDA7Cj4gKwlp bnQ2NF90ICB2YWx1ZSA9IDB4MDAwMDAwMDAwMDAwMDAwMDsKPiArCWZsb2F0IGZyYWN0aW9uYWxf cGFydCwgaXA7Cj4gKwlpbnRlZ2VyX3BhcnQgPSAoaW50KWlucHV0Owo+ICsJZnJhY3Rpb25hbF9w YXJ0ID0gaW5wdXQgLSBpbnRlZ2VyX3BhcnQ7Cj4gKwl3aGlsZSAoZnJhY3Rpb25hbF9wYXJ0ICE9 IDAuMDAwMDAwKSB7Cj4gKwkJaXAgPSBmcmFjdGlvbmFsX3BhcnQgKiAxNjsKPiArCQl0ZW1wX2lw ID0gKGludCkoZnJhY3Rpb25hbF9wYXJ0ICogMTYpOwo+ICsJCWZyYWNfdmFsID0gZnJhY192YWwg fCAodGVtcF9pcCA8PCAoMjggLSBjb3VudCAqIDQpKTsKPiArCQljb3VudCsrOwo+ICsJCWZyYWN0 aW9uYWxfcGFydCA9IGlwIC0gdGVtcF9pcDsKPiArCX0KPiArCWludGVnZXJfdmFsID0gaW50ZWdl cl9wYXJ0Owo+ICsJdmFsdWUgPSB2YWx1ZSB8IChpbnRlZ2VyX3ZhbCA8PCAzMik7Cj4gKwl2YWx1 ZSA9IHZhbHVlIHwgZnJhY192YWw7Cj4gKwlyZXR1cm4gdmFsdWU7Cj4gKwo+ICsKPiArfQo+ICtz dGF0aWMgdm9pZCB3cml0ZV9nYW1tYV9sdXQoaW50IGJyaWdodG5lc3MsIGludCBjb250cmFzdCwg aW50IGdhbW1hLCB1aW50MzJfdCBudW1fc2FtcGxlcywKPiArCQlzdHJ1Y3QgZHJtX3IzMmczMmIz MiAqZ2FtbWFfcHRyKQo+ICt7Cj4gKwl1bnNpZ25lZCBzaG9ydCBSZWQsIEdyZWVuLCBCbHVlOwo+ ICsJdWludDMyX3QgcjMyLCBiMzIsIGczMjsKPiArCXVpbnQ2NF90IGksIGluZGV4LCB2YWw7Cj4g Kwl1aW50MzJfdCBkYXRhW251bV9zYW1wbGVzXTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVt X3NhbXBsZXM7IGkrKykgewo+ICsJCWRhdGFbaV0gPSAoYnJpZ2h0bmVzcyArICBjb250cmFzdCAq IHBvdygoZG91YmxlKWksIChkb3VibGUpZ2FtbWEpKSAqIG51bV9zYW1wbGVzOwo+ICsJCUJsdWUg PSBkYXRhW2ldOwo+ICsJCUdyZWVuID0gZGF0YVtpXSA+PiA4Owo+ICsJCVJlZCA9IGRhdGFbaV0g Pj4gMTY7Cj4gKwkJcjMyID0gUmVkICA8PCAxNjsKPiArCQliMzIgPSBCbHVlIDsKPiArCQlnMzIg PSBHcmVlbiA8PCA4Owo+ICsJCWdhbW1hX3B0cltpXS5yMzIgPSByMzI7Cj4gKwkJZ2FtbWFfcHRy W2ldLmczMiA9IGczMjsKPiArCQlnYW1tYV9wdHJbaV0uYjMyID0gYjMyOwo+ICsJCXZhbCA9IDA7 Cj4gKwkJdmFsID0gcjMyOwo+ICsJCXZhbCA8PD0gODsKPiArCQl2YWwgPSB2YWwgfCBnMzI7Cj4g KwkJdmFsIDw8PSA4Owo+ICsJCXZhbCA9IHZhbCB8IGIzMjsKPiArCX0KPiArfQo+ICtzdGF0aWMg dWludDY0X3QgZ2V0X2Jsb2IoaW50IGZkLCBpbnQgYmxvYl9pZCwgaW50IGxlbmd0aCkKPiArewo+ ICsJc3RydWN0IGRybV9tb2RlX2dldF9ibG9iIGJsb2I7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCWlu dCBjb3VudCA9IDA7Cj4gKwo+ICsJYmxvYi5ibG9iX2lkID0gYmxvYl9pZDsKPiArCWJsb2IubGVu Z3RoID0gbGVuZ3RoOwo+ICsJYmxvYi5kYXRhID0gKHVpbnQ2NF90KSBtYWxsb2MoYmxvYi5sZW5n dGgpOwo+ICsJcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9NT0RFX0dFVFBST1BCTE9CLCAmYmxv Yik7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlpZ3RfaW5mbygiR0VUIEJMT0IgRmFpbGVkXG4iKTsK PiArCj4gKwlyZXR1cm4gYmxvYi5kYXRhOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDMyX3QgY3Nj X2NvZWZmKGludDY0X3QgY29lZmYpCj4gK3sKPiArCXVpbnQzMl90IHJlZ192YWwsIGxzX2JpdF9w b3MsIGV4cG9uZW50X2JpdHMsIHNpZ25fYml0ID0gMDsKPiArCWludDMyX3QgbWFudGlzc2E7Cj4g Kwl1aW50NjRfdCBhYnNfY29lZmY7Cj4gKwo+ICsJYWJzX2NvZWZmID0gY29lZmY7Cj4gKwlpZiAo YWJzX2NvZWZmIDwgKENTQ19DT0VGRl9VTklUWSA+PiAzKSkgewo+ICsJCWV4cG9uZW50X2JpdHMg PSAzOwo+ICsJCWxzX2JpdF9wb3MgPSAxOTsKPiArCX0gZWxzZSBpZiAoYWJzX2NvZWZmID49IChD U0NfQ09FRkZfVU5JVFkgPj4gMykgJiYKPiArCQkJYWJzX2NvZWZmIDwgKENTQ19DT0VGRl9VTklU WSA+PiAyKSkgewo+ICsJCWV4cG9uZW50X2JpdHMgPSAyOwo+ICsJCWxzX2JpdF9wb3MgPSAyMDsK PiArCX0gZWxzZSBpZiAoYWJzX2NvZWZmID49IChDU0NfQ09FRkZfVU5JVFkgPj4gMikKPiArCQkJ JiYgYWJzX2NvZWZmIDwgKENTQ19DT0VGRl9VTklUWSA+PiAxKSkgewo+ICsJCWV4cG9uZW50X2Jp dHMgPSAxOwo+ICsJCWxzX2JpdF9wb3MgPSAyMTsKPiArCX0gZWxzZSBpZiAoYWJzX2NvZWZmID49 IChDU0NfQ09FRkZfVU5JVFkgPj4gMSkKPiArCQkJJiYgYWJzX2NvZWZmIDwgQ1NDX0NPRUZGX1VO SVRZKSB7Cj4gKwkJZXhwb25lbnRfYml0cyA9IDA7Cj4gKwkJbHNfYml0X3BvcyA9IDIyOwo+ICsJ fSBlbHNlIGlmIChhYnNfY29lZmYgPj0gQ1NDX0NPRUZGX1VOSVRZICYmCj4gKwkJCWFic19jb2Vm ZiA8IChDU0NfQ09FRkZfVU5JVFkgPDwgMSkpIHsKPiArCQlleHBvbmVudF9iaXRzID0gNzsKPiAr CQlsc19iaXRfcG9zID0gMjM7Cj4gKwl9IGVsc2Ugewo+ICsJCWV4cG9uZW50X2JpdHMgPSA2Owo+ ICsJCWxzX2JpdF9wb3MgPSAyNDsKPiArCX0KPiArCW1hbnRpc3NhID0gR0VUX0JJVFNfUk9VTkRP RkYoYWJzX2NvZWZmLCBsc19iaXRfcG9zLCBDU0NfTUFYX1ZBTFMpOwo+ICsJaWYgKGNvZWZmIDwg MCkKPiArCQlzaWduX2JpdCA9IDE7Cj4gKwo+ICsJcmVnX3ZhbCA9IDA7Cj4gKwlyZWdfdmFsIHw9 IChleHBvbmVudF9iaXRzIDw8IDEyKTsKPiArCXJlZ192YWwgfD0gbWFudGlzc2EgPDwgMzsKPiAr CXJlZ192YWwgfD0gc2lnbl9iaXQgPDwgMTU7Cj4gKwlyZXR1cm4gcmVnX3ZhbDsKPiArfQo+ICsK PiArc3RhdGljIGJvb2wgdmFsaWRhdGVfY3RtX3JlZ2lzdGVycyhpbnQgZGlzcGxheSwgaW50NjRf dCB2YWx1ZVtDU0NfTUFYX1ZBTFNdKQo+ICt7Cj4gKwl1aW50MzJfdCB0ZW1wX3JlZ192YWwgPSAw LCBSVmFsdWUgPSAwLCBPRkZTRVQ7Cj4gKwl1aW50MzJfdCB0bXBfdmFsLCB0bXAyX3ZhbDsKPiAr CWJvb2wgcmVzdWx0ID0gZmFsc2U7Cj4gKwl1aW50MzJfdCBSWV9WYWwgPSAwLCBHWV9WYWwgPSAw LCBCWV9WYWwgPSAwOwo+ICsJdWludDMyX3QgUlVfVmFsID0gMCwgR1VfVmFsID0gMCwgQlVfVmFs ID0gMDsKPiArCXVpbnQzMl90IFJWX1ZhbCA9IDAsIEdWX1ZhbCA9IDAsIEJWX1ZhbCA9IDA7Cj4g KwljaGFyIHJlZ2lzdGVyX3RvX3ZhbGlkYXRlW1ZBUl9MRU5dOwo+ICsJaW50ZWxfcmVnaXN0ZXJf YWNjZXNzX2luaXQoaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgMCk7Cj4gKwo+ICsJaWYgKGRpc3Bs YXkgPT0gUFJJTUFSWSkKPiArCQlPRkZTRVQgPSBfUElQRV9BX0NTQ19DT0VGRjsKPiArCWVsc2UK PiArCQlPRkZTRVQgPSBfUElQRV9CX0NTQ19DT0VGRjsKPiArCj4gKwl0ZW1wX3JlZ192YWwgPSBJ TlJFRyhPRkZTRVQpOwo+ICsJR1lfVmFsID0gdGVtcF9yZWdfdmFsICYgMHhGRkZGOwo+ICsJdG1w X3ZhbCA9IGNzY19jb2VmZih2YWx1ZVsxXSk7Cj4gKwlpZiAoR1lfVmFsICE9IHRtcF92YWwpIHsK PiArCQlpZ3Rfd2FybigicmVhZGluZyByZWdpc3RlciBpcyBmYWlsZWQgLSBSZWc6JXggVmFsOiV4 IEV4cGVjdGVkOiV4XG4iLCBHWV9WYWwsIHRtcF92YWwsIHZhbHVlWzFdKTsKPiArCQlyZXR1cm4g cmVzdWx0Owo+ICsJfQo+ICsJUllfVmFsID0gKHRlbXBfcmVnX3ZhbCA+PiAxNikgJiAweEZGRkY7 Cj4gKwl0bXBfdmFsID0gY3NjX2NvZWZmKHZhbHVlWzBdKTsKPiArCWlmIChSWV9WYWwgIT0gdG1w X3ZhbCkgewo+ICsJCWlndF93YXJuKCJyZWFkaW5nIHJlZ2lzdGVyIGlzIGZhaWxlZCAtIFJlZzol eCBWYWw6JXggRXhwZWN0ZWQ6JXhcbiIsIHRlbXBfcmVnX3ZhbCwgdG1wX3ZhbCwgdmFsdWVbMF0p Owo+ICsJCXJldHVybiByZXN1bHQ7Cj4gKwl9Cj4gKwlPRkZTRVQgKz0gNDsKPiArCXRlbXBfcmVn X3ZhbCA9IElOUkVHKE9GRlNFVCk7Cj4gKwlCWV9WYWwgPSAodGVtcF9yZWdfdmFsID4+IDE2KSAm IDB4RkZGRjsKPiArCXRtcF92YWwgPSBjc2NfY29lZmYodmFsdWVbMl0pOwo+ICsJaWYgKEJZX1Zh bCAhPSB0bXBfdmFsKSB7Cj4gKwkJaWd0X3dhcm4oInJlYWRpbmcgcmVnaXN0ZXIgaXMgZmFpbGVk IC0gUmVnOiV4IFZhbDoleCBFeHBlY3RlZDoleFxuIiwgdGVtcF9yZWdfdmFsLCB0bXBfdmFsLCB2 YWx1ZVsyXSk7Cj4gKwkJcmV0dXJuIHJlc3VsdDsKPiArCX0KPiArCU9GRlNFVCArPSA0Owo+ICsJ dGVtcF9yZWdfdmFsID0gSU5SRUcoT0ZGU0VUKTsKPiArCVJVX1ZhbCA9ICh0ZW1wX3JlZ192YWwg ID4+IDE2KSAmIDB4RkZGRjsKPiArCXRtcF92YWwgPSBjc2NfY29lZmYodmFsdWVbM10pOwo+ICsJ aWYgKFJVX1ZhbCAhPSB0bXBfdmFsKSB7Cj4gKwkJaWd0X3dhcm4oInJlYWRpbmcgcmVnaXN0ZXIg aXMgZmFpbGVkIC0gUmVnOiV4IFZhbDoleCBFeHBlY3RlZDoleFxuIiwgdGVtcF9yZWdfdmFsLCB0 bXBfdmFsLCB2YWx1ZVszXSk7Cj4gKwkJcmV0dXJuIHJlc3VsdDsKPiArCX0KPiArCUdVX1ZhbCA9 IHRlbXBfcmVnX3ZhbCAmIDB4RkZGRjsKPiArCXRtcF92YWwgPSBjc2NfY29lZmYodmFsdWVbNF0p Owo+ICsJaWYgKEdVX1ZhbCAhPSB0bXBfdmFsKSB7Cj4gKwkJaWd0X3dhcm4oInJlYWRpbmcgcmVn aXN0ZXIgaXMgZmFpbGVkIC0gUmVnOiV4IFZhbDoleCBFeHBlY3RlZDoleFxuIiwgdGVtcF9yZWdf dmFsLCB0bXBfdmFsLCB2YWx1ZVs0XSk7Cj4gKwkJcmV0dXJuIHJlc3VsdDsKPiArCX0KPiArCU9G RlNFVCArPSA0Owo+ICsJdGVtcF9yZWdfdmFsID0gSU5SRUcoT0ZGU0VUKTsKPiArCUJVX1ZhbCA9 ICh0ZW1wX3JlZ192YWwgPj4gMTYpICYgMHhGRkZGOwo+ICsJdG1wX3ZhbCA9IGNzY19jb2VmZih2 YWx1ZVs1XSk7Cj4gKwlpZiAoQlVfVmFsICE9IHRtcF92YWwpIHsKPiArCQlpZ3Rfd2FybigicmVh ZGluZyByZWdpc3RlciBpcyBmYWlsZWQgLSBSZWc6JXggVmFsOiV4IEV4cGVjdGVkOiV4XG4iLCB0 ZW1wX3JlZ192YWwsIHRtcF92YWwsIHZhbHVlWzVdKTsKPiArCQlyZXR1cm4gcmVzdWx0Owo+ICsJ fQo+ICsJT0ZGU0VUICs9IDQ7Cj4gKwl0ZW1wX3JlZ192YWwgPSBJTlJFRyhPRkZTRVQpOwo+ICsJ UlZfVmFsID0gKHRlbXBfcmVnX3ZhbCA+PiAxNikgJiAweEZGRkY7Cj4gKwl0bXBfdmFsID0gY3Nj X2NvZWZmKHZhbHVlWzZdKTsKPiArCWlmIChSVl9WYWwgIT0gdG1wX3ZhbCkgewo+ICsJCWlndF93 YXJuKCJyZWFkaW5nIHJlZ2lzdGVyIGlzIGZhaWxlZCAtIFJlZzoleCBWYWw6JXggRXhwZWN0ZWQ6 JXhcbiIsIHRlbXBfcmVnX3ZhbCwgdG1wX3ZhbCwgdmFsdWVbNl0pOwo+ICsJCXJldHVybiByZXN1 bHQ7Cj4gKwl9Cj4gKwlHVl9WYWwgPSB0ZW1wX3JlZ192YWwgICYgMHhGRkZGOwo+ICsJdG1wX3Zh bCA9IGNzY19jb2VmZih2YWx1ZVs3XSk7Cj4gKwlpZiAoR1ZfVmFsICE9IHRtcF92YWwpIHsKPiAr CQlpZ3Rfd2FybigicmVhZGluZyByZWdpc3RlciBpcyBmYWlsZWQgLSBSZWc6JXggVmFsOiV4IEV4 cGVjdGVkOiV4XG4iLCB0ZW1wX3JlZ192YWwsIHRtcF92YWwsIHZhbHVlWzddKTsKPiArCQlyZXR1 cm4gcmVzdWx0Owo+ICsJfQo+ICsJT0ZGU0VUICs9IDQ7Cj4gKwl0ZW1wX3JlZ192YWwgPSBJTlJF RyhPRkZTRVQpOwo+ICsJQlZfVmFsID0gKHRlbXBfcmVnX3ZhbCA+PiAxNikgJiAweEZGRkY7Cj4g Kwl0bXBfdmFsID0gY3NjX2NvZWZmKHZhbHVlWzhdKTsKPiArCWlmIChCVl9WYWwgIT0gdG1wX3Zh bCkgewo+ICsJCWlndF93YXJuKCJyZWFkaW5nIHJlZ2lzdGVyIGlzIGZhaWxlZCAtIFJlZzoleCBW YWw6JXggRXhwZWN0ZWQ6JXhcbiIsIHRlbXBfcmVnX3ZhbCwgdG1wX3ZhbCwgdmFsdWVbOF0pOwo+ ICsJCXJldHVybiByZXN1bHQ7Cj4gKwl9Cj4gKwo+ICsJaWd0X2luZm8oIkNUTSBSZWdpc3RlciB0 ZXN0IGZvciBDb2VmZmljaWVudCBpcyBQQVNTIFxuIik7Cj4gKwlpbnRlbF9yZWdpc3Rlcl9hY2Nl c3NfZmluaSgpOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gK3N0YXRpYyB2b2lkIGVuYWJs ZV9wbGFuZShzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rf b3V0cHV0X3QgKm91dHB1dCwgaW50IHBpcGUxKQo+ICt7Cj4gKwllbnVtIGlndF9jb21taXRfc3R5 bGUgY29tbWl0Owo+ICsJaW50IHJlcywgaTsKPiArCWludCBmYl9pZCwgZmJfaWQxOwo+ICsJaW50 IHdpZHRoLCBoZWlnaHQ7Cj4gKwl1aW50MzJfdCBwaXhlbGZvcm1hdCA9IERSTV9GT1JNQVRfWFJH Qjg4ODg7Cj4gKwljb21taXQgPSBDT01NSVRfVU5JVkVSU0FMOwo+ICsJZW51bSBwaXBlIHBpcGU7 Cj4gKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KGRpc3BsYXksIG91dHB1dCkgewo+ICsJCWRy bU1vZGVNb2RlSW5mbyAqbW9kZTsKPiArCQlwaXBlID0gb3V0cHV0LT5jb25maWcucGlwZTsKPiAr Cj4gKwkJaWYgKHBpcGUgIT0gcGlwZTEpCj4gKwkJCWJyZWFrOwo+ICsJCWlndF9wbGFuZV90ICpw bGFuZTsKPiArCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7Cj4gKwkJbW9kZSA9 IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiArCQkvKkRyYXcgdGhlIGluaXRpYWwgcHJp bWFyeSBwbGFuZSovCj4gKwkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIElH VF9QTEFORV9QUklNQVJZKTsKPiArCj4gKwkJcHJlcGFyZV9jcnRjKGRhdGEsIG91dHB1dCwgcGlw ZSwgcGxhbmUsIG1vZGUsIGNvbW1pdCk7Cj4gKwkJLypSYW5kb20gU2l6ZSAgQnVmZmVyIENyZWF0 aW9uICovCj4gKwkJd2lkdGggPSA2MDA7Cj4gKwkJaGVpZ2h0ID0gNjAwOwo+ICsKPiArCQlwbGFu ZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FXzIpOwo+ICsJCWZiX2lk ID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsCj4gKwkJCQl3aWR0aCwgaGVpZ2h0 LAo+ICsJCQkJcGl4ZWxmb3JtYXQsCj4gKwkJCQlMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAo+ ICsJCQkJMC4wLAo+ICsJCQkJMS4wLAo+ICsJCQkJMC4wLAo+ICsJCQkJJmRhdGEtPmZiKTsKPiAr CQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCAxMDAsIDEwMCk7Cj4gKwo+ICsJCWlndF9w bGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYik7Cj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0Mihk aXNwbGF5LCBjb21taXQpOwo+ICsJfQo+ICsKPiArfQo+ICtzdGF0aWMgdm9pZCB0ZXN0X3BpcGVf Y3NjKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGlndF9vdXRw dXRfdCAqb3V0cHV0LAo+ICsJCWlndF9wbGFuZV90ICpwbGFuZSwgaW50IGVuYWJsZSwgaW50IHZh bHVlLCBpbnQgcGlwZTEpCj4gK3sKPiArCXN0cnVjdCBkcm1fY3RtICpjdG1fZGF0YSA9IE5VTEw7 Cj4gKwlib29sIHJldCA9IGZhbHNlOwo+ICsJY3RtX2RhdGEgPSAoc3RydWN0IGRybV9jdG0gKikK PiArCQltYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fY3RtKSk7Cj4gKwllbnVtIGlndF9jb21taXRf c3R5bGUgY29tbWl0Owo+ICsJaW50IHJlcywgaTsKPiArCWludCBmYl9pZCwgZmJfaWQxOwo+ICsJ aW50IHdpZHRoLCBoZWlnaHQ7Cj4gKwl1aW50MzJfdCBwaXhlbGZvcm1hdCA9IERSTV9GT1JNQVRf WFJHQjg4ODg7Cj4gKwljb21taXQgPSBDT01NSVRfVU5JVkVSU0FMOwo+ICsJZmxvYXQgKmN0bTsK PiArCWVudW0gcGlwZSBwaXBlOwo+ICsJaWYgKCFlbmFibGUpCj4gKwkJY3RtID0gY3RtX3VuaXR5 Owo+ICsJZWxzZSB7Cj4gKwkJaWYgKHZhbHVlID09IFJFRCkgewo+ICsJCQljdG0gPSBjdG1fcmVk Owo+ICsJCX0gZWxzZSBpZiAodmFsdWUgPT0gR1JFRU4pIHsKPiArCQkJY3RtID0gY3RtX2dyZWVu Owo+ICsJCX0gZWxzZSBpZiAodmFsdWUgPT0gQkxVRSkgewo+ICsJCQljdG0gPSBjdG1fYmx1ZTsK PiArCQl9IGVsc2V7Cj4gKwkJCWN0bSA9IGN0bV91bml0eTsKPiArCQl9IH0KPiArCWZvciAoaSA9 IDA7IGkgPCBDU0NfTUFYX1ZBTFM7IGkrKykgewo+ICsJCWN0bV9kYXRhLT5jdG1fY29lZmZbaV0g PSBjb252ZXJ0RmxvYXRUb0JpbmFyeSgqKGN0bSArIGkpKTsKPiArCX0KPiArCj4gKwlpbnQgYmxv Yl9pZCA9IGNyZWF0ZV9ibG9iKGRpc3BsYXktPmRybV9mZCwKPiArCQkJKGludCAqKShjdG1fZGF0 YSksIHNpemVvZihzdHJ1Y3QgZHJtX2N0bSkpOwo+ICsJaWYgKGJsb2JfaWQgPCAwKSB7Cj4gKwkJ aWd0X3dhcm4oIkNUTTpCTE9CIElPQ1RMIEZhaWxcbiIpOwo+ICsJfQo+ICsJaWd0X2Fzc2VydF9s dGUoMCwgYmxvYl9pZCk7Cj4gKwlyZXMgPSBzZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJt X2ZkLCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAo+ICsJCQlEUk1fTU9ERV9PQkpFQ1Rf Q1JUQywgIkNUTSIsIGJsb2JfaWQpOwo+ICsJaWYgKHJlcyA8IDApCj4gKwkJaWd0X3dhcm4oIkNU TTpTZXQgUHJvcGVydHkgRmFpbGVkXG4iKTsKPiArCWlndF9hc3NlcnRfbHRlKDAsIHJlcyk7Cj4g KwlyZXMgPSBnZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZp Zy5jcnRjLT5jcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQywgIkNUTSIsIGJsb2JfaWQpOwo+ ICsJaWYgKHJlcyA8IDApCj4gKwkJaWd0X3dhcm4oIkNUTTpHZXQgUHJvcGVydHkgRmFpbGVkXG4i KTsKPiArCWlndF9hc3NlcnRfbHRlKDAsIHJlcyk7Cj4gKwl1aW50NjRfdCBibG9iX2FkZHJlc3Mg PSBnZXRfYmxvYihkaXNwbGF5LT5kcm1fZmQsIHJlcywgc2l6ZW9mKHN0cnVjdCBkcm1fY3RtKSk7 Cj4gKwljdG1fZGF0YSA9IChzdHJ1Y3QgZHJtX2N0bSAqKSAoaW50cHRyX3QpIGJsb2JfYWRkcmVz czsKPiArCWkgPSAwOwo+ICsJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlw ZTEpOwo+ICsJLypSZWdpc3RlciBWZXJpZmljYXRpb24qLwo+ICsJcmV0ID0gdmFsaWRhdGVfY3Rt X3JlZ2lzdGVycyhwaXBlMSwgY3RtX2RhdGEtPmN0bV9jb2VmZik7Cj4gKwlpZiAoIXJldCkKPiAr CQlpZ3Rfd2FybigiUmVnaXN0ZXIgVmVyaWZpY2F0aW9uIEZhaWxlZCBmb3IgQ1RNIik7Cj4gKwlm cmVlKGN0bV9kYXRhKTsKPiArCWlndF9hc3NlcnQocmV0KTsKPiArCj4gKwo+ICt9Cj4gKwo+ICtz dGF0aWMgYm9vbCBnYW1tYV9yZWdpc3Rlcl92YWxpZGF0aW9uKGludCBwaXBlLCBpbnQgbW9kZSwg c3RydWN0IGRybV9yMzJnMzJiMzIgZ2FtbWFfbHV0W21vZGVdKQo+ICt7Cj4gKwl1aW50MTZfdCBi bHVlX2ZyYWN0LCBncmVlbl9mcmFjdCwgcmVkX2ZyYWN0LCBibHVlX2ZyYWN0MSwgZ3JlZW5fZnJh Y3QxLCByZWRfZnJhY3QxLCBibHVlX2ZyYWN0MiwgZ3JlZW5fZnJhY3QyLCByZWRfZnJhY3QyOwo+ ICsJaW50IHJldCwgY291bnQsIG51bV9zYW1wbGVzLCBsZW5ndGg7Cj4gKwl1aW50MzJfdCBibHVl LCBncmVlbiwgcmVkLCB3b3JkLCBpbmRleCwgb2RkX3dvcmQsIGV2ZW5fd29yZDsKPiArCXVpbnQz Ml90IG9mZnNldCwgZ2FtbWE7Cj4gKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdChpbnRlbF9n ZXRfcGNpX2RldmljZSgpLCAwKTsKPiArCj4gKwlpZiAocGlwZSA9PSBQUklNQVJZKSB7Cj4gKwkJ aWYgKG1vZGUgPT0gR0VOOV84QklUX0dBTU1BX01BWF9WQUxTKQo+ICsJCQlvZmZzZXQgPSBHQU1N QV84QklUX1BJUEVBOwo+ICsJCWVsc2UKPiArCQkJb2Zmc2V0ID0gR0FNTUFfMTBCSVRfUElQRUE7 Cj4gKwl9IGVsc2Ugewo+ICsJCWlmIChtb2RlID09IEdFTjlfOEJJVF9HQU1NQV9NQVhfVkFMUykK PiArCQkJb2Zmc2V0ID0gR0FNTUFfOEJJVF9QSVBFQjsKPiArCQllbHNlCj4gKwkJCW9mZnNldCA9 IEdBTU1BXzEwQklUX1BJUEVCOwo+ICsJfQo+ICsKPiArCXN3aXRjaCAobW9kZSkgewo+ICsJY2Fz ZSAwOgo+ICsJCXJldHVybiB0cnVlOwo+ICsJY2FzZSBHRU45XzhCSVRfR0FNTUFfTUFYX1ZBTFM6 Cj4gKwkJY291bnQgPSAwOwo+ICsJCXdoaWxlIChjb3VudCA8IEdFTjlfOEJJVF9HQU1NQV9NQVhf VkFMUykgewo+ICsJCQlibHVlID0gZ2FtbWFfbHV0W2NvdW50XS5iMzI7Cj4gKwkJCWdyZWVuID0g Z2FtbWFfbHV0W2NvdW50XS5nMzI7Cj4gKwkJCXJlZCA9IGdhbW1hX2x1dFtjb3VudF0ucjMyOwo+ ICsJCQlpZiAoYmx1ZSA+PSBCRFdfTUFYX0dBTU1BKQo+ICsJCQkJYmx1ZSA9IEJEV19NQVhfR0FN TUE7Cj4gKwkJCWlmIChncmVlbiA+PSBCRFdfTUFYX0dBTU1BKQo+ICsJCQkJZ3JlZW4gPSBCRFdf TUFYX0dBTU1BOwo+ICsJCQlpZiAocmVkID49IEJEV19NQVhfR0FNTUEpCj4gKwkJCQlyZWQgPSBC RFdfTUFYX0dBTU1BOwo+ICsKPiArCQkJYmx1ZV9mcmFjdCA9IChibHVlID4+IDE2KSAmIDB4RkY7 Cj4gKwkJCWdyZWVuX2ZyYWN0ID0gKGdyZWVuID4+IDE2KSAmIDB4RkY7Cj4gKwkJCXJlZF9mcmFj dCA9IChyZWQgPj4gMTYpICYgMHhGRjsKPiArCQkJLyogUmVkICgyMzoxNikgR3JlZW4gKDE1Ojgp IGFuZCBCbHVlICg3OjApICovCj4gKwkJCXdvcmQgPSByZWRfZnJhY3QgPDwgMTYgOwo+ICsJCQl3 b3JkID0gd29yZCB8IChncmVlbl9mcmFjdCA8PCA4KTsKPiArCQkJd29yZCA9IHdvcmQgfCBibHVl X2ZyYWN0Owo+ICsJCQlnYW1tYSA9IElOUkVHKG9mZnNldCk7Cj4gKwkJCWlmIChnYW1tYSAhPSB3 b3JkKSB7Cj4gKwkJCQlpZ3Rfd2FybigiUmVnaXN0ZXIgVmFsdWVzIG5vdCBwcm9wZXIgcmVhZCB2 YWx1ZSA9JXggXHQgIHdyaXR0ZW4gPSAleCBcdCAiLCBnYW1tYSwgd29yZCk7Cj4gKwkJCQlyZXR1 cm4gZmFsc2U7Cj4gKwkJCX0KPiArCQkJb2Zmc2V0ICs9IDQ7Cj4gKwkJCWNvdW50Kys7Cj4gKwkJ fQo+ICsJCWJyZWFrOwo+ICsJY2FzZSBHRU45XzEwQklUX0dBTU1BX01BWF9WQUxTOgo+ICsJCWNv dW50ID0gMDsKPiArCQl3aGlsZSAoY291bnQgPCBHRU45XzEwQklUX0dBTU1BX01BWF9WQUxTKSB7 Cj4gKwkJCWJsdWUgPSBnYW1tYV9sdXRbY291bnRdLmIzMjsKPiArCQkJZ3JlZW4gPSBnYW1tYV9s dXRbY291bnRdLmczMjsKPiArCQkJcmVkID0gZ2FtbWFfbHV0W2NvdW50XS5yMzI7Cj4gKwkJCWlm IChibHVlID49IEJEV19NQVhfR0FNTUEpCj4gKwkJCQlibHVlID0gQkRXX01BWF9HQU1NQTsKPiAr CQkJaWYgKGdyZWVuID49IEJEV19NQVhfR0FNTUEpCj4gKwkJCQlncmVlbiA9IEJEV19NQVhfR0FN TUE7Cj4gKwkJCWlmIChyZWQgPj0gQkRXX01BWF9HQU1NQSkKPiArCQkJCXJlZCA9IEJEV19NQVhf R0FNTUE7Cj4gKwo+ICsJCQlibHVlX2ZyYWN0ID0gKGJsdWUgPj4gMTQpICYgMHgzRkYgOwo+ICsJ CQlncmVlbl9mcmFjdCA9IChncmVlbiA+PiAxNCkgJiAweDNGRjsKPiArCQkJcmVkX2ZyYWN0ID0g KHJlZCA+PiAxNCkgJiAweDNGRjsKPiArCQkJd29yZCA9IHJlZF9mcmFjdCA8PCAyMDsKPiArCQkJ d29yZCA9IHdvcmQgfCAoZ3JlZW5fZnJhY3QgPDwgMTApOwo+ICsJCQl3b3JkID0gd29yZCB8IGJs dWVfZnJhY3Q7Cj4gKwkJCWdhbW1hID0gSU5SRUcob2Zmc2V0KTsKPiArCQkJaWYgKGdhbW1hICE9 IHdvcmQpIHsKPiArCQkJCWlndF93YXJuKCJSZWdpc3RlciBWYWx1ZXMgbm90IHByb3BlciByZWFk IHZhbHVlID0leCBcdCAgd3JpdHRlbiA9ICV4IFx0ICIsIGdhbW1hLCB3b3JkKTsKPiArCQkJCXJl dHVybiBmYWxzZTsKPiArCQkJfQo+ICsJCQljb3VudCsrOwo+ICsJCX0KPiArCQlicmVhazsKPiAr CWNhc2UgR0VOOV9TUExJVEdBTU1BX01BWF9WQUxTOgo+ICsJCWNvdW50ID0gMDsKPiArCQl3aGls ZSAoY291bnQgPCBHRU45XzEwQklUX0dBTU1BX01BWF9WQUxTKSB7Cj4gKwkJCWJsdWUgPSBnYW1t YV9sdXRbY291bnRdLmIzMjsKPiArCQkJZ3JlZW4gPSBnYW1tYV9sdXRbY291bnRdLmczMjsKPiAr CQkJcmVkID0gZ2FtbWFfbHV0W2NvdW50XS5yMzI7Cj4gKwkJCWlmIChibHVlID49IEJEV19NQVhf R0FNTUEpCj4gKwkJCQlibHVlID0gQkRXX01BWF9HQU1NQTsKPiArCQkJaWYgKGdyZWVuID49IEJE V19NQVhfR0FNTUEpCj4gKwkJCQlncmVlbiA9IEJEV19NQVhfR0FNTUE7Cj4gKwkJCWlmIChyZWQg Pj0gQkRXX01BWF9HQU1NQSkKPiArCQkJCXJlZCA9IEJEV19NQVhfR0FNTUE7Cj4gKwkJCWJsdWVf ZnJhY3QgPSAoYmx1ZSA+PiAxNCkgJiAweDNGRiA7Cj4gKwkJCWdyZWVuX2ZyYWN0ID0gKGdyZWVu ID4+IDE0KSAmIDB4M0ZGOwo+ICsJCQlyZWRfZnJhY3QgPSAocmVkID4+IDE0KSAmIDB4M0ZGOwo+ ICsJCQl3b3JkID0gcmVkX2ZyYWN0IDw8IDIwOwo+ICsJCQl3b3JkID0gd29yZCB8IChncmVlbl9m cmFjdCA8PCAxMCk7Cj4gKwkJCXdvcmQgPSB3b3JkIHwgYmx1ZV9mcmFjdDsKPiArCQkJZ2FtbWEg PSBJTlJFRyhvZmZzZXQpOwo+ICsJCQlpZiAoZ2FtbWEgIT0gd29yZCkgewo+ICsJCQkJaWd0X3dh cm4oIlJlZ2lzdGVyIFZhbHVlcyBub3QgcHJvcGVyIHJlYWQgdmFsdWUgPSV4IFx0ICB3cml0dGVu ID0gJXggXHQgIiwgZ2FtbWEsIHdvcmQpOwo+ICsJCQkJcmV0dXJuIGZhbHNlOwo+ICsJCQl9Cj4g KwkJCWNvdW50Kys7Cj4gKwkJfQo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgR0VOOV8xMkJJVF9H QU1NQV9NQVhfVkFMUzoKPiArCQljb3VudCA9IDA7Cj4gKwkJZXZlbl93b3JkID0gMHgwOwo+ICsJ CW9kZF93b3JkID0gMHgwOwo+ICsJCXdoaWxlIChjb3VudCA8IEdFTjlfMTJCSVRfR0FNTUFfTUFY X1ZBTFMgLSAxKSB7Cj4gKwkJCWJsdWUgPSBnYW1tYV9sdXRbY291bnRdLmIzMjsKPiArCQkJZ3Jl ZW4gPSBnYW1tYV9sdXRbY291bnRdLmczMjsKPiArCQkJcmVkID0gZ2FtbWFfbHV0W2NvdW50XS5y MzI7Cj4gKwkJCWlmIChibHVlID49IEJEV19NQVhfR0FNTUEpCj4gKwkJCQlibHVlID0gQkRXX01B WF9HQU1NQTsKPiArCQkJaWYgKGdyZWVuID49IEJEV19NQVhfR0FNTUEpCj4gKwkJCQlncmVlbiA9 IEJEV19NQVhfR0FNTUE7Cj4gKwkJCWlmIChyZWQgPj0gQkRXX01BWF9HQU1NQSkKPiArCQkJCXJl ZCA9IEJEV19NQVhfR0FNTUE7Cj4gKwo+ICsJCQlyZWRfZnJhY3QgPSAocmVkID4+IDgpICYgMHhG RkZGIDsKPiArCQkJZ3JlZW5fZnJhY3QgPSAoZ3JlZW4gPj4gOCkgJiAweEZGRkY7Cj4gKwkJCWJs dWVfZnJhY3QgPSAoYmx1ZSA+PiA4KSAmIDB4RkZGRjsKPiArCj4gKwkJCXJlZF9mcmFjdDEgPSBy ZWRfZnJhY3QgJiAweDNGIDsKPiArCQkJZ3JlZW5fZnJhY3QxID0gZ3JlZW5fZnJhY3QgJiAweDNG IDsKPiArCQkJYmx1ZV9mcmFjdDEgPSBibHVlX2ZyYWN0ICYgMHgzRiA7Cj4gKwkJCWV2ZW5fd29y ZCA9IHJlZF9mcmFjdDEgPDwgMjQ7Cj4gKwkJCWV2ZW5fd29yZCA9IGV2ZW5fd29yZCB8IChncmVl bl9mcmFjdDEgIDw8IDE0KSA7Cj4gKwkJCWV2ZW5fd29yZCA9IGV2ZW5fd29yZCB8IChibHVlX2Zy YWN0MSAgPDwgNCk7Cj4gKwkJCWV2ZW5fd29yZCA9IGV2ZW5fd29yZCAmIDB4RkYwRkMzRjAgOwo+ ICsKPiArCQkJZ2FtbWEgPSBJTlJFRyhvZmZzZXQpOwo+ICsJCQlpZiAoZ2FtbWEgIT0gZXZlbl93 b3JkKSB7Cj4gKwkJCQlpZ3Rfd2FybigiRVZFTjpSZWdpc3RlciBWYWx1ZXMgbm90IHByb3BlciBy ZWFkIHZhbHVlID0leCBcdCAgd3JpdHRlbiA9ICV4IFx0IGNvdW50ID0gJWQgIiwgZ2FtbWEsIGV2 ZW5fd29yZCwgY291bnQpOwo+ICsJCQkJcmV0dXJuIGZhbHNlOwo+ICsJCQl9Cj4gKwkJCWdhbW1h ID0gMHgwOwo+ICsJCQlyZWRfZnJhY3QyID0gICgocmVkX2ZyYWN0ID4+IDYpICYgMHgzRkYpOwo+ ICsJCQlncmVlbl9mcmFjdDIgPSAoKGdyZWVuX2ZyYWN0ID4+IDYpICYgMHgzRkYpOwo+ICsJCQli bHVlX2ZyYWN0MiA9ICgoYmx1ZV9mcmFjdCA+PiA2KSAmIDB4M0ZGKTsKPiArCj4gKwkJCW9kZF93 b3JkID0gKHJlZF9mcmFjdDIgPDwgMjApOwo+ICsJCQlvZGRfd29yZCA9IG9kZF93b3JkIHwgKGdy ZWVuX2ZyYWN0MiAgPDwgMTApIDsKPiArCQkJb2RkX3dvcmQgPSBvZGRfd29yZCB8IGJsdWVfZnJh Y3QyIDsKPiArCj4gKwkJCWdhbW1hID0gSU5SRUcob2Zmc2V0KTsKPiArCj4gKwkJCWlmIChnYW1t YSAhPSBvZGRfd29yZCkgewo+ICsJCQkJaWd0X3dhcm4oIk9ERDpSZWdpc3RlciBWYWx1ZXMgbm90 IHByb3BlciByZWFkIHZhbHVlID0leCBcdCAgd3JpdHRlbiA9ICV4IFx0ICIsIGdhbW1hLCBvZGRf d29yZCk7Cj4gKwkJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJCX0KPiArCQkJY291bnQrKzsKPiArCQl9 Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoKTsK PiArCj4gKwlpZ3RfaW5mbygiR2FtbWEgVmFsdWVzIEFyZSBQcm9ncmFtbWVkIENvcnJlY3RseVxu Iik7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICtzdGF0aWMgdm9pZCB0ZXN0X3BpcGVfZGVnYW1t YShzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rfb3V0cHV0 X3QgKm91dHB1dCwKPiArCQkJaWd0X3BsYW5lX3QgKnBsYW5lLCB1aW50MzJfdCBudW1fc2FtcGxl cywgaW50IHZhbHVlcywgaW50IHBpcGUxKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3BhbGV0dGUgKmRl Z2FtbWFfZGF0YSA9ICBOVUxMOwo+ICsJaW50IHJlcywgcmV0Owo+ICsJZmxvYXQgZGVnYW1tYTsK PiArCWVudW0gcGlwZSBwaXBlOwo+ICsJZW51bSBpZ3RfY29tbWl0X3N0eWxlIGNvbW1pdDsKPiAr CWludCAgaTsKPiArCWludCBmYl9pZCwgZmJfaWQxOwo+ICsJaW50IHdpZHRoLCBoZWlnaHQ7Cj4g Kwl1aW50MzJfdCBwaXhlbGZvcm1hdCA9IERSTV9GT1JNQVRfWFJHQjg4ODg7Cj4gKwlib29sIHN0 YXR1cyA9IGZhbHNlOwo+ICsJY29tbWl0ID0gQ09NTUlUX1VOSVZFUlNBTDsKPiArCj4gKwlpbnQg YnJpZ2h0bmVzcyA9IDUwLCBjb250cmFzdCA9IDUwLCBibG9iX2xlbmd0aDsKPiArCWlmICh2YWx1 ZXMgPT0gR0FNTUFfMSkKPiArCQlkZWdhbW1hID0gMS4wOwo+ICsJZWxzZSBpZiAodmFsdWVzID09 IEdBTU1BXzIpCj4gKwkJZGVnYW1tYSA9IDIuMDsKPiArCWVsc2UKPiArCQlkZWdhbW1hID0gMi4y Owo+ICsJaWYgKG51bV9zYW1wbGVzID09IDApCj4gKwkJYmxvYl9sZW5ndGggPSAxOwo+ICsJZWxz ZQo+ICsJCWJsb2JfbGVuZ3RoID0gKHNpemVvZihzdHJ1Y3QgZHJtX3BhbGV0dGUpICsgKG51bV9z YW1wbGVzICogc2l6ZW9mKHN0cnVjdCBkcm1fcjMyZzMyYjMyKSkpOwo+ICsKPiArCWRlZ2FtbWFf ZGF0YSA9IG1hbGxvYyhibG9iX2xlbmd0aCk7Cj4gKwlzdHJ1Y3QgZHJtX3IzMmczMmIzMiBkZWdh bW1hX3B0cltudW1fc2FtcGxlc107Cj4gKwl3cml0ZV9nYW1tYV9sdXQoYnJpZ2h0bmVzcywgY29u dHJhc3QsIGRlZ2FtbWEsIG51bV9zYW1wbGVzLCBkZWdhbW1hX3B0cik7Cj4gKwlmb3IgKGludCBp ID0gMDsgaSA8IG51bV9zYW1wbGVzOyBpKyspCj4gKwkJZGVnYW1tYV9kYXRhLT5sdXRbaV0gPSBk ZWdhbW1hX3B0cltpXTsKPiArCWludCBibG9iX2lkID0gY3JlYXRlX2Jsb2IoZGlzcGxheS0+ZHJt X2ZkLCAodWludDY0X3QgKikoZGVnYW1tYV9kYXRhKSwgYmxvYl9sZW5ndGgpOwo+ICsJaWYgKGJs b2JfaWQgPCAwKSB7Cj4gKwkJaWd0X3dhcm4oIlNldCBibG9iIElPQ1RMIGZhaWxlZFxuIik7Cj4g Kwl9Cj4gKwlpZ3RfYXNzZXJ0X2x0ZSgwLCBibG9iX2lkKTsKPiArCXJlcyA9IHNldF9jb2xvcl9w cm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsCj4g KwkJCURSTV9NT0RFX09CSkVDVF9DUlRDLCAiUEFMRVRURV9CRUZPUkVfQ1RNIiwgYmxvYl9pZCk7 Cj4gKwlyZXQgPSBnZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtPmNv bmZpZy5jcnRjLT5jcnRjX2lkLAo+ICsJCQlEUk1fTU9ERV9PQkpFQ1RfQ1JUQywgIlBBTEVUVEVf QkVGT1JFX0NUTSIsIGJsb2JfaWQpOwo+ICsJaWd0X2Fzc2VydF9sdGUoMCwgcmVzKTsKPiArCWln dF9hc3NlcnRfbHRlKDAsIHJldCk7Cj4gKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0 cHV0LCBwaXBlMSk7Cj4gKwlpZiAobnVtX3NhbXBsZXMgIT0gMCkgewo+ICsJCXN0YXR1cyA9IGdh bW1hX3JlZ2lzdGVyX3ZhbGlkYXRpb24ocGlwZTEsIG51bV9zYW1wbGVzLCBkZWdhbW1hX2RhdGEt Pmx1dCk7Cj4gKwkJZnJlZShkZWdhbW1hX2RhdGEpOwo+ICsJfQo+ICsJaWd0X2Fzc2VydChzdGF0 dXMpOwo+ICsKPiArCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRlc3RfcGlwZV9nYW1tYShzdHJ1 Y3QgZGF0YV90ICpkYXRhLCBpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91 dHB1dCwKPiArCQl1aW50MzJfdCBudW1fc2FtcGxlcywgaW50IHZhbHVlcywgaW50IHBpcGUxKQo+ ICt7Cj4gKwllbnVtIGlndF9jb21taXRfc3R5bGUgY29tbWl0Owo+ICsJaW50IHJlcywgaTsKPiAr CWludCBmYl9pZCwgZmJfaWQxOwo+ICsJaW50IHdpZHRoLCBoZWlnaHQ7Cj4gKwlpZ3RfcGxhbmVf dCAqcGxhbmU7Cj4gKwl1aW50MzJfdCBwaXhlbGZvcm1hdCA9IERSTV9GT1JNQVRfWFJHQjg4ODg7 Cj4gKwljb21taXQgPSBDT01NSVRfVU5JVkVSU0FMOwo+ICsJZW51bSBwaXBlIHBpcGU7Cj4gKwlz dHJ1Y3QgZHJtX3BhbGV0dGUgKmdhbW1hX2RhdGEgPSAgTlVMTDsKPiArCWludCAgcmV0Owo+ICsJ Ym9vbCBzdGF0dXMgPSBmYWxzZTsKPiArCWZsb2F0IGdhbW1hOwo+ICsJaW50IGJyaWdodG5lc3Mg PSA1MCwgY29udHJhc3QgPSA1MCwgYmxvYl9sZW5ndGg7Cj4gKwlpZiAodmFsdWVzID09IEdBTU1B XzEpCj4gKwkJZ2FtbWEgPSAxLjA7Cj4gKwllbHNlIGlmICh2YWx1ZXMgPT0gR0FNTUFfMikKPiAr CQlnYW1tYSA9IDIuMDsKPiArCWVsc2UgaWYgKHZhbHVlcyA9PSBHQU1NQV8yXzIpCj4gKwkJZ2Ft bWEgPSAyLjI7Cj4gKwllbHNlCj4gKwkJZ2FtbWEgPSB2YWx1ZXM7Cj4gKwlpZiAobnVtX3NhbXBs ZXMgPT0gMCkKPiArCQlibG9iX2xlbmd0aCA9IDE7Cj4gKwllbHNlCj4gKwkJYmxvYl9sZW5ndGgg PSAoc2l6ZW9mKHN0cnVjdCBkcm1fcGFsZXR0ZSkgKyAobnVtX3NhbXBsZXMgKiBzaXplb2Yoc3Ry dWN0IGRybV9yMzJnMzJiMzIpKSk7Cj4gKwo+ICsJZ2FtbWFfZGF0YSA9IG1hbGxvYyhibG9iX2xl bmd0aCk7Cj4gKwlzdHJ1Y3QgZHJtX3IzMmczMmIzMiBnYW1tYV9wdHJbbnVtX3NhbXBsZXNdOwo+ ICsJd3JpdGVfZ2FtbWFfbHV0KGJyaWdodG5lc3MsIGNvbnRyYXN0LCBnYW1tYSwgbnVtX3NhbXBs ZXMsIGdhbW1hX3B0cik7Cj4gKwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fc2FtcGxlczsg aSsrKQo+ICsJCWdhbW1hX2RhdGEtPmx1dFtpXSA9IGdhbW1hX3B0cltpXTsKPiArCj4gKwo+ICsJ aW50IGJsb2JfaWQgPSBjcmVhdGVfYmxvYihkaXNwbGF5LT5kcm1fZmQsICh1aW50NjRfdCAqKShn YW1tYV9kYXRhKSwgYmxvYl9sZW5ndGgpOwo+ICsJaWYgKGJsb2JfaWQgPCAwKSB7Cj4gKwkJaWd0 X3dhcm4oIlNldCBibG9iIElPQ1RMIGZhaWxlZFxuIik7Cj4gKwl9Cj4gKwlpZ3RfYXNzZXJ0X2x0 ZSgwLCBibG9iX2lkKTsKPiArCj4gKwo+ICsJcmVzID0gc2V0X2NvbG9yX3Byb3BlcnR5KGRpc3Bs YXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKPiArCQkJRFJNX01PREVf T0JKRUNUX0NSVEMsICJQQUxFVFRFX0FGVEVSX0NUTSIsIGJsb2JfaWQpOwo+ICsJaWYgKHJlcyA8 IDApIHsKPiArCQlpZ3RfaW5mbygiU2V0dGluZyBHYW1tYSBmYWlsZWQhIik7Cj4gKwo+ICsJCWZy ZWUoZ2FtbWFfZGF0YSk7Cj4gKwl9Cj4gKwlpZ3RfYXNzZXJ0X2x0ZSgwLCByZXMpOwo+ICsKPiAr CXJldCA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0+Y29uZmln LmNydGMtPmNydGNfaWQsCj4gKwkJCURSTV9NT0RFX09CSkVDVF9DUlRDLCAiUEFMRVRURV9BRlRF Ul9DVE0iLCBibG9iX2lkKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJaWd0X2luZm8oIkdldHRp bmcgR2FtbWEgZmFpbGVkISIpOwo+ICsJCWZyZWUoZ2FtbWFfZGF0YSk7Cj4gKwl9Cj4gKwlpZ3Rf YXNzZXJ0X2x0ZSgwLCByZXQpOwo+ICsJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1 dCwgcGlwZTEpOwo+ICsJaWYgKG51bV9zYW1wbGVzICE9IDApIHsKPiArCj4gKwkJc3RhdHVzID0g Z2FtbWFfcmVnaXN0ZXJfdmFsaWRhdGlvbihwaXBlMSwgbnVtX3NhbXBsZXMsIGdhbW1hX2RhdGEt Pmx1dCk7Cj4gKwo+ICsJCWlndF9hc3NlcnQoc3RhdHVzKTsKPiArCX0KPiArCj4gKwlmcmVlKGdh bW1hX2RhdGEpOwo+ICt9Cj4gK3N0YXRpYyB2b2lkIHRlc3RfcGlwZV9jb2xvcihzdHJ1Y3QgZGF0 YV90ICpkYXRhLCBjaGFyICpwcm9wX25hbWUsIGludCBlbmFibGUsIGludCBkaXNwbGF5X2luLCBp bnQgdmFsdWUpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxh eTsKPiArCWlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ICsJaWd0X3BsYW5lX3QgKnBsYW5lOwo+ICsJ ZW51bSBwaXBlIHBpcGU7Cj4gKwllbnVtIGlndF9jb21taXRfc3R5bGUgY29tbWl0Owo+ICsJaW50 IHJlcywgaTsKPiArCWludCBmYl9pZCwgZmJfaWQxOwo+ICsJaW50IHdpZHRoLCBoZWlnaHQ7Cj4g Kwl1aW50MzJfdCBwaXhlbGZvcm1hdCA9IERSTV9GT1JNQVRfWFJHQjg4ODg7Cj4gKwljb21taXQg PSBDT01NSVRfVU5JVkVSU0FMOwo+ICsJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChkaXNwbGF5 LCBvdXRwdXQpIHsKPiArCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gKwkJcGlwZSA9IG91dHB1 dC0+Y29uZmlnLnBpcGU7Cj4gKwkJaWYgKGRpc3BsYXlfaW4gIT0gMiAmJiBwaXBlICE9IGRpc3Bs YXlfaW4pCj4gKwkJCQlicmVhazsKPiArCQlpZ3RfcGxhbmVfdCAqcGxhbmU7Cj4gKwkJaWd0X291 dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ICsJCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9t b2RlKG91dHB1dCk7Cj4gKwkJLypEcmF3IHRoZSBpbml0aWFsIHByaW1hcnkgcGxhbmUqLwo+ICsJ CXBsYW5lID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfUFJJTUFSWSk7 Cj4gKwo+ICsJCXByZXBhcmVfY3J0YyhkYXRhLCBvdXRwdXQsIHBpcGUsIHBsYW5lLCBtb2RlLCBj b21taXQpOwo+ICsJCS8qUmFuZG9tIHNpemVkIEZyYW1lIGJ1ZmZlciBjcmVhdGlvbiAqLwo+ICsJ CXdpZHRoID0gNjAwOwo+ICsJCWhlaWdodCA9IDYwMDsKPiArCj4gKwkJcGxhbmUgPSBpZ3Rfb3V0 cHV0X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV8yKTsKPiArCQlmYl9pZCA9IGlndF9jcmVh dGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLAo+ICsJCQkJd2lkdGgsIGhlaWdodCwKPiArCQkJCXBp eGVsZm9ybWF0LAo+ICsJCQkJTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKPiArCQkJCTAuMCwK PiArCQkJCTEuMCwKPiArCQkJCTAuMCwKPiArCQkJCSZkYXRhLT5mYik7Cj4gKwkJcGxhbmUtPmNy dGNfeCA9IDEwMDsKPiArCQlwbGFuZS0+Y3J0Y195ID0gMTAwOwo+ICsJCXBsYW5lLT5mYl9jaGFu Z2VkID0gdHJ1ZTsKPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmIpOwo+ICsJ CWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgY29tbWl0KTsKPiArCj4gKwkJaWYgKChzdHJj bXAocHJvcF9uYW1lLCAiZ2FtbWFfcHJvcGVydHlfOGJpdCIpID09IDApICYmCj4gKwkJCQllbmFi bGUgPT0gRU5BQkxFKXsKPiArCQkJdGVzdF9waXBlX2dhbW1hKGRhdGEsIGRpc3BsYXksIG91dHB1 dCwKPiArCQkJCQlHRU45XzhCSVRfR0FNTUFfTUFYX1ZBTFMsIHZhbHVlLCBwaXBlKTsKPiArCQl9 IGVsc2UgIGlmICgoc3RyY21wKHByb3BfbmFtZSwgImdhbW1hX3Byb3BlcnR5XzhiaXQiKSA9PSAw KSAmJgo+ICsJCQkJZW5hYmxlID09IERJU0FCTEUpIHsKPiArCQkJdGVzdF9waXBlX2dhbW1hKGRh dGEsIGRpc3BsYXksIG91dHB1dCwgIDAsIHZhbHVlLCBwaXBlKTsKPiArCQl9IGVsc2UgIGlmICgo c3RyY21wKHByb3BfbmFtZSwgImdhbW1hX3Byb3BlcnR5XzEwYml0IikgPT0gMCkgJiYKPiArCQkJ CWVuYWJsZSA9PSBFTkFCTEUpIHsKPiArCQkJdGVzdF9waXBlX2dhbW1hKGRhdGEsIGRpc3BsYXks IG91dHB1dCwgR0VOOV8xMEJJVF9HQU1NQV9NQVhfVkFMUywgdmFsdWUsIHBpcGUpOwo+ICsJCX0g ZWxzZSAgaWYgKChzdHJjbXAocHJvcF9uYW1lLCAiY3NjX3Byb3BlcnR5IikgPT0gMCkpIHsKPiAr CQkJdGVzdF9waXBlX2NzYyhkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBsYW5lLCBlbmFibGUsIHZh bHVlLCBwaXBlKTsKPiArCQl9IGVsc2UgIGlmICgoc3RyY21wKHByb3BfbmFtZSwgImRlZ2FtbWFf cHJvcGVydHkiKSA9PSAwKSAmJgo+ICsJCQkJZW5hYmxlID09IEVOQUJMRSkgewo+ICsJCQl0ZXN0 X3BpcGVfZGVnYW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBsYW5lLCBHRU45X1NQTElUR0FN TUFfTUFYX1ZBTFMsIHZhbHVlLCBwaXBlKTsKPiArCQl9IGVsc2UgIGlmICgoc3RyY21wKHByb3Bf bmFtZSwgImRlZ2FtbWFfcHJvcGVydHkiKSA9PSAwKSAmJgo+ICsJCQllbmFibGUgPT0gRElTQUJM RSkgewo+ICsJCQl0ZXN0X3BpcGVfZGVnYW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBsYW5l LCAwLCB2YWx1ZSwgcGlwZSk7Cj4gKwkJfSBlbHNlICBpZiAoKHN0cmNtcChwcm9wX25hbWUsICJn YW1tYV9wcm9wZXJ0eV9zcGxpdCIpID09IDApICYmCj4gKwkJCQllbmFibGUgPT0gRU5BQkxFKSB7 Cj4gKwkJCXRlc3RfcGlwZV9nYW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsCj4gKwkJCQkJR0VO OV9TUExJVEdBTU1BX01BWF9WQUxTLCB2YWx1ZSwgcGlwZSk7Cj4gKwkJfSBlbHNlICBpZiAoKHN0 cmNtcChwcm9wX25hbWUsICJnYW1tYV9wcm9wZXJ0eV8xMmJpdCIpID09IDApICYmIGVuYWJsZSA9 PSBFTkFCTEUpIHsKPiArCQkJdGVzdF9waXBlX2dhbW1hKGRhdGEsIGRpc3BsYXksIG91dHB1dCwK PiArCQkJCQlHRU45XzEyQklUX0dBTU1BX01BWF9WQUxTLCB2YWx1ZSwgcGlwZSk7Cj4gKwo+ICsJ CX0gZWxzZSB7Cj4gKwkJCWlndF9pbmZvKCJJbnZhbGlkIFRlc3RcbiIpOwo+ICsJCX0KPiArCj4g KwkJY2xlYW51cF9mYihkYXRhKTsKPiArCQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91 dHB1dCwgSUdUX1BMQU5FXzIpOwo+ICsJCXVzbGVlcCgyMDAwMDAwKTsKPiArCQljbGVhbnVwX2Ny dGMoZGF0YSwgb3V0cHV0LCBwbGFuZSk7Cj4gKwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBwcmludF91c2FnZSh2b2lkKQo+ICt7Cj4gKwlpZ3RfaW5mbygiVXNhZ2U6IC4va21zX2NvbG9y IFxuIik7Cj4gKwlpZ3RfaW5mbygiXHQtZFx0PGRpc3BsYXk+ICAgICAgICAgICBcdDAtPnByaW1h cnlcdDEtPlNlY29uZGFyeSBcbiIpOwo+ICsJaWd0X2luZm8oIlx0LXRcdDx0ZXN0PiAgICAgICAg ICAgICAgXHQwLT5jc2MgICAgXHQxLT5nYW1tYVx0Mi0+ZGVnYW1tYVxuIik7Cj4gKwlpZ3RfaW5m bygiXHQtZVx0PGVuYWJsZS9kaXNhYmxlPiAgICBcdDAtPmVuYWJsZSBcdDEtPmRpc2FibGVcbiIp Owo+ICsJaWd0X2luZm8oIlx0LXZcdDxWYWx1ZXM+ICAgICAgICAgICAgXHRGb3IgY3NjIHZhbHVl czogIFx0MC0+UmVkIFx0MS0+R3JlZW5cdDItPkJsdWUgXHQzLT5Vbml0eSBcbiIpOwo+ICsJaWd0 X2luZm8oIiAgICAgICAgICAgICAgICAgICAgICAgICAgXHRGb3IgR2FtbWEgdmFsdWVzOlx0MC0+ MS4wIFx0MS0+Mi4wICBcdDItPjIuMiAgXHR4LT4gQW55IEdhbW1hIEN1c3RvbSBWYWx1ZXNcbiIp Owo+ICsJaWd0X2luZm8oIlx0LW1cdDxNb2RlPiAgICAgICAgICAgICAgXHRPbmx5IEZvciBHYW1t YSAgIFx0MC0+OGJpdFx0MS0+MTBiaXRcdDItPjEyYml0XHQzLT5TcGxpdExldmVsXG4iKTsKPiAr fQo+ICsKPiArbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICt7Cj4gKwlzdHJ1Y3QgZGF0 YV90IGRhdGEgPSB7fTsKPiArCWludCBnZW4gPSAwOwo+ICsJaW50IGRpc3BsYXlfaWQgPSAwOwo+ ICsJaW50IG9wdGlvbiA9IDAsIGNvdW50ID0gLTE7Cj4gKwlpbnQgZGlzcGxheSA9IC0xLCB0ZXN0 ID0gLTEsIHZhbHVlcyA9IC0xLCBlbmFibGVfaW4gPSAtMSwgbW9kZSA9IDA7Cj4gKwl3aGlsZSAo KG9wdGlvbiA9IGdldG9wdChhcmdjLCBhcmd2LCAiZDp0OmU6djptOiIpKSAhPSAtMSkgewo+ICsJ CXN3aXRjaCAob3B0aW9uKSB7Cj4gKwkJY2FzZSAnZCc6Cj4gKwkJCSBkaXNwbGF5ID0gYXRvaShv cHRhcmcpOwo+ICsJCQkgYnJlYWs7Cj4gKwkJY2FzZSAndCc6Cj4gKwkJCSB0ZXN0ID0gYXRvaShv cHRhcmcpOwo+ICsJCQkgYnJlYWs7Cj4gKwkJY2FzZSAndic6Cj4gKwkJCSB2YWx1ZXMgPSBhdG9p KG9wdGFyZyk7Cj4gKwkJCSBicmVhazsKPiArCQljYXNlICdlJzoKPiArCQkJIGVuYWJsZV9pbiA9 IGF0b2kob3B0YXJnKTsKPiArCQkJIGJyZWFrOwo+ICsJCWNhc2UgJ20nOgo+ICsJCQkgbW9kZSA9 IGF0b2kob3B0YXJnKTsKPiArCQkJIGJyZWFrOwo+ICsJCWRlZmF1bHQ6Cj4gKwkJCSBwcmludF91 c2FnZSgpOwo+ICsJCQkgcmV0dXJuIC0xOwo+ICsJCX0KPiArCX0KPiArCWNvdW50ID0gIGFyZ2M7 Cj4gKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gKwlpZ3Rfc3VidGVzdF9pbml0KGFyZ2Ms IGFyZ3YpOwo+ICsJaWd0X2ZpeHR1cmV7Cj4gKwkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2 ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7Cj4gKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9k ZSgpOwo+ICsJCWlndF9kaXNwbGF5X2luaXQoJmRhdGEuZGlzcGxheSwgZGF0YS5kcm1fZmQpOwo+ ICsJCWRhdGEuZ2VuID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoZGF0YS5kcm1fZmQp KTsKPiArCX0KPiArCWlndF9yZXF1aXJlKGRhdGEuZ2VuID49IDkpOwo+ICsJaWYgKGNvdW50ID09 IDEpIHsKPiArCWlndF9pbmZvKCJDb2xvciBHZW5lcmljIFRlc3RzXG4iKTsKPiArCWRpc3BsYXkg PSAyOwo+ICsJdmFsdWVzID0gMTsKPiArCWlndF9zdWJ0ZXN0X2YoIkVuYWJsZV9HYW1tYV84Yml0 IikKPiArCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJnYW1tYV9wcm9wZXJ0eV84Yml0IiwgRU5B QkxFLCBkaXNwbGF5LCB2YWx1ZXMpOwo+ICsJaWd0X3N1YnRlc3RfZigiRW5hYmxlX0dhbW1hXzEw Yml0IikKPiArCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJnYW1tYV9wcm9wZXJ0eV8xMGJpdCIs IEVOQUJMRSwgZGlzcGxheSwgdmFsdWVzKTsKPiArCWlndF9zdWJ0ZXN0X2YoIkVuYWJsZV9HYW1t YV8xMmJpdCIpCj4gKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCAiZ2FtbWFfcHJvcGVydHlfMTJi aXQiLCBFTkFCTEUsIGRpc3BsYXksIHZhbHVlcyk7Cj4gKwlpZ3Rfc3VidGVzdF9mKCJFbmFibGVf U1BMSVRfR0FNTUEiKQo+ICsJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImdhbW1hX3Byb3BlcnR5 X3NwbGl0IiwgRU5BQkxFLCBkaXNwbGF5LCB2YWx1ZXMpOwo+ICsJaWd0X3N1YnRlc3RfZigiRGlz YWJsZV9HYW1tYV84Yml0IikKPiArCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJnYW1tYV9wcm9w ZXJ0eV84Yml0IiwgRElTQUJMRSwgZGlzcGxheSwgdmFsdWVzKTsKPiArCWlndF9zdWJ0ZXN0X2Yo IkNTQ19FTkFCTEUiKQo+ICsJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImNzY19wcm9wZXJ0eSIs IEVOQUJMRSwgZGlzcGxheSwgdmFsdWVzKTsKPiArCWlndF9zdWJ0ZXN0X2YoIkNTQ19ESVNBQkxF IikKPiArCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJjc2NfcHJvcGVydHkiLCBFTkFCTEUsIGRp c3BsYXksIHZhbHVlcyk7Cj4gKwlpZ3Rfc3VidGVzdF9mKCJFbmFibGVfRGUtZ2FtbWEiKQo+ICsJ CXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImRlZ2FtbWFfcHJvcGVydHkiLCBFTkFCTEUsIGRpc3Bs YXksIHZhbHVlcyk7Cj4gKwlpZ3Rfc3VidGVzdF9mKCJEaXNhYmxlX0RlLWdhbW1hIikKPiArCQl0 ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJkZWdhbW1hX3Byb3BlcnR5IiwgRElTQUJMRSwgZGlzcGxh eSwgdmFsdWVzKTsKPiArCX0gZWxzZSB7Cj4gKwkJaWYgKCgoY291bnQgPCA3KSB8fCAoZGlzcGxh eSA9PSAtMSkgfHwgKHRlc3QgPT0gLTEpIHx8ICh2YWx1ZXMgPT0gLTEpIHx8IChlbmFibGVfaW4g PT0gLTEpKSkgewo+ICsJCQlwcmludF91c2FnZSgpOwo+ICsJCQlyZXR1cm4gLTE7Cj4gKwkJfSBl bHNlIHsKPiArCQkJaWd0X2luZm8oIkNvbG9yIEN1c3RvbWlzZWQgVGVzdHNcbiIpOwo+ICsKPiAr CQkJaWYgKHRlc3QgPT0gQ1NDX1RFU1QpIHsKPiArCQkJCWlndF9zdWJ0ZXN0X2YoIkNTQyIpCj4g KwkJCQkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCAiY3NjX3Byb3BlcnR5IiwgZW5hYmxlX2luLCBk aXNwbGF5LCB2YWx1ZXMpOwo+ICsJCQl9IGVsc2UgaWYgKHRlc3QgPT0gR0FNTUFfVEVTVCkgewo+ ICsJCQkJaWYgKGVuYWJsZV9pbiA9PSBFTkFCTEUpIHsKPiArCQkJCQlpZiAobW9kZSA9PSAwKSB7 Cj4gKwkJCQkJCWlndF9zdWJ0ZXN0X2YoIkVuYWJsZV9HYW1tYV84Yml0IikKPiArCQkJCQkJCXRl c3RfcGlwZV9jb2xvcigmZGF0YSwgImdhbW1hX3Byb3BlcnR5XzhiaXQiLCBFTkFCTEUsIGRpc3Bs YXksIHZhbHVlcyk7Cj4gKwkJCQkJfSBlbHNlIGlmIChtb2RlID09IDEpIHsKPiArCQkJCQkJaWd0 X3N1YnRlc3RfZigiRW5hYmxlX0dhbW1hXzEwYml0IikKPiArCQkJCQkJCXRlc3RfcGlwZV9jb2xv cigmZGF0YSwgImdhbW1hX3Byb3BlcnR5XzEwYml0IiwgRU5BQkxFLCBkaXNwbGF5LCB2YWx1ZXMp Owo+ICsKPiArCQkJCQl9IGVsc2UgaWYgKG1vZGUgPT0gMikgewo+ICsJCQkJCQlpZ3Rfc3VidGVz dF9mKCJFbmFibGVfR2FtbWFfMTJiaXQiKQo+ICsJCQkJCQkJdGVzdF9waXBlX2NvbG9yKCZkYXRh LCAiZ2FtbWFfcHJvcGVydHlfMTJiaXQiLCBFTkFCTEUsIGRpc3BsYXksIHZhbHVlcyk7Cj4gKwo+ ICsJCQkJCX0gZWxzZSBpZiAobW9kZSA9PSAzKSB7Cj4gKwkJCQkJCWlndF9zdWJ0ZXN0X2YoIkVu YWJsZV9TUExJVF9HQU1NQSIpCj4gKwkJCQkJCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJnYW1t YV9wcm9wZXJ0eV9zcGxpdCIsIEVOQUJMRSwgZGlzcGxheSwgdmFsdWVzKTsKPiArCQkJCQl9Cj4g KwkJCQl9IGVsc2Ugewo+ICsJCQkJCWlndF9zdWJ0ZXN0X2YoIkRpc2FibGVfR2FtbWFfOGJpdCIp Cj4gKwkJCQkJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImdhbW1hX3Byb3BlcnR5XzhiaXQiLCBE SVNBQkxFLCBkaXNwbGF5LCB2YWx1ZXMpOwo+ICsKPiArCQkJCX0KPiArCQkJfSBlbHNlIGlmICh0 ZXN0ID09IERFR0FNTUFfVEVTVCkgewo+ICsJCQkJaWYgKGVuYWJsZV9pbiA9PSBFTkFCTEUpIHsK PiArCQkJCQlpZ3Rfc3VidGVzdF9mKCJFbmFibGVfRGUtZ2FtbWEiKQo+ICsJCQkJCQl0ZXN0X3Bp cGVfY29sb3IoJmRhdGEsICJkZWdhbW1hX3Byb3BlcnR5IiwgRU5BQkxFLCBkaXNwbGF5LCB2YWx1 ZXMpOwo+ICsJCQkJfSBlbHNlIHsKPiArCQkJCQlpZ3Rfc3VidGVzdF9mKCJEaXNhYmxlX0RlLWdh bW1hIikKPiArCQkJCQkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCAiZGVnYW1tYV9wcm9wZXJ0eSIs IERJU0FCTEUsIGRpc3BsYXksIHZhbHVlcyk7Cj4gKwo+ICsJCQkJfSB9IGVsc2Ugewo+ICsJCQkJ CXByaW50X3VzYWdlKCk7Cj4gKwkJCQl9Cj4gKwkJfQo+ICsKPiArCX0KPiArCWlndF9maXh0dXJl ewo+ICsJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7Cj4gKwl9Cj4gKwlpZ3RfZXhp dCgpOwo+ICt9Cj4gKwo+IC0tIAo+IDEuOS4xCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVu Z2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=