RE: [PATCH v5 5/7] power: Add support for DA9150 Charger
From: Opensource [Adam Thomson] <hidden>
Date: 2015-01-07 16:04:51
Also in:
linux-devicetree, linux-pm, lkml
T24gSmFudWFyeSA0LCAyMDE1IDE3OjI2LCBKb25hdGhhbiBDYW1lcm9uIHdyb3RlOg0KDQo+IE9u IDIyLzEyLzE0IDE2OjUxLCBBZGFtIFRob21zb24gd3JvdGU6DQo+ID4gVGhpcyBwYXRjaCBhZGRz IHN1cHBvcnQgZm9yIERBOTE1MCBDaGFyZ2VyICYgRnVlbC1HYXVnZSBJQyBDaGFyZ2VyLg0KPiA+ DQo+ID4gU2lnbmVkLW9mZi1ieTogQWRhbSBUaG9tc29uIDxBZGFtLlRob21zb24uT3BlbnNvdXJj ZUBkaWFzZW1pLmNvbT4NCj4gVGhlIElJTyBiaXRzIGxvb2sgZmluZSwgYnV0IHlvdXIgdXNlIG9m IGRldm1fZnJlZSAqIGRvZXNuJ3QuLi4NCj4NCj4gQXMgYSBzaWRlIG5vdGUsIGxvb2tzIGxpa2Ug d2UgY291bGQgYmVuZWZpdCBmcm9tIHNvbWUgYXJyYXkgdmVyc2lvbnMNCj4gb2YgdGhlIElJTyBj aGFubmVsIGdldHRpbmcgYW5kIHJlbGVhc2UgZnVuY3Rpb25zLiAgV291bGQgc2F2ZSBhIGZhaXIg Yml0DQo+IG9mIGJvaWxlciBwbGF0ZS4NCg0KWWVzLCBJIGd1ZXNzIHdoZW4gbW9yZSBkcml2ZXJz IGNvbWUgYWxvbmcgd2hpY2ggbmVlZCBtdWx0aXBsZSBjaGFubmVscyB0aGVuDQpzb21ldGhpbmcg bGlrZSB5b3Ugc3VnZ2VzdCB3b3VsZCBtYWtlIHNlbnNlIHRvIGhlbHAgcmVkdWNlIGNvZGUgZHVw bGljYXRpb24uDQpBbHNvIGRldm1fKiBmdW5jdGlvbnMgY291bGQgYmUgZ29vZCB0b28uDQoNCj4g DQo+IEpvbmF0aGFuDQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvcG93ZXIvS2NvbmZpZyAgICAgICAg ICB8ICAxMiArDQo+ID4gIGRyaXZlcnMvcG93ZXIvTWFrZWZpbGUgICAgICAgICB8ICAgMSArDQo+ ID4gIGRyaXZlcnMvcG93ZXIvZGE5MTUwLWNoYXJnZXIuYyB8IDY2Ng0KPiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDY3OSBp bnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Bvd2VyL2RhOTE1 MC1jaGFyZ2VyLmMNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcg Yi9kcml2ZXJzL3Bvd2VyL0tjb25maWcNCj4gPiBpbmRleCAwMTA4YzJhLi5lYjc5YTdhIDEwMDY0 NA0KPiA+IC0tLSBhL2RyaXZlcnMvcG93ZXIvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMvcG93 ZXIvS2NvbmZpZw0KPiA+IEBAIC0xOTIsNiArMTkyLDE4IEBAIGNvbmZpZyBCQVRURVJZX0RBOTA1 Mg0KPiA+ICAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBiYXR0ZXJpZXMgY2hh cmdlciBpbnRlZ3JhdGVkIGludG8NCj4gPiAgCSAgREE5MDUyIFBNSUMuDQo+ID4NCj4gPiArY29u ZmlnIENIQVJHRVJfREE5MTUwDQo+ID4gKwl0cmlzdGF0ZSAiRGlhbG9nIFNlbWljb25kdWN0b3Ig REE5MTUwIENoYXJnZXIgc3VwcG9ydCINCj4gPiArCWRlcGVuZHMgb24gTUZEX0RBOTE1MA0KPiA+ ICsJZGVwZW5kcyBvbiBEQTkxNTBfR1BBREMNCj4gPiArCWRlcGVuZHMgb24gSUlPDQo+ID4gKwlo ZWxwDQo+ID4gKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGNoYXJnZXIgdW5p dCBvZiB0aGUgREE5MTUwDQo+ID4gKwkgIEludGVncmF0ZWQgQ2hhcmdlciAmIEZ1ZWwtR2F1Z2Ug SUMuDQo+ID4gKw0KPiA+ICsJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1v ZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbCBiZQ0KPiA+ICsJICBjYWxsZWQgZGE5MTUwLWNo YXJnZXIuDQo+ID4gKw0KPiA+ICBjb25maWcgQkFUVEVSWV9NQVgxNzA0MA0KPiA+ICAJdHJpc3Rh dGUgIk1heGltIE1BWDE3MDQwIEZ1ZWwgR2F1Z2UiDQo+ID4gIAlkZXBlbmRzIG9uIEkyQw0KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlIGIvZHJpdmVycy9wb3dlci9NYWtl ZmlsZQ0KPiA+IGluZGV4IGRmYTg5NDIuLjBjMTg5NmQgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVy cy9wb3dlci9NYWtlZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUNCj4gPiBA QCAtMzEsNiArMzEsNyBAQCBvYmotJChDT05GSUdfQkFUVEVSWV9TQlMpCSs9IHNicy1iYXR0ZXJ5 Lm8NCj4gPiAgb2JqLSQoQ09ORklHX0JBVFRFUllfQlEyN3gwMCkJKz0gYnEyN3gwMF9iYXR0ZXJ5 Lm8NCj4gPiAgb2JqLSQoQ09ORklHX0JBVFRFUllfREE5MDMwKQkrPSBkYTkwMzBfYmF0dGVyeS5v DQo+ID4gIG9iai0kKENPTkZJR19CQVRURVJZX0RBOTA1MikJKz0gZGE5MDUyLWJhdHRlcnkubw0K PiA+ICtvYmotJChDT05GSUdfQ0hBUkdFUl9EQTkxNTApCSs9IGRhOTE1MC1jaGFyZ2VyLm8NCj4g PiAgb2JqLSQoQ09ORklHX0JBVFRFUllfTUFYMTcwNDApCSs9IG1heDE3MDQwX2JhdHRlcnkubw0K PiA+ICBvYmotJChDT05GSUdfQkFUVEVSWV9NQVgxNzA0MikJKz0gbWF4MTcwNDJfYmF0dGVyeS5v DQo+ID4gIG9iai0kKENPTkZJR19CQVRURVJZX1oyKQkrPSB6Ml9iYXR0ZXJ5Lm8NCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9wb3dlci9kYTkxNTAtY2hhcmdlci5jIGIvZHJpdmVycy9wb3dlci9k YTkxNTAtY2hhcmdlci5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAw MDAwLi45YjE4MjZkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvcG93ZXIv ZGE5MTUwLWNoYXJnZXIuYw0KPiA+IEBAIC0wLDAgKzEsNjY2IEBADQo+ID4gKy8qDQo+ID4gKyAq IERBOTE1MCBDaGFyZ2VyIERyaXZlcg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTQgRGlhbG9nIFNlbWljb25kdWN0b3INCj4gPiArICoNCj4gPiArICogQXV0aG9yOiBBZGFtIFRo b21zb24gPEFkYW0uVGhvbXNvbi5PcGVuc291cmNlQGRpYXNlbWkuY29tPg0KPiA+ICsgKg0KPiA+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg IGl0IGFuZC9vciBtb2RpZnkgaXQNCj4gPiArICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdO VSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlDQo+ID4gKyAqIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNl LCBvciAoYXQgeW91cg0KPiA+ICsgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KPiA+ICsg Ki8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L2ludGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdXNi L3BoeS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaWlvL2NvbnN1bWVyLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9tZmQvZGE5MTUwL2NvcmUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21mZC9k YTkxNTAvcmVnaXN0ZXJzLmg+DQo+ID4gKw0KPiA+ICsvKiBQcml2YXRlIGRhdGEgKi8NCj4gPiAr c3RydWN0IGRhOTE1MF9jaGFyZ2VyIHsNCj4gPiArCXN0cnVjdCBkYTkxNTAgKmRhOTE1MDsNCj4g PiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4gPiArDQo+ID4gKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5 IHVzYjsNCj4gPiArCXN0cnVjdCBwb3dlcl9zdXBwbHkgYmF0dGVyeTsNCj4gPiArCXN0cnVjdCBw b3dlcl9zdXBwbHkgKnN1cHBseV9vbmxpbmU7DQo+ID4gKw0KPiA+ICsJc3RydWN0IHVzYl9waHkg KnVzYl9waHk7DQo+ID4gKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb3RnX25iOw0KPiA+ICsJc3Ry dWN0IHdvcmtfc3RydWN0IG90Z193b3JrOw0KPiA+ICsJdW5zaWduZWQgbG9uZyB1c2JfZXZlbnQ7 DQo+ID4gKw0KPiA+ICsJc3RydWN0IGlpb19jaGFubmVsICppYnVzX2NoYW47DQo+ID4gKwlzdHJ1 Y3QgaWlvX2NoYW5uZWwgKnZidXNfY2hhbjsNCj4gPiArCXN0cnVjdCBpaW9fY2hhbm5lbCAqdGp1 bmNfY2hhbjsNCj4gPiArCXN0cnVjdCBpaW9fY2hhbm5lbCAqdmJhdF9jaGFuOw0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgZGE5MTUwX2NoYXJnZXJfc3VwcGx5X29ubGlu ZShzdHJ1Y3QgZGE5MTUwX2NoYXJnZXIgKmNoYXJnZXIsDQo+ID4gKwkJCQkJICAgICAgIHN0cnVj dCBwb3dlcl9zdXBwbHkgKnBzeSwNCj4gPiArCQkJCQkgICAgICAgdW5pb24gcG93ZXJfc3VwcGx5 X3Byb3B2YWwgKnZhbCkNCj4gPiArew0KPiA+ICsJdmFsLT5pbnR2YWwgPSAocHN5ID09IGNoYXJn ZXItPnN1cHBseV9vbmxpbmUpID8gMSA6IDA7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qIENoYXJnZXIgUHJvcGVydGllcyAqLw0KPiA+ICtzdGF0aWMgaW50 IGRhOTE1MF9jaGFyZ2VyX3ZidXNfdm9sdGFnZV9ub3coc3RydWN0IGRhOTE1MF9jaGFyZ2VyICpj aGFyZ2VyLA0KPiA+ICsJCQkJCSAgIHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpDQo+ ID4gK3sNCj4gPiArCWludCB2X3ZhbCwgcmV0Ow0KPiA+ICsNCj4gPiArCS8qIFJlYWQgcHJvY2Vz c2VkIHZhbHVlIC0gbVYgdW5pdHMgKi8NCj4gPiArCXJldCA9IGlpb19yZWFkX2NoYW5uZWxfcHJv Y2Vzc2VkKGNoYXJnZXItPnZidXNfY2hhbiwgJnZfdmFsKTsNCj4gPiArCWlmIChyZXQgPCAwKQ0K PiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJLyogQ29udmVydCB2b2x0YWdlIHRvIGV4 cGVjdGVkIHVWIHVuaXRzICovDQo+ID4gKwl2YWwtPmludHZhbCA9IHZfdmFsICogMTAwMDsNCj4g PiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkYTkx NTBfY2hhcmdlcl9pYnVzX2N1cnJlbnRfYXZnKHN0cnVjdCBkYTkxNTBfY2hhcmdlciAqY2hhcmdl ciwNCj4gPiArCQkJCQkgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQ0KPiA+ICt7 DQo+ID4gKwlpbnQgaV92YWwsIHJldDsNCj4gPiArDQo+ID4gKwkvKiBSZWFkIHByb2Nlc3NlZCB2 YWx1ZSAtIG1BIHVuaXRzICovDQo+ID4gKwlyZXQgPSBpaW9fcmVhZF9jaGFubmVsX3Byb2Nlc3Nl ZChjaGFyZ2VyLT5pYnVzX2NoYW4sICZpX3ZhbCk7DQo+ID4gKwlpZiAocmV0IDwgMCkNCj4gPiAr CQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCS8qIENvbnZlcnQgY3VycmVudCB0byBleHBlY3Rl ZCB1QSB1bml0cyAqLw0KPiA+ICsJdmFsLT5pbnR2YWwgPSBpX3ZhbCAqIDEwMDA7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZGE5MTUwX2No YXJnZXJfdGp1bmNfdGVtcChzdHJ1Y3QgZGE5MTUwX2NoYXJnZXIgKmNoYXJnZXIsDQo+ID4gKwkJ CQkgICAgIHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpDQo+ID4gK3sNCj4gPiArCWlu dCB0X3ZhbCwgcmV0Ow0KPiA+ICsNCj4gPiArCS8qIFJlYWQgcHJvY2Vzc2VkIHZhbHVlIC0gMC4w MDEgZGVncmVlcyBDIHVuaXRzICovDQo+ID4gKwlyZXQgPSBpaW9fcmVhZF9jaGFubmVsX3Byb2Nl c3NlZChjaGFyZ2VyLT50anVuY19jaGFuLCAmdF92YWwpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwkvKiBDb252ZXJ0IHRlbXAgdG8gZXhwZWN0 IDAuMSBkZWdyZWVzIEMgdW5pdHMgKi8NCj4gPiArCXZhbC0+aW50dmFsID0gdF92YWwgLyAxMDA7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBlbnVt IHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBkYTkxNTBfY2hhcmdlcl9wcm9wc1tdID0gew0KPiA+ICsJ UE9XRVJfU1VQUExZX1BST1BfT05MSU5FLA0KPiA+ICsJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFH RV9OT1csDQo+ID4gKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX0FWRywNCj4gPiArCVBPV0VS X1NVUFBMWV9QUk9QX1RFTVAsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGRhOTE1 MF9jaGFyZ2VyX2dldF9wcm9wKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwNCj4gPiArCQkJCSAg IGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwNCj4gPiArCQkJCSAgIHVuaW9uIHBvd2Vy X3N1cHBseV9wcm9wdmFsICp2YWwpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkYTkxNTBfY2hhcmdl ciAqY2hhcmdlciA9IGRldl9nZXRfZHJ2ZGF0YShwc3ktPmRldi0+cGFyZW50KTsNCj4gPiArCWlu dCByZXQ7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChwc3ApIHsNCj4gPiArCWNhc2UgUE9XRVJfU1VQ UExZX1BST1BfT05MSU5FOg0KPiA+ICsJCXJldCA9IGRhOTE1MF9jaGFyZ2VyX3N1cHBseV9vbmxp bmUoY2hhcmdlciwgcHN5LCB2YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBQT1dFUl9T VVBQTFlfUFJPUF9WT0xUQUdFX05PVzoNCj4gPiArCQlyZXQgPSBkYTkxNTBfY2hhcmdlcl92YnVz X3ZvbHRhZ2Vfbm93KGNoYXJnZXIsIHZhbCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFBP V0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHOg0KPiA+ICsJCXJldCA9IGRhOTE1MF9jaGFyZ2Vy X2lidXNfY3VycmVudF9hdmcoY2hhcmdlciwgdmFsKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNh c2UgUE9XRVJfU1VQUExZX1BST1BfVEVNUDoNCj4gPiArCQlyZXQgPSBkYTkxNTBfY2hhcmdlcl90 anVuY190ZW1wKGNoYXJnZXIsIHZhbCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0K PiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogQmF0dGVyeSBQcm9wZXJ0aWVz ICovDQo+ID4gK3N0YXRpYyBpbnQgZGE5MTUwX2NoYXJnZXJfYmF0dGVyeV9zdGF0dXMoc3RydWN0 IGRhOTE1MF9jaGFyZ2VyICpjaGFyZ2VyLA0KPiA+ICsJCQkJCSB1bmlvbiBwb3dlcl9zdXBwbHlf cHJvcHZhbCAqdmFsKQ0KPiA+ICt7DQo+ID4gKwl1OCByZWc7DQo+ID4gKw0KPiA+ICsJLyogQ2hl Y2sgdG8gc2VlIGlmIGJhdHRlcnkgaXMgZGlzY2hhcmdpbmcgKi8NCj4gPiArCXJlZyA9IGRhOTE1 MF9yZWdfcmVhZChjaGFyZ2VyLT5kYTkxNTAsIERBOTE1MF9TVEFUVVNfSCk7DQo+ID4gKw0KPiA+ ICsJaWYgKCgocmVnICYgREE5MTUwX1ZCVVNfU1RBVF9NQVNLKSA9PSBEQTkxNTBfVkJVU19TVEFU X09GRikgfHwNCj4gPiArCSAgICAoKHJlZyAmIERBOTE1MF9WQlVTX1NUQVRfTUFTSykgPT0gREE5 MTUwX1ZCVVNfU1RBVF9XQUlUKSkgew0KPiA+ICsJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZ X1NUQVRVU19ESVNDSEFSR0lORzsNCj4gPiArDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJcmVnID0gZGE5MTUwX3JlZ19yZWFkKGNoYXJnZXItPmRhOTE1MCwgREE5MTUw X1NUQVRVU19KKTsNCj4gPiArDQo+ID4gKwkvKiBOb3cgY2hlY2sgZm9yIG90aGVyIHN0YXRlcyAq Lw0KPiA+ICsJc3dpdGNoIChyZWcgJiBEQTkxNTBfQ0hHX1NUQVRfTUFTSykgew0KPiA+ICsJY2Fz ZSBEQTkxNTBfQ0hHX1NUQVRfQUNUOg0KPiA+ICsJY2FzZSBEQTkxNTBfQ0hHX1NUQVRfUFJFOg0K PiA+ICsJY2FzZSBEQTkxNTBfQ0hHX1NUQVRfQ0M6DQo+ID4gKwljYXNlIERBOTE1MF9DSEdfU1RB VF9DVjoNCj4gPiArCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfQ0hBUkdJTkc7 DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIERBOTE1MF9DSEdfU1RBVF9PRkY6DQo+ID4gKwlj YXNlIERBOTE1MF9DSEdfU1RBVF9TVVNQOg0KPiA+ICsJY2FzZSBEQTkxNTBfQ0hHX1NUQVRfVEVN UDoNCj4gPiArCWNhc2UgREE5MTUwX0NIR19TVEFUX1RJTUU6DQo+ID4gKwljYXNlIERBOTE1MF9D SEdfU1RBVF9CQVQ6DQo+ID4gKwkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX05P VF9DSEFSR0lORzsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgREE5MTUwX0NIR19TVEFUX0ZV TEw6DQo+ID4gKwkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0ZVTEw7DQo+ID4g KwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQ UExZX1NUQVRVU19VTktOT1dOOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGRhOTE1MF9jaGFyZ2Vy X2JhdHRlcnlfaGVhbHRoKHN0cnVjdCBkYTkxNTBfY2hhcmdlciAqY2hhcmdlciwNCj4gPiArCQkJ CQkgdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkNCj4gPiArew0KPiA+ICsJdTggcmVn Ow0KPiA+ICsNCj4gPiArCXJlZyA9IGRhOTE1MF9yZWdfcmVhZChjaGFyZ2VyLT5kYTkxNTAsIERB OTE1MF9TVEFUVVNfSik7DQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgaWYgdGVtcGVyYXR1cmUgbGlt aXQgcmVhY2hlZCAqLw0KPiA+ICsJc3dpdGNoIChyZWcgJiBEQTkxNTBfQ0hHX1RFTVBfTUFTSykg ew0KPiA+ICsJY2FzZSBEQTkxNTBfQ0hHX1RFTVBfVU5ERVI6DQo+ID4gKwkJdmFsLT5pbnR2YWwg PSBQT1dFUl9TVVBQTFlfSEVBTFRIX0NPTEQ7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwljYXNl IERBOTE1MF9DSEdfVEVNUF9PVkVSOg0KPiA+ICsJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZ X0hFQUxUSF9PVkVSSEVBVDsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCWRlZmF1bHQ6DQo+ID4g KwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgZm9yIG90aGVyIGhlYWx0 aCBzdGF0ZXMgKi8NCj4gPiArCXN3aXRjaCAocmVnICYgREE5MTUwX0NIR19TVEFUX01BU0spIHsN Cj4gPiArCWNhc2UgREE5MTUwX0NIR19TVEFUX0FDVDoNCj4gPiArCWNhc2UgREE5MTUwX0NIR19T VEFUX1BSRToNCj4gPiArCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9IRUFMVEhfREVBRDsN Cj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgREE5MTUwX0NIR19TVEFUX1RJTUU6DQo+ID4gKwkJ dmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfSEVBTFRIX1VOU1BFQ19GQUlMVVJFOw0KPiA+ICsJ CWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBM WV9IRUFMVEhfR09PRDsNCj4gPiArCQlicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkYTkxNTBfY2hhcmdlcl9iYXR0 ZXJ5X3ByZXNlbnQoc3RydWN0IGRhOTE1MF9jaGFyZ2VyICpjaGFyZ2VyLA0KPiA+ICsJCQkJCSAg dW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkNCj4gPiArew0KPiA+ICsJdTggcmVnOw0K PiA+ICsNCj4gPiArCS8qIENoZWNrIGlmIGJhdHRlcnkgcHJlc2VudCBvciByZW1vdmVkICovDQo+ ID4gKwlyZWcgPSBkYTkxNTBfcmVnX3JlYWQoY2hhcmdlci0+ZGE5MTUwLCBEQTkxNTBfU1RBVFVT X0opOw0KPiA+ICsJaWYgKChyZWcgJiBEQTkxNTBfQ0hHX1NUQVRfTUFTSykgPT0gREE5MTUwX0NI R19TVEFUX0JBVCkNCj4gPiArCQl2YWwtPmludHZhbCA9IDA7DQo+ID4gKwllbHNlDQo+ID4gKwkJ dmFsLT5pbnR2YWwgPSAxOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IGRhOTE1MF9jaGFyZ2VyX2JhdHRlcnlfY2hhcmdlX3R5cGUoc3RydWN0 IGRhOTE1MF9jaGFyZ2VyICpjaGFyZ2VyLA0KPiA+ICsJCQkJCSAgICAgIHVuaW9uIHBvd2VyX3N1 cHBseV9wcm9wdmFsICp2YWwpDQo+ID4gK3sNCj4gPiArCXU4IHJlZzsNCj4gPiArDQo+ID4gKwly ZWcgPSBkYTkxNTBfcmVnX3JlYWQoY2hhcmdlci0+ZGE5MTUwLCBEQTkxNTBfU1RBVFVTX0opOw0K PiA+ICsNCj4gPiArCXN3aXRjaCAocmVnICYgREE5MTUwX0NIR19TVEFUX01BU0spIHsNCj4gPiAr CWNhc2UgREE5MTUwX0NIR19TVEFUX0NDOg0KPiA+ICsJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQ UExZX0NIQVJHRV9UWVBFX0ZBU1Q7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIERBOTE1MF9D SEdfU1RBVF9BQ1Q6DQo+ID4gKwljYXNlIERBOTE1MF9DSEdfU1RBVF9QUkU6DQo+ID4gKwljYXNl IERBOTE1MF9DSEdfU1RBVF9DVjoNCj4gPiArCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9D SEFSR0VfVFlQRV9UUklDS0xFOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiAr CQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9OT05FOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IGRhOTE1MF9jaGFyZ2VyX2JhdHRlcnlfdm9sdGFnZV9taW4oc3RydWN0IGRh OTE1MF9jaGFyZ2VyICpjaGFyZ2VyLA0KPiA+ICsJCQkJCSAgICAgIHVuaW9uIHBvd2VyX3N1cHBs eV9wcm9wdmFsICp2YWwpDQo+ID4gK3sNCj4gPiArCXU4IHJlZzsNCj4gPiArDQo+ID4gKwlyZWcg PSBkYTkxNTBfcmVnX3JlYWQoY2hhcmdlci0+ZGE5MTUwLCBEQTkxNTBfUFBSX0NIR0NUUkxfQyk7 DQo+ID4gKw0KPiA+ICsJLyogVmFsdWUgc3RhcnRzIGF0IDI1MDAgbVYsIDUwIG1WIGluY3JlbWVu dHMsIHByZXNlbnRlZCBpbiB1ViAqLw0KPiA+ICsJdmFsLT5pbnR2YWwgPSAoKHJlZyAmIERBOTE1 MF9DSEdfVkZBVUxUX01BU0spICogNTAwMDApICsgMjUwMDAwMDsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkYTkxNTBfY2hhcmdlcl9iYXR0 ZXJ5X3ZvbHRhZ2Vfbm93KHN0cnVjdCBkYTkxNTBfY2hhcmdlciAqY2hhcmdlciwNCj4gPiArCQkJ CQkgICAgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQ0KPiA+ICt7DQo+ID4gKwlp bnQgdl92YWwsIHJldDsNCj4gPiArDQo+ID4gKwkvKiBSZWFkIHByb2Nlc3NlZCB2YWx1ZSAtIG1W IHVuaXRzICovDQo+ID4gKwlyZXQgPSBpaW9fcmVhZF9jaGFubmVsX3Byb2Nlc3NlZChjaGFyZ2Vy LT52YmF0X2NoYW4sICZ2X3ZhbCk7DQo+ID4gKwlpZiAocmV0IDwgMCkNCj4gPiArCQlyZXR1cm4g cmV0Ow0KPiA+ICsNCj4gPiArCXZhbC0+aW50dmFsID0gdl92YWwgKiAxMDAwOw0KPiA+ICsNCj4g PiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGRhOTE1MF9jaGFy Z2VyX2JhdHRlcnlfY3VycmVudF9tYXgoc3RydWN0IGRhOTE1MF9jaGFyZ2VyICpjaGFyZ2VyLA0K PiA+ICsJCQkJCSAgICAgIHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpDQo+ID4gK3sN Cj4gPiArCWludCByZWc7DQo+ID4gKw0KPiA+ICsJcmVnID0gZGE5MTUwX3JlZ19yZWFkKGNoYXJn ZXItPmRhOTE1MCwgREE5MTUwX1BQUl9DSEdDVFJMX0QpOw0KPiA+ICsNCj4gPiArCS8qIDI1bUEg aW5jcmVtZW50cyAqLw0KPiA+ICsJdmFsLT5pbnR2YWwgPSByZWcgKiAyNTAwMDsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkYTkxNTBfY2hh cmdlcl9iYXR0ZXJ5X3ZvbHRhZ2VfbWF4KHN0cnVjdCBkYTkxNTBfY2hhcmdlciAqY2hhcmdlciwN Cj4gPiArCQkJCQkgICAgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQ0KPiA+ICt7 DQo+ID4gKwl1OCByZWc7DQo+ID4gKw0KPiA+ICsJcmVnID0gZGE5MTUwX3JlZ19yZWFkKGNoYXJn ZXItPmRhOTE1MCwgREE5MTUwX1BQUl9DSEdDVFJMX0IpOw0KPiA+ICsNCj4gPiArCS8qIFZhbHVl IHN0YXJ0cyBhdCAzNjUwIG1WLCAyNSBtViBpbmNyZW1lbnRzLCBwcmVzZW50ZWQgaW4gdVYgKi8N Cj4gPiArCXZhbC0+aW50dmFsID0gKChyZWcgJiBEQTkxNTBfQ0hHX1ZCQVRfTUFTSykgKiAyNTAw MCkgKyAzNjUwMDAwOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBkYTkxNTBfY2hhcmdlcl9iYXRfcHJvcHNbXSA9 IHsNCj4gPiArCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywNCj4gPiArCVBPV0VSX1NVUFBMWV9Q Uk9QX09OTElORSwNCj4gPiArCVBPV0VSX1NVUFBMWV9QUk9QX0hFQUxUSCwNCj4gPiArCVBPV0VS X1NVUFBMWV9QUk9QX1BSRVNFTlQsDQo+ID4gKwlQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfVFlQ RSwNCj4gPiArCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOX0RFU0lHTiwNCj4gPiArCVBP V0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLA0KPiA+ICsJUE9XRVJfU1VQUExZX1BST1BfQ09O U1RBTlRfQ0hBUkdFX0NVUlJFTlRfTUFYLA0KPiA+ICsJUE9XRVJfU1VQUExZX1BST1BfQ09OU1RB TlRfQ0hBUkdFX1ZPTFRBR0VfTUFYLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBk YTkxNTBfY2hhcmdlcl9iYXR0ZXJ5X2dldF9wcm9wKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwN Cj4gPiArCQkJCQkgICBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsDQo+ID4gKwkJCQkJ ICAgdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkNCj4gPiArew0KPiA+ICsJc3RydWN0 IGRhOTE1MF9jaGFyZ2VyICpjaGFyZ2VyID0gZGV2X2dldF9kcnZkYXRhKHBzeS0+ZGV2LT5wYXJl bnQpOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKHBzcCkgew0KPiA+ICsJ Y2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6DQo+ID4gKwkJcmV0ID0gZGE5MTUwX2NoYXJn ZXJfYmF0dGVyeV9zdGF0dXMoY2hhcmdlciwgdmFsKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNh c2UgUE9XRVJfU1VQUExZX1BST1BfT05MSU5FOg0KPiA+ICsJCXJldCA9IGRhOTE1MF9jaGFyZ2Vy X3N1cHBseV9vbmxpbmUoY2hhcmdlciwgcHN5LCB2YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJ Y2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9IRUFMVEg6DQo+ID4gKwkJcmV0ID0gZGE5MTUwX2NoYXJn ZXJfYmF0dGVyeV9oZWFsdGgoY2hhcmdlciwgdmFsKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNh c2UgUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVDoNCj4gPiArCQlyZXQgPSBkYTkxNTBfY2hhcmdl cl9iYXR0ZXJ5X3ByZXNlbnQoY2hhcmdlciwgdmFsKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNh c2UgUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX1RZUEU6DQo+ID4gKwkJcmV0ID0gZGE5MTUwX2No YXJnZXJfYmF0dGVyeV9jaGFyZ2VfdHlwZShjaGFyZ2VyLCB2YWwpOw0KPiA+ICsJCWJyZWFrOw0K PiA+ICsJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01JTl9ERVNJR046DQo+ID4gKwkJ cmV0ID0gZGE5MTUwX2NoYXJnZXJfYmF0dGVyeV92b2x0YWdlX21pbihjaGFyZ2VyLCB2YWwpOw0K PiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoN Cj4gPiArCQlyZXQgPSBkYTkxNTBfY2hhcmdlcl9iYXR0ZXJ5X3ZvbHRhZ2Vfbm93KGNoYXJnZXIs IHZhbCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NPTlNU QU5UX0NIQVJHRV9DVVJSRU5UX01BWDoNCj4gPiArCQlyZXQgPSBkYTkxNTBfY2hhcmdlcl9iYXR0 ZXJ5X2N1cnJlbnRfbWF4KGNoYXJnZXIsIHZhbCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNl IFBPV0VSX1NVUFBMWV9QUk9QX0NPTlNUQU5UX0NIQVJHRV9WT0xUQUdFX01BWDoNCj4gPiArCQly ZXQgPSBkYTkxNTBfY2hhcmdlcl9iYXR0ZXJ5X3ZvbHRhZ2VfbWF4KGNoYXJnZXIsIHZhbCk7DQo+ ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4g KwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGlycXJldHVybl90IGRhOTE1MF9jaGFyZ2VyX2NoZ19pcnEoaW50IGly cSwgdm9pZCAqZGF0YSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGRhOTE1MF9jaGFyZ2VyICpjaGFy Z2VyID0gZGF0YTsNCj4gPiArDQo+ID4gKwlwb3dlcl9zdXBwbHlfY2hhbmdlZCgmY2hhcmdlci0+ YmF0dGVyeSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgZGE5MTUwX2NoYXJnZXJfdGp1bmNfaXJxKGludCBp cnEsIHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkYTkxNTBfY2hhcmdlciAqY2hh cmdlciA9IGRhdGE7DQo+ID4gKw0KPiA+ICsJLyogTm90aGluZyB3ZSBjYW4gcmVhbGx5IGRvIGV4 Y2VwdCByZXBvcnQgdGhpcy4gKi8NCj4gPiArCWRldl9jcml0KGNoYXJnZXItPmRldiwgIlRKdW5j IG92ZXIgdGVtcGVyYXR1cmUhISFcbiIpOw0KPiA+ICsJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJmNo YXJnZXItPnVzYik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgZGE5MTUwX2NoYXJnZXJfdmZhdWx0X2lycShp bnQgaXJxLCB2b2lkICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZGE5MTUwX2NoYXJnZXIg KmNoYXJnZXIgPSBkYXRhOw0KPiA+ICsNCj4gPiArCS8qIE5vdGhpbmcgd2UgY2FuIHJlYWxseSBk byBleGNlcHQgcmVwb3J0IHRoaXMuICovDQo+ID4gKwlkZXZfY3JpdChjaGFyZ2VyLT5kZXYsICJW U1lTIHVuZGVyIHZvbHRhZ2UhISFcbiIpOw0KPiA+ICsJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJmNo YXJnZXItPnVzYik7DQo+ID4gKwlwb3dlcl9zdXBwbHlfY2hhbmdlZCgmY2hhcmdlci0+YmF0dGVy eSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaXJxcmV0dXJuX3QgZGE5MTUwX2NoYXJnZXJfdmJ1c19pcnEoaW50IGlycSwgdm9p ZCAqZGF0YSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGRhOTE1MF9jaGFyZ2VyICpjaGFyZ2VyID0g ZGF0YTsNCj4gPiArCXU4IHJlZzsNCj4gPiArDQo+ID4gKwlyZWcgPSBkYTkxNTBfcmVnX3JlYWQo Y2hhcmdlci0+ZGE5MTUwLCBEQTkxNTBfU1RBVFVTX0gpOw0KPiA+ICsNCj4gPiArCS8qIENoYXJn ZXIgcGx1Z2dlZCBpbiBvciBiYXR0ZXJ5IG9ubHkgKi8NCj4gPiArCXN3aXRjaCAocmVnICYgREE5 MTUwX1ZCVVNfU1RBVF9NQVNLKSB7DQo+ID4gKwljYXNlIERBOTE1MF9WQlVTX1NUQVRfT0ZGOg0K PiA+ICsJY2FzZSBEQTkxNTBfVkJVU19TVEFUX1dBSVQ6DQo+ID4gKwkJY2hhcmdlci0+c3VwcGx5 X29ubGluZSA9ICZjaGFyZ2VyLT5iYXR0ZXJ5Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBE QTkxNTBfVkJVU19TVEFUX0NIRzoNCj4gPiArCQljaGFyZ2VyLT5zdXBwbHlfb25saW5lID0gJmNo YXJnZXItPnVzYjsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJZGV2X3dh cm4oY2hhcmdlci0+ZGV2LCAiVW5rbm93biBWQlVTIHN0YXRlIC0gcmVnID0gMHgleFxuIiwNCj4g PiArCQkJIHJlZyk7DQo+ID4gKwkJY2hhcmdlci0+c3VwcGx5X29ubGluZSA9IE5VTEw7DQo+ID4g KwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJmNo YXJnZXItPnVzYik7DQo+ID4gKwlwb3dlcl9zdXBwbHlfY2hhbmdlZCgmY2hhcmdlci0+YmF0dGVy eSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgdm9pZCBkYTkxNTBfY2hhcmdlcl9vdGdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3Qg KmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkYTkxNTBfY2hhcmdlciAqY2hhcmdlciA9DQo+ ID4gKwkJY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBkYTkxNTBfY2hhcmdlciwgb3RnX3dvcmsp Ow0KPiA+ICsNCj4gPiArCXN3aXRjaCAoY2hhcmdlci0+dXNiX2V2ZW50KSB7DQo+ID4gKwljYXNl IFVTQl9FVkVOVF9JRDoNCj4gPiArCQkvKiBFbmFibGUgT1RHIEJvb3N0ICovDQo+ID4gKwkJZGE5 MTUwX3NldF9iaXRzKGNoYXJnZXItPmRhOTE1MCwgREE5MTUwX1BQUl9CS0NUUkxfQSwNCj4gPiAr CQkJCURBOTE1MF9WQlVTX01PREVfTUFTSywNCj4gREE5MTUwX1ZCVVNfTU9ERV9PVEcpOw0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBVU0JfRVZFTlRfTk9ORToNCj4gPiArCQkvKiBSZXZlcnQg dG8gY2hhcmdlIG1vZGUgKi8NCj4gPiArCQlwb3dlcl9zdXBwbHlfY2hhbmdlZCgmY2hhcmdlci0+ dXNiKTsNCj4gPiArCQlwb3dlcl9zdXBwbHlfY2hhbmdlZCgmY2hhcmdlci0+YmF0dGVyeSk7DQo+ ID4gKwkJZGE5MTUwX3NldF9iaXRzKGNoYXJnZXItPmRhOTE1MCwgREE5MTUwX1BQUl9CS0NUUkxf QSwNCj4gPiArCQkJCURBOTE1MF9WQlVTX01PREVfTUFTSywNCj4gREE5MTUwX1ZCVVNfTU9ERV9D SEcpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IGRhOTE1MF9jaGFyZ2VyX290Z19uY2Ioc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5z aWduZWQgbG9uZyB2YWwsDQo+ID4gKwkJCQkgIHZvaWQgKnByaXYpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBkYTkxNTBfY2hhcmdlciAqY2hhcmdlciA9DQo+ID4gKwkJY29udGFpbmVyX29mKG5iLCBz dHJ1Y3QgZGE5MTUwX2NoYXJnZXIsIG90Z19uYik7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhjaGFy Z2VyLT5kZXYsICJEQTkxNTAgT1RHIG5vdGlmeSAlbHVcbiIsIHZhbCk7DQo+ID4gKw0KPiA+ICsJ Y2hhcmdlci0+dXNiX2V2ZW50ID0gdmFsOw0KPiA+ICsJc2NoZWR1bGVfd29yaygmY2hhcmdlci0+ b3RnX3dvcmspOw0KPiA+ICsNCj4gPiArCXJldHVybiBOT1RJRllfT0s7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgZGE5MTUwX2NoYXJnZXJfcmVnaXN0ZXJfaXJxKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYsDQo+ID4gKwkJCQkgICAgICAgaXJxX2hhbmRsZXJfdCBoYW5kbGVy LA0KPiA+ICsJCQkJICAgICAgIGNvbnN0IGNoYXIgKmlycV9uYW1lKQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJc3RydWN0IGRhOTE1MF9jaGFy Z2VyICpjaGFyZ2VyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKwlpbnQgaXJx LCByZXQ7DQo+ID4gKw0KPiA+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwg aXJxX25hbWUpOw0KPiA+ICsJaWYgKGlycSA8IDApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byBnZXQgSVJRIENIR19TVEFUVVM6ICVkXG4iLCBpcnEpOw0KPiA+ICsJCXJldHVybiBp cnE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2ly cShkZXYsIGlycSwgTlVMTCwgaGFuZGxlciwgSVJRRl9PTkVTSE9ULA0KPiA+ICsJCQkJCWlycV9u YW1lLCBjaGFyZ2VyKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gcmVxdWVzdCBJUlEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBkYTkxNTBfY2hhcmdlcl9w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJc3RydWN0IGRhOTE1MCAqZGE5MTUwID0g ZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsNCj4gPiArCXN0cnVjdCBkYTkxNTBfY2hhcmdl ciAqY2hhcmdlcjsNCj4gPiArCXN0cnVjdCBwb3dlcl9zdXBwbHkgKnVzYiwgKmJhdHRlcnk7DQo+ ID4gKwl1OCByZWc7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWNoYXJnZXIgPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IGRhOTE1MF9jaGFyZ2VyKSwgR0ZQX0tFUk5FTCk7 DQo+ID4gKwlpZiAoY2hhcmdlciA9PSBOVUxMKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ ICsNCj4gPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNoYXJnZXIpOw0KPiA+ICsJY2hh cmdlci0+ZGE5MTUwID0gZGE5MTUwOw0KPiA+ICsJY2hhcmdlci0+ZGV2ID0gZGV2Ow0KPiA+ICsN Cj4gPiArCS8qIEFjcXVpcmUgQURDIGNoYW5uZWxzICovDQo+ID4gKwljaGFyZ2VyLT5pYnVzX2No YW4gPSBpaW9fY2hhbm5lbF9nZXQoZGV2LCAiQ0hBTl9JQlVTIik7DQo+ID4gKwlpZiAoSVNfRVJS KGNoYXJnZXItPmlidXNfY2hhbikpIHsNCj4gPiArCQlyZXQgPSBQVFJfRVJSKGNoYXJnZXItPmli dXNfY2hhbik7DQo+ID4gKwkJZ290byBpYnVzX2NoYW5fZmFpbDsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwljaGFyZ2VyLT52YnVzX2NoYW4gPSBpaW9fY2hhbm5lbF9nZXQoZGV2LCAiQ0hBTl9WQlVT Iik7DQo+ID4gKwlpZiAoSVNfRVJSKGNoYXJnZXItPnZidXNfY2hhbikpIHsNCj4gPiArCQlyZXQg PSBQVFJfRVJSKGNoYXJnZXItPnZidXNfY2hhbik7DQo+ID4gKwkJZ290byB2YnVzX2NoYW5fZmFp bDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwljaGFyZ2VyLT50anVuY19jaGFuID0gaWlvX2NoYW5u ZWxfZ2V0KGRldiwgIkNIQU5fVEpVTkMiKTsNCj4gPiArCWlmIChJU19FUlIoY2hhcmdlci0+dGp1 bmNfY2hhbikpIHsNCj4gPiArCQlyZXQgPSBQVFJfRVJSKGNoYXJnZXItPnRqdW5jX2NoYW4pOw0K PiA+ICsJCWdvdG8gdGp1bmNfY2hhbl9mYWlsOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWNoYXJn ZXItPnZiYXRfY2hhbiA9IGlpb19jaGFubmVsX2dldChkZXYsICJDSEFOX1ZCQVQiKTsNCj4gPiAr CWlmIChJU19FUlIoY2hhcmdlci0+dmJhdF9jaGFuKSkgew0KPiA+ICsJCXJldCA9IFBUUl9FUlIo Y2hhcmdlci0+dmJhdF9jaGFuKTsNCj4gPiArCQlnb3RvIHZiYXRfY2hhbl9mYWlsOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCS8qIFJlZ2lzdGVyIHBvd2VyIHN1cHBsaWVzICovDQo+ID4gKwl1c2Ig PSAmY2hhcmdlci0+dXNiOw0KPiA+ICsJYmF0dGVyeSA9ICZjaGFyZ2VyLT5iYXR0ZXJ5Ow0KPiA+ ICsNCj4gPiArCXVzYi0+bmFtZSA9ICJkYTkxNTAtdXNiIiwNCj4gPiArCXVzYi0+dHlwZSA9IFBP V0VSX1NVUFBMWV9UWVBFX1VTQjsNCj4gPiArCXVzYi0+cHJvcGVydGllcyA9IGRhOTE1MF9jaGFy Z2VyX3Byb3BzOw0KPiA+ICsJdXNiLT5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUoZGE5MTUw X2NoYXJnZXJfcHJvcHMpOw0KPiA+ICsJdXNiLT5nZXRfcHJvcGVydHkgPSBkYTkxNTBfY2hhcmdl cl9nZXRfcHJvcDsNCj4gPiArCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcihkZXYsIHVzYik7 DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWdvdG8gdXNiX2ZhaWw7DQo+ID4gKw0KPiA+ICsJYmF0 dGVyeS0+bmFtZSA9ICJkYTkxNTAtYmF0dGVyeSI7DQo+ID4gKwliYXR0ZXJ5LT50eXBlID0gUE9X RVJfU1VQUExZX1RZUEVfQkFUVEVSWTsNCj4gPiArCWJhdHRlcnktPnByb3BlcnRpZXMgPSBkYTkx NTBfY2hhcmdlcl9iYXRfcHJvcHM7DQo+ID4gKwliYXR0ZXJ5LT5udW1fcHJvcGVydGllcyA9IEFS UkFZX1NJWkUoZGE5MTUwX2NoYXJnZXJfYmF0X3Byb3BzKTsNCj4gPiArCWJhdHRlcnktPmdldF9w cm9wZXJ0eSA9IGRhOTE1MF9jaGFyZ2VyX2JhdHRlcnlfZ2V0X3Byb3A7DQo+ID4gKwlyZXQgPSBw b3dlcl9zdXBwbHlfcmVnaXN0ZXIoZGV2LCBiYXR0ZXJ5KTsNCj4gPiArCWlmIChyZXQpDQo+ID4g KwkJZ290byBiYXR0ZXJ5X2ZhaWw7DQo+ID4gKw0KPiA+ICsJLyogR2V0IGluaXRpYWwgb25saW5l IHN1cHBseSAqLw0KPiA+ICsJcmVnID0gZGE5MTUwX3JlZ19yZWFkKGRhOTE1MCwgREE5MTUwX1NU QVRVU19IKTsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKHJlZyAmIERBOTE1MF9WQlVTX1NUQVRfTUFT Sykgew0KPiA+ICsJY2FzZSBEQTkxNTBfVkJVU19TVEFUX09GRjoNCj4gPiArCWNhc2UgREE5MTUw X1ZCVVNfU1RBVF9XQUlUOg0KPiA+ICsJCWNoYXJnZXItPnN1cHBseV9vbmxpbmUgPSAmY2hhcmdl ci0+YmF0dGVyeTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgREE5MTUwX1ZCVVNfU1RBVF9D SEc6DQo+ID4gKwkJY2hhcmdlci0+c3VwcGx5X29ubGluZSA9ICZjaGFyZ2VyLT51c2I7DQo+ID4g KwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWRldl93YXJuKGRldiwgIlVua25vd24g VkJVUyBzdGF0ZSAtIHJlZyA9IDB4JXhcbiIsIHJlZyk7DQo+ID4gKwkJY2hhcmdlci0+c3VwcGx5 X29ubGluZSA9IE5VTEw7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyog U2V0dXAgT1RHIHJlcG9ydGluZyAmIGNvbmZpZ3VyYXRpb24gKi8NCj4gPiArCWNoYXJnZXItPnVz Yl9waHkgPSBkZXZtX3VzYl9nZXRfcGh5KGRldiwgVVNCX1BIWV9UWVBFX1VTQjIpOw0KPiA+ICsJ aWYgKCFJU19FUlJfT1JfTlVMTChjaGFyZ2VyLT51c2JfcGh5KSkgew0KPiA+ICsJCUlOSVRfV09S SygmY2hhcmdlci0+b3RnX3dvcmssIGRhOTE1MF9jaGFyZ2VyX290Z193b3JrKTsNCj4gPiArCQlj aGFyZ2VyLT5vdGdfbmIubm90aWZpZXJfY2FsbCA9IGRhOTE1MF9jaGFyZ2VyX290Z19uY2I7DQo+ ID4gKwkJdXNiX3JlZ2lzdGVyX25vdGlmaWVyKGNoYXJnZXItPnVzYl9waHksICZjaGFyZ2VyLT5v dGdfbmIpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFJlZ2lzdGVyIElSUXMgKi8NCj4gPiAr CXJldCA9IGRhOTE1MF9jaGFyZ2VyX3JlZ2lzdGVyX2lycShwZGV2LCBkYTkxNTBfY2hhcmdlcl9j aGdfaXJxLA0KPiA+ICsJCQkJCSAgIkNIR19TVEFUVVMiKTsNCj4gPiArCWlmIChyZXQgPCAwKQ0K PiA+ICsJCWdvdG8gaXJxX2ZhaWw7DQo+ID4gKw0KPiA+ICsJcmV0ID0gZGE5MTUwX2NoYXJnZXJf cmVnaXN0ZXJfaXJxKHBkZXYsIGRhOTE1MF9jaGFyZ2VyX3RqdW5jX2lycSwNCj4gPiArCQkJCQkg ICJDSEdfVEpVTkMiKTsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCWdvdG8gaXJxX2ZhaWw7 DQo+ID4gKw0KPiA+ICsJcmV0ID0gZGE5MTUwX2NoYXJnZXJfcmVnaXN0ZXJfaXJxKHBkZXYsIGRh OTE1MF9jaGFyZ2VyX3ZmYXVsdF9pcnEsDQo+ID4gKwkJCQkJICAiQ0hHX1ZGQVVMVCIpOw0KPiA+ ICsJaWYgKHJldCA8IDApDQo+ID4gKwkJZ290byBpcnFfZmFpbDsNCj4gPiArDQo+ID4gKwlyZXQg PSBkYTkxNTBfY2hhcmdlcl9yZWdpc3Rlcl9pcnEocGRldiwgZGE5MTUwX2NoYXJnZXJfdmJ1c19p cnEsDQo+ID4gKwkJCQkJICAiQ0hHX1ZCVVMiKTsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJ CWdvdG8gaXJxX2ZhaWw7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtpcnFf ZmFpbDoNCj4gPiArCWlmICghSVNfRVJSX09SX05VTEwoY2hhcmdlci0+dXNiX3BoeSkpDQo+ID4g KwkJdXNiX3VucmVnaXN0ZXJfbm90aWZpZXIoY2hhcmdlci0+dXNiX3BoeSwgJmNoYXJnZXItPm90 Z19uYik7DQo+ID4gK2JhdHRlcnlfZmFpbDoNCj4gPiArCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVy KHVzYik7DQo+ID4gKw0KPiA+ICt1c2JfZmFpbDoNCj4gPiArCWlpb19jaGFubmVsX3JlbGVhc2Uo Y2hhcmdlci0+dmJhdF9jaGFuKTsNCj4gPiArDQo+ID4gK3ZiYXRfY2hhbl9mYWlsOg0KPiA+ICsJ aWlvX2NoYW5uZWxfcmVsZWFzZShjaGFyZ2VyLT50anVuY19jaGFuKTsNCj4gPiArDQo+ID4gK3Rq dW5jX2NoYW5fZmFpbDoNCj4gPiArCWlpb19jaGFubmVsX3JlbGVhc2UoY2hhcmdlci0+dmJ1c19j aGFuKTsNCj4gPiArDQo+ID4gK3ZidXNfY2hhbl9mYWlsOg0KPiA+ICsJaWlvX2NoYW5uZWxfcmVs ZWFzZShjaGFyZ2VyLT5pYnVzX2NoYW4pOw0KPiA+ICsNCj4gPiAraWJ1c19jaGFuX2ZhaWw6DQo+ ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGRhOTE1MF9j aGFyZ2VyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJc3RydWN0IGRhOTE1MF9j aGFyZ2VyICpjaGFyZ2VyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKwlpbnQg aXJxOw0KPiA+ICsNCj4gPiArCS8qIE1ha2Ugc3VyZSBJUlFzIGFyZSByZWxlYXNlZCBiZWZvcmUg dW5yZWdpc3RlcmluZyBwb3dlciBzdXBwbGllcyAqLw0KPiA+ICsJaXJxID0gcGxhdGZvcm1fZ2V0 X2lycV9ieW5hbWUocGRldiwgIkNIR19WQlVTIik7DQo+ID4gKwlkZXZtX2ZyZWVfaXJxKGRldiwg aXJxLCBjaGFyZ2VyKTsNCj4gPiArDQo+ID4gKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFt ZShwZGV2LCAiQ0hHX1ZGQVVMVCIpOw0KPiA+ICsJZGV2bV9mcmVlX2lycShkZXYsIGlycSwgY2hh cmdlcik7DQo+ID4gKw0KPiA+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwg IkNIR19USlVOQyIpOw0KPiA+ICsJZGV2bV9mcmVlX2lycShkZXYsIGlycSwgY2hhcmdlcik7DQo+ ID4gKw0KPiA+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIkNIR19TVEFU VVMiKTsNCj4gPiArCWRldm1fZnJlZV9pcnEoZGV2LCBpcnEsIGNoYXJnZXIpOw0KPiBJZiB5b3Ug aGF2ZSB1c2VkIGEgZGV2bSBhbGxvY2F0aW9uLCB5b3UgZ2VuZXJhbGx5IGRvbid0IG5lZWQgdG8N Cj4gZnJlZSB0aGVtIGV4cGxpY2l0bHkuIFRoYXQgd2lsbCBoYXBwZW4gd2hlbiB0aGUgZGV2aWNl IGlzIGZyZWVkLg0KPiANCj4gSWYgeW91IGRvIG5lZWQgdG8gZnJlZSB0aGVtIGhlcmUgKHRvIG1h aW50YWluIG9yZGVyaW5nIGV0YykgdGhlbiB5b3UNCj4gZG9uJ3Qgd2FudCB0byBiZSB1c2luZyB0 aGUgZGV2bSBpbnRlcmZhY2VzIGluIHRoZSBmaXJzdCBwbGFjZS4NCg0KVGhlIG9yZGVyaW5nIG9u IHJlbGVhc2UgaXMgaW1wb3J0YW50IGFzIHBvd2VyX3N1cHBseV9jaGFuZ2VkKCkgaXMgY2FsbGVk IGJ5IElSUQ0KdGhyZWFkIGZ1bmN0aW9ucywgc28gdGhlIElSUXMgbmVlZCByZWxlYXNpbmcgZmly c3QgYmVmb3JlIHVucmVnaXN0ZXJpbmcgcG93ZXINCnN1cHBseSBjbGFzc2VzLiBUaGUgb3JpZ2lu YWwgaW50ZW50aW9uIHdpdGggdXNpbmcgZGV2bSBoZXJlIHdhcyB0byBrZWVwIHRoZQ0KY2xlYW51 cCBvbiBmYWlsdXJlIHNpbXBsZSBmb3IgdGhlIHByb2JlIGZ1bmN0aW9uIHdpdGggcmVnYXJkcyB0 byBJUlFzLCBidXQNCmxvb2tpbmcgYXQgaXQgYWdhaW4gdGhhdCdzIG5vdCBnb2luZyB0byB3b3Jr IHNvIEkgbmVlZCB0byBkcm9wIGJhY2sgdG8gdGhlDQpub24gZGV2bV8qIHZlcnNpb25zIGluc3Rl YWQuIFRoYW5rcyBmb3IgcG9pbnRpbmcgdG8gaXQuDQoNCj4gPiArDQo+ID4gKwlpZiAoIUlTX0VS Ul9PUl9OVUxMKGNoYXJnZXItPnVzYl9waHkpKQ0KPiA+ICsJCXVzYl91bnJlZ2lzdGVyX25vdGlm aWVyKGNoYXJnZXItPnVzYl9waHksICZjaGFyZ2VyLT5vdGdfbmIpOw0KPiA+ICsNCj4gPiArCXBv d2VyX3N1cHBseV91bnJlZ2lzdGVyKCZjaGFyZ2VyLT5iYXR0ZXJ5KTsNCj4gPiArCXBvd2VyX3N1 cHBseV91bnJlZ2lzdGVyKCZjaGFyZ2VyLT51c2IpOw0KPiA+ICsNCj4gPiArCS8qIFJlbGVhc2Ug QURDIGNoYW5uZWxzICovDQo+ID4gKwlpaW9fY2hhbm5lbF9yZWxlYXNlKGNoYXJnZXItPmlidXNf Y2hhbik7DQo+ID4gKwlpaW9fY2hhbm5lbF9yZWxlYXNlKGNoYXJnZXItPnZidXNfY2hhbik7DQo+ ID4gKwlpaW9fY2hhbm5lbF9yZWxlYXNlKGNoYXJnZXItPnRqdW5jX2NoYW4pOw0KPiA+ICsJaWlv X2NoYW5uZWxfcmVsZWFzZShjaGFyZ2VyLT52YmF0X2NoYW4pOw0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBk YTkxNTBfY2hhcmdlcl9kcml2ZXIgPSB7DQo+ID4gKwkuZHJpdmVyID0gew0KPiA+ICsJCS5uYW1l ID0gImRhOTE1MC1jaGFyZ2VyIiwNCj4gPiArCX0sDQo+ID4gKwkucHJvYmUgPSBkYTkxNTBfY2hh cmdlcl9wcm9iZSwNCj4gPiArCS5yZW1vdmUgPSBkYTkxNTBfY2hhcmdlcl9yZW1vdmUsDQo+ID4g K307DQo+ID4gKw0KPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGRhOTE1MF9jaGFyZ2VyX2Ry aXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkNoYXJnZXIgRHJpdmVyIGZv ciBEQTkxNTAiKTsNCj4gPiArTU9EVUxFX0FVVEhPUigiQWRhbSBUaG9tc29uDQo+IDxBZGFtLlRo b21zb24uT3BlbnNvdXJjZUBkaWFzZW1pLmNvbT4iKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOw0KPiA+IC0tDQo+ID4gMS45LjMNCj4gPg0K