From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 52ADF6E01F for ; Fri, 21 Sep 2018 22:10:11 +0000 (UTC) Date: Fri, 21 Sep 2018 15:10:10 -0700 From: Tarun Vyas Message-ID: <20180921221010.GA24690@otc-chromeosbuild-5> References: <20180914235702.27428-1-tarun.vyas@intel.com> <1795913.BsR4cFQdua@dk> <20180921203606.GA125488@otc-chromeosbuild-5> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Subject: Re: [igt-dev] [PATCH i-g-t v3] tools: Add a simple tool to read/write/decode dpcd registers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Pandiyan, Dhinakaran" Cc: "igt-dev@lists.freedesktop.org" , "Vivi, Rodrigo" List-ID: T24gRnJpLCBTZXAgMjEsIDIwMTggYXQgMDI6MDk6MzZQTSAtMDcwMCwgUGFuZGl5YW4sIERoaW5h a2FyYW4gd3JvdGU6Cj4gCj4gCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+ID4gRnJv bTogVnlhcywgVGFydW4KPiA+IFNlbnQ6IEZyaWRheSwgU2VwdGVtYmVyIDIxLCAyMDE4IDE6MzYg UE0KPiA+IFRvOiBQYW5kaXlhbiwgRGhpbmFrYXJhbiA8ZGhpbmFrYXJhbi5wYW5kaXlhbkBpbnRl bC5jb20+Cj4gPiBDYzogaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IFZpdmksIFJvZHJp Z28gPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Cj4gPiBTdWJqZWN0OiBSZTogW2lndC1kZXZdIFtQ QVRDSCBpLWctdCB2M10gdG9vbHM6IEFkZCBhIHNpbXBsZSB0b29sIHRvCj4gPiByZWFkL3dyaXRl L2RlY29kZSBkcGNkIHJlZ2lzdGVycwo+ID4gCj4gPiBPbiBUaHUsIFNlcCAyMCwgMjAxOCBhdCAx MToxMjo0OVBNIC0wNzAwLCBEaGluYWthcmFuIFBhbmRpeWFuIHdyb3RlOgo+ID4gPiBPbiBGcmlk YXksIFNlcHRlbWJlciAxNCwgMjAxOCA0OjU3OjAyIFBNIFBEVCBUYXJ1biBWeWFzIHdyb3RlOgo+ ID4gPiA+IFRoaXMgdG9vbCBzZXJ2ZXMgYXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgY29uc3RydWN0 cyBwcm92aWRlZCBieSB0aGUKPiA+ID4gPiBkcm1fZHBjZF9hdXhfZGV2IGtlcm5lbCBtb2R1bGUg Ynkgd29ya2luZyBvbiB0aGUKPiA+IC9kZXYvZHJtX2RwX2F1eFtuXQo+ID4gPiA+IGRldmljZXMg Y3JlYXRlZCBieSB0aGUga2VybmVsIG1vZHVsZS4KPiA+ID4gPiBJdCBzdXBwb3J0cyByZWFkaW5n IGFuZCB3cml0aW5nIGRwY2QgcmVnaXN0ZXJzIG9uIHRoZSBjb25uZWN0ZWQgYXV4Cj4gPiA+ID4g Y2hhbm5lbHMuCj4gPiA+ID4gSW4gdGhlIGZvbGxvdy11cCBwYXRjaCwgc3VwcG9ydCBmb3IgZGVj b2RpbmcgdGhlc2UgcmVnaXN0ZXJzIHdpbGwgYmUKPiA+ID4gPiBhZGRlZCB0byBmYWNpbGF0ZSBk ZWJ1Z2dpbmcgcGFuZWwgcmVsYXRlZCBpc3N1ZXMuCj4gPiA+ID4KPiA+ID4gPiB2MjogKEZpeGVz IGJ5IFJvZHJpZ28gYnV0IG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB5ZXQpOgo+ID4gPiA+ICAgICAt IEluZGVudGF0aW9ucywgVHlwbywgTWlzc2VkIHNwYWNlcwo+ID4gPiA+ICAgICAtIFJlbW92aW5n IG1lbnRpb25pbmcgdG8gZGVjb2RlIGFuZCBzcGVjIHRoYXQgaXMgbm90IGltcGxlbWVudGVkCj4g PiB5ZXQuCj4gPiA+ID4gICAgIC0gQWRkIE1ha2VmaWxlLnNvdXJjZXMgYmFjawo+ID4gPiA+ICAg ICAtIE1pc3NlZCBzL3ByaW50Zi9pZ3Rfd2Fybgo+ID4gPiA+Cj4gPiA+ID4gdjM6Cj4gPiA+ID4g ICAgIC0gQWRkcmVzIERLJ3MgcmV2aWV3IGNvbW1lbnRzIGZyb20gdjIgYWJvdmUuCj4gPiA+ID4g ICAgIC0gU3F1YXNoIFJvZHJpZ28ncyBmaWxlIGhhbmRsaW5nIHVuaWZpY2F0aW9uIHBhdGNoLgo+ ID4gPiA+ICAgICAtIE1ha2UgY291bnQsIG9mZnNldCBhbmQgZGV2aWNlIGlkIG9wdGlvbmFsLgo+ ID4gPiA+Cj4gPiA+ID4gU3VnZ2VzdGVkLWJ5OiBEaGluYWthcmFuIFBhbmRpeWFuIDxkaGluYWth cmFuLnBhbmRpeWFuQGludGVsLmNvbT4KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBUYXJ1biBWeWFz IDx0YXJ1bi52eWFzQGludGVsLmNvbT4KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBSb2RyaWdvIFZp dmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Cj4gPiA+ID4gLS0tCj4gPiA+ID4gIHRvb2xzL01h a2VmaWxlLnNvdXJjZXMgfCAgIDEgKwo+ID4gPiA+ICB0b29scy9kcGNkX3JlZy5jICAgICAgIHwg MjEzCj4gPiA+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+ID4gdG9vbHMvbWVzb24uYnVpbGQgICAgICB8Cj4gPiA+ID4gIDEgKwo+ID4gPiA+ICAz IGZpbGVzIGNoYW5nZWQsIDIxNSBpbnNlcnRpb25zKCspCj4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCB0b29scy9kcGNkX3JlZy5jCj4gPiA+ID4KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvdG9vbHMv TWFrZWZpbGUuc291cmNlcyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMgaW5kZXgKPiA+ID4gPiBh YmQyM2EwZi4uNTA3MDZmNDEgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvdG9vbHMvTWFrZWZpbGUuc291 cmNlcwo+ID4gPiA+ICsrKyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKPiA+ID4gPiBAQCAtNyw2 ICs3LDcgQEAgbm9pbnN0X1BST0dSQU1TID0JCVwKPiA+ID4gPgo+ID4gPiA+ICB0b29sc19wcm9n X2xpc3RzID0JCVwKPiA+ID4gPiAgCWlndF9zdGF0cwkJXAo+ID4gPiA+ICsJZHBjZF9yZWcJCVwK PiA+ID4gPiAgCWludGVsX2F1ZGlvX2R1bXAJXAo+ID4gPiA+ICAJaW50ZWxfcmVnCQlcCj4gPiA+ ID4gIAlpbnRlbF9iYWNrbGlnaHQJCVwKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvdG9vbHMvZHBjZF9y ZWcuYyBiL3Rvb2xzL2RwY2RfcmVnLmMgbmV3IGZpbGUgbW9kZQo+ID4gPiA+IDEwMDY0NCBpbmRl eCAwMDAwMDAwMC4uY2Q5ZmVkNGYKPiA+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ID4gKysrIGIv dG9vbHMvZHBjZF9yZWcuYwo+ID4gPiA+IEBAIC0wLDAgKzEsMjEzIEBACj4gPiA+ID4gKy8qCj4g PiA+ID4gKyAqIENvcHlyaWdodCAoYykgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gPiA+ICsg Kgo+ID4gPiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbgo+ID4gPiA+ICtvYnRhaW5pbmcgYQo+ID4gPiA+ICsgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4g PiA+ID4gIlNvZnR3YXJlIiksICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLAo+ID4gPiA+IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCj4gPiA+ID4gbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YKPiA+ID4gPiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSArICogU29mdHdhcmUg aXMKPiA+ID4gPiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOiArICoKPiA+ID4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZwo+ID4gPiA+ICsgdGhlCj4gPiA+ID4g bmV4dCArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsCj4gPiA+ID4gcG9ydGlvbnMgb2YgdGhlICsgKiBTb2Z0d2FyZS4KPiA+ID4gPiAr ICoKPiA+ID4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZCj4gPiBLSU5ELAo+ID4gPiA+ICsgRVhQUkVTUwo+ID4gPiA+IE9SICsg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G Cj4gPiA+ID4gTUVSQ0hBTlRBQklMSVRZLCArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5ECj4gPiBOT05JTkZSSU5HRU1FTlQuCj4gPiA+ID4gSU4gTk8gRVZFTlQgU0hBTEwg KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRQo+ID4gRk9SCj4g PiA+ID4gQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICsgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OCj4gPiBPRgo+ID4gPiA+IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORyBGUk9NLCArICogT1VUIE9GIE9SIElOCj4gPiA+ID4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCj4gPiBUSEUgKyAqIFNP RlRXQVJFLgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBEUENEIHJlZ2lzdGVyIHJlYWQvd3JpdGUg dG9vbAo+ID4gPiA+ICsgKiBUaGlzIHRvb2wgd3JhcHMgYXJvdW5kIERSTV9EUF9BVVhfREVWIG1v ZHVsZSB0byBwcm92aWRlIERQQ0QKPiA+ID4gPiArIHJlZ2lzdGVyCj4gPiA+ID4gcmVhZCArICog YW5kIHdyaXRlLCBzbyBDT05GSUdfRFJNX0RQX0FVWF9ERVYgbmVlZHMgdG8gYmUgc2V0Lgo+ID4g PiA+ICsgKi8KPiA+ID4gPiArCj4gPiA+ID4gKyNpbmNsdWRlICJpZ3RfY29yZS5oIgo+ID4gPiBX aGF0J3MgdGhlIGRlcGVuZGVuY3kgb24gaWd0X2NvcmUgaGVyZT8KPiA+ID4KPiA+IEZvcmdvdCB0 byByZW1vdmUgaXQuCj4gPiA+ID4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ID4gPiA+ICsjaW5jbHVk ZSA8ZmNudGwuaD4KPiA+ID4gPiArI2luY2x1ZGUgPGxpbWl0cy5oPgo+ID4gPiA+ICsKPiA+ID4g PiArI2RlZmluZSBNQVhfT0ZGU0VUCTB4ZjAyZmYKPiA+ID4gSSB0aGluayB3ZSBzaG91bGQgYmUg YWJsZSB0byBhbGxvdyBhbGxvdyB1cCB0byB0aGUgbWF4IGxpbWl0IG9mCj4gPiA+IDB4ZmZmZmYg KERQCj4gPiA+IDEuNCBzZWN0aW9uIDIuOS4zKQo+ID4gPgo+ID4gV2lsbCBtb2RpZnkuCj4gPiA+ ID4gKwo+ID4gPiA+ICtjb25zdCBjaGFyIGF1eF9kZXZbXSA9ICIvZGV2L2RybV9kcF9hdXgiOwo+ ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIHZvaWQgcHJpbnRfdXNhZ2UoY2hhciAqdG9vbCwgaW50 IGV4aXRfY29kZSkgewo+ID4gPiA+ICsJcHJpbnRmKCJEUENEIHJlZ2lzdGVyIHJlYWQgYW5kIHdy aXRlIHRvb2xcblxuIik7Cj4gPiA+ID4gKwlwcmludGYoIlRoaXMgdG9vbCByZXF1aXJlcyBDT05G SUdfRFJNX0RQX0FVWF9DSEFSREVWXG4iCj4gPiA+ID4gKwkJICJ0byBiZSBzZXQgaW4gdGhlIGtl cm5lbCBjb25maWcuXG5cbiIpOwo+ID4gPiBJIHRoaW5rIGl0IHdvdWxkIGxvb2sgYmV0dGVyIHRv IHByaW50IHRoZSBhYm92ZSBsaW5lcyBvbmx5IHdoZW4KPiA+ID4gLS1oZWxwLy1oIHdhcyBwYXNz ZWQuICBNb3ZlIHRoaXMgdW5kZXIgIGNhc2UgJ2gnID8KPiA+ID4KPiA+IFdpbGwgZG8KPiA+ID4g PiArCXByaW50ZigiVXNhZ2U6ICVzIFtPUFRJT04gLi4uXSBDT01NQU5EXG5cbiIsIHRvb2wpOwo+ ID4gPiA+ICsJcHJpbnRmKCJDT01NQU5EIGlzIG9uZSBvZjpcbiIpOwo+ID4gPiA+ICsJcHJpbnRm KCIgIHJlYWQ6CQlSZWFkIFtjb3VudF0gYnl0ZXMgZHBjZCByZWcgYXQgYW4gb2Zmc2V0XG4iKTsK PiA+ID4gPiArCXByaW50ZigiICB3cml0ZToJV3JpdGUgYSBkcGNkIHJlZyBhdCBhbiBvZmZzZXRc blxuIik7Cj4gPiA+ID4gKwlwcmludGYoIk9wdGlvbnMgZm9yIHRoZSBhYm92ZSBDT01NQU5EUyBh cmVcbiIpOwo+ID4gPiA+ICsJcHJpbnRmKCIgLS1kZXZpY2U9REVWSUQJCUF1eCBkZXZpY2UgaWQs IGFzIGxpc3RlZCBpbgo+ID4gPiA+IC9kZXYvZHJtX2RwX2F1eF9kZXZbbl0uIiArCj4gPiAJIkRl ZmF1bHRzIHRvIDBcbiIpOwo+ID4gPiA+ICsJcHJpbnRmKCIgLS1vZmZzZXQ9UkVHX0FERFIJRFBD RCByZWdpc3RlciBvZmZzZXQgaW4gaGV4LiBEZWZhdWx0cwo+ID4gdG8KPiA+ID4gPiAweDAwXG4i KTsgKwlwcmludGYoIiAtLWNvdW50PUJZVEVTCQlGb3IgcmVhZHMsIHNwZWNpZnkgbnVtYmVyIG9m Cj4gPiBieXRlcyB0bwo+ID4gPiA+IGJlIHJlYWQgZnJvbSIgKwkJCQkJInRoZSBvZmZzZXQuIERl ZmF1bHRzCj4gPiB0byAxXG4iKTsKPiA+ID4gPiArCXByaW50ZigiIC0tdmFsCQkJRm9yIHdyaXRl cywgc3BlY2lmeSBhIGhleCB2YWx1ZSB0byBiZQo+ID4gd3JpdHRlblxuXG4iKTsKPiA+ID4gPiAr Cj4gPiA+ID4gKwlwcmludGYoIiAtLWhlbHA6IHByaW50IHRoZSB1c2FnZVxuIik7Cj4gPiA+ID4g Kwo+ID4gPiA+ICsJZXhpdChleGl0X2NvZGUpOwo+ID4gPiBNb2RpZnkgdGhlIGNhbGxlcnMgc28g dGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBleGl0IGZyb20gYSBwcmludCBmdW5jdGlvbi4KPiA+ID4K PiA+IFdpbGwgZG8uCj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgZHBj ZF9yZWFkKGludCBmZCwgY29uc3QgdWludDMyX3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpCj4gPiA+ IGNvbnN0IGlzIG5vdCBuZWVkZWQgYXMgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ5IHZhbHVl Lgo+ID4gPgo+ID4gV2lsbCByZW1vdmUgaXQuCj4gPiA+ID4gK3sKPiA+ID4gPiArCWludCByZXQs IGk7Cj4gPiA+ID4gKwl2b2lkICpidWYgPSBjYWxsb2MoY291bnQsIHNpemVvZih1aW50OF90KSk7 Cj4gPiA+IHVpbnQ4X3QgKmJ1ZiA/Cj4gPiA+Cj4gPiBIZWgsIHllYS4KPiA+ID4gPiArCj4gPiA+ ID4gKwlpZiAoIWJ1Zikgewo+ID4gPiA+ICsJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgYWxsb2Nh dGUgcmVhZCBidWZmZXJcbiIpOwo+ID4gPiA+ICsJCXJldHVybiBFTk9NRU07Cj4gPiA+ID4gKwl9 Cj4gPiA+ID4gKwo+ID4gPiA+ICsJcmV0ID0gcHJlYWQoZmQsIGJ1ZiwgY291bnQsIG9mZnNldCk7 Cj4gPiA+ID4gKwlpZiAocmV0ICE9IGNvdW50KSB7Cj4gPiA+ID4gKwkJZnByaW50ZihzdGRlcnIs ICJGYWlsZWQgdG8gcmVhZCAtICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwo+ID4gPiBQcmludCBy ZXQgdG9vPyBJZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgd2VyZSBsb3dlciwgZXJybm8gd29u J3QgYmUgc2V0Lgo+ID4gPgo+ID4gT2sKPiA+ID4gPiArCQlyZXQgPSBlcnJubzsKPiA+ID4gPiAr CQlnb3RvIG91dDsKPiA+ID4gPiArCX0gZWxzZQo+ID4gPiB9IGVsc2Ugewo+ID4gPgo+ID4gPiA+ ICsJCXJldCA9IEVYSVRfU1VDQ0VTUzsKPiA+ID4gSW50aWFsaXplIHJldCAgYW5kIGdldCByaWQg b2YgdGhlIGVsc2UgYmxvY2s/Cj4gPiA+Cj4gPiBBeWUKPiA+ID4gPiArCj4gPiA+ID4gKwlwcmlu dGYoIlJlYWQgJXp1IGJ5dGUocykgc3RhcnRpbmcgYXQgb2Zmc2V0ICV4XG5cbiIsIGNvdW50LAo+ ID4gPiA+ICtvZmZzZXQpOwo+ID4gPiBQcmludCB0aGlzIGRlYnVnIG1lc3NhZ2Ugb25seSBpZiB0 aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGJ5dGVzIHdlcmVuJ3QKPiA+ID4gcmVhZCBhbmQgc29tZXRo aW5nIGxpa2UgcHJpbnRmKCJSZWFkICV6dSBieXRlcywgZXhwZWN0ZWQgJXp1XG4iKTsKPiA+ID4K PiA+ID4gcHJpbnRmKCIweCIpOyB0byBjbGFyaWZ5IHRoYXQgdGhlIHByaW50ZWQgdmFsdWVzIGFy ZSBpbiBoZXguCj4gPiBXaWxsIG1vZGlmeQo+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IGNvdW50 OyBpKyspCj4gPiA+ID4gKwkJcHJpbnRmKCIgJTAyeCIsICooKCh1aW50OF90ICopKGJ1ZikpICsg aSkpOwo+ID4gPiBZb3UgY2FuIGF2b2lkIHR5cGVjYXN0aW5nIGlmIHlvdSBkZWZpbmUgdGhlIGFy cmF5IGFzIHR5cGUgdWludDhfdAo+ID4gPgo+ID4gPiA+ICsJcHJpbnRmKCJcbiIpOwo+ID4gPiA+ ICsKPiA+ID4gPiArb3V0Ogo+ID4gPiA+ICsJZnJlZShidWYpOwo+ID4gPiA+ICsJcmV0dXJuIHJl dDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBkcGNkX3dyaXRlKGlu dCBmZCwgY29uc3QgdWludDMyX3Qgb2Zmc2V0LCBjb25zdCB1aW50OF90Cj4gPiA+ID4gK3ZhbCkK PiA+ID4gY29uc3QgaXNuJ3QgbmVlZGVkLgo+ID4gPgo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlpbnQg cmV0Owo+ID4gPiA+ICsKPiA+ID4gPiArCXJldCA9IHB3cml0ZShmZCwgKGNvbnN0IHZvaWQgKikm dmFsLCBzaXplb2YodWludDhfdCksIG9mZnNldCk7Cj4gPiA+ID4gKwlpZiAocmV0IDwgMCkgewo+ ID4gPiA+ICsJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHdyaXRlIC0gJXNcbiIsIHN0cmVy cm9yKGVycm5vKSk7Cj4gPiA+IFNhbWUgYXMgYWJvdmUsIHByaW50IG51bWJlciBvZiBieXRlcyB3 cml0dGVuIGluIGNhc2Ugb2YgZXJyb3IuCj4gPiA+Cj4gPiA+ID4gKwkJcmV0dXJuIGVycm5vOwo+ ID4gPiA+ICsJfSBlbHNlCj4gPiA+ID4gKwkJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKPiA+ID4gWW91 IGNvdWxkIGF2b2lkICdlbHNlJyBoZXJlLgo+ID4gPgo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4g PiA+ICtpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gPiA+ID4gK3sKPiA+ID4gPiAr CWNoYXIgZGV2X25hbWVbMjBdOwo+ID4gPiA+ICsJaW50IHJldCwgZGV2aWQsIGZkLCB2ZmxhZyA9 IDA7Cj4gPiA+ID4gKwl1aW50MzJfdCBvZmZzZXQ7Cj4gPiA+ID4gKwl1aW50OF90IHZhbDsKPiA+ ID4gPiArCXNpemVfdCBjb3VudDsKPiA+ID4gPiArCWludCBmaWxlX29wID0gT19SRE9OTFk7Cj4g PiA+ID4gKwo+ID4gPiA+ICsJZW51bSBjb21tYW5kIHsKPiA+ID4gPiArCQlJTlYgPSAtMSwKPiA+ ID4gPiArCQlSRUFEID0gMiwKPiA+ID4gQW55IHJlYXNvbiB0byBub3QgdXNlIHRoZSB2YWx1ZSBj b21waWxlciBnZW5lcmF0ZXM/Cj4gPiA+Cj4gPiBJIHdhbnRlZCB0byBpbml0IElOVkFMSUQgd2l0 aCBhbiAtdmUgdmFsdWUuIEp1c3QgZm9sbG93aW5nIHRoZSB0cmVuZCBmcm9tCj4gPiBpbnRlbF9y ZWcuCj4gPiA+ID4gKwkJV1JJVEUsCj4gPiA+ID4gKwl9IGNtZCA9IElOVjsKPiA+ID4gPiArCj4g PiA+ID4gKwlzdHJ1Y3Qgb3B0aW9uIGxvbmdvcHRzW10gPSB7Cj4gPiA+ID4gKwkJeyAiY291bnQi LAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJCSdjJyB9LAo+ID4gPiA+ICsJCXsgImRldmljZSIs CXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLAkJJ2QnIH0sCj4gPiA+ID4gKwkJeyAiaGVscCIsCW5v X2FyZ3VtZW50LAkJTlVMTCwJCSdoJyB9LAo+ID4gPiA+ICsJCXsgIm9mZnNldCIsCXJlcXVpcmVk X2FyZ3VtZW50LAlOVUxMLAkJJ28nIH0sCj4gPiA+ID4gKwkJeyAidmFsdWUiLAlyZXF1aXJlZF9h cmd1bWVudCwJJnZmbGFnLAkJJ3YnIH0sCj4gPiA+ID4gKwkJeyAwIH0KPiA+ID4gPiArCX07Cj4g PiA+ID4gKwo+ID4gPiA+ICsJZGV2aWQgPSAwLCBjb3VudCA9IDEsIG9mZnNldCA9IDB4MDsKPiA+ ID4gPiArCj4gPiA+ID4gKwl3aGlsZSAoKHJldCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICIt OmM6ZDpoOm86IiwgbG9uZ29wdHMsCj4gPiA+ID4gK05VTEwpKSAhPQo+ID4gPiBBbnkgcmVhc29u IHRvIGxlYXZlIG91dCB0aGUgb3B0aW9uIC12ID8gQW5kICctaCcgc2hvdWxkbid0IG5lZWQgYW4K PiA+IGFyZ3VtZW50Lgo+ID4gPgo+ID4gPgo+ID4gSSBkaWRudCB3YW4ndCB0byByZWx5IG9uIGlu aXRpYWxpemluZyB0aGUgKndyaXRlIHZhbHVlKiB3aXRoIGFuIGludmFsaWQgLCBzbyBiYXNlZAo+ ID4gb24gdGhlIHZmbGFnLCB3ZSdsbCBrbm93IGlmIHRoZSB3cml0ZSB2YWx1ZSB3YXMgZXZlciBz ZXQgb3Igbm90IGFuZCBlcnJvciBvdXQKPiA+IGFjY29yZGluZ2x5Lgo+ID4gZ2V0b3B0X2xvbmcg d2lsbCBvbmx5IGNvbXBsYWluIGlmIHRoZSB1c2VyIHN1cHBsaWVzIC0tdmFsdWUgb3B0aW9uIGJ1 dCBubwo+ID4gYXJndW1lbnQgd2l0aCBpdC4gSWYgdGhlIHVzZXIgY2hvb3NlcyB0byBjb21wbGV0 ZWx5IHNraXAgdGhlIC0tdmFsdWUgb3B0aW9uCj4gPiB0aGVuIHdlIHdvbid0IGtub3cuCj4gCj4g U2hvdWxkbid0IHRoZSB0b29sIGFjY2VwdCAtdiA8Zm9vPiB0b28/Cj4KWWVhIGdldG9wdF9sb25n IHdpbGwgYWNjZXB0IGJvdGggc2hvcnQgYW5kIGxvbmcgb3B0aW9ucy4gQm90aCBvZiB0aGVtIHdp bGwgYmUgY2F1Z2h0IGJ5IHRoZSBzYW1lIGNhc2UgaW4gdGhlIHN3aXRjaC4gCj4gPiA+ID4gLTEp IHsgKwkJc3dpdGNoIChyZXQpIHsKPiA+ID4gPiArCQljYXNlICdjJzoKPiA+ID4gPiArCQkJY291 bnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMTApOwo+ID4gPiBXaXRoIHN0cnRvbCgpIHlvdSBz aG91bGQgYmUgYWJsZSByZWplY3QgYWxsIG5lZ2F0aXZlIGFyZ3MgYW5kIG1ha2UgdXNlCj4gPiA+ IG9mIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gcmVqZWN0IGludmFsaWQgbnVtYmVycy4KPiA+ID4K PiA+IEhtbSwgbWFrZXMgc2Vuc2UuCj4gPiA+ID4gKwkJCWlmIChjb3VudCA9PSBVTE9OR19NQVgp IHsKPiA+ID4gPiArCQkJCWZwcmludGYoc3RkZXJyLCAiQ291bnQgYXJndW1lbnQgdG9vIGJpZ1xu Iik7Cj4gPiA+ID4gKwkJCQlleGl0KEVSQU5HRSk7Cj4gPiA+ID4gKwkJCX0KPiA+ID4gPiArCQkJ YnJlYWs7Cj4gPiA+ID4gKwkJY2FzZSAnZCc6Cj4gPiA+ID4gKwkJCWRldmlkID0gc3RydG91bChv cHRhcmcsIE5VTEwsIDEwKTsKPiA+ID4gU2FtZSBoZXJlLCBzdHJ0b2woKSB0byByZWplY3QgbmVn YXRpdmVzIGFuZCB1c2UgKiplbmRwdHIgdG8gZmFpbCBvbgo+ID4gPiBpbnZhbGlkIG51bWJlcnMu Cj4gPiA+Cj4gPiA+ID4gKwkJCWlmIChkZXZpZCA9PSBVTE9OR19NQVgpIHsKPiA+ID4gPiArCQkJ CWZwcmludGYoc3RkZXJyLCAiRGV2aWQgYXJndW1lbnQgdG9vIGJpZ1xuIik7Cj4gPiA+Cj4gPiA+ ID4gKwkJCQlleGl0KEVSQU5HRSk7Cj4gPiA+ID4gKwkJCX0KPiA+ID4gPiArCQkJYnJlYWs7Cj4g PiA+ID4gKwkJY2FzZSAnaCc6Cj4gPiA+ID4gKwkJCXByaW50X3VzYWdlKGFyZ3ZbMF0sIEVYSVRf U1VDQ0VTUyk7Cj4gPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiA+ICsJCWNhc2UgJ28nOgo+ID4gPiA+ ICsJCQlvZmZzZXQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMTYpOwo+ID4gPiBTYW1lIGNvbW1l bnQgYXMgZm9yICdkJy4gIFlvdSBtaWdodCBhbHNvIHdhbnQgdG8gY2hlY2sgaWYgZXJybm8gaXMg c2V0Lgo+ID4gPgo+ID4gPiA+ICsJCQlpZiAob2Zmc2V0ID4gTUFYX09GRlNFVCkgewo+ID4gPiA+ ICsJCQkJZnByaW50ZihzdGRlcnIsICJPZmZzZXQgc2hvdWxkIGJlIDw9Cj4gPiAweGYwMmZmXG4i KTsKPiA+ID4gPiArCQkJCWV4aXQoRVJBTkdFKTsKPiA+ID4gPiArCQkJfQo+ID4gPiA+ICsJCQli cmVhazsKPiA+ID4gPiArCQljYXNlIDA6Cj4gPiA+ID4gKwkJCWlmICh2ZmxhZyA9PSAndicgJiYg b3B0YXJnKQo+ID4gPiBJIGRpZG4ndCBnZXQgd2h5ICZ2ZmxhZyBoYWQgdG8gYmUgdXNlZC4KPiA+ ID4KPiA+IE15IGlkZWEgd2FzIHRvIHVzZSB0aGUgdmZsYWcgdG8gY2hlY2sgaWYgLS12YWx1ZSBv cHRpb24gd2FzIHVzZWQgYXQgYWxsIG9yIG5vdC4KPiAKPiBNYWtlcyBzZW5zZS4gSG93IGFib3V0 IGZhaWxpbmcgLS12YWx1ZSBvciAtdiB3YXMgdXNlZCBhbG9uZyB3aXRoIHJlYWQ/Cj4gCkkgdGhv dWdodCBvZiB0aGF0LCBidXQgbGVmdCBpdCBvdXQgYmVjYXVzZSB3ZSBkb250IHBhc3MgaXQgdGhl IHJlYWQgZnVuY3Rpb24sIHNvIGV2ZW4gaWYgc29tZW9uZSBpbmFkdmVydGVudGx5IGRvZXMgdGhh dCwgdGhlIHRvb2wgd2lsbCBzdGlsbCBkdW1wIHRoZSByZWcgdmFsdWUuIEkgY2FuIGNoYW5nZSB0 aGF0IGlmIHlvdSB3YW50Lgo+ID4gPiA+ICsJCQkJdmFsID0gKHVpbnQ4X3QpIHN0cnRvdWwob3B0 YXJnLCBOVUxMLCAxNik7Cj4gPiA+IFJlamVjdCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDB4ZmY/Cj4g PiA+Cj4gPiB1aW50OF90IGNhc3Qgc2hvdWxkIHRydW5jYXRlIGV2ZXJ5dGhpbmcsIGJ1dCB5ZWEs IEknbGwgZXhwbGljaXRseSBjaGVjayBmb3IKPiA+IGFueXRoaW5nID4gMHhmZi4KPiA+ID4gPiAr CQkJYnJlYWs7Cj4gPiA+ID4gKwkJLyogQ29tbWFuZCBwYXJzaW5nICovCj4gPiA+ID4gKwkJY2Fz ZSAxOgo+ID4gPiA+ICsJCQlpZiAoc3RyY21wKG9wdGFyZywgInJlYWQiKSA9PSAwKSB7Cj4gPiA+ ID4gKwkJCQljbWQgPSBSRUFEOwo+ID4gPiA+ICsJCQl9IGVsc2UgaWYgKHN0cmNtcChvcHRhcmcs ICJ3cml0ZSIpID09IDApIHsKPiA+ID4gPiArCQkJCWNtZCA9IFdSSVRFOwo+ID4gPiA+ICsJCQkJ ZmlsZV9vcCA9IE9fV1JPTkxZOwo+ID4gPiA+ICsJCQl9Cj4gPiA+ID4gKwkJCWJyZWFrOwo+ID4g PiAgfSBlbHNlIHsKPiA+ID4gIGFuZCBleGl0IGhlcmU/ICBvciBmYWxsIHRocm91Z2ggdG8gZGVm YXVsdCBibG9jayBieSByZS1hcnJhbmdpbmcgdGhlIGJsb2Nrcy4KPiA+ID4KPiA+IEFscmlnaHQK PiA+ID4gPiArCQljYXNlICc6JzoKPiA+ID4gPiArCQkJZnByaW50ZihzdGRlcnIsICJUaGUgLSVj IG9wdGlvbiBvZiAlcyByZXF1aXJlcyBhbgo+ID4gYXJndW1lbnRcbiIsCj4gPiA+ID4gKwkJCQkg b3B0b3B0LCBhcmd2WzBdKTsKPiA+ID4KPiA+ID4gUHJpbnRzICJUaGUgLWMgb3B0aW9uIG9mIHRv b2xzL2RwY2RfcmVnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiwgaXMgdGhhdAo+ID4gPiB3aGF0IHlv dSBpbnRlbmRlZD8gU2tpcCBwcmludGluZyB0aGUgdG9vbCBwYXRoPwo+ID4gPgo+ID4gT2ggbm8s IHRoZSAlYyBpcyB0aGUgZm9ybWF0IHNwZWNpZmllci4gU28sIGlmIGNvdW50LCBkZXZpZCwgb2Zm c2V0IGV0Yy4gYXJlCj4gPiBwYXNzZWQgdy9vIGFuIGFyZ3VtZW50LCB0aGVuIHRoaXMgd2lsbCBw cmludCBzb21ldGhpbmcgbGlrZSAiVGhlIC12IG9wdGlvbiBvZgo+ID4gdG9vbHMvZHBjZF9yZWcg cmVxdWlyZXMgYW4gYXJndW1lbnQiLCBmb3IgdGhlIHZhbHVlIGFyZ3VtZW50LCBpbiB0aGlzIGNh c2UsCj4gPiBvciAtZCBmb3IgdGhlIGRldmlkIGFyZ3VtZW50IGFuZCBzbyBvbi4KPiAKPiBJIG1l YW50IHByaW50aW5nICJ0b29scy9kcGNkX3JlZyIgd2FzIHJlZHVuZGFudCBhbmQgSSB1c2VkIC1j IChjb3VudCkgd2l0aG91dCBhbiBhcmcgYXMgZXhhbXBsZS4KPiAKQWggb2ssIHdpbGwgcmVtb3Zl IGl0Lgo+IC1ESwo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK