From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zanoni, Paulo R" Subject: Re: [PATCH 1/4] drm: Add helper for DP++ adaptors Date: Thu, 31 Mar 2016 19:25:36 +0000 Message-ID: <1459452333.2359.23.camel@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> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456245988-19442-2-git-send-email-ville.syrjala@linux.intel.com> Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "ville.syrjala@linux.intel.com" , "dri-devel@lists.freedesktop.org" Cc: "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org RW0gVGVyLCAyMDE2LTAyLTIzIMOgcyAxODo0NiArMDIwMCwgdmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20NCmVzY3JldmV1Og0KPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmph bGFAbGludXguaW50ZWwuY29tPg0KPiANCj4gQWRkIGEgaGVscGVyIHdoaWNoIGFpZHMgaW4gaGUg aWRlbnRpZmljYXRpb24gb2YgRFAgZHVhbCBtb2RlIChha2EuDQo+IERQKyspDQo+IGFkYXB0b3Jz LiBUaGVyZSBhcmUgc2V2ZXJhbCB0eXBlcyBvZiBhZGFwdG9ycyBzcGVjaWZpZWQ6DQo+IHR5cGUg MSBEVkksIHR5cGUgMSBIRE1JLCB0eXBlIDIgRFZJLCB0eXBlIDIgSERNSQ0KPiANCj4gVHlwZSAx IGFkYXB0b3JzIGhhdmUgYSBtYXggVE1EUyBjbG9jayBsaW1pdCBvZiAxNjVNSHosIHR5cGUgMg0K PiBhZGFwdG9ycw0KPiBtYXkgZ28gYXMgaGlnaCBhcyAzMDBNSHogYW5kIHRoZXkgcHJvdmlkZSBh IHJlZ2lzdGVyIGluZm9ybWluZyB0aGUNCj4gc291cmNlIGRldmljZSB3aGF0IHRoZSBhY3R1YWwg bGltaXQgaXMuIFN1cHBvc2VkbHkgYWxzbyB0eXBlIDENCj4gYWRhcHRvcnMNCj4gbWF5IG9wdGlv bmFsbHkgaW1wbGVtZW50IHRoaXMgcmVnaXN0ZXIuIFRoaXMgVE1EUyBjbG9jayBsaW1pdCBpcyB0 aGUNCj4gbWFpbiByZWFzb24gd2h5IHdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlc2UgYWRhcHRvcnMu DQo+IA0KPiBUeXBlIDEgYWRhcHRvcnMgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlaXIgaW50ZXJuYWwg cmVnaXN0ZXJzIGFuZCB0aGUNCj4gc2luaw0KPiBEREMgYnVzIHRocm91Z2ggSTJDLiBUeXBlIDIg YWRhcHRvcnMgcHJvdmlkZSB0aGlzIGFjY2VzcyBib3RoIHZpYSBJMkMNCj4gYW5kIEkyQy1vdmVy LUFVWC4gQSB0eXBlIDIgc291cmNlIGRldmljZSBtYXkgY2hvb3NlIHRvIGltcGxlbWVudA0KPiBl aXRoZXINCj4gb3IgYm90aCBvZiB0aGVzZSBtZXRob2RzLiBJZiBhIHNvdXJjZSBkZXZpY2UgaW1w bGVtZW50cyBvbmx5IHRoZQ0KPiBJMkMtb3Zlci1BVVggbWV0aG9kLCB0aGVuIHRoZSBkcml2ZXIg d2lsbCBvYnZpb3VzbHkgbmVlZCBzcGVjaWZpYw0KPiBzdXBwb3J0IGZvciBzdWNoIGFkYXB0b3Jz IHNpbmNlIHRoZSBwb3J0IGlzIGRyaXZlbiBsaWtlIGFuIEhETUkgcG9ydCwNCj4gYnV0IEREQyBj b21tdW5pY2F0aW9uIGhhcHBlcyBvdmVyIHRoZSBBVVggY2hhbm5lbC4NCj4gDQo+IFRoaXMgaGVs cGVyIHNob3VsZCBiZSBlbm91Z2ggdG8gaWRlbnRpZnkgdGhlIGFkYXB0b3IgdHlwZSAoc29tZQ0K PiB0eXBlIDEgRFZJIGFkYXB0b3JzIG1heSBiZSBhIHNsaWdodCBleGNlcHRpb24pIGFuZCB0aGUg bWF4aW11bSBUTURTDQo+IGNsb2NrIGxpbWl0LiBBbm90aGVyIGZlYXR1cmUgdGhhdCBtYXkgYmUg YXZhaWxhYmxlIGlzIGNvbnRyb2wgb3Zlcg0KPiB0aGUgVE1EUyBvdXRwdXQgYnVmZmVycyBvbiB0 aGUgYWRhcHRvciwgcG9zc2libHkgYWxsb3dpbmcgZm9yIHNvbWUNCj4gcG93ZXIgc2F2aW5nIHdo ZW4gdGhlIFRNRFMgbGluayBpcyBkb3duLg0KPiANCj4gT3RoZXIgdXNlciBjb250cm9sbGFibGUg ZmVhdHVyZXMgdGhhdCBtYXkgYmUgYXZhaWxhYmxlIGluIHRoZQ0KPiBhZGFwdG9ycw0KPiBhcmUg ZG93bnN0cmVhbSBpMmMgYnVzIHNwZWVkIGNvbnRyb2wgd2hlbiB1c2luZyBpMmMtb3Zlci1hdXgs IGFuZA0KPiBzb21lIGNvbnRyb2wgb3ZlciB0aGUgQ0VDIHBpbi4gSSBjaG9zZSBub3QgdG8gcHJv dmlkZSBhbnkgaGVscGVyDQo+IGZ1bmN0aW9ucyBmb3IgdGhvc2Ugc2luY2UgSSBoYXZlIG5vIHVz ZSBmb3IgdGhlbSBpbiBpOTE1IGF0IHRoaXMNCj4gdGltZS4NCj4gVGhlIHJlc3Qgb2YgdGhlIHJl Z2lzdGVycyBpbiB0aGUgYWRhcHRvciBhcmUgbW9zdGx5IGp1c3QgaW5mb3JtYXRpb24sDQo+IGVn LiBJRUVFIE9VSSwgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHJldmlzaW9uLCBldGMuDQoNClBsZWFz ZSBydW4gYSBzcGVsbCBjaGVja2VyIGFuZCBkbyBzb21lIHByb29mLXJlYWRpbmcgYm90aCBpbiB0 aGUgY29tbWl0DQptZXNzYWdlIGFuZCBpbiB0aGUgY29kZSBjb21tZW50cy4gTXVsdGlwbGUgaW5z dGFuY2VzIG9mICJzaXpvIiwNCiJIb2V2ZXIiLCAiYWRhdG9yIiwgIklkZW50eWZ5IiwgZXRjLiBJ IGFsc28gc3BvdHRlZCBzb21lIHR5cG9zIGluIHRoZQ0KbmV4dCBjb21taXRzLg0KDQoNCg0KPiBT aWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPg0KPiAtLS0NCj4gwqBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMiArLQ0KPiDCoGRyaXZlcnMvZ3B1L2RybS9kcm1f ZHBfZHVhbF9tb2RlX2hlbHBlci5jIHwgMzI4DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKw0KPiDCoGluY2x1ZGUvZHJtL2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmjCoMKgwqDCoMKg fMKgwqA4MCArKysrKysrKw0KPiDCoDMgZmlsZXMgY2hhbmdlZCwgNDA5IGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkNCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Ry bV9kcF9kdWFsX21vZGVfaGVscGVyLmMNCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9k cm0vZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIuaA0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQ0KPiBpbmRleCA2ZWI5 NGZjNTYxZGMuLjIyMjI4ZWY1MGYzNiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQ0KPiBAQCAtMjMsNyArMjMs NyBAQCBkcm0tJChDT05GSUdfQUdQKSArPSBkcm1fYWdwc3VwcG9ydC5vDQo+IMKgDQo+IMKgZHJt X2ttc19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1fZHBfaGVscGVyLm8NCj4gZHJt X3Byb2JlX2hlbHBlci5vIFwNCj4gwqAJCWRybV9wbGFuZV9oZWxwZXIubyBkcm1fZHBfbXN0X3Rv cG9sb2d5Lm8NCj4gZHJtX2F0b21pY19oZWxwZXIubyBcDQo+IC0JCWRybV9rbXNfaGVscGVyX2Nv bW1vbi5vDQo+ICsJCWRybV9rbXNfaGVscGVyX2NvbW1vbi5vIGRybV9kcF9kdWFsX21vZGVfaGVs cGVyLm8NCj4gwqANCj4gwqBkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fTE9BRF9FRElEX0ZJ Uk1XQVJFKSArPSBkcm1fZWRpZF9sb2FkLm8NCj4gwqBkcm1fa21zX2hlbHBlci0kKENPTkZJR19E Uk1fRkJERVZfRU1VTEFUSU9OKSArPSBkcm1fZmJfaGVscGVyLm8NCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5jDQo+IGIvZHJpdmVycy9ncHUv ZHJtL2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g aW5kZXggMDAwMDAwMDAwMDAwLi5iZmU1MTFjMDk1NjgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIuYw0KPiBAQCAtMCwwICsx LDMyOCBAQA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9u DQo+ICsgKg0KPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24NCj4gb2J0YWluaW5nIGENCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUNCj4gIlNvZnR3YXJl IiksDQo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dA0KPiBsaW1pdGF0aW9uDQo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwNCj4gc3VibGljZW5zZSwN Cj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tDQo+IHRoZQ0KPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcNCj4gY29uZGl0aW9uczoNCj4gKyAqDQo+ICsg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz aGFsbCBiZQ0KPiBpbmNsdWRlZCBpbg0KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQo+ICsgKg0KPiArICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsDQo+IEVYUFJFU1Mg T1INCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YNCj4gTUVSQ0hBTlRBQklMSVRZLA0KPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKgSU4gTk8NCj4gRVZFTlQgU0hBTEwN Cj4gKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwNCj4gREFNQUdFUyBPUg0KPiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUg0KPiBPVEhFUldJU0UsDQo+ICsgKiBB UklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRQ0KPiBVU0UgT1INCj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCj4g KyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvZXJybm8uaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9leHBvcnQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+DQo+ICsjaW5jbHVkZSA8ZHJt L2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4NCj4g Kw0KPiArLyoqDQo+ICsgKiBET0M6IERQIGR1YWwgbW9kZSAoYWthLiBEUCsrKSBhZGFwdG9yIGhl bHBlcnMNCj4gKyAqDQo+ICsgKiBIZWxwZXIgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCBEUCBkdWFs IG1vZGUgYWRhcHRvcnMuDQo+ICsgKg0KPiArICogVHlwZSAxOg0KPiArICogQWRhcHRvciByZWdp c3RlcnMgKGlmIGFueSkgYW5kIHRoZSBzaW5rIEREQyBidXMgbWF5IGJlIGFjY2Vzc2VkDQo+IHZp YSBJMkMuDQo+ICsgKg0KPiArICogVHlwZSAyOg0KPiArICogQWRhcHRvciByZWdpc3RlcnMgYW5k IHNpbmsgRERDIGJ1cyBjYW4gYmUgYWNjZXNzZWQgZWl0aGVyIHZpYSBJMkMNCj4gb3INCj4gKyAq IEkyQy1vdmVyLUFVWC4gU291cmNlIGRldmljZXMgbWF5IGNob29zZSB0byBpbXBsZW1lbnQgZWl0 aGVyIG9uZQ0KPiBvcg0KPiArICogYm90aCBvZiB0aGVzZSBhY2Nlc3MgbWV0aG9kcy4NCj4gKyAq Lw0KPiArDQo+ICsjZGVmaW5lIERQX0RVQUxfTU9ERV9TTEFWRV9BRERSRVNTIDB4NDANCj4gKw0K PiArLyoqDQo+ICsgKiBkcm1fZHBfZHVhbF9tb2RlX3JlYWQgLSBSZWFkIGZyb20gdGhlIERQIGR1 YWwgbW9kZSBhZGFwdG9yDQo+IHJlZ2lzdGVyKHMpDQo+ICsgKiBhZGFwdGVyOiBJMkMgYWRhcHRl ciBmb3IgdGhlIEREQyBidXMNCj4gKyAqIG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0DQo+ICsgKiBi dWZmZXI6IGJ1ZmZlciBmb3IgcmV0dXJuIGRhdGENCj4gKyAqIHNpemU6IHNpem8gb2YgdGhlIGJ1 ZmZlcg0KPiArICoNCj4gKyAqIFJlYWRzIEBzaXplIGJ5dGVzIGZyb20gdGhlIERQIGR1YWwgbW9k ZSBhZGFwdG9yIHJlZ2lzdGVycw0KPiArICogc3RhcnRpbmcgYXQgQG9mZnNldC4NCj4gKyAqDQo+ ICsgKiBSZXR1cm5zOg0KPiArICogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9u IGZhaWx1cmUNCj4gKyAqLw0KPiArc3NpemVfdCBkcm1fZHBfZHVhbF9tb2RlX3JlYWQoc3RydWN0 IGkyY19hZGFwdGVyICphZGFwdGVyLA0KPiArCQkJwqDCoMKgwqDCoMKgdTggb2Zmc2V0LCB2b2lk ICpidWZmZXIsIHNpemVfdCBzaXplKQ0KPiArew0KPiArCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9 IHsNCj4gKwkJew0KPiArCQkJLmFkZHIgPSBEUF9EVUFMX01PREVfU0xBVkVfQUREUkVTUywNCj4g KwkJCS5mbGFncyA9IDAsDQo+ICsJCQkubGVuID0gMSwNCj4gKwkJCS5idWYgPSAmb2Zmc2V0LA0K PiArCQl9LA0KPiArCQl7DQo+ICsJCQkuYWRkciA9IERQX0RVQUxfTU9ERV9TTEFWRV9BRERSRVNT LA0KPiArCQkJLmZsYWdzID0gSTJDX01fUkQsDQo+ICsJCQkubGVuID0gc2l6ZSwNCj4gKwkJCS5i dWYgPSBidWZmZXIsDQo+ICsJCX0sDQo+ICsJfTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0 ID0gaTJjX3RyYW5zZmVyKGFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpOw0KPiArCWlm IChyZXQgPCAwKQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCWlmIChyZXQgIT0gQVJSQVlfU0laRSht c2dzKSkNCj4gKwkJcmV0dXJuIC1FUFJPVE87DQoNCk5vIHJldHJpZXMgbmVlZGVkIGhlcmUgb3Ig YmVsb3c/IChhc2tpbmcgdGhpcyBkdWUgdG8gdGhlIGNvbW1lbnQgaW4NCmRybV9lZGlkLmMgYWJv dXQgcmV0cmllcykNCg0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICogZHJtX2RwX2R1YWxfbW9kZV93cml0ZSAtIFdyaXRlIHRvIHRoZSBEUCBkdWFsIG1vZGUgYWRh cHRvcg0KPiByZWdpc3RlcihzKQ0KPiArICogYWRhcHRlcjogSTJDIGFkYXB0ZXIgZm9yIHRoZSBE REMgYnVzDQo+ICsgKiBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldA0KPiArICogYnVmZmVyOiBidWZm ZXIgZm9yIHdyaXRlIGRhdGENCj4gKyAqIHNpemU6IHNpem8gb2YgdGhlIGJ1ZmZlcg0KPiArICoN Cj4gKyAqIFdyaXRlcyBAc2l6ZSBieXRlcyB0byB0aGUgRFAgZHVhbCBtb2RlIGFkYXB0b3IgcmVn aXN0ZXJzDQo+ICsgKiBzdGFydGluZyBhdCBAb2Zmc2V0Lg0KPiArICoNCj4gKyAqIFJldHVybnM6 DQo+ICsgKiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQ0KPiAr ICovDQo+ICtzc2l6ZV90IGRybV9kcF9kdWFsX21vZGVfd3JpdGUoc3RydWN0IGkyY19hZGFwdGVy ICphZGFwdGVyLA0KPiArCQkJwqDCoMKgwqDCoMKgwqB1OCBvZmZzZXQsIGNvbnN0IHZvaWQgKmJ1 ZmZlciwgc2l6ZV90DQo+IHNpemUpDQo+ICt7DQo+ICsJc3RydWN0IGkyY19tc2cgbXNnID0gew0K PiArCQkuYWRkciA9IERQX0RVQUxfTU9ERV9TTEFWRV9BRERSRVNTLA0KPiArCQkuZmxhZ3MgPSAw LA0KPiArCQkubGVuID0gMSArIHNpemUsDQo+ICsJCS5idWYgPSBOVUxMLA0KPiArCX07DQo+ICsJ dm9pZCAqZGF0YTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJZGF0YSA9IGttYWxsb2MobXNnLmxl biwgR0ZQX1RFTVBPUkFSWSk7DQo+ICsJaWYgKCFkYXRhKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsN Cj4gKw0KPiArCW1zZy5idWYgPSBkYXRhOw0KPiArDQo+ICsJbWVtY3B5KGRhdGEsICZvZmZzZXQs IDEpOw0KPiArCW1lbWNweShkYXRhICsgMSwgYnVmZmVyLCBzaXplKTsNCj4gKw0KPiArCXJldCA9 IGkyY190cmFuc2ZlcihhZGFwdGVyLCAmbXNnLCAxKTsNCj4gKw0KPiArCWtmcmVlKGRhdGEpOw0K PiArDQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCXJldHVybiByZXQ7DQo+ICsJaWYgKHJldCAhPSAx KQ0KPiArCQlyZXR1cm4gLUVQUk9UTzsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArRVhQ T1JUX1NZTUJPTChkcm1fZHBfZHVhbF9tb2RlX3dyaXRlKTsNCj4gKw0KPiArc3RhdGljIGJvb2wg aXNfaGRtaV9hZGFwdG9yKGNvbnN0IGNoYXINCj4gaGRtaV9pZFtEUF9EVUFMX01PREVfSERNSV9J RF9MRU5dKQ0KPiArew0KPiArCXN0YXRpYyBjb25zdCBjaGFyDQo+IGRwX2R1YWxfbW9kZV9oZG1p X2lkW0RQX0RVQUxfTU9ERV9IRE1JX0lEX0xFTl0gPQ0KPiArCQkiRFAtSERNSSBBREFQVE9SXHgw NCI7DQo+ICsNCj4gKwlyZXR1cm4gbWVtY21wKGhkbWlfaWQsIGRwX2R1YWxfbW9kZV9oZG1pX2lk LA0KPiArCQnCoMKgwqDCoMKgwqBzaXplb2YoZHBfZHVhbF9tb2RlX2hkbWlfaWQpKSA9PSAwOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kcF9kdWFsX21vZGVfZGV0ZWN0IC0gSWRlbnR5 ZnkgdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yDQo+ICsgKiBhZGFwdGVyOiBJMkMgYWRhcHRlciBm b3IgdGhlIEREQyBidXMNCj4gKyAqDQo+ICsgKiBBdHRlbXB0IHRvIGlkZW50aWZ5IHRoZSB0eXBl IG9mIHRoZSBEUCBkdWFsIG1vZGUgYWRhcHRvciB1c2VkLg0KPiArICoNCj4gKyAqIE5vdGUgdGhh dCB3aGVuIHRoZSBhbnN3ZXIgaXMgQERSTV9EUF9EVUFMX01PREVfTk9ORSBpdCdzIG5vdA0KDQpT byBob3cgYWJvdXQgYWRkaW5nIGEgbmV3IG9yIGp1c3QgcmVuYW1pbmcgaXQgdG8NCkRSTV9EUF9E VUFMX01PREVfVU5LTk9XTj8gTGV0J3Mgbm90IGFzc3VtZSBldmVyeWJvZHkgaXMgZ29pbmcgdG8g cmVhZA0KdGhlIGRvY3MuDQoNCj4gKyAqIGNlcnRhaW4gd2hldGhlciB3ZSdyZSBkZWFsaW5nIHdp dGggYSBuYXRpdmUgSERNSSBwb3J0IG9yDQo+ICsgKiBhIHR5cGUgMSBEVkkgZHVhbCBtb2RlIGFk YXB0b3IuIFRoZSBkcml2ZXIgd2lsbCBoYXZlIHRvIHVzZQ0KPiArICogc29tZSBvdGhlciBoYXJk d2FyZS9kcml2ZXIgc3BlY2lmaWMgbWVjaGFuaXNtIHRvIG1ha2UgdGhhdA0KPiArICogZGlzdGlu Y3Rpb24uDQo+ICsgKg0KPiArICogUmV0dXJuczoNCj4gKyAqIFRoZSB0eXBlIG9mIHRoZSBEUCBk dWFsIG1vZGUgYWRhcHRvciB1c2VkDQo+ICsgKi8NCj4gK2VudW0gZHJtX2RwX2R1YWxfbW9kZV90 eXBlIGRybV9kcF9kdWFsX21vZGVfZGV0ZWN0KHN0cnVjdA0KPiBpMmNfYWRhcHRlciAqYWRhcHRl cikNCj4gK3sNCj4gKwljaGFyIGhkbWlfaWRbRFBfRFVBTF9NT0RFX0hETUlfSURfTEVOXSA9IHt9 Ow0KPiArCXVpbnQ4X3QgYWRhcHRvcl9pZCA9IDB4MDA7DQo+ICsJc3NpemVfdCByZXQ7DQo+ICsN Cj4gKwkvKg0KPiArCcKgKiBMZXQncyBzZWUgaWYgdGhlIGFkYXB0b3IgaXMgdGhlcmUgdGhlIGJ5 IHJlYWRpbmcgdGhlDQo+ICsJwqAqIEhETUkgSUQgcmVnaXN0ZXJzLg0KPiArCcKgKg0KPiArCcKg KiBOb3RlIHRoYXQgdHlwZSAxIERWSSBhZGFwdG9ycyBhcmUgbm90IHJlcXVpcmVkIHRvDQo+IGlt cGxlbW50DQo+ICsJwqAqIGFueSByZWdpc3RlcnMsIGFuZCB0aGF0IHByZXNlbnRzIGEgcHJvYmxl bSBmb3IgZGV0ZWN0aW9uLg0KPiArCcKgKiBJZiB0aGUgaTJjIHRyYW5zZmVyIGlzIG5hY2tlZCwg d2UgbWF5IG9yIG1heSBub3QgYmUNCj4gZGVhbGluZw0KPiArCcKgKiB3aXRoIGEgdHlwZSAxIERW SSBhZGFwdG9yLiBTb21lIG90aGVyIG1lY2hhbmlzbSBvZg0KPiBkZXRlY3RpbmcNCj4gKwnCoCog dGhlIHByZXNlbmNlIG9mIHRoZSBhZGFwdG9yIGlzIHJlcXVpcmVkLiBPbmUgd2F5IHdvdWxkIGJl DQo+ICsJwqAqIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiB0aGUgQ09ORklHMSBwaW4sIEFub3RoZXIg bWV0aG9kDQo+IHdvdWxkDQo+ICsJwqAqIHNpbXBseSByZXF1aXJlIHRoZSBkcml2ZXIgdG8ga25v dyB3aGV0aGVyIHRoZSBwb3J0IGlzIGENCj4gRFArKw0KPiArCcKgKiBwb3J0IG9yIGEgbmF0aXZl IEhETUkgcG9ydC4gQm90aCBvZiB0aGVzZSBtZXRob2RzIGFyZQ0KPiBlbnRpcmVseQ0KPiArCcKg KiBoYXJkd2FyZS9kcml2ZXIgc3BlY2lmaWMgc28gd2UgY2FuJ3QgZGVhbCB3aXRoIHRoZW0gaGVy ZS4NCj4gKwnCoCovDQo+ICsJcmV0ID0gZHJtX2RwX2R1YWxfbW9kZV9yZWFkKGFkYXB0ZXIsIERQ X0RVQUxfTU9ERV9IRE1JX0lELA0KPiArCQkJCcKgwqDCoMKgaGRtaV9pZCwgc2l6ZW9mKGhkbWlf aWQpKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gRFJNX0RQX0RVQUxfTU9ERV9OT05FOw0K PiArDQo+ICsJLyoNCj4gKwnCoCogU2lnaC4gU29tZSAobWF5YmUgYWxsPykgdHlwZSAxIGFkYXB0 b3JzIGFyZSBicm9rZW4gYW5kDQo+IGFjaw0KPiArCcKgKiB0aGUgb2Zmc2V0IGJ1dCBpZ25vcmUg aXQsIGFuZCBpbnN0ZWFkIHRoZXkganVzdCBhbHdheXMNCj4gcmV0dXJuDQo+ICsJwqAqIGRhdGEg ZnJvbSB0aGUgc3RhcnQgb2YgdGhlIEhETUkgSUQgYnVmZmVyLiBTbyBmb3IgYQ0KPiBicm9rZW4N Cj4gKwnCoCogdHlwZSAxIEhETUkgYWRhcHRvciBhIHNpbmdsZSBieXRlIHJlYWQgd2lsbCBhbHdh eXMgZ2l2ZQ0KPiB1cw0KPiArCcKgKiAweDQ0LCBhbmQgZm9yIGEgdHlwZSAxIERWSSBhZGFwdG9y IGl0IHNob3VsZCBnaXZlIDB4MDANCj4gKwnCoCogKGFzc3VtaW5nIGl0IGltcGxlbWVudHMgYW55 IHJlZ2lzdGVycykuDQoNClNvIHNob3VsZG4ndCB3ZSBqdXN0IHRyeSB0byByZWFkIGZyb20gMHgw MCB0byAweDFGIGluIGEgc2luZ2xlIHNob3Q/DQpXb3VsZCB0aGlzIHdvcmsgZm9yIHlvdXIgc3Bl Y2lmaWMgYWRhcHRvcj8gSXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8NCmtub3cuDQoNCg0KPiAg Rm9ydHVuYXRlbHkgbmVpdGhlcg0KPiArCcKgKiBvZiB0aG9zZSB2YWx1ZXMgd2lsbCBtYXRjaCB0 aGUgdHlwZSAyIHNpZ25hdHVyZSBvZiB0aGUNCj4gKwnCoCogRFBfRFVBTF9NT0RFX0FEQVBUT1Jf SUQgcmVnaXN0ZXIgc28gd2UgY2FuIHByb2NlZWQgd2l0aA0KPiArCcKgKiB0aGUgdHlwZSAyIGFk YXB0b3IgZGV0ZWN0aW9uIHNhZmVseSBldmVuIGluIHRoZSBwcmVzZW5jZQ0KPiArCcKgKiBvZiBi cm9rZW4gdHlwZSAxIGFkYXB0b3JzLg0KPiArCcKgKi8NCj4gKwlyZXQgPSBkcm1fZHBfZHVhbF9t b2RlX3JlYWQoYWRhcHRlciwNCj4gRFBfRFVBTF9NT0RFX0FEQVBUT1JfSUQsDQo+ICsJCQkJwqDC oMKgwqAmYWRhcHRvcl9pZCwNCj4gc2l6ZW9mKGFkYXB0b3JfaWQpKTsNCj4gKwlpZiAocmV0IHx8 IChhZGFwdG9yX2lkICE9IChEUF9EVUFMX01PREVfVFlQRV9UWVBFMiB8DQo+ICsJCQkJwqDCoMKg RFBfRFVBTF9NT0RFX1JFVl9UWVBFMikpKSB7DQo+ICsJCWlmIChpc19oZG1pX2FkYXB0b3IoaGRt aV9pZCkpDQo+ICsJCQlyZXR1cm4gRFJNX0RQX0RVQUxfTU9ERV9UWVBFMV9IRE1JOw0KPiArCQll bHNlDQo+ICsJCQlyZXR1cm4gRFJNX0RQX0RVQUxfTU9ERV9UWVBFMV9EVkk7DQo+ICsJfSBlbHNl IHsNCj4gKwkJaWYgKGlzX2hkbWlfYWRhcHRvcihoZG1pX2lkKSkNCj4gKwkJCXJldHVybiBEUk1f RFBfRFVBTF9NT0RFX1RZUEUyX0hETUk7DQo+ICsJCWVsc2UNCj4gKwkJCXJldHVybiBEUk1fRFBf RFVBTF9NT0RFX1RZUEUyX0RWSTsNCj4gKwl9DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9k cF9kdWFsX21vZGVfZGV0ZWN0KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZHBfZHVhbF9tb2Rl X21heF90bWRzX2Nsb2NrIC0gTWF4IFRNRFMgY2xvY2sgZm9yIERQIGR1YWwgbW9kZQ0KPiBhZGFw dG9yDQo+ICsgKiBhZGFwdGVyOiBJMkMgYWRhcHRlciBmb3IgdGhlIEREQyBidXMNCj4gKyAqDQo+ ICsgKiBEZXRlcm1pbmUgdGhlIG1heCBUTURTIGNsb2NrIHRoZSBhZGFwdG9yIHN1cHBvcnRzIGJh c2VkIG9uIHRoZQ0KPiArICogRFBfRFVBTF9NT0RFX01BWF9UTURTX0NMT0NLIHJlZ2lzdGVyLiBU aGUgcmVnaXN0ZXIgaXMgbWFuZGF0b3J5DQo+IGZvcg0KPiArICogdHlwZSAyIGFkYXB0b3JzLCBv cHRpb25hbCBmb3IgdHlwZSAxIGFkYXB0b3JzLiBIb2V2ZXIsIGFzIHNvbWUNCj4gdHlwZSAxDQo+ ICsgKiBhZGFwdG9ycyBhcmUgYnJva2VuIChzZWUgY29tbWVudHMgaW4gZHJtX2RwX2R1YWxfbW9k ZV9kZXRlY3QoKQ0KPiBmb3IgdGhlDQo+ICsgKiBkZXRhaWxzKSBvbmUgcHJvYmFibHkgc2hvdWxk bid0IHVzZSB0aGlzIHdpdGggdHlwZSAxIGFkYXB0b3JzIGF0DQo+IGFsbC4NCj4gKyAqIFR5cGUg MSBhZGFwdG9ycyBzaG91bGQgYW55d2F5IGJlIGFsd2F5cyBsaW1pdGVkIHRvIDE2NSBNSHouDQoN CkkgYWx3YXlzIGFzc3VtZSBwcm9ncmFtbWVycyBhcmUgYXMgYmFkIGFzIHBvc3NpYmxlLCBzbyBJ IHdvbmRlciBpZiB3ZQ0Kc2hvdWxkIGp1c3QgYWxzbyBjYWxsIGRybV9kcF9kdWFsX21vZGVfZGV0 ZWN0KCkgaGVyZS4gQWxzbyB0cnkgdGhlDQp0cmljayBvZiByZWFkaW5nIHRoZSB3aG9sZSB0aGlu ZyBhdCBvbmNlIGluc3RlYWQgb2YgdGhlIHNwZWNpZmljDQphZGRyZXNzLiBTYW1lIGdvZXMgZm9y IHRoZSBvdGhlciBmdW5jdGlvbnMuIEkgYWxzbyBzZWUgdGhhdCB0aGlzIHdvdWxkDQptYWtlIHBh dGNoZXMgMi00IGRpZmZlcmVudCwgc28gdGhpcyBpcyBqdXN0IGFuIGlkZWEsIG5vdCBhIHJlcXVp cmVtZW50Lg0KDQo+ICsgKg0KPiArICogUmV0dXJuczoNCj4gKyAqIE1heGltdW0gc3VwcG9ydGVk IFRNRFMgY2xvY2sgcmF0ZSBmb3IgdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yIGluDQo+IGtIei4N Cj4gKyAqLw0KPiAraW50IGRybV9kcF9kdWFsX21vZGVfbWF4X3RtZHNfY2xvY2soc3RydWN0IGky Y19hZGFwdGVyICphZGFwdGVyKQ0KPiArew0KPiArCXVpbnQ4X3QgbWF4X3RtZHNfY2xvY2s7DQo+ ICsJc3NpemVfdCByZXQ7DQo+ICsNCj4gKwkvKg0KPiArCcKgKiBUeXBlIDEgYWRhcHRvcnMgYXJl IGxpbWl0ZWQgdG8gMTY1TUh6DQo+IA0KPiArCcKgKiBUeXBlIDIgYWRhcHRvcnMgY2FuIHRlbGxz IHVzIHRoZWlyIGxpbWl0DQoNCiJjYW4gdGVsbHMiDQoNCj4gKwnCoCovDQo+ICsJcmV0ID0gZHJt X2RwX2R1YWxfbW9kZV9yZWFkKGFkYXB0ZXIsDQo+IERQX0RVQUxfTU9ERV9NQVhfVE1EU19DTE9D SywNCj4gKwkJCQnCoMKgwqDCoCZtYXhfdG1kc19jbG9jaywNCj4gc2l6ZW9mKG1heF90bWRzX2Ns b2NrKSk7DQo+ICsJaWYgKHJldCkNCg0KTWF5YmUgYWxzbyAiaWYgKHJldCB8fCBtYXhfdG1kc19j bG9jayA9PSAwIHx8IG1heF90bWRzX2Nsb2NrID09IDB4RkYpIj8NCg0KDQo+ICsJCXJldHVybiAx NjUwMDA7DQo+ICsNCj4gKwlyZXR1cm4gbWF4X3RtZHNfY2xvY2sgKiA1MDAwIC8gMjsNCj4gK30N Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2R1YWxfbW9kZV9tYXhfdG1kc19jbG9jayk7DQo+ICsN Cj4gKy8qKg0KPiArICogZHJtX2RwX2R1YWxfbW9kZV9nZXRfdG1kc19vdXRwdXQgLSBHZXQgdGhl IHN0YXRlIG9mIHRoZSBUTURTDQo+IG91dHB1dCBidWZmZXJzIGluIHRoZSBEUCBkdWFsIG1vZGUg YWRhcHRvcg0KPiArICogYWRhcHRlcjogSTJDIGFkYXB0ZXIgZm9yIHRoZSBEREMgYnVzDQo+ICsg KiBlbmFibGVkOiBjdXJyZW50IHN0YXRlIG9mIHRoZSBUTURTIG91dHB1dCBidWZmZXJzDQo+ICsg Kg0KPiArICogR2V0IHRoZSBzdGF0ZSBvZiB0aGUgVE1EUyBvdXRwdXQgYnVmZmVycyBpbiB0aGUg YWRhcHRvci4NCj4gKyAqIERQX0RVQUxfTU9ERV9UTURTX09FTiByZWdpc3RlciBpcyBtYW5kYXRv cnkgZm9yIHR5cGUgMiBhZGFwdG9ycywNCj4gKyAqIG9wdGlvbmFscyBmb3IgdHlwZSAxIGFkYXB0 b3JzLiBIb2V2ZXIsIGFzIHNvbWUgdHlwZSAxIGFkYXB0b3JzDQo+IGFyZQ0KPiArICogYnJva2Vu IChzZWUgY29tbWVudHMgaW4gZHJtX2RwX2R1YWxfbW9kZV9kZXRlY3QoKSBmb3IgdGhlDQo+IGRl dGFpbHMpDQo+ICsgKiBvbmUgcHJvYmFibHkgc2hvdWxkbid0IHVzZSB0aGlzIHdpdGggdHlwZSAx IGFkYXB0b3JzIGF0IGFsbC4NCj4gKyAqDQo+ICsgKiBSZXR1cm5zOg0KPiArICogMCBvbiBzdWNj ZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCj4gKyAqLw0KPiAraW50IGRybV9k cF9kdWFsX21vZGVfZ2V0X3RtZHNfb3V0cHV0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwN Cj4gYm9vbCAqZW5hYmxlZCkNCj4gK3sNCj4gKwl1aW50OF90IHRtZHNfb2VuOw0KPiArCXNzaXpl X3QgcmV0Ow0KPiArDQo+ICsJcmV0ID0gZHJtX2RwX2R1YWxfbW9kZV9yZWFkKGFkYXB0ZXIsIERQ X0RVQUxfTU9ERV9UTURTX09FTiwNCj4gKwkJCQnCoMKgwqDCoCZ0bWRzX29lbiwgc2l6ZW9mKHRt ZHNfb2VuKSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCSplbmFi bGVkID0gISh0bWRzX29lbiAmIERQX0RVQUxfTU9ERV9UTURTX0RJU0FCTEUpOw0KPiArDQo+ICsJ cmV0dXJuIDA7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9kdWFsX21vZGVfZ2V0X3Rt ZHNfb3V0cHV0KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZHBfZHVhbF9tb2RlX3NldF90bWRz X291dHB1dCAtIEVuYWJsZS9kaXNhYmxlIFRNRFMgb3V0cHV0DQo+IGJ1ZmZlcnMgaW4gdGhlIERQ IGR1YWwgbW9kZSBhZGFwdG9yDQo+ICsgKiBhZGFwdGVyOiBJMkMgYWRhcHRlciBmb3IgdGhlIERE QyBidXMNCj4gKyAqIGVuYWJsZTogZW5hYmxlIChhcyBvcHBvc2VkIHRvIGRpc2FibGUpIHRoZSBU TURTIG91dHB1dCBidWZmZXJzDQo+ICsgKg0KPiArICogU2V0IHRoZSBzdGF0ZSBvZiB0aGUgVE1E UyBvdXRwdXQgYnVmZmVycyBpbiB0aGUgYWRhcHRvci4NCj4gKyAqIERQX0RVQUxfTU9ERV9UTURT X09FTiByZWdpc3RlciBpcyBtYW5kYXRvcnkgZm9yIHR5cGUgMiBhZGFwdG9ycywNCj4gKyAqIG9w dGlvbmFscyBmb3IgdHlwZSAxIGFkYXB0b3JzLiBIb2V2ZXIsIGFzIHNvbWUgdHlwZSAxIGFkYXB0 b3JzDQo+IGFyZQ0KPiArICogYnJva2VuIChzZWUgY29tbWVudHMgaW4gZHJtX2RwX2R1YWxfbW9k ZV9kZXRlY3QoKSBmb3IgdGhlDQo+IGRldGFpbHMpDQo+ICsgKiBvbmUgcHJvYmFibHkgc2hvdWxk bid0IHVzZSB0aGlzIHdpdGggdHlwZSAxIGFkYXB0b3JzIGF0IGFsbC4NCj4gKyAqDQo+ICsgKiBS ZXR1cm5zOg0KPiArICogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1 cmUNCj4gKyAqLw0KPiAraW50IGRybV9kcF9kdWFsX21vZGVfc2V0X3RtZHNfb3V0cHV0KHN0cnVj dCBpMmNfYWRhcHRlciAqYWRhcHRlciwNCj4gYm9vbCBlbmFibGUpDQo+ICt7DQo+ICsJdWludDhf dCB0bWRzX29lbiA9IGVuYWJsZSA/IDAgOiBEUF9EVUFMX01PREVfVE1EU19ESVNBQkxFOw0KPiAr CXNzaXplX3QgcmV0Ow0KPiArDQo+ICsJcmV0ID0gZHJtX2RwX2R1YWxfbW9kZV93cml0ZShhZGFw dGVyLCBEUF9EVUFMX01PREVfVE1EU19PRU4sDQo+ICsJCQkJwqDCoMKgwqDCoCZ0bWRzX29lbiwg c2l6ZW9mKHRtZHNfb2VuKSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfZHVhbF9tb2RlX3Nl dF90bWRzX291dHB1dCk7DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RwX2dldF9kdWFsX21vZGVf dHlwZV9uYW1lIC0gR2V0IHRoZSBuYW1lIG9mIHRoZSBEUCBkdWFsIG1vZGUNCj4gYWRhcHRvciB0 eXBlIGFzIGEgc3RyaW5nDQo+ICsgKiB0eXBlOiBEUCBkdWFsIG1vZGUgYWRhcHRvciB0eXBlDQo+ ICsgKg0KPiArICogUmV0dXJuczoNCj4gKyAqIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUg RFAgZHVhbCBtb2RlIGFkYXB0b3IgdHlwZQ0KPiArICovDQo+ICtjb25zdCBjaGFyICpkcm1fZHBf Z2V0X2R1YWxfbW9kZV90eXBlX25hbWUoZW51bQ0KPiBkcm1fZHBfZHVhbF9tb2RlX3R5cGUgdHlw ZSkNCj4gK3sNCj4gKwlzd2l0Y2ggKHR5cGUpIHsNCj4gKwljYXNlIERSTV9EUF9EVUFMX01PREVf Tk9ORToNCj4gKwkJcmV0dXJuICJub25lIjsNCj4gKwljYXNlIERSTV9EUF9EVUFMX01PREVfVFlQ RTFfRFZJOg0KPiArCQlyZXR1cm4gInR5cGUgMSBEVkkiOw0KPiArCWNhc2UgRFJNX0RQX0RVQUxf TU9ERV9UWVBFMV9IRE1JOg0KPiArCQlyZXR1cm4gInR5cGUgMSBIRE1JIjsNCj4gKwljYXNlIERS TV9EUF9EVUFMX01PREVfVFlQRTJfRFZJOg0KPiArCQlyZXR1cm4gInR5cGUgMiBEVkkiOw0KPiAr CWNhc2UgRFJNX0RQX0RVQUxfTU9ERV9UWVBFMl9IRE1JOg0KPiArCQlyZXR1cm4gInR5cGUgMiBI RE1JIjsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gInVua25vd24iOw0KDQpQbGVhc2UgYXQg bGVhc3QgV0FSTl9PTigxKT8NCg0KQW5kLCBpZiB5b3UgaW1wbGVtZW50IG15IHN1Z2dlc3Rpb24g b2YgYWRkaW5nIGFuIGFjdHVhbCB1bmtub3duIHZhbHVlDQp0byB0aGUgZW51bSwgZG9uJ3QgZm9y Z2V0IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBjYXNlIHRvIHJldHVybg0Kc29tZXRoaW5nIHRoYXQn cyBub3QgInVua25vd24iLg0KDQpNb3N0IG9mIHRoZSB0aGluZ3MgSSB3cm90ZSBhYm92ZSBhcmUg anVzdCBpZGVhcywgbm90IHJlcXVpcmVtZW50cywgYW5kDQpoYXZpbmcgdGhpcyBwYXRjaCBhcy1p cyBsb29rcyBiZXR0ZXIgdGhhbiBub3QgaGF2aW5nIGl0LCBzbyBpZiB5b3UgYXQNCmxlYXN0IGZp eCB0aGUgc3BlbGxpbmcgZXJyb3JzOg0KDQpSZXZpZXdlZC1ieTogUGF1bG8gWmFub25pIDxwYXVs by5yLnphbm9uaUBpbnRlbC5jb20+DQoNCj4gKwl9Ow0KPiArDQo+ICt9DQo+ICtFWFBPUlRfU1lN Qk9MKGRybV9kcF9nZXRfZHVhbF9tb2RlX3R5cGVfbmFtZSk7DQo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5oDQo+IGIvaW5jbHVkZS9kcm0vZHJtX2Rw X2R1YWxfbW9kZV9oZWxwZXIuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAw MDAwMDAwMDAuLmEyZjZiNDU4N2Y1Zg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2luY2x1ZGUv ZHJtL2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmgNCj4gQEAgLTAsMCArMSw4MCBAQA0KPiArLyoN Cj4gKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uDQo+ICsgKg0KPiArICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24NCj4gb2J0YWluaW5nIGENCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUNCj4gIlNvZnR3YXJlIiksDQo+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dA0KPiBsaW1pdGF0aW9uDQo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwNCj4gc3VibGljZW5zZSwNCj4gKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t DQo+IHRoZQ0KPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcNCj4gY29uZGl0aW9uczoNCj4gKyAqDQo+ICsgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQ0KPiBpbmNs dWRlZCBpbg0KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuDQo+ICsgKg0KPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsDQo+IEVYUFJFU1MgT1INCj4gKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YNCj4gTUVS Q0hBTlRBQklMSVRZLA0KPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC7CoMKgSU4gTk8NCj4gRVZFTlQgU0hBTEwNCj4gKyAqIFRIRSBDT1BZ UklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwNCj4g REFNQUdFUyBPUg0KPiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUg0KPiBPVEhFUldJU0UsDQo+ICsgKiBBUklTSU5HIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQ0KPiBVU0UgT1IN Cj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCj4gKyAqLw0KPiArDQo+ICsj aWZuZGVmIERSTV9EUF9EVUFMX01PREVfSEVMUEVSX0gNCj4gKyNkZWZpbmUgRFJNX0RQX0RVQUxf TU9ERV9IRUxQRVJfSA0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gKw0KPiAr LyoNCj4gKyAqIE9wdGlvbmFsIGZvciB0eXBlIDEgRFZJIGFkYXB0b3JzDQo+ICsgKiBNYW5kYXRv cnkgZm9yIHR5cGUgMSBIRE1JIGFuZCB0eXBlIDIgYWRhdG9ycw0KPiArICovDQo+ICsjZGVmaW5l IERQX0RVQUxfTU9ERV9IRE1JX0lEIDB4MDAgLyogMDAtMGYgKi8NCj4gKyNkZWZpbmXCoMKgRFBf RFVBTF9NT0RFX0hETUlfSURfTEVOIDE2DQo+ICsvKg0KPiArICogT3B0aW9uYWwgZm9yIHR5cGUg MSBhZGFwdG9ycw0KPiArICogTWFuZGF0b3J5IGZvciB0eXBlIDIgYWRhdG9ycw0KPiArICovDQo+ ICsjZGVmaW5lIERQX0RVQUxfTU9ERV9BREFQVE9SX0lEIDB4MTANCj4gKyNkZWZpbmXCoMKgRFBf RFVBTF9NT0RFX1JFVl9NQVNLIDB4MDcNCj4gKyNkZWZpbmXCoMKgRFBfRFVBTF9NT0RFX1JFVl9U WVBFMiAweDAwDQo+ICsjZGVmaW5lwqDCoERQX0RVQUxfTU9ERV9UWVBFX01BU0sgMHhmMA0KPiAr I2RlZmluZcKgwqBEUF9EVUFMX01PREVfVFlQRV9UWVBFMiAweGEwDQo+ICsjZGVmaW5lIERQX0RV QUxfTU9ERV9JRUVFX09VSSAweDExIC8qIDExLTEzKi8NCj4gKyNkZWZpbmXCoMKgRFBfRFVBTF9J RUVFX09VSV9MRU4gMw0KPiArI2RlZmluZSBEUF9EVUFMX0RFVklDRV9JRCAweDE0IC8qIDE0LTE5 ICovDQo+ICsjZGVmaW5lwqDCoERQX0RVQUxfREVWSUNFX0lEX0xFTiA2DQo+ICsjZGVmaW5lIERQ X0RVQUxfTU9ERV9IQVJEV0FSRV9SRVYgMHgxYQ0KPiArI2RlZmluZSBEUF9EVUFMX01PREVfRklS TVdBUkVfTUFKT1JfUkVWIDB4MWINCj4gKyNkZWZpbmUgRFBfRFVBTF9NT0RFX0ZJUk1XQVJFX01J Tk9SX1JFViAweDFjDQo+ICsjZGVmaW5lIERQX0RVQUxfTU9ERV9NQVhfVE1EU19DTE9DSyAweDFk DQo+ICsjZGVmaW5lIERQX0RVQUxfTU9ERV9JMkNfU1BFRURfQ0FQIDB4MWUNCj4gKyNkZWZpbmUg RFBfRFVBTF9NT0RFX1RNRFNfT0VOIDB4MjANCj4gKyNkZWZpbmXCoMKgRFBfRFVBTF9NT0RFX1RN RFNfRElTQUJMRSAweDAxDQo+ICsjZGVmaW5lIERQX0RVQUxfTU9ERV9IRE1JX1BJTl9DVFJMIDB4 MjENCj4gKyNkZWZpbmXCoMKgRFBfRFVBTF9NT0RFX0NFQ19FTkFCTEUgMHgwMQ0KPiArI2RlZmlu ZSBEUF9EVUFMX01PREVfSTJDX1NQRUVEX0NUUkwgMHgyMg0KPiArI2RlZmluZSBEUF9EVUFMX01P REVfTEFTVF9SRVNFUlZFRCAweGZmDQo+ICsNCj4gK3N0cnVjdCBpMmNfYWRhcHRlcjsNCj4gKw0K PiArc3NpemVfdCBkcm1fZHBfZHVhbF9tb2RlX3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFw dGVyLA0KPiArCQkJwqDCoMKgwqDCoMKgdTggb2Zmc2V0LCB2b2lkICpidWZmZXIsIHNpemVfdCBz aXplKTsNCj4gK3NzaXplX3QgZHJtX2RwX2R1YWxfbW9kZV93cml0ZShzdHJ1Y3QgaTJjX2FkYXB0 ZXIgKmFkYXB0ZXIsDQo+ICsJCQnCoMKgwqDCoMKgwqDCoHU4IG9mZnNldCwgY29uc3Qgdm9pZCAq YnVmZmVyLCBzaXplX3QNCj4gc2l6ZSk7DQo+ICsNCj4gK2VudW0gZHJtX2RwX2R1YWxfbW9kZV90 eXBlIHsNCj4gKwlEUk1fRFBfRFVBTF9NT0RFX05PTkUsDQo+ICsJRFJNX0RQX0RVQUxfTU9ERV9U WVBFMV9EVkksDQo+ICsJRFJNX0RQX0RVQUxfTU9ERV9UWVBFMV9IRE1JLA0KPiArCURSTV9EUF9E VUFMX01PREVfVFlQRTJfRFZJLA0KPiArCURSTV9EUF9EVUFMX01PREVfVFlQRTJfSERNSSwNCj4g K307DQo+ICsNCj4gK2VudW0gZHJtX2RwX2R1YWxfbW9kZV90eXBlIGRybV9kcF9kdWFsX21vZGVf ZGV0ZWN0KHN0cnVjdA0KPiBpMmNfYWRhcHRlciAqYWRhcHRlcik7DQo+ICtpbnQgZHJtX2RwX2R1 YWxfbW9kZV9tYXhfdG1kc19jbG9jayhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOw0KPiAr aW50IGRybV9kcF9kdWFsX21vZGVfZ2V0X3RtZHNfb3V0cHV0KHN0cnVjdCBpMmNfYWRhcHRlciAq YWRhcHRlciwNCj4gYm9vbCAqZW5hYmxlZCk7DQo+ICtpbnQgZHJtX2RwX2R1YWxfbW9kZV9zZXRf dG1kc19vdXRwdXQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLA0KPiBib29sIGVuYWJsZSk7 DQo+ICtjb25zdCBjaGFyICpkcm1fZHBfZ2V0X2R1YWxfbW9kZV90eXBlX25hbWUoZW51bQ0KPiBk cm1fZHBfZHVhbF9tb2RlX3R5cGUgdHlwZSk7DQo+ICsNCj4gKyNlbmRpZgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK