From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Kuehling, Felix" Subject: Re: [PATCH] drm/amdgpu: add pmu counters Date: Wed, 19 Jun 2019 00:40:02 +0000 Message-ID: <8eb04745-0fef-cdc1-00bb-8acde7e85ac3@amd.com> References: <20190618213348.4572-1-jonathan.kim@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190618213348.4572-1-jonathan.kim-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US Content-ID: <0B7FF7B40E41674C82CA94C6B820C1F9-asWib9pRmPqcE4WynfumptQqCkab/8FMAL8bYrjMMd8@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Kim, Jonathan" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" DQpPbiAyMDE5LTA2LTE4IDE3OjM0LCBLaW0sIEpvbmF0aGFuIHdyb3RlOg0KPiB2MjogZml4ZWQg bWlzc2luZyBicmVhayBpbiBzd2l0Y2ggc3RhdGVtZW50DQo+DQo+IGFkZCBwbXUgY291bnRlcnMN Cj4NCj4gQ2hhbmdlLUlkOiBJMWFjYTI3MWZkMTJjYWJjZTBjY2ZjMDc2Zjc3MWNkZTJkNGNhZGQ1 NA0KPiBTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBLaW0gPEpvbmF0aGFuLktpbUBhbWQuY29tPg0K PiAtLS0NCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZSAgICAgICAgfCAg IDIgKy0NCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaCAgICAgICAgfCAg IDMgKw0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyB8ICAg NiArDQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BtdS5jICAgIHwgMzAy ICsrKysrKysrKysrKysrKysrKysrKw0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9wbXUuaCAgICB8ICAzNyArKysNCj4gICA1IGZpbGVzIGNoYW5nZWQsIDM0OSBpbnNlcnRp b25zKCspLCAxIGRlbGV0aW9uKC0pDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wbXUuYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG11LmgNCj4NCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvTWFrZWZpbGUNCj4gaW5kZXggNTdjZTQ0Y2MzMjI2Li40YzlmZDI2NDVmNjQgMTAwNjQ0 DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlDQo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlDQo+IEBAIC01NCw3ICs1NCw3IEBAIGFt ZGdwdS15ICs9IGFtZGdwdV9kZXZpY2UubyBhbWRncHVfa21zLm8gXA0KPiAgIAlhbWRncHVfZ3R0 X21nci5vIGFtZGdwdV92cmFtX21nci5vIGFtZGdwdV92aXJ0Lm8gYW1kZ3B1X2F0b21maXJtd2Fy ZS5vIFwNCj4gICAJYW1kZ3B1X3ZmX2Vycm9yLm8gYW1kZ3B1X3NjaGVkLm8gYW1kZ3B1X2RlYnVn ZnMubyBhbWRncHVfaWRzLm8gXA0KPiAgIAlhbWRncHVfZ21jLm8gYW1kZ3B1X3hnbWkubyBhbWRn cHVfY3NhLm8gYW1kZ3B1X3Jhcy5vIGFtZGdwdV92bV9jcHUubyBcDQo+IC0JYW1kZ3B1X3ZtX3Nk bWEubw0KPiArCWFtZGdwdV92bV9zZG1hLm8gYW1kZ3B1X3BtdS5vDQo+ICAgDQo+ICAgIyBhZGQg YXNpYyBzcGVjaWZpYyBibG9jaw0KPiAgIGFtZGdwdS0kKENPTkZJR19EUk1fQU1ER1BVX0NJSykr PSBjaWsubyBjaWtfaWgubyBrdl9zbWMubyBrdl9kcG0ubyBcDQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdS5oDQo+IGluZGV4IDQ5NDZkOWVjYzNlMy4uOGVmMmFjNTlmZjA0IDEwMDY0NA0K PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaA0KPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaA0KPiBAQCAtOTYyLDYgKzk2Miw5IEBAIHN0 cnVjdCBhbWRncHVfZGV2aWNlIHsNCj4gICAJbG9uZwkJCQljb21wdXRlX3RpbWVvdXQ7DQo+ICAg DQo+ICAgCXVpbnQ2NF90CQkJdW5pcXVlX2lkOw0KPiArDQo+ICsJLyogc3BpbiBsb2NrIGZvciBw bXUgdmlhIHBlcmYgZXZlbnRzICovDQo+ICsJcmF3X3NwaW5sb2NrX3QJcG11X2xvY2s7DQoNCldo YXQgYXJlIHlvdSBwcm90ZWN0aW5nIHdpdGggdGhpcyBzcGlubG9jaz8gQXMgZmFyIGFzIEkgY2Fu IHRlbGwgdGhlIA0Ka2VybmVsIGFscmVhZHkgZG9lcyBzb21lIGxvY2tpbmcgYXJvdW5kIHRoZSBw bXUgY2FsbGJhY2tzLiBTbyBJJ20gDQp3b25kZXJpbmcgaWYgdGhpcyBpcyByZWFsbHkgbmVlZGVk Lg0KDQpJdCdzIHRoZSBmaXJzdCB0aW1lIEknbSBjb21pbmcgYWNyb3NzIGEgcmF3X3NwaW5sb2Nr IGluIG91ciBkcml2ZXIsIGFuZCANCml0IG1ha2VzIG1lIHN1c3BpY2lvdXMuIFRoZSBkcml2ZXIg c2hvdWxkbid0IGJlIGluIHRoZSBidXNpbmVzcyBvZiBkb2luZyANCnN0dWZmIHRoYXQgcmVxdWly ZXMgdGhhdC4NCg0KDQo+ICAgfTsNCj4gICANCj4gICBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbWRn cHVfZGV2aWNlICphbWRncHVfdHRtX2FkZXYoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYpDQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMNCj4gaW5kZXggOWQx YjhkNjQ2NjYxLi43NjYzYzVkNGQwZTEgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZGV2aWNlLmMNCj4gQEAgLTYxLDYgKzYxLDcgQEANCj4gICANCj4gICAjaW5j bHVkZSAiYW1kZ3B1X3hnbWkuaCINCj4gICAjaW5jbHVkZSAiYW1kZ3B1X3Jhcy5oIg0KPiArI2lu Y2x1ZGUgImFtZGdwdV9wbXUuaCINCj4gICANCj4gICBNT0RVTEVfRklSTVdBUkUoImFtZGdwdS92 ZWdhMTBfZ3B1X2luZm8uYmluIik7DQo+ICAgTU9EVUxFX0ZJUk1XQVJFKCJhbWRncHUvdmVnYTEy X2dwdV9pbmZvLmJpbiIpOw0KPiBAQCAtMjc0Niw2ICsyNzQ3LDEwIEBAIGludCBhbWRncHVfZGV2 aWNlX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsDQo+ICAgCQlyZXR1cm4gcjsNCj4g ICAJfQ0KPiAgIA0KPiArCXIgPSBhbWRncHVfcG11X2luaXQoYWRldik7DQo+ICsJaWYgKHIpDQo+ ICsJCWRldl9lcnIoYWRldi0+ZGV2LCAiYW1kZ3B1X3BtdV9pbml0IGZhaWxlZFxuIik7DQo+ICsN Cj4gICAJcmV0dXJuIDA7DQo+ICAgDQo+ICAgZmFpbGVkOg0KPiBAQCAtMjgxNCw2ICsyODE5LDcg QEAgdm9pZCBhbWRncHVfZGV2aWNlX2Zpbmkoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpDQo+ ICAgCWFtZGdwdV9kZWJ1Z2ZzX3JlZ3NfY2xlYW51cChhZGV2KTsNCj4gICAJZGV2aWNlX3JlbW92 ZV9maWxlKGFkZXYtPmRldiwgJmRldl9hdHRyX3BjaWVfcmVwbGF5X2NvdW50KTsNCj4gICAJYW1k Z3B1X3Vjb2RlX3N5c2ZzX2ZpbmkoYWRldik7DQo+ICsJYW1kZ3B1X3BtdV9maW5pKGFkZXYpOw0K PiAgIH0NCj4gICANCj4gICANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9wbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wbXUu Yw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmNkNDUwOTVi ZDgxNQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9wbXUuYw0KPiBAQCAtMCwwICsxLDMwMiBAQA0KPiArLyoNCj4gKyAqIENvcHlyaWdo dCAyMDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4NCj4gKyAqDQo+ICsgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQ0KPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwNCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24N Cj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLA0KPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQo+ICsgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOg0KPiArICoNCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluDQo+ICsgKiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCj4gKyAqDQo+ICsgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUg0KPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQo+ICsgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwNCj4gKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUg0KPiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsDQo+ICsgKiBBUklT SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1INCj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCj4gKyAqDQo+ ICsgKiBBdXRob3I6IEpvbmF0aGFuIEtpbSA8am9uYXRoYW4ua2ltQGFtZC5jb20+DQo+ICsgKg0K PiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+DQo+ICsjaW5jbHVk ZSA8bGludXgvaW5pdC5oPg0KPiArI2luY2x1ZGUgImFtZGdwdS5oIg0KPiArI2luY2x1ZGUgImFt ZGdwdV9wbXUuaCINCj4gKyNpbmNsdWRlICJkZl92M182LmgiDQo+ICsNCj4gKyNkZWZpbmUgUE1V X05BTUVfU0laRSAzMg0KPiArDQo+ICsvKiByZWNvcmQgdG8ga2VlcCB0cmFjayBvZiBwbXUgZW50 cnkgcGVyIHBtdSB0eXBlIHBlciBkZXZpY2UgKi8NCj4gK3N0cnVjdCBhbWRncHVfcG11X2VudHJ5 IHsNCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5Ow0KPiArCXN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2Ow0KPiArCXN0cnVjdCBwbXUgcG11Ow0KPiArCXVuc2lnbmVkIGludCBwbXVfcGVyZl90 eXBlOw0KPiArfTsNCj4gKw0KPiArc3RhdGljIExJU1RfSEVBRChhbWRncHVfcG11X2xpc3QpOw0K PiArDQo+ICsNCj4gKy8qIGluaXRpYWxpemUgcGVyZiBjb3VudGVyICovDQo+ICtzdGF0aWMgaW50 IGFtZGdwdV9wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQ0KPiArew0K PiArCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Ow0KPiArDQo+ICsJLyog dGVzdCB0aGUgZXZlbnQgYXR0ciB0eXBlIGNoZWNrIGZvciBQTVUgZW51bWVyYXRpb24gKi8NCj4g KwlpZiAoZXZlbnQtPmF0dHIudHlwZSAhPSBldmVudC0+cG11LT50eXBlKQ0KPiArCQlyZXR1cm4g LUVOT0VOVDsNCj4gKw0KPiArCS8qIHVwZGF0ZSB0aGUgaHdfcGVyZl9ldmVudCBzdHJ1Y3Qgd2l0 aCBjb25maWcgZGF0YSAqLw0KPiArCWh3Yy0+Y29uZiA9IGV2ZW50LT5hdHRyLmNvbmZpZzsNCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiBzdGFydCBwZXJmIGNvdW50ZXIgKi8N Cj4gK3N0YXRpYyB2b2lkIGFtZGdwdV9wZXJmX3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVu dCwgaW50IGZsYWdzKQ0KPiArew0KPiArCXVuc2lnbmVkIGxvbmcgbGZsYWdzOw0KPiArCXN0cnVj dCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Ow0KPiArCXN0cnVjdCBhbWRncHVfcG11 X2VudHJ5ICpwZSA9IGNvbnRhaW5lcl9vZihldmVudC0+cG11LA0KPiArCQkJCQkJICBzdHJ1Y3Qg YW1kZ3B1X3BtdV9lbnRyeSwNCj4gKwkJCQkJCSAgcG11KTsNCj4gKw0KPiArCWlmIChXQVJOX09O X09OQ0UoIShod2MtPnN0YXRlICYgUEVSRl9IRVNfU1RPUFBFRCkpKQ0KPiArCQlyZXR1cm47DQo+ ICsNCj4gKwlXQVJOX09OX09OQ0UoIShod2MtPnN0YXRlICYgUEVSRl9IRVNfVVBUT0RBVEUpKTsN Cj4gKwlod2MtPnN0YXRlID0gMDsNCj4gKw0KPiArCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcGUt PmFkZXYtPnBtdV9sb2NrLCBsZmxhZ3MpOw0KPiArDQo+ICsJaWYgKCEoZmxhZ3MgJiBQRVJGX0VG X1JFTE9BRCkpDQo+ICsJCXBlLT5hZGV2LT5kZl9mdW5jcy0+cG1jX3N0YXJ0KHBlLT5hZGV2LCBo d2MtPmNvbmYsIDEpOw0KDQpTaG91bGQgdGhlcmUgYmUgYSBzd2l0Y2gtY2FzZSBhcm91bmQgdGhl IGNhbGwgdG8gZGYgZnVuY3Rpb25zPw0KDQoNCj4gKw0KPiArCXBlLT5hZGV2LT5kZl9mdW5jcy0+ cG1jX3N0YXJ0KHBlLT5hZGV2LCBod2MtPmNvbmYsIDApOw0KPiArDQo+ICsJcmF3X3NwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnBlLT5hZGV2LT5wbXVfbG9jaywgbGZsYWdzKTsNCj4gKw0KPiArCXBl cmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsNCj4gKw0KPiArfQ0KPiArDQo+ICsvKiBy ZWFkIHBlcmYgY291bnRlciAqLw0KPiArc3RhdGljIHZvaWQgYW1kZ3B1X3BlcmZfcmVhZChzdHJ1 Y3QgcGVyZl9ldmVudCAqZXZlbnQpDQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBsZmxhZ3M7DQoN CiJsZmxhZ3MiIGxvb2tzIHN1c3BpY2lvdXNseSBsaWtlIEh1bmdhcmlhbiBub3RhdGlvbiwgd2hp Y2ggTGludXgga2VybmVsIA0KZGV2ZWxvcGVycyB0ZW5kIHRvIGhhdGUuIEkgdGhpbmsgeW91IGNh biBqdXN0IGNhbGwgdGhpcyAiZmxhZ3MiLg0KDQoNCj4gKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAq aHdjID0gJmV2ZW50LT5odzsNCj4gKwlzdHJ1Y3QgYW1kZ3B1X3BtdV9lbnRyeSAqcGUgPSBjb250 YWluZXJfb2YoZXZlbnQtPnBtdSwNCj4gKwkJCQkJCSAgc3RydWN0IGFtZGdwdV9wbXVfZW50cnks DQo+ICsJCQkJCQkgIHBtdSk7DQo+ICsNCj4gKwl1NjQgY291bnQsIHByZXY7DQo+ICsNCj4gKwly YXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBlLT5hZGV2LT5wbXVfbG9jaywgbGZsYWdzKTsNCj4gKw0K PiArCXN3aXRjaCAocGUtPnBtdV9wZXJmX3R5cGUpIHsNCg0KSW5zdGVhZCBvZiByZWdpc3Rlcmlu ZyBhIHNlcGFyYXRlIFBNVSBmb3IgZWFjaCBldmVudCB0eXBlLCBjYW4gd2UgdXNlIGEgDQpmZXcg dW51c2VkIGJpdHMgaW4gdGhlIGh3Yy0+Y29uZiB0byBkaXN0aW5ndWlzaCBldmVudCB0eXBlcyBh bmQgcmVnaXN0ZXIgDQpvbmx5IGEgc2luZ2xlIFBNVSBwZXIgR1BVPyBUaGVuIHdlIGNvdWxkIGFs c28gZW1iZWQgc3RydWN0IHBtdSBkaXJlY3RseSANCmluIHN0cnVjdCBhbWRncHVfZGV2aWNlIGFu ZCB3b3VsZG4ndCBuZWVkIHRoZSBzdHJ1Y3QgYW1kZ3B1X3BtdV9lbnRyeSANCndyYXBwZXIuDQoN ClRoZW4gdGhpcyBzd2l0Y2ggd291bGQgYmUgc29tZXRoaW5nIGxpa2U6DQoNCiDCoMKgwqAgc3dp dGNoIChBTURHUFVfUE1VX0VWRU5UX1RZUEUoaHdjLT5jb25mKSkgew0KIMKgwqDCoCBjYXNlIEFN REdQVV9QRVJGX1RZUEVfREY6DQogwqDCoMKgIMKgwqDCoCBwZS0+YWRldi0+ZGZfZnVuY3MtPnBt Y19nZXRfY291bnQocGUtPmFkZXYsIGh3Yy0+Y29uZiwgJmNvdW50KTsNCiDCoMKgwqAgwqDCoMKg IGJyZWFrOw0KIMKgwqDCoCBkZWZhdWx0Og0KIMKgwqDCoCDCoMKgwqAgYnJlYWs7DQogwqDCoMKg IH0NCg0KDQo+ICsJY2FzZSBQRVJGX1RZUEVfQU1ER1BVX0RGOg0KPiArCQlwZS0+YWRldi0+ZGZf ZnVuY3MtPnBtY19nZXRfY291bnQocGUtPmFkZXYsIGh3Yy0+Y29uZiwgJmNvdW50KTsNCj4gKwkJ YnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJY291bnQgPSAwOw0KPiArCQlicmVhazsNCj4gKwl9 Ow0KPiArDQo+ICsJcHJfaW5mbygiZXZlbnQgJXggaGFzIGNvdW50ICVkXG4iLCBod2MtPmNvbmYs IGNvdW50KTsNCj4gKw0KPiArCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZS0+YWRldi0+ cG11X2xvY2ssIGxmbGFncyk7DQo+ICsNCj4gKwlwcmV2ID0gbG9jYWw2NF9yZWFkKCZod2MtPnBy ZXZfY291bnQpOw0KPiArCWlmIChsb2NhbDY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJl diwgY291bnQpICE9IHByZXYpDQo+ICsJCXJldHVybjsNCg0KVGhpcyBsb29rcyBsaWtlIHlvdSBj b3BpZWQgaXQgZnJvbSBzb21ld2hlcmUgZWxzZS4gSSBzZWUgc2ltaWxhciBjb2RlIGluIA0Kb3Ro ZXIgcGVyZiBkcml2ZXJzLiBCdXQgSSBkb24ndCB0aGluayB5b3UgZ290IGl0IHF1aXRlIHJpZ2h0 Lg0KDQpUaGlzIGxvb2tzIGxpa2UgeW91J3JlIHRyeWluZyB0byBwcm90ZWN0IGFnYWluc3QgbXVs dGlwbGUgdGhyZWFkcyANCnVwZGF0aW5nIGh3Yy0+cHJldl9jb3VudCBhbmQgZXZlbnQtPmNvdW50 IGNvbmN1cnJlbnRseSBhbmQgb25seSB0aGUgDQpmaXJzdCBvbmUgdXBkYXRpbmcgYm90aCBod2Mt PnByZXZfY291bnQgYW5kIGV2ZW50LT5jb3VudC4gQnV0IHlvdSdyZSANCmRvaW5nIHRoaXMgdW5k ZXIgYSBzcGluLWxvY2ssIHdoaWNoIHNob3VsZCBwcmV2ZW50IGNvbmN1cnJlbnQgdGhyZWFkcyAN CmV4ZWN1dGluZyB0aGlzLiBMaWtlIEkgc2FpZCBhYm92ZSwgSSBiZWxpZXZlIHRoZSBsb2NrIGlz IG5vdCBuZWNlc3NhcnkuIA0KVGhpcyBjbXB4Y2hnIGxvZ2ljIHNlZW1zIHRvIGJlIGEgbG9ja2xl c3Mgd2F5IG9mIGVuc3VyaW5nIHRoYXQgb25seSBvbmUgDQp0aHJlYWQgdXBkYXRlcyBib3RoIHZh cmlhYmxlcy4NCg0KSW4gb3RoZXIgcG11IGRyaXZlcnMgSSBzZWUgcmV0cnkgbG9naWMgaGVyZSBm b3IgdGhlIGNhc2UgdGhhdCB0aGUgDQpjbXB4Y2hnIGZhaWxzLCB3aGljaCB5b3UgYXJlIG1pc3Np bmcuDQoNCkFsc28sIGZvciB0aGlzIHRvIGJlIGVmZmVjdGl2ZSwgdGhlIGxvY2FsNjRfcmVhZCBz aG91bGQgYmUgYmVmb3JlIHRoZSANCmRmX2Z1bmNzLT5wbWNfZ2V0X2NvdW50IGNhbGwuIE90aGVy d2lzZSBhbm90aGVyIHRocmVhZCBjb3VsZCB1cGRhdGUgDQpod2MtPnByZXZfY291bnQgYW5kIGV2 ZW50LT5jb3VudCB3aXRoIGEgbmV3ZXIvaGlnaGVyIHZhbHVlIGFmdGVyIHlvdcKgIA0KY2FsbGVk IHBtY19nZXRfY291bnQgYW5kIHlvdXIgdXBkYXRlIGNvdWxkIHJlc3VsdCBpbiB3cml0aW5nIGFu IG9sZGVyIA0KY291bnRlciB2YWx1ZS4NCg0KUmVnYXJkcywNCiDCoCBGZWxpeA0KDQoNCj4gKw0K PiArCWxvY2FsNjRfYWRkKGNvdW50IC0gcHJldiwgJmV2ZW50LT5jb3VudCk7DQo+ICt9DQo+ICsN Cj4gKy8qIHN0b3AgcGVyZiBjb3VudGVyICovDQo+ICtzdGF0aWMgdm9pZCBhbWRncHVfcGVyZl9z dG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQ0KPiArew0KPiArCXVuc2ln bmVkIGxvbmcgbGZsYWdzOw0KPiArCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQt Pmh3Ow0KPiArCXN0cnVjdCBhbWRncHVfcG11X2VudHJ5ICpwZSA9IGNvbnRhaW5lcl9vZihldmVu dC0+cG11LA0KPiArCQkJCQkJICBzdHJ1Y3QgYW1kZ3B1X3BtdV9lbnRyeSwNCj4gKwkJCQkJCSAg cG11KTsNCj4gKw0KPiArCWlmIChod2MtPnN0YXRlICYgUEVSRl9IRVNfVVBUT0RBVEUpDQo+ICsJ CXJldHVybjsNCj4gKw0KPiArCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcGUtPmFkZXYtPnBtdV9s b2NrLCBsZmxhZ3MpOw0KPiArDQo+ICsJc3dpdGNoIChwZS0+cG11X3BlcmZfdHlwZSkgew0KPiAr CWNhc2UgUEVSRl9UWVBFX0FNREdQVV9ERjoNCj4gKwkJcGUtPmFkZXYtPmRmX2Z1bmNzLT5wbWNf c3RvcChwZS0+YWRldiwgaHdjLT5jb25mLCAwKTsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoN Cj4gKwkJYnJlYWs7DQo+ICsJfTsNCj4gKw0KPiArCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3Jl KCZwZS0+YWRldi0+cG11X2xvY2ssIGxmbGFncyk7DQo+ICsNCj4gKwlXQVJOX09OX09OQ0UoaHdj LT5zdGF0ZSAmIFBFUkZfSEVTX1NUT1BQRUQpOw0KPiArCWh3Yy0+c3RhdGUgfD0gUEVSRl9IRVNf U1RPUFBFRDsNCj4gKw0KPiArCWlmIChod2MtPnN0YXRlICYgUEVSRl9IRVNfVVBUT0RBVEUpDQo+ ICsJCXJldHVybjsNCj4gKw0KPiArCWFtZGdwdV9wZXJmX3JlYWQoZXZlbnQpOw0KPiArCWh3Yy0+ c3RhdGUgfD0gUEVSRl9IRVNfVVBUT0RBVEU7DQo+ICt9DQo+ICsNCj4gKy8qIGFkZCBwZXJmIGNv dW50ZXIgICovDQo+ICtzdGF0aWMgaW50IGFtZGdwdV9wZXJmX2FkZChzdHJ1Y3QgcGVyZl9ldmVu dCAqZXZlbnQsIGludCBmbGFncykNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIGxmbGFnczsNCj4g KwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsNCj4gKwlpbnQgcmV0dmFs Ow0KPiArDQo+ICsJc3RydWN0IGFtZGdwdV9wbXVfZW50cnkgKnBlID0gY29udGFpbmVyX29mKGV2 ZW50LT5wbXUsDQo+ICsJCQkJCQkgIHN0cnVjdCBhbWRncHVfcG11X2VudHJ5LA0KPiArCQkJCQkJ ICBwbXUpOw0KPiArDQo+ICsJZXZlbnQtPmh3LnN0YXRlID0gUEVSRl9IRVNfVVBUT0RBVEUgfCBQ RVJGX0hFU19TVE9QUEVEOw0KPiArDQo+ICsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwZS0+YWRl di0+cG11X2xvY2ssIGxmbGFncyk7DQo+ICsNCj4gKwlzd2l0Y2ggKHBlLT5wbXVfcGVyZl90eXBl KSB7DQo+ICsJY2FzZSBQRVJGX1RZUEVfQU1ER1BVX0RGOg0KPiArCQlyZXR2YWwgPSBwZS0+YWRl di0+ZGZfZnVuY3MtPnBtY19zdGFydChwZS0+YWRldiwgaHdjLT5jb25mLCAxKTsNCj4gKwkJYnJl YWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfTsNCj4gKw0KPiArCXJhd19z cGluX3VubG9ja19pcnFyZXN0b3JlKCZwZS0+YWRldi0+cG11X2xvY2ssIGxmbGFncyk7DQo+ICsN Cj4gKwlpZiAocmV0dmFsKQ0KPiArCQlyZXR1cm4gcmV0dmFsOw0KPiArDQo+ICsJaWYgKGZsYWdz ICYgUEVSRl9FRl9TVEFSVCkNCj4gKwkJYW1kZ3B1X3BlcmZfc3RhcnQoZXZlbnQsIFBFUkZfRUZf UkVMT0FEKTsNCj4gKw0KPiArCXJldHVybiByZXR2YWw7DQo+ICsNCj4gK30NCj4gKw0KPiArLyog ZGVsZXRlIHBlcmYgY291bnRlciAgKi8NCj4gK3N0YXRpYyB2b2lkIGFtZGdwdV9wZXJmX2RlbChz dHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykNCj4gK3sNCj4gKwl1bnNpZ25lZCBs b25nIGxmbGFnczsNCj4gKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsN Cj4gKwlzdHJ1Y3QgYW1kZ3B1X3BtdV9lbnRyeSAqcGUgPSBjb250YWluZXJfb2YoZXZlbnQtPnBt dSwNCj4gKwkJCQkJCSAgc3RydWN0IGFtZGdwdV9wbXVfZW50cnksDQo+ICsJCQkJCQkgIHBtdSk7 DQo+ICsNCj4gKwlhbWRncHVfcGVyZl9zdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSk7DQo+ICsN Cj4gKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBlLT5hZGV2LT5wbXVfbG9jaywgbGZsYWdzKTsN Cj4gKw0KPiArCXN3aXRjaCAocGUtPnBtdV9wZXJmX3R5cGUpIHsNCj4gKwljYXNlIFBFUkZfVFlQ RV9BTURHUFVfREY6DQo+ICsJCXBlLT5hZGV2LT5kZl9mdW5jcy0+cG1jX3N0b3AocGUtPmFkZXYs IGh3Yy0+Y29uZiwgMSk7DQo+ICsJCWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ICsJCWJyZWFrOw0K PiArCX07DQo+ICsNCj4gKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGUtPmFkZXYtPnBt dV9sb2NrLCBsZmxhZ3MpOw0KPiArDQo+ICsJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZl bnQpOw0KPiArfQ0KPiArDQo+ICsvKiB2ZWdhMjAgcG11cyAqLw0KPiArDQo+ICsvKiBpbml0IHBt dSB0cmFja2luZyBwZXIgcG11IHR5cGUgKi8NCj4gK2ludCBpbml0X3BtdV9ieV90eXBlKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LA0KPiArCQkgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3Jv dXAgKmF0dHJfZ3JvdXBzW10sDQo+ICsJCSAgY2hhciAqcG11X3R5cGVfbmFtZSwgY2hhciAqcG11 X2ZpbGVfcHJlZml4LA0KPiArCQkgIHVuc2lnbmVkIGludCBwbXVfcGVyZl90eXBlKQ0KPiArew0K PiArCWNoYXIgcG11X25hbWVbUE1VX05BTUVfU0laRV07DQo+ICsJc3RydWN0IGFtZGdwdV9wbXVf ZW50cnkgKnBtdV9lbnRyeTsNCj4gKwlpbnQgcmV0ID0gMDsNCj4gKw0KPiArCXBtdV9lbnRyeSA9 IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhbWRncHVfcG11X2VudHJ5KSwgR0ZQX0tFUk5FTCk7DQo+ ICsNCj4gKwlpZiAoIXBtdV9lbnRyeSkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlw bXVfZW50cnktPmFkZXYgPSBhZGV2Ow0KPiArCXBtdV9lbnRyeS0+cG11ID0gKHN0cnVjdCBwbXUp ew0KPiArCQkuZXZlbnRfaW5pdCA9IGFtZGdwdV9wZXJmX2V2ZW50X2luaXQsDQo+ICsJCS5hZGQg PSBhbWRncHVfcGVyZl9hZGQsDQo+ICsJCS5kZWwgPSBhbWRncHVfcGVyZl9kZWwsDQo+ICsJCS5z dGFydCA9IGFtZGdwdV9wZXJmX3N0YXJ0LA0KPiArCQkuc3RvcCA9IGFtZGdwdV9wZXJmX3N0b3As DQo+ICsJCS5yZWFkID0gYW1kZ3B1X3BlcmZfcmVhZCwNCj4gKwkJLnRhc2tfY3R4X25yID0gcGVy Zl9pbnZhbGlkX2NvbnRleHQsDQo+ICsJfTsNCj4gKw0KPiArCXBtdV9lbnRyeS0+cG11LmF0dHJf Z3JvdXBzID0gYXR0cl9ncm91cHM7DQo+ICsJcG11X2VudHJ5LT5wbXVfcGVyZl90eXBlID0gcG11 X3BlcmZfdHlwZTsNCj4gKwlzbnByaW50ZihwbXVfbmFtZSwgUE1VX05BTUVfU0laRSwgIiVzXyVk IiwNCj4gKwkJCQlwbXVfZmlsZV9wcmVmaXgsIGFkZXYtPmRkZXYtPnByaW1hcnktPmluZGV4KTsN Cj4gKw0KPiArCXJldCA9IHBlcmZfcG11X3JlZ2lzdGVyKCZwbXVfZW50cnktPnBtdSwgcG11X25h bWUsIC0xKTsNCj4gKw0KPiArCWlmIChyZXQpIHsNCj4gKwkJa2ZyZWUocG11X2VudHJ5KTsNCj4g KwkJcHJfd2FybigiRXJyb3IgaW5pdGlhbGl6aW5nIEFNREdQVSAlcyBQTVVzLlxuIiwgcG11X3R5 cGVfbmFtZSk7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJcmF3X3NwaW5fbG9j a19pbml0KCZwbXVfZW50cnktPmFkZXYtPnBtdV9sb2NrKTsNCj4gKw0KPiArCXByX2luZm8oIkRl dGVjdGVkIEFNREdQVSAlcyBDb3VudGVycy4gIyBvZiBDb3VudGVycyA9ICVkLlxuIiwNCj4gKwkJ CXBtdV90eXBlX25hbWUsIERGX1YzXzZfTUFYX0NPVU5URVJTKTsNCj4gKw0KPiArCWxpc3RfYWRk X3RhaWwoJnBtdV9lbnRyeS0+ZW50cnksICZhbWRncHVfcG11X2xpc3QpOw0KPiArDQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qIGluaXQgYW1kZ3B1X3BtdSAqLw0KPiAraW50IGFtZGdw dV9wbXVfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikNCj4gK3sNCj4gKw0KPiArCWlu dCByZXQgPSAwOw0KPiArDQo+ICsJc3dpdGNoIChhZGV2LT5hc2ljX3R5cGUpIHsNCj4gKwljYXNl IENISVBfVkVHQTIwOg0KPiArCQkvKiBpbml0IGRmICovDQo+ICsJCXJldCA9IGluaXRfcG11X2J5 X3R5cGUoYWRldiwgZGZfdjNfNl9hdHRyX2dyb3VwcywNCj4gKwkJCQkiREYiLCAiYW1kZ3B1X2Rm IiwgUEVSRl9UWVBFX0FNREdQVV9ERik7DQo+ICsNCj4gKwkJLyogb3RoZXIgcG11IHR5cGVzIGdv IGhlcmUqLw0KPiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gMDsNCj4gKwl9 DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gKw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qIGRlc3Ryb3kg YWxsIHBtdSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0YXJnZXQgZGV2aWNlICovDQo+ICt2b2lkIGFt ZGdwdV9wbXVfZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikNCj4gK3sNCj4gKwlzdHJ1 Y3QgYW1kZ3B1X3BtdV9lbnRyeSAqcGUsICp0ZW1wOw0KPiArDQo+ICsJbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKHBlLCB0ZW1wLCAmYW1kZ3B1X3BtdV9saXN0LCBlbnRyeSkgew0KPiArCQlpZiAo cGUtPmFkZXYgPT0gYWRldikgew0KPiArCQkJbGlzdF9kZWwoJnBlLT5lbnRyeSk7DQo+ICsJCQlw ZXJmX3BtdV91bnJlZ2lzdGVyKCZ0ZW1wLT5wbXUpOw0KPiArCQkJa2ZyZWUodGVtcCk7DQo+ICsJ CX0NCj4gKwl9DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfcG11LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG11LmgN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi43ZGRkYjcxNjBh MTENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfcG11LmgNCj4gQEAgLTAsMCArMSwzNyBAQA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCAy MDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4NCj4gKyAqDQo+ICsgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQ0KPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwNCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24NCj4g KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLA0KPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQo+ICsgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Og0KPiArICoNCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluDQo+ICsgKiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCj4gKyAqDQo+ICsgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUg0KPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQo+ICsgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwN Cj4gKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUg0KPiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsDQo+ICsgKiBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1INCj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCj4gKyAqDQo+ICsg KiBBdXRob3I6IEpvbmF0aGFuIEtpbSA8am9uYXRoYW4ua2ltQGFtZC5jb20+DQo+ICsgKg0KPiAr ICovDQo+ICsNCj4gKyNpZm5kZWYgX0FNREdQVV9QTVVfSF8NCj4gKyNkZWZpbmUgX0FNREdQVV9Q TVVfSF8NCj4gKw0KPiArZW51bSBhbWRncHVfcG11X3BlcmZfdHlwZSB7DQo+ICsJUEVSRl9UWVBF X0FNREdQVV9ERiA9IDAsDQo+ICsJUEVSRl9UWVBFX0FNREdQVV9NQVgNCj4gK307DQo+ICsNCj4g K2ludCBhbWRncHVfcG11X2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOw0KPiArdm9p ZCBhbWRncHVfcG11X2Zpbmkoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOw0KPiArDQo+ICsj ZW5kaWYgLyogX0FNREdQVV9QTVVfSF8gKi8NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vYW1kLWdmeA==