RE: [PATCH v9 2/2] media: i2c: add driver for ITE IT6625/IT6626
<[email protected]> Mon, 3 Aug 2026 03:43:51 +0000
| Newsgroups | org.kernel.vger.linux-media,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
SGkgSGFucw0KDQpUaGFua3MgZm9yIHJldmlldy4NCg0KPkhpIEhlcm1lcywNCj4NCj5UaGFuayB5 b3UgZm9yIHBvc3RpbmcgdGhpcyBkcml2ZXIhDQo+DQo+U2VlIGJlbG93IGZvciBteSBjb2RlIHJl dmlldy4NCj4NCj5PbmUgaGlnaC1sZXZlbCBxdWVzdGlvbjogaG93IGlzIHRoaXMgZHJpdmVyIHRl c3RlZCwgc3BlY2lmaWNhbGx5IHdpdGggd2hhdCBDU0kvY2FwdHVyZQ0KPmRyaXZlcj8NCg0KVGhp cyBkcml2ZXIgaXMgdGVzdGVkIG9uIFF1YWxjb21tIDY0OTAgdmlzaW9uIGtpdCB3aXRoICBRdWFs Y29tbSBjYW1zcyBkcml2ZXIuDQpUaGUgUXVhbGNvbW0gY3VzdG9tIGtlcm5lbCB2aXJpb25zIGlz IDYuNiwgdGhpcyBkcml2ZXIgbmVlZCBtb2RpZnkgZm9yIHRlc3RpbmcuDQoNCj5DYW4geW91IHBy b3ZpZGUgdGhlICd2NGwyLWNvbXBsaWFuY2Ugb3V0cHV0IC1zJyB3aXRoIHRoYXQgZHJpdmVyPw0K DQpJIHdpbGwgdHJ5IHJ1biB0aGlzIHRlc3QsIEhvdyBkbyBJIHByb3ZpZGUgdG8gdGVzdCByZXN1 bHQ/DQppbiBoaXN0b3J5IG9mIGNvdmVyLWxldGVyIG9yIHRoaXMgZHJpdmVyPw0KPg0KPkkgc3Vz cGVjdCB0aGF0IHRoZSBJVDY2MjYgaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gSERNSSAyLjAsIGlz IHRoYXQgY29ycmVjdD8gSWYgc28sDQo+dGhlbiB0aGF0IHNob3VsZCBiZSBkb2N1bWVudGVkIHNv bWV3aGVyZSBpbiB0aGUgY29kZSAoaXQgbWlnaHQgYmUgdGhlcmUgYWxyZWFkeSwNCj5pbiB0aGF0 IGNhc2UgSSBtaXNzZWQgaXQpLg0KDQpJVDY2MjYgc3VwcG9ydHMgSERNSTIuMS4gYW5kIGlzIG5v dCBkaXNhYmxlIEhETUkyLjEgY2FwYWJpbGl0eS4NCklUNjYyNSBhbmQgSVQ2NjI2IGhhdmUgTUNV IGluc2lkZSBhbmQgcHJvdmlkZSBuZWNlc3NhcnkgY29udHJvbCB2aXMgSTJDIHNsYXZlIHBvcnQu DQoNClRoZSBtb3N0IGRpZmZlcmVuY2UgYmV0d2VlbiBIRE1JMi4wIGFuZCBIRE1JMi4xIGlzIG1h eCByZXNvbHV0aW9uIHN1cHBvcnQuDQpEb2VzIFY0bDIgbmVlZCB0byBrbm93IEhETUkgdmVyc2lv bj8NCg0KPk9uIDMwLzA3LzIwMjYgMDg6NTUsIEhlcm1lcyBXdSB2aWEgQjQgUmVsYXkgd3JvdGU6 DQo+PiBGcm9tOiBIZXJtZXMgV3UgPEhlcm1lcy53dUBpdGUuY29tLnR3Pg0KPj4gDQo+PiBBZGQg YSBWNEwyIHN1YmRldmljZSBkcml2ZXIgZm9yIHRoZSBJVEUgSVQ2NjI1L0lUNjYyNiBIRE1JLXRv LU1JUEkNCj4+IENTSS0yIGJyaWRnZSBjaGlwcy4gSVQ2NjI1IGFjY2VwdHMgYW4gSERNSSAyLjAg aW5wdXQgYW5kIElUNjYyNiBhbg0KPj4gSERNSSAyLjEgaW5wdXQsIGNvbnZlcnRpbmcgaXQgdG8g YSBELVBIWSAob3IgQy9ELVBIWSBvbiBJVDY2MjYpDQo+PiBNSVBJIENTSS0yIG91dHB1dC4gVGhl IGJyaWRnZSBpcyBjb25maWd1cmVkIG92ZXIgSTJDLCBleHBvc2VzIGFuDQo+PiBIRE1JIENFQyBh ZGFwdGVyLCBhbmQgc3VwcG9ydHMgRURJRCByZWFkL3dyaXRlLCBEViB0aW1pbmdzDQo+PiBkZXRl Y3Rpb24vY29uZmlndXJhdGlvbiwgYW5kIEhQRCBjb250cm9sIHZpYSB0aGUgc3RhbmRhcmQgVjRM Mg0KPj4gc3ViZGV2aWNlIHBhZCBhbmQgdmlkZW8gb3BzLg0KPj4gDQo+PiBTaWduZWQtb2ZmLWJ5 OiBIZXJtZXMgV3UgPEhlcm1lcy53dUBpdGUuY29tLnR3Pg0KPj4gLS0tDQo+PiBDaGFuZ2VzIGlu IHY5Og0KPj4gLSBDaGFuZ2UgaXQ2NjI1X2ludGVycnVwdF9oYW5kbGVyKCkgdG8gcmV0dXJuIGJv b2wgYW5kDQo+PiAgIGl0NjYyNV9pcnFfaGFuZGxlcigpIHRvIHRyYW5zbGF0ZSB0aGF0IGludG8g SVJRX0hBTkRMRUQvSVJRX05PTkU6DQo+PiAgIHRoZSBoYW5kbGVyIHJldHVybmVkIGVhcmx5IHdp dGhvdXQgY2xlYXJpbmcgUkVHX01DVV9JTlRFUlJVUFQNCj4+ICAgd2hlbmV2ZXIgdGhlIHJlYWQg d2FzIHNwdXJpb3VzICh2YWwgPT0gMCkgb3IgZmFpbGVkICh2YWwgPCAwKSwgeWV0DQo+PiAgIHRo ZSBJUlEgaGFuZGxlciB1bmNvbmRpdGlvbmFsbHkgcmV0dXJuZWQgSVJRX0hBTkRMRUQuIE9uIHRo YXQgcGF0aA0KPj4gICBubyBJVDY2MjUgaW50ZXJydXB0IHNvdXJjZSB3YXMgb2JzZXJ2ZWQgZm9y IHRoaXMgaW52b2NhdGlvbiwgc28NCj4+ICAgYWx3YXlzIHJlcG9ydGluZyBJUlFfSEFORExFRCBy ZWdhcmRsZXNzIGRlZmVhdHMgdGhlIGtlcm5lbCdzDQo+PiAgIHNwdXJpb3VzLUlSUSBzdG9ybSBw cm90ZWN0aW9uLCB3aGljaCByZWxpZXMgb24gSVJRX05PTkUgdG8gaWRlbnRpZnkNCj4+ICAgYW5k IGRpc2FibGUgbWlzYmVoYXZpbmcgbGluZXMuIE1hdGNoZXMgdGhlIHBhdHRlcm4gYWxyZWFkeSB1 c2VkIGJ5DQo+PiAgIHRjMzU4NzQzLmMgYW5kIGFkdjc2MDQuYy4gRm91bmQgYnkgdGhlIHNhc2hp a28uZGV2IGF1dG9tYXRlZCByZXZpZXcNCj4+ICAgb2YgdjguDQo+PiAtIFRha2UgaXQ2NjI1X2xv Y2sgaW4gaXQ2NjI1X2luaXRpYWxfc2V0dXAoKTogaXQgd3JvdGUNCj4+ICAgQl9DT05GSUdfVVBE QVRFIHRvIFJFR19IT1NUX0NUUkxfSU5UIGFuZCBwb2xsZWQgZm9yIGl0IHRvIGNsZWFyDQo+PiAg IHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jaywgYnV0IGl0IHJ1bnMgZnJvbSBwcm9iZSgpIGFmdGVy DQo+PiAgIGNlY19yZWdpc3Rlcl9hZGFwdGVyKCkgaGFzIGFscmVhZHkgZXhwb3NlZCAvZGV2L2Nl Y1ggdG8gdXNlcnNwYWNlLA0KPj4gICBhbmQgaXQ2NjI1X2NlY19hZGFwX3RyYW5zbWl0KCkgKHJl YWNoYWJsZSBpbW1lZGlhdGVseSB2aWEgYSBDRUMNCj4+ICAgaW9jdGwpIHNldHMgQl9DRUNfU0VO RF9EQVRBIGluIHRoZSBzYW1lIHJlZ2lzdGVyIHVuZGVyIHRoZSBsb2NrLg0KPj4gICBFdmVyeSBv dGhlciBhY2Nlc3NvciBvZiBSRUdfSE9TVF9DVFJMX0lOVCBhbHJlYWR5IHRvb2sgdGhlIGxvY2s7 DQo+PiAgIHRoaXMgd2FzIHRoZSBzb2xlIGV4Y2VwdGlvbi4gU2luZ2xlIGNhbGwgc2l0ZSwgbG9j ayBhbHJlYWR5DQo+PiAgIGluaXRpYWxpemVkIGJlZm9yZSBpdCwgc28gbm8gZGVhZGxvY2sgaXMg aW50cm9kdWNlZC4gRm91bmQgYnkgdGhlDQo+PiAgIHNhc2hpa28uZGV2IGF1dG9tYXRlZCByZXZp ZXcgb2YgdjguDQo+PiANCj4+IE9uZSBvdGhlciB2OCByZXZpZXcgZmluZGluZyB3YXMgY2hlY2tl ZCBhbmQgaXMgbm90IGJlaW5nIGFjdGVkIG9uOg0KPj4gLSBmcHNfZnJvbV9idF90aW1pbmdzKCkg Y29tcHV0aW5nDQo+PiAgIFY0TDJfRFZfQlRfRlJBTUVfSEVJR0hUKHQpICogVjRMMl9EVl9CVF9G UkFNRV9XSURUSCh0KSBhcyBhIDMyLWJpdA0KPj4gICBwcm9kdWN0LCB3aGljaCB0aGUgcmV2aWV3 IGNsYWltcyBjYW4gb3ZlcmZsb3cgdG8gMCBnaXZlbg0KPj4gICBWNEwyX0RWX0JUX0NBUF9DVVNU T00ncyByZWxheGVkIG1hdGNoaW5nLiBDaGVja2VkOiBpdDY2MjUtPnRpbWluZ3MsDQo+PiAgIHRo ZSBvbmx5IHZhbHVlIHRoaXMgZnVuY3Rpb24gaXMgZXZlciBjYWxsZWQgb24sIGlzIHBvcHVsYXRl ZCBvbmx5DQo+PiAgIGJ5IGl0NjYyNV91cGRhdGVfdGltaW5nc19pZl9jaGFuZ2VkKCksIHdoaWNo IHJlamVjdHMgYW55dGhpbmcNCj4+ICAgZmFpbGluZyB2NGwyX3ZhbGlkX2R2X3RpbWluZ3MoKSBh Z2FpbnN0IGl0NjYyNV90aW1pbmdzX2NhcCAod2lkdGgNCj4+ICAgNjQwLTM4NDAsIGhlaWdodCA0 ODAtMjE2MCksIG9yIGJ5IGEgc3RhdGljIGRlZmF1bHQuDQo+PiAgIHY0bDJfdmFsaWRfZHZfdGlt aW5ncygpIGFkZGl0aW9uYWxseSBib3VuZHMgZXZlcnkgcG9yY2ggZmllbGQNCj4+ICAgKGhmcm9u dHBvcmNoL2hzeW5jL2hiYWNrcG9yY2ggPD0gM3ggd2lkdGg7DQo+PiAgIHZmcm9udHBvcmNoL3Zz eW5jL3ZiYWNrcG9yY2gvaWxfKiA8PSAxMDI0MCkuIEdpdmVuIHRob3NlIGNhcHMgdGhlDQo+PiAg IG1heGltdW0gcG9zc2libGUgRlJBTUVfV0lEVEggKiBGUkFNRV9IRUlHSFQgaXMNCj4+ICAgMzg0 MDAgeCA2MzYwMCB+PSAyLjQ0eDEwXjksIHNhZmVseSB1bmRlciAyXjMyIH49IDQuMjl4MTBeOSAt LSB0aGUNCj4+ICAgY2xhaW1lZCBvdmVyZmxvdyBpbnB1dCBpcyBtYXRoZW1hdGljYWxseSB1bnJl YWNoYWJsZSB0aHJvdWdoIHRoaXMNCj4+ICAgZHJpdmVyJ3MgdmFsaWRhdGVkIHRpbWluZ3MgcGF0 aC4NCj4+IA0KPj4gQ2hhbmdlcyBpbiB2ODoNCj4+IC0gRHJvcCBvZl9tYXRjaF9wdHIoKSBhcm91 bmQgaXQ2NjI1X29mX21hdGNoIGluIHRoZSBpMmNfZHJpdmVyOiB0aGUNCj4+ICAgdGFibGUgaXMg dW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGluLCBzbyB3cmFwcGluZyBpdCBpcyB1bm5lY2Vzc2Fy eQ0KPj4gICBhbmQgcmlza3MgYW4gdW51c2VkLXZhcmlhYmxlIHdhcm5pbmcgb24gY29uZmlncyB3 aXRob3V0IENPTkZJR19PRi4NCj4+ICAgRm91bmQgYnkgS3J6eXN6dG9mIEtvemxvd3NraSdzIG9u LWxpc3QgcmV2aWV3IG9mIHY3Lg0KPj4gLSBTdG9wIGhhbHZpbmcgYnQtPnBpeGVsY2xvY2sgZm9y IGludGVybGFjZWQgc2lnbmFscyBpbg0KPj4gICBpdDY2MjVfZ2V0X2RldGVjdGVkX3RpbWluZ3Mo KS4gQ2hlY2tlZCBhZ2FpbnN0IHRoZSBJVDY2MjUgc3BlYzogZm9yDQo+PiAgIGFuIGludGVybGFj ZWQgc291cmNlIChlLmcuIDEwODBpKSB0aGUgY2hpcCdzIGJ1aWx0LWluIE1DVSBhbHJlYWR5DQo+ PiAgIHJlcG9ydHMgUkVHX1ZJRF9QQ0xLIGFzIHRoZSBjb3JyZWN0LCByZWFsIHBpeGVsIGNsb2Nr ICg3NC4yNSBNSHogZm9yDQo+PiAgIDEwODBpLCBub3QgYSBoYWxmLXJhdGUvZmllbGQgY2xvY2sp LCB3aGlsZSB0aGUgaGVpZ2h0IGl0IHJlcG9ydHMgaXMNCj4+ICAgdGhlIHBlci1maWVsZCBhY3Rp dmUgaGVpZ2h0ICg1NDApLCB3aGljaCB0aGUgZXhpc3RpbmcNCj4+ICAgImJ0LT5oZWlnaHQgKj0g MiIgY29ycmVjdGx5IHR1cm5zIGludG8gdGhlIHRydWUgZnVsbC1mcmFtZSBoZWlnaHQuDQo+PiAg IERpdmlkaW5nIHRoZSBhbHJlYWR5LWNvcnJlY3QgcGl4ZWwgY2xvY2sgYnkgMiBvbiB0b3Agb2Yg dGhhdCBtYW5nbGVkDQo+PiAgIGl0IHRvIDM3LjEyNSBNSHosIHVuZGVyc3RhdGluZyB0aGUgcmVw b3J0ZWQgZnJhbWUgcmF0ZSBieSBoYWxmLg0KPj4gICBGb3VuZCBieSB0aGUgc2FzaGlrby5kZXYg YXV0b21hdGVkIHJldmlldyBvZiB2Ny4gaWxfdmZyb250cG9yY2gvDQo+PiAgIGlsX3ZiYWNrcG9y Y2ggYXJlIHN0aWxsIGxlZnQgdW5zZXQgZm9yIGludGVybGFjZWQgc2lnbmFscyAtLSB0aGUNCj4+ ICAgSVQ2NjI1IE1DVSBoYXMgbm8gc2VwYXJhdGUgc2Vjb25kLWZpZWxkIHBvcmNoIHJlZ2lzdGVy cywgc28gdGhlcmUncw0KPj4gICBub3RoaW5nIHRvIHJlYWQgZm9yIHRoZW07IG5vdCBmaXhlZCwg c2luY2UgdGhlcmUncyBub3RoaW5nIHRvIGZpeCBpbg0KPj4gICBzb2Z0d2FyZS4NCj4+IA0KPj4g T25lIG90aGVyIHY3IHJldmlldyBmaW5kaW5nIHdhcyBjaGVja2VkIGFuZCBpcyBub3QgYmVpbmcg YWN0ZWQgb246DQo+PiAtIGl0NjYyNV9nZXRfZm10KCkgdW5jb25kaXRpb25hbGx5IHdyaXRlcyB0 aGUgbGl2ZSBkZXRlY3RlZCB0aW1pbmdzDQo+PiAgIGludG8gZm9ybWF0LT5mb3JtYXQud2lkdGgv aGVpZ2h0L2ZpZWxkIHJlZ2FyZGxlc3Mgb2YgVFJZIHZzIEFDVElWRSwNCj4+ICAgYW5kIGl0NjYy NV9zZXRfZm10KCkncyBUUlkgYnJhbmNoIG9ubHkgcGVyc2lzdHMgY29kZS9jb2xvcnNwYWNlIGlu dG8NCj4+ICAgc2Rfc3RhdGUuIFRoaXMgZXhhY3RseSBtYXRjaGVzIHRjMzU4NzQzX2dldF9mbXQo KS90YzM1ODc0M19zZXRfZm10KCkNCj4+ICAgaW4gdGMzNTg3NDMuYywgd2hpY2ggbmV2ZXIgY29u c3VsdCBzZF9zdGF0ZSBmb3Igd2lkdGgvaGVpZ2h0L2ZpZWxkDQo+PiAgIGluIGVpdGhlciBUUlkg b3IgQUNUSVZFIGVpdGhlci4gRm9yIHRoaXMgY2xhc3Mgb2YgSERNSS1yZWNlaXZlcg0KPj4gICBi cmlkZ2UsIGZyYW1lIGRpbWVuc2lvbnMgYXJlIGRpY3RhdGVkIGJ5IHRoZSBkZXRlY3RlZCBleHRl cm5hbA0KPj4gICBzaWduYWwsIG5vdCBpbmRlcGVuZGVudGx5IG5lZ290aWFibGUgdmlhIFRSWSAt LSBvbmx5IHRoZSBwaXhlbA0KPj4gICBmb3JtYXQgKGNvZGUvY29sb3JzcGFjZSkgaXMgbWVhbmlu Z2Z1bGx5IFRSWS1pc29sYXRhYmxlLCBhbmQgdGhhdCdzDQo+PiAgIGV4YWN0bHkgd2hhdCBib3Ro IGRyaXZlcnMgaXNvbGF0ZS4gRm91bmQgYnkgdGhlIHNhc2hpa28uZGV2DQo+PiAgIGF1dG9tYXRl ZCByZXZpZXcgb2YgdjcuDQo+PiANCj4+IEFsc28sIHBlciBLcnp5c3p0b2YgS296bG93c2tpJ3Mg b24tbGlzdCByZXZpZXc6IHRoZSBpdDY2MjUvaXQ2NjI2DQo+PiBvZl9kZXZpY2VfaWQgZW50cmll cyBkbyBlbmNvZGUgYSByZWFsIGJlaGF2aW9yYWwgZGlmZmVyZW5jZSAtLQ0KPj4gaXQ2NjI1X3Bh cnNlX2VuZHBvaW50KCkgcmVqZWN0cyBDLVBIWSBlbmRwb2ludHMgdW5sZXNzDQo+PiBjaGlwX3R5 cGUgPT0gSVQ2NjI2X0NISVAsIHNvICJpdGUsaXQ2NjI1IiBib2FyZHMgYXJlIGNvcnJlY3RseQ0K Pj4gcmVzdHJpY3RlZCB0byBELVBIWS4gUmVwbHlpbmcgb24tbGlzdCB0byBwb2ludCB0aGlzIG91 dCwgbm90IGEgY29kZQ0KPj4gY2hhbmdlLg0KPj4gDQo+PiBDaGFuZ2VzIGluIHY3Og0KPj4gLSBG aXggdGhyZWUgY29ycmVjdG5lc3MgaXNzdWVzIGZvdW5kIGJ5IHRoZSBhdXRvbWF0ZWQgcmV2aWV3 IG9mIHY2Og0KPj4gICBpdDY2MjVfcGFyc2VfZW5kcG9pbnQoKSBsZWZ0IHRoZSBmd25vZGUgZW5k cG9pbnQncyBidXNfdHlwZSBhcw0KPj4gICBWNEwyX01CVVNfVU5LTk9XTiBzbyB2NGwyX2Z3bm9k ZV9lbmRwb2ludF9hbGxvY19wYXJzZSgpIGNvdWxkDQo+PiAgIGF1dG9kZXRlY3QgQy1QSFkgdnMg RC1QSFksIGJ1dCBpZiB0aGUgZW5kcG9pbnQgbm9kZSBoYXMgbm9uZSBvZiB0aGUNCj4+ICAgQ1NJ LTItc3BlY2lmaWMgcHJvcGVydGllcywgdGhlIHBhcnNlciBzaWxlbnRseSBmYWxscyBiYWNrIHRv DQo+PiAgIFY0TDJfTUJVU19QQVJBTExFTC9CVDY1NiBpbnN0ZWFkIC0tIHRoZSBkcml2ZXIgdGhl biByZWFkDQo+PiAgIGVuZHBvaW50LmJ1cy5taXBpX2NzaTIubnVtX2RhdGFfbGFuZXMgdW5jb25k aXRpb25hbGx5LCB0cmVhdGluZw0KPj4gICBtZW1vcnkgcG9wdWxhdGVkIGFzIGEgZGlmZmVyZW50 IHVuaW9uIG1lbWJlciBhcyBhIGxhbmUgY291bnQuDQo+PiAgIGl0NjYyNV9zZXRfZm10KCkncyBW NEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFIGJyYW5jaCBhcHBsaWVkIHRoZSBuZXcNCj4+ICAgZm9y bWF0IHRvIGhhcmR3YXJlIGJ1dCBuZXZlciB1cGRhdGVkIGZvcm1hdC0+Zm9ybWF0LmNvbG9yc3Bh Y2UgbGlrZQ0KPj4gICB0aGUgVFJZIGJyYW5jaCBkb2VzLCBzbyBWSURJT0NfU1VCREVWX1NfRk1U IGNhbGxlcnMgZ290IGJhY2sgdGhlDQo+PiAgIHN0YWxlIGNvbG9yc3BhY2UgZnJvbSBiZWZvcmUg dGhlIGNhbGwuIGl0NjYyNV9zX2VkaWQoKSBuZXZlcg0KPj4gICBjaGVja2VkIGVkaWQtPnN0YXJ0 X2Jsb2NrLCBjb250cmFyeSB0byB0aGUgVklESU9DX1NfRURJRCBzcGVjDQo+PiAgIChEb2N1bWVu dGF0aW9uL3VzZXJzcGFjZS1hcGkvbWVkaWEvdjRsL3ZpZGlvYy1nLWVkaWQucnN0KSwgd2hpY2gN Cj4+ICAgcmVxdWlyZXMgLUVJTlZBTCBmb3IgYW55IHN0YXJ0X2Jsb2NrIG90aGVyIHRoYW4gMCBz aW5jZSBzZXR0aW5nIGFuDQo+PiAgIEVESUQgaXMgYWxsLW9yLW5vdGhpbmc7IGFkZGVkIHRoZSBz YW1lIGNoZWNrIGFscmVhZHkgcHJlc2VudCBpbg0KPj4gICBhZHY3NjA0X3NfZWRpZCgpLCB0YzM1 ODc0M19zX2VkaWQoKSBhbmQgYWR2Nzg0Ml9zX2VkaWQoKSBmb3IgdGhlDQo+PiAgIHNhbWUgcmVx dWlyZW1lbnQuDQo+PiANCj4+IENoYW5nZXMgaW4gdjY6DQo+PiAtIEZpeCB0d28gY29ycmVjdG5l c3MgaXNzdWVzIGZvdW5kIGJ5IHRoZSBhdXRvbWF0ZWQgcmV2aWV3IG9mIHY1Og0KPj4gICBpdDY2 MjVfc19lZGlkKCkgY2FsbGVkIHY0bDJfcGh5c19hZGRyX3ZhbGlkYXRlKCkgYnV0IGRpc2NhcmRl ZCBpdHMNCj4+ICAgcmV0dXJuIHZhbHVlLCBzbyBhIENFQyBwaHlzaWNhbCBhZGRyZXNzIHRoYXQg ZmFpbGVkIHRvcG9sb2d5DQo+PiAgIHZhbGlkYXRpb24gKGUuZy4gYSBnYXAgbGlrZSAxLjAuMS4w KSBzdGlsbCByZWFjaGVkDQo+PiAgIGNlY19zX3BoeXNfYWRkcigpIGFuZCBnb3QgYnJvYWRjYXN0 IG9uIHRoZSBDRUMgYnVzIGluc3RlYWQgb2YgYmVpbmcNCj4+ICAgcmVqZWN0ZWQ7IGFuZCBpdDY2 MjVfcGFyc2VfZW5kcG9pbnQoKSBwcmUtc2V0IHRoZSBmd25vZGUgZW5kcG9pbnQncw0KPj4gICBi dXNfdHlwZSB0byBELVBIWSBiZWZvcmUgcGFyc2luZywgd2hpY2ggKHBlcg0KPj4gICBpbmNsdWRl L21lZGlhL3Y0bDItZndub2RlLmgpIG1ha2VzIHRoZSBwYXJzZXIgdHJlYXQgaXQgYXMgYSBoYXJk DQo+PiAgIHJlcXVpcmVtZW50IGFuZCByZWplY3QgYW55IGVuZHBvaW50IHdob3NlIERUIGJ1cy10 eXBlIGRpc2FncmVlcyAtLQ0KPj4gICBldmVyeSBJVDY2MjYgQy1QSFkgZGV2aWNlIHRyZWUgZmFp bGVkIHRvIHByb2JlIGFzIGEgcmVzdWx0Lg0KPj4gDQo+PiBPbmUgb3RoZXIgdjUgcmV2aWV3IGZp bmRpbmcgd2FzIGNoZWNrZWQgYW5kIGlzIG5vdCBiZWluZyBhY3RlZCBvbjoNCj4+IC0gQSBjb25j dXJyZW50IFZJRElPQ19TVUJERVZfU19FRElEIGlvY3RsIHJhY2luZyBpdDY2MjVfcmVtb3ZlKCkn cw0KPj4gICBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoKSBjb3VsZCBpbiBwcmluY2lwbGUgc2No ZWR1bGUNCj4+ICAgaHBkX2RlbGF5ZWRfd29yayBhZnRlciB0ZWFyZG93biBmcmVlcyB0aGUgZHJp dmVyIHN0YXRlLiBSZWFsIGluIHRoZQ0KPj4gICBhYnN0cmFjdCAtLSBubyBsb2NrIHNlcmlhbGl6 ZXMgYW4gaW4tZmxpZ2h0IGlvY3RsIGFnYWluc3QNCj4+ICAgdmlkZW9fdW5yZWdpc3Rlcl9kZXZp Y2UoKSAtLSBidXQgdGhlIGlkZW50aWNhbCB1bmxvY2tlZCBwYXR0ZXJuDQo+PiAgIChkZWxheWVk IHdvcmsgc2NoZWR1bGVkIGZyb20gdGhlIHNfZWRpZCBwYXRoLCByZW1vdmUoKSBkb2luZyBvbmx5 DQo+PiAgIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygpKSBleGlzdHMgdW5maXhlZCBpbiB0YzM1 ODc0My5jIGFuZA0KPj4gICBhZHY3NjA0LmMsIGFuZCB0aGlzIGlzIHRoZSBzYW1lIHJlc2lkdWFs IHJpc2sgYWxyZWFkeSBkaXNtaXNzZWQgaW4NCj4+ICAgdGhlIHYyL3YzL3Y0IHJvdW5kcyBvZiB0 aGlzIHNlcmllcyBmb3IgdGhlIHNhbWUgcmVhc29uOiBubyBwZWVyDQo+PiAgIGRyaXZlciBhZGRz IGV4dHJhIHN5bmNocm9uaXphdGlvbiBmb3IgaXQgZWl0aGVyLg0KPj4gDQo+PiBDaGFuZ2VzIGlu IHY1Og0KPj4gLSBGaXggYSBrZXJuZWwtc3RhY2stbWVtb3J5IGxlYWsgaW4gaXQ2NjI1X2VkaWRf cmFtX3Nob3coKSBhbmQNCj4+ICAgaXQ2NjI1X21pcGlfcmVnX3Nob3coKTogYm90aCBwcmludGVk IGFuIHVuaW5pdGlhbGl6ZWQgb24tc3RhY2sNCj4+ICAgcmVnaXN0ZXIgYnVmZmVyIHRvIHVzZXJz cGFjZSB2aWEgZGVidWdmcyB3aXRob3V0IGNoZWNraW5nIHdoZXRoZXINCj4+ICAgdGhlIHByZWNl ZGluZyBJMkMgYnVsayByZWFkIGFjdHVhbGx5IHN1Y2NlZWRlZC4NCj4+IC0gRml4IHR3byByZWxh dGVkIGZvcm1hdC1uZWdvdGlhdGlvbiBidWdzOiBpdDY2MjVfc2V0X2ZtdCgpJ3MNCj4+ICAgVjRM Ml9TVUJERVZfRk9STUFUX1RSWSBicmFuY2ggbmV2ZXIgdXBkYXRlZCBmbXQtPmNvbG9yc3BhY2Ug dG8NCj4+ICAgbWF0Y2ggdGhlIG5ldyBmbXQtPmNvZGUsIGFuZCBpdDY2MjVfZ2V0X2ZtdCgpJ3Mg VFJZIGJyYW5jaCBjb21wdXRlZA0KPj4gICB0aGUgcmV0dXJuZWQgY29sb3JzcGFjZSBmcm9tIHRo ZSBhY3RpdmUgaGFyZHdhcmUgc3RhdGUgaW5zdGVhZCBvZg0KPj4gICB0aGUgVFJZIHN0YXRlJ3Mg b3duIGZvcm1hdCwgbGVha2luZyBhY3RpdmUgc3RhdGUgaW50byB3aGF0IHNob3VsZA0KPj4gICBi ZSBhbiBpc29sYXRlZCBUUlkgYnVmZmVyIC0tIHN0b3JlIGFuZCByZWFkIGNvZGUgYW5kIGNvbG9y c3BhY2UNCj4+ICAgdG9nZXRoZXIgaW4gc2Rfc3RhdGUgaW5zdGVhZC4gU2VwYXJhdGVseSwgaXQ2 NjI1X3NldF9mbXQoKSdzDQo+PiAgIGFjdGl2ZS1mb3JtYXQgcGF0aCByZWxlYXNlZCBpdDY2MjVf bG9jayBiZWZvcmUgcHJvZ3JhbW1pbmcgdGhlDQo+PiAgIGhhcmR3YXJlLCBsZXR0aW5nIHR3byBj b25jdXJyZW50IFNfRk1UIGNhbGxzIGludGVybGVhdmUgYW5kIGxlYXZlDQo+PiAgIHRoZSBoYXJk d2FyZSBwcm9ncmFtbWVkIGZvciB0aGUgd3JvbmcgdGhyZWFkJ3MgZm9ybWF0OyBhZGQgX2xvY2tl ZA0KPj4gICB2YXJpYW50cyBvZiBpdDY2MjVfZW5hYmxlX3N0cmVhbSgpL2l0NjYyNV9zZXRfbWlw aV9jb25maWcoKSBhbmQgY2FsbA0KPj4gICB0aGVtIGZyb20gaW5zaWRlIHNldF9mbXQoKSdzIGV4 aXN0aW5nIGxvY2sgc2NvcGUgc28gdGhlIHdob2xlDQo+PiAgIHVwZGF0ZSBpcyBub3cgYXRvbWlj Lg0KPj4gLSBGaXggaXQ2NjI1X3NfZWRpZCgpOiBwZXIgdGhlIFZJRElPQ19TX0VESUQgc3BlYywg YmxvY2tzID09IDAgbXVzdA0KPj4gICBsZWF2ZSB0aGUgRURJRCBkaXNhYmxlZCAoIm5vIGxvbmdl ciBhdmFpbGFibGUiKSwgYnV0IHRoZSBkcml2ZXINCj4+ICAgZGlzYWJsZWQgSFBEIGFuZCB0aGVu IGZlbGwgdGhyb3VnaCB0byB0aGUgbm9ybWFsIGNvbXBsZXRpb24gcGF0aCwNCj4+ICAgd2hpY2gg dW5jb25kaXRpb25hbGx5IHJlLWVuYWJsZWQgaXQgLS0gcmV0dXJuIGltbWVkaWF0ZWx5IGluc3Rl YWQuDQo+PiAgIEFsc28gc3RvcCBhIGZhaWxlZCBpdDY2MjVfd3JpdGVfZWRpZCgpIGZyb20gc2tp cHBpbmcgdGhlIEhQRA0KPj4gICByZS1lbmFibGUgZW50aXJlbHksIHdoaWNoIGxlZnQgSFBEIGRp c2FibGVkIHBlcm1hbmVudGx5IGFmdGVyIGFueQ0KPj4gICBzaW5nbGUgZmFpbGVkIFNfRURJRCBj YWxsLg0KPj4gLSBUYWtlIGl0NjYyNV9sb2NrIGFyb3VuZCBpdDY2MjVfbWlwaV9yZWdfd3JpdGUo KSdzIEkyQyB3cml0ZSwNCj4+ICAgbWF0Y2hpbmcgZXZlcnkgb3RoZXIgcmVnaXN0ZXIgYWNjZXNz IGluIHRoZSBkcml2ZXIuDQo+PiAtIERlcml2ZSBJVDY2MjVfQ0lEX0hETUlfSU5GTydzIHN0cmlu ZyBmcm9tIHJlYWwgc3RhdGUNCj4+ICAgKGl0NjYyNS0+Y3NpX2Zvcm1hdCBhbmQgZnBzX2Zyb21f YnRfdGltaW5ncygpKSBpbnN0ZWFkIG9mIHJldHVybmluZw0KPj4gICBhIGhhcmRjb2RlZCAiUkdC NDQ0IDEwYml0IEAgNjBIeiIgcmVnYXJkbGVzcyBvZiBhY3R1YWwgc2lnbmFsLg0KPj4gLSBXaXJl IHVwIHRoZSBwcmV2aW91c2x5LXVudXNlZCByZXNldC1ncGlvcyBsaW5lIGluIHByb2JlKCk6IGFj cXVpcmUNCj4+ICAgaXQgdmlhIGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKCkgYW5kIHRvZ2dsZSBp dCAoYXNzZXJ0IGJyaWVmbHksIHRoZW4NCj4+ICAgZGVhc3NlcnQgYW5kIGxldCBpdCBzZXR0bGUp IGJlZm9yZSB0aGUgZmlyc3QgSTJDIGFjY2Vzcy4NCj4+IA0KPj4gQWxsIGZvdW5kIGJ5IHRoZSBz YXNoaWtvLmRldiBhdXRvbWF0ZWQgcmV2aWV3IG9mIHY0LiBUaHJlZSBvdGhlciB2NA0KPj4gcmV2 aWV3IGZpbmRpbmdzIHdlcmUgY2hlY2tlZCBhbmQgYXJlIG5vdCBiZWluZyBhY3RlZCBvbjoNCj4+ IC0gaXQ2NjI1X21pcGlfcmVnX3Nob3coKSdzIHJhdyByZWdpc3RlciBkdW1wIGNvdWxkIGRlc3Ry dWN0aXZlbHkNCj4+ICAgY29uc3VtZSBhIHBlbmRpbmcgQ0VDIFJYIG1lc3NhZ2UgdmlhIFJFR19D RUNfUlhfREFUQSAoMHgyMCkgLS0NCj4+ICAgY2hlY2tlZCB3aXRoIHRoZSBoYXJkd2FyZSBhdXRo b3I6IHJlYWRpbmcgUkVHX0NFQ19SWF9EQVRBIGlzIG5vdA0KPj4gICBkZXN0cnVjdGl2ZSwgb25s eSB0aGUgZXhwbGljaXQgd3JpdGUtMCB0byBSRUdfQ0VDX1JYX0RBVEFfTEVODQo+PiAgIGNsZWFy cyBzdGF0ZS4gVGhlIHY0IGNoYW5nZWxvZydzICJsaWtlbHkgY2xlYXItb24tcmVhZCIgYXNzdW1w dGlvbg0KPj4gICBmb3IgdGhpcyBzYW1lIHJlZ2lzdGVyIHdhcyB3cm9uZy4NCj4+IC0gZGV2bV9r emFsbG9jJ2Qgc3RhdGUgKyBzdWJkZXYgZGV2bm9kZSBVQUYtaW4tdGhlLWFic3RyYWN0IG9uIHVu YmluZA0KPj4gICAtLSBzYW1lIHJlYXNvbmluZyBhcyB0aGUgdjIvdjMgcm91bmRzOiBtYXRjaGVz IHRjMzU4NzQzLmMvYWR2NzYwNC5jLw0KPj4gICBhZHY3ODQyLmMgZXhhY3RseSwgYW4gYWNjZXB0 ZWQgVjRMMi1zdWJzeXN0ZW0td2lkZSBwYXR0ZXJuLCBub3QgYQ0KPj4gICBkZWZlY3QgdW5pcXVl IHRvIHRoaXMgZHJpdmVyLg0KPj4gLSBDb25jdXJyZW50IFZJRElPQ19TVUJERVZfU19FRElEIHJh Y2luZyBpdDY2MjVfcmVtb3ZlKCkncw0KPj4gICBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoKS9t dXRleF9kZXN0cm95KCkgLS0gdGhlIHNhbWUgcmVzaWR1YWwgcmlzaw0KPj4gICBkaXNtaXNzZWQg aW4gdGhlIHYzIHJvdW5kOiByZWFsIGluIHRoZSBhYnN0cmFjdCwgYnV0IG5vIHBlZXIgZHJpdmVy DQo+PiAgIGFkZHMgZXh0cmEgc3luY2hyb25pemF0aW9uIGZvciBpdCBlaXRoZXIsIGFuZCB0aGUg djIgcm91bmQncyBmaXgNCj4+ICAgKHVucmVnaXN0ZXIgdGhlIHN1YmRldiBmaXJzdCBpbiByZW1v dmUoKSkgYWxyZWFkeSBuYXJyb3dlZCB0aGlzIHRvDQo+PiAgIHRoZSBzYW1lIHJlc2lkdWFsIHJp c2sgbGV2ZWwgZXZlcnkgcGVlciBkcml2ZXIgY2Fycmllcy4NCj4+IA0KPj4gQ2hhbmdlcyBpbiB2 NDoNCj4+IC0gQWx3YXlzIGFja25vd2xlZGdlIHRoZSBDRUMgUlggbGVuZ3RoIHJlZ2lzdGVyIG9u Y2UgdGhlIFJYIGludGVycnVwdA0KPj4gICBicmFuY2ggaXMgZW50ZXJlZCwgZXZlbiB3aGVuIHRo ZSByZXBvcnRlZCBsZW5ndGggaXMgaW52YWxpZCAtLQ0KPj4gICBwcmV2aW91c2x5IHRoZSBhY2sg d3JpdGUgb25seSBoYXBwZW5lZCBvbiB2YWxpZCBsZW5ndGhzLCBzbyBhbg0KPj4gICBpbnZhbGlk IGxlbmd0aCBsZWZ0IHRoZSBpbnRlcnJ1cHQgYXNzZXJ0ZWQsIHdoaWNoIGNvdWxkIHN0b3JtIHRo ZQ0KPj4gICBJUlEgbGluZS4NCj4+IC0gRmFsbCBiYWNrIHRvIGEgZGVmYXVsdCBmb3JtYXQgaW5z dGVhZCBvZiByZXR1cm5pbmcgLUVJTlZBTCBmcm9tDQo+PiAgIGl0NjYyNV9zZXRfZm10KCkgd2hl biB0aGUgcmVxdWVzdGVkIG1idXMgY29kZSBpc24ndCByZWNvZ25pemVkLA0KPj4gICBtYXRjaGlu ZyB0aGUgVjRMMiBzdWJkZXYgc2V0X2ZtdCBjb252ZW50aW9uIChjZi4gYWR2NzYwNC5jKS4gVGFr ZQ0KPj4gICBpdDY2MjVfbG9jayBhcm91bmQgaXQ2NjI1X2dldF9mbXQoKSdzIEFDVElWRS1wYXRo IHJlYWRzIG9mDQo+PiAgIGNzaV9mb3JtYXQvbWJ1c19mbXRfY29kZSwgd2hpY2ggY291bGQgb3Ro ZXJ3aXNlIG9ic2VydmUgYSB0b3JuDQo+PiAgIHVwZGF0ZSBmcm9tIGEgY29uY3VycmVudCBzZXRf Zm10KCkuDQo+PiAtIEZpeCBFRElEIGlvY3RsIHNwZWMgY29uZm9ybWFuY2U6IGl0NjYyNV9nX2Vk aWQoKSBub3cgY2xhbXBzIHRoZQ0KPj4gICByZXF1ZXN0ZWQgYmxvY2sgY291bnQgYW5kIHJldHVy bnMgc3VjY2VzcyBpbnN0ZWFkIG9mIHByb3BhZ2F0aW5nIGFuDQo+PiAgIGVycm9yIHdoZW4gdGhl IHJlcXVlc3QgZXhjZWVkcyBjYXBhY2l0eTsgaXQ2NjI1X3NfZWRpZCgpIG5vdyByZXR1cm5zDQo+ PiAgIC1FMkJJRyAobm90IC1FSU5WQUwpIHdpdGggYmxvY2tzIHNldCB0byB0aGUgbWF4aW11bSwg d2l0aG91dA0KPj4gICBhdHRlbXB0aW5nIHRoZSB3cml0ZSwgd2hlbiB0aGUgcmVxdWVzdCBleGNl ZWRzIGNhcGFjaXR5OyBhbmQNCj4+ICAgaXQ2NjI1X3JlYWRfZWRpZCgpL2l0NjYyNV93cml0ZV9l ZGlkKCkncyBsb3ctbGV2ZWwgYm91bmRzIGNoZWNrIG5vdw0KPj4gICB0ZXN0cyBzdGFydF9ibG9j ayBhbmQgbnVtX2Jsb2NrcyBpbmRpdmlkdWFsbHkgYmVmb3JlIHN1bW1pbmcgdGhlbSwNCj4+ICAg c2luY2UgdGhlIHN1bSBjb3VsZCBvdGhlcndpc2Ugb3ZlcmZsb3cgZ2l2ZW4gdGhlIHVuc2lnbmVk IF9fdTMyDQo+PiAgIGZpZWxkcyBvZiBzdHJ1Y3QgdjRsMl9lZGlkLg0KPj4gLSBIYXJkZW4gdGhl IG1pcGlfcmVnIGRlYnVnZnMgaGFuZGxlcnM6IGl0NjYyNV9taXBpX3JlZ193cml0ZSgpIG5vdw0K Pj4gICBhbHdheXMgcGFyc2VzIGZyb20gYSBsb2NhbCBvZmZzZXQgdGhhdCBzdGFydHMgYXQgMCBp bnN0ZWFkIG9mIHRoZQ0KPj4gICByZWFsIGZpbGUgb2Zmc2V0LCBzaW5jZSB0aGlzIGlzIGEgc3Rh dGVsZXNzIG9uZS13cml0ZS1vbmUtY29tbWFuZA0KPj4gICBpbnRlcmZhY2UsIG5vdCBhIHNlZWth YmxlIHN0cmVhbTsgaXQ2NjI1X21pcGlfcmVnX3Nob3coKSBub3cgdGFrZXMNCj4+ICAgaXQ2NjI1 X2xvY2sgYXJvdW5kIGl0cyByYXcgcmVnaXN0ZXItYmFuayByZWFkLCBtYXRjaGluZyBldmVyeSBv dGhlcg0KPj4gICBiYW5rZWQtcmVnaXN0ZXIgYWNjZXNzIGluIHRoZSBkcml2ZXIgKHRoZSBkdW1w ZWQgcmFuZ2UgYWxzbyBpbmNsdWRlcw0KPj4gICBSRUdfQ0VDX1JYX0RBVEEsIHdoaWNoIHRoZSBD RUMgaGFuZGxlciB0cmVhdHMgYXMgY2xlYXItb24tcmVhZCwgc28gYW4NCj4+ICAgdW5sb2NrZWQg cmVhZCBjb3VsZCBzaWxlbnRseSBzdGVhbCBhIHBlbmRpbmcgQ0VDIFJYIG1lc3NhZ2UpLg0KPj4g LSBNYXJrIHRoZSBIRE1JIGluZm8gY29udHJvbCAoSVQ2NjI1X0NJRF9IRE1JX0lORk8pIHZvbGF0 aWxlOg0KPj4gICBpdDY2MjVfZ192b2xhdGlsZV9jdHJsKCkgYWxyZWFkeSBoYWQgYSBsaXZlIGNh c2UgZm9yIGl0LCBidXQgdGhlDQo+PiAgIGNvbnRyb2wncyB2NGwyX2N0cmxfY29uZmlnIHdhcyBt aXNzaW5nIFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxFLCBzbw0KPj4gICB0aGF0IGNhc2Ugd2FzIG5l dmVyIGFjdHVhbGx5IHJlYWNoZWQgYW5kIHRoZSBjb250cm9sJ3MgdmFsdWUgd2FzDQo+PiAgIG5l dmVyIHJlZnJlc2hlZC4NCj4+IA0KPj4gQWxsIGZvdW5kIGJ5IHRoZSBzYXNoaWtvLmRldiBhdXRv bWF0ZWQgcmV2aWV3IG9mIHYzLg0KPj4gDQo+PiBTZXBhcmF0ZWx5LCBub3QgYSByZXZpZXcgZmlu ZGluZzogcmVtb3ZlIGEgcmVkdW5kYW50IEZXLXN0YXJ0IHJlZ2lzdGVyDQo+PiB0cmlnZ2VyIGZy b20gaXQ2NjI1X2luaXRpYWxfc2V0dXAoKSAtLSB0aGUgY2hpcCdzIGZpcm13YXJlIHN0YXJ0cw0K Pj4gYXV0b21hdGljYWxseSBvbiBwb3dlci1vbiwgc28gdGhlIGV4cGxpY2l0IHNvZnR3YXJlIHRy aWdnZXIgd2FzIGRlYWQNCj4+IHdlaWdodC4NCj4+IA0KPj4gQ2hhbmdlcyBpbiB2MzoNCj4+IC0g RmluaXNoIHRoZSBiYW5rZWQtcmVnaXN0ZXIgbG9ja2luZyBmcm9tIHYyOiBpdDY2MjVfaXJxX2lu Zm9mcmFtZV9sYXRjaCgpDQo+PiAgIGFuZCBnZXRfYXVkaW9fc2FtcGxpbmdfcmF0ZSgpIGFsc28g cmVhZCBiYW5rZWQgcmVnaXN0ZXJzIHdpdGhvdXQNCj4+ICAgaXQ2NjI1X2xvY2s7IHRha2UgdGhl IGxvY2sgaW5zaWRlIHRoZSBDRUMgUlggYnJhbmNoIGFjcm9zcyB0aGUNCj4+ICAgbGVuZ3RoIHJl YWQsIGRhdGEgcmVhZCBhbmQgbGVuZ3RoLWNsZWFyIHRvZ2V0aGVyIChjbG9zaW5nIGEgVE9DVE9V DQo+PiAgIHdoZXJlIHRoZSBsZW5ndGggY291bGQgZ28gc3RhbGUgdW5kZXIgbG9jayBjb250ZW50 aW9uKSwgYW5kIHN0b3AgdGhlDQo+PiAgIFJYIGJyYW5jaCBmcm9tIHVzaW5nIGFuIGVhcmx5IHJl dHVybiB0aGF0IHNraXBwZWQgYSBzaW11bHRhbmVvdXMgQ0VDDQo+PiAgIFRYIGludGVycnVwdC4N Cj4+IC0gRml4IGl0NjYyNV9zX2VkaWQoKSBpbmNvcnJlY3RseSB0cmVhdGluZyBhIHN1Y2Nlc3Nm dWwgRURJRCB3cml0ZSBhcw0KPj4gICBhIGZhaWx1cmU6IGl0NjYyNV93cml0ZV9lZGlkKCkgcmV0 dXJucyBhIHBvc2l0aXZlIGJsb2NrIGNvdW50IG9uDQo+PiAgIHN1Y2Nlc3MsIG5vdCAwLCBzbyBg aWYgKGVycilgIHNraXBwZWQgdGhlIENFQyBwaHlzLWFkZHIgdXBkYXRlIGFuZA0KPj4gICBIUEQg cmUtZW5hYmxlIG9uIGV2ZXJ5IHN1Y2Nlc3NmdWwgd3JpdGUuIFByZS1leGlzdGluZyBzaW5jZSB2 MSwgbm90DQo+PiAgIGludHJvZHVjZWQgYnkgdGhlIHYyIGJsb2Nrcz09MCBoYW5kbGluZy4NCj4+ IC0gQWRkIHJlYWwgVjRMMl9TVUJERVZfRk9STUFUX1RSWSBzdXBwb3J0IGluIGdldF9mbXQvc2V0 X2ZtdCB2aWENCj4+ICAgc2Rfc3RhdGUsIG1hdGNoaW5nIHRoZSBwYXR0ZXJuIHVzZWQgYnkgYWR2 NzYwNC5jLCBhbmQgbG9jayB0aGUNCj4+ICAgY3NpX2Zvcm1hdC9tYnVzX2ZtdF9jb2RlIGNvbW1p dCBpbiB0aGUgQUNUSVZFIHBhdGggYWdhaW5zdA0KPj4gICBjb25jdXJyZW50IFNfRk1UIGNhbGxz Lg0KPj4gLSBSZWFkIHRoZSBjaGlwJ3MgcmVhbCBwb3JjaC9zeW5jLXdpZHRoIHJlZ2lzdGVycw0K Pj4gICAoUkVHX0hfRlBfMS4uUkVHX1ZfQlBfMCkgaW4gaXQ2NjI1X2dldF9kZXRlY3RlZF90aW1p bmdzKCkgaW5zdGVhZCBvZg0KPj4gICBsdW1waW5nIHRoZSB3aG9sZSBibGFua2luZyBpbnRlcnZh bCBpbnRvIGhzeW5jL3ZzeW5jLCBzbyBkZXRlY3RlZA0KPj4gICB0aW1pbmdzIGNhbiBhY3R1YWxs eSBtYXRjaCB0aGUgc3RhbmRhcmQgQ0VBL1ZFU0EgdGFibGVzLg0KPj4gDQo+PiBBbGwgZm91bmQg YnkgdGhlIHNhc2hpa28uZGV2IGF1dG9tYXRlZCByZXZpZXcgb2YgdjIuIEZvdXIgb3RoZXIgdjIN Cj4+IHJldmlldyBmaW5kaW5ncyB3ZXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgY29kZSBhbmQgYXJl IG5vdCBiZWluZyBhY3RlZA0KPj4gb246DQo+PiAtICJ0aW1lcl9jb250YWluZXJfb2YoKSBkb2Vz bid0IGV4aXN0IiAtLSBpdCBkb2VzDQo+PiAgIChpbmNsdWRlL2xpbnV4L3RpbWVyLmgpLCB0aGUg ZHJpdmVyIGFscmVhZHkgYnVpbGRzIGNsZWFuIHdpdGggaXQuDQo+PiAtICJkZXZtX2t6YWxsb2Mn ZCBzdGF0ZSArIHN1YmRldiBkZXZub2RlIHJpc2tzIGEgVUFGIG9uIHVuYmluZCIgLS0NCj4+ICAg dHJ1ZSBpbiB0aGUgYWJzdHJhY3QsIGJ1dCBpdCdzIHRoZSBleGFjdCBwYXR0ZXJuIHVzZWQgYnkg ZXZlcnkNCj4+ICAgY29tcGFyYWJsZSBpbi10cmVlIGRyaXZlciAodGMzNTg3NDMuYywgYWR2NzYw NC5jLCBhZHY3ODQyLmMgYWxsDQo+PiAgIGRldm1fa3phbGxvYyB0aGVpciBtYWluIHN0YXRlIHN0 cnVjdCBkZXNwaXRlIHNldHRpbmcNCj4+ICAgVjRMMl9TVUJERVZfRkxfSEFTX0RFVk5PREUgdG9v KS4NCj4+IC0gInVucmVnaXN0ZXJpbmcgdGhlIHN1YmRldiBiZWZvcmUgZGlzYWJsaW5nIElSUS93 b3JrIGluIHJlbW92ZSgpDQo+PiAgIGxlYXZlcyBzZC0+ZGV2bm9kZSBkYW5nbGluZyIgLS0gY2hl Y2tlZCB0aGUgY29yZToNCj4+ICAgdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoKSBvbmx5 IG1hcmtzIHNkLT5kZXZub2RlIHVucmVnaXN0ZXJlZA0KPj4gICB2aWEgdmlkZW9fdW5yZWdpc3Rl cl9kZXZpY2UoKSwgaXQgZG9lcyBub3QgZnJlZSBpdDsgdGhlIHN0cnVjdCBpcw0KPj4gICBmcmVl ZCBsYXRlciB2aWEga3JlZiBvbiBsYXN0IGNsb3NlLCBzbyB0aGUgcG9pbnRlciBzdGF5cyB2YWxp ZC4NCj4+IC0gdGhlIHJlc2lkdWFsICJpb2N0bCByZXNjaGVkdWxlcyBocGRfZGVsYXllZF93b3Jr IGNvbmN1cnJlbnRseSB3aXRoDQo+PiAgIHJlbW92ZSgpIiByYWNlIC0tIHJlYWwgaW4gdGhlIGFi c3RyYWN0IChyZXF1aXJlcyBhbiBpb2N0bCBhbHJlYWR5DQo+PiAgIGluIGZsaWdodCBhdCB0aGUg ZXhhY3QgbW9tZW50IG9mIHVuYmluZCksIGJ1dCBubyBwZWVyIGRyaXZlciBhZGRzDQo+PiAgIGV4 dHJhIHN5bmNocm9uaXphdGlvbiBmb3IgdGhpcyBlaXRoZXIgKG5vbmUgc2V0IHNkLT5kZXZub2Rl LT5sb2NrKSwNCj4+ICAgYW5kIHRoZSB2MiBmaXggKHVucmVnaXN0ZXIgZmlyc3QgaW4gcmVtb3Zl KCkpIGFscmVhZHkgbmFycm93ZWQgdGhpcw0KPj4gICBkb3duIHRvIHRoZSBzYW1lIHJlc2lkdWFs IHJpc2sgbGV2ZWwgZXZlcnkgcGVlciBkcml2ZXIgY2Fycmllcy4NCj4+IA0KPj4gQ2hhbmdlcyBp biB2MjoNCj4+IC0gRml4IHByZW1hdHVyZSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldigpOiBt b3ZlIGl0IHRvIHRoZSBlbmQgb2YNCj4+ICAgcHJvYmUoKSAoYWZ0ZXIgY3RybCBoYW5kbGVyLCBD RUMgYW5kIGluaXRpYWwgaGFyZHdhcmUgc2V0dXApLCBhbmQNCj4+ICAgbWlycm9yIHRoZSB1bnJl Z2lzdGVyIG9yZGVyIGF0IHRoZSB0b3Agb2YgcmVtb3ZlKCksIGNsb3NpbmcgYQ0KPj4gICB1c2Ut YWZ0ZXItZnJlZSB3aW5kb3cgd2hlcmUgYSBjb25jdXJyZW50IGlvY3RsIGNvdWxkIHJlc2NoZWR1 bGUNCj4+ICAgaHBkX2RlbGF5ZWRfd29yayBkdXJpbmcgdGVhcmRvd24uDQo+PiAtIFRha2UgaXQ2 NjI1X2xvY2sgYXJvdW5kIHRoZSBiYW5rZWQgcmVnaXN0ZXIgcmVhZHMgaW4NCj4+ICAgaXQ2NjI1 X2dldF9kZXRlY3RlZF90aW1pbmdzKCkgYW5kIHRoZSBDRUMgUlggcGF0aCBpbg0KPj4gICBpdDY2 MjVfY2VjX2hhbmRsZXIoKSwgd2hpY2ggY291bGQgb3RoZXJ3aXNlIHJhY2Ugd2l0aCBhbiBpbi1w cm9ncmVzcw0KPj4gICBFRElEIHJlYWQvd3JpdGUgYW5kIG9ic2VydmUgdGhlIHdyb25nIGJhbmsu DQo+PiAtIEZpeCBpdDY2MjVfd2FpdF9mb3Jfc3RhdHVzKCkncyBwb2xsIGludGVydmFsIGV4Y2Vl ZGluZyB0aGUgdGltZW91dA0KPj4gICBidWRnZXQsIHNwbGl0IHRoZSBDRUMgUlgvVFggaW50ZXJy dXB0IGhhbmRsaW5nIG91dCBvZiBhbiBlbHNlLWlmIHNvDQo+PiAgIHNpbXVsdGFuZW91cyBldmVu dHMgYXJlbid0IGRyb3BwZWQsIGFuZCB3YWl0IGZvciBoYXJkd2FyZSB0byBsYXRjaA0KPj4gICB0 aGUgQ0VDIHRyYW5zbWl0IHRyaWdnZXIgYml0IGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2suDQo+ PiAtIFN0b3AgaXQ2NjI1X3NldF9mbXQoKSBmcm9tIG11dGF0aW5nIGFjdGl2ZSBzdGF0ZSBvbg0K Pj4gICBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZLCBhbmQgaGFuZGxlIGVkaWQtPmJsb2NrcyA9PSAw IGluIGdfZWRpZC9zX2VkaWQNCj4+ICAgcGVyIHRoZSBWNEwyIHNwZWMgKGNhcGFjaXR5IHF1ZXJ5 IC8gRURJRCBjbGVhcikuDQo+PiAtIFplcm8taW5pdGlhbGl6ZSB0aGUgQ0VDIHJ4bXNnIGFuZCBk ZWJ1Z2ZzIG1pcGlfcmVnIHdyaXRlIGJ1ZmZlciB0bw0KPj4gICBhdm9pZCBsZWFraW5nIHVuaW5p dGlhbGl6ZWQgc3RhY2sgYnl0ZXMsIGFuZCB1c2UgZGVzaWduYXRlZA0KPj4gICBpbml0aWFsaXpl cnMgaW4gdGhlIGkyY19kZXZpY2VfaWQgdGFibGUuDQo+PiANCj4+IEFsbCBmb3VuZCBieSB0aGUg c2FzaGlrby5kZXYgYXV0b21hdGVkIHJldmlldyBvZiB2MS4NCj4+IC0tLQ0KPj4gIE1BSU5UQUlO RVJTICAgICAgICAgICAgICAgIHwgICAgNyArDQo+PiAgZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZp ZyAgfCAgIDE4ICsNCj4+ICBkcml2ZXJzL21lZGlhL2kyYy9NYWtlZmlsZSB8ICAgIDEgKw0KPj4g IGRyaXZlcnMvbWVkaWEvaTJjL2l0NjYyNS5jIHwgMjIzMSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKw0KPj4gIDQgZmlsZXMgY2hhbmdlZCwgMjI1NyBpbnNlcnRp b25zKCspDQo+PiANCj4+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTDQo+ PiBpbmRleCAxNTAxMWY1NzUyYTk5NGNmMWIzNTRmNDkwZDZjNGU0MTE1ODhkZjg4Li4yZDViMGVl MTA3ZjllMzI1NWE1MzY1ZWMwYTI1MTY3YTcxNmIxZTZlIDEwMDY0NA0KPj4gLS0tIGEvTUFJTlRB SU5FUlMNCj4+ICsrKyBiL01BSU5UQUlORVJTDQo+PiBAQCAtMTM4NDcsNiArMTM4NDcsMTMgQEAg VDoJZ2l0IGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9kcm0vbWlzYy9rZXJuZWwuZ2l0 DQo+PiAgRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvYnJpZGdl L2l0ZSxpdDY2MTIxLnlhbWwNCj4+ICBGOglkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY2 MTIxLmMNCj4+ICANCj4+ICtJVEUgSVQ2NjI1IEhETUkgdG8gTUlQSSBNRURJQSBEUklWRVINCj4+ ICtNOglIZXJtZXMgV3UgPEhlcm1lcy5XdUBpdGUuY29tLnR3Pg0KPj4gK1M6CU1haW50YWluZWQN Cj4+ICtUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWEuZ2l0DQo+PiArRjoJRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL2kyYy9pdGUsaXQ2NjI1LnlhbWwNCj4+ICtG Oglkcml2ZXJzL21lZGlhL2kyYy9pdDY2MjUuYw0KPj4gKw0KPj4gIElWVFYgVklERU80TElOVVgg RFJJVkVSDQo+PiAgTToJQW5keSBXYWxscyA8YXdhbGxzQG1kLm1ldHJvY2FzdC5uZXQ+DQo+PiAg TDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9t ZWRpYS9pMmMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcNCj4+IGluZGV4IDVk MTczZTBlY2Y0MjRmMmYyMDRmOGQ0MjZiZTgxOGU0NDM1N2Y4ZTQuLmZiNGIyNDY4NGY3NzEwZjkw ZWIzOTk5NzZkMTFmNTc3MDE0ODhkMjYgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL21lZGlhL2ky Yy9LY29uZmlnDQo+PiArKysgYi9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnDQo+PiBAQCAtMTI3 OCw2ICsxMjc4LDI0IEBAIGNvbmZpZyBWSURFT19JU0w3OTk4WA0KPj4gIAkgIFN1cHBvcnQgZm9y IEludGVyc2lsIElTTDc5OTh4IGFuYWxvZyB0byBNSVBJLUNTSTIgb3INCj4+ICAJICBCVC42NTYg ZGVjb2Rlci4NCj4+ICANCj4+ICtjb25maWcgVklERU9fSVQ2NjI1DQo+PiArCXRyaXN0YXRlICJJ VDY2MjUgSERNSSB0byBNSVBJIENTSSBicmlkZ2UiDQo+PiArCWRlcGVuZHMgb24gVklERU9fREVW ICYmIEkyQw0KPj4gKwlkZXBlbmRzIG9uIE9GDQo+PiArCXNlbGVjdCBDRUNfQ09SRQ0KPj4gKwlz ZWxlY3QgTUVESUFfQ09OVFJPTExFUg0KPj4gKwlzZWxlY3QgUkVHTUFQX0kyQw0KPj4gKwlzZWxl Y3QgVjRMMl9GV05PREUNCj4+ICsJc2VsZWN0IFZJREVPX1Y0TDJfU1VCREVWX0FQSQ0KPj4gKwlo ZWxwDQo+PiArCSAgVjRMMiBzdWJkZXZpY2UgZHJpdmVyIGZvciB0aGUgSVRFIElUNjYyNS9JVDY2 MjYgSERNSSB0byBNSVBJDQo+PiArCSAgQ1NJLTIgYnJpZGdlIGNoaXBzLiBJVDY2MjUgYWNjZXB0 cyBhbiBIRE1JIDIuMCBpbnB1dCBhbmQNCj4+ICsJICBJVDY2MjYgYW4gSERNSSAyLjEgaW5wdXQs IGNvbnZlcnRpbmcgaXQgdG8gYSBNSVBJIENTSS0yDQo+PiArCSAgb3V0cHV0LiBUaGUgZHJpdmVy IGFsc28gZXhwb3NlcyBhbiBIRE1JIENFQyBhZGFwdGVyLg0KPj4gKw0KPj4gKwkgIFRvIGNvbXBp bGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQ0KPj4gKwkgIG1v ZHVsZSB3aWxsIGJlIGNhbGxlZCBpdDY2MjUuDQo+PiArDQo+PiAgY29uZmlnIFZJREVPX0xUNjkx MVVYRQ0KPj4gIAl0cmlzdGF0ZSAiTG9udGl1bSBMVDY5MTFVWEUgZGVjb2RlciINCj4+ICAJZGVw ZW5kcyBvbiBBQ1BJICYmIFZJREVPX0RFViAmJiBJMkMNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL2kyYy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlDQo+PiBpbmRl eCBlNDUzNTllZmUwZTQxZTEzZTNjMDg2OWU1ZWFkN2Q2Y2Y0YWNhM2E3Li45YmJjZWFhM2QwNzU3 Mzk1OGVkYjhhMzZiYzdmMDk0MmYxNDEwYTM5IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9tZWRp YS9pMmMvTWFrZWZpbGUNCj4+ICsrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlDQo+PiBA QCAtNjMsNiArNjMsNyBAQCBvYmotJChDT05GSUdfVklERU9fSU1YNDEyKSArPSBpbXg0MTIubw0K Pj4gIG9iai0kKENPTkZJR19WSURFT19JTVg0MTUpICs9IGlteDQxNS5vDQo+PiAgb2JqLSQoQ09O RklHX1ZJREVPX0lSX0kyQykgKz0gaXIta2JkLWkyYy5vDQo+PiAgb2JqLSQoQ09ORklHX1ZJREVP X0lTTDc5OThYKSArPSBpc2w3OTk4eC5vDQo+PiArb2JqLSQoQ09ORklHX1ZJREVPX0lUNjYyNSkg Kz0gaXQ2NjI1Lm8NCj4+ICBvYmotJChDT05GSUdfVklERU9fS1MwMTI3KSArPSBrczAxMjcubw0K Pj4gIG9iai0kKENPTkZJR19WSURFT19MTTM1NjApICs9IGxtMzU2MC5vDQo+PiAgb2JqLSQoQ09O RklHX1ZJREVPX0xNMzY0NikgKz0gbG0zNjQ2Lm8NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21l ZGlhL2kyYy9pdDY2MjUuYyBiL2RyaXZlcnMvbWVkaWEvaTJjL2l0NjYyNS5jDQo+PiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uYzQ3NDIyZWRlYmE3OTY5ZWMzYzk0NTk0YTk1YTk3YzYxNzBmNDlmMg0KPj4gLS0t IC9kZXYvbnVsbA0KPj4gKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvaXQ2NjI1LmMNCj4+IEBAIC0w LDAgKzEsMjIzMSBAQA0KPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkNCj4+ICsvKg0KPj4gKyAqIGl0NjYyNSAtIGl0ZSBIRE1JIHRvIE1JUEkgYnJpZGdlDQo+PiAr ICovDQo+PiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+DQo+PiArI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4NCj4+ICsj aW5jbHVkZSA8bGludXgvaGRtaS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4+ICsj aW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o Pg0KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvb2Zf Z3JhcGguaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQo+PiArI2luY2x1ZGUgPGxp bnV4L3NsYWIuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvdGltZXIuaD4NCj4+ICsjaW5jbHVkZSA8 bGludXgvdjRsMi1kdi10aW1pbmdzLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5o Pg0KPj4gKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4NCj4+ICsNCj4+ICsjaW5jbHVkZSA8 bWVkaWEvY2VjLmg+DQo+PiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4NCj4+ICsjaW5j bHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4NCj4+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1kdi10 aW1pbmdzLmg+DQo+PiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4NCj4+ICsjaW5jbHVk ZSA8bWVkaWEvdjRsMi1md25vZGUuaD4NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGRlYnVnID0gMzsN Cj4+ICttb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7DQo+PiArTU9EVUxFX1BBUk1fREVT QyhkZWJ1ZywgImRlYnVnIGxldmVsICgwLTMpIik7DQo+PiArDQo+PiArI2RlZmluZSBSRUdfQ0hJ UF9JRF8wIDB4MDANCj4+ICsjZGVmaW5lIFJFR19DSElQX0lEXzEgMHgwMQ0KPj4gKyNkZWZpbmUg UkVHX0ZXX1ZFUl9NQUpPUiAweDAzDQo+PiArI2RlZmluZSBSRUdfRldfVkVSX01JTk9SIDB4MDQN Cj4+ICsjZGVmaW5lIFJFR19QUk9UT0NPTF9WRVJTSU9OIDB4MDUNCj4+ICsjZGVmaW5lIEJfUFZF Ul9NSU5PUiAgQklUKDApDQo+PiArI2RlZmluZSBCX1BWRVJfTUFKT1IgIEJJVCg0KQ0KPj4gKw0K Pj4gKyNkZWZpbmUgUkVHX0NNRF9TRVQgMHgxMA0KPj4gKyNkZWZpbmUgQ01EX1NFVF9DRUNfTEEg MHhDMA0KPj4gKyNkZWZpbmUgQ01EX1NFVF9DRUNfRU5BQkxFIDB4QzENCj4+ICsNCj4+ICsjZGVm aW5lIFJFR19FRElEX1NUQVJUIDB4MjANCj4+ICsjZGVmaW5lIFJFR19DRUNfUlhfREFUQSAweDIw DQo+PiArI2RlZmluZSBSRUdfQ0VDX1RYX0RBVEEgMHgzMA0KPj4gKw0KPj4gKyNkZWZpbmUgUkVH X0hfQUNUSVZFXzEgMHg1MA0KPj4gKyNkZWZpbmUgUkVHX0hfQUNUSVZFXzAgMHg1MQ0KPj4gKyNk ZWZpbmUgUkVHX1ZfQUNUSVZFXzEgMHg1Mg0KPj4gKyNkZWZpbmUgUkVHX1ZfQUNUSVZFXzAgMHg1 Mw0KPj4gKyNkZWZpbmUgUkVHX0hfVE9UQUxfMSAweDU0DQo+PiArI2RlZmluZSBSRUdfSF9UT1RB TF8wIDB4NTUNCj4+ICsjZGVmaW5lIFJFR19WX1RPVEFMXzEgMHg1Ng0KPj4gKyNkZWZpbmUgUkVH X1ZfVE9UQUxfMCAweDU3DQo+PiArI2RlZmluZSBSRUdfVklEX1BDTEsgMHg1OA0KPj4gKyNkZWZp bmUgUkVHX0hfRlBfMSAweDVDDQo+PiArI2RlZmluZSBSRUdfSF9GUF8wIDB4NUQNCj4+ICsjZGVm aW5lIFJFR19IX1NXXzEgMHg1RQ0KPj4gKyNkZWZpbmUgUkVHX0hfU1dfMCAweDVGDQo+PiArI2Rl ZmluZSBSRUdfSF9CUF8xIDB4NjANCj4+ICsjZGVmaW5lIFJFR19IX0JQXzAgMHg2MQ0KPj4gKyNk ZWZpbmUgUkVHX1ZfRlBfMSAweDYyDQo+PiArI2RlZmluZSBSRUdfVl9GUF8wIDB4NjMNCj4+ICsj ZGVmaW5lIFJFR19WX1NXXzEgMHg2NA0KPj4gKyNkZWZpbmUgUkVHX1ZfU1dfMCAweDY1DQo+PiAr I2RlZmluZSBSRUdfVl9CUF8xIDB4NjYNCj4+ICsjZGVmaW5lIFJFR19WX0JQXzAgMHg2Nw0KPj4g KyNkZWZpbmUgUkVHX1ZJRF9JTkZPIDB4NjgNCj4+ICsjZGVmaW5lIEJfSU5URVJMQUNFICBCSVQo MCkNCj4+ICsjZGVmaW5lIEJfSFNXUE9MICBCSVQoMSkNCj4+ICsjZGVmaW5lIEJfVlNXUE9MICBC SVQoMikNCj4+ICsjZGVmaW5lIEJfUElYRUxfUkVQICBCSVQoNCkNCj4+ICsNCj4+ICsjZGVmaW5l IFJFR19WSUMgMHg2OQ0KPj4gKyNkZWZpbmUgUkVHX0hETUlfVklERU9fSU5GTyAweDZBDQo+PiAr I2RlZmluZSBCX0NPTE9SX01PREUgIEJJVCgwKQ0KPj4gKyNkZWZpbmUgQl9DT0xPUl9ERVBUSCAg QklUKDQpDQo+PiArI2RlZmluZSBSRUdfSERNSV9BVURJT19JTkZPMSAweDZCDQo+PiArI2RlZmlu ZSBCX0FVRF9GUyAgQklUKDApDQo+PiArDQo+PiArI2RlZmluZSBSRUdfSERNSV9BVURJT19JTkZP MiAweDZDDQo+PiArI2RlZmluZSBCX0FVRF9DSCAgQklUKDApDQo+PiArI2RlZmluZSBCX0FVRF9X TCAgQklUKDQpDQo+PiArDQo+PiArI2RlZmluZSBSRUdfSERNSV9BVURJT19JTkZPMyAweDZEDQo+ PiArI2RlZmluZSBCX0FVRF9UWVBFICBCSVQoMCkNCj4+ICsjZGVmaW5lIEJfQVVEX01TICBCSVQo MikNCj4+ICsjZGVmaW5lIEJfQVVEXzNEICBCSVQoMykNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19B VURJT19GTVQgMHg2RQ0KPj4gKyNkZWZpbmUgQl9JMlNfV0wgIEJJVCgwKQ0KPj4gKyNkZWZpbmUg Ql9JMlNfQUxOIEJJVCgyKQ0KPj4gKyNkZWZpbmUgQl9JMlNfRExZIEJJVCgzKQ0KPj4gKyNkZWZp bmUgQl9JMlNfTFIgIEJJVCg0KQ0KPj4gKyNkZWZpbmUgQl9JMlNfU0ZUIEJJVCg1KQ0KPj4gKyNk ZWZpbmUgQl9BVURfT1VUX0lGICBCSVQoNikNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19JRl9MQVRD SF9IQiAweDZGDQo+PiArI2RlZmluZSBSRUdfSUZfREFUQSAweDcwDQo+PiArI2RlZmluZSBSRUdf RU1QX0RBVEEgMHhBMA0KPj4gKyNkZWZpbmUgUkVHX0FWSV9EQVRBIDB4QUUNCj4+ICsNCj4+ICsj ZGVmaW5lIFJFR19UWF9TVEFUVVMgMHhFMA0KPj4gKw0KPj4gKyNkZWZpbmUgUkVHX1JYX1NUQVRV UyAweEUyDQo+PiArI2RlZmluZSBCX1JYXzVWIEJJVCgwKQ0KPj4gKyNkZWZpbmUgQl9SWF9IUEQg QklUKDEpDQo+PiArI2RlZmluZSBCX1JYX1NUQUJMRSBCSVQoMikNCj4+ICsjZGVmaW5lIEJfUlhf SERNSSBCSVQoMykNCj4+ICsjZGVmaW5lIEJfUlhfQVZNVVRFIEJJVCg0KQ0KPj4gKyNkZWZpbmUg Ql9SWF9BVURfT04gQklUKDUpDQo+PiArDQo+PiArI2RlZmluZSBSRUdfUlhfSERDUF9TVFMgMHhF Mw0KPj4gKyNkZWZpbmUgQl9IRENQMV9BVVRIX1NUQVJUIEJJVCgwKQ0KPj4gKyNkZWZpbmUgQl9I RENQMl9BVVRIX1NUQVJUIEJJVCgxKQ0KPj4gKyNkZWZpbmUgQl9IRENQX0FVVEhfRE9ORSBCSVQo MikNCj4+ICsjZGVmaW5lIEJfSERDUF9FTkMgQklUKDMpDQo+PiArDQo+PiArI2RlZmluZSBSRUdf Q0VDX1NUQVRVUyAweEU0DQo+PiArI2RlZmluZSBCX0NFQ19UWF9ET05FIEJJVCgwKQ0KPj4gKyNk ZWZpbmUgQl9DRUNfVFhfTkFDSyBCSVQoMSkNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19DRUNfUlhf REFUQV9MRU4gMHhFNQ0KPj4gKyNkZWZpbmUgUkVHX0NFQ19UWF9EQVRBX0xFTiAweEU2DQo+PiAr DQo+PiArI2RlZmluZSBSRUdfU1lTX01JUElfSU5UIDB4RUINCj4+ICsjZGVmaW5lIEJfTUlQSV9P VVRQVVRfRU5BQkxFIEJJVCgwKQ0KPj4gKyNkZWZpbmUgQl9NSVBJX1ZJREVPX1VOU1RBQkxFIEJJ VCgxKQ0KPj4gKw0KPj4gKyNkZWZpbmUgUkVHX1JYX0lOVF9TVEFUVVMxIDB4RUMNCj4+ICsjZGVm aW5lIEJfSERNSV81Vl9DSEcgICBCSVQoMCkNCj4+ICsjZGVmaW5lIEJfSERNSV9WSURfQ0hHICBC SVQoMSkNCj4+ICsjZGVmaW5lIEJfSERNSV9BVURfQ0hHICBCSVQoMikNCj4+ICsjZGVmaW5lIEJf SERNSV9DUF9DSEcgICBCSVQoMykNCj4+ICsjZGVmaW5lIEJfSERNSV9JRl9MQVRDSCBCSVQoNCkN Cj4+ICsjZGVmaW5lIEJfSERNSV9OT19JRl9MQVRDSCAgQklUKDUpDQo+PiArI2RlZmluZSBCX0hE TUlfRU1QICAgICAgQklUKDYpDQo+PiArI2RlZmluZSBCX0hETUlfTk9fRU1QICAgQklUKDcpDQo+ PiArDQo+PiArI2RlZmluZSBSRUdfUlhfSU5UX1NUQVRVUzIgMHhFRA0KPj4gKyNkZWZpbmUgQl9I RE1JX0FWSSAgICAgIEJJVCgwKQ0KPj4gKyNkZWZpbmUgQl9IRE1JX05PX0FWSSAgIEJJVCgxKQ0K Pj4gKyNkZWZpbmUgQl9IRE1JX1ZTSUYgICAgIEJJVCgyKQ0KPj4gKyNkZWZpbmUgQl9IRE1JX05P X1ZTSUYgIEJJVCgzKQ0KPj4gKyNkZWZpbmUgQl9IRE1JX0FWTVVURV9DSEcgIEJJVCg0KQ0KPj4g Kw0KPj4gKyNkZWZpbmUgUkVHX0NISVBfQ09OVFJPTCAweEYwDQo+PiArI2RlZmluZSBCX0hETUlf UkVTRVQgIEJJVCg1KQ0KPj4gKyNkZWZpbmUgQl9GV19TVEFSVCAgQklUKDYpDQo+PiArDQo+PiAr I2RlZmluZSBSRUdfTUlQSV9DRkcgMHhGMQ0KPj4gKyNkZWZpbmUgTV9NSVBJX0xBTkUgIDB4MDMN Cj4+ICsjZGVmaW5lIEJfTUlQSV9TUExJVCAgQklUKDIpDQo+PiArI2RlZmluZSBCX01JUElfU1BM SVRfQ0ZHICBCSVQoMykNCj4+ICsjZGVmaW5lIEJfTUlQSV9EUEhZICBCSVQoNCkNCj4+ICsjZGVm aW5lIEJfTUlQSV9VU0VfRFNJICBCSVQoNSkNCj4+ICsjZGVmaW5lIEJfTUlQSV9DT05USU5VX0NM SyAgQklUKDYpDQo+PiArDQo+PiArI2RlZmluZSBSRUdfTUlQSV9EQVRBX1RZUEUgMHhGMg0KPj4g KyNkZWZpbmUgQ1NJX1JHQjQ0NCAgICAgICAgICAweDIwDQo+PiArI2RlZmluZSBDU0lfUkdCNTU1 ICAgICAgICAgIDB4MjENCj4+ICsjZGVmaW5lIENTSV9SR0I1NjUgICAgICAgICAgMHgyMg0KPj4g KyNkZWZpbmUgQ1NJX1JHQjY2NiAgICAgICAgICAweDIzDQo+PiArI2RlZmluZSBDU0lfUkdCODg4 ICAgICAgICAgIDB4MjQNCj4+ICsjZGVmaW5lIENTSV9ZVVY0MjBfOGJfTCAgICAgMHgxQQ0KPj4g KyNkZWZpbmUgQ1NJX1lVVjQyMF84YiAgICAgICAweDFDDQo+PiArI2RlZmluZSBDU0lfWVVWNDIw XzEwYiAgICAgIDB4MUQNCj4+ICsjZGVmaW5lIENTSV9ZVVY0MjJfOGIgICAgICAgMHgxRQ0KPj4g KyNkZWZpbmUgQ1NJX1lVVjQyMl8xMGIgICAgICAweDFGDQo+PiArI2RlZmluZSBDU0lfUkdCXzEw YiAgICAgICAgIDB4MzANCj4+ICsjZGVmaW5lIENTSV9SR0JfMTJiICAgICAgICAgMHgzMQ0KPj4g KyNkZWZpbmUgQ1NJX1lVVjQyMl8xMmIgICAgICAweDMyDQo+PiArI2RlZmluZSBDU0lfWVVWNDIw XzEwYl9MICAgIDB4MzMNCj4+ICsjZGVmaW5lIENTSV9ZVVY0MjBfMTJiICAgICAgMHgzNA0KPj4g KyNkZWZpbmUgQ1NJX1lVVjQ0NF84YiAgICAgICAweDM1DQo+PiArI2RlZmluZSBDU0lfWVVWNDQ0 XzEwYiAgICAgIDB4MzYNCj4+ICsjZGVmaW5lIENTSV9ZVVY0NDRfMTJiICAgICAgMHgzNw0KPj4g Kw0KPj4gKyNkZWZpbmUgUkVHX01JUElfQ09OVFJPTCAweEYzDQo+PiArI2RlZmluZSBCX01JUElf T1VUUFVUICAgIEJJVCgwKQ0KPj4gKw0KPj4gKyNkZWZpbmUgUkVHX1JYX0NGRyAweEY0DQo+PiAr I2RlZmluZSBCX01BTlVBTF9IUEQgICAgQklUKDApDQo+PiArI2RlZmluZSBCX0hQRF9ISUdIICAg IEJJVCgxKQ0KPj4gKyNkZWZpbmUgQl9IUERfVE9HR0xFICAgIEJJVCgzKQ0KPj4gKw0KPj4gKyNk ZWZpbmUgUkVHX0NTQ19DRkcgMHhGNQ0KPj4gKyNkZWZpbmUgQl9EWU5BTUlDX1JBTkdFIEJJVCgw KQ0KPj4gKw0KPj4gKyNkZWZpbmUgUkVHX01JU0NfQ0ZHIDB4RjYNCj4+ICsjZGVmaW5lIEJfQkFV RF9SQVRFIEJJVCgwKQ0KPj4gKyNkZWZpbmUgQl9ERUJVR19NU0cgQklUKDEpDQo+PiArDQo+PiAr I2RlZmluZSBSRUdfSFBEX0RFTEFZIDB4RjcNCj4+ICsjZGVmaW5lIEJfREVMQVlfQ09VTlQgQklU KDApDQo+PiArI2RlZmluZSBCX0RFTEFZX1VOSVQgQklUKDcpDQo+PiArDQo+PiArI2RlZmluZSBS RUdfSU5GT19CQU5LX1NFTCAweEZEDQo+PiArI2RlZmluZSBDVExfQkFOS19FRElEX1JFQUQgMQ0K Pj4gKyNkZWZpbmUgQ1RMX0JBTktfRURJRF9XUklURSA1DQo+PiArDQo+PiArI2RlZmluZSBSRUdf SE9TVF9DVFJMX0lOVCAweEZFDQo+PiArI2RlZmluZSBCX0NNRF9TRVQgQklUKDQpDQo+PiArI2Rl ZmluZSBCX0NFQ19TRU5EX0RBVEEgQklUKDUpDQo+PiArI2RlZmluZSBCX0NPTkZJR19VUERBVEUg QklUKDYpDQo+PiArI2RlZmluZSBCX0lGX0JBTksgQklUKDcpDQo+PiArDQo+PiArI2RlZmluZSBS RUdfTUNVX0lOVEVSUlVQVCAweEZGDQo+PiArI2RlZmluZSBCX1NZU19JTlRfQUNUSVZFIEJJVCgw KQ0KPj4gKyNkZWZpbmUgQl9DRUNfUlhfUkVDRUlWRUQgQklUKDEpDQo+PiArI2RlZmluZSBCX0NF Q19UWF9VUERBVEUgQklUKDIpDQo+PiArDQo+PiArI2RlZmluZSBFRElEX05VTV9CTE9DS1NfTUFY IDQNCj4+ICsjZGVmaW5lIEVESURfQkxPQ0tfU0laRSAxMjgNCj4+ICsNCj4+ICsjZGVmaW5lIEky Q19NQVhfWEZFUl9TSVpFICA4DQo+PiArI2RlZmluZSBQT0xMX0lOVEVSVkFMX0NFQ19NUwkxMA0K Pj4gKyNkZWZpbmUgUE9MTF9JTlRFUlZBTF9NUwk0MA0KPj4gKw0KPj4gKyNkZWZpbmUgQVVEMzJL ICAgMHgwMw0KPj4gKyNkZWZpbmUgQVVENDRLICAgMHgwMA0KPj4gKyNkZWZpbmUgQVVENDhLICAg MHgwMg0KPj4gKyNkZWZpbmUgQVVENjRLICAgMHgwQg0KPj4gKyNkZWZpbmUgQVVEODhLICAgMHgw OA0KPj4gKyNkZWZpbmUgQVVEOTZLICAgMHgwQQ0KPj4gKyNkZWZpbmUgQVVEMTI4SyAgMHgyQg0K Pj4gKyNkZWZpbmUgQVVEMTc2SyAgMHgwQw0KPj4gKyNkZWZpbmUgQVVEMTkySyAgMHgwRQ0KPj4g KyNkZWZpbmUgQVVEMjU2SyAgMHgxQg0KPj4gKyNkZWZpbmUgQVVEMzUySyAgMHgwRA0KPj4gKyNk ZWZpbmUgQVVEMzg0SyAgMHgwNQ0KPj4gKyNkZWZpbmUgQVVENTEySyAgMHgzQg0KPj4gKyNkZWZp bmUgQVVENzA1SyAgMHgyRA0KPj4gKyNkZWZpbmUgQVVENzY4SyAgMHgwOQ0KPj4gKyNkZWZpbmUg QVVEMTAyNEsgMHgzNQ0KPj4gKyNkZWZpbmUgQVVEMTQxMUsgMHgxRA0KPj4gKyNkZWZpbmUgQVVE MTUzNksgMHgxNQ0KPj4gKw0KPj4gK2VudW0gaXQ2NjI1X2NoaXBfdHlwZSB7DQo+PiArCUlUNjYy NV9DSElQID0gMCwNCj4+ICsJSVQ2NjI2X0NISVAgPSAxLA0KPj4gK307DQo+PiArDQo+PiArc3Ry dWN0IGl0NjYyNSB7DQo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4+ICsJc3RydWN0IGkyY19j bGllbnQgKmkyY19jbGllbnQ7DQo+PiArCXN0cnVjdCByZWdtYXAgKml0NjYyNV9yZWdtYXA7DQo+ PiArCWVudW0gaXQ2NjI1X2NoaXBfdHlwZSBjaGlwX3R5cGU7DQo+PiArDQo+PiArCS8qIHByb3Rl Y3RzIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBjaGlwJ3MgcmVnaXN0ZXJzIGFuZCBzdGF0ZSAq Lw0KPj4gKwlzdHJ1Y3QgbXV0ZXggaXQ2NjI1X2xvY2s7DQo+PiArDQo+PiArCXN0cnVjdCB2NGwy X3N1YmRldiBzZDsNCj4+ICsJc3RydWN0IHY0bDJfbWJ1c19jb25maWdfbWlwaV9jc2kyIGJ1czsN Cj4+ICsJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsNCj4+ICsJc3RydWN0IG1lZGlhX3BhZCBw YWQ7DQo+PiArCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBoZGw7DQo+PiArDQo+PiArCS8qIGNv bnRyb2xzICovDQo+PiArCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmxfNXZfZGV0ZWN0Ow0KPj4gKwlz dHJ1Y3QgdjRsMl9jdHJsICpjdHJsX2F1ZGlvX3NhbXBsaW5nX3JhdGU7DQo+PiArCXN0cnVjdCB2 NGwyX2N0cmwgKmN0cmxfYXVkaW9fcHJlc2VudDsNCj4+ICsJc3RydWN0IHY0bDJfY3RybCAqY3Ry bF9saW5rX2ZyZXE7DQo+PiArCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmxfZ2V0X2hkbWlfaW5mbzsN Cj4+ICsJc3RydWN0IHY0bDJfY3RybCAqY3RybF9taXBpX2NvbmZpZzsNCj4+ICsNCj4+ICsJc3Ry dWN0IGRlbGF5ZWRfd29yayBocGRfZGVsYXllZF93b3JrOw0KPj4gKw0KPj4gKwlzdHJ1Y3QgdGlt ZXJfbGlzdCB0aW1lcjsNCj4+ICsJc3RydWN0IHdvcmtfc3RydWN0IHBvbGxpbmdfd29yazsNCj4+ ICsNCj4+ICsJc3RydWN0IHY0bDJfZHZfdGltaW5ncyB0aW1pbmdzOw0KPj4gKw0KPj4gKwl1OCBj c2lfbGFuZXM7DQo+PiArCXU4IHBvcnRfbnVtOw0KPj4gKwllbnVtIHY0bDJfbWJ1c190eXBlIGJ1 c190eXBlOw0KPj4gKwl1OCBjc2lfZm9ybWF0Ow0KPj4gKwl1MzIgbWJ1c19mbXRfY29kZTsNCj4+ ICsNCj4+ICsJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsNCj4+ICsNCj4+ICsJc3RydWN0 IGNlY19hZGFwdGVyICpjZWNfYWRhcDsNCj4+ICsNCj4+ICsJc3RydWN0IGRlbnRyeSAqZGVidWdm c19kaXI7DQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3QgczY0IGl0NjYyNV9saW5rX2Zy ZXFbXSA9IHsgNDQ1NTAwMDAwIH07DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X2R2X3RpbWluZ3NfY2FwIGl0NjYyNV90aW1pbmdzX2NhcCA9IHsNCj4+ICsJLnR5cGUgPSBWNEwy X0RWX0JUXzY1Nl8xMTIwLA0KPj4gKwkvKiBrZWVwIHRoaXMgaW5pdGlhbGl6YXRpb24gZm9yIGNv bXBhdGliaWxpdHkgd2l0aCBHQ0MgPCA0LjQuNiAqLw0KPj4gKwkucmVzZXJ2ZWQgPSB7IDAgfSwN Cj4+ICsNCj4+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoNjQwLCAzODQwLCA0ODAsIDIxNjAsIDI3 MDAwMDAwLCAzMDAwMDAwMDAsDQo+PiArCQkJICAgICBWNEwyX0RWX0JUX1NURF9DRUE4NjEgfCBW NEwyX0RWX0JUX1NURF9ETVQgfA0KPj4gKwkJCSAgICAgVjRMMl9EVl9CVF9TVERfR1RGIHwgVjRM Ml9EVl9CVF9TVERfQ1ZULA0KPj4gKwkJCSAgICAgVjRMMl9EVl9CVF9DQVBfUFJPR1JFU1NJVkUg fCBWNEwyX0RWX0JUX0NBUF9JTlRFUkxBQ0VEIHwNCj4+ICsJCQkgICAgIFY0TDJfRFZfQlRfQ0FQ X1JFRFVDRURfQkxBTktJTkcgfCBWNEwyX0RWX0JUX0NBUF9DVVNUT00pDQo+PiArfTsNCj4+ICsN Cj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGl0NjYyNV9mb3JtYXRfaW5mbyB7DQo+PiArCXU4IGNz aV9mb3JtYXQ7DQo+PiArCXUzMiBtYnVzX2ZtdF9jb2RlOw0KPj4gK30gaXQ2NjI1X2Zvcm1hdHNb XSA9IHsNCj4+ICsJeyBDU0lfWVVWNDIyXzhiLCBNRURJQV9CVVNfRk1UX1VZVlk4XzFYMTYgfSwN Cj4+ICsJeyBDU0lfUkdCODg4LCBNRURJQV9CVVNfRk1UX1JHQjg4OF8xWDI0IH0sDQo+PiArCXsg Q1NJX1lVVjQ0NF84YiwgTUVESUFfQlVTX0ZNVF9ZVVY4XzFYMjQgfSwNCj4+ICt9Ow0KPj4gKw0K Pj4gK3N0YXRpYyBpbmxpbmUgaW50IGl0NjYyNV9jc2lfZm9ybWF0X2lkeCh1OCBjc2lfZm9ybWF0 KQ0KPj4gK3sNCj4+ICsJaW50IGk7DQo+PiArDQo+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGl0NjYyNV9mb3JtYXRzKTsgaSsrKSB7DQo+PiArCQlpZiAoaXQ2NjI1X2Zvcm1hdHNbaV0u Y3NpX2Zvcm1hdCA9PSBjc2lfZm9ybWF0KQ0KPj4gKwkJCXJldHVybiBpOw0KPj4gKwl9DQo+PiAr DQo+PiArCXJldHVybiAtRUlOVkFMOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIGlu dCBpdDY2MjVfY3NpX21idXNfY29kZV9pZHgodTMyIG1idXNfZm10X2NvZGUpDQo+PiArew0KPj4g KwlpbnQgaTsNCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXQ2NjI1X2Zv cm1hdHMpOyBpKyspIHsNCj4+ICsJCWlmIChpdDY2MjVfZm9ybWF0c1tpXS5tYnVzX2ZtdF9jb2Rl ID09IG1idXNfZm10X2NvZGUpDQo+PiArCQkJcmV0dXJuIGk7DQo+PiArCX0NCj4+ICsNCj4+ICsJ cmV0dXJuIC1FSU5WQUw7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGl0 NjYyNSAqc2RfdG9fNjYyNShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQ0KPj4gK3sNCj4+ICsJcmV0 dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGl0NjYyNSwgc2QpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpdDY2MjUgKmhkbF90b182NjI1KHN0cnVjdCB2NGwyX2N0 cmxfaGFuZGxlciAqaGRsKQ0KPj4gK3sNCj4+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihoZGwsIHN0 cnVjdCBpdDY2MjUsIGhkbCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg cmVnbWFwX2NvbmZpZyBpdDY2MjVfcmVnbWFwX2NvbmZpZyA9IHsNCj4+ICsJLnJlZ19iaXRzID0g OCwNCj4+ICsJLnZhbF9iaXRzID0gOCwNCj4+ICsJLm1heF9yZWdpc3RlciA9IDB4ZmYsDQo+PiAr CS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTk9ORSwNCj4+ICsJLm1heF9yYXdfcmVhZCA9IEkyQ19N QVhfWEZFUl9TSVpFLA0KPj4gKwkubWF4X3Jhd193cml0ZSA9IEkyQ19NQVhfWEZFUl9TSVpFLA0K Pj4gK307DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfcmVnbWFwX2kyY19pbml0KHN0cnVj dCBpMmNfY2xpZW50ICpjbGllbnQsDQo+PiArCQkJCSAgc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0K Pj4gK3sNCj4+ICsJaXQ2NjI1LT5pMmNfY2xpZW50ID0gY2xpZW50Ow0KPj4gKwlpdDY2MjUtPmRl diA9ICZjbGllbnQtPmRldjsNCj4+ICsNCj4+ICsJaXQ2NjI1LT5pdDY2MjVfcmVnbWFwID0gZGV2 bV9yZWdtYXBfaW5pdF9pMmMoaXQ2NjI1LT5pMmNfY2xpZW50LA0KPj4gKwkJCQkJCSAgICAgJml0 NjYyNV9yZWdtYXBfY29uZmlnKTsNCj4+ICsJaWYgKElTX0VSUihpdDY2MjUtPml0NjYyNV9yZWdt YXApKQ0KPj4gKwkJcmV0dXJuIFBUUl9FUlIoaXQ2NjI1LT5pdDY2MjVfcmVnbWFwKTsNCj4+ICsN Cj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X3JlYWRf Ynl0ZShzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUsIHU4IHJlZykNCj4+ICt7DQo+PiArCXVuc2lnbmVk IGludCB2YWw7DQo+PiArCWludCBlcnI7DQo+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGl0NjYy NS0+ZGV2Ow0KPj4gKw0KPj4gKwllcnIgPSByZWdtYXBfcmVhZChpdDY2MjUtPml0NjYyNV9yZWdt YXAsIHJlZywgJnZhbCk7DQo+PiArCWlmIChlcnIgPCAwKSB7DQo+PiArCQlkZXZfZXJyKGRldiwg InJlZ1sweCV4XSByZWFkIGZhaWxlZCBlcnI6ICVkIiwgcmVnLCBlcnIpOw0KPj4gKwkJcmV0dXJu IGVycjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gdmFsOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgaW50IGl0NjYyNV93cml0ZV9ieXRlKHN0cnVjdCBpdDY2MjUgKml0NjYyNSwgdTggcmVn LCB1OCB2YWwpDQo+PiArew0KPj4gKwlpbnQgZXJyOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSBpdDY2MjUtPmRldjsNCj4+ICsNCj4+ICsJZXJyID0gcmVnbWFwX3dyaXRlKGl0NjYyNS0+aXQ2 NjI1X3JlZ21hcCwgcmVnLCB2YWwpOw0KPj4gKwlpZiAoZXJyIDwgMCkgew0KPj4gKwkJZGV2X2Vy cihkZXYsICJyZWdbMHgleF0gd3JpdGUgZmFpbGVkIGVycjogJWQiLCByZWcsIGVycik7DQo+PiAr CQlyZXR1cm4gZXJyOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMgaW50IGl0NjYyNV9zZXRfYml0cyhzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUsIHU4 IHJlZywgdTggbWFzaywgdTggdmFsKQ0KPj4gK3sNCj4+ICsJaW50IGVycjsNCj4+ICsJc3RydWN0 IGRldmljZSAqZGV2ID0gaXQ2NjI1LT5kZXY7DQo+PiArDQo+PiArCWVyciA9IHJlZ21hcF91cGRh dGVfYml0cyhpdDY2MjUtPml0NjYyNV9yZWdtYXAsIHJlZywgbWFzaywgdmFsKTsNCj4+ICsJaWYg KGVyciA8IDApIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAicmVnWzB4JXhdIHNldCBiaXRzIGZhaWxl ZCBlcnI6ICVkIiwgcmVnLCBlcnIpOw0KPj4gKwkJcmV0dXJuIGVycjsNCj4+ICsJfQ0KPj4gKw0K Pj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfcmVhZF9i eXRlcyhzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUsIHU4IHJlZywgdTggKmJ1ZiwgaW50IGxlbikNCj4+ ICt7DQo+PiArCWludCBlcnI7DQo+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGl0NjYyNS0+ZGV2 Ow0KPj4gKw0KPj4gKwllcnIgPSByZWdtYXBfYnVsa19yZWFkKGl0NjYyNS0+aXQ2NjI1X3JlZ21h cCwgcmVnLCBidWYsIGxlbik7DQo+PiArCWlmIChlcnIgPCAwKSB7DQo+PiArCQlkZXZfZXJyKGRl diwgInJlZ1sweCV4XSByZWFkIGZhaWxlZCBlcnI6ICVkIiwgcmVnLCBlcnIpOw0KPj4gKwkJcmV0 dXJuIGVycjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIGludCBpdDY2MjVfd3JpdGVfYnl0ZXMoc3RydWN0IGl0NjYyNSAqaXQ2NjI1LCB1OCBy ZWcsIHU4ICpidWYsIGludCBsZW4pDQo+PiArew0KPj4gKwlpbnQgZXJyOw0KPj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBpdDY2MjUtPmRldjsNCj4+ICsNCj4+ICsJZXJyID0gcmVnbWFwX2J1bGtf d3JpdGUoaXQ2NjI1LT5pdDY2MjVfcmVnbWFwLCByZWcsIGJ1ZiwgbGVuKTsNCj4+ICsJaWYgKGVy ciA8IDApIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAicmVnWzB4JXhdIHdyaXRlIGZhaWxlZCBlcnI6 ICVkIiwgcmVnLCBlcnIpOw0KPj4gKwkJcmV0dXJuIGVycjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwly ZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfd2FpdF9mb3Jfc3Rh dHVzKHN0cnVjdCBpdDY2MjUgKml0NjYyNSwgdTggcmVnLCB1OCB2YWwsDQo+PiArCQkJCSAgaW50 IHRpbWVvdXRfbXMpDQo+PiArew0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpdDY2MjUtPmRl djsNCj4+ICsJaW50IHN0YXR1czsNCj4+ICsJaW50IHJ2YWw7DQo+PiArCWludCBzbGVlcF9tcyA9 IDEwOw0KPj4gKwlpbnQgdGltZW91dF9yb3VuZF9tcyA9IERJVl9ST1VORF9VUCh0aW1lb3V0X21z LCBzbGVlcF9tcykgKiBzbGVlcF9tczsNCj4+ICsNCj4+ICsJc3RhdHVzID0gcmVhZF9wb2xsX3Rp bWVvdXQoaXQ2NjI1X3JlYWRfYnl0ZSwgcnZhbCwgcnZhbCA9PSB2YWwsDQo+PiArCQkJCSAgIHNs ZWVwX21zICogMTAwMCwNCj4+ICsJCQkJICAgdGltZW91dF9yb3VuZF9tcyAqIDEwMDAsDQo+PiAr CQkJCSAgIGZhbHNlLCBpdDY2MjUsIHJlZyk7DQo+PiArDQo+PiArCWRldl9pbmZvKGRldiwgIiVz IHN0YXR1cyA9ICVkICVkIiwgX19mdW5jX18sIHN0YXR1cywgKGludClydmFsKTsNCj4+ICsJaWYg KHN0YXR1cyA8IDApIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAiJXMgZXJyIHN0YXR1cyA9ICVkIiwg X19mdW5jX18sIHN0YXR1cyk7DQo+PiArCQlyZXR1cm4gLUVUSU1FRE9VVDsNCj4+ICsJfQ0KPj4g Kw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X3dy aXRlX2NvbW1hbmQoc3RydWN0IGl0NjYyNSAqaXQ2NjI1LCB1OCAqY21kcywgaW50IGNtZF9sZW4p DQo+PiArew0KPj4gKwlpdDY2MjVfd3JpdGVfYnl0ZXMoaXQ2NjI1LCBSRUdfQ01EX1NFVCwgY21k cywgY21kX2xlbik7DQo+PiArCWl0NjYyNV93cml0ZV9ieXRlKGl0NjYyNSwgUkVHX0hPU1RfQ1RS TF9JTlQsIEJfQ01EX1NFVCk7DQo+PiArCWl0NjYyNV93YWl0X2Zvcl9zdGF0dXMoaXQ2NjI1LCBS RUdfSE9TVF9DVFJMX0lOVCwgMHgwMCwgMjUpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50 IGl0NjYyNV91cGRhdGVfY29uZmlnKHN0cnVjdCBpdDY2MjUgKml0NjYyNSkNCj4+ICt7DQo+PiAr CWludCBlcnI7DQo+PiArDQo+PiArCWVyciA9IGl0NjYyNV9zZXRfYml0cyhpdDY2MjUsIFJFR19I T1NUX0NUUkxfSU5ULA0KPj4gKwkJCSAgICAgIEJfQ09ORklHX1VQREFURSwgQl9DT05GSUdfVVBE QVRFKTsNCj4+ICsJaWYgKGVyciA8IDApDQo+PiArCQlyZXR1cm4gZXJyOw0KPj4gKw0KPj4gKwly ZXR1cm4gaXQ2NjI1X3dhaXRfZm9yX3N0YXR1cyhpdDY2MjUsIFJFR19IT1NUX0NUUkxfSU5ULCAw eDAwLCAyNSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X3NldF9iYW5rKHN0 cnVjdCBpdDY2MjUgKml0NjYyNSwgdTggYmFuaykNCj4+ICt7DQo+PiArCWludCBlcnI7DQo+PiAr DQo+PiArCWVyciA9IGl0NjYyNV93cml0ZV9ieXRlKGl0NjYyNSwgUkVHX0lORk9fQkFOS19TRUws IGJhbmspOw0KPj4gKwlpZiAoZXJyIDwgMCkNCj4+ICsJCXJldHVybiBlcnI7DQo+PiArDQo+PiAr CWVyciA9IGl0NjYyNV93cml0ZV9ieXRlKGl0NjYyNSwgUkVHX0hPU1RfQ1RSTF9JTlQsIEJfSUZf QkFOSyk7DQo+PiArCWlmIChlcnIgPCAwKQ0KPj4gKwkJcmV0dXJuIGVycjsNCj4+ICsNCj4+ICsJ cmV0dXJuIGl0NjYyNV93YWl0X2Zvcl9zdGF0dXMoaXQ2NjI1LCBSRUdfSE9TVF9DVFJMX0lOVCwg MHgwMCwgMjUpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfaGRtaShz dHJ1Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiArew0KPj4gKwlpbnQgdmFsOw0KPj4gKw0KPj4gKwl2 YWwgPSBpdDY2MjVfcmVhZF9ieXRlKGl0NjYyNSwgUkVHX1JYX1NUQVRVUyk7DQo+PiArCXJldHVy biAodmFsIDwgMCkgPyBmYWxzZSA6ICh2YWwgJiBCX1JYX0hETUkpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW5saW5lIGJvb2wgaGRtaV81dl9wb3dlcl9wcmVzZW50KHN0cnVjdCBpdDY2MjUg Kml0NjYyNSkNCj4+ICt7DQo+PiArCWludCB2YWw7DQo+PiArDQo+PiArCXZhbCA9IGl0NjYyNV9y ZWFkX2J5dGUoaXQ2NjI1LCBSRUdfUlhfU1RBVFVTKTsNCj4+ICsJcmV0dXJuICh2YWwgPCAwKSA/ IGZhbHNlIDogKHZhbCAmIEJfUlhfNVYpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5l IGJvb2wgbm9fc2lnbmFsKHN0cnVjdCBpdDY2MjUgKml0NjYyNSkNCj4+ICt7DQo+PiArCWludCB2 YWw7DQo+PiArDQo+PiArCXZhbCA9IGl0NjYyNV9yZWFkX2J5dGUoaXQ2NjI1LCBSRUdfUlhfU1RB VFVTKTsNCj4+ICsJcmV0dXJuICh2YWwgPCAwKSA/IHRydWUgOiAhKHZhbCAmIEJfUlhfU1RBQkxF KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGlubGluZSBib29sIGF1ZGlvX3ByZXNlbnQoc3Ry dWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJaW50IHZhbDsNCj4+ICsNCj4+ICsJdmFs ID0gaXQ2NjI1X3JlYWRfYnl0ZShpdDY2MjUsIFJFR19SWF9TVEFUVVMpOw0KPj4gKwlyZXR1cm4g KHZhbCA8IDApID8gZmFsc2UgOiAodmFsICYgQl9SWF9BVURfT04pOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW50IGdldF9hdWRpb19zYW1wbGluZ19yYXRlKHN0cnVjdCBpdDY2MjUgKml0NjYy NSkNCj4+ICt7DQo+PiArCXU4IGZzX2lkOw0KPj4gKwlpbnQgaSwgZnJlcSA9IDA7DQo+PiArCWNv bnN0IHN0cnVjdCBmc19pZF9tYXAgew0KPj4gKwkJdTggZnNfaWQ7DQo+PiArCQl1MTYgZnJlcTsN Cj4+ICsJfSBzX2ZzaWRfbWFwW10gPSB7DQo+PiArCQl7IEFVRDMySywgMzIgfSwNCj4+ICsJCXsg QVVENDRLLCA0NCB9LA0KPj4gKwkJeyBBVUQ0OEssIDQ4IH0sDQo+PiArCQl7IEFVRDY0SywgNjQg fSwNCj4+ICsJCXsgQVVEODhLLCA4OCB9LA0KPj4gKwkJeyBBVUQ5NkssIDk2IH0sDQo+PiArDQo+ PiArCQl7IEFVRDEyOEssIDEyOCB9LA0KPj4gKwkJeyBBVUQxNzZLLCAxNzYgfSwNCj4+ICsJCXsg QVVEMTkySywgMTkyIH0sDQo+PiArCQl7IEFVRDI1NkssIDI1NiB9LA0KPj4gKwkJeyBBVUQzNTJL LCAzNTIgfSwNCj4+ICsJCXsgQVVEMzg0SywgMzg0IH0sDQo+PiArDQo+PiArCQl7IEFVRDUxMkss IDUxMiB9LA0KPj4gKwkJeyBBVUQ3MDVLLCA3MDUgfSwNCj4+ICsJCXsgQVVENzY4SywgNzY4IH0s DQo+PiArCQl7IEFVRDEwMjRLLCAxMDI0IH0sDQo+PiArCQl7IEFVRDE0MTFLLCAxNDExIH0sDQo+ PiArCQl7IEFVRDE1MzZLLCAxNTM2IH0sDQo+PiArCX07DQo+PiArDQo+PiArCWlmIChub19zaWdu YWwoaXQ2NjI1KSB8fCAhYXVkaW9fcHJlc2VudChpdDY2MjUpKQ0KPj4gKwkJcmV0dXJuIDA7DQo+ PiArDQo+PiArCWd1YXJkKG11dGV4KSgmaXQ2NjI1LT5pdDY2MjVfbG9jayk7DQo+PiArDQo+PiAr CWZzX2lkID0gaXQ2NjI1X3JlYWRfYnl0ZShpdDY2MjUsIFJFR19IRE1JX0FVRElPX0lORk8xKTsN Cj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc19mc2lkX21hcCk7IGkrKykg ew0KPj4gKwkJaWYgKHNfZnNpZF9tYXBbaV0uZnNfaWQgPT0gZnNfaWQpIHsNCj4+ICsJCQlmcmVx ID0gc19mc2lkX21hcFtpXS5mcmVxICogMTAwMDsNCj4+ICsJCQlicmVhazsNCj4+ICsJCX0NCj4+ ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gZnJlcTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHU2 NCBpdDY2MjVfZ2V0X3BjbGsoc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJdTMy IHBjbGs7DQo+PiArCXU4IGNrWzRdOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlyZXQgPSBp dDY2MjVfcmVhZF9ieXRlcyhpdDY2MjUsIFJFR19WSURfUENMSywgY2ssIDQpOw0KPj4gKwlpZiAo cmV0IDwgMCkgew0KPj4gKwkJZGV2X2VycihpdDY2MjUtPmRldiwgImZhaWxlZCB0byByZWFkIHBp eGVsIGNsb2NrIik7DQo+PiArCQlyZXR1cm4gMDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlwY2xrID0g Y2tbMF07DQo+PiArCXBjbGsgPDw9IDg7DQo+PiArCXBjbGsgfD0gY2tbMV07DQo+PiArCXBjbGsg PDw9IDg7DQo+PiArCXBjbGsgfD0gY2tbMl07DQo+PiArCXBjbGsgPDw9IDg7DQo+PiArCXBjbGsg fD0gY2tbM107DQo+PiArDQo+PiArCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXQ2NjI1LT5zZCwgIiVz OiBwY2xrPSV1ICglMDh4KSIsDQo+PiArCQkgX19mdW5jX18sIHBjbGssIHBjbGspOw0KPj4gKw0K Pj4gKwlyZXR1cm4gKHU2NClwY2xrICogMTAwMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGlu dCBpdDY2MjVfcmVhZF9lZGlkKHN0cnVjdCBpdDY2MjUgKml0NjYyNSwgdTggKmVkaWQsIGludCBz dGFydF9ibG9jaywNCj4+ICsJCQkgICAgaW50IG51bV9ibG9ja3MpDQo+PiArew0KPj4gKwlpbnQg aSwgYmFua19jdHJsLCBlcnIgPSAwOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpdDY2MjUt PmRldjsNCj4+ICsNCj4+ICsJaWYgKCFlZGlkKSB7DQo+PiArCQlkZXZfZXJyKGRldiwgImVkaWQg YnVmZmVyIGlzIE5VTEwiKTsNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKwl9DQo+PiArDQo+ PiArCWlmIChzdGFydF9ibG9jayA8IDAgfHwgbnVtX2Jsb2NrcyA8PSAwIHx8DQo+PiArCSAgICBz dGFydF9ibG9jayA+IEVESURfTlVNX0JMT0NLU19NQVggfHwNCj4+ICsJICAgIG51bV9ibG9ja3Mg PiBFRElEX05VTV9CTE9DS1NfTUFYIHx8DQo+PiArCSAgICBzdGFydF9ibG9jayArIG51bV9ibG9j a3MgPiBFRElEX05VTV9CTE9DS1NfTUFYKSB7DQo+PiArCQlkZXZfZXJyKGRldiwNCj4+ICsJCQki aW52YWxpZCBibG9jayByYW5nZTogc3RhcnRfYmxvY2s9JWQsIG51bV9ibG9ja3M9JWQiLA0KPj4g KwkJCXN0YXJ0X2Jsb2NrLCBudW1fYmxvY2tzKTsNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4g Kwl9DQo+PiArDQo+PiArCWd1YXJkKG11dGV4KSgmaXQ2NjI1LT5pdDY2MjVfbG9jayk7DQo+PiAr CWZvciAoaSA9IDA7IGkgPCBudW1fYmxvY2tzOyBpKyspIHsNCj4+ICsJCWJhbmtfY3RybCA9IENU TF9CQU5LX0VESURfUkVBRCArIHN0YXJ0X2Jsb2NrICsgaTsNCj4+ICsJCWVyciA9IGl0NjYyNV9z ZXRfYmFuayhpdDY2MjUsIGJhbmtfY3RybCk7DQo+PiArCQlpZiAoZXJyIDwgMCkNCj4+ICsJCQli cmVhazsNCj4+ICsNCj4+ICsJCWVyciA9IGl0NjYyNV9yZWFkX2J5dGVzKGl0NjYyNSwgUkVHX0VE SURfU1RBUlQsDQo+PiArCQkJCQllZGlkICsgKGkgKiAxMjgpLCAxMjgpOw0KPj4gKwkJaWYgKGVy ciA8IDApDQo+PiArCQkJYnJlYWs7DQo+PiArCX0NCj4+ICsNCj4+ICsJaXQ2NjI1X3NldF9iYW5r KGl0NjYyNSwgMCk7DQo+PiArDQo+PiArCXJldHVybiBlcnIgPCAwID8gZXJyIDogbnVtX2Jsb2Nr czsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfd3JpdGVfZWRpZChzdHJ1Y3Qg aXQ2NjI1ICppdDY2MjUsIHU4ICplZGlkLCBpbnQgc3RhcnRfYmxvY2ssDQo+PiArCQkJICAgICBp bnQgbnVtX2Jsb2NrcykNCj4+ICt7DQo+PiArCWludCBpLCBiYW5rX2N0cmwsIGVyciA9IDA7DQo+ PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGl0NjYyNS0+ZGV2Ow0KPj4gKw0KPj4gKwlpZiAoc3Rh cnRfYmxvY2sgPCAwIHx8IG51bV9ibG9ja3MgPD0gMCB8fA0KPj4gKwkgICAgc3RhcnRfYmxvY2sg PiBFRElEX05VTV9CTE9DS1NfTUFYIHx8DQo+PiArCSAgICBudW1fYmxvY2tzID4gRURJRF9OVU1f QkxPQ0tTX01BWCB8fA0KPj4gKwkgICAgc3RhcnRfYmxvY2sgKyBudW1fYmxvY2tzID4gRURJRF9O VU1fQkxPQ0tTX01BWCkgew0KPj4gKwkJZGV2X2VycihkZXYsDQo+PiArCQkJImludmFsaWQgYmxv Y2sgcmFuZ2U6IHN0YXJ0X2Jsb2NrPSVkLCBudW1fYmxvY2tzPSVkIiwNCj4+ICsJCQlzdGFydF9i bG9jaywgbnVtX2Jsb2Nrcyk7DQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsJfQ0KPj4gKw0K Pj4gKwlndWFyZChtdXRleCkoJml0NjYyNS0+aXQ2NjI1X2xvY2spOw0KPj4gKwlmb3IgKGkgPSAw OyBpIDwgbnVtX2Jsb2NrczsgaSsrKSB7DQo+PiArCQliYW5rX2N0cmwgPSBDVExfQkFOS19FRElE X1dSSVRFICsgc3RhcnRfYmxvY2sgKyBpOw0KPj4gKwkJZXJyID0gaXQ2NjI1X3NldF9iYW5rKGl0 NjYyNSwgYmFua19jdHJsKTsNCj4+ICsJCWlmIChlcnIgPCAwKQ0KPj4gKwkJCWJyZWFrOw0KPj4g Kw0KPj4gKwkJZXJyID0gaXQ2NjI1X3dyaXRlX2J5dGVzKGl0NjYyNSwgUkVHX0VESURfU1RBUlQs DQo+PiArCQkJCQkgZWRpZCArIChpICogMTI4KSwgMTI4KTsNCj4+ICsJCWlmIChlcnIgPCAwKQ0K Pj4gKwkJCWJyZWFrOw0KPj4gKw0KPj4gKwkJZXJyID0gaXQ2NjI1X3VwZGF0ZV9jb25maWcoaXQ2 NjI1KTsNCj4+ICsJCWlmIChlcnIgPCAwKQ0KPj4gKwkJCWJyZWFrOw0KPj4gKwl9DQo+PiArDQo+ PiArCWl0NjYyNV9zZXRfYmFuayhpdDY2MjUsIDApOw0KPj4gKw0KPj4gKwlyZXR1cm4gZXJyIDwg MCA/IGVyciA6IG51bV9ibG9ja3M7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYy NV9lbmFibGVfYXV0b19ocGQoc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJZGV2 X2RiZyhpdDY2MjUtPmRldiwgIiVzOiBhdXRvIEhQRCIsIF9fZnVuY19fKTsNCj4+ICsJZ3VhcmQo bXV0ZXgpKCZpdDY2MjUtPml0NjYyNV9sb2NrKTsNCj4+ICsJaXQ2NjI1X3NldF9iaXRzKGl0NjYy NSwgUkVHX1JYX0NGRywgMHgwMywgMHgwMCk7DQo+PiArCWl0NjYyNV91cGRhdGVfY29uZmlnKGl0 NjYyNSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYyNV9kaXNhYmxlX2hwZChz dHJ1Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiArew0KPj4gKwljYW5jZWxfZGVsYXllZF93b3JrX3N5 bmMoJml0NjYyNS0+aHBkX2RlbGF5ZWRfd29yayk7DQo+PiArDQo+PiArCWd1YXJkKG11dGV4KSgm aXQ2NjI1LT5pdDY2MjVfbG9jayk7DQo+PiArCWl0NjYyNV9zZXRfYml0cyhpdDY2MjUsIFJFR19S WF9DRkcsIDB4MDMsIDB4MDEpOw0KPj4gKwlpdDY2MjVfdXBkYXRlX2NvbmZpZyhpdDY2MjUpOw0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBpdDY2MjVfZW5hYmxlX2hwZChzdHJ1Y3QgaXQ2 NjI1ICppdDY2MjUpDQo+PiArew0KPj4gKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJml0NjYyNS0+ aHBkX2RlbGF5ZWRfd29yaywNCj4+ICsJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpOw0K Pg0KPkkgcmVjb21tZW5kIHRvIHVzZSAnSFogLyA3JyBoZXJlLiBPZnRlbiB2aWRlbyBzb3VyY2Vz IGFyZSBub3QgdmVyeSBhY2N1cmF0ZQ0KPmluIG1lYXN1cmluZyBob3cgbG9uZyB0aGUgSFBEIGlz IGxvdy4gJ0haIC8gNycgaGFzIHByb3ZlbiB0byBiZSBhIHJlbGlhYmxlIHZhbHVlLg0KPg0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBpdDY2MjVfaHBkX2RlbGF5ZWRfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBj b250YWluZXJfb2Yod29yaywNCj4+ICsJCQlzdHJ1Y3QgaXQ2NjI1LCBocGRfZGVsYXllZF93b3Jr LndvcmspOw0KPj4gKwlpbnQgdmFsID0gMDsNCj4+ICsNCj4+ICsJZ3VhcmQobXV0ZXgpKCZpdDY2 MjUtPml0NjYyNV9sb2NrKTsNCj4+ICsJaXQ2NjI1X3NldF9iaXRzKGl0NjYyNSwgUkVHX1JYX0NG RywgMHgwMywgdmFsKTsNCj4+ICsJaXQ2NjI1X3VwZGF0ZV9jb25maWcoaXQ2NjI1KTsNCj4+ICt9 DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfZ2V0X2RldGVjdGVkX3RpbWluZ3Moc3RydWN0 IGl0NjYyNSAqaXQ2NjI1LA0KPj4gKwkJCQkgICAgICAgc3RydWN0IHY0bDJfZHZfdGltaW5ncyAq dGltaW5ncykNCj4+ICt7DQo+PiArCXN0cnVjdCB2NGwyX2J0X3RpbWluZ3MgKmJ0ID0gJnRpbWlu Z3MtPmJ0Ow0KPj4gKwlpbnQgdmFsOw0KPj4gKwl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsN Cj4+ICsJdTggYnVmZmVyWzRdOw0KPj4gKwl1OCBidWZmZXIyWzEyXTsNCj4+ICsNCj4+ICsJaWYg KG5vX3NpZ25hbChpdDY2MjUpKSB7DQo+PiArCQlkZXZfZXJyKGl0NjYyNS0+ZGV2LCAibm8gc2ln bmFsIGRldGVjdGVkIik7DQo+PiArCQlyZXR1cm4gLUVOT0xJTks7DQo+PiArCX0NCj4+ICsNCj4+ ICsJZ3VhcmQobXV0ZXgpKCZpdDY2MjUtPml0NjYyNV9sb2NrKTsNCj4+ICsNCj4+ICsJbWVtc2V0 KHRpbWluZ3MsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzKSk7DQo+PiArCXRpbWlu Z3MtPnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwOw0KPj4gKwl2YWwgPSBpdDY2MjVfcmVhZF9i eXRlKGl0NjYyNSwgUkVHX1ZJRF9JTkZPKTsNCj4+ICsJaWYgKHZhbCA8IDApIHsNCj4+ICsJCWRl dl9lcnIoaXQ2NjI1LT5kZXYsICJmYWlsZWQgdG8gcmVhZCB2aWRlbyBpbmZvIik7DQo+PiArCQly ZXR1cm4gLUVJTzsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlidC0+aW50ZXJsYWNlZCA9IHZhbCAmIEJf SU5URVJMQUNFID8NCj4+ICsJCQkgVjRMMl9EVl9JTlRFUkxBQ0VEIDogVjRMMl9EVl9QUk9HUkVT U0lWRTsNCj4+ICsNCj4+ICsJaWYgKGl0NjYyNV9yZWFkX2J5dGVzKGl0NjYyNSwgUkVHX0hfQUNU SVZFXzEsIGJ1ZmZlciwgNCkgPCAwKQ0KPj4gKwkJcmV0dXJuIC1FSU87DQo+PiArDQo+PiArCXdp ZHRoID0gKChidWZmZXJbMF0gJiAweGZmKSA8PCA4KSArIGJ1ZmZlclsxXTsNCj4+ICsJaGVpZ2h0 ID0gKChidWZmZXJbMl0gJiAweGZmKSA8PCA4KSArIGJ1ZmZlclszXTsNCj4+ICsNCj4+ICsJYnQt PndpZHRoID0gd2lkdGg7DQo+PiArCWJ0LT5oZWlnaHQgPSBoZWlnaHQ7DQo+PiArDQo+PiArCWlm IChpdDY2MjVfcmVhZF9ieXRlcyhpdDY2MjUsIFJFR19IX0ZQXzEsIGJ1ZmZlcjIsIDEyKSA8IDAp DQo+PiArCQlyZXR1cm4gLUVJTzsNCj4+ICsNCj4+ICsJYnQtPmhmcm9udHBvcmNoID0gKChidWZm ZXIyWzBdICYgMHhmZikgPDwgOCkgKyBidWZmZXIyWzFdOw0KPj4gKwlidC0+aHN5bmMgPSAoKGJ1 ZmZlcjJbMl0gJiAweGZmKSA8PCA4KSArIGJ1ZmZlcjJbM107DQo+PiArCWJ0LT5oYmFja3BvcmNo ID0gKChidWZmZXIyWzRdICYgMHhmZikgPDwgOCkgKyBidWZmZXIyWzVdOw0KPj4gKwlidC0+dmZy b250cG9yY2ggPSAoKGJ1ZmZlcjJbNl0gJiAweGZmKSA8PCA4KSArIGJ1ZmZlcjJbN107DQo+PiAr CWJ0LT52c3luYyA9ICgoYnVmZmVyMls4XSAmIDB4ZmYpIDw8IDgpICsgYnVmZmVyMls5XTsNCj4+ ICsJYnQtPnZiYWNrcG9yY2ggPSAoKGJ1ZmZlcjJbMTBdICYgMHhmZikgPDwgOCkgKyBidWZmZXIy WzExXTsNCj4+ICsNCj4+ICsJYnQtPnBpeGVsY2xvY2sgPSBpdDY2MjVfZ2V0X3BjbGsoaXQ2NjI1 KTsNCj4+ICsJaWYgKGJ0LT5pbnRlcmxhY2VkID09IFY0TDJfRFZfSU5URVJMQUNFRCkgew0KPj4g KwkJYnQtPmhlaWdodCAqPSAyOw0KPj4gKwkJYnQtPmlsX3ZzeW5jID0gYnQtPnZzeW5jICsgMTsN Cj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZv aWQgaXQ2NjI1X3Nob3dfYXZpX2luZm9mcmFtZShzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiAr ew0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpdDY2MjUtPmRldjsNCj4+ICsJdW5pb24gaGRt aV9pbmZvZnJhbWUgZnJhbWU7DQo+PiArCXU4IGJ1ZmZlcltIRE1JX0lORk9GUkFNRV9TSVpFKEFW SSldOw0KPj4gKwl1OCB2ZXIsIGxlbjsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJaWYgKCFp c19oZG1pKGl0NjYyNSkpIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAibm90IEhETUkgc2lnbmFsLCBz a2lwIEFWSSBpbmZvZnJhbWUgbG9nIik7DQo+PiArCQlyZXR1cm47DQo+PiArCX0NCj4+ICsNCj4+ ICsJcmV0ID0gaXQ2NjI1X3JlYWRfYnl0ZXMoaXQ2NjI1LCBSRUdfQVZJX0RBVEEsIGJ1ZmZlciAr IDEsDQo+PiArCQkJCUhETUlfSU5GT0ZSQU1FX1NJWkUoQVZJKSAtIDEpOw0KPj4gKwlpZiAocmV0 IDwgMCkgew0KPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVhZCBBVkkgaW5mb2ZyYW1l IGRhdGEiKTsNCj4+ICsJCXJldHVybjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlsZW4gPSBidWZmZXJb MV07DQo+PiArCXZlciA9IGJ1ZmZlclsyXTsNCj4+ICsNCj4+ICsJYnVmZmVyWzBdID0gSERNSV9J TkZPRlJBTUVfVFlQRV9BVkk7DQo+PiArCWJ1ZmZlclsxXSA9IHZlcjsNCj4+ICsJYnVmZmVyWzJd ID0gbGVuOw0KPj4gKw0KPj4gKwlyZXQgPSBoZG1pX2luZm9mcmFtZV91bnBhY2soJmZyYW1lLCBi dWZmZXIsIHNpemVvZihidWZmZXIpKTsNCj4+ICsJaWYgKHJldCA8IDApIHsNCj4+ICsJCWRldl9l cnIoZGV2LCAidW5wYWNrIG9mIEFWSSBpbmZvZnJhbWUgZmFpbGVkIik7DQo+PiArCQlyZXR1cm47 DQo+PiArCX0NCj4+ICsNCj4+ICsJaGRtaV9pbmZvZnJhbWVfbG9nKEtFUk5fSU5GTywgZGV2LCAm ZnJhbWUpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9zX2N0cmxfZGV0ZWN0 X2hkbWlfNXYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4+ICt7DQo+PiArCXN0cnVjdCBpdDY2 MjUgKml0NjYyNSA9IHNkX3RvXzY2MjUoc2QpOw0KPj4gKw0KPj4gKwlyZXR1cm4gdjRsMl9jdHJs X3NfY3RybChpdDY2MjUtPmN0cmxfNXZfZGV0ZWN0LA0KPj4gKwkJCQloZG1pXzV2X3Bvd2VyX3By ZXNlbnQoaXQ2NjI1KSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X3NfY3Ry bF9hdWRpb19zYW1wbGluZ19yYXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpDQo+PiArew0KPj4g KwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBzZF90b182NjI1KHNkKTsNCj4+ICsNCj4+ICsJcmV0 dXJuIHY0bDJfY3RybF9zX2N0cmwoaXQ2NjI1LT5jdHJsX2F1ZGlvX3NhbXBsaW5nX3JhdGUsDQo+ PiArCQkJCWdldF9hdWRpb19zYW1wbGluZ19yYXRlKGl0NjYyNSkpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW50IGl0NjYyNV9zX2N0cmxfYXVkaW9fcHJlc2VudChzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnNkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGl0NjYyNSAqaXQ2NjI1ID0gc2RfdG9fNjYyNShz ZCk7DQo+PiArDQo+PiArCXJldHVybiB2NGwyX2N0cmxfc19jdHJsKGl0NjYyNS0+Y3RybF9hdWRp b19wcmVzZW50LA0KPj4gKwkJCQlhdWRpb19wcmVzZW50KGl0NjYyNSkpOw0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMgaW50IGl0NjYyNV92NGwyX3NkX2N0cmxfdXBkYXRlKHN0cnVjdCB2NGwyX3N1 YmRldiAqc2QpDQo+PiArew0KPj4gKwlpbnQgcmV0ID0gMDsNCj4+ICsNCj4+ICsJcmV0IHw9IGl0 NjYyNV9zX2N0cmxfZGV0ZWN0X2hkbWlfNXYoc2QpOw0KPj4gKwlyZXQgfD0gaXQ2NjI1X3NfY3Ry bF9hdWRpb19zYW1wbGluZ19yYXRlKHNkKTsNCj4+ICsJcmV0IHw9IGl0NjYyNV9zX2N0cmxfYXVk aW9fcHJlc2VudChzZCk7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgdm9pZCBpdDY2MjVfZW5hYmxlX3N0cmVhbV9sb2NrZWQoc3RydWN0IGl0NjYyNSAqaXQ2 NjI1LCBib29sIGVuYWJsZSkNCj4+ICt7DQo+PiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAm aXQ2NjI1LT5zZDsNCj4+ICsJaW50IHZhbDsNCj4+ICsNCj4+ICsJbG9ja2RlcF9hc3NlcnRfaGVs ZCgmaXQ2NjI1LT5pdDY2MjVfbG9jayk7DQo+PiArDQo+PiArCXY0bDJfZGJnKDMsIGRlYnVnLCBz ZCwgIiVzOiAlc2FibGUiLA0KPj4gKwkJIF9fZnVuY19fLCBlbmFibGUgPyAiZW4iIDogImRpcyIp Ow0KPj4gKw0KPj4gKwl2YWwgPSBlbmFibGUgPyBCX01JUElfT1VUUFVUIDogMDsNCj4+ICsJaXQ2 NjI1X3NldF9iaXRzKGl0NjYyNSwgUkVHX01JUElfQ09OVFJPTCwgQl9NSVBJX09VVFBVVCwgdmFs KTsNCj4+ICsJaXQ2NjI1X3VwZGF0ZV9jb25maWcoaXQ2NjI1KTsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIHZvaWQgaXQ2NjI1X2VuYWJsZV9zdHJlYW0oc3RydWN0IGl0NjYyNSAqaXQ2NjI1LCBi b29sIGVuYWJsZSkNCj4+ICt7DQo+PiArCWd1YXJkKG11dGV4KSgmaXQ2NjI1LT5pdDY2MjVfbG9j ayk7DQo+PiArCWl0NjYyNV9lbmFibGVfc3RyZWFtX2xvY2tlZChpdDY2MjUsIGVuYWJsZSk7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYyNV9zZXRfbWlwaV9jb25maWdfbG9ja2Vk KHN0cnVjdCBpdDY2MjUgKml0NjYyNSwgdTMyIGNmZ192YWwpDQo+PiArew0KPj4gKwl1OCBtaXBp X2RhdGFfdHlwZTsNCj4+ICsNCj4+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaXQ2NjI1LT5pdDY2 MjVfbG9jayk7DQo+PiArDQo+PiArCWRldl9kYmcoaXQ2NjI1LT5kZXYsICJtaXBpX2RhdGFfdHlw ZSA9IDB4JXgiLCBjZmdfdmFsKTsNCj4+ICsNCj4+ICsJbWlwaV9kYXRhX3R5cGUgPSBjZmdfdmFs ICYgMHhGRjsNCj4+ICsJaXQ2NjI1X3dyaXRlX2J5dGUoaXQ2NjI1LCBSRUdfTUlQSV9EQVRBX1RZ UEUsIG1pcGlfZGF0YV90eXBlKTsNCj4+ICsJaXQ2NjI1X3VwZGF0ZV9jb25maWcoaXQ2NjI1KTsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X3NldF9taXBpX2NvbmZpZyhzdHJ1 Y3QgaXQ2NjI1ICppdDY2MjUsIHUzMiBjZmdfdmFsKQ0KPj4gK3sNCj4+ICsJZ3VhcmQobXV0ZXgp KCZpdDY2MjUtPml0NjYyNV9sb2NrKTsNCj4+ICsJaXQ2NjI1X3NldF9taXBpX2NvbmZpZ19sb2Nr ZWQoaXQ2NjI1LCBjZmdfdmFsKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGlubGluZSB1bnNp Z25lZCBpbnQgZnBzX2Zyb21fYnRfdGltaW5ncyhjb25zdCBzdHJ1Y3QgdjRsMl9idF90aW1pbmdz ICp0KQ0KPj4gK3sNCj4+ICsJaWYgKCFWNEwyX0RWX0JUX0ZSQU1FX0hFSUdIVCh0KSB8fCAhVjRM Ml9EVl9CVF9GUkFNRV9XSURUSCh0KSkNCj4+ICsJCXJldHVybiAwOw0KPj4gKw0KPj4gKwlyZXR1 cm4gRElWX1JPVU5EX0NMT1NFU1QoKHVuc2lnbmVkIGludCl0LT5waXhlbGNsb2NrLA0KPj4gKwkJ CQkgVjRMMl9EVl9CVF9GUkFNRV9IRUlHSFQodCkgKg0KPj4gKwkJCQkgVjRMMl9EVl9CVF9GUkFN RV9XSURUSCh0KSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYyNV9pbml0aWFs X3NldHVwKHN0cnVjdCBpdDY2MjUgKml0NjYyNSkNCj4+ICt7DQo+PiArCWludCB2YWwgPSAwOw0K Pj4gKw0KPj4gKwlndWFyZChtdXRleCkoJml0NjYyNS0+aXQ2NjI1X2xvY2spOw0KPj4gKw0KPj4g KwkvKg0KPj4gKwkgKiBSRUdfTUlQSV9DRkdbMDoyXSBsYW5lIGNvdW50IGZpZWxkOiAxIGxhbmUg LT4gMCwgMiBsYW5lcyAtPiAxLA0KPj4gKwkgKiAzIGxhbmVzIChDLVBIWSBvbmx5KSAtPiAzLCA0 IGxhbmVzIChELVBIWSBvbmx5KSAtPiAzLg0KPj4gKwkgKi8NCj4+ICsJc3dpdGNoIChpdDY2MjUt PmNzaV9sYW5lcykgew0KPj4gKwljYXNlIDE6DQo+PiArCQl2YWwgPSBGSUVMRF9QUkVQKE1fTUlQ SV9MQU5FLCAwKTsNCj4+ICsJCWJyZWFrOw0KPj4gKwljYXNlIDI6DQo+PiArCQl2YWwgPSBGSUVM RF9QUkVQKE1fTUlQSV9MQU5FLCAxKTsNCj4+ICsJCWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4g KwkJdmFsID0gRklFTERfUFJFUChNX01JUElfTEFORSwgMyk7DQo+PiArCQlicmVhazsNCj4+ICsJ fQ0KPj4gKw0KPj4gKwlpZiAoaXQ2NjI1LT5idXNfdHlwZSA9PSBWNEwyX01CVVNfQ1NJMl9EUEhZ KQ0KPj4gKwkJdmFsIHw9IEZJRUxEX1BSRVAoQl9NSVBJX0RQSFksIDEpOw0KPj4gKw0KPj4gKwlp ZiAoaXQ2NjI1LT5wb3J0X251bSA9PSAyKQ0KPj4gKwkJdmFsIHw9IEZJRUxEX1BSRVAoQl9NSVBJ X1NQTElULCAxKTsNCj4+ICsNCj4+ICsJaXQ2NjI1X3dyaXRlX2J5dGUoaXQ2NjI1LCBSRUdfTUlQ SV9DRkcsIHZhbCk7DQo+PiArCWl0NjYyNV93cml0ZV9ieXRlKGl0NjYyNSwgUkVHX01JUElfREFU QV9UWVBFLCBpdDY2MjUtPmNzaV9mb3JtYXQpOw0KPj4gKwlpdDY2MjVfd3JpdGVfYnl0ZShpdDY2 MjUsIFJFR19NSVBJX0NPTlRST0wsIDB4MDApOw0KPj4gKwlpdDY2MjVfd3JpdGVfYnl0ZShpdDY2 MjUsIFJFR19SWF9DRkcsIDB4MDApOw0KPj4gKw0KPj4gKwlpdDY2MjVfc2V0X2JpdHMoaXQ2NjI1 LCBSRUdfSE9TVF9DVFJMX0lOVCwgQl9DT05GSUdfVVBEQVRFLCBCX0NPTkZJR19VUERBVEUpOw0K Pj4gKwlpdDY2MjVfd2FpdF9mb3Jfc3RhdHVzKGl0NjYyNSwgUkVHX0hPU1RfQ1RSTF9JTlQsIDB4 MDAsIDI1KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgZHVtcF9jZWNfbXNnKHN0cnVj dCBpdDY2MjUgKml0NjYyNSwgc3RydWN0IGNlY19tc2cgKm1zZywgY2hhciAqc3RyKQ0KPj4gK3sN Cj4+ICsJaW50IGk7DQo+PiArDQo+PiArCWRldl9kYmcoaXQ2NjI1LT5kZXYsICIlczogZnJvbSAl ZCB0byAlZCBsZW49JWQiLCBzdHIsDQo+PiArCQltc2ctPm1zZ1swXSA+PiA0LCBtc2ctPm1zZ1sw XSAmIDB4MGYsIG1zZy0+bGVuKTsNCj4+ICsJZm9yIChpID0gMTsgaSA8IG1zZy0+bGVuOyBpKysp DQo+PiArCQlkZXZfZGJnKGl0NjYyNS0+ZGV2LCAiICUwMngiLCBtc2ctPm1zZ1tpXSk7DQo+PiAr fQ0KPg0KPlRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeTogdGhlIGNlYyBjb2RlIGFscmVhZHkg aGFzIENFQyBkZWJ1Z2dpbmcgaW4gcGxhY2UuDQoNCkkgd2lsbCByZW1vdmUgaXQuDQo+PiArDQo+ PiArc3RhdGljIGludCBpdDY2MjVfY2VjX2FkYXBfZW5hYmxlKHN0cnVjdCBjZWNfYWRhcHRlciAq YWRhcCwgYm9vbCBlbmFibGUpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBh ZGFwLT5wcml2Ow0KPj4gKwl1OCBjbWRzWzJdOw0KPj4gKw0KPj4gKwljbWRzWzBdID0gQ01EX1NF VF9DRUNfRU5BQkxFOw0KPj4gKwljbWRzWzFdID0gZW5hYmxlID8gMSA6IDA7DQo+PiArCWd1YXJk KG11dGV4KSgmaXQ2NjI1LT5pdDY2MjVfbG9jayk7DQo+PiArCWl0NjYyNV93cml0ZV9jb21tYW5k KGl0NjYyNSwgY21kcywgc2l6ZW9mKGNtZHMpKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X2NlY19hZGFwX2xvZ19hZGRyKHN0cnVjdCBj ZWNfYWRhcHRlciAqYWRhcCwgdTggbG9nX2FkZHIpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1 ICppdDY2MjUgPSBhZGFwLT5wcml2Ow0KPj4gKw0KPj4gKwlkZXZfZGJnKGl0NjYyNS0+ZGV2LCAi JXM6IGxhPSVkIiwgX19mdW5jX18sIGxvZ19hZGRyKTsNCj4+ICsNCj4+ICsJaWYgKGxvZ19hZGRy ICE9IENFQ19MT0dfQUREUl9JTlZBTElEKSB7DQo+PiArCQl1OCBjbWRzWzJdID0ge0NNRF9TRVRf Q0VDX0xBLCBsb2dfYWRkcn07DQo+PiArDQo+PiArCQlndWFyZChtdXRleCkoJml0NjYyNS0+aXQ2 NjI1X2xvY2spOw0KPj4gKwkJaXQ2NjI1X3dyaXRlX2NvbW1hbmQoaXQ2NjI1LCBjbWRzLCBzaXpl b2YoY21kcykpOw0KPg0KPkhvdyBkbyB5b3UgY2xlYXIgdGhlIGxvZ2ljYWwgYWRkcmVzcz8gSWYg bG9nX2FkZHIgaXMgY2FsbGVkIHdpdGggQ0VDX0xPR19BRERSX0lOVkFMSUQsDQo+dGhlbiB0aGF0 IHNob3VsZCBjbGVhciB0aGUgY3VycmVudCBMQS4NCj4NCj5JIHN1c3BlY3QgdGhhdCBmb3IgdGhp cyBIVyB0aGUgTEEgc2hvdWxkIGJlIHNldCB0byAweGYsIGJ1dCBJIGNhbid0IGJlIGNlcnRhaW4u DQo+DQpzaW5jZSBjaGlwIGlzIEZXIGJhc2UsIGl0IGNhbiBlYXRoZXIgc2V0IExBIHRvIDB4RiBv ciBkaXNhYmxlIENFQy4NCg0KQSByZXNldCBMQSB0byAweEYgd2lsbCBhZGQgdG8gbmV4dCB2ZXJz aW9uLg0KDQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgaXQ2NjI1X2NlY19hZGFwX3RyYW5zbWl0KHN0cnVjdCBjZWNfYWRhcHRlciAqYWRh cCwgdTggYXR0ZW1wdHMsDQo+PiArCQkJCSAgICB1MzIgc2lnbmFsX2ZyZWVfdGltZSwgc3RydWN0 IGNlY19tc2cgKm1zZykNCj4+ICt7DQo+PiArCXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IGFkYXAt PnByaXY7DQo+PiArDQo+PiArCWR1bXBfY2VjX21zZyhpdDY2MjUsIG1zZywgIkNFQ19UWCIpOw0K Pj4gKw0KPj4gKwlndWFyZChtdXRleCkoJml0NjYyNS0+aXQ2NjI1X2xvY2spOw0KPj4gKwlpdDY2 MjVfd3JpdGVfYnl0ZXMoaXQ2NjI1LCBSRUdfQ0VDX1RYX0RBVEEsIG1zZy0+bXNnLCBtc2ctPmxl bik7DQo+PiArCWl0NjYyNV93cml0ZV9ieXRlKGl0NjYyNSwgUkVHX0NFQ19UWF9EQVRBX0xFTiwg bXNnLT5sZW4pOw0KPj4gKwlpdDY2MjVfc2V0X2JpdHMoaXQ2NjI1LCBSRUdfSE9TVF9DVFJMX0lO VCwgQl9DRUNfU0VORF9EQVRBLCBCX0NFQ19TRU5EX0RBVEEpOw0KPj4gKwlpdDY2MjVfd2FpdF9m b3Jfc3RhdHVzKGl0NjYyNSwgUkVHX0hPU1RfQ1RSTF9JTlQsIDB4MDAsIDI1KTsNCj4+ICsNCj4+ ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2VjX2Fk YXBfb3BzIGl0NjYyNV9jZWNfYWRhcF9vcHMgPSB7DQo+PiArCS5hZGFwX2VuYWJsZSA9IGl0NjYy NV9jZWNfYWRhcF9lbmFibGUsDQo+PiArCS5hZGFwX2xvZ19hZGRyID0gaXQ2NjI1X2NlY19hZGFw X2xvZ19hZGRyLA0KPj4gKwkuYWRhcF90cmFuc21pdCA9IGl0NjYyNV9jZWNfYWRhcF90cmFuc21p dCwNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYyNV9jZWNfaGFuZGxlcihzdHJ1 Y3QgaXQ2NjI1ICppdDY2MjUsIHU4IGludHN0YXR1cykNCj4+ICt7DQo+PiArCXN0cnVjdCBjZWNf bXNnIHJ4bXNnID0ge307DQo+PiArCWludCB2YWwgPSAwOw0KPj4gKw0KPj4gKwlpZiAoaW50c3Rh dHVzICYgQl9DRUNfUlhfUkVDRUlWRUQpIHsNCj4+ICsJCXNjb3BlZF9ndWFyZChtdXRleCwgJml0 NjYyNS0+aXQ2NjI1X2xvY2spIHsNCj4+ICsJCQl2YWwgPSBpdDY2MjVfcmVhZF9ieXRlKGl0NjYy NSwgUkVHX0NFQ19SWF9EQVRBX0xFTik7DQo+PiArCQkJaWYgKHZhbCA+IDAgJiYgdmFsIDw9IDE2 KQ0KPg0KPlVzZSBDRUNfTUFYX01TR19TSVpFIGluc3RlYWQgb2YgaGFyZGNvZGluZyAnMTYnLiBT YW1lIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLg0KPg0KDQp0aGlzIHdpbGwgdXBkYXRlIG5l eHQgdmVyc2lvbg0KDQo+PiArCQkJCWl0NjYyNV9yZWFkX2J5dGVzKGl0NjYyNSwgUkVHX0NFQ19S WF9EQVRBLCAmcnhtc2cubXNnWzBdLCB2YWwpOw0KPj4gKwkJCWl0NjYyNV93cml0ZV9ieXRlKGl0 NjYyNSwgUkVHX0NFQ19SWF9EQVRBX0xFTiwgMCk7DQo+PiArCQl9DQo+PiArDQo+PiArCQlpZiAo dmFsID4gMCAmJiB2YWwgPD0gMTYpIHsNCj4+ICsJCQlyeG1zZy5sZW4gPSB2YWw7DQo+PiArCQkJ Y2VjX3JlY2VpdmVkX21zZyhpdDY2MjUtPmNlY19hZGFwLCAmcnhtc2cpOw0KPj4gKwkJCWR1bXBf Y2VjX21zZyhpdDY2MjUsICZyeG1zZywgIkNFQ19SWCIpOw0KPj4gKwkJfSBlbHNlIHsNCj4+ICsJ CQlkZXZfZXJyKGl0NjYyNS0+ZGV2LCAiaW52YWxpZCBDRUMgUlggbGVuZ3RoICVkIiwgdmFsKTsN Cj4+ICsJCX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAoaW50c3RhdHVzICYgQl9DRUNfVFhfVVBE QVRFKSB7DQo+PiArCQl2YWwgPSBpdDY2MjVfcmVhZF9ieXRlKGl0NjYyNSwgUkVHX0NFQ19TVEFU VVMpOw0KPj4gKwkJaWYgKHZhbCA8IDApIHsNCj4+ICsJCQlkZXZfZXJyKGl0NjYyNS0+ZGV2LCAi cmVhZCBDRUMgc3RhdHVzIGZhaWxlZCIpOw0KPj4gKwkJCXJldHVybjsNCj4+ICsJCX0NCj4+ICsN Cj4+ICsJCWlmICh2YWwgJiBCSVQoMCkpIHsNCj4+ICsJCQljZWNfdHJhbnNtaXRfYXR0ZW1wdF9k b25lKGl0NjYyNS0+Y2VjX2FkYXAsDQo+PiArCQkJCQkJICBDRUNfVFhfU1RBVFVTX09LKTsNCj4+ ICsJCX0gZWxzZSBpZiAodmFsICYgQklUKDEpKSB7DQo+PiArCQkJY2VjX3RyYW5zbWl0X2F0dGVt cHRfZG9uZShpdDY2MjUtPmNlY19hZGFwLA0KPj4gKwkJCQkJCSAgQ0VDX1RYX1NUQVRVU19OQUNL KTsNCj4+ICsJCX0gZWxzZSB7DQo+PiArCQkJZGV2X2VycihpdDY2MjUtPmRldiwgInVua25vd24g Q0VDIHN0YXR1cyAlMDJYIiwgdmFsKTsNCj4NCj5UaGlzIHByb2JhYmx5IHNob3VsZCBiZSBkZXZf aW5mby4gSWYgdGhlIGhhcmR3YXJlIHJldHVybnMgYSBrbm93biBiYWQgdmFsdWUsDQo+dGhlbiB0 aGlzIHdvdWxkIGJlIGFuIGVycm9yLiBCdXQgaWYgaXQgaXMgYSB2YWxpZCB2YWx1ZSwgYnV0IHlv dSBqdXN0IGRvIG5vdA0KPmtub3cgd2hhdCBpdCBtZWFucywgdGhlbiBkZXZfaW5mbyBpcyBtb3Jl IGFwcHJvcHJpYXRlLg0KPg0KDQp0aGlzIHdpbGwgdXBkYXRlIG5leHQgdmVyc2lvbg0KDQo+PiAr CQkJY2VjX3RyYW5zbWl0X2F0dGVtcHRfZG9uZShpdDY2MjUtPmNlY19hZGFwLA0KPj4gKwkJCQkJ CSAgQ0VDX1RYX1NUQVRVU19OQUNLKTsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgdm9pZCBpdDY2MjVfaXJxX2Zvcm1hdF9jaGFuZ2Uoc3RydWN0IGl0NjYyNSAqaXQ2 NjI1KQ0KPj4gK3sNCj4+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZpdDY2MjUtPnNkOw0K Pj4gKwlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzIHRpbWluZ3M7DQo+PiArCWNvbnN0IHN0cnVjdCB2 NGwyX2V2ZW50IGl0NjYyNV9ldl9mbXQgPSB7DQo+PiArCQkudHlwZSA9IFY0TDJfRVZFTlRfU09V UkNFX0NIQU5HRSwNCj4+ICsJCS51LnNyY19jaGFuZ2UuY2hhbmdlcyA9IFY0TDJfRVZFTlRfU1JD X0NIX1JFU09MVVRJT04sDQo+PiArCX07DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCWlmIChu b19zaWduYWwoaXQ2NjI1KSkNCj4NCj5JZiB0aGUgc2lnbmFsIGRpc2FwcGVhcnMsIHRoZW4gYWxz byByYWlzZSB0aGUgU09VUkNFX0NIQU5HRSBldmVudC4NCj5JIHRoaW5rIHRoYXQgaXMgbWlzc2lu ZyBoZXJlLg0KPg0KDQp0aGlzIHdpbGwgdXBkYXRlIG5leHQgdmVyc2lvbg0KDQo+PiArCQlyZXR1 cm47DQo+PiArDQo+PiArCXJldCA9IGl0NjYyNV9nZXRfZGV0ZWN0ZWRfdGltaW5ncyhpdDY2MjUs ICZ0aW1pbmdzKTsNCj4+ICsJaWYgKHJldCA8IDApIHsNCj4+ICsJCXY0bDJfZGJnKDEsIGRlYnVn LCBzZCwgIkZhaWxlZCB0byBnZXQgZGV0ZWN0ZWQgdGltaW5ncyIpOw0KPj4gKwkJcmV0dXJuOw0K Pj4gKwl9DQo+PiArDQo+PiArCWlmIChzZC0+ZGV2bm9kZSkNCj4+ICsJCXY0bDJfc3ViZGV2X25v dGlmeV9ldmVudChzZCwgJml0NjYyNV9ldl9mbXQpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMg dm9pZCBpdDY2MjVfaXJxX2hkbWlfYXVkaW9fY2hhbmdlKHN0cnVjdCBpdDY2MjUgKml0NjYyNSkN Cj4+ICt7DQo+PiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmaXQ2NjI1LT5zZDsNCj4+ICsN Cj4+ICsJaXQ2NjI1X3NfY3RybF9hdWRpb19zYW1wbGluZ19yYXRlKHNkKTsNCj4+ICsJaXQ2NjI1 X3NfY3RybF9hdWRpb19wcmVzZW50KHNkKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQg aXQ2NjI1X2dldF90aW1pbmdzKHN0cnVjdCBpdDY2MjUgKml0NjYyNSwNCj4+ICsJCQkgICAgICAg c3RydWN0IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncykNCj4+ICt7DQo+PiArCWd1YXJkKG11dGV4 KSgmaXQ2NjI1LT5pdDY2MjVfbG9jayk7DQo+PiArCSp0aW1pbmdzID0gaXQ2NjI1LT50aW1pbmdz Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBpdDY2MjVfY2xlYXJfdGltaW5ncyhzdHJ1 Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiArew0KPj4gKwlndWFyZChtdXRleCkoJml0NjYyNS0+aXQ2 NjI1X2xvY2spOw0KPj4gKwltZW1zZXQoJml0NjYyNS0+dGltaW5ncywgMCwgc2l6ZW9mKGl0NjYy NS0+dGltaW5ncykpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBpdDY2MjVfaXJxX2hk bWlfNXZfY2hhbmdlKHN0cnVjdCBpdDY2MjUgKml0NjYyNSkNCj4+ICt7DQo+PiArCXN0cnVjdCB2 NGwyX3N1YmRldiAqc2QgPSAmaXQ2NjI1LT5zZDsNCj4+ICsNCj4+ICsJaXQ2NjI1X2NsZWFyX3Rp bWluZ3MoaXQ2NjI1KTsNCj4+ICsJaXQ2NjI1X3Y0bDJfc2RfY3RybF91cGRhdGUoc2QpOw0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBpdDY2MjVfaXJxX2hkY3BfY2hhbmdlKHN0cnVjdCBp dDY2MjUgKml0NjYyNSkNCj4+ICt7DQo+PiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmaXQ2 NjI1LT5zZDsNCj4+ICsJdTggY3Bfc3RzOw0KPj4gKw0KPj4gKwljcF9zdHMgPSBpdDY2MjVfcmVh ZF9ieXRlKGl0NjYyNSwgUkVHX1JYX0hEQ1BfU1RTKTsNCj4+ICsJdjRsMl9pbmZvKHNkLCAiSERD UCBjaGFuZ2UgdG8gJTAyWCIsIGNwX3N0cyk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lk IGl0NjYyNV9pcnFfaW5mb2ZyYW1lX2xhdGNoKHN0cnVjdCBpdDY2MjUgKml0NjYyNSkNCj4+ICt7 DQo+PiArCXU4IGluZm9fZnJhbWVbMzJdOw0KPj4gKw0KPj4gKwlndWFyZChtdXRleCkoJml0NjYy NS0+aXQ2NjI1X2xvY2spOw0KPj4gKw0KPj4gKwlpdDY2MjVfcmVhZF9ieXRlcyhpdDY2MjUsIFJF R19JRl9EQVRBLCBpbmZvX2ZyYW1lLCAzMSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lk IGl0NjYyNV9pcnFfZW1hdGFfcGFja2V0X2xhdGNoKHN0cnVjdCBpdDY2MjUgKml0NjYyNSkNCj4+ ICt7DQo+PiArCXU4IGV4dGVuZF9wYWNrZXRbMTRdOw0KPj4gKw0KPj4gKwlpdDY2MjVfcmVhZF9i eXRlcyhpdDY2MjUsIFJFR19FTVBfREFUQSwgZXh0ZW5kX3BhY2tldCwgMTMpOw0KPj4gK30NCj4+ ICsNCj4+ICtzdGF0aWMgdm9pZCBpdDY2MjVfaXJxX2F2bXV0ZV9jaGFuZ2Uoc3RydWN0IGl0NjYy NSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZpdDY2MjUt PnNkOw0KPj4gKwlpbnQgdmFsOw0KPj4gKwl1OCBhdm11dGU7DQo+PiArDQo+PiArCXZhbCA9IGl0 NjYyNV9yZWFkX2J5dGUoaXQ2NjI1LCBSRUdfUlhfU1RBVFVTKTsNCj4+ICsJaWYgKHZhbCA8IDAp DQo+PiArCQlyZXR1cm47DQo+PiArDQo+PiArCWF2bXV0ZSA9ICh2YWwgJiBCX1JYX0FWTVVURSkg PyAxIDogMDsNCj4+ICsJdjRsMl9pbmZvKHNkLCAiQVZNdXRlIGNoYW5nZSB0byAlZCIsIGF2bXV0 ZSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBib29sIGl0NjYyNV9pbnRlcnJ1cHRfaGFuZGxl cihzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiArew0KPj4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYg KnNkID0gJml0NjYyNS0+c2Q7DQo+PiArCWludCB2YWwsIGludF9zdHMxID0gMCwgaW50X3N0czIg PSAwOw0KPj4gKw0KPj4gKwl2YWwgPSBpdDY2MjVfcmVhZF9ieXRlKGl0NjYyNSwgUkVHX01DVV9J TlRFUlJVUFQpOw0KPj4gKwlpZiAodmFsIDw9IDApDQo+PiArCQlyZXR1cm4gZmFsc2U7DQo+PiAr DQo+PiArCWl0NjYyNV93cml0ZV9ieXRlKGl0NjYyNSwgUkVHX01DVV9JTlRFUlJVUFQsIHZhbCk7 DQo+PiArDQo+PiArCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIiVzOiBJTlQgPSAweCUwMlgiLCBf X2Z1bmNfXywgdmFsKTsNCj4+ICsNCj4+ICsJaWYgKHZhbCAmIChCX0NFQ19SWF9SRUNFSVZFRCB8 IEJfQ0VDX1RYX1VQREFURSkgJiYgaXQ2NjI1LT5jZWNfYWRhcCkNCj4+ICsJCWl0NjYyNV9jZWNf aGFuZGxlcihpdDY2MjUsIHZhbCAmIChCX0NFQ19SWF9SRUNFSVZFRCB8IEJfQ0VDX1RYX1VQREFU RSkpOw0KPj4gKw0KPj4gKwlpZiAodmFsICYgQl9TWVNfSU5UX0FDVElWRSkgew0KPj4gKwkJaW50 X3N0czEgPSBpdDY2MjVfcmVhZF9ieXRlKGl0NjYyNSwgUkVHX1JYX0lOVF9TVEFUVVMxKTsNCj4+ ICsJCWludF9zdHMyID0gaXQ2NjI1X3JlYWRfYnl0ZShpdDY2MjUsIFJFR19SWF9JTlRfU1RBVFVT Mik7DQo+PiArCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlczogaGRtaV9pbnQgPSAweCUwMlgg MHglMDJYIiwNCj4+ICsJCQkgX19mdW5jX18sIGludF9zdHMxLCBpbnRfc3RzMik7DQo+PiArDQo+ PiArCQlpZiAoaW50X3N0czEgPj0gMCkgew0KPj4gKwkJCWl0NjYyNV93cml0ZV9ieXRlKGl0NjYy NSwgUkVHX1JYX0lOVF9TVEFUVVMxLCAweDAwKTsNCj4+ICsJCQlpZiAoaW50X3N0czEgJiBCX0hE TUlfNVZfQ0hHKQ0KPj4gKwkJCQlpdDY2MjVfaXJxX2hkbWlfNXZfY2hhbmdlKGl0NjYyNSk7DQo+ PiArDQo+PiArCQkJaWYgKGludF9zdHMxICYgQl9IRE1JX1ZJRF9DSEcpDQo+PiArCQkJCWl0NjYy NV9pcnFfZm9ybWF0X2NoYW5nZShpdDY2MjUpOw0KPj4gKw0KPj4gKwkJCWlmIChpbnRfc3RzMSAm IEJfSERNSV9BVURfQ0hHKQ0KPj4gKwkJCQlpdDY2MjVfaXJxX2hkbWlfYXVkaW9fY2hhbmdlKGl0 NjYyNSk7DQo+PiArDQo+PiArCQkJaWYgKGludF9zdHMxICYgQl9IRE1JX0NQX0NIRykNCj4+ICsJ CQkJaXQ2NjI1X2lycV9oZGNwX2NoYW5nZShpdDY2MjUpOw0KPj4gKw0KPj4gKwkJCWlmIChpbnRf c3RzMSAmIEJfSERNSV9JRl9MQVRDSCkNCj4+ICsJCQkJaXQ2NjI1X2lycV9pbmZvZnJhbWVfbGF0 Y2goaXQ2NjI1KTsNCj4+ICsNCj4+ICsJCQlpZiAoaW50X3N0czEgJiBCX0hETUlfRU1QKQ0KPj4g KwkJCQlpdDY2MjVfaXJxX2VtYXRhX3BhY2tldF9sYXRjaChpdDY2MjUpOw0KPj4gKwkJfQ0KPj4g Kw0KPj4gKwkJaWYgKGludF9zdHMyID49IDApIHsNCj4+ICsJCQlpdDY2MjVfd3JpdGVfYnl0ZShp dDY2MjUsIFJFR19SWF9JTlRfU1RBVFVTMiwgMHgwMCk7DQo+PiArDQo+PiArCQkJaWYgKGludF9z dHMyICYgQl9IRE1JX0FWSSkNCj4+ICsJCQkJaXQ2NjI1X3Nob3dfYXZpX2luZm9mcmFtZShpdDY2 MjUpOw0KPj4gKw0KPj4gKwkJCWlmIChpbnRfc3RzMiAmIEJfSERNSV9OT19BVkkpDQo+PiArCQkJ CXY0bDJfaW5mbyhzZCwgIkFWSS1pbmZvIHN0b3BwZWQiKTsNCj4+ICsNCj4+ICsJCQlpZiAoaW50 X3N0czIgJiBCX0hETUlfQVZNVVRFX0NIRykNCj4+ICsJCQkJaXQ2NjI1X2lycV9hdm11dGVfY2hh bmdlKGl0NjYyNSk7DQo+PiArCQl9DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIHRydWU7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBpdDY2MjVfaXJxX2hhbmRsZXIoaW50 IHVudXNlZCwgdm9pZCAqZGF0YSkNCj4+ICt7DQo+PiArCXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9 IGRhdGE7DQo+PiArDQo+PiArCXJldHVybiBpdDY2MjVfaW50ZXJydXB0X2hhbmRsZXIoaXQ2NjI1 KSA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lk IGl0NjYyNV9pcnFfcG9sbF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkNCj4+ICt7DQo+PiAr CXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IHRpbWVyX2NvbnRhaW5lcl9vZihpdDY2MjUsIHQsIHRp bWVyKTsNCj4+ICsJdW5zaWduZWQgaW50IG1zZWNzOw0KPj4gKw0KPj4gKwlzY2hlZHVsZV93b3Jr KCZpdDY2MjUtPnBvbGxpbmdfd29yayk7DQo+PiArCS8qDQo+PiArCSAqIElmIENFQyBpcyBwcmVz ZW50LCB0aGVuIHdlIG5lZWQgdG8gcG9sbCBtb3JlIGZyZXF1ZW50bHksDQo+PiArCSAqIG90aGVy d2lzZSB3ZSB3aWxsIG1pc3MgQ0VDIG1lc3NhZ2VzLg0KPj4gKwkgKi8NCj4+ICsJbXNlY3MgPSBp dDY2MjUtPmNlY19hZGFwID8gUE9MTF9JTlRFUlZBTF9DRUNfTVMgOiBQT0xMX0lOVEVSVkFMX01T Ow0KPj4gKwltb2RfdGltZXIoJml0NjYyNS0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZm aWVzKG1zZWNzKSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYyNV9wb2xsaW5n X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGl0NjYy NSAqaXQ2NjI1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY2MjUsDQo+PiArCQkJCQlw b2xsaW5nX3dvcmspOw0KPj4gKw0KPj4gKwlpdDY2MjVfaW50ZXJydXB0X2hhbmRsZXIoaXQ2NjI1 KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfbG9nX3N0YXR1cyhzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGl0NjYyNSAqaXQ2NjI1ID0gc2Rf dG9fNjYyNShzZCk7DQo+PiArCXN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgdGltaW5ncywgY29uZmln dXJlZF90aW1pbmdzOw0KPj4gKw0KPj4gKwlpZiAoaXQ2NjI1X2dldF9kZXRlY3RlZF90aW1pbmdz KGl0NjYyNSwgJnRpbWluZ3MpKQ0KPj4gKwkJdjRsMl9pbmZvKHNkLCAiTm8gdmlkZW8gZGV0ZWN0 ZWQiKTsNCj4+ICsJZWxzZQ0KPj4gKwkJdjRsMl9wcmludF9kdl90aW1pbmdzKHNkLT5uYW1lLCAi RGV0ZWN0ZWQgZm9ybWF0OiAiLCAmdGltaW5ncywNCj4+ICsJCQkJICAgICAgdHJ1ZSk7DQo+PiAr DQo+PiArCWl0NjYyNV9nZXRfdGltaW5ncyhpdDY2MjUsICZjb25maWd1cmVkX3RpbWluZ3MpOw0K Pj4gKwl2NGwyX3ByaW50X2R2X3RpbWluZ3Moc2QtPm5hbWUsICJDb25maWd1cmVkIGZvcm1hdDog IiwNCj4+ICsJCQkgICAgICAmY29uZmlndXJlZF90aW1pbmdzLCB0cnVlKTsNCj4+ICsNCj4+ICsJ aXQ2NjI1X3Nob3dfYXZpX2luZm9mcmFtZShpdDY2MjUpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfaXNyKHN0cnVjdCB2NGwyX3N1YmRl diAqc2QsIHUzMiBzdGF0dXMsIGJvb2wgKmhhbmRsZWQpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2 NjI1ICppdDY2MjUgPSBzZF90b182NjI1KHNkKTsNCj4+ICsNCj4+ICsJc2NoZWR1bGVfd29yaygm aXQ2NjI1LT5wb2xsaW5nX3dvcmspOw0KPj4gKwkqaGFuZGxlZCA9IHRydWU7DQo+PiArDQo+PiAr CXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9zdWJzY3JpYmVf ZXZlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZmggKmZoLA0KPj4gKwkJ CQkgIHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiAqc3ViKQ0KPj4gK3sNCj4+ICsJc3dp dGNoIChzdWItPnR5cGUpIHsNCj4+ICsJY2FzZSBWNEwyX0VWRU5UX1NPVVJDRV9DSEFOR0U6DQo+ PiArCQlyZXR1cm4gdjRsMl9zcmNfY2hhbmdlX2V2ZW50X3N1YmRldl9zdWJzY3JpYmUoc2QsIGZo LCBzdWIpOw0KPj4gKwljYXNlIFY0TDJfRVZFTlRfQ1RSTDoNCj4+ICsJCXJldHVybiB2NGwyX2N0 cmxfc3ViZGV2X3N1YnNjcmliZV9ldmVudChzZCwgZmgsIHN1Yik7DQo+PiArCWRlZmF1bHQ6DQo+ PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsJfQ0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50 IGl0NjYyNV9nX2lucHV0X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0YXR1 cykNCj4+ICt7DQo+PiArCXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IHNkX3RvXzY2MjUoc2QpOw0K Pj4gKwlib29sIHZhbDsNCj4+ICsNCj4+ICsJdmFsID0gbm9fc2lnbmFsKGl0NjYyNSk7DQo+PiAr CSpzdGF0dXMgPSAwOw0KPj4gKwkqc3RhdHVzIHw9IHZhbCA/IFY0TDJfSU5fU1RfTk9fU0lHTkFM IDogMDsNCj4+ICsJKnN0YXR1cyB8PSB2YWwgPyBWNEwyX0lOX1NUX05PX1NZTkMgOiAwOw0KPj4g Kw0KPj4gKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlczogc3RhdHVzID0gMHgleCIsIF9fZnVu Y19fLCAqc3RhdHVzKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQNCj4+ICtpdDY2MjVfdXBkYXRlX3RpbWluZ3NfaWZfY2hhbmdlZChzdHJ1Y3QgaXQ2 NjI1ICppdDY2MjUsDQo+PiArCQkJCSBjb25zdCBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzICp0aW1p bmdzKQ0KPj4gK3sNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJZ3VhcmQobXV0ZXgpKCZpdDY2 MjUtPml0NjYyNV9sb2NrKTsNCj4+ICsJaWYgKHY0bDJfbWF0Y2hfZHZfdGltaW5ncygmaXQ2NjI1 LT50aW1pbmdzLCB0aW1pbmdzLCAwLCBmYWxzZSkpIHsNCj4+ICsJCXJldCA9IDA7DQo+PiArCX0g ZWxzZSBpZiAoIXY0bDJfdmFsaWRfZHZfdGltaW5ncyh0aW1pbmdzLCAmaXQ2NjI1X3RpbWluZ3Nf Y2FwLA0KPj4gKwkJCQkJICBOVUxMLCBOVUxMKSkgew0KPj4gKwkJcmV0ID0gLUVSQU5HRTsNCj4+ ICsJfSBlbHNlIHsNCj4+ICsJCWl0NjYyNS0+dGltaW5ncyA9ICp0aW1pbmdzOw0KPj4gKwkJcmV0 ID0gMTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgaW50IGl0NjYyNV9zX2R2X3RpbWluZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4+ ICsJCQkgICAgICAgc3RydWN0IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncykNCj4+ICt7DQo+PiAr CXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IHNkX3RvXzY2MjUoc2QpOw0KPj4gKwlpbnQgcmV0Ow0K Pj4gKw0KPj4gKwlpZiAoIXRpbWluZ3MpDQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ ICsJaWYgKGRlYnVnKQ0KPj4gKwkJdjRsMl9wcmludF9kdl90aW1pbmdzKHNkLT5uYW1lLCBfX2Z1 bmNfXywgdGltaW5ncywgZmFsc2UpOw0KPj4gKw0KPj4gKwlyZXQgPSBpdDY2MjVfdXBkYXRlX3Rp bWluZ3NfaWZfY2hhbmdlZChpdDY2MjUsIHRpbWluZ3MpOw0KPj4gKwlpZiAocmV0ID09IC1FUkFO R0UpIHsNCj4+ICsJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIiVzOiB0aW1pbmdzIG91dCBvZiBy YW5nZSIsIF9fZnVuY19fKTsNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJ aWYgKHJldCA9PSAwKSB7DQo+PiArCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlczogbm8gY2hh bmdlIiwgX19mdW5jX18pOw0KPj4gKwkJcmV0dXJuIDA7DQo+PiArCX0NCj4+ICsNCj4+ICsJaXQ2 NjI1X2VuYWJsZV9zdHJlYW0oaXQ2NjI1LCBmYWxzZSk7DQo+DQo+VGhpcyBkb2Vzbid0IGxvb2sg cmlnaHQuIFZpZGVvIG91dHB1dCBzaG91bGQgb25seSBiZSBlbmFibGVkIHdoZW4gdGhlIGJyaWRn ZSBkcml2ZXINCj5jYWxscyB0aGUgc19zdHJlYW0gb3AuIERvaW5nIGl0IGhlcmUgY2FuIGNhdXNl IHByb2JsZW1zIGlmIHRoZSByZW1haW5kZXIgb2YgdGhlDQo+dmlkZW8gcGlwZWxpbmUgaXNuJ3Qg cHJvcGVybHkgY29uZmlndXJlZC4NCj4NCg0KdGhpcyB3aWxsIHVwZGF0ZSBuZXh0IHZlcnNpb24N Cg0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2 MjVfZ19kdl90aW1pbmdzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+PiArCQkJICAgICAgIHN0 cnVjdCB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1 ICppdDY2MjUgPSBzZF90b182NjI1KHNkKTsNCj4+ICsNCj4+ICsJaXQ2NjI1X2dldF90aW1pbmdz KGl0NjYyNSwgdGltaW5ncyk7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW50IGl0NjYyNV9lbnVtX2R2X3RpbWluZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCwNCj4+ICsJCQkJICBzdHJ1Y3QgdjRsMl9lbnVtX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+PiAr ew0KPj4gKwlpZiAodGltaW5ncy0+cGFkICE9IDApDQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ ICsNCj4+ICsJcmV0dXJuIHY0bDJfZW51bV9kdl90aW1pbmdzX2NhcCh0aW1pbmdzLA0KPj4gKwkJ CQkJJml0NjYyNV90aW1pbmdzX2NhcCwgTlVMTCwgTlVMTCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgaXQ2NjI1X3F1ZXJ5X2R2X3RpbWluZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwN Cj4+ICsJCQkJICAgc3RydWN0IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncykNCj4+ICt7DQo+PiAr CXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IHNkX3RvXzY2MjUoc2QpOw0KPj4gKwlpbnQgcmV0Ow0K Pj4gKw0KPj4gKwlyZXQgPSBpdDY2MjVfZ2V0X2RldGVjdGVkX3RpbWluZ3MoaXQ2NjI1LCB0aW1p bmdzKTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArDQo+PiArCWlmIChk ZWJ1ZykNCj4+ICsJCXY0bDJfcHJpbnRfZHZfdGltaW5ncyhzZC0+bmFtZSwgX19mdW5jX18sIHRp bWluZ3MsIGZhbHNlKTsNCj4+ICsNCj4+ICsJaWYgKCF2NGwyX3ZhbGlkX2R2X3RpbWluZ3ModGlt aW5ncywgJml0NjYyNV90aW1pbmdzX2NhcCwgTlVMTCwgTlVMTCkpIHsNCj4+ICsJCXY0bDJfZGJn KDEsIGRlYnVnLCBzZCwgIiVzOiB0aW1pbmdzIG91dCBvZiByYW5nZSIsIF9fZnVuY19fKTsNCj4+ ICsJCXJldHVybiAtRVJBTkdFOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30N Cj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9kdl90aW1pbmdzX2NhcChzdHJ1Y3QgdjRsMl9z dWJkZXYgKnNkLA0KPj4gKwkJCQkgc3RydWN0IHY0bDJfZHZfdGltaW5nc19jYXAgKmNhcCkNCj4+ ICt7DQo+PiArCWlmIChjYXAtPnBhZCAhPSAwKQ0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiAr DQo+PiArCSpjYXAgPSBpdDY2MjVfdGltaW5nc19jYXA7DQo+PiArDQo+PiArCXJldHVybiAwOw0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9z dWJkZXYgKnNkLCBpbnQgZW5hYmxlKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGl0NjYyNSAqaXQ2NjI1 ID0gc2RfdG9fNjYyNShzZCk7DQo+PiArDQo+PiArCWl0NjYyNV9lbmFibGVfc3RyZWFtKGl0NjYy NSwgZW5hYmxlKTsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQg aXQ2NjI1X2VudW1fbWJ1c19jb2RlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+PiArCQkJCSBz dHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLA0KPj4gKwkJCQkgc3RydWN0IHY0bDJf c3ViZGV2X21idXNfY29kZV9lbnVtICpjb2RlKQ0KPj4gK3sNCj4+ICsJZGV2X2RiZyhzZC0+ZGV2 LCAiJXM6IGluZGV4PSVkIiwgX19mdW5jX18sIGNvZGUtPmluZGV4KTsNCj4+ICsNCj4+ICsJaWYg KGNvZGUtPmluZGV4ID49IEFSUkFZX1NJWkUoaXQ2NjI1X2Zvcm1hdHMpKQ0KPj4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+PiArDQo+PiArCWRldl9kYmcoc2QtPmRldiwgIiVzOiBjb2RlPTB4JTA4eCIs IF9fZnVuY19fLA0KPj4gKwkJaXQ2NjI1X2Zvcm1hdHNbY29kZS0+aW5kZXhdLm1idXNfZm10X2Nv ZGUpOw0KPj4gKwljb2RlLT5jb2RlID0gaXQ2NjI1X2Zvcm1hdHNbY29kZS0+aW5kZXhdLm1idXNf Zm10X2NvZGU7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMg aW50IGl0NjYyNV9nZXRfbWJ1c19jb25maWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4+ICsJ CQkJICB1bnNpZ25lZCBpbnQgcGFkLA0KPj4gKwkJCQkgIHN0cnVjdCB2NGwyX21idXNfY29uZmln ICpjZmcpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBzZF90b182NjI1KHNk KTsNCj4+ICsNCj4+ICsJaWYgKHBhZCAhPSAwKQ0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiAr DQo+PiArCWNmZy0+dHlwZSA9IGl0NjYyNS0+YnVzX3R5cGU7DQo+PiArCWNmZy0+YnVzLm1pcGlf Y3NpMi5mbGFncyA9IDA7DQo+PiArCWNmZy0+YnVzLm1pcGlfY3NpMi5udW1fZGF0YV9sYW5lcyA9 IGl0NjYyNS0+Y3NpX2xhbmVzOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+ PiArc3RhdGljIGludCBpdDY2MjVfcGFkX3NfZHZfdGltaW5ncyhzdHJ1Y3QgdjRsMl9zdWJkZXYg KnNkLCB1bnNpZ25lZCBpbnQgcGFkLA0KPj4gKwkJCQkgICBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdz ICp0aW1pbmdzKQ0KPj4gK3sNCj4+ICsJaWYgKHBhZCAhPSAwKQ0KPj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+PiArDQo+PiArCXJldHVybiBpdDY2MjVfc19kdl90aW1pbmdzKHNkLCB0aW1pbmdzKTsN Cj4NCj5XaHkgbm90IGp1c3QgbW92ZSB0aGUgaXQ2NjI1X3NfZHZfdGltaW5ncyBjb2RlIGhlcmU/ IERpdHRvIGZvciB0aGUgbmV4dCB0d28gZnVuY3Rpb25zLg0KPg0KDQpUaGV5IGFyZSBmb3IgdGVz dCBvbiA2LjYsIHdpbGwgbWVyZ2UgbmV4dCBwYXRjaC4NCg0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgaW50IGl0NjYyNV9wYWRfZ19kdl90aW1pbmdzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVu c2lnbmVkIGludCBwYWQsDQo+PiArCQkJCSAgIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgKnRpbWlu Z3MpDQo+PiArew0KPj4gKwlpZiAocGFkICE9IDApDQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ ICsNCj4+ICsJcmV0dXJuIGl0NjYyNV9nX2R2X3RpbWluZ3Moc2QsIHRpbWluZ3MpOw0KPj4gK30N Cj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9wYWRfcXVlcnlfZHZfdGltaW5ncyhzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkLA0KPj4gKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHBhZCwNCj4+ICsJ CQkJICAgICAgIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+PiArew0KPj4gKwlp ZiAocGFkICE9IDApDQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsJcmV0dXJuIGl0 NjYyNV9xdWVyeV9kdl90aW1pbmdzKHNkLCB0aW1pbmdzKTsNCj4+ICt9DQo+PiArDQo+PiArc3Rh dGljIGlubGluZSB1MzIgZm9ybWF0X3RvX2NvbG9yc3BhY2UodTggY3NpX2Zvcm1hdCkNCj4+ICt7 DQo+PiArCXN3aXRjaCAoY3NpX2Zvcm1hdCkgew0KPj4gKwljYXNlIENTSV9SR0I0NDQ6DQo+PiAr CWNhc2UgQ1NJX1JHQjU1NToNCj4+ICsJY2FzZSBDU0lfUkdCNTY1Og0KPj4gKwljYXNlIENTSV9S R0I2NjY6DQo+PiArCWNhc2UgQ1NJX1JHQjg4ODoNCj4+ICsJY2FzZSBDU0lfUkdCXzEwYjoNCj4+ ICsJY2FzZSBDU0lfUkdCXzEyYjoNCj4+ICsJCXJldHVybiBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsN Cj4+ICsJY2FzZSBDU0lfWVVWNDIwXzhiX0w6DQo+PiArCWNhc2UgQ1NJX1lVVjQyMF84YjoNCj4+ ICsJY2FzZSBDU0lfWVVWNDIwXzEwYjoNCj4+ICsJY2FzZSBDU0lfWVVWNDIyXzhiOg0KPj4gKwlj YXNlIENTSV9ZVVY0MjJfMTBiOg0KPj4gKwljYXNlIENTSV9ZVVY0MjJfMTJiOg0KPj4gKwljYXNl IENTSV9ZVVY0MjBfMTBiX0w6DQo+PiArCWNhc2UgQ1NJX1lVVjQyMF8xMmI6DQo+PiArCWNhc2Ug Q1NJX1lVVjQ0NF84YjoNCj4+ICsJY2FzZSBDU0lfWVVWNDQ0XzEwYjoNCj4+ICsJY2FzZSBDU0lf WVVWNDQ0XzEyYjoNCj4+ICsJCXJldHVybiBWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5Ow0KPj4gKwlk ZWZhdWx0Og0KPj4gKwkJcmV0dXJuIDA7DQo+PiArCX0NCj4+ICt9DQo+PiArDQo+PiArc3RhdGlj IGNvbnN0IGNoYXIgKml0NjYyNV9jc2lfZm9ybWF0X25hbWUodTggY3NpX2Zvcm1hdCkNCj4+ICt7 DQo+PiArCXN3aXRjaCAoY3NpX2Zvcm1hdCkgew0KPj4gKwljYXNlIENTSV9ZVVY0MjJfOGI6DQo+ PiArCQlyZXR1cm4gIllVVjQyMiA4Yml0IjsNCj4+ICsJY2FzZSBDU0lfUkdCODg4Og0KPj4gKwkJ cmV0dXJuICJSR0I4ODggOGJpdCI7DQo+PiArCWNhc2UgQ1NJX1lVVjQ0NF84YjoNCj4+ICsJCXJl dHVybiAiWVVWNDQ0IDhiaXQiOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJcmV0dXJuICJ1bmtub3du IjsNCj4+ICsJfQ0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9nZXRfZm10KHN0 cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+PiArCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUg KnNkX3N0YXRlLA0KPj4gKwkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm9ybWF0KQ0K Pj4gK3sNCj4+ICsJc3RydWN0IGl0NjYyNSAqaXQ2NjI1ID0gc2RfdG9fNjYyNShzZCk7DQo+PiAr CXN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgdGltaW5nczsNCj4+ICsNCj4+ICsJaWYgKGZvcm1hdC0+ cGFkICE9IDApDQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsJaXQ2NjI1X2dldF90 aW1pbmdzKGl0NjYyNSwgJnRpbWluZ3MpOw0KPj4gKwlmb3JtYXQtPmZvcm1hdC53aWR0aCA9IHRp bWluZ3MuYnQud2lkdGg7DQo+PiArCWZvcm1hdC0+Zm9ybWF0LmhlaWdodCA9IHRpbWluZ3MuYnQu aGVpZ2h0Ow0KPj4gKwlmb3JtYXQtPmZvcm1hdC5maWVsZCA9IHRpbWluZ3MuYnQuaW50ZXJsYWNl ZCA9PSBWNEwyX0RWX0lOVEVSTEFDRUQgPw0KPj4gKwkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVS TEFDRUQgOiBWNEwyX0ZJRUxEX05PTkU7DQo+PiArDQo+PiArCWlmIChmb3JtYXQtPndoaWNoID09 IFY0TDJfU1VCREVWX0ZPUk1BVF9UUlkpIHsNCj4+ICsJCXN0cnVjdCB2NGwyX21idXNfZnJhbWVm bXQgKmZtdDsNCj4+ICsNCj4+ICsJCWZtdCA9IHY0bDJfc3ViZGV2X3N0YXRlX2dldF9mb3JtYXQo c2Rfc3RhdGUsIGZvcm1hdC0+cGFkKTsNCj4+ICsJCWZvcm1hdC0+Zm9ybWF0LmNvZGUgPSBmbXQt PmNvZGU7DQo+PiArCQlmb3JtYXQtPmZvcm1hdC5jb2xvcnNwYWNlID0gZm10LT5jb2xvcnNwYWNl Ow0KPj4gKwl9IGVsc2Ugew0KPj4gKwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmaXQ2NjI1LT5pdDY2 MjVfbG9jaykgew0KPj4gKwkJCWZvcm1hdC0+Zm9ybWF0LmNvbG9yc3BhY2UgPQ0KPj4gKwkJCQlm b3JtYXRfdG9fY29sb3JzcGFjZShpdDY2MjUtPmNzaV9mb3JtYXQpOw0KPj4gKwkJCWZvcm1hdC0+ Zm9ybWF0LmNvZGUgPSBpdDY2MjUtPm1idXNfZm10X2NvZGU7DQo+PiArCQl9DQo+PiArCX0NCj4+ ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X3Nl dF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4+ICsJCQkgIHN0cnVjdCB2NGwyX3N1YmRl dl9zdGF0ZSAqc2Rfc3RhdGUsDQo+PiArCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpm b3JtYXQpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBzZF90b182NjI1KHNk KTsNCj4+ICsJaW50IHJldDsNCj4+ICsJdTMyIG1idXNfZm10X2NvZGUgPSBmb3JtYXQtPmZvcm1h dC5jb2RlOw0KPj4gKw0KPj4gKwlyZXQgPSBpdDY2MjVfZ2V0X2ZtdChzZCwgc2Rfc3RhdGUsIGZv cm1hdCk7DQo+PiArCWZvcm1hdC0+Zm9ybWF0LmNvZGUgPSBtYnVzX2ZtdF9jb2RlOw0KPj4gKw0K Pj4gKwlpZiAocmV0KQ0KPj4gKwkJcmV0dXJuIHJldDsNCj4+ICsNCj4+ICsJcmV0ID0gaXQ2NjI1 X2NzaV9tYnVzX2NvZGVfaWR4KG1idXNfZm10X2NvZGUpOw0KPj4gKw0KPj4gKwlpZiAocmV0IDwg MCkgew0KPj4gKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLA0KPj4gKwkJCSAiJXM6IHVuc3VwcG9y dGVkIGZvcm1hdCBjb2RlIDB4JXgsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0IiwNCj4+ICsJCQkg X19mdW5jX18sIG1idXNfZm10X2NvZGUpOw0KPj4gKwkJcmV0ID0gMDsNCj4+ICsJCW1idXNfZm10 X2NvZGUgPSBpdDY2MjVfZm9ybWF0c1tyZXRdLm1idXNfZm10X2NvZGU7DQo+PiArCQlmb3JtYXQt PmZvcm1hdC5jb2RlID0gbWJ1c19mbXRfY29kZTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAoZm9y bWF0LT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZKSB7DQo+PiArCQlzdHJ1Y3QgdjRs Ml9tYnVzX2ZyYW1lZm10ICpmbXQ7DQo+PiArDQo+PiArCQlmbXQgPSB2NGwyX3N1YmRldl9zdGF0 ZV9nZXRfZm9ybWF0KHNkX3N0YXRlLCBmb3JtYXQtPnBhZCk7DQo+PiArCQlmbXQtPmNvZGUgPSBm b3JtYXQtPmZvcm1hdC5jb2RlOw0KPj4gKwkJZm10LT5jb2xvcnNwYWNlID0gZm9ybWF0X3RvX2Nv bG9yc3BhY2UoaXQ2NjI1X2Zvcm1hdHNbcmV0XS5jc2lfZm9ybWF0KTsNCj4+ICsJCWZvcm1hdC0+ Zm9ybWF0LmNvbG9yc3BhY2UgPSBmbXQtPmNvbG9yc3BhY2U7DQo+PiArCQl2NGwyX2RiZygxLCBk ZWJ1Zywgc2QsICIlczogdHJ5IGZvcm1hdCBjb2RlID0gMHgleCIsDQo+PiArCQkJIF9fZnVuY19f LCBmb3JtYXQtPmZvcm1hdC5jb2RlKTsNCj4+ICsJCXJldHVybiAwOw0KPj4gKwl9DQo+PiArDQo+ PiArCXNjb3BlZF9ndWFyZChtdXRleCwgJml0NjYyNS0+aXQ2NjI1X2xvY2spIHsNCj4+ICsJCWl0 NjYyNS0+Y3NpX2Zvcm1hdCA9IGl0NjYyNV9mb3JtYXRzW3JldF0uY3NpX2Zvcm1hdDsNCj4+ICsJ CWl0NjYyNS0+bWJ1c19mbXRfY29kZSA9IGZvcm1hdC0+Zm9ybWF0LmNvZGU7DQo+PiArCQlpdDY2 MjVfZW5hYmxlX3N0cmVhbV9sb2NrZWQoaXQ2NjI1LCBmYWxzZSk7DQo+PiArCQlpdDY2MjVfc2V0 X21pcGlfY29uZmlnX2xvY2tlZChpdDY2MjUsIGl0NjYyNS0+Y3NpX2Zvcm1hdCk7DQo+PiArCX0N Cj4+ICsNCj4+ICsJZm9ybWF0LT5mb3JtYXQuY29sb3JzcGFjZSA9IGZvcm1hdF90b19jb2xvcnNw YWNlKGl0NjYyNV9mb3JtYXRzW3JldF0uY3NpX2Zvcm1hdCk7DQo+PiArDQo+PiArCXJldHVybiAw Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9nX2VkaWQoc3RydWN0IHY0bDJf c3ViZGV2ICpzZCwNCj4+ICsJCQkgc3RydWN0IHY0bDJfc3ViZGV2X2VkaWQgKmVkaWQpDQo+PiAr ew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBzZF90b182NjI1KHNkKTsNCj4+ICsJaW50 IGVycjsNCj4+ICsNCj4+ICsJaWYgKGVkaWQtPnBhZCAhPSAwKQ0KPj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+PiArDQo+PiArCW1lbXNldChlZGlkLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKGVkaWQtPnJl c2VydmVkKSk7DQo+PiArDQo+PiArCWlmIChlZGlkLT5ibG9ja3MgPT0gMCkgew0KPj4gKwkJZWRp ZC0+YmxvY2tzID0gRURJRF9OVU1fQkxPQ0tTX01BWDsNCj4+ICsJCXJldHVybiAwOw0KPj4gKwl9 DQo+PiArDQo+PiArCWlmIChlZGlkLT5zdGFydF9ibG9jayA+PSBFRElEX05VTV9CTE9DS1NfTUFY KSB7DQo+PiArCQllZGlkLT5ibG9ja3MgPSAwOw0KPj4gKwkJcmV0dXJuIDA7DQo+PiArCX0NCj4+ ICsNCj4+ICsJaWYgKGVkaWQtPmJsb2NrcyA+IEVESURfTlVNX0JMT0NLU19NQVggLSBlZGlkLT5z dGFydF9ibG9jaykNCj4+ICsJCWVkaWQtPmJsb2NrcyA9IEVESURfTlVNX0JMT0NLU19NQVggLSBl ZGlkLT5zdGFydF9ibG9jazsNCj4+ICsNCj4+ICsJZXJyID0gaXQ2NjI1X3JlYWRfZWRpZChpdDY2 MjUsIGVkaWQtPmVkaWQsIGVkaWQtPnN0YXJ0X2Jsb2NrLA0KPj4gKwkJCSAgICAgICBlZGlkLT5i bG9ja3MpOw0KPg0KPlRoaXMgYWx3YXlzIHJlYWRzIDQgRURJRCBibG9ja3MsIGV2ZW4gaWYgdGhl IEVESUQgaGFzIGZld2VyIGJsb2Nrcy4NCj4NCj5Zb3Ugc2hvdWxkIGRldGVybWluZSB0aGUgYWN0 dWFsIG51bWJlciBvZiBibG9ja3MuIEVhc2llc3QgaXMganVzdCB0bw0KPnN0b3JlIHRoYXQgd2hl biBzX2VkaWQgaXMgY2FsbGVkIHNvIHlvdSBrbm93IGhvdyBtYW55IGJsb2NrcyB0aGUgRURJRA0K Pmhhcy4NCj4NCg0Kd2lsbCB1cGRhdGUgb24gbmV4dCB2ZXJzaW9uDQoNCj4+ICsNCj4+ICsJcmV0 dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2 NjI1X3NfZWRpZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPj4gKwkJCSBzdHJ1Y3QgdjRsMl9z dWJkZXZfZWRpZCAqZWRpZCkNCj4+ICt7DQo+PiArCXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IHNk X3RvXzY2MjUoc2QpOw0KPj4gKwlpbnQgZXJyID0gMDsNCj4+ICsJdTE2IHBhOw0KPj4gKwlpbnQg cGFfZXJyOw0KPj4gKw0KPj4gKwlpZiAoZWRpZC0+cGFkICE9IDApIHsNCj4+ICsJCXY0bDJfZXJy KHNkLCAiaW52YWxpZCBwYWQgJWQiLCBlZGlkLT5wYWQpOw0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7 DQo+PiArCX0NCj4+ICsNCj4+ICsJbWVtc2V0KGVkaWQtPnJlc2VydmVkLCAwLCBzaXplb2YoZWRp ZC0+cmVzZXJ2ZWQpKTsNCj4+ICsNCj4+ICsJaWYgKGVkaWQtPnN0YXJ0X2Jsb2NrICE9IDApIHsN Cj4+ICsJCXY0bDJfZXJyKHNkLCAic3RhcnRfYmxvY2sgbXVzdCBiZSAwIGZvciBzZXQgZWRpZCIp Ow0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKGVkaWQtPmJs b2NrcyA+IEVESURfTlVNX0JMT0NLU19NQVgpIHsNCj4+ICsJCXY0bDJfZXJyKHNkLCAidG9vIG1h bnkgZWRpZCBibG9ja3M6ICVkIiwgZWRpZC0+YmxvY2tzKTsNCj4+ICsJCWVkaWQtPmJsb2NrcyA9 IEVESURfTlVNX0JMT0NLU19NQVg7DQo+PiArCQlyZXR1cm4gLUUyQklHOw0KPj4gKwl9DQo+PiAr DQo+PiArCWl0NjYyNV9kaXNhYmxlX2hwZChpdDY2MjUpOw0KPj4gKw0KPj4gKwlpZiAoZWRpZC0+ YmxvY2tzID09IDApIHsNCj4+ICsJCWNlY19waHlzX2FkZHJfaW52YWxpZGF0ZShpdDY2MjUtPmNl Y19hZGFwKTsNCj4+ICsJCXJldHVybiAwOw0KPj4gKwl9DQo+PiArDQo+PiArCWVyciA9IGl0NjYy NV93cml0ZV9lZGlkKGl0NjYyNSwgZWRpZC0+ZWRpZCwNCj4+ICsJCQkJZWRpZC0+c3RhcnRfYmxv Y2ssIGVkaWQtPmJsb2Nrcyk7DQo+PiArCWlmIChlcnIgPCAwKSB7DQo+PiArCQl2NGwyX2Vycihz ZCwgIndyaXRlIGVkaWQgZmFpbGVkIik7DQo+PiArCX0gZWxzZSB7DQo+PiArCQlwYSA9IGNlY19n ZXRfZWRpZF9waHlzX2FkZHIoZWRpZC0+ZWRpZCwgZWRpZC0+YmxvY2tzICogMTI4LCBOVUxMKTsN Cj4NCj5UaGlzIGNvZGUgaXMgd3JvbmcuIFVzZSB0aGlzOg0KPg0KPiAgICAgICAgcGEgPSB2NGwy X2dldF9lZGlkX3BoeXNfYWRkcihlZGlkLT5lZGlkLCBlZGlkLT5ibG9ja3MgKiAxMjgsIE5VTEwp Ow0KPiAgICAgICAgZXJyID0gdjRsMl9waHlzX2FkZHJfdmFsaWRhdGUocGEsICZwYXJlbnRfcGEs IE5VTEwpOw0KPiAgICAgICAgaWYgKGVycikNCj4gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsN Cj4NCj5UaGlzIHZhbGlkYXRlIGNoZWNrIG11c3QgYmUgZG9uZSBiZWZvcmUgeW91IHdyaXRlIHRo ZSBuZXcgRURJRC4NCj4NCj4JY2VjX3NfcGh5c19hZGRyKGl0NjYyNS0+Y2VjX2FkYXAsIHBhcmVu dF9wYSwgZmFsc2UpOw0KPg0KPkFuZCB0aGlzIGNlY19zX3BoeXNfYWRkciBjYWxsIHNob3VsZCBi ZSBkb25lIGFmdGVyIHRoZSBFRElEIHdhcyB3cml0dGVuLg0KPg0KDQp0aGFua3MgZm9yIHlvdXIg YWR2aWNlLCBJIHdpbGwgcGF0Y2ggdGhpcyBvbiBuZXh0IHdlZWsuDQoNCg0KPj4gKwkJcGFfZXJy ID0gcGEgPT0gQ0VDX1BIWVNfQUREUl9JTlZBTElEID8gLUVJTlZBTCA6DQo+PiArCQkJIHY0bDJf cGh5c19hZGRyX3ZhbGlkYXRlKHBhLCBOVUxMLCBOVUxMKTsNCj4+ICsJCWlmIChwYV9lcnIpIHsN Cj4+ICsJCQl2NGwyX3dhcm4oc2QsICJpbnZhbGlkIENFQyBwaHlzaWNhbCBhZGRyZXNzIGluIEVE SUQiKTsNCj4+ICsJCQljZWNfcGh5c19hZGRyX2ludmFsaWRhdGUoaXQ2NjI1LT5jZWNfYWRhcCk7 DQo+PiArCQl9IGVsc2Ugew0KPj4gKwkJCWNlY19zX3BoeXNfYWRkcihpdDY2MjUtPmNlY19hZGFw LCBwYSwgZmFsc2UpOw0KPj4gKwkJfQ0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChoZG1pXzV2X3Bv d2VyX3ByZXNlbnQoaXQ2NjI1KSkgew0KPj4gKwkJaXQ2NjI1X2VuYWJsZV9ocGQoaXQ2NjI1KTsN Cj4+ICsJCWl0NjYyNV9zX2N0cmxfZGV0ZWN0X2hkbWlfNXYoc2QpOw0KPj4gKwl9IGVsc2Ugew0K Pj4gKwkJaXQ2NjI1X2VuYWJsZV9hdXRvX2hwZChpdDY2MjUpOw0KPj4gKwl9DQo+PiArDQo+PiAr CXJldHVybiBlcnIgPCAwID8gZXJyIDogMDsNCj4+ICt9DQo+PiArDQo+PiArI2RlZmluZSBWNEwy X0NJRF9VU0VSX0lUNjYyNV9CQVNFCShWNEwyX0NJRF9VU0VSX0JBU0UgKyAweDExYjApDQo+DQo+ Q3VzdG9tIGRyaXZlciBjb250cm9scyBtdXN0IGJlIHJlc2VydmVkIGluIGluY2x1ZGUvdWFwaS9s aW51eC92NGwyLWNvbnRyb2xzLmguDQo+DQoNCkkgdGhpbmsgYWxsIHRoZXNlIEN1c3RvbSBkcml2 ZXIgY29udHJvbHMgY2FuIHJlbW92ZSBvciBtb3ZlIHRvIHByb3BlciBwbGFjZS4NCg0KDQo+PiAr I2RlZmluZSBJVDY2MjVfQ0lEX0FVRElPX1NBTVBMSU5HX1JBVEUgIChWNEwyX0NJRF9VU0VSX0lU NjYyNV9CQVNFICsgMCkNCj4+ICsjZGVmaW5lIElUNjYyNV9DSURfQVVESU9fUFJFU0VOVCAgICAg ICAgKFY0TDJfQ0lEX1VTRVJfSVQ2NjI1X0JBU0UgKyAxKQ0KPj4gKyNkZWZpbmUgSVQ2NjI1X0NJ RF9IRE1JX0lORk8gICAgICAgICAgICAoVjRMMl9DSURfVVNFUl9JVDY2MjVfQkFTRSArIDIpDQo+ PiArI2RlZmluZSBJVDY2MjVfQ0lEX01JUElfQ09ORklHICAgICAgICAgIChWNEwyX0NJRF9VU0VS X0lUNjYyNV9CQVNFICsgMykNCj4NCj5UeXBpY2FsbHkgYSBuZXcgcHVibGljIGhlYWRlciBpcyBj cmVhdGVkIGZvciB0aGUgZHJpdmVyIGNvbnRyb2xzLiBTZWUgZS5nLg0KPmluY2x1ZGUvdWFwaS9s aW51eC9ucGNtLXZpZGVvLmguIFRoZXNlIGNvbnRyb2xzIHNob3VsZCBiZSBkb2N1bWVudGVkIGlu DQo+dGhhdCBoZWFkZXIuDQo+DQo+PiArc3RhdGljIGludCBpdDY2MjVfZ192b2xhdGlsZV9jdHJs KHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2 MjUgPSBoZGxfdG9fNjYyNShjdHJsLT5oYW5kbGVyKTsNCj4+ICsJc3RydWN0IHY0bDJfc3ViZGV2 ICpzZCA9ICZpdDY2MjUtPnNkOw0KPj4gKw0KPj4gKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIl cywgaWQ9MHgleCwgdmFsPSVkIiwNCj4+ICsJCSBfX2Z1bmNfXywgY3RybC0+aWQsIGN0cmwtPnZh bCk7DQo+PiArDQo+PiArCXN3aXRjaCAoY3RybC0+aWQpIHsNCj4+ICsJY2FzZSBJVDY2MjVfQ0lE X0hETUlfSU5GTzoNCj4+ICsJCXNjb3BlZF9ndWFyZChtdXRleCwgJml0NjYyNS0+aXQ2NjI1X2xv Y2spIHsNCj4+ICsJCQlzbnByaW50ZihjdHJsLT5wX25ldy5wX2NoYXIsIGN0cmwtPm1heGltdW0s ICIlcyBAICV1SHoiLA0KPj4gKwkJCQkgaXQ2NjI1X2NzaV9mb3JtYXRfbmFtZShpdDY2MjUtPmNz aV9mb3JtYXQpLA0KPj4gKwkJCQkgZnBzX2Zyb21fYnRfdGltaW5ncygmaXQ2NjI1LT50aW1pbmdz LmJ0KSk7DQo+DQo+VGhpcyBpc24ndCBhIHZvbGF0aWxlIGNvbnRyb2w6IGluc3RlYWQsIHdoZW4g Y3NpX2Zvcm1hdCBvciB0aW1pbmdzLmJ0IGNoYW5nZSwNCj5qdXN0IHVwZGF0ZSB0aGlzIGNvbnRy b2wgd2l0aCB0aGUgbmV3IHZhbHVlLg0KPg0KPkJ1dCBJIHRoaW5rIHRoaXMgY29udHJvbCBzaG91 bGQgYmUgZHJvcHBlZCBhcyBkb24ndCBzZWUgYW55IHZhbHVlIGluIGl0Lg0KPg0KPklmIHlvdSBs aWtlLCB5b3UgY2FuIHJlcG9ydCB0aGlzIGluIGl0NjYyNV9sb2dfc3RhdHVzLCB0aGF0J3MgYSBt b3JlIGFwcHJvcHJpYXRlDQo+cGxhY2UuDQo+DQo+PiArCQl9DQo+PiArCQlicmVhazsNCj4+ICsJ Y2FzZSBJVDY2MjVfQ0lEX01JUElfQ09ORklHOg0KPj4gKwkJY3RybC0+dmFsID0gaXQ2NjI1X3Jl YWRfYnl0ZShpdDY2MjUsIFJFR19NSVBJX0RBVEFfVFlQRSk7DQo+DQo+SSB3b25kZXIgYWJvdXQg dGhpcyBjb250cm9sIGFzIHdlbGw6IHZvbGF0aWxlIGNvbnRyb2xzIGFyZSBtZWFudCBmb3IgY29u dHJvbHMgd2hlcmUNCj50aGUgdmFsdWUgaGFzIHRvIGJlIHJlYWQgZnJvbSB0aGUgaGFyZHdhcmUg YW5kIHRoYXQgdmFsdWUgY2FuIGNoYW5nZSBhdCBhbnkgbW9tZW50Lg0KPg0KPkEgdHlwaWNhbCBl eGFtcGxlIGlzIGlmIEFVVE9HQUlOIGlzIGVuYWJsZWQsIGFuZCB5b3UgcmVhZCB0aGUgY3VycmVu dCBHQUlOIHZhbHVlIGZyb20NCj50aGUgaGFyZHdhcmUuDQo+DQo+VGhlIE1JUElfREFUQV9UWVBF IGlzLCBJIHRoaW5rLCBjb250cm9sbGVkIGJ5IHRoZSBkcml2ZXIgYW5kIGRvZXMgbm90IHJhbmRv bWx5IGNoYW5nZS4NCj4NCj4+ICsJCWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJYnJlYWs7 DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBp bnQgaXQ2NjI1X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQ0KPj4gK3sNCj4+ICsJc3Ry dWN0IGl0NjYyNSAqaXQ2NjI1ID0gaGRsX3RvXzY2MjUoY3RybC0+aGFuZGxlcik7DQo+PiArCXN0 cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmaXQ2NjI1LT5zZDsNCj4+ICsNCj4+ICsJdjRsMl9kYmco MSwgZGVidWcsIHNkLCAiJXMsIGlkPTB4JXgsIHZhbD0lZCIsDQo+PiArCQkgX19mdW5jX18sIGN0 cmwtPmlkLCBjdHJsLT52YWwpOw0KPj4gKw0KPj4gKwlzd2l0Y2ggKGN0cmwtPmlkKSB7DQo+PiAr CWNhc2UgSVQ2NjI1X0NJRF9NSVBJX0NPTkZJRzoNCj4+ICsJCWl0NjYyNV9zZXRfbWlwaV9jb25m aWcoaXQ2NjI1LCBjdHJsLT52YWwpOw0KPg0KPldoeSBpcyB0aGlzIHNldHRhYmxlPyBJc24ndCB0 aGlzIGRlcml2ZWQgZnJvbSB0aGUgbWJ1c19jb2RlPyBUaGlzIGRvZXNuJ3QNCj5sb29rIHJpZ2h0 Lg0KPg0KPj4gKwkJYnJlYWs7DQo+PiArCWRlZmF1bHQ6DQo+PiArCQlyZXR1cm4gLUVJTlZBTDsN Cj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNv bnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBpdDY2MjVfY29yZV9vcHMgPSB7DQo+PiAr CS5sb2dfc3RhdHVzID0gaXQ2NjI1X2xvZ19zdGF0dXMsDQo+PiArCS5pbnRlcnJ1cHRfc2Vydmlj ZV9yb3V0aW5lID0gaXQ2NjI1X2lzciwNCj4+ICsJLnN1YnNjcmliZV9ldmVudCA9IGl0NjYyNV9z dWJzY3JpYmVfZXZlbnQsDQo+PiArCS51bnN1YnNjcmliZV9ldmVudCA9IHY0bDJfZXZlbnRfc3Vi ZGV2X3Vuc3Vic2NyaWJlLA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB2 NGwyX3N1YmRldl92aWRlb19vcHMgaXQ2NjI1X3ZpZGVvX29wcyA9IHsNCj4+ICsJLmdfaW5wdXRf c3RhdHVzID0gaXQ2NjI1X2dfaW5wdXRfc3RhdHVzLA0KPj4gKwkuc19zdHJlYW0gPSBpdDY2MjVf c19zdHJlYW0sDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3Vi ZGV2X3BhZF9vcHMgaXQ2NjI1X3BhZF9vcHMgPSB7DQo+PiArCS5lbnVtX21idXNfY29kZSA9IGl0 NjYyNV9lbnVtX21idXNfY29kZSwNCj4+ICsJLnNldF9mbXQgPSBpdDY2MjVfc2V0X2ZtdCwNCj4+ ICsJLmdldF9mbXQgPSBpdDY2MjVfZ2V0X2ZtdCwNCj4+ICsJLmdldF9lZGlkID0gaXQ2NjI1X2df ZWRpZCwNCj4+ICsJLnNldF9lZGlkID0gaXQ2NjI1X3NfZWRpZCwNCj4+ICsJLmVudW1fZHZfdGlt aW5ncyA9IGl0NjYyNV9lbnVtX2R2X3RpbWluZ3MsDQo+PiArCS5kdl90aW1pbmdzX2NhcCA9IGl0 NjYyNV9kdl90aW1pbmdzX2NhcCwNCj4+ICsJLmdldF9tYnVzX2NvbmZpZyA9IGl0NjYyNV9nZXRf bWJ1c19jb25maWcsDQo+PiArCS5zX2R2X3RpbWluZ3MgPSBpdDY2MjVfcGFkX3NfZHZfdGltaW5n cywNCj4+ICsJLmdfZHZfdGltaW5ncyA9IGl0NjYyNV9wYWRfZ19kdl90aW1pbmdzLA0KPj4gKwku cXVlcnlfZHZfdGltaW5ncyA9IGl0NjYyNV9wYWRfcXVlcnlfZHZfdGltaW5ncywNCj4+ICt9Ow0K Pj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGl0NjYyNV9vcHMg PSB7DQo+PiArCS5jb3JlID0gJml0NjYyNV9jb3JlX29wcywNCj4+ICsJLnZpZGVvID0gJml0NjYy NV92aWRlb19vcHMsDQo+PiArCS5wYWQgPSAmaXQ2NjI1X3BhZF9vcHMsDQo+PiArfTsNCj4+ICsN Cj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgaXQ2NjI1X2N0cmxfb3BzID0g ew0KPj4gKwkuZ192b2xhdGlsZV9jdHJsID0gaXQ2NjI1X2dfdm9sYXRpbGVfY3RybCwNCj4+ICsJ LnNfY3RybCA9IGl0NjYyNV9zX2N0cmwsDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qg c3RydWN0IHY0bDJfY3RybF9jb25maWcgaXQ2NjI1X2N0cmxfYXVkaW9fc2FtcGxpbmdfcmF0ZSA9 IHsNCj4+ICsJLmlkID0gSVQ2NjI1X0NJRF9BVURJT19TQU1QTElOR19SQVRFLA0KPj4gKwkubmFt ZSA9ICJBdWRpbyBzYW1wbGluZyByYXRlIiwNCj4NCj4iQXVkaW8gU2FtcGxpbmcgUmF0ZSINCj4N Cj4+ICsJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLA0KPj4gKwkubWluID0gMCwNCj4+ ICsJLm1heCA9IDc2ODAwMCwNCj4+ICsJLnN0ZXAgPSAxLA0KPj4gKwkuZGVmID0gMCwNCj4+ICsJ LmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZLA0KPj4gK307DQo+PiArDQo+PiArc3Rh dGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfY29uZmlnIGl0NjYyNV9jdHJsX2F1ZGlvX3ByZXNl bnQgPSB7DQo+PiArCS5pZCA9IElUNjYyNV9DSURfQVVESU9fUFJFU0VOVCwNCj4+ICsJLm5hbWUg PSAiQXVkaW8gcHJlc2VudCIsDQo+DQo+IkF1ZGlvIFByZXNlbnQiDQo+DQo+QnV0IHJhdGhlciB0 aGFuIG1ha2luZyB0aGVzZSB0d28gYXVkaW8gY29udHJvbHMgc3BlY2lmaWMgZm9yIHRoaXMgZHJp dmVyLCB0aGV5IHNob3VsZA0KPmJlIG1hZGUgc3RhbmRhcmQgY29udHJvbHMuIFRoZSB0YzM1ODc0 My5jIGRyaXZlciBoYXMgdGhlIHNhbWUgY29udHJvbHMuIEFuZCB0aGV5IGFyZQ0KPnR5cGljYWwg Zm9yIEhETUkgZHJpdmVycy4NCj4NCj5UaGV5IGNhbiBiZSBwYXJ0IG9mIHRoZSBEaWdpdGFsIFZp ZGVvIENvbnRyb2xzLg0KPg0KPj4gKwkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sDQo+ PiArCS5taW4gPSAwLA0KPj4gKwkubWF4ID0gMSwNCj4+ICsJLnN0ZXAgPSAxLA0KPj4gKwkuZGVm ID0gMCwNCj4+ICsJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZLA0KPj4gK307DQo+ PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfY29uZmlnIGl0NjYyNV9jdHJs X2dldF9oZG1pX2luZm8gPSB7DQo+PiArCS5vcHMgPSAmaXQ2NjI1X2N0cmxfb3BzLA0KPj4gKwku aWQgPSBJVDY2MjVfQ0lEX0hETUlfSU5GTywNCj4+ICsJLm5hbWUgPSAiSERNSSBJbmZvIiwNCj4+ ICsJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9TVFJJTkcsDQo+PiArCS5tYXggPSAxMjgsDQo+PiAr CS5zdGVwID0gMSwNCj4+ICsJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZIHwgVjRM Ml9DVFJMX0ZMQUdfVk9MQVRJTEUsDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHY0bDJfY3RybF9jb25maWcgaXQ2NjI1X2N0cmxfbWlwaV9jb25maWcgPSB7DQo+PiArCS5v cHMgPSAmaXQ2NjI1X2N0cmxfb3BzLA0KPj4gKwkuaWQgPSBJVDY2MjVfQ0lEX01JUElfQ09ORklH LA0KPj4gKwkubmFtZSA9ICJNSVBJIGNvbmZpZyIsDQo+DQo+Ik1JUEkgQ29uZmlnIg0KPg0KPj4g KwkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsDQo+PiArCS5taW4gPSAwLA0KPj4gKwku bWF4ID0gMHg3RkZGRkZGRiwNCj4+ICsJLnN0ZXAgPSAxLA0KPj4gKwkuZGVmID0gMHgzRSwNCj4+ ICsJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUsDQo+PiArfTsNCj4+ICsNCj4+ICtz dGF0aWMgaW50IGl0NjYyNV92NGwyX2luaXRfY29udHJvbHMoc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCkNCj4+ICt7DQo+PiArCXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IHNkX3RvXzY2MjUoc2QpOw0K Pj4gKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCA9ICZpdDY2MjUtPmhkbDsNCj4+ICsN Cj4+ICsJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDQpOw0KPj4gKwlpdDY2MjUtPmN0cmxf NXZfZGV0ZWN0ID0NCj4+ICsJCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgTlVMTCwgVjRMMl9DSURf RFZfUlhfUE9XRVJfUFJFU0VOVCwNCj4+ICsJCQkJICAwLCAxLCAwLCAwKTsNCj4+ICsNCj4+ICsJ aXQ2NjI1LT5jdHJsX2F1ZGlvX3NhbXBsaW5nX3JhdGUgPQ0KPj4gKwkJdjRsMl9jdHJsX25ld19j dXN0b20oaGRsLA0KPj4gKwkJCQkgICAgICZpdDY2MjVfY3RybF9hdWRpb19zYW1wbGluZ19yYXRl LA0KPj4gKwkJCQkgICAgIE5VTEwpOw0KPj4gKwlpdDY2MjUtPmN0cmxfYXVkaW9fcHJlc2VudCA9 DQo+PiArCQl2NGwyX2N0cmxfbmV3X2N1c3RvbShoZGwsICZpdDY2MjVfY3RybF9hdWRpb19wcmVz ZW50LCBOVUxMKTsNCj4+ICsJaXQ2NjI1LT5jdHJsX2xpbmtfZnJlcSA9DQo+PiArCQl2NGwyX2N0 cmxfbmV3X2ludF9tZW51KGhkbCwgTlVMTCwgVjRMMl9DSURfTElOS19GUkVRLA0KPj4gKwkJCQkg ICAgICAgQVJSQVlfU0laRShpdDY2MjVfbGlua19mcmVxKSAtIDEsDQo+PiArCQkJCSAgICAgICAw LCBpdDY2MjVfbGlua19mcmVxKTsNCj4+ICsJaXQ2NjI1LT5jdHJsX2dldF9oZG1pX2luZm8gPQ0K Pj4gKwkJdjRsMl9jdHJsX25ld19jdXN0b20oaGRsLCAmaXQ2NjI1X2N0cmxfZ2V0X2hkbWlfaW5m bywgTlVMTCk7DQo+PiArCWl0NjYyNS0+Y3RybF9taXBpX2NvbmZpZyA9DQo+PiArCQl2NGwyX2N0 cmxfbmV3X2N1c3RvbShoZGwsICZpdDY2MjVfY3RybF9taXBpX2NvbmZpZywgTlVMTCk7DQo+PiAr CWlmIChoZGwtPmVycm9yKSB7DQo+PiArCQl2NGwyX2VycihzZCwgIkZhaWxlZCB0byBpbml0aWFs aXplIGNvbnRyb2xzIik7DQo+PiArCQl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKGhkbCk7DQo+PiAr CQlyZXR1cm4gaGRsLT5lcnJvcjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlzZC0+Y3RybF9oYW5kbGVy ID0gaGRsOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZv aWQgaXQ2NjI1X3JlZ2R1bXBfcHJpbnQoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCB1OCAqcmVn X2J1ZikNCj4+ICt7DQo+PiArCWludCBpOw0KPj4gKw0KPj4gKwlzZXFfcHV0cyhzLCAiICAgICAw eDAwIDB4MDEgMHgwMiAweDAzIDB4MDQgMHgwNSAweDA2IDB4MDcgMHgwOCAweDA5IDB4MEEgMHgw QiAweDBDIDB4MEQgMHgwRSAweDBGXG4iKTsNCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IDI1 NjsgaSsrKSB7DQo+PiArCQlpZiAoaSAlIDE2ID09IDApDQo+PiArCQkJc2VxX3ByaW50ZihzLCAi WyUwMlhdICIsIGkgJiAweEYwKTsNCj4+ICsJCXNlcV9wcmludGYocywgIjB4JTAyWCAiLCByZWdf YnVmW2ldKTsNCj4+ICsJCWlmIChpICUgMTYgPT0gMTUpDQo+PiArCQkJc2VxX3B1dGMocywgJ1xu Jyk7DQo+PiArCX0NCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfZWRpZF9yYW1f c2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpDQo+PiArew0KPj4gKwlzdHJ1Y3Qg aXQ2NjI1ICppdDY2MjUgPSBzLT5wcml2YXRlOw0KPj4gKwl1OCByZWdfYnVmWzI1Nl07DQo+PiAr CWludCByZXQ7DQo+PiArDQo+PiArCXJldCA9IGl0NjYyNV9yZWFkX2VkaWQoaXQ2NjI1LCByZWdf YnVmLCAwLCAyKTsNCj4+ICsJaWYgKHJldCA8IDApDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKwlp dDY2MjVfcmVnZHVtcF9wcmludChzLCByZWdfYnVmKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+ PiArfQ0KPj4gK0RFRklORV9TSE9XX0FUVFJJQlVURShpdDY2MjVfZWRpZF9yYW0pOw0KPj4gKw0K Pj4gK3N0YXRpYyBpbnQgaXQ2NjI1X21pcGlfcmVnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2 b2lkICpkYXRhKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGl0NjYyNSAqaXQ2NjI1ID0gcy0+cHJpdmF0 ZTsNCj4+ICsJdTggcmVnX2J1ZlsyNTZdOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlzY29w ZWRfZ3VhcmQobXV0ZXgsICZpdDY2MjUtPml0NjYyNV9sb2NrKQ0KPj4gKwkJcmV0ID0gaXQ2NjI1 X3JlYWRfYnl0ZXMoaXQ2NjI1LCAweDAwLCByZWdfYnVmLCBzaXplb2YocmVnX2J1ZikpOw0KPj4g KwlpZiAocmV0IDwgMCkNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArCWl0NjYyNV9yZWdkdW1wX3By aW50KHMsIHJlZ19idWYpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIGludCBpdDY2MjVfbWlwaV9yZWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZSkNCj4+ICt7DQo+PiArCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpdDY2 MjVfbWlwaV9yZWdfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBzc2l6ZV90IGl0NjYyNV9taXBpX3JlZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwNCj4+ ICsJCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsDQo+PiArCQkJCSAgICAgc2l6 ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2 MjUgPSBmaWxlX2lub2RlKGZpbGUpLT5pX3ByaXZhdGU7DQo+PiArCWNoYXIgYnVmWzMyXSA9IHt9 Ow0KPj4gKwl1bnNpZ25lZCBpbnQgYWRkciwgdmFsOw0KPj4gKwlzc2l6ZV90IGxlbjsNCj4+ICsJ bG9mZl90IHBvcyA9IDA7DQo+PiArDQo+PiArCWxlbiA9IHNpbXBsZV93cml0ZV90b19idWZmZXIo YnVmLCBzaXplb2YoYnVmKSAtIDEsICZwb3MsIHVzZXJfYnVmLCBjb3VudCk7DQo+PiArCWlmIChs ZW4gPCAwKQ0KPj4gKwkJcmV0dXJuIGxlbjsNCj4+ICsJYnVmW2xlbl0gPSAnXDAnOw0KPj4gKw0K Pj4gKwlpZiAoc3NjYW5mKGJ1ZiwgIiVYICVYIiwgJmFkZHIsICZ2YWwpICE9IDIpDQo+PiArCQly ZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsJc2NvcGVkX2d1YXJkKG11dGV4LCAmaXQ2NjI1LT5p dDY2MjVfbG9jaykNCj4+ICsJCWl0NjYyNV93cml0ZV9ieXRlKGl0NjYyNSwgYWRkciwgdmFsKTsN Cj4+ICsNCj4+ICsJcmV0dXJuIGNvdW50Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpdDY2MjVfbWlwaV9yZWdfZm9wcyA9IHsNCj4+ICsJLm93 bmVyID0gVEhJU19NT0RVTEUsDQo+PiArCS5vcGVuID0gaXQ2NjI1X21pcGlfcmVnX29wZW4sDQo+ PiArCS5yZWFkID0gc2VxX3JlYWQsDQo+PiArCS53cml0ZSA9IGl0NjYyNV9taXBpX3JlZ193cml0 ZSwNCj4+ICsJLmxsc2VlayA9IHNlcV9sc2VlaywNCj4+ICsJLnJlbGVhc2UgPSBzaW5nbGVfcmVs ZWFzZSwNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYyNV9kZWJ1Z2ZzX2luaXQo c3RydWN0IGl0NjYyNSAqaXQ2NjI1LCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQ0KPj4gK3sN Cj4+ICsJaXQ2NjI1LT5kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZSgm Y2xpZW50LT5kZXYpLCBOVUxMKTsNCj4+ICsNCj4+ICsJZGVidWdmc19jcmVhdGVfZmlsZSgibWlw aV9yZWciLCAwNjAwLCBpdDY2MjUtPmRlYnVnZnNfZGlyLCBpdDY2MjUsDQo+PiArCQkJICAgICZp dDY2MjVfbWlwaV9yZWdfZm9wcyk7DQo+PiArCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImVkaWRfcmFt IiwgMDQwMCwgaXQ2NjI1LT5kZWJ1Z2ZzX2RpciwgaXQ2NjI1LA0KPj4gKwkJCSAgICAmaXQ2NjI1 X2VkaWRfcmFtX2ZvcHMpOw0KPg0KPkR1bXBpbmcgdGhlIEVESUQgUkFNIHNlZW1zIHBvaW50bGVz cyB0byBtZSwgZ2l2ZW4gdGhhdCB5b3UgY2FuIGdldCB0aGUgRURJRCBkYXRhDQo+d2l0aCBhbiBp b2N0bCBjYWxsIGF0IGFueSB0aW1lLiBJcyB0aGVyZSBhIHBhcnRpY3VsYXIgcmVhc29uIGZvciBh ZGRpbmcgdGhpcz8NCj4NCg0KVGhpcyBpcyBqdWVzdCBmb3IgaW50ZXJuYWwgRURJRCByYW0gZGVi dWcsIGR1bXAgRURJRCBmb3IgY2hlY2tpbmcgY3VycmVudCBFRElEIGRhdGEgaW4gcmFtLg0KDQoN Cj5XaGF0IHNob3VsZCBiZSBhZGRlZCBoZXJlIGlzIGNvZGUgdG8gZXhwb3J0IEluZm9GcmFtZXMg dG8gZGVidWdmcy4gU2VhcmNoIGZvcg0KPnY0bDJfZGVidWdmc19pZl9hbGxvYyBpbiBkcml2ZXJz L21lZGlhLg0KPg0KPkFsbCBuZXcgSERNSSByZWNlaXZlcnMgbXVzdCBzdXBwb3J0IHRoYXQuDQo+ DQoNCkkgd2lsbCBjaGVjayB0aGlzLiB0aGFua3MuDQoNCg0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgdm9pZCBpdDY2MjVfaW5pdF9kYXRhKHN0cnVjdCBpdDY2MjUgKml0NjYyNSkNCj4+ICt7DQo+ PiArCXN0YXRpYyBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzIGRlZmF1bHRfdGltaW5nID0NCj4+ICsJ CQlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQNjA7DQo+PiArDQo+PiArCWl0NjYyNS0+Y3NpX2xh bmVzID0gNDsNCj4+ICsJaXQ2NjI1LT5wb3J0X251bSA9IDE7DQo+PiArCWl0NjYyNS0+YnVzX3R5 cGUgPSBWNEwyX01CVVNfQ1NJMl9EUEhZOw0KPj4gKwlpdDY2MjUtPmNzaV9mb3JtYXQgPSBpdDY2 MjVfZm9ybWF0c1swXS5jc2lfZm9ybWF0Ow0KPj4gKwlpdDY2MjUtPm1idXNfZm10X2NvZGUgPSBp dDY2MjVfZm9ybWF0c1swXS5tYnVzX2ZtdF9jb2RlOw0KPj4gKwlpdDY2MjUtPnRpbWluZ3MgPSBk ZWZhdWx0X3RpbWluZzsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfcGFyc2Vf ZW5kcG9pbnQoc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gaXQ2NjI1LT5kZXY7DQo+PiArCS8qDQo+PiArCSAqIFByZS1zZXR0aW5nIGJ1c190 eXBlIGhlcmUgbWFrZXMgdjRsMl9md25vZGVfZW5kcG9pbnRfYWxsb2NfcGFyc2UoKQ0KPj4gKwkg KiB0cmVhdCBpdCBhcyBhIGhhcmQgcmVxdWlyZW1lbnQgYW5kIHJlamVjdCBhbnkgZW5kcG9pbnQg d2hvc2UgRFQNCj4+ICsJICogYnVzLXR5cGUgZGlzYWdyZWVzLCBzbyB0aGlzIG11c3Qgc3RheSBW NEwyX01CVVNfVU5LTk9XTiB0byBsZXQgaXQNCj4+ICsJICogYXV0b2RldGVjdCBDLVBIWSB2cyBE LVBIWSBmcm9tIHRoZSBlbmRwb2ludCBpdHNlbGYuDQo+PiArCSAqLw0KPj4gKwlzdHJ1Y3QgdjRs Ml9md25vZGVfZW5kcG9pbnQgZW5kcG9pbnQgPSB7IC5idXNfdHlwZSA9IFY0TDJfTUJVU19VTktO T1dOIH07DQo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZXAgPSBOVUxMOw0KPj4gKwl1bnNpZ25l ZCBpbnQgbWF4X2xhbmVzOw0KPj4gKwl1bnNpZ25lZCBpbnQgcG9ydDsNCj4+ICsJaW50IHJldDsN Cj4+ICsNCj4+ICsJLyoNCj4+ICsJICogcG9ydEAwIGFuZCBwb3J0QDEgYXJlIHRoZSB0d28gQ1NJ LTIgb3V0cHV0IHBvcnRzIE1JUEkwL01JUEkxDQo+PiArCSAqIChwb3J0QDIgaXMgdGhlIEhETUkg aW5wdXQpLiBUaGlzIGNoaXAgc2VyaWVzIGNhbiBkcml2ZSBib3RoDQo+PiArCSAqIHNpbXVsdGFu ZW91c2x5IGluIHNwbGl0IG9yIG1pcnJvciBtb2RlLCBzbyBwb3J0X251bSBjb3VudHMgaG93DQo+ PiArCSAqIG1hbnkgb2YgTUlQSTAvTUlQSTEgaGF2ZSBhbiBlbmRwb2ludCB3aXJlZCB1cC4gVGhp cyBkcml2ZXIgb25seQ0KPj4gKwkgKiB3aXJlcyB1cCBhIHNpbmdsZSBzb3VyY2UgcGFkLCBzbyBs YW5lL2J1cy10eXBlIGNvbmZpZ3VyYXRpb24gaXMNCj4+ICsJICogcGFyc2VkIGZyb20gd2hpY2hl dmVyIG9mIHRoZSB0d28gaXMgZm91bmQgZmlyc3QuDQo+PiArCSAqLw0KPj4gKwlpdDY2MjUtPnBv cnRfbnVtID0gMDsNCj4+ICsJZm9yIChwb3J0ID0gMDsgcG9ydCA8IDI7IHBvcnQrKykgew0KPj4g KwkJc3RydWN0IGRldmljZV9ub2RlICpwb3J0X2VwID0NCj4+ICsJCQlvZl9ncmFwaF9nZXRfZW5k cG9pbnRfYnlfcmVncyhkZXYtPm9mX25vZGUsIHBvcnQsIC0xKTsNCj4+ICsNCj4+ICsJCWlmICgh cG9ydF9lcCkNCj4+ICsJCQljb250aW51ZTsNCj4+ICsNCj4+ICsJCWl0NjYyNS0+cG9ydF9udW0r KzsNCj4+ICsJCWlmICghZXApDQo+PiArCQkJZXAgPSBwb3J0X2VwOw0KPj4gKwkJZWxzZQ0KPj4g KwkJCW9mX25vZGVfcHV0KHBvcnRfZXApOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmICghZXApIHsN Cj4+ICsJCWl0NjYyNS0+cG9ydF9udW0gPSAxOw0KPj4gKwkJZGV2X2RiZyhkZXYsICJubyBDU0kt MiBlbmRwb2ludCBub2RlIGZvdW5kLCB1c2luZyBkZWZhdWx0ICV1IENTSSBsYW5lcyIsDQo+PiAr CQkJaXQ2NjI1LT5jc2lfbGFuZXMpOw0KPj4gKwkJcmV0dXJuIDA7DQo+PiArCX0NCj4+ICsNCj4+ ICsJcmV0ID0gdjRsMl9md25vZGVfZW5kcG9pbnRfYWxsb2NfcGFyc2Uob2ZfZndub2RlX2hhbmRs ZShlcCksICZlbmRwb2ludCk7DQo+PiArCW9mX25vZGVfcHV0KGVwKTsNCj4+ICsJaWYgKHJldCkg ew0KPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcGFyc2UgZW5kcG9pbnQ6ICVkIiwgcmV0 KTsNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKGVuZHBvaW50LmJ1 c190eXBlICE9IFY0TDJfTUJVU19DU0kyX0RQSFkgJiYNCj4+ICsJICAgIGVuZHBvaW50LmJ1c190 eXBlICE9IFY0TDJfTUJVU19DU0kyX0NQSFkpIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAidW5zdXBw b3J0ZWQgYnVzIHR5cGUgJWQsIGV4cGVjdGVkIENTSS0yIEQtUEhZIG9yIEMtUEhZIiwNCj4+ICsJ CQllbmRwb2ludC5idXNfdHlwZSk7DQo+PiArCQl2NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVlKCZl bmRwb2ludCk7DQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAo ZW5kcG9pbnQuYnVzX3R5cGUgPT0gVjRMMl9NQlVTX0NTSTJfQ1BIWSAmJg0KPj4gKwkgICAgaXQ2 NjI1LT5jaGlwX3R5cGUgIT0gSVQ2NjI2X0NISVApIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAiSVQ2 NjI1IGRvZXMgbm90IHN1cHBvcnQgQy1QSFksIG9ubHkgSVQ2NjI2IGRvZXMiKTsNCj4+ICsJCXY0 bDJfZndub2RlX2VuZHBvaW50X2ZyZWUoJmVuZHBvaW50KTsNCj4+ICsJCXJldHVybiAtRUlOVkFM Ow0KPj4gKwl9DQo+PiArDQo+PiArCW1heF9sYW5lcyA9IChlbmRwb2ludC5idXNfdHlwZSA9PSBW NEwyX01CVVNfQ1NJMl9DUEhZKSA/IDMgOiA0Ow0KPj4gKw0KPj4gKwlpZiAoZW5kcG9pbnQuYnVz Lm1pcGlfY3NpMi5udW1fZGF0YV9sYW5lcyA9PSAwIHx8DQo+PiArCSAgICBlbmRwb2ludC5idXMu bWlwaV9jc2kyLm51bV9kYXRhX2xhbmVzID4gbWF4X2xhbmVzKSB7DQo+PiArCQlkZXZfZXJyKGRl diwNCj4+ICsJCQkiaW52YWxpZCBudW1iZXIgb2YgQ1NJIGRhdGEgbGFuZXM6ICV1IChtYXggJXUg Zm9yIHRoaXMgYnVzIHR5cGUpIiwNCj4+ICsJCQllbmRwb2ludC5idXMubWlwaV9jc2kyLm51bV9k YXRhX2xhbmVzLCBtYXhfbGFuZXMpOw0KPj4gKwkJdjRsMl9md25vZGVfZW5kcG9pbnRfZnJlZSgm ZW5kcG9pbnQpOw0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ICsNCj4+ICsJaXQ2 NjI1LT5jc2lfbGFuZXMgPSBlbmRwb2ludC5idXMubWlwaV9jc2kyLm51bV9kYXRhX2xhbmVzOw0K Pj4gKwlpdDY2MjUtPmJ1c190eXBlID0gZW5kcG9pbnQuYnVzX3R5cGU7DQo+PiArCXY0bDJfZndu b2RlX2VuZHBvaW50X2ZyZWUoJmVuZHBvaW50KTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X3BhcnNlX2R0KHN0cnVjdCBpdDY2MjUgKml0 NjYyNSkNCj4+ICt7DQo+PiArCXJldHVybiBpdDY2MjVfcGFyc2VfZW5kcG9pbnQoaXQ2NjI1KTsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfaW5pdF92NGwyX3N1YmRldihzdHJ1 Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiArew0KPj4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0g Jml0NjYyNS0+c2Q7DQo+PiArCWludCBlcnI7DQo+PiArDQo+PiArCXNkLT5kZXYgPSBpdDY2MjUt PmRldjsNCj4+ICsNCj4+ICsJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGl0NjYyNS0+aTJjX2Ns aWVudCwgJml0NjYyNV9vcHMpOw0KPj4gKwlzZC0+ZmxhZ3MgfD0gVjRMMl9TVUJERVZfRkxfSEFT X0RFVk5PREUgfCBWNEwyX1NVQkRFVl9GTF9IQVNfRVZFTlRTOw0KPj4gKwlpZiAoaXQ2NjI1X3Y0 bDJfaW5pdF9jb250cm9scyhzZCkpIHsNCj4+ICsJCWRldl9lcnIoaXQ2NjI1LT5kZXYsICJGYWls ZWQgdG8gaW5pdGlhbGl6ZSB2NGwyIGNvbnRyb2xzIik7DQo+PiArCQlyZXR1cm4gLUVOT01FTTsN Cj4+ICsJfQ0KPj4gKw0KPj4gKwlpdDY2MjUtPnBhZC5mbGFncyA9IE1FRElBX1BBRF9GTF9TT1VS Q0U7DQo+PiArCXNkLT5lbnRpdHkuZnVuY3Rpb24gPSBNRURJQV9FTlRfRl9DQU1fU0VOU09SOw0K Pj4gKwllcnIgPSBtZWRpYV9lbnRpdHlfcGFkc19pbml0KCZzZC0+ZW50aXR5LCAxLCAmaXQ2NjI1 LT5wYWQpOw0KPj4gKwlpZiAoZXJyIDwgMCkgew0KPj4gKwkJZGV2X2VycihpdDY2MjUtPmRldiwg IiVzICVkIGVycj0lZCIsIF9fZnVuY19fLCBfX0xJTkVfXywgZXJyKTsNCj4+ICsJCXY0bDJfY3Ry bF9oYW5kbGVyX2ZyZWUoc2QtPmN0cmxfaGFuZGxlcik7DQo+PiArCQlyZXR1cm4gZXJyOw0KPj4g Kwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0 NjYyNV9jaGVja19kZXZpY2Uoc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJc3Rh dGljIGNvbnN0IHU4IGNoaXBfaWRzW11bMl0gPSB7DQo+PiArCQl7IDB4NjYsIDB4MjUgfSwNCj4+ ICsJCXsgMHg2NiwgMHgyNiB9LA0KPj4gKwl9Ow0KPj4gKwlpbnQgY2hpcF9pZDAsIGNoaXBfaWQx Ow0KPj4gKw0KPj4gKwljaGlwX2lkMCA9IGl0NjYyNV9yZWFkX2J5dGUoaXQ2NjI1LCBSRUdfQ0hJ UF9JRF8wKTsNCj4+ICsJY2hpcF9pZDEgPSBpdDY2MjVfcmVhZF9ieXRlKGl0NjYyNSwgUkVHX0NI SVBfSURfMSk7DQo+PiArCWlmIChjaGlwX2lkMCAhPSBjaGlwX2lkc1tpdDY2MjUtPmNoaXBfdHlw ZV1bMF0gfHwNCj4+ICsJICAgIGNoaXBfaWQxICE9IGNoaXBfaWRzW2l0NjYyNS0+Y2hpcF90eXBl XVsxXSkgew0KPj4gKwkJZGV2X2VycihpdDY2MjUtPmRldiwNCj4+ICsJCQkiY2hpcCBJRCBtaXNt YXRjaDogZ290IDB4JTAyeCUwMngsIGV4cGVjdGVkIDB4JTAyeCUwMngiLA0KPj4gKwkJCWNoaXBf aWQwLCBjaGlwX2lkMSwNCj4+ICsJCQljaGlwX2lkc1tpdDY2MjUtPmNoaXBfdHlwZV1bMF0sDQo+ PiArCQkJY2hpcF9pZHNbaXQ2NjI1LT5jaGlwX3R5cGVdWzFdKTsNCj4+ICsJCXJldHVybiAtRU5P REVWOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgaW50IGl0NjYyNV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQ0KPj4gK3sNCj4+ ICsJc3RydWN0IGl0NjYyNSAqaXQ2NjI1Ow0KPj4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOw0K Pj4gKwlpbnQgZXJyOw0KPj4gKw0KPj4gKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNs aWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkNCj4+ICsJCXJldHVybiAt RUlPOw0KPj4gKw0KPj4gKwlpdDY2MjUgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXpl b2Yoc3RydWN0IGl0NjYyNSksIEdGUF9LRVJORUwpOw0KPj4gKwlpZiAoIWl0NjYyNSkNCj4+ICsJ CXJldHVybiAtRU5PTUVNOw0KPj4gKw0KPj4gKwlpdDY2MjUtPmNoaXBfdHlwZSA9ICh1aW50cHRy X3QpaTJjX2dldF9tYXRjaF9kYXRhKGNsaWVudCk7DQo+PiArDQo+PiArCWl0NjYyNS0+cmVzZXRf Z3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKCZjbGllbnQtPmRldiwgInJlc2V0IiwNCj4+ ICsJCQkJCQkgICAgIEdQSU9EX09VVF9ISUdIKTsNCj4+ICsJaWYgKElTX0VSUihpdDY2MjUtPnJl c2V0X2dwaW8pKQ0KPj4gKwkJcmV0dXJuIFBUUl9FUlIoaXQ2NjI1LT5yZXNldF9ncGlvKTsNCj4+ ICsNCj4+ICsJaWYgKGl0NjYyNS0+cmVzZXRfZ3Bpbykgew0KPj4gKwkJdXNsZWVwX3JhbmdlKDEw MDAsIDIwMDApOw0KPj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGl0NjYyNS0+cmVzZXRf Z3BpbywgMCk7DQo+PiArCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTsNCj4+ICsJfQ0KPj4g Kw0KPj4gKwllcnIgPSBpdDY2MjVfcmVnbWFwX2kyY19pbml0KGNsaWVudCwgaXQ2NjI1KTsNCj4+ ICsJaWYgKGVycikNCj4+ICsJCXJldHVybiBlcnI7DQo+PiArDQo+PiArCWVyciA9IGl0NjYyNV9j aGVja19kZXZpY2UoaXQ2NjI1KTsNCj4+ICsJaWYgKGVycikNCj4+ICsJCXJldHVybiBlcnI7DQo+ PiArDQo+PiArCWl0NjYyNV9pbml0X2RhdGEoaXQ2NjI1KTsNCj4+ICsNCj4+ICsJZXJyID0gaXQ2 NjI1X3BhcnNlX2R0KGl0NjYyNSk7DQo+PiArCWlmIChlcnIpDQo+PiArCQlyZXR1cm4gZXJyOw0K Pj4gKw0KPj4gKwltdXRleF9pbml0KCZpdDY2MjUtPml0NjYyNV9sb2NrKTsNCj4+ICsJSU5JVF9E RUxBWUVEX1dPUksoJml0NjYyNS0+aHBkX2RlbGF5ZWRfd29yaywgaXQ2NjI1X2hwZF9kZWxheWVk X3dvcmspOw0KPj4gKwlJTklUX1dPUksoJml0NjYyNS0+cG9sbGluZ193b3JrLCBpdDY2MjVfcG9s bGluZ193b3JrKTsNCj4+ICsNCj4+ICsJaWYgKGNsaWVudC0+aXJxKSB7DQo+PiArCQllcnIgPSBk ZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZjbGllbnQtPmRldiwgY2xpZW50LT5pcnEsDQo+PiAr CQkJCQkJTlVMTCwgaXQ2NjI1X2lycV9oYW5kbGVyLA0KPj4gKwkJCQkJCUlSUUZfVFJJR0dFUl9M T1cgfA0KPj4gKwkJCQkJCUlSUUZfT05FU0hPVCB8DQo+PiArCQkJCQkJSVJRRl9OT19BVVRPRU4s DQo+PiArCQkJCQkJIml0NjYyNSIsIGl0NjYyNSk7DQo+PiArCQlpZiAoZXJyKQ0KPj4gKwkJCXJl dHVybiBlcnI7DQo+PiArCX0gZWxzZSB7DQo+PiArCQlkZXZfaW5mbyhpdDY2MjUtPmRldiwgIm5v IElSUSwgZmFsbGluZyBiYWNrIHRvIHBvbGxpbmciKTsNCj4+ICsJCXRpbWVyX3NldHVwKCZpdDY2 MjUtPnRpbWVyLCBpdDY2MjVfaXJxX3BvbGxfdGltZXIsIDApOw0KPj4gKwl9DQo+PiArDQo+PiAr CXNkID0gJml0NjYyNS0+c2Q7DQo+PiArCWVyciA9IGl0NjYyNV9pbml0X3Y0bDJfc3ViZGV2KGl0 NjYyNSk7DQo+PiArCWlmIChlcnIpDQo+PiArCQlnb3RvIGVycl9jbGVhbl93b3JrX3F1ZXVlczsN Cj4+ICsNCj4+ICsJZXJyID0gdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoc2QtPmN0cmxfaGFuZGxl cik7DQo+PiArCWlmIChlcnIpDQo+PiArCQlnb3RvIGVycl9jbGVhbl9oZGw7DQo+PiArDQo+PiAr CWl0NjYyNS0+Y2VjX2FkYXAgPSBjZWNfYWxsb2NhdGVfYWRhcHRlcigmaXQ2NjI1X2NlY19hZGFw X29wcywNCj4+ICsJCQkJCQlpdDY2MjUsIGRldl9uYW1lKGl0NjYyNS0+ZGV2KSwNCj4+ICsJCQkJ CQlDRUNfQ0FQX0RFRkFVTFRTIHwNCj4+ICsJCQkJCQlDRUNfQ0FQX01PTklUT1JfQUxMIHwNCj4+ ICsJCQkJCQlDRUNfQ0FQX1BIWVNfQUREUiwNCj4+ICsJCQkJCQlDRUNfTUFYX0xPR19BRERSUyk7 DQo+PiArCWlmIChJU19FUlIoaXQ2NjI1LT5jZWNfYWRhcCkpIHsNCj4+ICsJCWVyciA9IFBUUl9F UlIoaXQ2NjI1LT5jZWNfYWRhcCk7DQo+PiArCQlkZXZfZXJyKGl0NjYyNS0+ZGV2LCAiJXMgJWQi LCBfX2Z1bmNfXywgX19MSU5FX18pOw0KPj4gKwkJZ290byBlcnJfY2xlYW5faGRsOw0KPj4gKwl9 DQo+PiArDQo+PiArCWVyciA9IGNlY19yZWdpc3Rlcl9hZGFwdGVyKGl0NjYyNS0+Y2VjX2FkYXAs ICZjbGllbnQtPmRldik7DQo+PiArCWlmIChlcnIgPCAwKSB7DQo+PiArCQlkZXZfZXJyKGl0NjYy NS0+ZGV2LCAiJXM6IGZhaWxlZCB0byByZWdpc3RlciB0aGUgY2VjIGRldmljZSIsIF9fZnVuY19f KTsNCj4+ICsJCWNlY19kZWxldGVfYWRhcHRlcihpdDY2MjUtPmNlY19hZGFwKTsNCj4+ICsJCWl0 NjYyNS0+Y2VjX2FkYXAgPSBOVUxMOw0KPj4gKwkJZ290byBlcnJfY2xlYW5faGRsOw0KPj4gKwl9 DQo+PiArDQo+PiArCWl0NjYyNV9kZWJ1Z2ZzX2luaXQoaXQ2NjI1LCBjbGllbnQpOw0KPj4gKw0K Pj4gKwlpdDY2MjVfaW5pdGlhbF9zZXR1cChpdDY2MjUpOw0KPj4gKwlpdDY2MjVfdjRsMl9zZF9j dHJsX3VwZGF0ZShzZCk7DQo+PiArDQo+PiArCWVyciA9IHY0bDJfYXN5bmNfcmVnaXN0ZXJfc3Vi ZGV2KHNkKTsNCj4+ICsJaWYgKGVyciA8IDApIHsNCj4+ICsJCWRldl9lcnIoaXQ2NjI1LT5kZXYs ICIlcyAlZCBlcnI9JWQiLCBfX2Z1bmNfXywgX19MSU5FX18sIGVycik7DQo+PiArCQlnb3RvIGVy cl9jbGVhbl9kZWJ1Z2ZzOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChjbGllbnQtPmlycSkNCj4+ ICsJCWVuYWJsZV9pcnEoY2xpZW50LT5pcnEpOw0KPj4gKwllbHNlDQo+PiArCQltb2RfdGltZXIo Jml0NjYyNS0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFBPTExfSU5URVJWQUxf TVMpKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArDQo+PiArZXJyX2NsZWFuX2RlYnVnZnM6 DQo+PiArCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShpdDY2MjUtPmRlYnVnZnNfZGlyKTsNCj4+ ICsJY2VjX3VucmVnaXN0ZXJfYWRhcHRlcihpdDY2MjUtPmNlY19hZGFwKTsNCj4+ICtlcnJfY2xl YW5faGRsOg0KPj4gKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc2QtPmVudGl0eSk7DQo+PiArCXY0 bDJfY3RybF9oYW5kbGVyX2ZyZWUoJml0NjYyNS0+aGRsKTsNCj4+ICsNCj4+ICtlcnJfY2xlYW5f d29ya19xdWV1ZXM6DQo+PiArCWlmICghY2xpZW50LT5pcnEpDQo+PiArCQl0aW1lcl9zaHV0ZG93 bl9zeW5jKCZpdDY2MjUtPnRpbWVyKTsNCj4+ICsJY2FuY2VsX3dvcmtfc3luYygmaXQ2NjI1LT5w b2xsaW5nX3dvcmspOw0KPj4gKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJml0NjYyNS0+aHBk X2RlbGF5ZWRfd29yayk7DQo+PiArCW11dGV4X2Rlc3Ryb3koJml0NjYyNS0+aXQ2NjI1X2xvY2sp Ow0KPj4gKwlyZXR1cm4gZXJyOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBpdDY2MjVf cmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQo+PiArew0KPj4gKwlzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQo+PiArCXN0cnVjdCBp dDY2MjUgKml0NjYyNSA9IHNkX3RvXzY2MjUoc2QpOw0KPj4gKw0KPj4gKwl2NGwyX2FzeW5jX3Vu cmVnaXN0ZXJfc3ViZGV2KHNkKTsNCj4+ICsJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYo c2QpOw0KPj4gKw0KPj4gKwlpZiAoY2xpZW50LT5pcnEpDQo+PiArCQlkaXNhYmxlX2lycShjbGll bnQtPmlycSk7DQo+PiArCWVsc2UNCj4+ICsJCXRpbWVyX3NodXRkb3duX3N5bmMoJml0NjYyNS0+ dGltZXIpOw0KPj4gKw0KPj4gKwljYW5jZWxfd29ya19zeW5jKCZpdDY2MjUtPnBvbGxpbmdfd29y ayk7DQo+PiArCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaXQ2NjI1LT5ocGRfZGVsYXllZF93 b3JrKTsNCj4+ICsJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGl0NjYyNS0+ZGVidWdmc19kaXIp Ow0KPj4gKwljZWNfdW5yZWdpc3Rlcl9hZGFwdGVyKGl0NjYyNS0+Y2VjX2FkYXApOw0KPj4gKwlt dXRleF9kZXN0cm95KCZpdDY2MjUtPml0NjYyNV9sb2NrKTsNCj4+ICsJbWVkaWFfZW50aXR5X2Ns ZWFudXAoJnNkLT5lbnRpdHkpOw0KPj4gKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZpdDY2MjUt PmhkbCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9p ZCBpdDY2MjVfaWRbXSA9IHsNCj4+ICsJeyAubmFtZSA9ICJpdDY2MjUiLCAuZHJpdmVyX2RhdGEg PSBJVDY2MjVfQ0hJUCB9LA0KPj4gKwl7IC5uYW1lID0gIml0NjYyNiIsIC5kcml2ZXJfZGF0YSA9 IElUNjYyNl9DSElQIH0sDQo+PiArCXt9DQo+PiArfTsNCj4+ICtNT0RVTEVfREVWSUNFX1RBQkxF KGkyYywgaXQ2NjI1X2lkKTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBpdDY2MjVfb2ZfbWF0Y2hbXSA9IHsNCj4+ICsJeyAuY29tcGF0aWJsZSA9ICJpdGUsaXQ2 NjI1IiwgLmRhdGEgPSAodm9pZCAqKUlUNjYyNV9DSElQIH0sDQo+PiArCXsgLmNvbXBhdGlibGUg PSAiaXRlLGl0NjYyNiIsIC5kYXRhID0gKHZvaWQgKilJVDY2MjZfQ0hJUCB9LA0KPj4gKwl7fSwN Cj4+ICt9Ow0KPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGl0NjYyNV9vZl9tYXRjaCk7DQo+ PiArDQo+PiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGl0NjYyNV9kcml2ZXIgPSB7DQo+PiAr CS5kcml2ZXIgPSB7DQo+PiArCQkubmFtZSA9ICJpdDY2MjUiLA0KPj4gKwkJLm9mX21hdGNoX3Rh YmxlID0gaXQ2NjI1X29mX21hdGNoLA0KPj4gKwl9LA0KPj4gKwkucHJvYmUgPSBpdDY2MjVfcHJv YmUsDQo+PiArCS5yZW1vdmUgPSBpdDY2MjVfcmVtb3ZlLA0KPj4gKwkuaWRfdGFibGUgPSBpdDY2 MjVfaWQsDQo+PiArfTsNCj4+ICttb2R1bGVfaTJjX2RyaXZlcihpdDY2MjVfZHJpdmVyKTsNCj4+ ICsNCj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oImlURSBpdDY2MjUvaXQ2NjI2IEhETUkgdG8gTUlQ SSBDU0kgYnJpZGdlIGRyaXZlciIpOw0KPj4gK01PRFVMRV9BVVRIT1IoIkhlcm1lcyBXdSA8SGVy bWVzLnd1QGl0ZS5jb20udHc+Iik7DQo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPj4gDQo+ DQo+UmVnYXJkcywNCj4NCj4JSGFucw0KPg0KDQpSZWdhcmRzLA0KSGVybWVzDQo=