From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 1/4] drm: Add helper for DP++ adaptors Date: Thu, 31 Mar 2016 23:33:47 +0300 Message-ID: <20160331203347.GQ4329@intel.com> References: <1456245988-19442-1-git-send-email-ville.syrjala@linux.intel.com> <1456245988-19442-2-git-send-email-ville.syrjala@linux.intel.com> <1459452333.2359.23.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1459452333.2359.23.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Zanoni, Paulo R" Cc: "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBNYXIgMzEsIDIwMTYgYXQgMDc6MjU6MzZQTSArMDAwMCwgWmFub25pLCBQYXVsbyBS IHdyb3RlOgo+IEVtIFRlciwgMjAxNi0wMi0yMyDDoHMgMTg6NDYgKzAyMDAsIHZpbGxlLnN5cmph bGFAbGludXguaW50ZWwuY29tCj4gZXNjcmV2ZXU6Cj4gPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6Qg PHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gCj4gPiBBZGQgYSBoZWxwZXIgd2hp Y2ggYWlkcyBpbiBoZSBpZGVudGlmaWNhdGlvbiBvZiBEUCBkdWFsIG1vZGUgKGFrYS4KPiA+IERQ KyspCj4gPiBhZGFwdG9ycy4gVGhlcmUgYXJlIHNldmVyYWwgdHlwZXMgb2YgYWRhcHRvcnMgc3Bl Y2lmaWVkOgo+ID4gdHlwZSAxIERWSSwgdHlwZSAxIEhETUksIHR5cGUgMiBEVkksIHR5cGUgMiBI RE1JCj4gPiAKPiA+IFR5cGUgMSBhZGFwdG9ycyBoYXZlIGEgbWF4IFRNRFMgY2xvY2sgbGltaXQg b2YgMTY1TUh6LCB0eXBlIDIKPiA+IGFkYXB0b3JzCj4gPiBtYXkgZ28gYXMgaGlnaCBhcyAzMDBN SHogYW5kIHRoZXkgcHJvdmlkZSBhIHJlZ2lzdGVyIGluZm9ybWluZyB0aGUKPiA+IHNvdXJjZSBk ZXZpY2Ugd2hhdCB0aGUgYWN0dWFsIGxpbWl0IGlzLiBTdXBwb3NlZGx5IGFsc28gdHlwZSAxCj4g PiBhZGFwdG9ycwo+ID4gbWF5IG9wdGlvbmFsbHkgaW1wbGVtZW50IHRoaXMgcmVnaXN0ZXIuIFRo aXMgVE1EUyBjbG9jayBsaW1pdCBpcyB0aGUKPiA+IG1haW4gcmVhc29uIHdoeSB3ZSBuZWVkIHRv IGlkZW50aWZ5IHRoZXNlIGFkYXB0b3JzLgo+ID4gCj4gPiBUeXBlIDEgYWRhcHRvcnMgcHJvdmlk ZSBhY2Nlc3MgdG8gdGhlaXIgaW50ZXJuYWwgcmVnaXN0ZXJzIGFuZCB0aGUKPiA+IHNpbmsKPiA+ IEREQyBidXMgdGhyb3VnaCBJMkMuIFR5cGUgMiBhZGFwdG9ycyBwcm92aWRlIHRoaXMgYWNjZXNz IGJvdGggdmlhIEkyQwo+ID4gYW5kIEkyQy1vdmVyLUFVWC4gQSB0eXBlIDIgc291cmNlIGRldmlj ZSBtYXkgY2hvb3NlIHRvIGltcGxlbWVudAo+ID4gZWl0aGVyCj4gPiBvciBib3RoIG9mIHRoZXNl IG1ldGhvZHMuIElmIGEgc291cmNlIGRldmljZSBpbXBsZW1lbnRzIG9ubHkgdGhlCj4gPiBJMkMt b3Zlci1BVVggbWV0aG9kLCB0aGVuIHRoZSBkcml2ZXIgd2lsbCBvYnZpb3VzbHkgbmVlZCBzcGVj aWZpYwo+ID4gc3VwcG9ydCBmb3Igc3VjaCBhZGFwdG9ycyBzaW5jZSB0aGUgcG9ydCBpcyBkcml2 ZW4gbGlrZSBhbiBIRE1JIHBvcnQsCj4gPiBidXQgRERDIGNvbW11bmljYXRpb24gaGFwcGVzIG92 ZXIgdGhlIEFVWCBjaGFubmVsLgo+ID4gCj4gPiBUaGlzIGhlbHBlciBzaG91bGQgYmUgZW5vdWdo IHRvIGlkZW50aWZ5IHRoZSBhZGFwdG9yIHR5cGUgKHNvbWUKPiA+IHR5cGUgMSBEVkkgYWRhcHRv cnMgbWF5IGJlIGEgc2xpZ2h0IGV4Y2VwdGlvbikgYW5kIHRoZSBtYXhpbXVtIFRNRFMKPiA+IGNs b2NrIGxpbWl0LiBBbm90aGVyIGZlYXR1cmUgdGhhdCBtYXkgYmUgYXZhaWxhYmxlIGlzIGNvbnRy b2wgb3Zlcgo+ID4gdGhlIFRNRFMgb3V0cHV0IGJ1ZmZlcnMgb24gdGhlIGFkYXB0b3IsIHBvc3Np Ymx5IGFsbG93aW5nIGZvciBzb21lCj4gPiBwb3dlciBzYXZpbmcgd2hlbiB0aGUgVE1EUyBsaW5r IGlzIGRvd24uCj4gPiAKPiA+IE90aGVyIHVzZXIgY29udHJvbGxhYmxlIGZlYXR1cmVzIHRoYXQg bWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUKPiA+IGFkYXB0b3JzCj4gPiBhcmUgZG93bnN0cmVhbSBp MmMgYnVzIHNwZWVkIGNvbnRyb2wgd2hlbiB1c2luZyBpMmMtb3Zlci1hdXgsIGFuZAo+ID4gc29t ZSBjb250cm9sIG92ZXIgdGhlIENFQyBwaW4uIEkgY2hvc2Ugbm90IHRvIHByb3ZpZGUgYW55IGhl bHBlcgo+ID4gZnVuY3Rpb25zIGZvciB0aG9zZSBzaW5jZSBJIGhhdmUgbm8gdXNlIGZvciB0aGVt IGluIGk5MTUgYXQgdGhpcwo+ID4gdGltZS4KPiA+IFRoZSByZXN0IG9mIHRoZSByZWdpc3RlcnMg aW4gdGhlIGFkYXB0b3IgYXJlIG1vc3RseSBqdXN0IGluZm9ybWF0aW9uLAo+ID4gZWcuIElFRUUg T1VJLCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgcmV2aXNpb24sIGV0Yy4KPiAKPiBQbGVhc2UgcnVu IGEgc3BlbGwgY2hlY2tlciBhbmQgZG8gc29tZSBwcm9vZi1yZWFkaW5nIGJvdGggaW4gdGhlIGNv bW1pdAo+IG1lc3NhZ2UgYW5kIGluIHRoZSBjb2RlIGNvbW1lbnRzLiBNdWx0aXBsZSBpbnN0YW5j ZXMgb2YgInNpem8iLAo+ICJIb2V2ZXIiLCAiYWRhdG9yIiwgIklkZW50eWZ5IiwgZXRjLiBJIGFs c28gc3BvdHRlZCBzb21lIHR5cG9zIGluIHRoZQo+IG5leHQgY29tbWl0cy4KPiAKPiAKPiAKPiA+ IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRl bC5jb20+Cj4gPiAtLS0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDIgKy0KPiA+IMKgZHJpdmVycy9ncHUvZHJt L2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmMgfCAzMjgKPiA+ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+ID4gwqBpbmNsdWRlL2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5owqDC oMKgwqDCoHzCoMKgODAgKysrKysrKysKPiA+IMKgMyBmaWxlcyBjaGFuZ2VkLCA0MDkgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmMKPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0 IGluY2x1ZGUvZHJtL2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmgKPiA+IAo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ ID4gaW5kZXggNmViOTRmYzU2MWRjLi4yMjIyOGVmNTBmMzYgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ ID4gQEAgLTIzLDcgKzIzLDcgQEAgZHJtLSQoQ09ORklHX0FHUCkgKz0gZHJtX2FncHN1cHBvcnQu bwo+ID4gwqAKPiA+IMKgZHJtX2ttc19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1f ZHBfaGVscGVyLm8KPiA+IGRybV9wcm9iZV9oZWxwZXIubyBcCj4gPiDCoAkJZHJtX3BsYW5lX2hl bHBlci5vIGRybV9kcF9tc3RfdG9wb2xvZ3kubwo+ID4gZHJtX2F0b21pY19oZWxwZXIubyBcCj4g PiAtCQlkcm1fa21zX2hlbHBlcl9jb21tb24ubwo+ID4gKwkJZHJtX2ttc19oZWxwZXJfY29tbW9u Lm8gZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIubwo+ID4gwqAKPiA+IMKgZHJtX2ttc19oZWxwZXIt JChDT05GSUdfRFJNX0xPQURfRURJRF9GSVJNV0FSRSkgKz0gZHJtX2VkaWRfbG9hZC5vCj4gPiDC oGRybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9IGRybV9mYl9o ZWxwZXIubwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfZHVhbF9tb2Rl X2hlbHBlci5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5j Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5iZmU1MTFj MDk1NjgKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBf ZHVhbF9tb2RlX2hlbHBlci5jCj4gPiBAQCAtMCwwICsxLDMyOCBAQAo+ID4gKy8qCj4gPiArICog Q29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KPiA+ICsgKgo+ID4gKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCj4g PiBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiA+ICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 Cj4gPiBsaW1pdGF0aW9uCj4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCj4gPiBzdWJsaWNlbnNlLAo+ID4gKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tCj4gPiB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZwo+ID4gY29uZGl0aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl Cj4gPiBpbmNsdWRlZCBpbgo+ID4gKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlIFNvZnR3YXJlLgo+ID4gKyAqCj4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4gPiBFWFBSRVNTIE9S Cj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRgo+ID4gTUVSQ0hBTlRBQklMSVRZLAo+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDCoElOIE5PCj4gPiBFVkVOVCBTSEFM TAo+ID4gKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwKPiA+IERBTUFHRVMgT1IKPiA+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCj4gPiBPVEhFUldJU0UsCj4g PiArICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUKPiA+IFVTRSBPUgo+ID4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZU V0FSRS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ID4g KyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgo+ ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIuaD4KPiA+ICsjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBET0M6IERQIGR1YWwgbW9kZSAo YWthLiBEUCsrKSBhZGFwdG9yIGhlbHBlcnMKPiA+ICsgKgo+ID4gKyAqIEhlbHBlciBmdW5jdGlv bnMgdG8gZGVhbCB3aXRoIERQIGR1YWwgbW9kZSBhZGFwdG9ycy4KPiA+ICsgKgo+ID4gKyAqIFR5 cGUgMToKPiA+ICsgKiBBZGFwdG9yIHJlZ2lzdGVycyAoaWYgYW55KSBhbmQgdGhlIHNpbmsgRERD IGJ1cyBtYXkgYmUgYWNjZXNzZWQKPiA+IHZpYSBJMkMuCj4gPiArICoKPiA+ICsgKiBUeXBlIDI6 Cj4gPiArICogQWRhcHRvciByZWdpc3RlcnMgYW5kIHNpbmsgRERDIGJ1cyBjYW4gYmUgYWNjZXNz ZWQgZWl0aGVyIHZpYSBJMkMKPiA+IG9yCj4gPiArICogSTJDLW92ZXItQVVYLiBTb3VyY2UgZGV2 aWNlcyBtYXkgY2hvb3NlIHRvIGltcGxlbWVudCBlaXRoZXIgb25lCj4gPiBvcgo+ID4gKyAqIGJv dGggb2YgdGhlc2UgYWNjZXNzIG1ldGhvZHMuCj4gPiArICovCj4gPiArCj4gPiArI2RlZmluZSBE UF9EVUFMX01PREVfU0xBVkVfQUREUkVTUyAweDQwCj4gPiArCj4gPiArLyoqCj4gPiArICogZHJt X2RwX2R1YWxfbW9kZV9yZWFkIC0gUmVhZCBmcm9tIHRoZSBEUCBkdWFsIG1vZGUgYWRhcHRvcgo+ ID4gcmVnaXN0ZXIocykKPiA+ICsgKiBhZGFwdGVyOiBJMkMgYWRhcHRlciBmb3IgdGhlIEREQyBi dXMKPiA+ICsgKiBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldAo+ID4gKyAqIGJ1ZmZlcjogYnVmZmVy IGZvciByZXR1cm4gZGF0YQo+ID4gKyAqIHNpemU6IHNpem8gb2YgdGhlIGJ1ZmZlcgo+ID4gKyAq Cj4gPiArICogUmVhZHMgQHNpemUgYnl0ZXMgZnJvbSB0aGUgRFAgZHVhbCBtb2RlIGFkYXB0b3Ig cmVnaXN0ZXJzCj4gPiArICogc3RhcnRpbmcgYXQgQG9mZnNldC4KPiA+ICsgKgo+ID4gKyAqIFJl dHVybnM6Cj4gPiArICogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1 cmUKPiA+ICsgKi8KPiA+ICtzc2l6ZV90IGRybV9kcF9kdWFsX21vZGVfcmVhZChzdHJ1Y3QgaTJj X2FkYXB0ZXIgKmFkYXB0ZXIsCj4gPiArCQkJwqDCoMKgwqDCoMKgdTggb2Zmc2V0LCB2b2lkICpi dWZmZXIsIHNpemVfdCBzaXplKQo+ID4gK3sKPiA+ICsJc3RydWN0IGkyY19tc2cgbXNnc1tdID0g ewo+ID4gKwkJewo+ID4gKwkJCS5hZGRyID0gRFBfRFVBTF9NT0RFX1NMQVZFX0FERFJFU1MsCj4g PiArCQkJLmZsYWdzID0gMCwKPiA+ICsJCQkubGVuID0gMSwKPiA+ICsJCQkuYnVmID0gJm9mZnNl dCwKPiA+ICsJCX0sCj4gPiArCQl7Cj4gPiArCQkJLmFkZHIgPSBEUF9EVUFMX01PREVfU0xBVkVf QUREUkVTUywKPiA+ICsJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKPiA+ICsJCQkubGVuID0gc2l6ZSwK PiA+ICsJCQkuYnVmID0gYnVmZmVyLAo+ID4gKwkJfSwKPiA+ICsJfTsKPiA+ICsJaW50IHJldDsK PiA+ICsKPiA+ICsJcmV0ID0gaTJjX3RyYW5zZmVyKGFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUo bXNncykpOwo+ID4gKwlpZiAocmV0IDwgMCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCWlmIChy ZXQgIT0gQVJSQVlfU0laRShtc2dzKSkKPiA+ICsJCXJldHVybiAtRVBST1RPOwo+IAo+IE5vIHJl dHJpZXMgbmVlZGVkIGhlcmUgb3IgYmVsb3c/IChhc2tpbmcgdGhpcyBkdWUgdG8gdGhlIGNvbW1l bnQgaW4KPiBkcm1fZWRpZC5jIGFib3V0IHJldHJpZXMpCgpUaGUgRURJRCByZXRyaWVzIGFyZSBt b3N0bHkgY2FyZ28gY3VsdGVkLiBJIHN1c3BlY3QgeW91IGRvbid0IHJlYWxseQpuZWVkIHRoZW0g dW5sZXNzIHRoZSBjb25uZWN0b3IgaXMgYWJvdXQgdG8gZmFsbCBvZmYsIG9yIHRoZSB3aXJpbmcK aXMgbWFkZSBvZiBjb3R0b24uCgo+IAo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiAr Cj4gPiArLyoqCj4gPiArICogZHJtX2RwX2R1YWxfbW9kZV93cml0ZSAtIFdyaXRlIHRvIHRoZSBE UCBkdWFsIG1vZGUgYWRhcHRvcgo+ID4gcmVnaXN0ZXIocykKPiA+ICsgKiBhZGFwdGVyOiBJMkMg YWRhcHRlciBmb3IgdGhlIEREQyBidXMKPiA+ICsgKiBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldAo+ ID4gKyAqIGJ1ZmZlcjogYnVmZmVyIGZvciB3cml0ZSBkYXRhCj4gPiArICogc2l6ZTogc2l6byBv ZiB0aGUgYnVmZmVyCj4gPiArICoKPiA+ICsgKiBXcml0ZXMgQHNpemUgYnl0ZXMgdG8gdGhlIERQ IGR1YWwgbW9kZSBhZGFwdG9yIHJlZ2lzdGVycwo+ID4gKyAqIHN0YXJ0aW5nIGF0IEBvZmZzZXQu Cj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBmYWlsdXJlCj4gPiArICovCj4gPiArc3NpemVfdCBkcm1fZHBfZHVhbF9t b2RlX3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKPiA+ICsJCQnCoMKgwqDCoMKg wqDCoHU4IG9mZnNldCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QKPiA+IHNpemUpCj4gPiAr ewo+ID4gKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7Cj4gPiArCQkuYWRkciA9IERQX0RVQUxfTU9E RV9TTEFWRV9BRERSRVNTLAo+ID4gKwkJLmZsYWdzID0gMCwKPiA+ICsJCS5sZW4gPSAxICsgc2l6 ZSwKPiA+ICsJCS5idWYgPSBOVUxMLAo+ID4gKwl9Owo+ID4gKwl2b2lkICpkYXRhOwo+ID4gKwlp bnQgcmV0Owo+ID4gKwo+ID4gKwlkYXRhID0ga21hbGxvYyhtc2cubGVuLCBHRlBfVEVNUE9SQVJZ KTsKPiA+ICsJaWYgKCFkYXRhKQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArCW1z Zy5idWYgPSBkYXRhOwo+ID4gKwo+ID4gKwltZW1jcHkoZGF0YSwgJm9mZnNldCwgMSk7Cj4gPiAr CW1lbWNweShkYXRhICsgMSwgYnVmZmVyLCBzaXplKTsKPiA+ICsKPiA+ICsJcmV0ID0gaTJjX3Ry YW5zZmVyKGFkYXB0ZXIsICZtc2csIDEpOwo+ID4gKwo+ID4gKwlrZnJlZShkYXRhKTsKPiA+ICsK PiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwlpZiAocmV0ICE9IDEp Cj4gPiArCQlyZXR1cm4gLUVQUk9UTzsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4g K0VYUE9SVF9TWU1CT0woZHJtX2RwX2R1YWxfbW9kZV93cml0ZSk7Cj4gPiArCj4gPiArc3RhdGlj IGJvb2wgaXNfaGRtaV9hZGFwdG9yKGNvbnN0IGNoYXIKPiA+IGhkbWlfaWRbRFBfRFVBTF9NT0RF X0hETUlfSURfTEVOXSkKPiA+ICt7Cj4gPiArCXN0YXRpYyBjb25zdCBjaGFyCj4gPiBkcF9kdWFs X21vZGVfaGRtaV9pZFtEUF9EVUFMX01PREVfSERNSV9JRF9MRU5dID0KPiA+ICsJCSJEUC1IRE1J IEFEQVBUT1JceDA0IjsKPiA+ICsKPiA+ICsJcmV0dXJuIG1lbWNtcChoZG1pX2lkLCBkcF9kdWFs X21vZGVfaGRtaV9pZCwKPiA+ICsJCcKgwqDCoMKgwqDCoHNpemVvZihkcF9kdWFsX21vZGVfaGRt aV9pZCkpID09IDA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9kcF9kdWFsX21v ZGVfZGV0ZWN0IC0gSWRlbnR5ZnkgdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yCj4gPiArICogYWRh cHRlcjogSTJDIGFkYXB0ZXIgZm9yIHRoZSBEREMgYnVzCj4gPiArICoKPiA+ICsgKiBBdHRlbXB0 IHRvIGlkZW50aWZ5IHRoZSB0eXBlIG9mIHRoZSBEUCBkdWFsIG1vZGUgYWRhcHRvciB1c2VkLgo+ ID4gKyAqCj4gPiArICogTm90ZSB0aGF0IHdoZW4gdGhlIGFuc3dlciBpcyBARFJNX0RQX0RVQUxf TU9ERV9OT05FIGl0J3Mgbm90Cj4gCj4gU28gaG93IGFib3V0IGFkZGluZyBhIG5ldyBvciBqdXN0 IHJlbmFtaW5nIGl0IHRvCj4gRFJNX0RQX0RVQUxfTU9ERV9VTktOT1dOPyBMZXQncyBub3QgYXNz dW1lIGV2ZXJ5Ym9keSBpcyBnb2luZyB0byByZWFkCj4gdGhlIGRvY3MuCgpJIHN1cHBvc2UgYWRk aW5nIGFuIGV4dHJhIGVudW0gdmFsdWUgY2FuJ3QgaHVydC4KCj4gCj4gPiArICogY2VydGFpbiB3 aGV0aGVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG5hdGl2ZSBIRE1JIHBvcnQgb3IKPiA+ICsgKiBh IHR5cGUgMSBEVkkgZHVhbCBtb2RlIGFkYXB0b3IuIFRoZSBkcml2ZXIgd2lsbCBoYXZlIHRvIHVz ZQo+ID4gKyAqIHNvbWUgb3RoZXIgaGFyZHdhcmUvZHJpdmVyIHNwZWNpZmljIG1lY2hhbmlzbSB0 byBtYWtlIHRoYXQKPiA+ICsgKiBkaXN0aW5jdGlvbi4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6 Cj4gPiArICogVGhlIHR5cGUgb2YgdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yIHVzZWQKPiA+ICsg Ki8KPiA+ICtlbnVtIGRybV9kcF9kdWFsX21vZGVfdHlwZSBkcm1fZHBfZHVhbF9tb2RlX2RldGVj dChzdHJ1Y3QKPiA+IGkyY19hZGFwdGVyICphZGFwdGVyKQo+ID4gK3sKPiA+ICsJY2hhciBoZG1p X2lkW0RQX0RVQUxfTU9ERV9IRE1JX0lEX0xFTl0gPSB7fTsKPiA+ICsJdWludDhfdCBhZGFwdG9y X2lkID0gMHgwMDsKPiA+ICsJc3NpemVfdCByZXQ7Cj4gPiArCj4gPiArCS8qCj4gPiArCcKgKiBM ZXQncyBzZWUgaWYgdGhlIGFkYXB0b3IgaXMgdGhlcmUgdGhlIGJ5IHJlYWRpbmcgdGhlCj4gPiAr CcKgKiBIRE1JIElEIHJlZ2lzdGVycy4KPiA+ICsJwqAqCj4gPiArCcKgKiBOb3RlIHRoYXQgdHlw ZSAxIERWSSBhZGFwdG9ycyBhcmUgbm90IHJlcXVpcmVkIHRvCj4gPiBpbXBsZW1udAo+ID4gKwnC oCogYW55IHJlZ2lzdGVycywgYW5kIHRoYXQgcHJlc2VudHMgYSBwcm9ibGVtIGZvciBkZXRlY3Rp b24uCj4gPiArCcKgKiBJZiB0aGUgaTJjIHRyYW5zZmVyIGlzIG5hY2tlZCwgd2UgbWF5IG9yIG1h eSBub3QgYmUKPiA+IGRlYWxpbmcKPiA+ICsJwqAqIHdpdGggYSB0eXBlIDEgRFZJIGFkYXB0b3Iu IFNvbWUgb3RoZXIgbWVjaGFuaXNtIG9mCj4gPiBkZXRlY3RpbmcKPiA+ICsJwqAqIHRoZSBwcmVz ZW5jZSBvZiB0aGUgYWRhcHRvciBpcyByZXF1aXJlZC4gT25lIHdheSB3b3VsZCBiZQo+ID4gKwnC oCogdG8gY2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBDT05GSUcxIHBpbiwgQW5vdGhlciBtZXRob2QK PiA+IHdvdWxkCj4gPiArCcKgKiBzaW1wbHkgcmVxdWlyZSB0aGUgZHJpdmVyIHRvIGtub3cgd2hl dGhlciB0aGUgcG9ydCBpcyBhCj4gPiBEUCsrCj4gPiArCcKgKiBwb3J0IG9yIGEgbmF0aXZlIEhE TUkgcG9ydC4gQm90aCBvZiB0aGVzZSBtZXRob2RzIGFyZQo+ID4gZW50aXJlbHkKPiA+ICsJwqAq IGhhcmR3YXJlL2RyaXZlciBzcGVjaWZpYyBzbyB3ZSBjYW4ndCBkZWFsIHdpdGggdGhlbSBoZXJl Lgo+ID4gKwnCoCovCj4gPiArCXJldCA9IGRybV9kcF9kdWFsX21vZGVfcmVhZChhZGFwdGVyLCBE UF9EVUFMX01PREVfSERNSV9JRCwKPiA+ICsJCQkJwqDCoMKgwqBoZG1pX2lkLCBzaXplb2YoaGRt aV9pZCkpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIERSTV9EUF9EVUFMX01PREVfTk9O RTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJwqAqIFNpZ2guIFNvbWUgKG1heWJlIGFsbD8pIHR5cGUg MSBhZGFwdG9ycyBhcmUgYnJva2VuIGFuZAo+ID4gYWNrCj4gPiArCcKgKiB0aGUgb2Zmc2V0IGJ1 dCBpZ25vcmUgaXQsIGFuZCBpbnN0ZWFkIHRoZXkganVzdCBhbHdheXMKPiA+IHJldHVybgo+ID4g KwnCoCogZGF0YSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgSERNSSBJRCBidWZmZXIuIFNvIGZvciBh Cj4gPiBicm9rZW4KPiA+ICsJwqAqIHR5cGUgMSBIRE1JIGFkYXB0b3IgYSBzaW5nbGUgYnl0ZSBy ZWFkIHdpbGwgYWx3YXlzIGdpdmUKPiA+IHVzCj4gPiArCcKgKiAweDQ0LCBhbmQgZm9yIGEgdHlw ZSAxIERWSSBhZGFwdG9yIGl0IHNob3VsZCBnaXZlIDB4MDAKPiA+ICsJwqAqIChhc3N1bWluZyBp dCBpbXBsZW1lbnRzIGFueSByZWdpc3RlcnMpLgo+IAo+IFNvIHNob3VsZG4ndCB3ZSBqdXN0IHRy eSB0byByZWFkIGZyb20gMHgwMCB0byAweDFGIGluIGEgc2luZ2xlIHNob3Q/Cj4gV291bGQgdGhp cyB3b3JrIGZvciB5b3VyIHNwZWNpZmljIGFkYXB0b3I/IEl0IHdvdWxkIGJlIGludGVyZXN0aW5n IHRvCj4ga25vdy4KCkkgdGhpbmsgSSBkaWQgY29uc2lkZXIgdGhhdCBhZnRlciBnaXZpbmcgdXAg b24gYW5vdGhlciBzdHJhbmdlIGRldGVjdGlvbgpzY2hlbWUgdGhhdCB3b3VsZCBoYXZlIHBlcmhh cHMgYWxsb3dlZCBtZSB0byBkZXRlY3QgZGVjZW50IHR5cGUgMQphZGFwdG9ycy4gSUlSQyB0aGUg YWRhcHRvcnMgSSB0ZXN0ZWQgcmV0dXJuZWQgMHgwMCBvciAweGZmIGZvciB0aGUKMHgxMC0weDIw IHJhbmdlIHdoZW4gZG9pbmcgYSBzaW5nbGUgcmVhZCwgYnV0IEkgc3VzcGVjdCB0aGV5IG1pZ2h0 IGFzCndlbGwganVzdCB3cmFwIGFmdGVyIDB4MGYgc2luY2UgdGhlIHNwZWMgc2F5cyB0aGV5IGRv bid0IG5lZWQgdG8gaW1wbGVtZW50CmFueXRoaW5nIGJleW9uZCAweDAwLTB4MGYuIFdoaWxlIGFs bCBvZiB0aG9zZSByZXN1bHRzIHdvdWxkIHdvcmsganVzdCBhcwp3ZWxsIGFzIHJlYWRpbmcgdGhl IHNpbmdsZSBieXRlLCBJIGRlY2lkZWQgdGhhdCB0aGVyZSdzIG5vIHBvaW50IGluIGRvaW5nCnRo YXQgc2luY2UgSSBoYWQgbm90IHNlZW0gYSBzaW5nbGUgc2FuZSB0eXBlIDEgYWRhcHRvci4gVGhl eSdyZSBjbGVhcmx5CmFsbCBqdXN0IGJvdHRvbSBvZiB0aGUgYmFycmVsIGhhcmR3YXJlIHNvIHNl ZW1zIHVubGlrZWx5IGFueW9uZSB3b3VsZApnbyB0byB0aGUgZWZmb3J0IG9mIGltcGxlbWVudGlu ZyBvbmUgZGVjZW50bHkuIFNvIGluIHRoZSBlbmQgSSBqdXN0CmZpZ3VyZWQgdGhhdCBtaW5pbWl6 aW5nIHRoZSBhbW91bnQgb2YgZGF0YSB3ZSBoYXZlIHRvIHJlYWQgaXMgdGhlIHNhbmUKdGhpbmcg dG8gZG8uCgo+IAo+IAo+ID4gIEZvcnR1bmF0ZWx5IG5laXRoZXIKPiA+ICsJwqAqIG9mIHRob3Nl IHZhbHVlcyB3aWxsIG1hdGNoIHRoZSB0eXBlIDIgc2lnbmF0dXJlIG9mIHRoZQo+ID4gKwnCoCog RFBfRFVBTF9NT0RFX0FEQVBUT1JfSUQgcmVnaXN0ZXIgc28gd2UgY2FuIHByb2NlZWQgd2l0aAo+ ID4gKwnCoCogdGhlIHR5cGUgMiBhZGFwdG9yIGRldGVjdGlvbiBzYWZlbHkgZXZlbiBpbiB0aGUg cHJlc2VuY2UKPiA+ICsJwqAqIG9mIGJyb2tlbiB0eXBlIDEgYWRhcHRvcnMuCj4gPiArCcKgKi8K PiA+ICsJcmV0ID0gZHJtX2RwX2R1YWxfbW9kZV9yZWFkKGFkYXB0ZXIsCj4gPiBEUF9EVUFMX01P REVfQURBUFRPUl9JRCwKPiA+ICsJCQkJwqDCoMKgwqAmYWRhcHRvcl9pZCwKPiA+IHNpemVvZihh ZGFwdG9yX2lkKSk7Cj4gPiArCWlmIChyZXQgfHwgKGFkYXB0b3JfaWQgIT0gKERQX0RVQUxfTU9E RV9UWVBFX1RZUEUyIHwKPiA+ICsJCQkJwqDCoMKgRFBfRFVBTF9NT0RFX1JFVl9UWVBFMikpKSB7 Cj4gPiArCQlpZiAoaXNfaGRtaV9hZGFwdG9yKGhkbWlfaWQpKQo+ID4gKwkJCXJldHVybiBEUk1f RFBfRFVBTF9NT0RFX1RZUEUxX0hETUk7Cj4gPiArCQllbHNlCj4gPiArCQkJcmV0dXJuIERSTV9E UF9EVUFMX01PREVfVFlQRTFfRFZJOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJaWYgKGlzX2hkbWlf YWRhcHRvcihoZG1pX2lkKSkKPiA+ICsJCQlyZXR1cm4gRFJNX0RQX0RVQUxfTU9ERV9UWVBFMl9I RE1JOwo+ID4gKwkJZWxzZQo+ID4gKwkJCXJldHVybiBEUk1fRFBfRFVBTF9NT0RFX1RZUEUyX0RW STsKPiA+ICsJfQo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9kdWFsX21vZGVfZGV0 ZWN0KTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZHBfZHVhbF9tb2RlX21heF90bWRzX2Ns b2NrIC0gTWF4IFRNRFMgY2xvY2sgZm9yIERQIGR1YWwgbW9kZQo+ID4gYWRhcHRvcgo+ID4gKyAq IGFkYXB0ZXI6IEkyQyBhZGFwdGVyIGZvciB0aGUgRERDIGJ1cwo+ID4gKyAqCj4gPiArICogRGV0 ZXJtaW5lIHRoZSBtYXggVE1EUyBjbG9jayB0aGUgYWRhcHRvciBzdXBwb3J0cyBiYXNlZCBvbiB0 aGUKPiA+ICsgKiBEUF9EVUFMX01PREVfTUFYX1RNRFNfQ0xPQ0sgcmVnaXN0ZXIuIFRoZSByZWdp c3RlciBpcyBtYW5kYXRvcnkKPiA+IGZvcgo+ID4gKyAqIHR5cGUgMiBhZGFwdG9ycywgb3B0aW9u YWwgZm9yIHR5cGUgMSBhZGFwdG9ycy4gSG9ldmVyLCBhcyBzb21lCj4gPiB0eXBlIDEKPiA+ICsg KiBhZGFwdG9ycyBhcmUgYnJva2VuIChzZWUgY29tbWVudHMgaW4gZHJtX2RwX2R1YWxfbW9kZV9k ZXRlY3QoKQo+ID4gZm9yIHRoZQo+ID4gKyAqIGRldGFpbHMpIG9uZSBwcm9iYWJseSBzaG91bGRu J3QgdXNlIHRoaXMgd2l0aCB0eXBlIDEgYWRhcHRvcnMgYXQKPiA+IGFsbC4KPiA+ICsgKiBUeXBl IDEgYWRhcHRvcnMgc2hvdWxkIGFueXdheSBiZSBhbHdheXMgbGltaXRlZCB0byAxNjUgTUh6Lgo+ IAo+IEkgYWx3YXlzIGFzc3VtZSBwcm9ncmFtbWVycyBhcmUgYXMgYmFkIGFzIHBvc3NpYmxlLCBz byBJIHdvbmRlciBpZiB3ZQo+IHNob3VsZCBqdXN0IGFsc28gY2FsbCBkcm1fZHBfZHVhbF9tb2Rl X2RldGVjdCgpIGhlcmUuCgpUaGlzIGNyb3NzZWQgbXkgbWluZCBidXQgSSBkaWRuJ3Qgd2FudCB0 byBzbG93IGRvd24gdGhpbmdzIG5lZWRsZXNzbHkuCgpJIGRpZCBpbiBmYWN0IGNvbnNpZGVyIHRo YXQgd2UgbWlnaHQgd2FudCB0byByYWlzZSB0aGUgYWJzdHJhY3Rpb24KbGV2ZWwgYSBiaXQgYW5k IGludHJvZHVjZSBzb21lIGtpbmQgb2YgZHBfZHVhbF9tb2RlIG9iamVjdCB0aGF0IGtlZXBzCmFy b3VuZCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24vc3RhdGUgYW5kIHdvdWxkIGFsbG93IGRyaXZl cnMgdG8gYXZvaWQKdGhlIHR5cGUgY2hlY2tzIGFuZCB3aGF0bm90LiBVbmZvcnR1bmF0ZWx5IHRo b3NlIGN1cnNlZCB0eXBlIDEgRFZJCmFkYXB0b3JzIHdvdWxkIHN0aWxsIHJlcXVpcmUgdGhlIGRy aXZlciB0byBzdGVwIGluIGlmIHRoZSBkZXRlY3Rpb24KZmFpbHMgdG8gZmluZCBhbnl0aGluZywg c28gd2UnZCBuZWVkIGEgY2FsbGJhY2sgaW50byB0aGUgZHJpdmVyIG9yCnNvbWV0aGluZy4KCkFu ZCBzbywgc2luY2UgdGhlIGRyaXZlciBhbnl3YXkgaGFzIHRvIGRlYWwgd2l0aCB0aGUgdHlwZSAx IERWSSBhZGFwdG9ycywKSSBkZWNpZGVkIHRoYXQgdHJ5aW5nIHRvIGhpZGUgdGhlc2Ugc29ydCBv ZiBkZXRhaWxzIGluc2lkZSB0aGUgaGVscGVyCmlzIHByZXR0eSBtdWNoIHBvaW50bGVzcy4KCj4g QWxzbyB0cnkgdGhlCj4gdHJpY2sgb2YgcmVhZGluZyB0aGUgd2hvbGUgdGhpbmcgYXQgb25jZSBp bnN0ZWFkIG9mIHRoZSBzcGVjaWZpYwo+IGFkZHJlc3MuIFNhbWUgZ29lcyBmb3IgdGhlIG90aGVy IGZ1bmN0aW9ucy4gSSBhbHNvIHNlZSB0aGF0IHRoaXMgd291bGQKPiBtYWtlIHBhdGNoZXMgMi00 IGRpZmZlcmVudCwgc28gdGhpcyBpcyBqdXN0IGFuIGlkZWEsIG5vdCBhIHJlcXVpcmVtZW50LgoK QXMgSSBzdXNwZWN0IHNvbWUgYWRhcHRvcnMgbWlnaHQganVzdCB3cmFwIGFyb3VuZCBhdCAweGYs IGRvaW5nIGEKYmlnIHJlYWQgZG9lc24ndCBmZWVsIGVudGlyZWx5IHNhZmUgaGVyZS4KCj4gCj4g PiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqIE1heGltdW0gc3VwcG9ydGVkIFRNRFMgY2xv Y2sgcmF0ZSBmb3IgdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yIGluCj4gPiBrSHouCj4gPiArICov Cj4gPiAraW50IGRybV9kcF9kdWFsX21vZGVfbWF4X3RtZHNfY2xvY2soc3RydWN0IGkyY19hZGFw dGVyICphZGFwdGVyKQo+ID4gK3sKPiA+ICsJdWludDhfdCBtYXhfdG1kc19jbG9jazsKPiA+ICsJ c3NpemVfdCByZXQ7Cj4gPiArCj4gPiArCS8qCj4gPiArCcKgKiBUeXBlIDEgYWRhcHRvcnMgYXJl IGxpbWl0ZWQgdG8gMTY1TUh6Cj4gPiAKPiA+ICsJwqAqIFR5cGUgMiBhZGFwdG9ycyBjYW4gdGVs bHMgdXMgdGhlaXIgbGltaXQKPiAKPiAiY2FuIHRlbGxzIgo+IAo+ID4gKwnCoCovCj4gPiArCXJl dCA9IGRybV9kcF9kdWFsX21vZGVfcmVhZChhZGFwdGVyLAo+ID4gRFBfRFVBTF9NT0RFX01BWF9U TURTX0NMT0NLLAo+ID4gKwkJCQnCoMKgwqDCoCZtYXhfdG1kc19jbG9jaywKPiA+IHNpemVvZiht YXhfdG1kc19jbG9jaykpOwo+ID4gKwlpZiAocmV0KQo+IAo+IE1heWJlIGFsc28gImlmIChyZXQg fHwgbWF4X3RtZHNfY2xvY2sgPT0gMCB8fCBtYXhfdG1kc19jbG9jayA9PSAweEZGKSI/CgpUaGF0 IHdvdWxkIHNlZW0gc2Vuc2libGUgaW5kZWVkLgoKPiAKPiAKPiA+ICsJCXJldHVybiAxNjUwMDA7 Cj4gPiArCj4gPiArCXJldHVybiBtYXhfdG1kc19jbG9jayAqIDUwMDAgLyAyOwo+ID4gK30KPiA+ ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9kdWFsX21vZGVfbWF4X3RtZHNfY2xvY2spOwo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIGRybV9kcF9kdWFsX21vZGVfZ2V0X3RtZHNfb3V0cHV0IC0gR2V0IHRo ZSBzdGF0ZSBvZiB0aGUgVE1EUwo+ID4gb3V0cHV0IGJ1ZmZlcnMgaW4gdGhlIERQIGR1YWwgbW9k ZSBhZGFwdG9yCj4gPiArICogYWRhcHRlcjogSTJDIGFkYXB0ZXIgZm9yIHRoZSBEREMgYnVzCj4g PiArICogZW5hYmxlZDogY3VycmVudCBzdGF0ZSBvZiB0aGUgVE1EUyBvdXRwdXQgYnVmZmVycwo+ ID4gKyAqCj4gPiArICogR2V0IHRoZSBzdGF0ZSBvZiB0aGUgVE1EUyBvdXRwdXQgYnVmZmVycyBp biB0aGUgYWRhcHRvci4KPiA+ICsgKiBEUF9EVUFMX01PREVfVE1EU19PRU4gcmVnaXN0ZXIgaXMg bWFuZGF0b3J5IGZvciB0eXBlIDIgYWRhcHRvcnMsCj4gPiArICogb3B0aW9uYWxzIGZvciB0eXBl IDEgYWRhcHRvcnMuIEhvZXZlciwgYXMgc29tZSB0eXBlIDEgYWRhcHRvcnMKPiA+IGFyZQo+ID4g KyAqIGJyb2tlbiAoc2VlIGNvbW1lbnRzIGluIGRybV9kcF9kdWFsX21vZGVfZGV0ZWN0KCkgZm9y IHRoZQo+ID4gZGV0YWlscykKPiA+ICsgKiBvbmUgcHJvYmFibHkgc2hvdWxkbid0IHVzZSB0aGlz IHdpdGggdHlwZSAxIGFkYXB0b3JzIGF0IGFsbC4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4g PiArICogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKPiA+ICsg Ki8KPiA+ICtpbnQgZHJtX2RwX2R1YWxfbW9kZV9nZXRfdG1kc19vdXRwdXQoc3RydWN0IGkyY19h ZGFwdGVyICphZGFwdGVyLAo+ID4gYm9vbCAqZW5hYmxlZCkKPiA+ICt7Cj4gPiArCXVpbnQ4X3Qg dG1kc19vZW47Cj4gPiArCXNzaXplX3QgcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fZHBfZHVh bF9tb2RlX3JlYWQoYWRhcHRlciwgRFBfRFVBTF9NT0RFX1RNRFNfT0VOLAo+ID4gKwkJCQnCoMKg wqDCoCZ0bWRzX29lbiwgc2l6ZW9mKHRtZHNfb2VuKSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQly ZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwkqZW5hYmxlZCA9ICEodG1kc19vZW4gJiBEUF9EVUFMX01P REVfVE1EU19ESVNBQkxFKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gK0VYUE9S VF9TWU1CT0woZHJtX2RwX2R1YWxfbW9kZV9nZXRfdG1kc19vdXRwdXQpOwo+ID4gKwo+ID4gKy8q Kgo+ID4gKyAqIGRybV9kcF9kdWFsX21vZGVfc2V0X3RtZHNfb3V0cHV0IC0gRW5hYmxlL2Rpc2Fi bGUgVE1EUyBvdXRwdXQKPiA+IGJ1ZmZlcnMgaW4gdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yCj4g PiArICogYWRhcHRlcjogSTJDIGFkYXB0ZXIgZm9yIHRoZSBEREMgYnVzCj4gPiArICogZW5hYmxl OiBlbmFibGUgKGFzIG9wcG9zZWQgdG8gZGlzYWJsZSkgdGhlIFRNRFMgb3V0cHV0IGJ1ZmZlcnMK PiA+ICsgKgo+ID4gKyAqIFNldCB0aGUgc3RhdGUgb2YgdGhlIFRNRFMgb3V0cHV0IGJ1ZmZlcnMg aW4gdGhlIGFkYXB0b3IuCj4gPiArICogRFBfRFVBTF9NT0RFX1RNRFNfT0VOIHJlZ2lzdGVyIGlz IG1hbmRhdG9yeSBmb3IgdHlwZSAyIGFkYXB0b3JzLAo+ID4gKyAqIG9wdGlvbmFscyBmb3IgdHlw ZSAxIGFkYXB0b3JzLiBIb2V2ZXIsIGFzIHNvbWUgdHlwZSAxIGFkYXB0b3JzCj4gPiBhcmUKPiA+ ICsgKiBicm9rZW4gKHNlZSBjb21tZW50cyBpbiBkcm1fZHBfZHVhbF9tb2RlX2RldGVjdCgpIGZv ciB0aGUKPiA+IGRldGFpbHMpCj4gPiArICogb25lIHByb2JhYmx5IHNob3VsZG4ndCB1c2UgdGhp cyB3aXRoIHR5cGUgMSBhZGFwdG9ycyBhdCBhbGwuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ ID4gKyAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCj4gPiAr ICovCj4gPiAraW50IGRybV9kcF9kdWFsX21vZGVfc2V0X3RtZHNfb3V0cHV0KHN0cnVjdCBpMmNf YWRhcHRlciAqYWRhcHRlciwKPiA+IGJvb2wgZW5hYmxlKQo+ID4gK3sKPiA+ICsJdWludDhfdCB0 bWRzX29lbiA9IGVuYWJsZSA/IDAgOiBEUF9EVUFMX01PREVfVE1EU19ESVNBQkxFOwo+ID4gKwlz c2l6ZV90IHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gZHJtX2RwX2R1YWxfbW9kZV93cml0ZShhZGFw dGVyLCBEUF9EVUFMX01PREVfVE1EU19PRU4sCj4gPiArCQkJCcKgwqDCoMKgwqAmdG1kc19vZW4s IHNpemVvZih0bWRzX29lbikpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2R1YWxf bW9kZV9zZXRfdG1kc19vdXRwdXQpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9kcF9nZXRf ZHVhbF9tb2RlX3R5cGVfbmFtZSAtIEdldCB0aGUgbmFtZSBvZiB0aGUgRFAgZHVhbCBtb2RlCj4g PiBhZGFwdG9yIHR5cGUgYXMgYSBzdHJpbmcKPiA+ICsgKiB0eXBlOiBEUCBkdWFsIG1vZGUgYWRh cHRvciB0eXBlCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqIFN0cmluZyByZXByZXNl bnRhdGlvbiBvZiB0aGUgRFAgZHVhbCBtb2RlIGFkYXB0b3IgdHlwZQo+ID4gKyAqLwo+ID4gK2Nv bnN0IGNoYXIgKmRybV9kcF9nZXRfZHVhbF9tb2RlX3R5cGVfbmFtZShlbnVtCj4gPiBkcm1fZHBf ZHVhbF9tb2RlX3R5cGUgdHlwZSkKPiA+ICt7Cj4gPiArCXN3aXRjaCAodHlwZSkgewo+ID4gKwlj YXNlIERSTV9EUF9EVUFMX01PREVfTk9ORToKPiA+ICsJCXJldHVybiAibm9uZSI7Cj4gPiArCWNh c2UgRFJNX0RQX0RVQUxfTU9ERV9UWVBFMV9EVkk6Cj4gPiArCQlyZXR1cm4gInR5cGUgMSBEVkki Owo+ID4gKwljYXNlIERSTV9EUF9EVUFMX01PREVfVFlQRTFfSERNSToKPiA+ICsJCXJldHVybiAi dHlwZSAxIEhETUkiOwo+ID4gKwljYXNlIERSTV9EUF9EVUFMX01PREVfVFlQRTJfRFZJOgo+ID4g KwkJcmV0dXJuICJ0eXBlIDIgRFZJIjsKPiA+ICsJY2FzZSBEUk1fRFBfRFVBTF9NT0RFX1RZUEUy X0hETUk6Cj4gPiArCQlyZXR1cm4gInR5cGUgMiBIRE1JIjsKPiA+ICsJZGVmYXVsdDoKPiA+ICsJ CXJldHVybiAidW5rbm93biI7Cj4gCj4gUGxlYXNlIGF0IGxlYXN0IFdBUk5fT04oMSk/CgpXZSBk b24ndCBnZW5lcmFsbHkgd2FybiBpbiB0aGVzZSBjYXNlIChpbiB0aGUgZHJtIGNvcmUpLgoKPiAK PiBBbmQsIGlmIHlvdSBpbXBsZW1lbnQgbXkgc3VnZ2VzdGlvbiBvZiBhZGRpbmcgYW4gYWN0dWFs IHVua25vd24gdmFsdWUKPiB0byB0aGUgZW51bSwgZG9uJ3QgZm9yZ2V0IHRvIGNoYW5nZSB0aGUg ZGVmYXVsdCBjYXNlIHRvIHJldHVybgo+IHNvbWV0aGluZyB0aGF0J3Mgbm90ICJ1bmtub3duIi4K PiAKPiBNb3N0IG9mIHRoZSB0aGluZ3MgSSB3cm90ZSBhYm92ZSBhcmUganVzdCBpZGVhcywgbm90 IHJlcXVpcmVtZW50cywgYW5kCj4gaGF2aW5nIHRoaXMgcGF0Y2ggYXMtaXMgbG9va3MgYmV0dGVy IHRoYW4gbm90IGhhdmluZyBpdCwgc28gaWYgeW91IGF0Cj4gbGVhc3QgZml4IHRoZSBzcGVsbGlu ZyBlcnJvcnM6Cj4gCj4gUmV2aWV3ZWQtYnk6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlA aW50ZWwuY29tPgo+IAo+ID4gKwl9Owo+ID4gKwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRy bV9kcF9nZXRfZHVhbF9tb2RlX3R5cGVfbmFtZSk7Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9k cm0vZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIuaAo+ID4gYi9pbmNsdWRlL2RybS9kcm1fZHBfZHVh bF9tb2RlX2hlbHBlci5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAw MDAwMDAwLi5hMmY2YjQ1ODdmNWYKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2luY2x1ZGUv ZHJtL2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmgKPiA+IEBAIC0wLDAgKzEsODAgQEAKPiA+ICsv Kgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gPiArICoKPiA+ ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbgo+ID4gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4gPiAiU29mdHdhcmUiKSwKPiA+ ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dAo+ID4gbGltaXRhdGlvbgo+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+ID4gc3VibGljZW5zZSwKPiA+ ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbQo+ID4gdGhlCj4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKPiA+IGNvbmRpdGlvbnM6Cj4gPiArICoKPiA+ ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBzaGFsbCBiZQo+ID4gaW5jbHVkZWQgaW4KPiA+ICsgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+ID4g RVhQUkVTUyBPUgo+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YKPiA+IE1FUkNIQU5UQUJJTElUWSwKPiA+ICsgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTwo+ID4g RVZFTlQgU0hBTEwKPiA+ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCj4gPiBEQU1BR0VTIE9SCj4gPiArICogT1RIRVIgTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgo+ID4gT1RI RVJXSVNFLAo+ID4gKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFCj4gPiBVU0UgT1IKPiA+ICsgKiBPVEhFUiBERUFMSU5HUyBJ TiBUSEUgU09GVFdBUkUuCj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBEUk1fRFBfRFVBTF9N T0RFX0hFTFBFUl9ICj4gPiArI2RlZmluZSBEUk1fRFBfRFVBTF9NT0RFX0hFTFBFUl9ICj4gPiAr Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBPcHRp b25hbCBmb3IgdHlwZSAxIERWSSBhZGFwdG9ycwo+ID4gKyAqIE1hbmRhdG9yeSBmb3IgdHlwZSAx IEhETUkgYW5kIHR5cGUgMiBhZGF0b3JzCj4gPiArICovCj4gPiArI2RlZmluZSBEUF9EVUFMX01P REVfSERNSV9JRCAweDAwIC8qIDAwLTBmICovCj4gPiArI2RlZmluZcKgwqBEUF9EVUFMX01PREVf SERNSV9JRF9MRU4gMTYKPiA+ICsvKgo+ID4gKyAqIE9wdGlvbmFsIGZvciB0eXBlIDEgYWRhcHRv cnMKPiA+ICsgKiBNYW5kYXRvcnkgZm9yIHR5cGUgMiBhZGF0b3JzCj4gPiArICovCj4gPiArI2Rl ZmluZSBEUF9EVUFMX01PREVfQURBUFRPUl9JRCAweDEwCj4gPiArI2RlZmluZcKgwqBEUF9EVUFM X01PREVfUkVWX01BU0sgMHgwNwo+ID4gKyNkZWZpbmXCoMKgRFBfRFVBTF9NT0RFX1JFVl9UWVBF MiAweDAwCj4gPiArI2RlZmluZcKgwqBEUF9EVUFMX01PREVfVFlQRV9NQVNLIDB4ZjAKPiA+ICsj ZGVmaW5lwqDCoERQX0RVQUxfTU9ERV9UWVBFX1RZUEUyIDB4YTAKPiA+ICsjZGVmaW5lIERQX0RV QUxfTU9ERV9JRUVFX09VSSAweDExIC8qIDExLTEzKi8KPiA+ICsjZGVmaW5lwqDCoERQX0RVQUxf SUVFRV9PVUlfTEVOIDMKPiA+ICsjZGVmaW5lIERQX0RVQUxfREVWSUNFX0lEIDB4MTQgLyogMTQt MTkgKi8KPiA+ICsjZGVmaW5lwqDCoERQX0RVQUxfREVWSUNFX0lEX0xFTiA2Cj4gPiArI2RlZmlu ZSBEUF9EVUFMX01PREVfSEFSRFdBUkVfUkVWIDB4MWEKPiA+ICsjZGVmaW5lIERQX0RVQUxfTU9E RV9GSVJNV0FSRV9NQUpPUl9SRVYgMHgxYgo+ID4gKyNkZWZpbmUgRFBfRFVBTF9NT0RFX0ZJUk1X QVJFX01JTk9SX1JFViAweDFjCj4gPiArI2RlZmluZSBEUF9EVUFMX01PREVfTUFYX1RNRFNfQ0xP Q0sgMHgxZAo+ID4gKyNkZWZpbmUgRFBfRFVBTF9NT0RFX0kyQ19TUEVFRF9DQVAgMHgxZQo+ID4g KyNkZWZpbmUgRFBfRFVBTF9NT0RFX1RNRFNfT0VOIDB4MjAKPiA+ICsjZGVmaW5lwqDCoERQX0RV QUxfTU9ERV9UTURTX0RJU0FCTEUgMHgwMQo+ID4gKyNkZWZpbmUgRFBfRFVBTF9NT0RFX0hETUlf UElOX0NUUkwgMHgyMQo+ID4gKyNkZWZpbmXCoMKgRFBfRFVBTF9NT0RFX0NFQ19FTkFCTEUgMHgw MQo+ID4gKyNkZWZpbmUgRFBfRFVBTF9NT0RFX0kyQ19TUEVFRF9DVFJMIDB4MjIKPiA+ICsjZGVm aW5lIERQX0RVQUxfTU9ERV9MQVNUX1JFU0VSVkVEIDB4ZmYKPiA+ICsKPiA+ICtzdHJ1Y3QgaTJj X2FkYXB0ZXI7Cj4gPiArCj4gPiArc3NpemVfdCBkcm1fZHBfZHVhbF9tb2RlX3JlYWQoc3RydWN0 IGkyY19hZGFwdGVyICphZGFwdGVyLAo+ID4gKwkJCcKgwqDCoMKgwqDCoHU4IG9mZnNldCwgdm9p ZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Cj4gPiArc3NpemVfdCBkcm1fZHBfZHVhbF9tb2RlX3dy aXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKPiA+ICsJCQnCoMKgwqDCoMKgwqDCoHU4 IG9mZnNldCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QKPiA+IHNpemUpOwo+ID4gKwo+ID4g K2VudW0gZHJtX2RwX2R1YWxfbW9kZV90eXBlIHsKPiA+ICsJRFJNX0RQX0RVQUxfTU9ERV9OT05F LAo+ID4gKwlEUk1fRFBfRFVBTF9NT0RFX1RZUEUxX0RWSSwKPiA+ICsJRFJNX0RQX0RVQUxfTU9E RV9UWVBFMV9IRE1JLAo+ID4gKwlEUk1fRFBfRFVBTF9NT0RFX1RZUEUyX0RWSSwKPiA+ICsJRFJN X0RQX0RVQUxfTU9ERV9UWVBFMl9IRE1JLAo+ID4gK307Cj4gPiArCj4gPiArZW51bSBkcm1fZHBf ZHVhbF9tb2RlX3R5cGUgZHJtX2RwX2R1YWxfbW9kZV9kZXRlY3Qoc3RydWN0Cj4gPiBpMmNfYWRh cHRlciAqYWRhcHRlcik7Cj4gPiAraW50IGRybV9kcF9kdWFsX21vZGVfbWF4X3RtZHNfY2xvY2so c3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKPiA+ICtpbnQgZHJtX2RwX2R1YWxfbW9kZV9n ZXRfdG1kc19vdXRwdXQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAo+ID4gYm9vbCAqZW5h YmxlZCk7Cj4gPiAraW50IGRybV9kcF9kdWFsX21vZGVfc2V0X3RtZHNfb3V0cHV0KHN0cnVjdCBp MmNfYWRhcHRlciAqYWRhcHRlciwKPiA+IGJvb2wgZW5hYmxlKTsKPiA+ICtjb25zdCBjaGFyICpk cm1fZHBfZ2V0X2R1YWxfbW9kZV90eXBlX25hbWUoZW51bQo+ID4gZHJtX2RwX2R1YWxfbW9kZV90 eXBlIHR5cGUpOwo+ID4gKwo+ID4gKyNlbmRpZgoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBP VEMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==