RE: [PATCH v9 2/2] media: i2c: add driver for ITE IT6625/IT6626
<[email protected]> Mon, 3 Aug 2026 11:25:31 +0000
| Newsgroups | org.kernel.vger.linux-media,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
SGkgSGFucywNCg0KPi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+RnJvbTogSGFucyBWZXJr dWlsIDxodmVya3VpbCtjaXNjb0BrZXJuZWwub3JnPiANCj5TZW50OiBGcmlkYXksIEp1bHkgMzEs IDIwMjYgNzo1NyBQTQ0KPlRvOiBIZXJtZXMgV3UgKOWQs+S9s+WujykgPEhlcm1lcy5XdUBpdGUu Y29tLnR3PjsgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGtlcm5lbC5vcmc+OyBSb2Ig SGVycmluZyA8cm9iaEBrZXJuZWwub3JnPjsgS3J6eXN6dG9mIEtvemxvd3NraSA8a3J6aytkdEBr ZXJuZWwub3JnPjsgQ29ub3IgRG9vbGV5IDxjb25vcitkdEBrZXJuZWwub3JnPg0KPkNjOiBsaW51 eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmc7IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnOyBsaW51 eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnDQo+U3ViamVjdDogUmU6IFtQQVRDSCB2OSAyLzJdIG1l ZGlhOiBpMmM6IGFkZCBkcml2ZXIgZm9yIElURSBJVDY2MjUvSVQ2NjI2DQo+DQo+SGkgSGVybWVz LA0KPg0KPlRoYW5rIHlvdSBmb3IgcG9zdGluZyB0aGlzIGRyaXZlciENCj4NCj5TZWUgYmVsb3cg Zm9yIG15IGNvZGUgcmV2aWV3Lg0KPg0KPk9uZSBoaWdoLWxldmVsIHF1ZXN0aW9uOiBob3cgaXMg dGhpcyBkcml2ZXIgdGVzdGVkLCBzcGVjaWZpY2FsbHkgd2l0aCB3aGF0IENTSS9jYXB0dXJlDQo+ ZHJpdmVyPw0KPg0KPkNhbiB5b3UgcHJvdmlkZSB0aGUgJ3Y0bDItY29tcGxpYW5jZSBvdXRwdXQg LXMnIHdpdGggdGhhdCBkcml2ZXI/DQo+DQo+SSBzdXNwZWN0IHRoYXQgdGhlIElUNjYyNiBpcyBj dXJyZW50bHkgbGltaXRlZCB0byBIRE1JIDIuMCwgaXMgdGhhdCBjb3JyZWN0PyBJZiBzbywNCj50 aGVuIHRoYXQgc2hvdWxkIGJlIGRvY3VtZW50ZWQgc29tZXdoZXJlIGluIHRoZSBjb2RlIChpdCBt aWdodCBiZSB0aGVyZSBhbHJlYWR5LA0KPmluIHRoYXQgY2FzZSBJIG1pc3NlZCBpdCkuDQo+DQo+ T24gMzAvMDcvMjAyNiAwODo1NSwgSGVybWVzIFd1IHZpYSBCNCBSZWxheSB3cm90ZToNCj4+IEZy b206IEhlcm1lcyBXdSA8SGVybWVzLnd1QGl0ZS5jb20udHc+DQo+PiANCj4+IEFkZCBhIFY0TDIg c3ViZGV2aWNlIGRyaXZlciBmb3IgdGhlIElURSBJVDY2MjUvSVQ2NjI2IEhETUktdG8tTUlQSQ0K Pj4gQ1NJLTIgYnJpZGdlIGNoaXBzLiBJVDY2MjUgYWNjZXB0cyBhbiBIRE1JIDIuMCBpbnB1dCBh bmQgSVQ2NjI2IGFuDQo+PiBIRE1JIDIuMSBpbnB1dCwgY29udmVydGluZyBpdCB0byBhIEQtUEhZ IChvciBDL0QtUEhZIG9uIElUNjYyNikNCj4+IE1JUEkgQ1NJLTIgb3V0cHV0LiBUaGUgYnJpZGdl IGlzIGNvbmZpZ3VyZWQgb3ZlciBJMkMsIGV4cG9zZXMgYW4NCj4+IEhETUkgQ0VDIGFkYXB0ZXIs IGFuZCBzdXBwb3J0cyBFRElEIHJlYWQvd3JpdGUsIERWIHRpbWluZ3MNCj4+IGRldGVjdGlvbi9j b25maWd1cmF0aW9uLCBhbmQgSFBEIGNvbnRyb2wgdmlhIHRoZSBzdGFuZGFyZCBWNEwyDQo+PiBz dWJkZXZpY2UgcGFkIGFuZCB2aWRlbyBvcHMuDQo+PiANCj4+IFNpZ25lZC1vZmYtYnk6IEhlcm1l cyBXdSA8SGVybWVzLnd1QGl0ZS5jb20udHc+DQo+PiAtLS0NCj4+IENoYW5nZXMgaW4gdjk6DQo+ PiAtIENoYW5nZSBpdDY2MjVfaW50ZXJydXB0X2hhbmRsZXIoKSB0byByZXR1cm4gYm9vbCBhbmQN Cj4+ICAgaXQ2NjI1X2lycV9oYW5kbGVyKCkgdG8gdHJhbnNsYXRlIHRoYXQgaW50byBJUlFfSEFO RExFRC9JUlFfTk9ORToNCj4+ICAgdGhlIGhhbmRsZXIgcmV0dXJuZWQgZWFybHkgd2l0aG91dCBj bGVhcmluZyBSRUdfTUNVX0lOVEVSUlVQVA0KPj4gICB3aGVuZXZlciB0aGUgcmVhZCB3YXMgc3B1 cmlvdXMgKHZhbCA9PSAwKSBvciBmYWlsZWQgKHZhbCA8IDApLCB5ZXQNCj4+ICAgdGhlIElSUSBo YW5kbGVyIHVuY29uZGl0aW9uYWxseSByZXR1cm5lZCBJUlFfSEFORExFRC4gT24gdGhhdCBwYXRo DQo+PiAgIG5vIElUNjYyNSBpbnRlcnJ1cHQgc291cmNlIHdhcyBvYnNlcnZlZCBmb3IgdGhpcyBp bnZvY2F0aW9uLCBzbw0KPj4gICBhbHdheXMgcmVwb3J0aW5nIElSUV9IQU5ETEVEIHJlZ2FyZGxl c3MgZGVmZWF0cyB0aGUga2VybmVsJ3MNCj4+ICAgc3B1cmlvdXMtSVJRIHN0b3JtIHByb3RlY3Rp b24sIHdoaWNoIHJlbGllcyBvbiBJUlFfTk9ORSB0byBpZGVudGlmeQ0KPj4gICBhbmQgZGlzYWJs ZSBtaXNiZWhhdmluZyBsaW5lcy4gTWF0Y2hlcyB0aGUgcGF0dGVybiBhbHJlYWR5IHVzZWQgYnkN Cj4+ICAgdGMzNTg3NDMuYyBhbmQgYWR2NzYwNC5jLiBGb3VuZCBieSB0aGUgc2FzaGlrby5kZXYg YXV0b21hdGVkIHJldmlldw0KPj4gICBvZiB2OC4NCj4+IC0gVGFrZSBpdDY2MjVfbG9jayBpbiBp dDY2MjVfaW5pdGlhbF9zZXR1cCgpOiBpdCB3cm90ZQ0KPj4gICBCX0NPTkZJR19VUERBVEUgdG8g UkVHX0hPU1RfQ1RSTF9JTlQgYW5kIHBvbGxlZCBmb3IgaXQgdG8gY2xlYXINCj4+ICAgd2l0aG91 dCBob2xkaW5nIHRoZSBsb2NrLCBidXQgaXQgcnVucyBmcm9tIHByb2JlKCkgYWZ0ZXINCj4+ICAg Y2VjX3JlZ2lzdGVyX2FkYXB0ZXIoKSBoYXMgYWxyZWFkeSBleHBvc2VkIC9kZXYvY2VjWCB0byB1 c2Vyc3BhY2UsDQo+PiAgIGFuZCBpdDY2MjVfY2VjX2FkYXBfdHJhbnNtaXQoKSAocmVhY2hhYmxl IGltbWVkaWF0ZWx5IHZpYSBhIENFQw0KPj4gICBpb2N0bCkgc2V0cyBCX0NFQ19TRU5EX0RBVEEg aW4gdGhlIHNhbWUgcmVnaXN0ZXIgdW5kZXIgdGhlIGxvY2suDQo+PiAgIEV2ZXJ5IG90aGVyIGFj Y2Vzc29yIG9mIFJFR19IT1NUX0NUUkxfSU5UIGFscmVhZHkgdG9vayB0aGUgbG9jazsNCj4+ICAg dGhpcyB3YXMgdGhlIHNvbGUgZXhjZXB0aW9uLiBTaW5nbGUgY2FsbCBzaXRlLCBsb2NrIGFscmVh ZHkNCj4+ICAgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0LCBzbyBubyBkZWFkbG9jayBpcyBpbnRyb2R1 Y2VkLiBGb3VuZCBieSB0aGUNCj4+ICAgc2FzaGlrby5kZXYgYXV0b21hdGVkIHJldmlldyBvZiB2 OC4NCj4+IA0KPj4gT25lIG90aGVyIHY4IHJldmlldyBmaW5kaW5nIHdhcyBjaGVja2VkIGFuZCBp cyBub3QgYmVpbmcgYWN0ZWQgb246DQo+PiAtIGZwc19mcm9tX2J0X3RpbWluZ3MoKSBjb21wdXRp bmcNCj4+ICAgVjRMMl9EVl9CVF9GUkFNRV9IRUlHSFQodCkgKiBWNEwyX0RWX0JUX0ZSQU1FX1dJ RFRIKHQpIGFzIGEgMzItYml0DQo+PiAgIHByb2R1Y3QsIHdoaWNoIHRoZSByZXZpZXcgY2xhaW1z IGNhbiBvdmVyZmxvdyB0byAwIGdpdmVuDQo+PiAgIFY0TDJfRFZfQlRfQ0FQX0NVU1RPTSdzIHJl bGF4ZWQgbWF0Y2hpbmcuIENoZWNrZWQ6IGl0NjYyNS0+dGltaW5ncywNCj4+ICAgdGhlIG9ubHkg dmFsdWUgdGhpcyBmdW5jdGlvbiBpcyBldmVyIGNhbGxlZCBvbiwgaXMgcG9wdWxhdGVkIG9ubHkN Cj4+ICAgYnkgaXQ2NjI1X3VwZGF0ZV90aW1pbmdzX2lmX2NoYW5nZWQoKSwgd2hpY2ggcmVqZWN0 cyBhbnl0aGluZw0KPj4gICBmYWlsaW5nIHY0bDJfdmFsaWRfZHZfdGltaW5ncygpIGFnYWluc3Qg aXQ2NjI1X3RpbWluZ3NfY2FwICh3aWR0aA0KPj4gICA2NDAtMzg0MCwgaGVpZ2h0IDQ4MC0yMTYw KSwgb3IgYnkgYSBzdGF0aWMgZGVmYXVsdC4NCj4+ICAgdjRsMl92YWxpZF9kdl90aW1pbmdzKCkg YWRkaXRpb25hbGx5IGJvdW5kcyBldmVyeSBwb3JjaCBmaWVsZA0KPj4gICAoaGZyb250cG9yY2gv aHN5bmMvaGJhY2twb3JjaCA8PSAzeCB3aWR0aDsNCj4+ICAgdmZyb250cG9yY2gvdnN5bmMvdmJh Y2twb3JjaC9pbF8qIDw9IDEwMjQwKS4gR2l2ZW4gdGhvc2UgY2FwcyB0aGUNCj4+ICAgbWF4aW11 bSBwb3NzaWJsZSBGUkFNRV9XSURUSCAqIEZSQU1FX0hFSUdIVCBpcw0KPj4gICAzODQwMCB4IDYz NjAwIH49IDIuNDR4MTBeOSwgc2FmZWx5IHVuZGVyIDJeMzIgfj0gNC4yOXgxMF45IC0tIHRoZQ0K Pj4gICBjbGFpbWVkIG92ZXJmbG93IGlucHV0IGlzIG1hdGhlbWF0aWNhbGx5IHVucmVhY2hhYmxl IHRocm91Z2ggdGhpcw0KPj4gICBkcml2ZXIncyB2YWxpZGF0ZWQgdGltaW5ncyBwYXRoLg0KPj4g DQo+PiBDaGFuZ2VzIGluIHY4Og0KPj4gLSBEcm9wIG9mX21hdGNoX3B0cigpIGFyb3VuZCBpdDY2 MjVfb2ZfbWF0Y2ggaW4gdGhlIGkyY19kcml2ZXI6IHRoZQ0KPj4gICB0YWJsZSBpcyB1bmNvbmRp dGlvbmFsbHkgY29tcGlsZWQgaW4sIHNvIHdyYXBwaW5nIGl0IGlzIHVubmVjZXNzYXJ5DQo+PiAg IGFuZCByaXNrcyBhbiB1bnVzZWQtdmFyaWFibGUgd2FybmluZyBvbiBjb25maWdzIHdpdGhvdXQg Q09ORklHX09GLg0KPj4gICBGb3VuZCBieSBLcnp5c3p0b2YgS296bG93c2tpJ3Mgb24tbGlzdCBy ZXZpZXcgb2YgdjcuDQo+PiAtIFN0b3AgaGFsdmluZyBidC0+cGl4ZWxjbG9jayBmb3IgaW50ZXJs YWNlZCBzaWduYWxzIGluDQo+PiAgIGl0NjYyNV9nZXRfZGV0ZWN0ZWRfdGltaW5ncygpLiBDaGVj a2VkIGFnYWluc3QgdGhlIElUNjYyNSBzcGVjOiBmb3INCj4+ICAgYW4gaW50ZXJsYWNlZCBzb3Vy Y2UgKGUuZy4gMTA4MGkpIHRoZSBjaGlwJ3MgYnVpbHQtaW4gTUNVIGFscmVhZHkNCj4+ICAgcmVw b3J0cyBSRUdfVklEX1BDTEsgYXMgdGhlIGNvcnJlY3QsIHJlYWwgcGl4ZWwgY2xvY2sgKDc0LjI1 IE1IeiBmb3INCj4+ICAgMTA4MGksIG5vdCBhIGhhbGYtcmF0ZS9maWVsZCBjbG9jayksIHdoaWxl IHRoZSBoZWlnaHQgaXQgcmVwb3J0cyBpcw0KPj4gICB0aGUgcGVyLWZpZWxkIGFjdGl2ZSBoZWln aHQgKDU0MCksIHdoaWNoIHRoZSBleGlzdGluZw0KPj4gICAiYnQtPmhlaWdodCAqPSAyIiBjb3Jy ZWN0bHkgdHVybnMgaW50byB0aGUgdHJ1ZSBmdWxsLWZyYW1lIGhlaWdodC4NCj4+ICAgRGl2aWRp bmcgdGhlIGFscmVhZHktY29ycmVjdCBwaXhlbCBjbG9jayBieSAyIG9uIHRvcCBvZiB0aGF0IG1h bmdsZWQNCj4+ICAgaXQgdG8gMzcuMTI1IE1IeiwgdW5kZXJzdGF0aW5nIHRoZSByZXBvcnRlZCBm cmFtZSByYXRlIGJ5IGhhbGYuDQo+PiAgIEZvdW5kIGJ5IHRoZSBzYXNoaWtvLmRldiBhdXRvbWF0 ZWQgcmV2aWV3IG9mIHY3LiBpbF92ZnJvbnRwb3JjaC8NCj4+ICAgaWxfdmJhY2twb3JjaCBhcmUg c3RpbGwgbGVmdCB1bnNldCBmb3IgaW50ZXJsYWNlZCBzaWduYWxzIC0tIHRoZQ0KPj4gICBJVDY2 MjUgTUNVIGhhcyBubyBzZXBhcmF0ZSBzZWNvbmQtZmllbGQgcG9yY2ggcmVnaXN0ZXJzLCBzbyB0 aGVyZSdzDQo+PiAgIG5vdGhpbmcgdG8gcmVhZCBmb3IgdGhlbTsgbm90IGZpeGVkLCBzaW5jZSB0 aGVyZSdzIG5vdGhpbmcgdG8gZml4IGluDQo+PiAgIHNvZnR3YXJlLg0KPj4gDQo+PiBPbmUgb3Ro ZXIgdjcgcmV2aWV3IGZpbmRpbmcgd2FzIGNoZWNrZWQgYW5kIGlzIG5vdCBiZWluZyBhY3RlZCBv bjoNCj4+IC0gaXQ2NjI1X2dldF9mbXQoKSB1bmNvbmRpdGlvbmFsbHkgd3JpdGVzIHRoZSBsaXZl IGRldGVjdGVkIHRpbWluZ3MNCj4+ICAgaW50byBmb3JtYXQtPmZvcm1hdC53aWR0aC9oZWlnaHQv ZmllbGQgcmVnYXJkbGVzcyBvZiBUUlkgdnMgQUNUSVZFLA0KPj4gICBhbmQgaXQ2NjI1X3NldF9m bXQoKSdzIFRSWSBicmFuY2ggb25seSBwZXJzaXN0cyBjb2RlL2NvbG9yc3BhY2UgaW50bw0KPj4g ICBzZF9zdGF0ZS4gVGhpcyBleGFjdGx5IG1hdGNoZXMgdGMzNTg3NDNfZ2V0X2ZtdCgpL3RjMzU4 NzQzX3NldF9mbXQoKQ0KPj4gICBpbiB0YzM1ODc0My5jLCB3aGljaCBuZXZlciBjb25zdWx0IHNk X3N0YXRlIGZvciB3aWR0aC9oZWlnaHQvZmllbGQNCj4+ICAgaW4gZWl0aGVyIFRSWSBvciBBQ1RJ VkUgZWl0aGVyLiBGb3IgdGhpcyBjbGFzcyBvZiBIRE1JLXJlY2VpdmVyDQo+PiAgIGJyaWRnZSwg ZnJhbWUgZGltZW5zaW9ucyBhcmUgZGljdGF0ZWQgYnkgdGhlIGRldGVjdGVkIGV4dGVybmFsDQo+ PiAgIHNpZ25hbCwgbm90IGluZGVwZW5kZW50bHkgbmVnb3RpYWJsZSB2aWEgVFJZIC0tIG9ubHkg dGhlIHBpeGVsDQo+PiAgIGZvcm1hdCAoY29kZS9jb2xvcnNwYWNlKSBpcyBtZWFuaW5nZnVsbHkg VFJZLWlzb2xhdGFibGUsIGFuZCB0aGF0J3MNCj4+ICAgZXhhY3RseSB3aGF0IGJvdGggZHJpdmVy cyBpc29sYXRlLiBGb3VuZCBieSB0aGUgc2FzaGlrby5kZXYNCj4+ICAgYXV0b21hdGVkIHJldmll dyBvZiB2Ny4NCj4+IA0KPj4gQWxzbywgcGVyIEtyenlzenRvZiBLb3psb3dza2kncyBvbi1saXN0 IHJldmlldzogdGhlIGl0NjYyNS9pdDY2MjYNCj4+IG9mX2RldmljZV9pZCBlbnRyaWVzIGRvIGVu Y29kZSBhIHJlYWwgYmVoYXZpb3JhbCBkaWZmZXJlbmNlIC0tDQo+PiBpdDY2MjVfcGFyc2VfZW5k cG9pbnQoKSByZWplY3RzIEMtUEhZIGVuZHBvaW50cyB1bmxlc3MNCj4+IGNoaXBfdHlwZSA9PSBJ VDY2MjZfQ0hJUCwgc28gIml0ZSxpdDY2MjUiIGJvYXJkcyBhcmUgY29ycmVjdGx5DQo+PiByZXN0 cmljdGVkIHRvIEQtUEhZLiBSZXBseWluZyBvbi1saXN0IHRvIHBvaW50IHRoaXMgb3V0LCBub3Qg YSBjb2RlDQo+PiBjaGFuZ2UuDQo+PiANCj4+IENoYW5nZXMgaW4gdjc6DQo+PiAtIEZpeCB0aHJl ZSBjb3JyZWN0bmVzcyBpc3N1ZXMgZm91bmQgYnkgdGhlIGF1dG9tYXRlZCByZXZpZXcgb2YgdjY6 DQo+PiAgIGl0NjYyNV9wYXJzZV9lbmRwb2ludCgpIGxlZnQgdGhlIGZ3bm9kZSBlbmRwb2ludCdz IGJ1c190eXBlIGFzDQo+PiAgIFY0TDJfTUJVU19VTktOT1dOIHNvIHY0bDJfZndub2RlX2VuZHBv aW50X2FsbG9jX3BhcnNlKCkgY291bGQNCj4+ICAgYXV0b2RldGVjdCBDLVBIWSB2cyBELVBIWSwg YnV0IGlmIHRoZSBlbmRwb2ludCBub2RlIGhhcyBub25lIG9mIHRoZQ0KPj4gICBDU0ktMi1zcGVj aWZpYyBwcm9wZXJ0aWVzLCB0aGUgcGFyc2VyIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8NCj4+ICAg VjRMMl9NQlVTX1BBUkFMTEVML0JUNjU2IGluc3RlYWQgLS0gdGhlIGRyaXZlciB0aGVuIHJlYWQN Cj4+ICAgZW5kcG9pbnQuYnVzLm1pcGlfY3NpMi5udW1fZGF0YV9sYW5lcyB1bmNvbmRpdGlvbmFs bHksIHRyZWF0aW5nDQo+PiAgIG1lbW9yeSBwb3B1bGF0ZWQgYXMgYSBkaWZmZXJlbnQgdW5pb24g bWVtYmVyIGFzIGEgbGFuZSBjb3VudC4NCj4+ICAgaXQ2NjI1X3NldF9mbXQoKSdzIFY0TDJfU1VC REVWX0ZPUk1BVF9BQ1RJVkUgYnJhbmNoIGFwcGxpZWQgdGhlIG5ldw0KPj4gICBmb3JtYXQgdG8g aGFyZHdhcmUgYnV0IG5ldmVyIHVwZGF0ZWQgZm9ybWF0LT5mb3JtYXQuY29sb3JzcGFjZSBsaWtl DQo+PiAgIHRoZSBUUlkgYnJhbmNoIGRvZXMsIHNvIFZJRElPQ19TVUJERVZfU19GTVQgY2FsbGVy cyBnb3QgYmFjayB0aGUNCj4+ICAgc3RhbGUgY29sb3JzcGFjZSBmcm9tIGJlZm9yZSB0aGUgY2Fs bC4gaXQ2NjI1X3NfZWRpZCgpIG5ldmVyDQo+PiAgIGNoZWNrZWQgZWRpZC0+c3RhcnRfYmxvY2ss IGNvbnRyYXJ5IHRvIHRoZSBWSURJT0NfU19FRElEIHNwZWMNCj4+ICAgKERvY3VtZW50YXRpb24v dXNlcnNwYWNlLWFwaS9tZWRpYS92NGwvdmlkaW9jLWctZWRpZC5yc3QpLCB3aGljaA0KPj4gICBy ZXF1aXJlcyAtRUlOVkFMIGZvciBhbnkgc3RhcnRfYmxvY2sgb3RoZXIgdGhhbiAwIHNpbmNlIHNl dHRpbmcgYW4NCj4+ICAgRURJRCBpcyBhbGwtb3Itbm90aGluZzsgYWRkZWQgdGhlIHNhbWUgY2hl Y2sgYWxyZWFkeSBwcmVzZW50IGluDQo+PiAgIGFkdjc2MDRfc19lZGlkKCksIHRjMzU4NzQzX3Nf ZWRpZCgpIGFuZCBhZHY3ODQyX3NfZWRpZCgpIGZvciB0aGUNCj4+ICAgc2FtZSByZXF1aXJlbWVu dC4NCj4+IA0KPj4gQ2hhbmdlcyBpbiB2NjoNCj4+IC0gRml4IHR3byBjb3JyZWN0bmVzcyBpc3N1 ZXMgZm91bmQgYnkgdGhlIGF1dG9tYXRlZCByZXZpZXcgb2YgdjU6DQo+PiAgIGl0NjYyNV9zX2Vk aWQoKSBjYWxsZWQgdjRsMl9waHlzX2FkZHJfdmFsaWRhdGUoKSBidXQgZGlzY2FyZGVkIGl0cw0K Pj4gICByZXR1cm4gdmFsdWUsIHNvIGEgQ0VDIHBoeXNpY2FsIGFkZHJlc3MgdGhhdCBmYWlsZWQg dG9wb2xvZ3kNCj4+ICAgdmFsaWRhdGlvbiAoZS5nLiBhIGdhcCBsaWtlIDEuMC4xLjApIHN0aWxs IHJlYWNoZWQNCj4+ICAgY2VjX3NfcGh5c19hZGRyKCkgYW5kIGdvdCBicm9hZGNhc3Qgb24gdGhl IENFQyBidXMgaW5zdGVhZCBvZiBiZWluZw0KPj4gICByZWplY3RlZDsgYW5kIGl0NjYyNV9wYXJz ZV9lbmRwb2ludCgpIHByZS1zZXQgdGhlIGZ3bm9kZSBlbmRwb2ludCdzDQo+PiAgIGJ1c190eXBl IHRvIEQtUEhZIGJlZm9yZSBwYXJzaW5nLCB3aGljaCAocGVyDQo+PiAgIGluY2x1ZGUvbWVkaWEv djRsMi1md25vZGUuaCkgbWFrZXMgdGhlIHBhcnNlciB0cmVhdCBpdCBhcyBhIGhhcmQNCj4+ICAg cmVxdWlyZW1lbnQgYW5kIHJlamVjdCBhbnkgZW5kcG9pbnQgd2hvc2UgRFQgYnVzLXR5cGUgZGlz YWdyZWVzIC0tDQo+PiAgIGV2ZXJ5IElUNjYyNiBDLVBIWSBkZXZpY2UgdHJlZSBmYWlsZWQgdG8g cHJvYmUgYXMgYSByZXN1bHQuDQo+PiANCj4+IE9uZSBvdGhlciB2NSByZXZpZXcgZmluZGluZyB3 YXMgY2hlY2tlZCBhbmQgaXMgbm90IGJlaW5nIGFjdGVkIG9uOg0KPj4gLSBBIGNvbmN1cnJlbnQg VklESU9DX1NVQkRFVl9TX0VESUQgaW9jdGwgcmFjaW5nIGl0NjYyNV9yZW1vdmUoKSdzDQo+PiAg IGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygpIGNvdWxkIGluIHByaW5jaXBsZSBzY2hlZHVsZQ0K Pj4gICBocGRfZGVsYXllZF93b3JrIGFmdGVyIHRlYXJkb3duIGZyZWVzIHRoZSBkcml2ZXIgc3Rh dGUuIFJlYWwgaW4gdGhlDQo+PiAgIGFic3RyYWN0IC0tIG5vIGxvY2sgc2VyaWFsaXplcyBhbiBp bi1mbGlnaHQgaW9jdGwgYWdhaW5zdA0KPj4gICB2aWRlb191bnJlZ2lzdGVyX2RldmljZSgpIC0t IGJ1dCB0aGUgaWRlbnRpY2FsIHVubG9ja2VkIHBhdHRlcm4NCj4+ICAgKGRlbGF5ZWQgd29yayBz Y2hlZHVsZWQgZnJvbSB0aGUgc19lZGlkIHBhdGgsIHJlbW92ZSgpIGRvaW5nIG9ubHkNCj4+ICAg Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCkpIGV4aXN0cyB1bmZpeGVkIGluIHRjMzU4NzQzLmMg YW5kDQo+PiAgIGFkdjc2MDQuYywgYW5kIHRoaXMgaXMgdGhlIHNhbWUgcmVzaWR1YWwgcmlzayBh bHJlYWR5IGRpc21pc3NlZCBpbg0KPj4gICB0aGUgdjIvdjMvdjQgcm91bmRzIG9mIHRoaXMgc2Vy aWVzIGZvciB0aGUgc2FtZSByZWFzb246IG5vIHBlZXINCj4+ICAgZHJpdmVyIGFkZHMgZXh0cmEg c3luY2hyb25pemF0aW9uIGZvciBpdCBlaXRoZXIuDQo+PiANCj4+IENoYW5nZXMgaW4gdjU6DQo+ PiAtIEZpeCBhIGtlcm5lbC1zdGFjay1tZW1vcnkgbGVhayBpbiBpdDY2MjVfZWRpZF9yYW1fc2hv dygpIGFuZA0KPj4gICBpdDY2MjVfbWlwaV9yZWdfc2hvdygpOiBib3RoIHByaW50ZWQgYW4gdW5p bml0aWFsaXplZCBvbi1zdGFjaw0KPj4gICByZWdpc3RlciBidWZmZXIgdG8gdXNlcnNwYWNlIHZp YSBkZWJ1Z2ZzIHdpdGhvdXQgY2hlY2tpbmcgd2hldGhlcg0KPj4gICB0aGUgcHJlY2VkaW5nIEky QyBidWxrIHJlYWQgYWN0dWFsbHkgc3VjY2VlZGVkLg0KPj4gLSBGaXggdHdvIHJlbGF0ZWQgZm9y bWF0LW5lZ290aWF0aW9uIGJ1Z3M6IGl0NjYyNV9zZXRfZm10KCkncw0KPj4gICBWNEwyX1NVQkRF Vl9GT1JNQVRfVFJZIGJyYW5jaCBuZXZlciB1cGRhdGVkIGZtdC0+Y29sb3JzcGFjZSB0bw0KPj4g ICBtYXRjaCB0aGUgbmV3IGZtdC0+Y29kZSwgYW5kIGl0NjYyNV9nZXRfZm10KCkncyBUUlkgYnJh bmNoIGNvbXB1dGVkDQo+PiAgIHRoZSByZXR1cm5lZCBjb2xvcnNwYWNlIGZyb20gdGhlIGFjdGl2 ZSBoYXJkd2FyZSBzdGF0ZSBpbnN0ZWFkIG9mDQo+PiAgIHRoZSBUUlkgc3RhdGUncyBvd24gZm9y bWF0LCBsZWFraW5nIGFjdGl2ZSBzdGF0ZSBpbnRvIHdoYXQgc2hvdWxkDQo+PiAgIGJlIGFuIGlz b2xhdGVkIFRSWSBidWZmZXIgLS0gc3RvcmUgYW5kIHJlYWQgY29kZSBhbmQgY29sb3JzcGFjZQ0K Pj4gICB0b2dldGhlciBpbiBzZF9zdGF0ZSBpbnN0ZWFkLiBTZXBhcmF0ZWx5LCBpdDY2MjVfc2V0 X2ZtdCgpJ3MNCj4+ICAgYWN0aXZlLWZvcm1hdCBwYXRoIHJlbGVhc2VkIGl0NjYyNV9sb2NrIGJl Zm9yZSBwcm9ncmFtbWluZyB0aGUNCj4+ICAgaGFyZHdhcmUsIGxldHRpbmcgdHdvIGNvbmN1cnJl bnQgU19GTVQgY2FsbHMgaW50ZXJsZWF2ZSBhbmQgbGVhdmUNCj4+ICAgdGhlIGhhcmR3YXJlIHBy b2dyYW1tZWQgZm9yIHRoZSB3cm9uZyB0aHJlYWQncyBmb3JtYXQ7IGFkZCBfbG9ja2VkDQo+PiAg IHZhcmlhbnRzIG9mIGl0NjYyNV9lbmFibGVfc3RyZWFtKCkvaXQ2NjI1X3NldF9taXBpX2NvbmZp ZygpIGFuZCBjYWxsDQo+PiAgIHRoZW0gZnJvbSBpbnNpZGUgc2V0X2ZtdCgpJ3MgZXhpc3Rpbmcg bG9jayBzY29wZSBzbyB0aGUgd2hvbGUNCj4+ICAgdXBkYXRlIGlzIG5vdyBhdG9taWMuDQo+PiAt IEZpeCBpdDY2MjVfc19lZGlkKCk6IHBlciB0aGUgVklESU9DX1NfRURJRCBzcGVjLCBibG9ja3Mg PT0gMCBtdXN0DQo+PiAgIGxlYXZlIHRoZSBFRElEIGRpc2FibGVkICgibm8gbG9uZ2VyIGF2YWls YWJsZSIpLCBidXQgdGhlIGRyaXZlcg0KPj4gICBkaXNhYmxlZCBIUEQgYW5kIHRoZW4gZmVsbCB0 aHJvdWdoIHRvIHRoZSBub3JtYWwgY29tcGxldGlvbiBwYXRoLA0KPj4gICB3aGljaCB1bmNvbmRp dGlvbmFsbHkgcmUtZW5hYmxlZCBpdCAtLSByZXR1cm4gaW1tZWRpYXRlbHkgaW5zdGVhZC4NCj4+ ICAgQWxzbyBzdG9wIGEgZmFpbGVkIGl0NjYyNV93cml0ZV9lZGlkKCkgZnJvbSBza2lwcGluZyB0 aGUgSFBEDQo+PiAgIHJlLWVuYWJsZSBlbnRpcmVseSwgd2hpY2ggbGVmdCBIUEQgZGlzYWJsZWQg cGVybWFuZW50bHkgYWZ0ZXIgYW55DQo+PiAgIHNpbmdsZSBmYWlsZWQgU19FRElEIGNhbGwuDQo+ PiAtIFRha2UgaXQ2NjI1X2xvY2sgYXJvdW5kIGl0NjYyNV9taXBpX3JlZ193cml0ZSgpJ3MgSTJD IHdyaXRlLA0KPj4gICBtYXRjaGluZyBldmVyeSBvdGhlciByZWdpc3RlciBhY2Nlc3MgaW4gdGhl IGRyaXZlci4NCj4+IC0gRGVyaXZlIElUNjYyNV9DSURfSERNSV9JTkZPJ3Mgc3RyaW5nIGZyb20g cmVhbCBzdGF0ZQ0KPj4gICAoaXQ2NjI1LT5jc2lfZm9ybWF0IGFuZCBmcHNfZnJvbV9idF90aW1p bmdzKCkpIGluc3RlYWQgb2YgcmV0dXJuaW5nDQo+PiAgIGEgaGFyZGNvZGVkICJSR0I0NDQgMTBi aXQgQCA2MEh6IiByZWdhcmRsZXNzIG9mIGFjdHVhbCBzaWduYWwuDQo+PiAtIFdpcmUgdXAgdGhl IHByZXZpb3VzbHktdW51c2VkIHJlc2V0LWdwaW9zIGxpbmUgaW4gcHJvYmUoKTogYWNxdWlyZQ0K Pj4gICBpdCB2aWEgZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoKSBhbmQgdG9nZ2xlIGl0IChhc3Nl cnQgYnJpZWZseSwgdGhlbg0KPj4gICBkZWFzc2VydCBhbmQgbGV0IGl0IHNldHRsZSkgYmVmb3Jl IHRoZSBmaXJzdCBJMkMgYWNjZXNzLg0KPj4gDQo+PiBBbGwgZm91bmQgYnkgdGhlIHNhc2hpa28u ZGV2IGF1dG9tYXRlZCByZXZpZXcgb2YgdjQuIFRocmVlIG90aGVyIHY0DQo+PiByZXZpZXcgZmlu ZGluZ3Mgd2VyZSBjaGVja2VkIGFuZCBhcmUgbm90IGJlaW5nIGFjdGVkIG9uOg0KPj4gLSBpdDY2 MjVfbWlwaV9yZWdfc2hvdygpJ3MgcmF3IHJlZ2lzdGVyIGR1bXAgY291bGQgZGVzdHJ1Y3RpdmVs eQ0KPj4gICBjb25zdW1lIGEgcGVuZGluZyBDRUMgUlggbWVzc2FnZSB2aWEgUkVHX0NFQ19SWF9E QVRBICgweDIwKSAtLQ0KPj4gICBjaGVja2VkIHdpdGggdGhlIGhhcmR3YXJlIGF1dGhvcjogcmVh ZGluZyBSRUdfQ0VDX1JYX0RBVEEgaXMgbm90DQo+PiAgIGRlc3RydWN0aXZlLCBvbmx5IHRoZSBl eHBsaWNpdCB3cml0ZS0wIHRvIFJFR19DRUNfUlhfREFUQV9MRU4NCj4+ICAgY2xlYXJzIHN0YXRl LiBUaGUgdjQgY2hhbmdlbG9nJ3MgImxpa2VseSBjbGVhci1vbi1yZWFkIiBhc3N1bXB0aW9uDQo+ PiAgIGZvciB0aGlzIHNhbWUgcmVnaXN0ZXIgd2FzIHdyb25nLg0KPj4gLSBkZXZtX2t6YWxsb2Mn ZCBzdGF0ZSArIHN1YmRldiBkZXZub2RlIFVBRi1pbi10aGUtYWJzdHJhY3Qgb24gdW5iaW5kDQo+ PiAgIC0tIHNhbWUgcmVhc29uaW5nIGFzIHRoZSB2Mi92MyByb3VuZHM6IG1hdGNoZXMgdGMzNTg3 NDMuYy9hZHY3NjA0LmMvDQo+PiAgIGFkdjc4NDIuYyBleGFjdGx5LCBhbiBhY2NlcHRlZCBWNEwy LXN1YnN5c3RlbS13aWRlIHBhdHRlcm4sIG5vdCBhDQo+PiAgIGRlZmVjdCB1bmlxdWUgdG8gdGhp cyBkcml2ZXIuDQo+PiAtIENvbmN1cnJlbnQgVklESU9DX1NVQkRFVl9TX0VESUQgcmFjaW5nIGl0 NjYyNV9yZW1vdmUoKSdzDQo+PiAgIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygpL211dGV4X2Rl c3Ryb3koKSAtLSB0aGUgc2FtZSByZXNpZHVhbCByaXNrDQo+PiAgIGRpc21pc3NlZCBpbiB0aGUg djMgcm91bmQ6IHJlYWwgaW4gdGhlIGFic3RyYWN0LCBidXQgbm8gcGVlciBkcml2ZXINCj4+ICAg YWRkcyBleHRyYSBzeW5jaHJvbml6YXRpb24gZm9yIGl0IGVpdGhlciwgYW5kIHRoZSB2MiByb3Vu ZCdzIGZpeA0KPj4gICAodW5yZWdpc3RlciB0aGUgc3ViZGV2IGZpcnN0IGluIHJlbW92ZSgpKSBh bHJlYWR5IG5hcnJvd2VkIHRoaXMgdG8NCj4+ICAgdGhlIHNhbWUgcmVzaWR1YWwgcmlzayBsZXZl bCBldmVyeSBwZWVyIGRyaXZlciBjYXJyaWVzLg0KPj4gDQo+PiBDaGFuZ2VzIGluIHY0Og0KPj4g LSBBbHdheXMgYWNrbm93bGVkZ2UgdGhlIENFQyBSWCBsZW5ndGggcmVnaXN0ZXIgb25jZSB0aGUg UlggaW50ZXJydXB0DQo+PiAgIGJyYW5jaCBpcyBlbnRlcmVkLCBldmVuIHdoZW4gdGhlIHJlcG9y dGVkIGxlbmd0aCBpcyBpbnZhbGlkIC0tDQo+PiAgIHByZXZpb3VzbHkgdGhlIGFjayB3cml0ZSBv bmx5IGhhcHBlbmVkIG9uIHZhbGlkIGxlbmd0aHMsIHNvIGFuDQo+PiAgIGludmFsaWQgbGVuZ3Ro IGxlZnQgdGhlIGludGVycnVwdCBhc3NlcnRlZCwgd2hpY2ggY291bGQgc3Rvcm0gdGhlDQo+PiAg IElSUSBsaW5lLg0KPj4gLSBGYWxsIGJhY2sgdG8gYSBkZWZhdWx0IGZvcm1hdCBpbnN0ZWFkIG9m IHJldHVybmluZyAtRUlOVkFMIGZyb20NCj4+ICAgaXQ2NjI1X3NldF9mbXQoKSB3aGVuIHRoZSBy ZXF1ZXN0ZWQgbWJ1cyBjb2RlIGlzbid0IHJlY29nbml6ZWQsDQo+PiAgIG1hdGNoaW5nIHRoZSBW NEwyIHN1YmRldiBzZXRfZm10IGNvbnZlbnRpb24gKGNmLiBhZHY3NjA0LmMpLiBUYWtlDQo+PiAg IGl0NjYyNV9sb2NrIGFyb3VuZCBpdDY2MjVfZ2V0X2ZtdCgpJ3MgQUNUSVZFLXBhdGggcmVhZHMg b2YNCj4+ICAgY3NpX2Zvcm1hdC9tYnVzX2ZtdF9jb2RlLCB3aGljaCBjb3VsZCBvdGhlcndpc2Ug b2JzZXJ2ZSBhIHRvcm4NCj4+ICAgdXBkYXRlIGZyb20gYSBjb25jdXJyZW50IHNldF9mbXQoKS4N Cj4+IC0gRml4IEVESUQgaW9jdGwgc3BlYyBjb25mb3JtYW5jZTogaXQ2NjI1X2dfZWRpZCgpIG5v dyBjbGFtcHMgdGhlDQo+PiAgIHJlcXVlc3RlZCBibG9jayBjb3VudCBhbmQgcmV0dXJucyBzdWNj ZXNzIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgYW4NCj4+ICAgZXJyb3Igd2hlbiB0aGUgcmVxdWVz dCBleGNlZWRzIGNhcGFjaXR5OyBpdDY2MjVfc19lZGlkKCkgbm93IHJldHVybnMNCj4+ICAgLUUy QklHIChub3QgLUVJTlZBTCkgd2l0aCBibG9ja3Mgc2V0IHRvIHRoZSBtYXhpbXVtLCB3aXRob3V0 DQo+PiAgIGF0dGVtcHRpbmcgdGhlIHdyaXRlLCB3aGVuIHRoZSByZXF1ZXN0IGV4Y2VlZHMgY2Fw YWNpdHk7IGFuZA0KPj4gICBpdDY2MjVfcmVhZF9lZGlkKCkvaXQ2NjI1X3dyaXRlX2VkaWQoKSdz IGxvdy1sZXZlbCBib3VuZHMgY2hlY2sgbm93DQo+PiAgIHRlc3RzIHN0YXJ0X2Jsb2NrIGFuZCBu dW1fYmxvY2tzIGluZGl2aWR1YWxseSBiZWZvcmUgc3VtbWluZyB0aGVtLA0KPj4gICBzaW5jZSB0 aGUgc3VtIGNvdWxkIG90aGVyd2lzZSBvdmVyZmxvdyBnaXZlbiB0aGUgdW5zaWduZWQgX191MzIN Cj4+ICAgZmllbGRzIG9mIHN0cnVjdCB2NGwyX2VkaWQuDQo+PiAtIEhhcmRlbiB0aGUgbWlwaV9y ZWcgZGVidWdmcyBoYW5kbGVyczogaXQ2NjI1X21pcGlfcmVnX3dyaXRlKCkgbm93DQo+PiAgIGFs d2F5cyBwYXJzZXMgZnJvbSBhIGxvY2FsIG9mZnNldCB0aGF0IHN0YXJ0cyBhdCAwIGluc3RlYWQg b2YgdGhlDQo+PiAgIHJlYWwgZmlsZSBvZmZzZXQsIHNpbmNlIHRoaXMgaXMgYSBzdGF0ZWxlc3Mg b25lLXdyaXRlLW9uZS1jb21tYW5kDQo+PiAgIGludGVyZmFjZSwgbm90IGEgc2Vla2FibGUgc3Ry ZWFtOyBpdDY2MjVfbWlwaV9yZWdfc2hvdygpIG5vdyB0YWtlcw0KPj4gICBpdDY2MjVfbG9jayBh cm91bmQgaXRzIHJhdyByZWdpc3Rlci1iYW5rIHJlYWQsIG1hdGNoaW5nIGV2ZXJ5IG90aGVyDQo+ PiAgIGJhbmtlZC1yZWdpc3RlciBhY2Nlc3MgaW4gdGhlIGRyaXZlciAodGhlIGR1bXBlZCByYW5n ZSBhbHNvIGluY2x1ZGVzDQo+PiAgIFJFR19DRUNfUlhfREFUQSwgd2hpY2ggdGhlIENFQyBoYW5k bGVyIHRyZWF0cyBhcyBjbGVhci1vbi1yZWFkLCBzbyBhbg0KPj4gICB1bmxvY2tlZCByZWFkIGNv dWxkIHNpbGVudGx5IHN0ZWFsIGEgcGVuZGluZyBDRUMgUlggbWVzc2FnZSkuDQo+PiAtIE1hcmsg dGhlIEhETUkgaW5mbyBjb250cm9sIChJVDY2MjVfQ0lEX0hETUlfSU5GTykgdm9sYXRpbGU6DQo+ PiAgIGl0NjYyNV9nX3ZvbGF0aWxlX2N0cmwoKSBhbHJlYWR5IGhhZCBhIGxpdmUgY2FzZSBmb3Ig aXQsIGJ1dCB0aGUNCj4+ICAgY29udHJvbCdzIHY0bDJfY3RybF9jb25maWcgd2FzIG1pc3Npbmcg VjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUsIHNvDQo+PiAgIHRoYXQgY2FzZSB3YXMgbmV2ZXIgYWN0 dWFsbHkgcmVhY2hlZCBhbmQgdGhlIGNvbnRyb2wncyB2YWx1ZSB3YXMNCj4+ICAgbmV2ZXIgcmVm cmVzaGVkLg0KPj4gDQo+PiBBbGwgZm91bmQgYnkgdGhlIHNhc2hpa28uZGV2IGF1dG9tYXRlZCBy ZXZpZXcgb2YgdjMuDQo+PiANCj4+IFNlcGFyYXRlbHksIG5vdCBhIHJldmlldyBmaW5kaW5nOiBy ZW1vdmUgYSByZWR1bmRhbnQgRlctc3RhcnQgcmVnaXN0ZXINCj4+IHRyaWdnZXIgZnJvbSBpdDY2 MjVfaW5pdGlhbF9zZXR1cCgpIC0tIHRoZSBjaGlwJ3MgZmlybXdhcmUgc3RhcnRzDQo+PiBhdXRv bWF0aWNhbGx5IG9uIHBvd2VyLW9uLCBzbyB0aGUgZXhwbGljaXQgc29mdHdhcmUgdHJpZ2dlciB3 YXMgZGVhZA0KPj4gd2VpZ2h0Lg0KPj4gDQo+PiBDaGFuZ2VzIGluIHYzOg0KPj4gLSBGaW5pc2gg dGhlIGJhbmtlZC1yZWdpc3RlciBsb2NraW5nIGZyb20gdjI6IGl0NjYyNV9pcnFfaW5mb2ZyYW1l X2xhdGNoKCkNCj4+ICAgYW5kIGdldF9hdWRpb19zYW1wbGluZ19yYXRlKCkgYWxzbyByZWFkIGJh bmtlZCByZWdpc3RlcnMgd2l0aG91dA0KPj4gICBpdDY2MjVfbG9jazsgdGFrZSB0aGUgbG9jayBp bnNpZGUgdGhlIENFQyBSWCBicmFuY2ggYWNyb3NzIHRoZQ0KPj4gICBsZW5ndGggcmVhZCwgZGF0 YSByZWFkIGFuZCBsZW5ndGgtY2xlYXIgdG9nZXRoZXIgKGNsb3NpbmcgYSBUT0NUT1UNCj4+ICAg d2hlcmUgdGhlIGxlbmd0aCBjb3VsZCBnbyBzdGFsZSB1bmRlciBsb2NrIGNvbnRlbnRpb24pLCBh bmQgc3RvcCB0aGUNCj4+ICAgUlggYnJhbmNoIGZyb20gdXNpbmcgYW4gZWFybHkgcmV0dXJuIHRo YXQgc2tpcHBlZCBhIHNpbXVsdGFuZW91cyBDRUMNCj4+ICAgVFggaW50ZXJydXB0Lg0KPj4gLSBG aXggaXQ2NjI1X3NfZWRpZCgpIGluY29ycmVjdGx5IHRyZWF0aW5nIGEgc3VjY2Vzc2Z1bCBFRElE IHdyaXRlIGFzDQo+PiAgIGEgZmFpbHVyZTogaXQ2NjI1X3dyaXRlX2VkaWQoKSByZXR1cm5zIGEg cG9zaXRpdmUgYmxvY2sgY291bnQgb24NCj4+ICAgc3VjY2Vzcywgbm90IDAsIHNvIGBpZiAoZXJy KWAgc2tpcHBlZCB0aGUgQ0VDIHBoeXMtYWRkciB1cGRhdGUgYW5kDQo+PiAgIEhQRCByZS1lbmFi bGUgb24gZXZlcnkgc3VjY2Vzc2Z1bCB3cml0ZS4gUHJlLWV4aXN0aW5nIHNpbmNlIHYxLCBub3QN Cj4+ICAgaW50cm9kdWNlZCBieSB0aGUgdjIgYmxvY2tzPT0wIGhhbmRsaW5nLg0KPj4gLSBBZGQg cmVhbCBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZIHN1cHBvcnQgaW4gZ2V0X2ZtdC9zZXRfZm10IHZp YQ0KPj4gICBzZF9zdGF0ZSwgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gdXNlZCBieSBhZHY3NjA0LmMs IGFuZCBsb2NrIHRoZQ0KPj4gICBjc2lfZm9ybWF0L21idXNfZm10X2NvZGUgY29tbWl0IGluIHRo ZSBBQ1RJVkUgcGF0aCBhZ2FpbnN0DQo+PiAgIGNvbmN1cnJlbnQgU19GTVQgY2FsbHMuDQo+PiAt IFJlYWQgdGhlIGNoaXAncyByZWFsIHBvcmNoL3N5bmMtd2lkdGggcmVnaXN0ZXJzDQo+PiAgIChS RUdfSF9GUF8xLi5SRUdfVl9CUF8wKSBpbiBpdDY2MjVfZ2V0X2RldGVjdGVkX3RpbWluZ3MoKSBp bnN0ZWFkIG9mDQo+PiAgIGx1bXBpbmcgdGhlIHdob2xlIGJsYW5raW5nIGludGVydmFsIGludG8g aHN5bmMvdnN5bmMsIHNvIGRldGVjdGVkDQo+PiAgIHRpbWluZ3MgY2FuIGFjdHVhbGx5IG1hdGNo IHRoZSBzdGFuZGFyZCBDRUEvVkVTQSB0YWJsZXMuDQo+PiANCj4+IEFsbCBmb3VuZCBieSB0aGUg c2FzaGlrby5kZXYgYXV0b21hdGVkIHJldmlldyBvZiB2Mi4gRm91ciBvdGhlciB2Mg0KPj4gcmV2 aWV3IGZpbmRpbmdzIHdlcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBjb2RlIGFuZCBhcmUgbm90IGJl aW5nIGFjdGVkDQo+PiBvbjoNCj4+IC0gInRpbWVyX2NvbnRhaW5lcl9vZigpIGRvZXNuJ3QgZXhp c3QiIC0tIGl0IGRvZXMNCj4+ICAgKGluY2x1ZGUvbGludXgvdGltZXIuaCksIHRoZSBkcml2ZXIg YWxyZWFkeSBidWlsZHMgY2xlYW4gd2l0aCBpdC4NCj4+IC0gImRldm1fa3phbGxvYydkIHN0YXRl ICsgc3ViZGV2IGRldm5vZGUgcmlza3MgYSBVQUYgb24gdW5iaW5kIiAtLQ0KPj4gICB0cnVlIGlu IHRoZSBhYnN0cmFjdCwgYnV0IGl0J3MgdGhlIGV4YWN0IHBhdHRlcm4gdXNlZCBieSBldmVyeQ0K Pj4gICBjb21wYXJhYmxlIGluLXRyZWUgZHJpdmVyICh0YzM1ODc0My5jLCBhZHY3NjA0LmMsIGFk djc4NDIuYyBhbGwNCj4+ICAgZGV2bV9remFsbG9jIHRoZWlyIG1haW4gc3RhdGUgc3RydWN0IGRl c3BpdGUgc2V0dGluZw0KPj4gICBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERSB0b28pLg0KPj4g LSAidW5yZWdpc3RlcmluZyB0aGUgc3ViZGV2IGJlZm9yZSBkaXNhYmxpbmcgSVJRL3dvcmsgaW4g cmVtb3ZlKCkNCj4+ICAgbGVhdmVzIHNkLT5kZXZub2RlIGRhbmdsaW5nIiAtLSBjaGVja2VkIHRo ZSBjb3JlOg0KPj4gICB2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldigpIG9ubHkgbWFya3Mg c2QtPmRldm5vZGUgdW5yZWdpc3RlcmVkDQo+PiAgIHZpYSB2aWRlb191bnJlZ2lzdGVyX2Rldmlj ZSgpLCBpdCBkb2VzIG5vdCBmcmVlIGl0OyB0aGUgc3RydWN0IGlzDQo+PiAgIGZyZWVkIGxhdGVy IHZpYSBrcmVmIG9uIGxhc3QgY2xvc2UsIHNvIHRoZSBwb2ludGVyIHN0YXlzIHZhbGlkLg0KPj4g LSB0aGUgcmVzaWR1YWwgImlvY3RsIHJlc2NoZWR1bGVzIGhwZF9kZWxheWVkX3dvcmsgY29uY3Vy cmVudGx5IHdpdGgNCj4+ICAgcmVtb3ZlKCkiIHJhY2UgLS0gcmVhbCBpbiB0aGUgYWJzdHJhY3Qg KHJlcXVpcmVzIGFuIGlvY3RsIGFscmVhZHkNCj4+ICAgaW4gZmxpZ2h0IGF0IHRoZSBleGFjdCBt b21lbnQgb2YgdW5iaW5kKSwgYnV0IG5vIHBlZXIgZHJpdmVyIGFkZHMNCj4+ICAgZXh0cmEgc3lu Y2hyb25pemF0aW9uIGZvciB0aGlzIGVpdGhlciAobm9uZSBzZXQgc2QtPmRldm5vZGUtPmxvY2sp LA0KPj4gICBhbmQgdGhlIHYyIGZpeCAodW5yZWdpc3RlciBmaXJzdCBpbiByZW1vdmUoKSkgYWxy ZWFkeSBuYXJyb3dlZCB0aGlzDQo+PiAgIGRvd24gdG8gdGhlIHNhbWUgcmVzaWR1YWwgcmlzayBs ZXZlbCBldmVyeSBwZWVyIGRyaXZlciBjYXJyaWVzLg0KPj4gDQo+PiBDaGFuZ2VzIGluIHYyOg0K Pj4gLSBGaXggcHJlbWF0dXJlIHY0bDJfYXN5bmNfcmVnaXN0ZXJfc3ViZGV2KCk6IG1vdmUgaXQg dG8gdGhlIGVuZCBvZg0KPj4gICBwcm9iZSgpIChhZnRlciBjdHJsIGhhbmRsZXIsIENFQyBhbmQg aW5pdGlhbCBoYXJkd2FyZSBzZXR1cCksIGFuZA0KPj4gICBtaXJyb3IgdGhlIHVucmVnaXN0ZXIg b3JkZXIgYXQgdGhlIHRvcCBvZiByZW1vdmUoKSwgY2xvc2luZyBhDQo+PiAgIHVzZS1hZnRlci1m cmVlIHdpbmRvdyB3aGVyZSBhIGNvbmN1cnJlbnQgaW9jdGwgY291bGQgcmVzY2hlZHVsZQ0KPj4g ICBocGRfZGVsYXllZF93b3JrIGR1cmluZyB0ZWFyZG93bi4NCj4+IC0gVGFrZSBpdDY2MjVfbG9j ayBhcm91bmQgdGhlIGJhbmtlZCByZWdpc3RlciByZWFkcyBpbg0KPj4gICBpdDY2MjVfZ2V0X2Rl dGVjdGVkX3RpbWluZ3MoKSBhbmQgdGhlIENFQyBSWCBwYXRoIGluDQo+PiAgIGl0NjYyNV9jZWNf aGFuZGxlcigpLCB3aGljaCBjb3VsZCBvdGhlcndpc2UgcmFjZSB3aXRoIGFuIGluLXByb2dyZXNz DQo+PiAgIEVESUQgcmVhZC93cml0ZSBhbmQgb2JzZXJ2ZSB0aGUgd3JvbmcgYmFuay4NCj4+IC0g Rml4IGl0NjYyNV93YWl0X2Zvcl9zdGF0dXMoKSdzIHBvbGwgaW50ZXJ2YWwgZXhjZWVkaW5nIHRo ZSB0aW1lb3V0DQo+PiAgIGJ1ZGdldCwgc3BsaXQgdGhlIENFQyBSWC9UWCBpbnRlcnJ1cHQgaGFu ZGxpbmcgb3V0IG9mIGFuIGVsc2UtaWYgc28NCj4+ICAgc2ltdWx0YW5lb3VzIGV2ZW50cyBhcmVu J3QgZHJvcHBlZCwgYW5kIHdhaXQgZm9yIGhhcmR3YXJlIHRvIGxhdGNoDQo+PiAgIHRoZSBDRUMg dHJhbnNtaXQgdHJpZ2dlciBiaXQgYmVmb3JlIHJlbGVhc2luZyB0aGUgbG9jay4NCj4+IC0gU3Rv cCBpdDY2MjVfc2V0X2ZtdCgpIGZyb20gbXV0YXRpbmcgYWN0aXZlIHN0YXRlIG9uDQo+PiAgIFY0 TDJfU1VCREVWX0ZPUk1BVF9UUlksIGFuZCBoYW5kbGUgZWRpZC0+YmxvY2tzID09IDAgaW4gZ19l ZGlkL3NfZWRpZA0KPj4gICBwZXIgdGhlIFY0TDIgc3BlYyAoY2FwYWNpdHkgcXVlcnkgLyBFRElE IGNsZWFyKS4NCj4+IC0gWmVyby1pbml0aWFsaXplIHRoZSBDRUMgcnhtc2cgYW5kIGRlYnVnZnMg bWlwaV9yZWcgd3JpdGUgYnVmZmVyIHRvDQo+PiAgIGF2b2lkIGxlYWtpbmcgdW5pbml0aWFsaXpl ZCBzdGFjayBieXRlcywgYW5kIHVzZSBkZXNpZ25hdGVkDQo+PiAgIGluaXRpYWxpemVycyBpbiB0 aGUgaTJjX2RldmljZV9pZCB0YWJsZS4NCj4+IA0KPj4gQWxsIGZvdW5kIGJ5IHRoZSBzYXNoaWtv LmRldiBhdXRvbWF0ZWQgcmV2aWV3IG9mIHYxLg0KPj4gLS0tDQo+PiAgTUFJTlRBSU5FUlMgICAg ICAgICAgICAgICAgfCAgICA3ICsNCj4+ICBkcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnICB8ICAg MTggKw0KPj4gIGRyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlIHwgICAgMSArDQo+PiAgZHJpdmVy cy9tZWRpYS9pMmMvaXQ2NjI1LmMgfCAyMjMxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrDQo+PiAgNCBmaWxlcyBjaGFuZ2VkLCAyMjU3IGluc2VydGlvbnMoKykN Cj4+IA0KPj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMNCj4+IGluZGV4 IDE1MDExZjU3NTJhOTk0Y2YxYjM1NGY0OTBkNmM0ZTQxMTU4OGRmODguLjJkNWIwZWUxMDdmOWUz MjU1YTUzNjVlYzBhMjUxNjdhNzE2YjFlNmUgMTAwNjQ0DQo+PiAtLS0gYS9NQUlOVEFJTkVSUw0K Pj4gKysrIGIvTUFJTlRBSU5FUlMNCj4+IEBAIC0xMzg0Nyw2ICsxMzg0NywxMyBAQCBUOglnaXQg aHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2RybS9taXNjL2tlcm5lbC5naXQNCj4+ICBG OglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9icmlkZ2UvaXRlLGl0 NjYxMjEueWFtbA0KPj4gIEY6CWRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjYxMjEuYw0K Pj4gIA0KPj4gK0lURSBJVDY2MjUgSERNSSB0byBNSVBJIE1FRElBIERSSVZFUg0KPj4gK006CUhl cm1lcyBXdSA8SGVybWVzLld1QGl0ZS5jb20udHc+DQo+PiArUzoJTWFpbnRhaW5lZA0KPj4gK1Q6 CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYS5naXQNCj4+ICtGOglEb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvbWVkaWEvaTJjL2l0ZSxpdDY2MjUueWFtbA0KPj4gK0Y6CWRyaXZl cnMvbWVkaWEvaTJjL2l0NjYyNS5jDQo+PiArDQo+PiAgSVZUViBWSURFTzRMSU5VWCBEUklWRVIN Cj4+ICBNOglBbmR5IFdhbGxzIDxhd2FsbHNAbWQubWV0cm9jYXN0Lm5ldD4NCj4+ICBMOglsaW51 eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2ky Yy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KPj4gaW5kZXggNWQxNzNlMGVj ZjQyNGYyZjIwNGY4ZDQyNmJlODE4ZTQ0MzU3ZjhlNC4uZmI0YjI0Njg0Zjc3MTBmOTBlYjM5OTk3 NmQxMWY1NzcwMTQ4OGQyNiAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25m aWcNCj4+ICsrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcNCj4+IEBAIC0xMjc4LDYgKzEy NzgsMjQgQEAgY29uZmlnIFZJREVPX0lTTDc5OThYDQo+PiAgCSAgU3VwcG9ydCBmb3IgSW50ZXJz aWwgSVNMNzk5OHggYW5hbG9nIHRvIE1JUEktQ1NJMiBvcg0KPj4gIAkgIEJULjY1NiBkZWNvZGVy Lg0KPj4gIA0KPj4gK2NvbmZpZyBWSURFT19JVDY2MjUNCj4+ICsJdHJpc3RhdGUgIklUNjYyNSBI RE1JIHRvIE1JUEkgQ1NJIGJyaWRnZSINCj4+ICsJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJD DQo+PiArCWRlcGVuZHMgb24gT0YNCj4+ICsJc2VsZWN0IENFQ19DT1JFDQo+PiArCXNlbGVjdCBN RURJQV9DT05UUk9MTEVSDQo+PiArCXNlbGVjdCBSRUdNQVBfSTJDDQo+PiArCXNlbGVjdCBWNEwy X0ZXTk9ERQ0KPj4gKwlzZWxlY3QgVklERU9fVjRMMl9TVUJERVZfQVBJDQo+PiArCWhlbHANCj4+ ICsJICBWNEwyIHN1YmRldmljZSBkcml2ZXIgZm9yIHRoZSBJVEUgSVQ2NjI1L0lUNjYyNiBIRE1J IHRvIE1JUEkNCj4+ICsJICBDU0ktMiBicmlkZ2UgY2hpcHMuIElUNjYyNSBhY2NlcHRzIGFuIEhE TUkgMi4wIGlucHV0IGFuZA0KPj4gKwkgIElUNjYyNiBhbiBIRE1JIDIuMSBpbnB1dCwgY29udmVy dGluZyBpdCB0byBhIE1JUEkgQ1NJLTINCj4+ICsJICBvdXRwdXQuIFRoZSBkcml2ZXIgYWxzbyBl eHBvc2VzIGFuIEhETUkgQ0VDIGFkYXB0ZXIuDQo+PiArDQo+PiArCSAgVG8gY29tcGlsZSB0aGlz IGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlDQo+PiArCSAgbW9kdWxlIHdp bGwgYmUgY2FsbGVkIGl0NjYyNS4NCj4+ICsNCj4+ICBjb25maWcgVklERU9fTFQ2OTExVVhFDQo+ PiAgCXRyaXN0YXRlICJMb250aXVtIExUNjkxMVVYRSBkZWNvZGVyIg0KPj4gIAlkZXBlbmRzIG9u IEFDUEkgJiYgVklERU9fREVWICYmIEkyQw0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEv aTJjL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUNCj4+IGluZGV4IGU0NTM1 OWVmZTBlNDFlMTNlM2MwODY5ZTVlYWQ3ZDZjZjRhY2EzYTcuLjliYmNlYWEzZDA3NTczOTU4ZWRi OGEzNmJjN2YwOTQyZjE0MTBhMzkgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9N YWtlZmlsZQ0KPj4gKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUNCj4+IEBAIC02Myw2 ICs2Myw3IEBAIG9iai0kKENPTkZJR19WSURFT19JTVg0MTIpICs9IGlteDQxMi5vDQo+PiAgb2Jq LSQoQ09ORklHX1ZJREVPX0lNWDQxNSkgKz0gaW14NDE1Lm8NCj4+ICBvYmotJChDT05GSUdfVklE RU9fSVJfSTJDKSArPSBpci1rYmQtaTJjLm8NCj4+ICBvYmotJChDT05GSUdfVklERU9fSVNMNzk5 OFgpICs9IGlzbDc5OTh4Lm8NCj4+ICtvYmotJChDT05GSUdfVklERU9fSVQ2NjI1KSArPSBpdDY2 MjUubw0KPj4gIG9iai0kKENPTkZJR19WSURFT19LUzAxMjcpICs9IGtzMDEyNy5vDQo+PiAgb2Jq LSQoQ09ORklHX1ZJREVPX0xNMzU2MCkgKz0gbG0zNTYwLm8NCj4+ICBvYmotJChDT05GSUdfVklE RU9fTE0zNjQ2KSArPSBsbTM2NDYubw0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJj L2l0NjYyNS5jIGIvZHJpdmVycy9tZWRpYS9pMmMvaXQ2NjI1LmMNCj4+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li5jNDc0MjJlZGViYTc5NjllYzNjOTQ1OTRhOTVhOTdjNjE3MGY0OWYyDQo+PiAtLS0gL2Rldi9u dWxsDQo+PiArKysgYi9kcml2ZXJzL21lZGlhL2kyYy9pdDY2MjUuYw0KPj4gQEAgLTAsMCArMSwy MjMxIEBADQo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPj4g Ky8qDQo+PiArICogaXQ2NjI1IC0gaXRlIEhETUkgdG8gTUlQSSBicmlkZ2UNCj4+ICsgKi8NCj4+ ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+ DQo+PiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPg0KPj4gKyNpbmNsdWRl IDxsaW51eC9oZG1pLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPg0KPj4gKyNpbmNsdWRl IDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+PiAr I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5o Pg0KPj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvc2xh Yi5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC92 NGwyLWR2LXRpbWluZ3MuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+DQo+PiAr I2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPg0KPj4gKw0KPj4gKyNpbmNsdWRlIDxtZWRpYS9j ZWMuaD4NCj4+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPg0KPj4gKyNpbmNsdWRlIDxt ZWRpYS92NGwyLWRldmljZS5oPg0KPj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWR2LXRpbWluZ3Mu aD4NCj4+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVudC5oPg0KPj4gKyNpbmNsdWRlIDxtZWRp YS92NGwyLWZ3bm9kZS5oPg0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZGVidWcgPSAzOw0KPj4gK21v ZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsNCj4+ICtNT0RVTEVfUEFSTV9ERVNDKGRlYnVn LCAiZGVidWcgbGV2ZWwgKDAtMykiKTsNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19DSElQX0lEXzAg MHgwMA0KPj4gKyNkZWZpbmUgUkVHX0NISVBfSURfMSAweDAxDQo+PiArI2RlZmluZSBSRUdfRldf VkVSX01BSk9SIDB4MDMNCj4+ICsjZGVmaW5lIFJFR19GV19WRVJfTUlOT1IgMHgwNA0KPj4gKyNk ZWZpbmUgUkVHX1BST1RPQ09MX1ZFUlNJT04gMHgwNQ0KPj4gKyNkZWZpbmUgQl9QVkVSX01JTk9S ICBCSVQoMCkNCj4+ICsjZGVmaW5lIEJfUFZFUl9NQUpPUiAgQklUKDQpDQo+PiArDQo+PiArI2Rl ZmluZSBSRUdfQ01EX1NFVCAweDEwDQo+PiArI2RlZmluZSBDTURfU0VUX0NFQ19MQSAweEMwDQo+ PiArI2RlZmluZSBDTURfU0VUX0NFQ19FTkFCTEUgMHhDMQ0KPj4gKw0KPj4gKyNkZWZpbmUgUkVH X0VESURfU1RBUlQgMHgyMA0KPj4gKyNkZWZpbmUgUkVHX0NFQ19SWF9EQVRBIDB4MjANCj4+ICsj ZGVmaW5lIFJFR19DRUNfVFhfREFUQSAweDMwDQo+PiArDQo+PiArI2RlZmluZSBSRUdfSF9BQ1RJ VkVfMSAweDUwDQo+PiArI2RlZmluZSBSRUdfSF9BQ1RJVkVfMCAweDUxDQo+PiArI2RlZmluZSBS RUdfVl9BQ1RJVkVfMSAweDUyDQo+PiArI2RlZmluZSBSRUdfVl9BQ1RJVkVfMCAweDUzDQo+PiAr I2RlZmluZSBSRUdfSF9UT1RBTF8xIDB4NTQNCj4+ICsjZGVmaW5lIFJFR19IX1RPVEFMXzAgMHg1 NQ0KPj4gKyNkZWZpbmUgUkVHX1ZfVE9UQUxfMSAweDU2DQo+PiArI2RlZmluZSBSRUdfVl9UT1RB TF8wIDB4NTcNCj4+ICsjZGVmaW5lIFJFR19WSURfUENMSyAweDU4DQo+PiArI2RlZmluZSBSRUdf SF9GUF8xIDB4NUMNCj4+ICsjZGVmaW5lIFJFR19IX0ZQXzAgMHg1RA0KPj4gKyNkZWZpbmUgUkVH X0hfU1dfMSAweDVFDQo+PiArI2RlZmluZSBSRUdfSF9TV18wIDB4NUYNCj4+ICsjZGVmaW5lIFJF R19IX0JQXzEgMHg2MA0KPj4gKyNkZWZpbmUgUkVHX0hfQlBfMCAweDYxDQo+PiArI2RlZmluZSBS RUdfVl9GUF8xIDB4NjINCj4+ICsjZGVmaW5lIFJFR19WX0ZQXzAgMHg2Mw0KPj4gKyNkZWZpbmUg UkVHX1ZfU1dfMSAweDY0DQo+PiArI2RlZmluZSBSRUdfVl9TV18wIDB4NjUNCj4+ICsjZGVmaW5l IFJFR19WX0JQXzEgMHg2Ng0KPj4gKyNkZWZpbmUgUkVHX1ZfQlBfMCAweDY3DQo+PiArI2RlZmlu ZSBSRUdfVklEX0lORk8gMHg2OA0KPj4gKyNkZWZpbmUgQl9JTlRFUkxBQ0UgIEJJVCgwKQ0KPj4g KyNkZWZpbmUgQl9IU1dQT0wgIEJJVCgxKQ0KPj4gKyNkZWZpbmUgQl9WU1dQT0wgIEJJVCgyKQ0K Pj4gKyNkZWZpbmUgQl9QSVhFTF9SRVAgIEJJVCg0KQ0KPj4gKw0KPj4gKyNkZWZpbmUgUkVHX1ZJ QyAweDY5DQo+PiArI2RlZmluZSBSRUdfSERNSV9WSURFT19JTkZPIDB4NkENCj4+ICsjZGVmaW5l IEJfQ09MT1JfTU9ERSAgQklUKDApDQo+PiArI2RlZmluZSBCX0NPTE9SX0RFUFRIICBCSVQoNCkN Cj4+ICsjZGVmaW5lIFJFR19IRE1JX0FVRElPX0lORk8xIDB4NkINCj4+ICsjZGVmaW5lIEJfQVVE X0ZTICBCSVQoMCkNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19IRE1JX0FVRElPX0lORk8yIDB4NkMN Cj4+ICsjZGVmaW5lIEJfQVVEX0NIICBCSVQoMCkNCj4+ICsjZGVmaW5lIEJfQVVEX1dMICBCSVQo NCkNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19IRE1JX0FVRElPX0lORk8zIDB4NkQNCj4+ICsjZGVm aW5lIEJfQVVEX1RZUEUgIEJJVCgwKQ0KPj4gKyNkZWZpbmUgQl9BVURfTVMgIEJJVCgyKQ0KPj4g KyNkZWZpbmUgQl9BVURfM0QgIEJJVCgzKQ0KPj4gKw0KPj4gKyNkZWZpbmUgUkVHX0FVRElPX0ZN VCAweDZFDQo+PiArI2RlZmluZSBCX0kyU19XTCAgQklUKDApDQo+PiArI2RlZmluZSBCX0kyU19B TE4gQklUKDIpDQo+PiArI2RlZmluZSBCX0kyU19ETFkgQklUKDMpDQo+PiArI2RlZmluZSBCX0ky U19MUiAgQklUKDQpDQo+PiArI2RlZmluZSBCX0kyU19TRlQgQklUKDUpDQo+PiArI2RlZmluZSBC X0FVRF9PVVRfSUYgIEJJVCg2KQ0KPj4gKw0KPj4gKyNkZWZpbmUgUkVHX0lGX0xBVENIX0hCIDB4 NkYNCj4+ICsjZGVmaW5lIFJFR19JRl9EQVRBIDB4NzANCj4+ICsjZGVmaW5lIFJFR19FTVBfREFU QSAweEEwDQo+PiArI2RlZmluZSBSRUdfQVZJX0RBVEEgMHhBRQ0KPj4gKw0KPj4gKyNkZWZpbmUg UkVHX1RYX1NUQVRVUyAweEUwDQo+PiArDQo+PiArI2RlZmluZSBSRUdfUlhfU1RBVFVTIDB4RTIN Cj4+ICsjZGVmaW5lIEJfUlhfNVYgQklUKDApDQo+PiArI2RlZmluZSBCX1JYX0hQRCBCSVQoMSkN Cj4+ICsjZGVmaW5lIEJfUlhfU1RBQkxFIEJJVCgyKQ0KPj4gKyNkZWZpbmUgQl9SWF9IRE1JIEJJ VCgzKQ0KPj4gKyNkZWZpbmUgQl9SWF9BVk1VVEUgQklUKDQpDQo+PiArI2RlZmluZSBCX1JYX0FV RF9PTiBCSVQoNSkNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19SWF9IRENQX1NUUyAweEUzDQo+PiAr I2RlZmluZSBCX0hEQ1AxX0FVVEhfU1RBUlQgQklUKDApDQo+PiArI2RlZmluZSBCX0hEQ1AyX0FV VEhfU1RBUlQgQklUKDEpDQo+PiArI2RlZmluZSBCX0hEQ1BfQVVUSF9ET05FIEJJVCgyKQ0KPj4g KyNkZWZpbmUgQl9IRENQX0VOQyBCSVQoMykNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19DRUNfU1RB VFVTIDB4RTQNCj4+ICsjZGVmaW5lIEJfQ0VDX1RYX0RPTkUgQklUKDApDQo+PiArI2RlZmluZSBC X0NFQ19UWF9OQUNLIEJJVCgxKQ0KPj4gKw0KPj4gKyNkZWZpbmUgUkVHX0NFQ19SWF9EQVRBX0xF TiAweEU1DQo+PiArI2RlZmluZSBSRUdfQ0VDX1RYX0RBVEFfTEVOIDB4RTYNCj4+ICsNCj4+ICsj ZGVmaW5lIFJFR19TWVNfTUlQSV9JTlQgMHhFQg0KPj4gKyNkZWZpbmUgQl9NSVBJX09VVFBVVF9F TkFCTEUgQklUKDApDQo+PiArI2RlZmluZSBCX01JUElfVklERU9fVU5TVEFCTEUgQklUKDEpDQo+ PiArDQo+PiArI2RlZmluZSBSRUdfUlhfSU5UX1NUQVRVUzEgMHhFQw0KPj4gKyNkZWZpbmUgQl9I RE1JXzVWX0NIRyAgIEJJVCgwKQ0KPj4gKyNkZWZpbmUgQl9IRE1JX1ZJRF9DSEcgIEJJVCgxKQ0K Pj4gKyNkZWZpbmUgQl9IRE1JX0FVRF9DSEcgIEJJVCgyKQ0KPj4gKyNkZWZpbmUgQl9IRE1JX0NQ X0NIRyAgIEJJVCgzKQ0KPj4gKyNkZWZpbmUgQl9IRE1JX0lGX0xBVENIIEJJVCg0KQ0KPj4gKyNk ZWZpbmUgQl9IRE1JX05PX0lGX0xBVENIICBCSVQoNSkNCj4+ICsjZGVmaW5lIEJfSERNSV9FTVAg ICAgICBCSVQoNikNCj4+ICsjZGVmaW5lIEJfSERNSV9OT19FTVAgICBCSVQoNykNCj4+ICsNCj4+ ICsjZGVmaW5lIFJFR19SWF9JTlRfU1RBVFVTMiAweEVEDQo+PiArI2RlZmluZSBCX0hETUlfQVZJ ICAgICAgQklUKDApDQo+PiArI2RlZmluZSBCX0hETUlfTk9fQVZJICAgQklUKDEpDQo+PiArI2Rl ZmluZSBCX0hETUlfVlNJRiAgICAgQklUKDIpDQo+PiArI2RlZmluZSBCX0hETUlfTk9fVlNJRiAg QklUKDMpDQo+PiArI2RlZmluZSBCX0hETUlfQVZNVVRFX0NIRyAgQklUKDQpDQo+PiArDQo+PiAr I2RlZmluZSBSRUdfQ0hJUF9DT05UUk9MIDB4RjANCj4+ICsjZGVmaW5lIEJfSERNSV9SRVNFVCAg QklUKDUpDQo+PiArI2RlZmluZSBCX0ZXX1NUQVJUICBCSVQoNikNCj4+ICsNCj4+ICsjZGVmaW5l IFJFR19NSVBJX0NGRyAweEYxDQo+PiArI2RlZmluZSBNX01JUElfTEFORSAgMHgwMw0KPj4gKyNk ZWZpbmUgQl9NSVBJX1NQTElUICBCSVQoMikNCj4+ICsjZGVmaW5lIEJfTUlQSV9TUExJVF9DRkcg IEJJVCgzKQ0KPj4gKyNkZWZpbmUgQl9NSVBJX0RQSFkgIEJJVCg0KQ0KPj4gKyNkZWZpbmUgQl9N SVBJX1VTRV9EU0kgIEJJVCg1KQ0KPj4gKyNkZWZpbmUgQl9NSVBJX0NPTlRJTlVfQ0xLICBCSVQo NikNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19NSVBJX0RBVEFfVFlQRSAweEYyDQo+PiArI2RlZmlu ZSBDU0lfUkdCNDQ0ICAgICAgICAgIDB4MjANCj4+ICsjZGVmaW5lIENTSV9SR0I1NTUgICAgICAg ICAgMHgyMQ0KPj4gKyNkZWZpbmUgQ1NJX1JHQjU2NSAgICAgICAgICAweDIyDQo+PiArI2RlZmlu ZSBDU0lfUkdCNjY2ICAgICAgICAgIDB4MjMNCj4+ICsjZGVmaW5lIENTSV9SR0I4ODggICAgICAg ICAgMHgyNA0KPj4gKyNkZWZpbmUgQ1NJX1lVVjQyMF84Yl9MICAgICAweDFBDQo+PiArI2RlZmlu ZSBDU0lfWVVWNDIwXzhiICAgICAgIDB4MUMNCj4+ICsjZGVmaW5lIENTSV9ZVVY0MjBfMTBiICAg ICAgMHgxRA0KPj4gKyNkZWZpbmUgQ1NJX1lVVjQyMl84YiAgICAgICAweDFFDQo+PiArI2RlZmlu ZSBDU0lfWVVWNDIyXzEwYiAgICAgIDB4MUYNCj4+ICsjZGVmaW5lIENTSV9SR0JfMTBiICAgICAg ICAgMHgzMA0KPj4gKyNkZWZpbmUgQ1NJX1JHQl8xMmIgICAgICAgICAweDMxDQo+PiArI2RlZmlu ZSBDU0lfWVVWNDIyXzEyYiAgICAgIDB4MzINCj4+ICsjZGVmaW5lIENTSV9ZVVY0MjBfMTBiX0wg ICAgMHgzMw0KPj4gKyNkZWZpbmUgQ1NJX1lVVjQyMF8xMmIgICAgICAweDM0DQo+PiArI2RlZmlu ZSBDU0lfWVVWNDQ0XzhiICAgICAgIDB4MzUNCj4+ICsjZGVmaW5lIENTSV9ZVVY0NDRfMTBiICAg ICAgMHgzNg0KPj4gKyNkZWZpbmUgQ1NJX1lVVjQ0NF8xMmIgICAgICAweDM3DQo+PiArDQo+PiAr I2RlZmluZSBSRUdfTUlQSV9DT05UUk9MIDB4RjMNCj4+ICsjZGVmaW5lIEJfTUlQSV9PVVRQVVQg ICAgQklUKDApDQo+PiArDQo+PiArI2RlZmluZSBSRUdfUlhfQ0ZHIDB4RjQNCj4+ICsjZGVmaW5l IEJfTUFOVUFMX0hQRCAgICBCSVQoMCkNCj4+ICsjZGVmaW5lIEJfSFBEX0hJR0ggICAgQklUKDEp DQo+PiArI2RlZmluZSBCX0hQRF9UT0dHTEUgICAgQklUKDMpDQo+PiArDQo+PiArI2RlZmluZSBS RUdfQ1NDX0NGRyAweEY1DQo+PiArI2RlZmluZSBCX0RZTkFNSUNfUkFOR0UgQklUKDApDQo+PiAr DQo+PiArI2RlZmluZSBSRUdfTUlTQ19DRkcgMHhGNg0KPj4gKyNkZWZpbmUgQl9CQVVEX1JBVEUg QklUKDApDQo+PiArI2RlZmluZSBCX0RFQlVHX01TRyBCSVQoMSkNCj4+ICsNCj4+ICsjZGVmaW5l IFJFR19IUERfREVMQVkgMHhGNw0KPj4gKyNkZWZpbmUgQl9ERUxBWV9DT1VOVCBCSVQoMCkNCj4+ ICsjZGVmaW5lIEJfREVMQVlfVU5JVCBCSVQoNykNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19JTkZP X0JBTktfU0VMIDB4RkQNCj4+ICsjZGVmaW5lIENUTF9CQU5LX0VESURfUkVBRCAxDQo+PiArI2Rl ZmluZSBDVExfQkFOS19FRElEX1dSSVRFIDUNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19IT1NUX0NU UkxfSU5UIDB4RkUNCj4+ICsjZGVmaW5lIEJfQ01EX1NFVCBCSVQoNCkNCj4+ICsjZGVmaW5lIEJf Q0VDX1NFTkRfREFUQSBCSVQoNSkNCj4+ICsjZGVmaW5lIEJfQ09ORklHX1VQREFURSBCSVQoNikN Cj4+ICsjZGVmaW5lIEJfSUZfQkFOSyBCSVQoNykNCj4+ICsNCj4+ICsjZGVmaW5lIFJFR19NQ1Vf SU5URVJSVVBUIDB4RkYNCj4+ICsjZGVmaW5lIEJfU1lTX0lOVF9BQ1RJVkUgQklUKDApDQo+PiAr I2RlZmluZSBCX0NFQ19SWF9SRUNFSVZFRCBCSVQoMSkNCj4+ICsjZGVmaW5lIEJfQ0VDX1RYX1VQ REFURSBCSVQoMikNCj4+ICsNCj4+ICsjZGVmaW5lIEVESURfTlVNX0JMT0NLU19NQVggNA0KPj4g KyNkZWZpbmUgRURJRF9CTE9DS19TSVpFIDEyOA0KPj4gKw0KPj4gKyNkZWZpbmUgSTJDX01BWF9Y RkVSX1NJWkUgIDgNCj4+ICsjZGVmaW5lIFBPTExfSU5URVJWQUxfQ0VDX01TCTEwDQo+PiArI2Rl ZmluZSBQT0xMX0lOVEVSVkFMX01TCTQwDQo+PiArDQo+PiArI2RlZmluZSBBVUQzMksgICAweDAz DQo+PiArI2RlZmluZSBBVUQ0NEsgICAweDAwDQo+PiArI2RlZmluZSBBVUQ0OEsgICAweDAyDQo+ PiArI2RlZmluZSBBVUQ2NEsgICAweDBCDQo+PiArI2RlZmluZSBBVUQ4OEsgICAweDA4DQo+PiAr I2RlZmluZSBBVUQ5NksgICAweDBBDQo+PiArI2RlZmluZSBBVUQxMjhLICAweDJCDQo+PiArI2Rl ZmluZSBBVUQxNzZLICAweDBDDQo+PiArI2RlZmluZSBBVUQxOTJLICAweDBFDQo+PiArI2RlZmlu ZSBBVUQyNTZLICAweDFCDQo+PiArI2RlZmluZSBBVUQzNTJLICAweDBEDQo+PiArI2RlZmluZSBB VUQzODRLICAweDA1DQo+PiArI2RlZmluZSBBVUQ1MTJLICAweDNCDQo+PiArI2RlZmluZSBBVUQ3 MDVLICAweDJEDQo+PiArI2RlZmluZSBBVUQ3NjhLICAweDA5DQo+PiArI2RlZmluZSBBVUQxMDI0 SyAweDM1DQo+PiArI2RlZmluZSBBVUQxNDExSyAweDFEDQo+PiArI2RlZmluZSBBVUQxNTM2SyAw eDE1DQo+PiArDQo+PiArZW51bSBpdDY2MjVfY2hpcF90eXBlIHsNCj4+ICsJSVQ2NjI1X0NISVAg PSAwLA0KPj4gKwlJVDY2MjZfQ0hJUCA9IDEsDQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgaXQ2 NjI1IHsNCj4+ICsJc3RydWN0IGRldmljZSAqZGV2Ow0KPj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAq aTJjX2NsaWVudDsNCj4+ICsJc3RydWN0IHJlZ21hcCAqaXQ2NjI1X3JlZ21hcDsNCj4+ICsJZW51 bSBpdDY2MjVfY2hpcF90eXBlIGNoaXBfdHlwZTsNCj4+ICsNCj4+ICsJLyogcHJvdGVjdHMgY29u Y3VycmVudCBhY2Nlc3MgdG8gdGhlIGNoaXAncyByZWdpc3RlcnMgYW5kIHN0YXRlICovDQo+PiAr CXN0cnVjdCBtdXRleCBpdDY2MjVfbG9jazsNCj4+ICsNCj4+ICsJc3RydWN0IHY0bDJfc3ViZGV2 IHNkOw0KPj4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2NvbmZpZ19taXBpX2NzaTIgYnVzOw0KPj4gKwlz dHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2Ow0KPj4gKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZDsNCj4+ ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGhkbDsNCj4+ICsNCj4+ICsJLyogY29udHJvbHMg Ki8NCj4+ICsJc3RydWN0IHY0bDJfY3RybCAqY3RybF81dl9kZXRlY3Q7DQo+PiArCXN0cnVjdCB2 NGwyX2N0cmwgKmN0cmxfYXVkaW9fc2FtcGxpbmdfcmF0ZTsNCj4+ICsJc3RydWN0IHY0bDJfY3Ry bCAqY3RybF9hdWRpb19wcmVzZW50Ow0KPj4gKwlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsX2xpbmtf ZnJlcTsNCj4+ICsJc3RydWN0IHY0bDJfY3RybCAqY3RybF9nZXRfaGRtaV9pbmZvOw0KPj4gKwlz dHJ1Y3QgdjRsMl9jdHJsICpjdHJsX21pcGlfY29uZmlnOw0KPj4gKw0KPj4gKwlzdHJ1Y3QgZGVs YXllZF93b3JrIGhwZF9kZWxheWVkX3dvcms7DQo+PiArDQo+PiArCXN0cnVjdCB0aW1lcl9saXN0 IHRpbWVyOw0KPj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcG9sbGluZ193b3JrOw0KPj4gKw0KPj4g KwlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzIHRpbWluZ3M7DQo+PiArDQo+PiArCXU4IGNzaV9sYW5l czsNCj4+ICsJdTggcG9ydF9udW07DQo+PiArCWVudW0gdjRsMl9tYnVzX3R5cGUgYnVzX3R5cGU7 DQo+PiArCXU4IGNzaV9mb3JtYXQ7DQo+PiArCXUzMiBtYnVzX2ZtdF9jb2RlOw0KPj4gKw0KPj4g KwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOw0KPj4gKw0KPj4gKwlzdHJ1Y3QgY2VjX2Fk YXB0ZXIgKmNlY19hZGFwOw0KPj4gKw0KPj4gKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RpcjsN Cj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzNjQgaXQ2NjI1X2xpbmtfZnJlcVtdID0g eyA0NDU1MDAwMDAgfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZHZfdGlt aW5nc19jYXAgaXQ2NjI1X3RpbWluZ3NfY2FwID0gew0KPj4gKwkudHlwZSA9IFY0TDJfRFZfQlRf NjU2XzExMjAsDQo+PiArCS8qIGtlZXAgdGhpcyBpbml0aWFsaXphdGlvbiBmb3IgY29tcGF0aWJp bGl0eSB3aXRoIEdDQyA8IDQuNC42ICovDQo+PiArCS5yZXNlcnZlZCA9IHsgMCB9LA0KPj4gKw0K Pj4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUyg2NDAsIDM4NDAsIDQ4MCwgMjE2MCwgMjcwMDAwMDAs IDMwMDAwMDAwMCwNCj4+ICsJCQkgICAgIFY0TDJfRFZfQlRfU1REX0NFQTg2MSB8IFY0TDJfRFZf QlRfU1REX0RNVCB8DQo+PiArCQkJICAgICBWNEwyX0RWX0JUX1NURF9HVEYgfCBWNEwyX0RWX0JU X1NURF9DVlQsDQo+PiArCQkJICAgICBWNEwyX0RWX0JUX0NBUF9QUk9HUkVTU0lWRSB8IFY0TDJf RFZfQlRfQ0FQX0lOVEVSTEFDRUQgfA0KPj4gKwkJCSAgICAgVjRMMl9EVl9CVF9DQVBfUkVEVUNF RF9CTEFOS0lORyB8IFY0TDJfRFZfQlRfQ0FQX0NVU1RPTSkNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaXQ2NjI1X2Zvcm1hdF9pbmZvIHsNCj4+ICsJdTggY3NpX2Zvcm1h dDsNCj4+ICsJdTMyIG1idXNfZm10X2NvZGU7DQo+PiArfSBpdDY2MjVfZm9ybWF0c1tdID0gew0K Pj4gKwl7IENTSV9ZVVY0MjJfOGIsIE1FRElBX0JVU19GTVRfVVlWWThfMVgxNiB9LA0KPj4gKwl7 IENTSV9SR0I4ODgsIE1FRElBX0JVU19GTVRfUkdCODg4XzFYMjQgfSwNCj4+ICsJeyBDU0lfWVVW NDQ0XzhiLCBNRURJQV9CVVNfRk1UX1lVVjhfMVgyNCB9LA0KPj4gK307DQo+PiArDQo+PiArc3Rh dGljIGlubGluZSBpbnQgaXQ2NjI1X2NzaV9mb3JtYXRfaWR4KHU4IGNzaV9mb3JtYXQpDQo+PiAr ew0KPj4gKwlpbnQgaTsNCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXQ2 NjI1X2Zvcm1hdHMpOyBpKyspIHsNCj4+ICsJCWlmIChpdDY2MjVfZm9ybWF0c1tpXS5jc2lfZm9y bWF0ID09IGNzaV9mb3JtYXQpDQo+PiArCQkJcmV0dXJuIGk7DQo+PiArCX0NCj4+ICsNCj4+ICsJ cmV0dXJuIC1FSU5WQUw7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgaW50IGl0NjYy NV9jc2lfbWJ1c19jb2RlX2lkeCh1MzIgbWJ1c19mbXRfY29kZSkNCj4+ICt7DQo+PiArCWludCBp Ow0KPj4gKw0KPj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpdDY2MjVfZm9ybWF0cyk7 IGkrKykgew0KPj4gKwkJaWYgKGl0NjYyNV9mb3JtYXRzW2ldLm1idXNfZm10X2NvZGUgPT0gbWJ1 c19mbXRfY29kZSkNCj4+ICsJCQlyZXR1cm4gaTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4g LUVJTlZBTDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaXQ2NjI1ICpz ZF90b182NjI1KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpDQo+PiArew0KPj4gKwlyZXR1cm4gY29u dGFpbmVyX29mKHNkLCBzdHJ1Y3QgaXQ2NjI1LCBzZCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyBpbmxpbmUgc3RydWN0IGl0NjYyNSAqaGRsX3RvXzY2MjUoc3RydWN0IHY0bDJfY3RybF9oYW5k bGVyICpoZGwpDQo+PiArew0KPj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGhkbCwgc3RydWN0IGl0 NjYyNSwgaGRsKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBf Y29uZmlnIGl0NjYyNV9yZWdtYXBfY29uZmlnID0gew0KPj4gKwkucmVnX2JpdHMgPSA4LA0KPj4g KwkudmFsX2JpdHMgPSA4LA0KPj4gKwkubWF4X3JlZ2lzdGVyID0gMHhmZiwNCj4+ICsJLmNhY2hl X3R5cGUgPSBSRUdDQUNIRV9OT05FLA0KPj4gKwkubWF4X3Jhd19yZWFkID0gSTJDX01BWF9YRkVS X1NJWkUsDQo+PiArCS5tYXhfcmF3X3dyaXRlID0gSTJDX01BWF9YRkVSX1NJWkUsDQo+PiArfTsN Cj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9yZWdtYXBfaTJjX2luaXQoc3RydWN0IGkyY19j bGllbnQgKmNsaWVudCwNCj4+ICsJCQkJICBzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiArew0K Pj4gKwlpdDY2MjUtPmkyY19jbGllbnQgPSBjbGllbnQ7DQo+PiArCWl0NjYyNS0+ZGV2ID0gJmNs aWVudC0+ZGV2Ow0KPj4gKw0KPj4gKwlpdDY2MjUtPml0NjYyNV9yZWdtYXAgPSBkZXZtX3JlZ21h cF9pbml0X2kyYyhpdDY2MjUtPmkyY19jbGllbnQsDQo+PiArCQkJCQkJICAgICAmaXQ2NjI1X3Jl Z21hcF9jb25maWcpOw0KPj4gKwlpZiAoSVNfRVJSKGl0NjYyNS0+aXQ2NjI1X3JlZ21hcCkpDQo+ PiArCQlyZXR1cm4gUFRSX0VSUihpdDY2MjUtPml0NjYyNV9yZWdtYXApOw0KPj4gKw0KPj4gKwly ZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfcmVhZF9ieXRlKHN0 cnVjdCBpdDY2MjUgKml0NjYyNSwgdTggcmVnKQ0KPj4gK3sNCj4+ICsJdW5zaWduZWQgaW50IHZh bDsNCj4+ICsJaW50IGVycjsNCj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gaXQ2NjI1LT5kZXY7 DQo+PiArDQo+PiArCWVyciA9IHJlZ21hcF9yZWFkKGl0NjYyNS0+aXQ2NjI1X3JlZ21hcCwgcmVn LCAmdmFsKTsNCj4+ICsJaWYgKGVyciA8IDApIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAicmVnWzB4 JXhdIHJlYWQgZmFpbGVkIGVycjogJWQiLCByZWcsIGVycik7DQo+PiArCQlyZXR1cm4gZXJyOw0K Pj4gKwl9DQo+PiArDQo+PiArCXJldHVybiB2YWw7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBp bnQgaXQ2NjI1X3dyaXRlX2J5dGUoc3RydWN0IGl0NjYyNSAqaXQ2NjI1LCB1OCByZWcsIHU4IHZh bCkNCj4+ICt7DQo+PiArCWludCBlcnI7DQo+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGl0NjYy NS0+ZGV2Ow0KPj4gKw0KPj4gKwllcnIgPSByZWdtYXBfd3JpdGUoaXQ2NjI1LT5pdDY2MjVfcmVn bWFwLCByZWcsIHZhbCk7DQo+PiArCWlmIChlcnIgPCAwKSB7DQo+PiArCQlkZXZfZXJyKGRldiwg InJlZ1sweCV4XSB3cml0ZSBmYWlsZWQgZXJyOiAlZCIsIHJlZywgZXJyKTsNCj4+ICsJCXJldHVy biBlcnI7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgaXQ2NjI1X3NldF9iaXRzKHN0cnVjdCBpdDY2MjUgKml0NjYyNSwgdTggcmVnLCB1 OCBtYXNrLCB1OCB2YWwpDQo+PiArew0KPj4gKwlpbnQgZXJyOw0KPj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBpdDY2MjUtPmRldjsNCj4+ICsNCj4+ICsJZXJyID0gcmVnbWFwX3VwZGF0ZV9iaXRz KGl0NjYyNS0+aXQ2NjI1X3JlZ21hcCwgcmVnLCBtYXNrLCB2YWwpOw0KPj4gKwlpZiAoZXJyIDwg MCkgew0KPj4gKwkJZGV2X2VycihkZXYsICJyZWdbMHgleF0gc2V0IGJpdHMgZmFpbGVkIGVycjog JWQiLCByZWcsIGVycik7DQo+PiArCQlyZXR1cm4gZXJyOw0KPj4gKwl9DQo+PiArDQo+PiArCXJl dHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9yZWFkX2J5dGVzKHN0 cnVjdCBpdDY2MjUgKml0NjYyNSwgdTggcmVnLCB1OCAqYnVmLCBpbnQgbGVuKQ0KPj4gK3sNCj4+ ICsJaW50IGVycjsNCj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gaXQ2NjI1LT5kZXY7DQo+PiAr DQo+PiArCWVyciA9IHJlZ21hcF9idWxrX3JlYWQoaXQ2NjI1LT5pdDY2MjVfcmVnbWFwLCByZWcs IGJ1ZiwgbGVuKTsNCj4+ICsJaWYgKGVyciA8IDApIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAicmVn WzB4JXhdIHJlYWQgZmFpbGVkIGVycjogJWQiLCByZWcsIGVycik7DQo+PiArCQlyZXR1cm4gZXJy Ow0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMg aW50IGl0NjYyNV93cml0ZV9ieXRlcyhzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUsIHU4IHJlZywgdTgg KmJ1ZiwgaW50IGxlbikNCj4+ICt7DQo+PiArCWludCBlcnI7DQo+PiArCXN0cnVjdCBkZXZpY2Ug KmRldiA9IGl0NjYyNS0+ZGV2Ow0KPj4gKw0KPj4gKwllcnIgPSByZWdtYXBfYnVsa193cml0ZShp dDY2MjUtPml0NjYyNV9yZWdtYXAsIHJlZywgYnVmLCBsZW4pOw0KPj4gKwlpZiAoZXJyIDwgMCkg ew0KPj4gKwkJZGV2X2VycihkZXYsICJyZWdbMHgleF0gd3JpdGUgZmFpbGVkIGVycjogJWQiLCBy ZWcsIGVycik7DQo+PiArCQlyZXR1cm4gZXJyOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAw Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV93YWl0X2Zvcl9zdGF0dXMoc3Ry dWN0IGl0NjYyNSAqaXQ2NjI1LCB1OCByZWcsIHU4IHZhbCwNCj4+ICsJCQkJICBpbnQgdGltZW91 dF9tcykNCj4+ICt7DQo+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGl0NjYyNS0+ZGV2Ow0KPj4g KwlpbnQgc3RhdHVzOw0KPj4gKwlpbnQgcnZhbDsNCj4+ICsJaW50IHNsZWVwX21zID0gMTA7DQo+ PiArCWludCB0aW1lb3V0X3JvdW5kX21zID0gRElWX1JPVU5EX1VQKHRpbWVvdXRfbXMsIHNsZWVw X21zKSAqIHNsZWVwX21zOw0KPj4gKw0KPj4gKwlzdGF0dXMgPSByZWFkX3BvbGxfdGltZW91dChp dDY2MjVfcmVhZF9ieXRlLCBydmFsLCBydmFsID09IHZhbCwNCj4+ICsJCQkJICAgc2xlZXBfbXMg KiAxMDAwLA0KPj4gKwkJCQkgICB0aW1lb3V0X3JvdW5kX21zICogMTAwMCwNCj4+ICsJCQkJICAg ZmFsc2UsIGl0NjYyNSwgcmVnKTsNCj4+ICsNCj4+ICsJZGV2X2luZm8oZGV2LCAiJXMgc3RhdHVz ID0gJWQgJWQiLCBfX2Z1bmNfXywgc3RhdHVzLCAoaW50KXJ2YWwpOw0KPj4gKwlpZiAoc3RhdHVz IDwgMCkgew0KPj4gKwkJZGV2X2VycihkZXYsICIlcyBlcnIgc3RhdHVzID0gJWQiLCBfX2Z1bmNf Xywgc3RhdHVzKTsNCj4+ICsJCXJldHVybiAtRVRJTUVET1VUOw0KPj4gKwl9DQo+PiArDQo+PiAr CXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBpdDY2MjVfd3JpdGVfY29t bWFuZChzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUsIHU4ICpjbWRzLCBpbnQgY21kX2xlbikNCj4+ICt7 DQo+PiArCWl0NjYyNV93cml0ZV9ieXRlcyhpdDY2MjUsIFJFR19DTURfU0VULCBjbWRzLCBjbWRf bGVuKTsNCj4+ICsJaXQ2NjI1X3dyaXRlX2J5dGUoaXQ2NjI1LCBSRUdfSE9TVF9DVFJMX0lOVCwg Ql9DTURfU0VUKTsNCj4+ICsJaXQ2NjI1X3dhaXRfZm9yX3N0YXR1cyhpdDY2MjUsIFJFR19IT1NU X0NUUkxfSU5ULCAweDAwLCAyNSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1 X3VwZGF0ZV9jb25maWcoc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJaW50IGVy cjsNCj4+ICsNCj4+ICsJZXJyID0gaXQ2NjI1X3NldF9iaXRzKGl0NjYyNSwgUkVHX0hPU1RfQ1RS TF9JTlQsDQo+PiArCQkJICAgICAgQl9DT05GSUdfVVBEQVRFLCBCX0NPTkZJR19VUERBVEUpOw0K Pj4gKwlpZiAoZXJyIDwgMCkNCj4+ICsJCXJldHVybiBlcnI7DQo+PiArDQo+PiArCXJldHVybiBp dDY2MjVfd2FpdF9mb3Jfc3RhdHVzKGl0NjYyNSwgUkVHX0hPU1RfQ1RSTF9JTlQsIDB4MDAsIDI1 KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfc2V0X2Jhbmsoc3RydWN0IGl0 NjYyNSAqaXQ2NjI1LCB1OCBiYW5rKQ0KPj4gK3sNCj4+ICsJaW50IGVycjsNCj4+ICsNCj4+ICsJ ZXJyID0gaXQ2NjI1X3dyaXRlX2J5dGUoaXQ2NjI1LCBSRUdfSU5GT19CQU5LX1NFTCwgYmFuayk7 DQo+PiArCWlmIChlcnIgPCAwKQ0KPj4gKwkJcmV0dXJuIGVycjsNCj4+ICsNCj4+ICsJZXJyID0g aXQ2NjI1X3dyaXRlX2J5dGUoaXQ2NjI1LCBSRUdfSE9TVF9DVFJMX0lOVCwgQl9JRl9CQU5LKTsN Cj4+ICsJaWYgKGVyciA8IDApDQo+PiArCQlyZXR1cm4gZXJyOw0KPj4gKw0KPj4gKwlyZXR1cm4g aXQ2NjI1X3dhaXRfZm9yX3N0YXR1cyhpdDY2MjUsIFJFR19IT1NUX0NUUkxfSU5ULCAweDAwLCAy NSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19oZG1pKHN0cnVjdCBp dDY2MjUgKml0NjYyNSkNCj4+ICt7DQo+PiArCWludCB2YWw7DQo+PiArDQo+PiArCXZhbCA9IGl0 NjYyNV9yZWFkX2J5dGUoaXQ2NjI1LCBSRUdfUlhfU1RBVFVTKTsNCj4+ICsJcmV0dXJuICh2YWwg PCAwKSA/IGZhbHNlIDogKHZhbCAmIEJfUlhfSERNSSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyBpbmxpbmUgYm9vbCBoZG1pXzV2X3Bvd2VyX3ByZXNlbnQoc3RydWN0IGl0NjYyNSAqaXQ2NjI1 KQ0KPj4gK3sNCj4+ICsJaW50IHZhbDsNCj4+ICsNCj4+ICsJdmFsID0gaXQ2NjI1X3JlYWRfYnl0 ZShpdDY2MjUsIFJFR19SWF9TVEFUVVMpOw0KPj4gKwlyZXR1cm4gKHZhbCA8IDApID8gZmFsc2Ug OiAodmFsICYgQl9SWF81Vik7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBu b19zaWduYWwoc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJaW50IHZhbDsNCj4+ ICsNCj4+ICsJdmFsID0gaXQ2NjI1X3JlYWRfYnl0ZShpdDY2MjUsIFJFR19SWF9TVEFUVVMpOw0K Pj4gKwlyZXR1cm4gKHZhbCA8IDApID8gdHJ1ZSA6ICEodmFsICYgQl9SWF9TVEFCTEUpOw0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgYXVkaW9fcHJlc2VudChzdHJ1Y3QgaXQ2 NjI1ICppdDY2MjUpDQo+PiArew0KPj4gKwlpbnQgdmFsOw0KPj4gKw0KPj4gKwl2YWwgPSBpdDY2 MjVfcmVhZF9ieXRlKGl0NjYyNSwgUkVHX1JYX1NUQVRVUyk7DQo+PiArCXJldHVybiAodmFsIDwg MCkgPyBmYWxzZSA6ICh2YWwgJiBCX1JYX0FVRF9PTik7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyBpbnQgZ2V0X2F1ZGlvX3NhbXBsaW5nX3JhdGUoc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4g K3sNCj4+ICsJdTggZnNfaWQ7DQo+PiArCWludCBpLCBmcmVxID0gMDsNCj4+ICsJY29uc3Qgc3Ry dWN0IGZzX2lkX21hcCB7DQo+PiArCQl1OCBmc19pZDsNCj4+ICsJCXUxNiBmcmVxOw0KPj4gKwl9 IHNfZnNpZF9tYXBbXSA9IHsNCj4+ICsJCXsgQVVEMzJLLCAzMiB9LA0KPj4gKwkJeyBBVUQ0NEss IDQ0IH0sDQo+PiArCQl7IEFVRDQ4SywgNDggfSwNCj4+ICsJCXsgQVVENjRLLCA2NCB9LA0KPj4g KwkJeyBBVUQ4OEssIDg4IH0sDQo+PiArCQl7IEFVRDk2SywgOTYgfSwNCj4+ICsNCj4+ICsJCXsg QVVEMTI4SywgMTI4IH0sDQo+PiArCQl7IEFVRDE3NkssIDE3NiB9LA0KPj4gKwkJeyBBVUQxOTJL LCAxOTIgfSwNCj4+ICsJCXsgQVVEMjU2SywgMjU2IH0sDQo+PiArCQl7IEFVRDM1MkssIDM1MiB9 LA0KPj4gKwkJeyBBVUQzODRLLCAzODQgfSwNCj4+ICsNCj4+ICsJCXsgQVVENTEySywgNTEyIH0s DQo+PiArCQl7IEFVRDcwNUssIDcwNSB9LA0KPj4gKwkJeyBBVUQ3NjhLLCA3NjggfSwNCj4+ICsJ CXsgQVVEMTAyNEssIDEwMjQgfSwNCj4+ICsJCXsgQVVEMTQxMUssIDE0MTEgfSwNCj4+ICsJCXsg QVVEMTUzNkssIDE1MzYgfSwNCj4+ICsJfTsNCj4+ICsNCj4+ICsJaWYgKG5vX3NpZ25hbChpdDY2 MjUpIHx8ICFhdWRpb19wcmVzZW50KGl0NjYyNSkpDQo+PiArCQlyZXR1cm4gMDsNCj4+ICsNCj4+ ICsJZ3VhcmQobXV0ZXgpKCZpdDY2MjUtPml0NjYyNV9sb2NrKTsNCj4+ICsNCj4+ICsJZnNfaWQg PSBpdDY2MjVfcmVhZF9ieXRlKGl0NjYyNSwgUkVHX0hETUlfQVVESU9fSU5GTzEpOw0KPj4gKw0K Pj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzX2ZzaWRfbWFwKTsgaSsrKSB7DQo+PiAr CQlpZiAoc19mc2lkX21hcFtpXS5mc19pZCA9PSBmc19pZCkgew0KPj4gKwkJCWZyZXEgPSBzX2Zz aWRfbWFwW2ldLmZyZXEgKiAxMDAwOw0KPj4gKwkJCWJyZWFrOw0KPj4gKwkJfQ0KPj4gKwl9DQo+ PiArDQo+PiArCXJldHVybiBmcmVxOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdTY0IGl0NjYy NV9nZXRfcGNsayhzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiArew0KPj4gKwl1MzIgcGNsazsN Cj4+ICsJdTggY2tbNF07DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCXJldCA9IGl0NjYyNV9y ZWFkX2J5dGVzKGl0NjYyNSwgUkVHX1ZJRF9QQ0xLLCBjaywgNCk7DQo+PiArCWlmIChyZXQgPCAw KSB7DQo+PiArCQlkZXZfZXJyKGl0NjYyNS0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgcGl4ZWwgY2xv Y2siKTsNCj4+ICsJCXJldHVybiAwOw0KPj4gKwl9DQo+PiArDQo+PiArCXBjbGsgPSBja1swXTsN Cj4+ICsJcGNsayA8PD0gODsNCj4+ICsJcGNsayB8PSBja1sxXTsNCj4+ICsJcGNsayA8PD0gODsN Cj4+ICsJcGNsayB8PSBja1syXTsNCj4+ICsJcGNsayA8PD0gODsNCj4+ICsJcGNsayB8PSBja1sz XTsNCj4+ICsNCj4+ICsJdjRsMl9kYmcoMSwgZGVidWcsICZpdDY2MjUtPnNkLCAiJXM6IHBjbGs9 JXUgKCUwOHgpIiwNCj4+ICsJCSBfX2Z1bmNfXywgcGNsaywgcGNsayk7DQo+PiArDQo+PiArCXJl dHVybiAodTY0KXBjbGsgKiAxMDAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYy NV9yZWFkX2VkaWQoc3RydWN0IGl0NjYyNSAqaXQ2NjI1LCB1OCAqZWRpZCwgaW50IHN0YXJ0X2Js b2NrLA0KPj4gKwkJCSAgICBpbnQgbnVtX2Jsb2NrcykNCj4+ICt7DQo+PiArCWludCBpLCBiYW5r X2N0cmwsIGVyciA9IDA7DQo+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGl0NjYyNS0+ZGV2Ow0K Pj4gKw0KPj4gKwlpZiAoIWVkaWQpIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAiZWRpZCBidWZmZXIg aXMgTlVMTCIpOw0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYg KHN0YXJ0X2Jsb2NrIDwgMCB8fCBudW1fYmxvY2tzIDw9IDAgfHwNCj4+ICsJICAgIHN0YXJ0X2Js b2NrID4gRURJRF9OVU1fQkxPQ0tTX01BWCB8fA0KPj4gKwkgICAgbnVtX2Jsb2NrcyA+IEVESURf TlVNX0JMT0NLU19NQVggfHwNCj4+ICsJICAgIHN0YXJ0X2Jsb2NrICsgbnVtX2Jsb2NrcyA+IEVE SURfTlVNX0JMT0NLU19NQVgpIHsNCj4+ICsJCWRldl9lcnIoZGV2LA0KPj4gKwkJCSJpbnZhbGlk IGJsb2NrIHJhbmdlOiBzdGFydF9ibG9jaz0lZCwgbnVtX2Jsb2Nrcz0lZCIsDQo+PiArCQkJc3Rh cnRfYmxvY2ssIG51bV9ibG9ja3MpOw0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ ICsNCj4+ICsJZ3VhcmQobXV0ZXgpKCZpdDY2MjUtPml0NjYyNV9sb2NrKTsNCj4+ICsJZm9yIChp ID0gMDsgaSA8IG51bV9ibG9ja3M7IGkrKykgew0KPj4gKwkJYmFua19jdHJsID0gQ1RMX0JBTktf RURJRF9SRUFEICsgc3RhcnRfYmxvY2sgKyBpOw0KPj4gKwkJZXJyID0gaXQ2NjI1X3NldF9iYW5r KGl0NjYyNSwgYmFua19jdHJsKTsNCj4+ICsJCWlmIChlcnIgPCAwKQ0KPj4gKwkJCWJyZWFrOw0K Pj4gKw0KPj4gKwkJZXJyID0gaXQ2NjI1X3JlYWRfYnl0ZXMoaXQ2NjI1LCBSRUdfRURJRF9TVEFS VCwNCj4+ICsJCQkJCWVkaWQgKyAoaSAqIDEyOCksIDEyOCk7DQo+PiArCQlpZiAoZXJyIDwgMCkN Cj4+ICsJCQlicmVhazsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpdDY2MjVfc2V0X2JhbmsoaXQ2NjI1 LCAwKTsNCj4+ICsNCj4+ICsJcmV0dXJuIGVyciA8IDAgPyBlcnIgOiBudW1fYmxvY2tzOw0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV93cml0ZV9lZGlkKHN0cnVjdCBpdDY2MjUg Kml0NjYyNSwgdTggKmVkaWQsIGludCBzdGFydF9ibG9jaywNCj4+ICsJCQkgICAgIGludCBudW1f YmxvY2tzKQ0KPj4gK3sNCj4+ICsJaW50IGksIGJhbmtfY3RybCwgZXJyID0gMDsNCj4+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gaXQ2NjI1LT5kZXY7DQo+PiArDQo+PiArCWlmIChzdGFydF9ibG9j ayA8IDAgfHwgbnVtX2Jsb2NrcyA8PSAwIHx8DQo+PiArCSAgICBzdGFydF9ibG9jayA+IEVESURf TlVNX0JMT0NLU19NQVggfHwNCj4+ICsJICAgIG51bV9ibG9ja3MgPiBFRElEX05VTV9CTE9DS1Nf TUFYIHx8DQo+PiArCSAgICBzdGFydF9ibG9jayArIG51bV9ibG9ja3MgPiBFRElEX05VTV9CTE9D S1NfTUFYKSB7DQo+PiArCQlkZXZfZXJyKGRldiwNCj4+ICsJCQkiaW52YWxpZCBibG9jayByYW5n ZTogc3RhcnRfYmxvY2s9JWQsIG51bV9ibG9ja3M9JWQiLA0KPj4gKwkJCXN0YXJ0X2Jsb2NrLCBu dW1fYmxvY2tzKTsNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKwl9DQo+PiArDQo+PiArCWd1 YXJkKG11dGV4KSgmaXQ2NjI1LT5pdDY2MjVfbG9jayk7DQo+PiArCWZvciAoaSA9IDA7IGkgPCBu dW1fYmxvY2tzOyBpKyspIHsNCj4+ICsJCWJhbmtfY3RybCA9IENUTF9CQU5LX0VESURfV1JJVEUg KyBzdGFydF9ibG9jayArIGk7DQo+PiArCQllcnIgPSBpdDY2MjVfc2V0X2JhbmsoaXQ2NjI1LCBi YW5rX2N0cmwpOw0KPj4gKwkJaWYgKGVyciA8IDApDQo+PiArCQkJYnJlYWs7DQo+PiArDQo+PiAr CQllcnIgPSBpdDY2MjVfd3JpdGVfYnl0ZXMoaXQ2NjI1LCBSRUdfRURJRF9TVEFSVCwNCj4+ICsJ CQkJCSBlZGlkICsgKGkgKiAxMjgpLCAxMjgpOw0KPj4gKwkJaWYgKGVyciA8IDApDQo+PiArCQkJ YnJlYWs7DQo+PiArDQo+PiArCQllcnIgPSBpdDY2MjVfdXBkYXRlX2NvbmZpZyhpdDY2MjUpOw0K Pj4gKwkJaWYgKGVyciA8IDApDQo+PiArCQkJYnJlYWs7DQo+PiArCX0NCj4+ICsNCj4+ICsJaXQ2 NjI1X3NldF9iYW5rKGl0NjYyNSwgMCk7DQo+PiArDQo+PiArCXJldHVybiBlcnIgPCAwID8gZXJy IDogbnVtX2Jsb2NrczsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X2VuYWJs ZV9hdXRvX2hwZChzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiArew0KPj4gKwlkZXZfZGJnKGl0 NjYyNS0+ZGV2LCAiJXM6IGF1dG8gSFBEIiwgX19mdW5jX18pOw0KPj4gKwlndWFyZChtdXRleCko Jml0NjYyNS0+aXQ2NjI1X2xvY2spOw0KPj4gKwlpdDY2MjVfc2V0X2JpdHMoaXQ2NjI1LCBSRUdf UlhfQ0ZHLCAweDAzLCAweDAwKTsNCj4+ICsJaXQ2NjI1X3VwZGF0ZV9jb25maWcoaXQ2NjI1KTsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X2Rpc2FibGVfaHBkKHN0cnVjdCBp dDY2MjUgKml0NjYyNSkNCj4+ICt7DQo+PiArCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaXQ2 NjI1LT5ocGRfZGVsYXllZF93b3JrKTsNCj4+ICsNCj4+ICsJZ3VhcmQobXV0ZXgpKCZpdDY2MjUt Pml0NjYyNV9sb2NrKTsNCj4+ICsJaXQ2NjI1X3NldF9iaXRzKGl0NjYyNSwgUkVHX1JYX0NGRywg MHgwMywgMHgwMSk7DQo+PiArCWl0NjYyNV91cGRhdGVfY29uZmlnKGl0NjYyNSk7DQo+PiArfQ0K Pj4gKw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYyNV9lbmFibGVfaHBkKHN0cnVjdCBpdDY2MjUgKml0 NjYyNSkNCj4+ICt7DQo+PiArCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXQ2NjI1LT5ocGRfZGVs YXllZF93b3JrLA0KPj4gKwkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7DQo+DQo+SSBy ZWNvbW1lbmQgdG8gdXNlICdIWiAvIDcnIGhlcmUuIE9mdGVuIHZpZGVvIHNvdXJjZXMgYXJlIG5v dCB2ZXJ5IGFjY3VyYXRlDQo+aW4gbWVhc3VyaW5nIGhvdyBsb25nIHRoZSBIUEQgaXMgbG93LiAn SFogLyA3JyBoYXMgcHJvdmVuIHRvIGJlIGEgcmVsaWFibGUgdmFsdWUuDQo+DQo+PiArfQ0KPj4g Kw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYyNV9ocGRfZGVsYXllZF93b3JrKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykNCj4+ICt7DQo+PiArCXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IGNvbnRhaW5l cl9vZih3b3JrLA0KPj4gKwkJCXN0cnVjdCBpdDY2MjUsIGhwZF9kZWxheWVkX3dvcmsud29yayk7 DQo+PiArCWludCB2YWwgPSAwOw0KPj4gKw0KPj4gKwlndWFyZChtdXRleCkoJml0NjYyNS0+aXQ2 NjI1X2xvY2spOw0KPj4gKwlpdDY2MjVfc2V0X2JpdHMoaXQ2NjI1LCBSRUdfUlhfQ0ZHLCAweDAz LCB2YWwpOw0KPj4gKwlpdDY2MjVfdXBkYXRlX2NvbmZpZyhpdDY2MjUpOw0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMgaW50IGl0NjYyNV9nZXRfZGV0ZWN0ZWRfdGltaW5ncyhzdHJ1Y3QgaXQ2NjI1 ICppdDY2MjUsDQo+PiArCQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzICp0aW1pbmdz KQ0KPj4gK3sNCj4+ICsJc3RydWN0IHY0bDJfYnRfdGltaW5ncyAqYnQgPSAmdGltaW5ncy0+YnQ7 DQo+PiArCWludCB2YWw7DQo+PiArCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0Ow0KPj4gKwl1 OCBidWZmZXJbNF07DQo+PiArCXU4IGJ1ZmZlcjJbMTJdOw0KPj4gKw0KPj4gKwlpZiAobm9fc2ln bmFsKGl0NjYyNSkpIHsNCj4+ICsJCWRldl9lcnIoaXQ2NjI1LT5kZXYsICJubyBzaWduYWwgZGV0 ZWN0ZWQiKTsNCj4+ICsJCXJldHVybiAtRU5PTElOSzsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlndWFy ZChtdXRleCkoJml0NjYyNS0+aXQ2NjI1X2xvY2spOw0KPj4gKw0KPj4gKwltZW1zZXQodGltaW5n cywgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MpKTsNCj4+ICsJdGltaW5ncy0+dHlw ZSA9IFY0TDJfRFZfQlRfNjU2XzExMjA7DQo+PiArCXZhbCA9IGl0NjYyNV9yZWFkX2J5dGUoaXQ2 NjI1LCBSRUdfVklEX0lORk8pOw0KPj4gKwlpZiAodmFsIDwgMCkgew0KPj4gKwkJZGV2X2Vycihp dDY2MjUtPmRldiwgImZhaWxlZCB0byByZWFkIHZpZGVvIGluZm8iKTsNCj4+ICsJCXJldHVybiAt RUlPOw0KPj4gKwl9DQo+PiArDQo+PiArCWJ0LT5pbnRlcmxhY2VkID0gdmFsICYgQl9JTlRFUkxB Q0UgPw0KPj4gKwkJCSBWNEwyX0RWX0lOVEVSTEFDRUQgOiBWNEwyX0RWX1BST0dSRVNTSVZFOw0K Pj4gKw0KPj4gKwlpZiAoaXQ2NjI1X3JlYWRfYnl0ZXMoaXQ2NjI1LCBSRUdfSF9BQ1RJVkVfMSwg YnVmZmVyLCA0KSA8IDApDQo+PiArCQlyZXR1cm4gLUVJTzsNCj4+ICsNCj4+ICsJd2lkdGggPSAo KGJ1ZmZlclswXSAmIDB4ZmYpIDw8IDgpICsgYnVmZmVyWzFdOw0KPj4gKwloZWlnaHQgPSAoKGJ1 ZmZlclsyXSAmIDB4ZmYpIDw8IDgpICsgYnVmZmVyWzNdOw0KPj4gKw0KPj4gKwlidC0+d2lkdGgg PSB3aWR0aDsNCj4+ICsJYnQtPmhlaWdodCA9IGhlaWdodDsNCj4+ICsNCj4+ICsJaWYgKGl0NjYy NV9yZWFkX2J5dGVzKGl0NjYyNSwgUkVHX0hfRlBfMSwgYnVmZmVyMiwgMTIpIDwgMCkNCj4+ICsJ CXJldHVybiAtRUlPOw0KPj4gKw0KPj4gKwlidC0+aGZyb250cG9yY2ggPSAoKGJ1ZmZlcjJbMF0g JiAweGZmKSA8PCA4KSArIGJ1ZmZlcjJbMV07DQo+PiArCWJ0LT5oc3luYyA9ICgoYnVmZmVyMlsy XSAmIDB4ZmYpIDw8IDgpICsgYnVmZmVyMlszXTsNCj4+ICsJYnQtPmhiYWNrcG9yY2ggPSAoKGJ1 ZmZlcjJbNF0gJiAweGZmKSA8PCA4KSArIGJ1ZmZlcjJbNV07DQo+PiArCWJ0LT52ZnJvbnRwb3Jj aCA9ICgoYnVmZmVyMls2XSAmIDB4ZmYpIDw8IDgpICsgYnVmZmVyMls3XTsNCj4+ICsJYnQtPnZz eW5jID0gKChidWZmZXIyWzhdICYgMHhmZikgPDwgOCkgKyBidWZmZXIyWzldOw0KPj4gKwlidC0+ dmJhY2twb3JjaCA9ICgoYnVmZmVyMlsxMF0gJiAweGZmKSA8PCA4KSArIGJ1ZmZlcjJbMTFdOw0K Pj4gKw0KPj4gKwlidC0+cGl4ZWxjbG9jayA9IGl0NjYyNV9nZXRfcGNsayhpdDY2MjUpOw0KPj4g KwlpZiAoYnQtPmludGVybGFjZWQgPT0gVjRMMl9EVl9JTlRFUkxBQ0VEKSB7DQo+PiArCQlidC0+ aGVpZ2h0ICo9IDI7DQo+PiArCQlidC0+aWxfdnN5bmMgPSBidC0+dnN5bmMgKyAxOw0KPj4gKwl9 DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBpdDY2 MjVfc2hvd19hdmlfaW5mb2ZyYW1lKHN0cnVjdCBpdDY2MjUgKml0NjYyNSkNCj4+ICt7DQo+PiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9IGl0NjYyNS0+ZGV2Ow0KPj4gKwl1bmlvbiBoZG1pX2luZm9m cmFtZSBmcmFtZTsNCj4+ICsJdTggYnVmZmVyW0hETUlfSU5GT0ZSQU1FX1NJWkUoQVZJKV07DQo+ PiArCXU4IHZlciwgbGVuOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlpZiAoIWlzX2hkbWko aXQ2NjI1KSkgew0KPj4gKwkJZGV2X2VycihkZXYsICJub3QgSERNSSBzaWduYWwsIHNraXAgQVZJ IGluZm9mcmFtZSBsb2ciKTsNCj4+ICsJCXJldHVybjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXQg PSBpdDY2MjVfcmVhZF9ieXRlcyhpdDY2MjUsIFJFR19BVklfREFUQSwgYnVmZmVyICsgMSwNCj4+ ICsJCQkJSERNSV9JTkZPRlJBTUVfU0laRShBVkkpIC0gMSk7DQo+PiArCWlmIChyZXQgPCAwKSB7 DQo+PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWFkIEFWSSBpbmZvZnJhbWUgZGF0YSIp Ow0KPj4gKwkJcmV0dXJuOw0KPj4gKwl9DQo+PiArDQo+PiArCWxlbiA9IGJ1ZmZlclsxXTsNCj4+ ICsJdmVyID0gYnVmZmVyWzJdOw0KPj4gKw0KPj4gKwlidWZmZXJbMF0gPSBIRE1JX0lORk9GUkFN RV9UWVBFX0FWSTsNCj4+ICsJYnVmZmVyWzFdID0gdmVyOw0KPj4gKwlidWZmZXJbMl0gPSBsZW47 DQo+PiArDQo+PiArCXJldCA9IGhkbWlfaW5mb2ZyYW1lX3VucGFjaygmZnJhbWUsIGJ1ZmZlciwg c2l6ZW9mKGJ1ZmZlcikpOw0KPj4gKwlpZiAocmV0IDwgMCkgew0KPj4gKwkJZGV2X2VycihkZXYs ICJ1bnBhY2sgb2YgQVZJIGluZm9mcmFtZSBmYWlsZWQiKTsNCj4+ICsJCXJldHVybjsNCj4+ICsJ fQ0KPj4gKw0KPj4gKwloZG1pX2luZm9mcmFtZV9sb2coS0VSTl9JTkZPLCBkZXYsICZmcmFtZSk7 DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X3NfY3RybF9kZXRlY3RfaGRtaV81 dihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGl0NjYyNSAqaXQ2 NjI1ID0gc2RfdG9fNjYyNShzZCk7DQo+PiArDQo+PiArCXJldHVybiB2NGwyX2N0cmxfc19jdHJs KGl0NjYyNS0+Y3RybF81dl9kZXRlY3QsDQo+PiArCQkJCWhkbWlfNXZfcG93ZXJfcHJlc2VudChp dDY2MjUpKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfc19jdHJsX2F1ZGlv X3NhbXBsaW5nX3JhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4+ICt7DQo+PiArCXN0cnVj dCBpdDY2MjUgKml0NjYyNSA9IHNkX3RvXzY2MjUoc2QpOw0KPj4gKw0KPj4gKwlyZXR1cm4gdjRs Ml9jdHJsX3NfY3RybChpdDY2MjUtPmN0cmxfYXVkaW9fc2FtcGxpbmdfcmF0ZSwNCj4+ICsJCQkJ Z2V0X2F1ZGlvX3NhbXBsaW5nX3JhdGUoaXQ2NjI1KSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyBpbnQgaXQ2NjI1X3NfY3RybF9hdWRpb19wcmVzZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2Qp DQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBzZF90b182NjI1KHNkKTsNCj4+ ICsNCj4+ICsJcmV0dXJuIHY0bDJfY3RybF9zX2N0cmwoaXQ2NjI1LT5jdHJsX2F1ZGlvX3ByZXNl bnQsDQo+PiArCQkJCWF1ZGlvX3ByZXNlbnQoaXQ2NjI1KSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgaXQ2NjI1X3Y0bDJfc2RfY3RybF91cGRhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCkNCj4+ICt7DQo+PiArCWludCByZXQgPSAwOw0KPj4gKw0KPj4gKwlyZXQgfD0gaXQ2NjI1X3Nf Y3RybF9kZXRlY3RfaGRtaV81dihzZCk7DQo+PiArCXJldCB8PSBpdDY2MjVfc19jdHJsX2F1ZGlv X3NhbXBsaW5nX3JhdGUoc2QpOw0KPj4gKwlyZXQgfD0gaXQ2NjI1X3NfY3RybF9hdWRpb19wcmVz ZW50KHNkKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2 b2lkIGl0NjYyNV9lbmFibGVfc3RyZWFtX2xvY2tlZChzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUsIGJv b2wgZW5hYmxlKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZpdDY2MjUt PnNkOw0KPj4gKwlpbnQgdmFsOw0KPj4gKw0KPj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpdDY2 MjUtPml0NjYyNV9sb2NrKTsNCj4+ICsNCj4+ICsJdjRsMl9kYmcoMywgZGVidWcsIHNkLCAiJXM6 ICVzYWJsZSIsDQo+PiArCQkgX19mdW5jX18sIGVuYWJsZSA/ICJlbiIgOiAiZGlzIik7DQo+PiAr DQo+PiArCXZhbCA9IGVuYWJsZSA/IEJfTUlQSV9PVVRQVVQgOiAwOw0KPj4gKwlpdDY2MjVfc2V0 X2JpdHMoaXQ2NjI1LCBSRUdfTUlQSV9DT05UUk9MLCBCX01JUElfT1VUUFVULCB2YWwpOw0KPj4g KwlpdDY2MjVfdXBkYXRlX2NvbmZpZyhpdDY2MjUpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMg dm9pZCBpdDY2MjVfZW5hYmxlX3N0cmVhbShzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUsIGJvb2wgZW5h YmxlKQ0KPj4gK3sNCj4+ICsJZ3VhcmQobXV0ZXgpKCZpdDY2MjUtPml0NjYyNV9sb2NrKTsNCj4+ ICsJaXQ2NjI1X2VuYWJsZV9zdHJlYW1fbG9ja2VkKGl0NjYyNSwgZW5hYmxlKTsNCj4+ICt9DQo+ PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X3NldF9taXBpX2NvbmZpZ19sb2NrZWQoc3RydWN0 IGl0NjYyNSAqaXQ2NjI1LCB1MzIgY2ZnX3ZhbCkNCj4+ICt7DQo+PiArCXU4IG1pcGlfZGF0YV90 eXBlOw0KPj4gKw0KPj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpdDY2MjUtPml0NjYyNV9sb2Nr KTsNCj4+ICsNCj4+ICsJZGV2X2RiZyhpdDY2MjUtPmRldiwgIm1pcGlfZGF0YV90eXBlID0gMHgl eCIsIGNmZ192YWwpOw0KPj4gKw0KPj4gKwltaXBpX2RhdGFfdHlwZSA9IGNmZ192YWwgJiAweEZG Ow0KPj4gKwlpdDY2MjVfd3JpdGVfYnl0ZShpdDY2MjUsIFJFR19NSVBJX0RBVEFfVFlQRSwgbWlw aV9kYXRhX3R5cGUpOw0KPj4gKwlpdDY2MjVfdXBkYXRlX2NvbmZpZyhpdDY2MjUpOw0KPj4gK30N Cj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBpdDY2MjVfc2V0X21pcGlfY29uZmlnKHN0cnVjdCBpdDY2 MjUgKml0NjYyNSwgdTMyIGNmZ192YWwpDQo+PiArew0KPj4gKwlndWFyZChtdXRleCkoJml0NjYy NS0+aXQ2NjI1X2xvY2spOw0KPj4gKwlpdDY2MjVfc2V0X21pcGlfY29uZmlnX2xvY2tlZChpdDY2 MjUsIGNmZ192YWwpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlu dCBmcHNfZnJvbV9idF90aW1pbmdzKGNvbnN0IHN0cnVjdCB2NGwyX2J0X3RpbWluZ3MgKnQpDQo+ PiArew0KPj4gKwlpZiAoIVY0TDJfRFZfQlRfRlJBTUVfSEVJR0hUKHQpIHx8ICFWNEwyX0RWX0JU X0ZSQU1FX1dJRFRIKHQpKQ0KPj4gKwkJcmV0dXJuIDA7DQo+PiArDQo+PiArCXJldHVybiBESVZf Uk9VTkRfQ0xPU0VTVCgodW5zaWduZWQgaW50KXQtPnBpeGVsY2xvY2ssDQo+PiArCQkJCSBWNEwy X0RWX0JUX0ZSQU1FX0hFSUdIVCh0KSAqDQo+PiArCQkJCSBWNEwyX0RWX0JUX0ZSQU1FX1dJRFRI KHQpKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X2luaXRpYWxfc2V0dXAo c3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJaW50IHZhbCA9IDA7DQo+PiArDQo+ PiArCWd1YXJkKG11dGV4KSgmaXQ2NjI1LT5pdDY2MjVfbG9jayk7DQo+PiArDQo+PiArCS8qDQo+ PiArCSAqIFJFR19NSVBJX0NGR1swOjJdIGxhbmUgY291bnQgZmllbGQ6IDEgbGFuZSAtPiAwLCAy IGxhbmVzIC0+IDEsDQo+PiArCSAqIDMgbGFuZXMgKEMtUEhZIG9ubHkpIC0+IDMsIDQgbGFuZXMg KEQtUEhZIG9ubHkpIC0+IDMuDQo+PiArCSAqLw0KPj4gKwlzd2l0Y2ggKGl0NjYyNS0+Y3NpX2xh bmVzKSB7DQo+PiArCWNhc2UgMToNCj4+ICsJCXZhbCA9IEZJRUxEX1BSRVAoTV9NSVBJX0xBTkUs IDApOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgMjoNCj4+ICsJCXZhbCA9IEZJRUxEX1BSRVAo TV9NSVBJX0xBTkUsIDEpOw0KPj4gKwkJYnJlYWs7DQo+PiArCWRlZmF1bHQ6DQo+PiArCQl2YWwg PSBGSUVMRF9QUkVQKE1fTUlQSV9MQU5FLCAzKTsNCj4+ICsJCWJyZWFrOw0KPj4gKwl9DQo+PiAr DQo+PiArCWlmIChpdDY2MjUtPmJ1c190eXBlID09IFY0TDJfTUJVU19DU0kyX0RQSFkpDQo+PiAr CQl2YWwgfD0gRklFTERfUFJFUChCX01JUElfRFBIWSwgMSk7DQo+PiArDQo+PiArCWlmIChpdDY2 MjUtPnBvcnRfbnVtID09IDIpDQo+PiArCQl2YWwgfD0gRklFTERfUFJFUChCX01JUElfU1BMSVQs IDEpOw0KPj4gKw0KPj4gKwlpdDY2MjVfd3JpdGVfYnl0ZShpdDY2MjUsIFJFR19NSVBJX0NGRywg dmFsKTsNCj4+ICsJaXQ2NjI1X3dyaXRlX2J5dGUoaXQ2NjI1LCBSRUdfTUlQSV9EQVRBX1RZUEUs IGl0NjYyNS0+Y3NpX2Zvcm1hdCk7DQo+PiArCWl0NjYyNV93cml0ZV9ieXRlKGl0NjYyNSwgUkVH X01JUElfQ09OVFJPTCwgMHgwMCk7DQo+PiArCWl0NjYyNV93cml0ZV9ieXRlKGl0NjYyNSwgUkVH X1JYX0NGRywgMHgwMCk7DQo+PiArDQo+PiArCWl0NjYyNV9zZXRfYml0cyhpdDY2MjUsIFJFR19I T1NUX0NUUkxfSU5ULCBCX0NPTkZJR19VUERBVEUsIEJfQ09ORklHX1VQREFURSk7DQo+PiArCWl0 NjYyNV93YWl0X2Zvcl9zdGF0dXMoaXQ2NjI1LCBSRUdfSE9TVF9DVFJMX0lOVCwgMHgwMCwgMjUp Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBkdW1wX2NlY19tc2coc3RydWN0IGl0NjYy NSAqaXQ2NjI1LCBzdHJ1Y3QgY2VjX21zZyAqbXNnLCBjaGFyICpzdHIpDQo+PiArew0KPj4gKwlp bnQgaTsNCj4+ICsNCj4+ICsJZGV2X2RiZyhpdDY2MjUtPmRldiwgIiVzOiBmcm9tICVkIHRvICVk IGxlbj0lZCIsIHN0ciwNCj4+ICsJCW1zZy0+bXNnWzBdID4+IDQsIG1zZy0+bXNnWzBdICYgMHgw ZiwgbXNnLT5sZW4pOw0KPj4gKwlmb3IgKGkgPSAxOyBpIDwgbXNnLT5sZW47IGkrKykNCj4+ICsJ CWRldl9kYmcoaXQ2NjI1LT5kZXYsICIgJTAyeCIsIG1zZy0+bXNnW2ldKTsNCj4+ICt9DQo+DQo+ VGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5OiB0aGUgY2VjIGNvZGUgYWxyZWFkeSBoYXMgQ0VD IGRlYnVnZ2luZyBpbiBwbGFjZS4NCj4NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9jZWNf YWRhcF9lbmFibGUoc3RydWN0IGNlY19hZGFwdGVyICphZGFwLCBib29sIGVuYWJsZSkNCj4+ICt7 DQo+PiArCXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IGFkYXAtPnByaXY7DQo+PiArCXU4IGNtZHNb Ml07DQo+PiArDQo+PiArCWNtZHNbMF0gPSBDTURfU0VUX0NFQ19FTkFCTEU7DQo+PiArCWNtZHNb MV0gPSBlbmFibGUgPyAxIDogMDsNCj4+ICsJZ3VhcmQobXV0ZXgpKCZpdDY2MjUtPml0NjYyNV9s b2NrKTsNCj4+ICsJaXQ2NjI1X3dyaXRlX2NvbW1hbmQoaXQ2NjI1LCBjbWRzLCBzaXplb2YoY21k cykpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBp dDY2MjVfY2VjX2FkYXBfbG9nX2FkZHIoc3RydWN0IGNlY19hZGFwdGVyICphZGFwLCB1OCBsb2df YWRkcikNCj4+ICt7DQo+PiArCXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IGFkYXAtPnByaXY7DQo+ PiArDQo+PiArCWRldl9kYmcoaXQ2NjI1LT5kZXYsICIlczogbGE9JWQiLCBfX2Z1bmNfXywgbG9n X2FkZHIpOw0KPj4gKw0KPj4gKwlpZiAobG9nX2FkZHIgIT0gQ0VDX0xPR19BRERSX0lOVkFMSUQp IHsNCj4+ICsJCXU4IGNtZHNbMl0gPSB7Q01EX1NFVF9DRUNfTEEsIGxvZ19hZGRyfTsNCj4+ICsN Cj4+ICsJCWd1YXJkKG11dGV4KSgmaXQ2NjI1LT5pdDY2MjVfbG9jayk7DQo+PiArCQlpdDY2MjVf d3JpdGVfY29tbWFuZChpdDY2MjUsIGNtZHMsIHNpemVvZihjbWRzKSk7DQo+DQo+SG93IGRvIHlv dSBjbGVhciB0aGUgbG9naWNhbCBhZGRyZXNzPyBJZiBsb2dfYWRkciBpcyBjYWxsZWQgd2l0aCBD RUNfTE9HX0FERFJfSU5WQUxJRCwNCj50aGVuIHRoYXQgc2hvdWxkIGNsZWFyIHRoZSBjdXJyZW50 IExBLg0KPg0KPkkgc3VzcGVjdCB0aGF0IGZvciB0aGlzIEhXIHRoZSBMQSBzaG91bGQgYmUgc2V0 IHRvIDB4ZiwgYnV0IEkgY2FuJ3QgYmUgY2VydGFpbi4NCj4NCj4+ICsJfQ0KPj4gKw0KPj4gKwly ZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfY2VjX2FkYXBfdHJh bnNtaXQoc3RydWN0IGNlY19hZGFwdGVyICphZGFwLCB1OCBhdHRlbXB0cywNCj4+ICsJCQkJICAg IHUzMiBzaWduYWxfZnJlZV90aW1lLCBzdHJ1Y3QgY2VjX21zZyAqbXNnKQ0KPj4gK3sNCj4+ICsJ c3RydWN0IGl0NjYyNSAqaXQ2NjI1ID0gYWRhcC0+cHJpdjsNCj4+ICsNCj4+ICsJZHVtcF9jZWNf bXNnKGl0NjYyNSwgbXNnLCAiQ0VDX1RYIik7DQo+PiArDQo+PiArCWd1YXJkKG11dGV4KSgmaXQ2 NjI1LT5pdDY2MjVfbG9jayk7DQo+PiArCWl0NjYyNV93cml0ZV9ieXRlcyhpdDY2MjUsIFJFR19D RUNfVFhfREFUQSwgbXNnLT5tc2csIG1zZy0+bGVuKTsNCj4+ICsJaXQ2NjI1X3dyaXRlX2J5dGUo aXQ2NjI1LCBSRUdfQ0VDX1RYX0RBVEFfTEVOLCBtc2ctPmxlbik7DQo+PiArCWl0NjYyNV9zZXRf Yml0cyhpdDY2MjUsIFJFR19IT1NUX0NUUkxfSU5ULCBCX0NFQ19TRU5EX0RBVEEsIEJfQ0VDX1NF TkRfREFUQSk7DQo+PiArCWl0NjYyNV93YWl0X2Zvcl9zdGF0dXMoaXQ2NjI1LCBSRUdfSE9TVF9D VFJMX0lOVCwgMHgwMCwgMjUpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBjZWNfYWRhcF9vcHMgaXQ2NjI1X2NlY19hZGFwX29wcyA9 IHsNCj4+ICsJLmFkYXBfZW5hYmxlID0gaXQ2NjI1X2NlY19hZGFwX2VuYWJsZSwNCj4+ICsJLmFk YXBfbG9nX2FkZHIgPSBpdDY2MjVfY2VjX2FkYXBfbG9nX2FkZHIsDQo+PiArCS5hZGFwX3RyYW5z bWl0ID0gaXQ2NjI1X2NlY19hZGFwX3RyYW5zbWl0LA0KPj4gK307DQo+PiArDQo+PiArc3RhdGlj IHZvaWQgaXQ2NjI1X2NlY19oYW5kbGVyKHN0cnVjdCBpdDY2MjUgKml0NjYyNSwgdTggaW50c3Rh dHVzKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGNlY19tc2cgcnhtc2cgPSB7fTsNCj4+ICsJaW50IHZh bCA9IDA7DQo+PiArDQo+PiArCWlmIChpbnRzdGF0dXMgJiBCX0NFQ19SWF9SRUNFSVZFRCkgew0K Pj4gKwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmaXQ2NjI1LT5pdDY2MjVfbG9jaykgew0KPj4gKwkJ CXZhbCA9IGl0NjYyNV9yZWFkX2J5dGUoaXQ2NjI1LCBSRUdfQ0VDX1JYX0RBVEFfTEVOKTsNCj4+ ICsJCQlpZiAodmFsID4gMCAmJiB2YWwgPD0gMTYpDQo+DQo+VXNlIENFQ19NQVhfTVNHX1NJWkUg aW5zdGVhZCBvZiBoYXJkY29kaW5nICcxNicuIFNhbWUgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rp b24uDQo+DQo+PiArCQkJCWl0NjYyNV9yZWFkX2J5dGVzKGl0NjYyNSwgUkVHX0NFQ19SWF9EQVRB LCAmcnhtc2cubXNnWzBdLCB2YWwpOw0KPj4gKwkJCWl0NjYyNV93cml0ZV9ieXRlKGl0NjYyNSwg UkVHX0NFQ19SWF9EQVRBX0xFTiwgMCk7DQo+PiArCQl9DQo+PiArDQo+PiArCQlpZiAodmFsID4g MCAmJiB2YWwgPD0gMTYpIHsNCj4+ICsJCQlyeG1zZy5sZW4gPSB2YWw7DQo+PiArCQkJY2VjX3Jl Y2VpdmVkX21zZyhpdDY2MjUtPmNlY19hZGFwLCAmcnhtc2cpOw0KPj4gKwkJCWR1bXBfY2VjX21z ZyhpdDY2MjUsICZyeG1zZywgIkNFQ19SWCIpOw0KPj4gKwkJfSBlbHNlIHsNCj4+ICsJCQlkZXZf ZXJyKGl0NjYyNS0+ZGV2LCAiaW52YWxpZCBDRUMgUlggbGVuZ3RoICVkIiwgdmFsKTsNCj4+ICsJ CX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAoaW50c3RhdHVzICYgQl9DRUNfVFhfVVBEQVRFKSB7 DQo+PiArCQl2YWwgPSBpdDY2MjVfcmVhZF9ieXRlKGl0NjYyNSwgUkVHX0NFQ19TVEFUVVMpOw0K Pj4gKwkJaWYgKHZhbCA8IDApIHsNCj4+ICsJCQlkZXZfZXJyKGl0NjYyNS0+ZGV2LCAicmVhZCBD RUMgc3RhdHVzIGZhaWxlZCIpOw0KPj4gKwkJCXJldHVybjsNCj4+ICsJCX0NCj4+ICsNCj4+ICsJ CWlmICh2YWwgJiBCSVQoMCkpIHsNCj4+ICsJCQljZWNfdHJhbnNtaXRfYXR0ZW1wdF9kb25lKGl0 NjYyNS0+Y2VjX2FkYXAsDQo+PiArCQkJCQkJICBDRUNfVFhfU1RBVFVTX09LKTsNCj4+ICsJCX0g ZWxzZSBpZiAodmFsICYgQklUKDEpKSB7DQo+PiArCQkJY2VjX3RyYW5zbWl0X2F0dGVtcHRfZG9u ZShpdDY2MjUtPmNlY19hZGFwLA0KPj4gKwkJCQkJCSAgQ0VDX1RYX1NUQVRVU19OQUNLKTsNCj4+ ICsJCX0gZWxzZSB7DQo+PiArCQkJZGV2X2VycihpdDY2MjUtPmRldiwgInVua25vd24gQ0VDIHN0 YXR1cyAlMDJYIiwgdmFsKTsNCj4NCj5UaGlzIHByb2JhYmx5IHNob3VsZCBiZSBkZXZfaW5mby4g SWYgdGhlIGhhcmR3YXJlIHJldHVybnMgYSBrbm93biBiYWQgdmFsdWUsDQo+dGhlbiB0aGlzIHdv dWxkIGJlIGFuIGVycm9yLiBCdXQgaWYgaXQgaXMgYSB2YWxpZCB2YWx1ZSwgYnV0IHlvdSBqdXN0 IGRvIG5vdA0KPmtub3cgd2hhdCBpdCBtZWFucywgdGhlbiBkZXZfaW5mbyBpcyBtb3JlIGFwcHJv cHJpYXRlLg0KPg0KPj4gKwkJCWNlY190cmFuc21pdF9hdHRlbXB0X2RvbmUoaXQ2NjI1LT5jZWNf YWRhcCwNCj4+ICsJCQkJCQkgIENFQ19UWF9TVEFUVVNfTkFDSyk7DQo+PiArCQl9DQo+PiArCX0N Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X2lycV9mb3JtYXRfY2hhbmdlKHN0 cnVjdCBpdDY2MjUgKml0NjYyNSkNCj4+ICt7DQo+PiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Qg PSAmaXQ2NjI1LT5zZDsNCj4+ICsJc3RydWN0IHY0bDJfZHZfdGltaW5ncyB0aW1pbmdzOw0KPj4g Kwljb25zdCBzdHJ1Y3QgdjRsMl9ldmVudCBpdDY2MjVfZXZfZm10ID0gew0KPj4gKwkJLnR5cGUg PSBWNEwyX0VWRU5UX1NPVVJDRV9DSEFOR0UsDQo+PiArCQkudS5zcmNfY2hhbmdlLmNoYW5nZXMg PSBWNEwyX0VWRU5UX1NSQ19DSF9SRVNPTFVUSU9OLA0KPj4gKwl9Ow0KPj4gKwlpbnQgcmV0Ow0K Pj4gKw0KPj4gKwlpZiAobm9fc2lnbmFsKGl0NjYyNSkpDQo+DQo+SWYgdGhlIHNpZ25hbCBkaXNh cHBlYXJzLCB0aGVuIGFsc28gcmFpc2UgdGhlIFNPVVJDRV9DSEFOR0UgZXZlbnQuDQo+SSB0aGlu ayB0aGF0IGlzIG1pc3NpbmcgaGVyZS4NCj4NCj4+ICsJCXJldHVybjsNCj4+ICsNCj4+ICsJcmV0 ID0gaXQ2NjI1X2dldF9kZXRlY3RlZF90aW1pbmdzKGl0NjYyNSwgJnRpbWluZ3MpOw0KPj4gKwlp ZiAocmV0IDwgMCkgew0KPj4gKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiRmFpbGVkIHRvIGdl dCBkZXRlY3RlZCB0aW1pbmdzIik7DQo+PiArCQlyZXR1cm47DQo+PiArCX0NCj4+ICsNCj4+ICsJ aWYgKHNkLT5kZXZub2RlKQ0KPj4gKwkJdjRsMl9zdWJkZXZfbm90aWZ5X2V2ZW50KHNkLCAmaXQ2 NjI1X2V2X2ZtdCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYyNV9pcnFfaGRt aV9hdWRpb19jaGFuZ2Uoc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJc3RydWN0 IHY0bDJfc3ViZGV2ICpzZCA9ICZpdDY2MjUtPnNkOw0KPj4gKw0KPj4gKwlpdDY2MjVfc19jdHJs X2F1ZGlvX3NhbXBsaW5nX3JhdGUoc2QpOw0KPj4gKwlpdDY2MjVfc19jdHJsX2F1ZGlvX3ByZXNl bnQoc2QpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBpdDY2MjVfZ2V0X3RpbWluZ3Mo c3RydWN0IGl0NjYyNSAqaXQ2NjI1LA0KPj4gKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9kdl90aW1p bmdzICp0aW1pbmdzKQ0KPj4gK3sNCj4+ICsJZ3VhcmQobXV0ZXgpKCZpdDY2MjUtPml0NjYyNV9s b2NrKTsNCj4+ICsJKnRpbWluZ3MgPSBpdDY2MjUtPnRpbWluZ3M7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyB2b2lkIGl0NjYyNV9jbGVhcl90aW1pbmdzKHN0cnVjdCBpdDY2MjUgKml0NjYyNSkN Cj4+ICt7DQo+PiArCWd1YXJkKG11dGV4KSgmaXQ2NjI1LT5pdDY2MjVfbG9jayk7DQo+PiArCW1l bXNldCgmaXQ2NjI1LT50aW1pbmdzLCAwLCBzaXplb2YoaXQ2NjI1LT50aW1pbmdzKSk7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYyNV9pcnFfaGRtaV81dl9jaGFuZ2Uoc3RydWN0 IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZp dDY2MjUtPnNkOw0KPj4gKw0KPj4gKwlpdDY2MjVfY2xlYXJfdGltaW5ncyhpdDY2MjUpOw0KPj4g KwlpdDY2MjVfdjRsMl9zZF9jdHJsX3VwZGF0ZShzZCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyB2b2lkIGl0NjYyNV9pcnFfaGRjcF9jaGFuZ2Uoc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4g K3sNCj4+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZpdDY2MjUtPnNkOw0KPj4gKwl1OCBj cF9zdHM7DQo+PiArDQo+PiArCWNwX3N0cyA9IGl0NjYyNV9yZWFkX2J5dGUoaXQ2NjI1LCBSRUdf UlhfSERDUF9TVFMpOw0KPj4gKwl2NGwyX2luZm8oc2QsICJIRENQIGNoYW5nZSB0byAlMDJYIiwg Y3Bfc3RzKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X2lycV9pbmZvZnJh bWVfbGF0Y2goc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJdTggaW5mb19mcmFt ZVszMl07DQo+PiArDQo+PiArCWd1YXJkKG11dGV4KSgmaXQ2NjI1LT5pdDY2MjVfbG9jayk7DQo+ PiArDQo+PiArCWl0NjYyNV9yZWFkX2J5dGVzKGl0NjYyNSwgUkVHX0lGX0RBVEEsIGluZm9fZnJh bWUsIDMxKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X2lycV9lbWF0YV9w YWNrZXRfbGF0Y2goc3RydWN0IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJdTggZXh0ZW5k X3BhY2tldFsxNF07DQo+PiArDQo+PiArCWl0NjYyNV9yZWFkX2J5dGVzKGl0NjYyNSwgUkVHX0VN UF9EQVRBLCBleHRlbmRfcGFja2V0LCAxMyk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lk IGl0NjYyNV9pcnFfYXZtdXRlX2NoYW5nZShzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiArew0K Pj4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJml0NjYyNS0+c2Q7DQo+PiArCWludCB2YWw7 DQo+PiArCXU4IGF2bXV0ZTsNCj4+ICsNCj4+ICsJdmFsID0gaXQ2NjI1X3JlYWRfYnl0ZShpdDY2 MjUsIFJFR19SWF9TVEFUVVMpOw0KPj4gKwlpZiAodmFsIDwgMCkNCj4+ICsJCXJldHVybjsNCj4+ ICsNCj4+ICsJYXZtdXRlID0gKHZhbCAmIEJfUlhfQVZNVVRFKSA/IDEgOiAwOw0KPj4gKwl2NGwy X2luZm8oc2QsICJBVk11dGUgY2hhbmdlIHRvICVkIiwgYXZtdXRlKTsNCj4+ICt9DQo+PiArDQo+ PiArc3RhdGljIGJvb2wgaXQ2NjI1X2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBpdDY2MjUgKml0 NjYyNSkNCj4+ICt7DQo+PiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmaXQ2NjI1LT5zZDsN Cj4+ICsJaW50IHZhbCwgaW50X3N0czEgPSAwLCBpbnRfc3RzMiA9IDA7DQo+PiArDQo+PiArCXZh bCA9IGl0NjYyNV9yZWFkX2J5dGUoaXQ2NjI1LCBSRUdfTUNVX0lOVEVSUlVQVCk7DQo+PiArCWlm ICh2YWwgPD0gMCkNCj4+ICsJCXJldHVybiBmYWxzZTsNCj4+ICsNCj4+ICsJaXQ2NjI1X3dyaXRl X2J5dGUoaXQ2NjI1LCBSRUdfTUNVX0lOVEVSUlVQVCwgdmFsKTsNCj4+ICsNCj4+ICsJdjRsMl9k YmcoMSwgZGVidWcsIHNkLCAiJXM6IElOVCA9IDB4JTAyWCIsIF9fZnVuY19fLCB2YWwpOw0KPj4g Kw0KPj4gKwlpZiAodmFsICYgKEJfQ0VDX1JYX1JFQ0VJVkVEIHwgQl9DRUNfVFhfVVBEQVRFKSAm JiBpdDY2MjUtPmNlY19hZGFwKQ0KPj4gKwkJaXQ2NjI1X2NlY19oYW5kbGVyKGl0NjYyNSwgdmFs ICYgKEJfQ0VDX1JYX1JFQ0VJVkVEIHwgQl9DRUNfVFhfVVBEQVRFKSk7DQo+PiArDQo+PiArCWlm ICh2YWwgJiBCX1NZU19JTlRfQUNUSVZFKSB7DQo+PiArCQlpbnRfc3RzMSA9IGl0NjYyNV9yZWFk X2J5dGUoaXQ2NjI1LCBSRUdfUlhfSU5UX1NUQVRVUzEpOw0KPj4gKwkJaW50X3N0czIgPSBpdDY2 MjVfcmVhZF9ieXRlKGl0NjYyNSwgUkVHX1JYX0lOVF9TVEFUVVMyKTsNCj4+ICsJCXY0bDJfZGJn KDEsIGRlYnVnLCBzZCwgIiVzOiBoZG1pX2ludCA9IDB4JTAyWCAweCUwMlgiLA0KPj4gKwkJCSBf X2Z1bmNfXywgaW50X3N0czEsIGludF9zdHMyKTsNCj4+ICsNCj4+ICsJCWlmIChpbnRfc3RzMSA+ PSAwKSB7DQo+PiArCQkJaXQ2NjI1X3dyaXRlX2J5dGUoaXQ2NjI1LCBSRUdfUlhfSU5UX1NUQVRV UzEsIDB4MDApOw0KPj4gKwkJCWlmIChpbnRfc3RzMSAmIEJfSERNSV81Vl9DSEcpDQo+PiArCQkJ CWl0NjYyNV9pcnFfaGRtaV81dl9jaGFuZ2UoaXQ2NjI1KTsNCj4+ICsNCj4+ICsJCQlpZiAoaW50 X3N0czEgJiBCX0hETUlfVklEX0NIRykNCj4+ICsJCQkJaXQ2NjI1X2lycV9mb3JtYXRfY2hhbmdl KGl0NjYyNSk7DQo+PiArDQo+PiArCQkJaWYgKGludF9zdHMxICYgQl9IRE1JX0FVRF9DSEcpDQo+ PiArCQkJCWl0NjYyNV9pcnFfaGRtaV9hdWRpb19jaGFuZ2UoaXQ2NjI1KTsNCj4+ICsNCj4+ICsJ CQlpZiAoaW50X3N0czEgJiBCX0hETUlfQ1BfQ0hHKQ0KPj4gKwkJCQlpdDY2MjVfaXJxX2hkY3Bf Y2hhbmdlKGl0NjYyNSk7DQo+PiArDQo+PiArCQkJaWYgKGludF9zdHMxICYgQl9IRE1JX0lGX0xB VENIKQ0KPj4gKwkJCQlpdDY2MjVfaXJxX2luZm9mcmFtZV9sYXRjaChpdDY2MjUpOw0KPj4gKw0K Pj4gKwkJCWlmIChpbnRfc3RzMSAmIEJfSERNSV9FTVApDQo+PiArCQkJCWl0NjYyNV9pcnFfZW1h dGFfcGFja2V0X2xhdGNoKGl0NjYyNSk7DQo+PiArCQl9DQo+PiArDQo+PiArCQlpZiAoaW50X3N0 czIgPj0gMCkgew0KPj4gKwkJCWl0NjYyNV93cml0ZV9ieXRlKGl0NjYyNSwgUkVHX1JYX0lOVF9T VEFUVVMyLCAweDAwKTsNCj4+ICsNCj4+ICsJCQlpZiAoaW50X3N0czIgJiBCX0hETUlfQVZJKQ0K Pj4gKwkJCQlpdDY2MjVfc2hvd19hdmlfaW5mb2ZyYW1lKGl0NjYyNSk7DQo+PiArDQo+PiArCQkJ aWYgKGludF9zdHMyICYgQl9IRE1JX05PX0FWSSkNCj4+ICsJCQkJdjRsMl9pbmZvKHNkLCAiQVZJ LWluZm8gc3RvcHBlZCIpOw0KPj4gKw0KPj4gKwkJCWlmIChpbnRfc3RzMiAmIEJfSERNSV9BVk1V VEVfQ0hHKQ0KPj4gKwkJCQlpdDY2MjVfaXJxX2F2bXV0ZV9jaGFuZ2UoaXQ2NjI1KTsNCj4+ICsJ CX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gdHJ1ZTsNCj4+ICt9DQo+PiArDQo+PiArc3Rh dGljIGlycXJldHVybl90IGl0NjYyNV9pcnFfaGFuZGxlcihpbnQgdW51c2VkLCB2b2lkICpkYXRh KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGl0NjYyNSAqaXQ2NjI1ID0gZGF0YTsNCj4+ICsNCj4+ICsJ cmV0dXJuIGl0NjYyNV9pbnRlcnJ1cHRfaGFuZGxlcihpdDY2MjUpID8gSVJRX0hBTkRMRUQgOiBJ UlFfTk9ORTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X2lycV9wb2xsX3Rp bWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGl0NjYyNSAqaXQ2 NjI1ID0gdGltZXJfY29udGFpbmVyX29mKGl0NjYyNSwgdCwgdGltZXIpOw0KPj4gKwl1bnNpZ25l ZCBpbnQgbXNlY3M7DQo+PiArDQo+PiArCXNjaGVkdWxlX3dvcmsoJml0NjYyNS0+cG9sbGluZ193 b3JrKTsNCj4+ICsJLyoNCj4+ICsJICogSWYgQ0VDIGlzIHByZXNlbnQsIHRoZW4gd2UgbmVlZCB0 byBwb2xsIG1vcmUgZnJlcXVlbnRseSwNCj4+ICsJICogb3RoZXJ3aXNlIHdlIHdpbGwgbWlzcyBD RUMgbWVzc2FnZXMuDQo+PiArCSAqLw0KPj4gKwltc2VjcyA9IGl0NjYyNS0+Y2VjX2FkYXAgPyBQ T0xMX0lOVEVSVkFMX0NFQ19NUyA6IFBPTExfSU5URVJWQUxfTVM7DQo+PiArCW1vZF90aW1lcigm aXQ2NjI1LT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobXNlY3MpKTsNCj4+ICt9 DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X3BvbGxpbmdfd29yayhzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBjb250YWlu ZXJfb2Yod29yaywgc3RydWN0IGl0NjYyNSwNCj4+ICsJCQkJCXBvbGxpbmdfd29yayk7DQo+PiAr DQo+PiArCWl0NjYyNV9pbnRlcnJ1cHRfaGFuZGxlcihpdDY2MjUpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW50IGl0NjYyNV9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpDQo+ PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBzZF90b182NjI1KHNkKTsNCj4+ICsJ c3RydWN0IHY0bDJfZHZfdGltaW5ncyB0aW1pbmdzLCBjb25maWd1cmVkX3RpbWluZ3M7DQo+PiAr DQo+PiArCWlmIChpdDY2MjVfZ2V0X2RldGVjdGVkX3RpbWluZ3MoaXQ2NjI1LCAmdGltaW5ncykp DQo+PiArCQl2NGwyX2luZm8oc2QsICJObyB2aWRlbyBkZXRlY3RlZCIpOw0KPj4gKwllbHNlDQo+ PiArCQl2NGwyX3ByaW50X2R2X3RpbWluZ3Moc2QtPm5hbWUsICJEZXRlY3RlZCBmb3JtYXQ6ICIs ICZ0aW1pbmdzLA0KPj4gKwkJCQkgICAgICB0cnVlKTsNCj4+ICsNCj4+ICsJaXQ2NjI1X2dldF90 aW1pbmdzKGl0NjYyNSwgJmNvbmZpZ3VyZWRfdGltaW5ncyk7DQo+PiArCXY0bDJfcHJpbnRfZHZf dGltaW5ncyhzZC0+bmFtZSwgIkNvbmZpZ3VyZWQgZm9ybWF0OiAiLA0KPj4gKwkJCSAgICAgICZj b25maWd1cmVkX3RpbWluZ3MsIHRydWUpOw0KPj4gKw0KPj4gKwlpdDY2MjVfc2hvd19hdmlfaW5m b2ZyYW1lKGl0NjYyNSk7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgaW50IGl0NjYyNV9pc3Ioc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHN0YXR1cywg Ym9vbCAqaGFuZGxlZCkNCj4+ICt7DQo+PiArCXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IHNkX3Rv XzY2MjUoc2QpOw0KPj4gKw0KPj4gKwlzY2hlZHVsZV93b3JrKCZpdDY2MjUtPnBvbGxpbmdfd29y ayk7DQo+PiArCSpoYW5kbGVkID0gdHJ1ZTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0K Pj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X3N1YnNjcmliZV9ldmVudChzdHJ1Y3QgdjRsMl9z dWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9maCAqZmgsDQo+PiArCQkJCSAgc3RydWN0IHY0bDJfZXZl bnRfc3Vic2NyaXB0aW9uICpzdWIpDQo+PiArew0KPj4gKwlzd2l0Y2ggKHN1Yi0+dHlwZSkgew0K Pj4gKwljYXNlIFY0TDJfRVZFTlRfU09VUkNFX0NIQU5HRToNCj4+ICsJCXJldHVybiB2NGwyX3Ny Y19jaGFuZ2VfZXZlbnRfc3ViZGV2X3N1YnNjcmliZShzZCwgZmgsIHN1Yik7DQo+PiArCWNhc2Ug VjRMMl9FVkVOVF9DVFJMOg0KPj4gKwkJcmV0dXJuIHY0bDJfY3RybF9zdWJkZXZfc3Vic2NyaWJl X2V2ZW50KHNkLCBmaCwgc3ViKTsNCj4+ICsJZGVmYXVsdDoNCj4+ICsJCXJldHVybiAtRUlOVkFM Ow0KPj4gKwl9DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X2dfaW5wdXRfc3Rh dHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQ0KPj4gK3sNCj4+ICsJc3Ry dWN0IGl0NjYyNSAqaXQ2NjI1ID0gc2RfdG9fNjYyNShzZCk7DQo+PiArCWJvb2wgdmFsOw0KPj4g Kw0KPj4gKwl2YWwgPSBub19zaWduYWwoaXQ2NjI1KTsNCj4+ICsJKnN0YXR1cyA9IDA7DQo+PiAr CSpzdGF0dXMgfD0gdmFsID8gVjRMMl9JTl9TVF9OT19TSUdOQUwgOiAwOw0KPj4gKwkqc3RhdHVz IHw9IHZhbCA/IFY0TDJfSU5fU1RfTk9fU1lOQyA6IDA7DQo+PiArDQo+PiArCXY0bDJfZGJnKDEs IGRlYnVnLCBzZCwgIiVzOiBzdGF0dXMgPSAweCV4IiwgX19mdW5jX18sICpzdGF0dXMpOw0KPj4g Kw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludA0KPj4gK2l0NjYy NV91cGRhdGVfdGltaW5nc19pZl9jaGFuZ2VkKHN0cnVjdCBpdDY2MjUgKml0NjYyNSwNCj4+ICsJ CQkJIGNvbnN0IHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+PiArew0KPj4gKwlp bnQgcmV0Ow0KPj4gKw0KPj4gKwlndWFyZChtdXRleCkoJml0NjYyNS0+aXQ2NjI1X2xvY2spOw0K Pj4gKwlpZiAodjRsMl9tYXRjaF9kdl90aW1pbmdzKCZpdDY2MjUtPnRpbWluZ3MsIHRpbWluZ3Ms IDAsIGZhbHNlKSkgew0KPj4gKwkJcmV0ID0gMDsNCj4+ICsJfSBlbHNlIGlmICghdjRsMl92YWxp ZF9kdl90aW1pbmdzKHRpbWluZ3MsICZpdDY2MjVfdGltaW5nc19jYXAsDQo+PiArCQkJCQkgIE5V TEwsIE5VTEwpKSB7DQo+PiArCQlyZXQgPSAtRVJBTkdFOw0KPj4gKwl9IGVsc2Ugew0KPj4gKwkJ aXQ2NjI1LT50aW1pbmdzID0gKnRpbWluZ3M7DQo+PiArCQlyZXQgPSAxOw0KPj4gKwl9DQo+PiAr DQo+PiArCXJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X3Nf ZHZfdGltaW5ncyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPj4gKwkJCSAgICAgICBzdHJ1Y3Qg djRsMl9kdl90aW1pbmdzICp0aW1pbmdzKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGl0NjYyNSAqaXQ2 NjI1ID0gc2RfdG9fNjYyNShzZCk7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCWlmICghdGlt aW5ncykNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKw0KPj4gKwlpZiAoZGVidWcpDQo+PiAr CQl2NGwyX3ByaW50X2R2X3RpbWluZ3Moc2QtPm5hbWUsIF9fZnVuY19fLCB0aW1pbmdzLCBmYWxz ZSk7DQo+PiArDQo+PiArCXJldCA9IGl0NjYyNV91cGRhdGVfdGltaW5nc19pZl9jaGFuZ2VkKGl0 NjYyNSwgdGltaW5ncyk7DQo+PiArCWlmIChyZXQgPT0gLUVSQU5HRSkgew0KPj4gKwkJdjRsMl9k YmcoMSwgZGVidWcsIHNkLCAiJXM6IHRpbWluZ3Mgb3V0IG9mIHJhbmdlIiwgX19mdW5jX18pOw0K Pj4gKwkJcmV0dXJuIHJldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAocmV0ID09IDApIHsNCj4+ ICsJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIiVzOiBubyBjaGFuZ2UiLCBfX2Z1bmNfXyk7DQo+ PiArCQlyZXR1cm4gMDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpdDY2MjVfZW5hYmxlX3N0cmVhbShp dDY2MjUsIGZhbHNlKTsNCj4NCj5UaGlzIGRvZXNuJ3QgbG9vayByaWdodC4gVmlkZW8gb3V0cHV0 IHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgd2hlbiB0aGUgYnJpZGdlIGRyaXZlcg0KPmNhbGxzIHRo ZSBzX3N0cmVhbSBvcC4gRG9pbmcgaXQgaGVyZSBjYW4gY2F1c2UgcHJvYmxlbXMgaWYgdGhlIHJl bWFpbmRlciBvZiB0aGUNCj52aWRlbyBwaXBlbGluZSBpc24ndCBwcm9wZXJseSBjb25maWd1cmVk Lg0KPg0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBp dDY2MjVfZ19kdl90aW1pbmdzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+PiArCQkJICAgICAg IHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2 NjI1ICppdDY2MjUgPSBzZF90b182NjI1KHNkKTsNCj4+ICsNCj4+ICsJaXQ2NjI1X2dldF90aW1p bmdzKGl0NjYyNSwgdGltaW5ncyk7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMgaW50IGl0NjYyNV9lbnVtX2R2X3RpbWluZ3Moc3RydWN0IHY0bDJfc3ViZGV2 ICpzZCwNCj4+ICsJCQkJICBzdHJ1Y3QgdjRsMl9lbnVtX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+ PiArew0KPj4gKwlpZiAodGltaW5ncy0+cGFkICE9IDApDQo+PiArCQlyZXR1cm4gLUVJTlZBTDsN Cj4+ICsNCj4+ICsJcmV0dXJuIHY0bDJfZW51bV9kdl90aW1pbmdzX2NhcCh0aW1pbmdzLA0KPj4g KwkJCQkJJml0NjYyNV90aW1pbmdzX2NhcCwgTlVMTCwgTlVMTCk7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyBpbnQgaXQ2NjI1X3F1ZXJ5X2R2X3RpbWluZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCwNCj4+ICsJCQkJICAgc3RydWN0IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncykNCj4+ICt7DQo+ PiArCXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IHNkX3RvXzY2MjUoc2QpOw0KPj4gKwlpbnQgcmV0 Ow0KPj4gKw0KPj4gKwlyZXQgPSBpdDY2MjVfZ2V0X2RldGVjdGVkX3RpbWluZ3MoaXQ2NjI1LCB0 aW1pbmdzKTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArDQo+PiArCWlm IChkZWJ1ZykNCj4+ICsJCXY0bDJfcHJpbnRfZHZfdGltaW5ncyhzZC0+bmFtZSwgX19mdW5jX18s IHRpbWluZ3MsIGZhbHNlKTsNCj4+ICsNCj4+ICsJaWYgKCF2NGwyX3ZhbGlkX2R2X3RpbWluZ3Mo dGltaW5ncywgJml0NjYyNV90aW1pbmdzX2NhcCwgTlVMTCwgTlVMTCkpIHsNCj4+ICsJCXY0bDJf ZGJnKDEsIGRlYnVnLCBzZCwgIiVzOiB0aW1pbmdzIG91dCBvZiByYW5nZSIsIF9fZnVuY19fKTsN Cj4+ICsJCXJldHVybiAtRVJBTkdFOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9kdl90aW1pbmdzX2NhcChzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnNkLA0KPj4gKwkJCQkgc3RydWN0IHY0bDJfZHZfdGltaW5nc19jYXAgKmNhcCkN Cj4+ICt7DQo+PiArCWlmIChjYXAtPnBhZCAhPSAwKQ0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ PiArDQo+PiArCSpjYXAgPSBpdDY2MjVfdGltaW5nc19jYXA7DQo+PiArDQo+PiArCXJldHVybiAw Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9zX3N0cmVhbShzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGl0NjYyNSAqaXQ2 NjI1ID0gc2RfdG9fNjYyNShzZCk7DQo+PiArDQo+PiArCWl0NjYyNV9lbmFibGVfc3RyZWFtKGl0 NjYyNSwgZW5hYmxlKTsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBp bnQgaXQ2NjI1X2VudW1fbWJ1c19jb2RlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+PiArCQkJ CSBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLA0KPj4gKwkJCQkgc3RydWN0IHY0 bDJfc3ViZGV2X21idXNfY29kZV9lbnVtICpjb2RlKQ0KPj4gK3sNCj4+ICsJZGV2X2RiZyhzZC0+ ZGV2LCAiJXM6IGluZGV4PSVkIiwgX19mdW5jX18sIGNvZGUtPmluZGV4KTsNCj4+ICsNCj4+ICsJ aWYgKGNvZGUtPmluZGV4ID49IEFSUkFZX1NJWkUoaXQ2NjI1X2Zvcm1hdHMpKQ0KPj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArCWRldl9kYmcoc2QtPmRldiwgIiVzOiBjb2RlPTB4JTA4 eCIsIF9fZnVuY19fLA0KPj4gKwkJaXQ2NjI1X2Zvcm1hdHNbY29kZS0+aW5kZXhdLm1idXNfZm10 X2NvZGUpOw0KPj4gKwljb2RlLT5jb2RlID0gaXQ2NjI1X2Zvcm1hdHNbY29kZS0+aW5kZXhdLm1i dXNfZm10X2NvZGU7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgaW50IGl0NjYyNV9nZXRfbWJ1c19jb25maWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4+ ICsJCQkJICB1bnNpZ25lZCBpbnQgcGFkLA0KPj4gKwkJCQkgIHN0cnVjdCB2NGwyX21idXNfY29u ZmlnICpjZmcpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBzZF90b182NjI1 KHNkKTsNCj4+ICsNCj4+ICsJaWYgKHBhZCAhPSAwKQ0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ PiArDQo+PiArCWNmZy0+dHlwZSA9IGl0NjYyNS0+YnVzX3R5cGU7DQo+PiArCWNmZy0+YnVzLm1p cGlfY3NpMi5mbGFncyA9IDA7DQo+PiArCWNmZy0+YnVzLm1pcGlfY3NpMi5udW1fZGF0YV9sYW5l cyA9IGl0NjYyNS0+Y3NpX2xhbmVzOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIGludCBpdDY2MjVfcGFkX3NfZHZfdGltaW5ncyhzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnNkLCB1bnNpZ25lZCBpbnQgcGFkLA0KPj4gKwkJCQkgICBzdHJ1Y3QgdjRsMl9kdl90aW1p bmdzICp0aW1pbmdzKQ0KPj4gK3sNCj4+ICsJaWYgKHBhZCAhPSAwKQ0KPj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+PiArDQo+PiArCXJldHVybiBpdDY2MjVfc19kdl90aW1pbmdzKHNkLCB0aW1pbmdz KTsNCj4NCj5XaHkgbm90IGp1c3QgbW92ZSB0aGUgaXQ2NjI1X3NfZHZfdGltaW5ncyBjb2RlIGhl cmU/IERpdHRvIGZvciB0aGUgbmV4dCB0d28gZnVuY3Rpb25zLg0KPg0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW50IGl0NjYyNV9wYWRfZ19kdl90aW1pbmdzKHN0cnVjdCB2NGwyX3N1YmRldiAq c2QsIHVuc2lnbmVkIGludCBwYWQsDQo+PiArCQkJCSAgIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3Mg KnRpbWluZ3MpDQo+PiArew0KPj4gKwlpZiAocGFkICE9IDApDQo+PiArCQlyZXR1cm4gLUVJTlZB TDsNCj4+ICsNCj4+ICsJcmV0dXJuIGl0NjYyNV9nX2R2X3RpbWluZ3Moc2QsIHRpbWluZ3MpOw0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9wYWRfcXVlcnlfZHZfdGltaW5ncyhz dHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPj4gKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHBhZCwN Cj4+ICsJCQkJICAgICAgIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+PiArew0K Pj4gKwlpZiAocGFkICE9IDApDQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsJcmV0 dXJuIGl0NjYyNV9xdWVyeV9kdl90aW1pbmdzKHNkLCB0aW1pbmdzKTsNCj4+ICt9DQo+PiArDQo+ PiArc3RhdGljIGlubGluZSB1MzIgZm9ybWF0X3RvX2NvbG9yc3BhY2UodTggY3NpX2Zvcm1hdCkN Cj4+ICt7DQo+PiArCXN3aXRjaCAoY3NpX2Zvcm1hdCkgew0KPj4gKwljYXNlIENTSV9SR0I0NDQ6 DQo+PiArCWNhc2UgQ1NJX1JHQjU1NToNCj4+ICsJY2FzZSBDU0lfUkdCNTY1Og0KPj4gKwljYXNl IENTSV9SR0I2NjY6DQo+PiArCWNhc2UgQ1NJX1JHQjg4ODoNCj4+ICsJY2FzZSBDU0lfUkdCXzEw YjoNCj4+ICsJY2FzZSBDU0lfUkdCXzEyYjoNCj4+ICsJCXJldHVybiBWNEwyX0NPTE9SU1BBQ0Vf U1JHQjsNCj4+ICsJY2FzZSBDU0lfWVVWNDIwXzhiX0w6DQo+PiArCWNhc2UgQ1NJX1lVVjQyMF84 YjoNCj4+ICsJY2FzZSBDU0lfWVVWNDIwXzEwYjoNCj4+ICsJY2FzZSBDU0lfWVVWNDIyXzhiOg0K Pj4gKwljYXNlIENTSV9ZVVY0MjJfMTBiOg0KPj4gKwljYXNlIENTSV9ZVVY0MjJfMTJiOg0KPj4g KwljYXNlIENTSV9ZVVY0MjBfMTBiX0w6DQo+PiArCWNhc2UgQ1NJX1lVVjQyMF8xMmI6DQo+PiAr CWNhc2UgQ1NJX1lVVjQ0NF84YjoNCj4+ICsJY2FzZSBDU0lfWVVWNDQ0XzEwYjoNCj4+ICsJY2Fz ZSBDU0lfWVVWNDQ0XzEyYjoNCj4+ICsJCXJldHVybiBWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5Ow0K Pj4gKwlkZWZhdWx0Og0KPj4gKwkJcmV0dXJuIDA7DQo+PiArCX0NCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIGNvbnN0IGNoYXIgKml0NjYyNV9jc2lfZm9ybWF0X25hbWUodTggY3NpX2Zvcm1hdCkN Cj4+ICt7DQo+PiArCXN3aXRjaCAoY3NpX2Zvcm1hdCkgew0KPj4gKwljYXNlIENTSV9ZVVY0MjJf OGI6DQo+PiArCQlyZXR1cm4gIllVVjQyMiA4Yml0IjsNCj4+ICsJY2FzZSBDU0lfUkdCODg4Og0K Pj4gKwkJcmV0dXJuICJSR0I4ODggOGJpdCI7DQo+PiArCWNhc2UgQ1NJX1lVVjQ0NF84YjoNCj4+ ICsJCXJldHVybiAiWVVWNDQ0IDhiaXQiOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJcmV0dXJuICJ1 bmtub3duIjsNCj4+ICsJfQ0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9nZXRf Zm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+PiArCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZf c3RhdGUgKnNkX3N0YXRlLA0KPj4gKwkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm9y bWF0KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGl0NjYyNSAqaXQ2NjI1ID0gc2RfdG9fNjYyNShzZCk7 DQo+PiArCXN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgdGltaW5nczsNCj4+ICsNCj4+ICsJaWYgKGZv cm1hdC0+cGFkICE9IDApDQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsJaXQ2NjI1 X2dldF90aW1pbmdzKGl0NjYyNSwgJnRpbWluZ3MpOw0KPj4gKwlmb3JtYXQtPmZvcm1hdC53aWR0 aCA9IHRpbWluZ3MuYnQud2lkdGg7DQo+PiArCWZvcm1hdC0+Zm9ybWF0LmhlaWdodCA9IHRpbWlu Z3MuYnQuaGVpZ2h0Ow0KPj4gKwlmb3JtYXQtPmZvcm1hdC5maWVsZCA9IHRpbWluZ3MuYnQuaW50 ZXJsYWNlZCA9PSBWNEwyX0RWX0lOVEVSTEFDRUQgPw0KPj4gKwkJCSAgICAgICBWNEwyX0ZJRUxE X0lOVEVSTEFDRUQgOiBWNEwyX0ZJRUxEX05PTkU7DQo+PiArDQo+PiArCWlmIChmb3JtYXQtPndo aWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9UUlkpIHsNCj4+ICsJCXN0cnVjdCB2NGwyX21idXNf ZnJhbWVmbXQgKmZtdDsNCj4+ICsNCj4+ICsJCWZtdCA9IHY0bDJfc3ViZGV2X3N0YXRlX2dldF9m b3JtYXQoc2Rfc3RhdGUsIGZvcm1hdC0+cGFkKTsNCj4+ICsJCWZvcm1hdC0+Zm9ybWF0LmNvZGUg PSBmbXQtPmNvZGU7DQo+PiArCQlmb3JtYXQtPmZvcm1hdC5jb2xvcnNwYWNlID0gZm10LT5jb2xv cnNwYWNlOw0KPj4gKwl9IGVsc2Ugew0KPj4gKwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmaXQ2NjI1 LT5pdDY2MjVfbG9jaykgew0KPj4gKwkJCWZvcm1hdC0+Zm9ybWF0LmNvbG9yc3BhY2UgPQ0KPj4g KwkJCQlmb3JtYXRfdG9fY29sb3JzcGFjZShpdDY2MjUtPmNzaV9mb3JtYXQpOw0KPj4gKwkJCWZv cm1hdC0+Zm9ybWF0LmNvZGUgPSBpdDY2MjUtPm1idXNfZm10X2NvZGU7DQo+PiArCQl9DQo+PiAr CX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2 NjI1X3NldF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4+ICsJCQkgIHN0cnVjdCB2NGwy X3N1YmRldl9zdGF0ZSAqc2Rfc3RhdGUsDQo+PiArCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9y bWF0ICpmb3JtYXQpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBzZF90b182 NjI1KHNkKTsNCj4+ICsJaW50IHJldDsNCj4+ICsJdTMyIG1idXNfZm10X2NvZGUgPSBmb3JtYXQt PmZvcm1hdC5jb2RlOw0KPj4gKw0KPj4gKwlyZXQgPSBpdDY2MjVfZ2V0X2ZtdChzZCwgc2Rfc3Rh dGUsIGZvcm1hdCk7DQo+PiArCWZvcm1hdC0+Zm9ybWF0LmNvZGUgPSBtYnVzX2ZtdF9jb2RlOw0K Pj4gKw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJcmV0dXJuIHJldDsNCj4+ICsNCj4+ICsJcmV0ID0g aXQ2NjI1X2NzaV9tYnVzX2NvZGVfaWR4KG1idXNfZm10X2NvZGUpOw0KPj4gKw0KPj4gKwlpZiAo cmV0IDwgMCkgew0KPj4gKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLA0KPj4gKwkJCSAiJXM6IHVu c3VwcG9ydGVkIGZvcm1hdCBjb2RlIDB4JXgsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0IiwNCj4+ ICsJCQkgX19mdW5jX18sIG1idXNfZm10X2NvZGUpOw0KPj4gKwkJcmV0ID0gMDsNCj4+ICsJCW1i dXNfZm10X2NvZGUgPSBpdDY2MjVfZm9ybWF0c1tyZXRdLm1idXNfZm10X2NvZGU7DQo+PiArCQlm b3JtYXQtPmZvcm1hdC5jb2RlID0gbWJ1c19mbXRfY29kZTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlp ZiAoZm9ybWF0LT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZKSB7DQo+PiArCQlzdHJ1 Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmbXQ7DQo+PiArDQo+PiArCQlmbXQgPSB2NGwyX3N1YmRl dl9zdGF0ZV9nZXRfZm9ybWF0KHNkX3N0YXRlLCBmb3JtYXQtPnBhZCk7DQo+PiArCQlmbXQtPmNv ZGUgPSBmb3JtYXQtPmZvcm1hdC5jb2RlOw0KPj4gKwkJZm10LT5jb2xvcnNwYWNlID0gZm9ybWF0 X3RvX2NvbG9yc3BhY2UoaXQ2NjI1X2Zvcm1hdHNbcmV0XS5jc2lfZm9ybWF0KTsNCj4+ICsJCWZv cm1hdC0+Zm9ybWF0LmNvbG9yc3BhY2UgPSBmbXQtPmNvbG9yc3BhY2U7DQo+PiArCQl2NGwyX2Ri ZygxLCBkZWJ1Zywgc2QsICIlczogdHJ5IGZvcm1hdCBjb2RlID0gMHgleCIsDQo+PiArCQkJIF9f ZnVuY19fLCBmb3JtYXQtPmZvcm1hdC5jb2RlKTsNCj4+ICsJCXJldHVybiAwOw0KPj4gKwl9DQo+ PiArDQo+PiArCXNjb3BlZF9ndWFyZChtdXRleCwgJml0NjYyNS0+aXQ2NjI1X2xvY2spIHsNCj4+ ICsJCWl0NjYyNS0+Y3NpX2Zvcm1hdCA9IGl0NjYyNV9mb3JtYXRzW3JldF0uY3NpX2Zvcm1hdDsN Cj4+ICsJCWl0NjYyNS0+bWJ1c19mbXRfY29kZSA9IGZvcm1hdC0+Zm9ybWF0LmNvZGU7DQo+PiAr CQlpdDY2MjVfZW5hYmxlX3N0cmVhbV9sb2NrZWQoaXQ2NjI1LCBmYWxzZSk7DQo+PiArCQlpdDY2 MjVfc2V0X21pcGlfY29uZmlnX2xvY2tlZChpdDY2MjUsIGl0NjYyNS0+Y3NpX2Zvcm1hdCk7DQo+ PiArCX0NCj4+ICsNCj4+ICsJZm9ybWF0LT5mb3JtYXQuY29sb3JzcGFjZSA9IGZvcm1hdF90b19j b2xvcnNwYWNlKGl0NjYyNV9mb3JtYXRzW3JldF0uY3NpX2Zvcm1hdCk7DQo+PiArDQo+PiArCXJl dHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9nX2VkaWQoc3RydWN0 IHY0bDJfc3ViZGV2ICpzZCwNCj4+ICsJCQkgc3RydWN0IHY0bDJfc3ViZGV2X2VkaWQgKmVkaWQp DQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBzZF90b182NjI1KHNkKTsNCj4+ ICsJaW50IGVycjsNCj4+ICsNCj4+ICsJaWYgKGVkaWQtPnBhZCAhPSAwKQ0KPj4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+PiArDQo+PiArCW1lbXNldChlZGlkLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKGVk aWQtPnJlc2VydmVkKSk7DQo+PiArDQo+PiArCWlmIChlZGlkLT5ibG9ja3MgPT0gMCkgew0KPj4g KwkJZWRpZC0+YmxvY2tzID0gRURJRF9OVU1fQkxPQ0tTX01BWDsNCj4+ICsJCXJldHVybiAwOw0K Pj4gKwl9DQo+PiArDQo+PiArCWlmIChlZGlkLT5zdGFydF9ibG9jayA+PSBFRElEX05VTV9CTE9D S1NfTUFYKSB7DQo+PiArCQllZGlkLT5ibG9ja3MgPSAwOw0KPj4gKwkJcmV0dXJuIDA7DQo+PiAr CX0NCj4+ICsNCj4+ICsJaWYgKGVkaWQtPmJsb2NrcyA+IEVESURfTlVNX0JMT0NLU19NQVggLSBl ZGlkLT5zdGFydF9ibG9jaykNCj4+ICsJCWVkaWQtPmJsb2NrcyA9IEVESURfTlVNX0JMT0NLU19N QVggLSBlZGlkLT5zdGFydF9ibG9jazsNCj4+ICsNCj4+ICsJZXJyID0gaXQ2NjI1X3JlYWRfZWRp ZChpdDY2MjUsIGVkaWQtPmVkaWQsIGVkaWQtPnN0YXJ0X2Jsb2NrLA0KPj4gKwkJCSAgICAgICBl ZGlkLT5ibG9ja3MpOw0KPg0KPlRoaXMgYWx3YXlzIHJlYWRzIDQgRURJRCBibG9ja3MsIGV2ZW4g aWYgdGhlIEVESUQgaGFzIGZld2VyIGJsb2Nrcy4NCj4NCj5Zb3Ugc2hvdWxkIGRldGVybWluZSB0 aGUgYWN0dWFsIG51bWJlciBvZiBibG9ja3MuIEVhc2llc3QgaXMganVzdCB0bw0KPnN0b3JlIHRo YXQgd2hlbiBzX2VkaWQgaXMgY2FsbGVkIHNvIHlvdSBrbm93IGhvdyBtYW55IGJsb2NrcyB0aGUg RURJRA0KPmhhcy4NCj4NCj4+ICsNCj4+ICsJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X3NfZWRpZChzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnNkLA0KPj4gKwkJCSBzdHJ1Y3QgdjRsMl9zdWJkZXZfZWRpZCAqZWRpZCkNCj4+ICt7DQo+ PiArCXN0cnVjdCBpdDY2MjUgKml0NjYyNSA9IHNkX3RvXzY2MjUoc2QpOw0KPj4gKwlpbnQgZXJy ID0gMDsNCj4+ICsJdTE2IHBhOw0KPj4gKwlpbnQgcGFfZXJyOw0KPj4gKw0KPj4gKwlpZiAoZWRp ZC0+cGFkICE9IDApIHsNCj4+ICsJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBwYWQgJWQiLCBlZGlk LT5wYWQpOw0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ICsNCj4+ICsJbWVtc2V0 KGVkaWQtPnJlc2VydmVkLCAwLCBzaXplb2YoZWRpZC0+cmVzZXJ2ZWQpKTsNCj4+ICsNCj4+ICsJ aWYgKGVkaWQtPnN0YXJ0X2Jsb2NrICE9IDApIHsNCj4+ICsJCXY0bDJfZXJyKHNkLCAic3RhcnRf YmxvY2sgbXVzdCBiZSAwIGZvciBzZXQgZWRpZCIpOw0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ PiArCX0NCj4+ICsNCj4+ICsJaWYgKGVkaWQtPmJsb2NrcyA+IEVESURfTlVNX0JMT0NLU19NQVgp IHsNCj4+ICsJCXY0bDJfZXJyKHNkLCAidG9vIG1hbnkgZWRpZCBibG9ja3M6ICVkIiwgZWRpZC0+ YmxvY2tzKTsNCj4+ICsJCWVkaWQtPmJsb2NrcyA9IEVESURfTlVNX0JMT0NLU19NQVg7DQo+PiAr CQlyZXR1cm4gLUUyQklHOw0KPj4gKwl9DQo+PiArDQo+PiArCWl0NjYyNV9kaXNhYmxlX2hwZChp dDY2MjUpOw0KPj4gKw0KPj4gKwlpZiAoZWRpZC0+YmxvY2tzID09IDApIHsNCj4+ICsJCWNlY19w aHlzX2FkZHJfaW52YWxpZGF0ZShpdDY2MjUtPmNlY19hZGFwKTsNCj4+ICsJCXJldHVybiAwOw0K Pj4gKwl9DQo+PiArDQo+PiArCWVyciA9IGl0NjYyNV93cml0ZV9lZGlkKGl0NjYyNSwgZWRpZC0+ ZWRpZCwNCj4+ICsJCQkJZWRpZC0+c3RhcnRfYmxvY2ssIGVkaWQtPmJsb2Nrcyk7DQo+PiArCWlm IChlcnIgPCAwKSB7DQo+PiArCQl2NGwyX2VycihzZCwgIndyaXRlIGVkaWQgZmFpbGVkIik7DQo+ PiArCX0gZWxzZSB7DQo+PiArCQlwYSA9IGNlY19nZXRfZWRpZF9waHlzX2FkZHIoZWRpZC0+ZWRp ZCwgZWRpZC0+YmxvY2tzICogMTI4LCBOVUxMKTsNCj4NCj5UaGlzIGNvZGUgaXMgd3JvbmcuIFVz ZSB0aGlzOg0KPg0KPiAgICAgICAgcGEgPSB2NGwyX2dldF9lZGlkX3BoeXNfYWRkcihlZGlkLT5l ZGlkLCBlZGlkLT5ibG9ja3MgKiAxMjgsIE5VTEwpOw0KPiAgICAgICAgZXJyID0gdjRsMl9waHlz X2FkZHJfdmFsaWRhdGUocGEsICZwYXJlbnRfcGEsIE5VTEwpOw0KPiAgICAgICAgaWYgKGVycikN Cj4gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsNCj4NCj5UaGlzIHZhbGlkYXRlIGNoZWNrIG11 c3QgYmUgZG9uZSBiZWZvcmUgeW91IHdyaXRlIHRoZSBuZXcgRURJRC4NCj4NCj4JY2VjX3NfcGh5 c19hZGRyKGl0NjYyNS0+Y2VjX2FkYXAsIHBhcmVudF9wYSwgZmFsc2UpOw0KPg0KPkFuZCB0aGlz IGNlY19zX3BoeXNfYWRkciBjYWxsIHNob3VsZCBiZSBkb25lIGFmdGVyIHRoZSBFRElEIHdhcyB3 cml0dGVuLg0KPg0KPj4gKwkJcGFfZXJyID0gcGEgPT0gQ0VDX1BIWVNfQUREUl9JTlZBTElEID8g LUVJTlZBTCA6DQo+PiArCQkJIHY0bDJfcGh5c19hZGRyX3ZhbGlkYXRlKHBhLCBOVUxMLCBOVUxM KTsNCj4+ICsJCWlmIChwYV9lcnIpIHsNCj4+ICsJCQl2NGwyX3dhcm4oc2QsICJpbnZhbGlkIENF QyBwaHlzaWNhbCBhZGRyZXNzIGluIEVESUQiKTsNCj4+ICsJCQljZWNfcGh5c19hZGRyX2ludmFs aWRhdGUoaXQ2NjI1LT5jZWNfYWRhcCk7DQo+PiArCQl9IGVsc2Ugew0KPj4gKwkJCWNlY19zX3Bo eXNfYWRkcihpdDY2MjUtPmNlY19hZGFwLCBwYSwgZmFsc2UpOw0KPj4gKwkJfQ0KPj4gKwl9DQo+ PiArDQo+PiArCWlmIChoZG1pXzV2X3Bvd2VyX3ByZXNlbnQoaXQ2NjI1KSkgew0KPj4gKwkJaXQ2 NjI1X2VuYWJsZV9ocGQoaXQ2NjI1KTsNCj4+ICsJCWl0NjYyNV9zX2N0cmxfZGV0ZWN0X2hkbWlf NXYoc2QpOw0KPj4gKwl9IGVsc2Ugew0KPj4gKwkJaXQ2NjI1X2VuYWJsZV9hdXRvX2hwZChpdDY2 MjUpOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiBlcnIgPCAwID8gZXJyIDogMDsNCj4+ICt9 DQo+PiArDQo+PiArI2RlZmluZSBWNEwyX0NJRF9VU0VSX0lUNjYyNV9CQVNFCShWNEwyX0NJRF9V U0VSX0JBU0UgKyAweDExYjApDQo+DQo+Q3VzdG9tIGRyaXZlciBjb250cm9scyBtdXN0IGJlIHJl c2VydmVkIGluIGluY2x1ZGUvdWFwaS9saW51eC92NGwyLWNvbnRyb2xzLmguDQo+DQo+PiArI2Rl ZmluZSBJVDY2MjVfQ0lEX0FVRElPX1NBTVBMSU5HX1JBVEUgIChWNEwyX0NJRF9VU0VSX0lUNjYy NV9CQVNFICsgMCkNCj4+ICsjZGVmaW5lIElUNjYyNV9DSURfQVVESU9fUFJFU0VOVCAgICAgICAg KFY0TDJfQ0lEX1VTRVJfSVQ2NjI1X0JBU0UgKyAxKQ0KPj4gKyNkZWZpbmUgSVQ2NjI1X0NJRF9I RE1JX0lORk8gICAgICAgICAgICAoVjRMMl9DSURfVVNFUl9JVDY2MjVfQkFTRSArIDIpDQo+PiAr I2RlZmluZSBJVDY2MjVfQ0lEX01JUElfQ09ORklHICAgICAgICAgIChWNEwyX0NJRF9VU0VSX0lU NjYyNV9CQVNFICsgMykNCj4NCj5UeXBpY2FsbHkgYSBuZXcgcHVibGljIGhlYWRlciBpcyBjcmVh dGVkIGZvciB0aGUgZHJpdmVyIGNvbnRyb2xzLiBTZWUgZS5nLg0KPmluY2x1ZGUvdWFwaS9saW51 eC9ucGNtLXZpZGVvLmguIFRoZXNlIGNvbnRyb2xzIHNob3VsZCBiZSBkb2N1bWVudGVkIGluDQo+ dGhhdCBoZWFkZXIuDQo+DQo+PiArc3RhdGljIGludCBpdDY2MjVfZ192b2xhdGlsZV9jdHJsKHN0 cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUg PSBoZGxfdG9fNjYyNShjdHJsLT5oYW5kbGVyKTsNCj4+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCA9ICZpdDY2MjUtPnNkOw0KPj4gKw0KPj4gKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlcywg aWQ9MHgleCwgdmFsPSVkIiwNCj4+ICsJCSBfX2Z1bmNfXywgY3RybC0+aWQsIGN0cmwtPnZhbCk7 DQo+PiArDQo+PiArCXN3aXRjaCAoY3RybC0+aWQpIHsNCj4+ICsJY2FzZSBJVDY2MjVfQ0lEX0hE TUlfSU5GTzoNCj4+ICsJCXNjb3BlZF9ndWFyZChtdXRleCwgJml0NjYyNS0+aXQ2NjI1X2xvY2sp IHsNCj4+ICsJCQlzbnByaW50ZihjdHJsLT5wX25ldy5wX2NoYXIsIGN0cmwtPm1heGltdW0sICIl cyBAICV1SHoiLA0KPj4gKwkJCQkgaXQ2NjI1X2NzaV9mb3JtYXRfbmFtZShpdDY2MjUtPmNzaV9m b3JtYXQpLA0KPj4gKwkJCQkgZnBzX2Zyb21fYnRfdGltaW5ncygmaXQ2NjI1LT50aW1pbmdzLmJ0 KSk7DQo+DQo+VGhpcyBpc24ndCBhIHZvbGF0aWxlIGNvbnRyb2w6IGluc3RlYWQsIHdoZW4gY3Np X2Zvcm1hdCBvciB0aW1pbmdzLmJ0IGNoYW5nZSwNCj5qdXN0IHVwZGF0ZSB0aGlzIGNvbnRyb2wg d2l0aCB0aGUgbmV3IHZhbHVlLg0KPg0KPkJ1dCBJIHRoaW5rIHRoaXMgY29udHJvbCBzaG91bGQg YmUgZHJvcHBlZCBhcyBkb24ndCBzZWUgYW55IHZhbHVlIGluIGl0Lg0KPg0KPklmIHlvdSBsaWtl LCB5b3UgY2FuIHJlcG9ydCB0aGlzIGluIGl0NjYyNV9sb2dfc3RhdHVzLCB0aGF0J3MgYSBtb3Jl IGFwcHJvcHJpYXRlDQo+cGxhY2UuDQo+DQo+PiArCQl9DQo+PiArCQlicmVhazsNCj4+ICsJY2Fz ZSBJVDY2MjVfQ0lEX01JUElfQ09ORklHOg0KPj4gKwkJY3RybC0+dmFsID0gaXQ2NjI1X3JlYWRf Ynl0ZShpdDY2MjUsIFJFR19NSVBJX0RBVEFfVFlQRSk7DQo+DQo+SSB3b25kZXIgYWJvdXQgdGhp cyBjb250cm9sIGFzIHdlbGw6IHZvbGF0aWxlIGNvbnRyb2xzIGFyZSBtZWFudCBmb3IgY29udHJv bHMgd2hlcmUNCj50aGUgdmFsdWUgaGFzIHRvIGJlIHJlYWQgZnJvbSB0aGUgaGFyZHdhcmUgYW5k IHRoYXQgdmFsdWUgY2FuIGNoYW5nZSBhdCBhbnkgbW9tZW50Lg0KPg0KPkEgdHlwaWNhbCBleGFt cGxlIGlzIGlmIEFVVE9HQUlOIGlzIGVuYWJsZWQsIGFuZCB5b3UgcmVhZCB0aGUgY3VycmVudCBH QUlOIHZhbHVlIGZyb20NCj50aGUgaGFyZHdhcmUuDQo+DQo+VGhlIE1JUElfREFUQV9UWVBFIGlz LCBJIHRoaW5rLCBjb250cm9sbGVkIGJ5IHRoZSBkcml2ZXIgYW5kIGRvZXMgbm90IHJhbmRvbWx5 IGNoYW5nZS4NCj4NCj4+ICsJCWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJYnJlYWs7DQo+ PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQg aXQ2NjI1X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQ0KPj4gK3sNCj4+ICsJc3RydWN0 IGl0NjYyNSAqaXQ2NjI1ID0gaGRsX3RvXzY2MjUoY3RybC0+aGFuZGxlcik7DQo+PiArCXN0cnVj dCB2NGwyX3N1YmRldiAqc2QgPSAmaXQ2NjI1LT5zZDsNCj4+ICsNCj4+ICsJdjRsMl9kYmcoMSwg ZGVidWcsIHNkLCAiJXMsIGlkPTB4JXgsIHZhbD0lZCIsDQo+PiArCQkgX19mdW5jX18sIGN0cmwt PmlkLCBjdHJsLT52YWwpOw0KPj4gKw0KPj4gKwlzd2l0Y2ggKGN0cmwtPmlkKSB7DQo+PiArCWNh c2UgSVQ2NjI1X0NJRF9NSVBJX0NPTkZJRzoNCj4+ICsJCWl0NjYyNV9zZXRfbWlwaV9jb25maWco aXQ2NjI1LCBjdHJsLT52YWwpOw0KPg0KPldoeSBpcyB0aGlzIHNldHRhYmxlPyBJc24ndCB0aGlz IGRlcml2ZWQgZnJvbSB0aGUgbWJ1c19jb2RlPyBUaGlzIGRvZXNuJ3QNCj5sb29rIHJpZ2h0Lg0K Pg0KPj4gKwkJYnJlYWs7DQo+PiArCWRlZmF1bHQ6DQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNvbnN0 IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBpdDY2MjVfY29yZV9vcHMgPSB7DQo+PiArCS5s b2dfc3RhdHVzID0gaXQ2NjI1X2xvZ19zdGF0dXMsDQo+PiArCS5pbnRlcnJ1cHRfc2VydmljZV9y b3V0aW5lID0gaXQ2NjI1X2lzciwNCj4+ICsJLnN1YnNjcmliZV9ldmVudCA9IGl0NjYyNV9zdWJz Y3JpYmVfZXZlbnQsDQo+PiArCS51bnN1YnNjcmliZV9ldmVudCA9IHY0bDJfZXZlbnRfc3ViZGV2 X3Vuc3Vic2NyaWJlLA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X3N1YmRldl92aWRlb19vcHMgaXQ2NjI1X3ZpZGVvX29wcyA9IHsNCj4+ICsJLmdfaW5wdXRfc3Rh dHVzID0gaXQ2NjI1X2dfaW5wdXRfc3RhdHVzLA0KPj4gKwkuc19zdHJlYW0gPSBpdDY2MjVfc19z dHJlYW0sDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2 X3BhZF9vcHMgaXQ2NjI1X3BhZF9vcHMgPSB7DQo+PiArCS5lbnVtX21idXNfY29kZSA9IGl0NjYy NV9lbnVtX21idXNfY29kZSwNCj4+ICsJLnNldF9mbXQgPSBpdDY2MjVfc2V0X2ZtdCwNCj4+ICsJ LmdldF9mbXQgPSBpdDY2MjVfZ2V0X2ZtdCwNCj4+ICsJLmdldF9lZGlkID0gaXQ2NjI1X2dfZWRp ZCwNCj4+ICsJLnNldF9lZGlkID0gaXQ2NjI1X3NfZWRpZCwNCj4+ICsJLmVudW1fZHZfdGltaW5n cyA9IGl0NjYyNV9lbnVtX2R2X3RpbWluZ3MsDQo+PiArCS5kdl90aW1pbmdzX2NhcCA9IGl0NjYy NV9kdl90aW1pbmdzX2NhcCwNCj4+ICsJLmdldF9tYnVzX2NvbmZpZyA9IGl0NjYyNV9nZXRfbWJ1 c19jb25maWcsDQo+PiArCS5zX2R2X3RpbWluZ3MgPSBpdDY2MjVfcGFkX3NfZHZfdGltaW5ncywN Cj4+ICsJLmdfZHZfdGltaW5ncyA9IGl0NjYyNV9wYWRfZ19kdl90aW1pbmdzLA0KPj4gKwkucXVl cnlfZHZfdGltaW5ncyA9IGl0NjYyNV9wYWRfcXVlcnlfZHZfdGltaW5ncywNCj4+ICt9Ow0KPj4g Kw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGl0NjYyNV9vcHMgPSB7 DQo+PiArCS5jb3JlID0gJml0NjYyNV9jb3JlX29wcywNCj4+ICsJLnZpZGVvID0gJml0NjYyNV92 aWRlb19vcHMsDQo+PiArCS5wYWQgPSAmaXQ2NjI1X3BhZF9vcHMsDQo+PiArfTsNCj4+ICsNCj4+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgaXQ2NjI1X2N0cmxfb3BzID0gew0K Pj4gKwkuZ192b2xhdGlsZV9jdHJsID0gaXQ2NjI1X2dfdm9sYXRpbGVfY3RybCwNCj4+ICsJLnNf Y3RybCA9IGl0NjYyNV9zX2N0cmwsDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHY0bDJfY3RybF9jb25maWcgaXQ2NjI1X2N0cmxfYXVkaW9fc2FtcGxpbmdfcmF0ZSA9IHsN Cj4+ICsJLmlkID0gSVQ2NjI1X0NJRF9BVURJT19TQU1QTElOR19SQVRFLA0KPj4gKwkubmFtZSA9 ICJBdWRpbyBzYW1wbGluZyByYXRlIiwNCj4NCj4iQXVkaW8gU2FtcGxpbmcgUmF0ZSINCj4NCj4+ ICsJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLA0KPj4gKwkubWluID0gMCwNCj4+ICsJ Lm1heCA9IDc2ODAwMCwNCj4+ICsJLnN0ZXAgPSAxLA0KPj4gKwkuZGVmID0gMCwNCj4+ICsJLmZs YWdzID0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZLA0KPj4gK307DQo+PiArDQo+PiArc3RhdGlj IGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfY29uZmlnIGl0NjYyNV9jdHJsX2F1ZGlvX3ByZXNlbnQg PSB7DQo+PiArCS5pZCA9IElUNjYyNV9DSURfQVVESU9fUFJFU0VOVCwNCj4+ICsJLm5hbWUgPSAi QXVkaW8gcHJlc2VudCIsDQo+DQo+IkF1ZGlvIFByZXNlbnQiDQo+DQo+QnV0IHJhdGhlciB0aGFu IG1ha2luZyB0aGVzZSB0d28gYXVkaW8gY29udHJvbHMgc3BlY2lmaWMgZm9yIHRoaXMgZHJpdmVy LCB0aGV5IHNob3VsZA0KPmJlIG1hZGUgc3RhbmRhcmQgY29udHJvbHMuIFRoZSB0YzM1ODc0My5j IGRyaXZlciBoYXMgdGhlIHNhbWUgY29udHJvbHMuIEFuZCB0aGV5IGFyZQ0KPnR5cGljYWwgZm9y IEhETUkgZHJpdmVycy4NCj4NCj5UaGV5IGNhbiBiZSBwYXJ0IG9mIHRoZSBEaWdpdGFsIFZpZGVv IENvbnRyb2xzLg0KDQpGb3IgdGhlIHR3byByZWFkLW9ubHkgYXVkaW8gY29udHJvbHMsIEF1ZGlv IFNhbXBsaW5nIFJhdGUgYW5kIEF1ZGlvDQpQcmVzZW50LCB3b3VsZCBpdCBiZSBhY2NlcHRhYmxl IHRvIGtlZXAgdGhlbSBhcyBwcm9wZXJseSByZXNlcnZlZA0KZHJpdmVyLXNwZWNpZmljIGNvbnRy b2xzLCBmb2xsb3dpbmcgdGhlIHRjMzU4NzQzIG1vZGVsPw0KDQpodHRwczovL2dpdC5rZXJuZWwu b3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQvdHJlZS9kcml2 ZXJzL21lZGlhL2kyYy90YzM1ODc0My5jI24xOTczDQoNCkkgd2lsbCByZXNlcnZlIFY0TDJfQ0lE X1VTRVJfSVQ2NjI1X0JBU0UgaW4NCmluY2x1ZGUvdWFwaS9saW51eC92NGwyLWNvbnRyb2xzLmgg YW5kIGFkZCBhIGRvY3VtZW50ZWQgcHVibGljDQppbmNsdWRlL3VhcGkvbGludXgvaXQ2NjI1Lg0K DQpIRE1JIEluZm8gYW5kIE1JUEkgQ29uZmlnIHdpbGwgYmUgcmVtb3ZlZC4NCg0KPj4gKwkudHlw ZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sDQo+PiArCS5taW4gPSAwLA0KPj4gKwkubWF4ID0g MSwNCj4+ICsJLnN0ZXAgPSAxLA0KPj4gKwkuZGVmID0gMCwNCj4+ICsJLmZsYWdzID0gVjRMMl9D VFJMX0ZMQUdfUkVBRF9PTkxZLA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVj dCB2NGwyX2N0cmxfY29uZmlnIGl0NjYyNV9jdHJsX2dldF9oZG1pX2luZm8gPSB7DQo+PiArCS5v cHMgPSAmaXQ2NjI1X2N0cmxfb3BzLA0KPj4gKwkuaWQgPSBJVDY2MjVfQ0lEX0hETUlfSU5GTywN Cj4+ICsJLm5hbWUgPSAiSERNSSBJbmZvIiwNCj4+ICsJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9T VFJJTkcsDQo+PiArCS5tYXggPSAxMjgsDQo+PiArCS5zdGVwID0gMSwNCj4+ICsJLmZsYWdzID0g VjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZIHwgVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUsDQo+PiAr fTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgaXQ2NjI1 X2N0cmxfbWlwaV9jb25maWcgPSB7DQo+PiArCS5vcHMgPSAmaXQ2NjI1X2N0cmxfb3BzLA0KPj4g KwkuaWQgPSBJVDY2MjVfQ0lEX01JUElfQ09ORklHLA0KPj4gKwkubmFtZSA9ICJNSVBJIGNvbmZp ZyIsDQo+DQo+Ik1JUEkgQ29uZmlnIg0KPg0KPj4gKwkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lO VEVHRVIsDQo+PiArCS5taW4gPSAwLA0KPj4gKwkubWF4ID0gMHg3RkZGRkZGRiwNCj4+ICsJLnN0 ZXAgPSAxLA0KPj4gKwkuZGVmID0gMHgzRSwNCj4+ICsJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdf Vk9MQVRJTEUsDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV92NGwyX2luaXRf Y29udHJvbHMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4+ICt7DQo+PiArCXN0cnVjdCBpdDY2 MjUgKml0NjYyNSA9IHNkX3RvXzY2MjUoc2QpOw0KPj4gKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRs ZXIgKmhkbCA9ICZpdDY2MjUtPmhkbDsNCj4+ICsNCj4+ICsJdjRsMl9jdHJsX2hhbmRsZXJfaW5p dChoZGwsIDQpOw0KPj4gKwlpdDY2MjUtPmN0cmxfNXZfZGV0ZWN0ID0NCj4+ICsJCXY0bDJfY3Ry bF9uZXdfc3RkKGhkbCwgTlVMTCwgVjRMMl9DSURfRFZfUlhfUE9XRVJfUFJFU0VOVCwNCj4+ICsJ CQkJICAwLCAxLCAwLCAwKTsNCj4+ICsNCj4+ICsJaXQ2NjI1LT5jdHJsX2F1ZGlvX3NhbXBsaW5n X3JhdGUgPQ0KPj4gKwkJdjRsMl9jdHJsX25ld19jdXN0b20oaGRsLA0KPj4gKwkJCQkgICAgICZp dDY2MjVfY3RybF9hdWRpb19zYW1wbGluZ19yYXRlLA0KPj4gKwkJCQkgICAgIE5VTEwpOw0KPj4g KwlpdDY2MjUtPmN0cmxfYXVkaW9fcHJlc2VudCA9DQo+PiArCQl2NGwyX2N0cmxfbmV3X2N1c3Rv bShoZGwsICZpdDY2MjVfY3RybF9hdWRpb19wcmVzZW50LCBOVUxMKTsNCj4+ICsJaXQ2NjI1LT5j dHJsX2xpbmtfZnJlcSA9DQo+PiArCQl2NGwyX2N0cmxfbmV3X2ludF9tZW51KGhkbCwgTlVMTCwg VjRMMl9DSURfTElOS19GUkVRLA0KPj4gKwkJCQkgICAgICAgQVJSQVlfU0laRShpdDY2MjVfbGlu a19mcmVxKSAtIDEsDQo+PiArCQkJCSAgICAgICAwLCBpdDY2MjVfbGlua19mcmVxKTsNCj4+ICsJ aXQ2NjI1LT5jdHJsX2dldF9oZG1pX2luZm8gPQ0KPj4gKwkJdjRsMl9jdHJsX25ld19jdXN0b20o aGRsLCAmaXQ2NjI1X2N0cmxfZ2V0X2hkbWlfaW5mbywgTlVMTCk7DQo+PiArCWl0NjYyNS0+Y3Ry bF9taXBpX2NvbmZpZyA9DQo+PiArCQl2NGwyX2N0cmxfbmV3X2N1c3RvbShoZGwsICZpdDY2MjVf Y3RybF9taXBpX2NvbmZpZywgTlVMTCk7DQo+PiArCWlmIChoZGwtPmVycm9yKSB7DQo+PiArCQl2 NGwyX2VycihzZCwgIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbnRyb2xzIik7DQo+PiArCQl2NGwy X2N0cmxfaGFuZGxlcl9mcmVlKGhkbCk7DQo+PiArCQlyZXR1cm4gaGRsLT5lcnJvcjsNCj4+ICsJ fQ0KPj4gKw0KPj4gKwlzZC0+Y3RybF9oYW5kbGVyID0gaGRsOw0KPj4gKw0KPj4gKwlyZXR1cm4g MDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXQ2NjI1X3JlZ2R1bXBfcHJpbnQoc3Ry dWN0IHNlcV9maWxlICpzLCBjb25zdCB1OCAqcmVnX2J1ZikNCj4+ICt7DQo+PiArCWludCBpOw0K Pj4gKw0KPj4gKwlzZXFfcHV0cyhzLCAiICAgICAweDAwIDB4MDEgMHgwMiAweDAzIDB4MDQgMHgw NSAweDA2IDB4MDcgMHgwOCAweDA5IDB4MEEgMHgwQiAweDBDIDB4MEQgMHgwRSAweDBGXG4iKTsN Cj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7DQo+PiArCQlpZiAoaSAlIDE2 ID09IDApDQo+PiArCQkJc2VxX3ByaW50ZihzLCAiWyUwMlhdICIsIGkgJiAweEYwKTsNCj4+ICsJ CXNlcV9wcmludGYocywgIjB4JTAyWCAiLCByZWdfYnVmW2ldKTsNCj4+ICsJCWlmIChpICUgMTYg PT0gMTUpDQo+PiArCQkJc2VxX3B1dGMocywgJ1xuJyk7DQo+PiArCX0NCj4+ICt9DQo+PiArDQo+ PiArc3RhdGljIGludCBpdDY2MjVfZWRpZF9yYW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZv aWQgKmRhdGEpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBzLT5wcml2YXRl Ow0KPj4gKwl1OCByZWdfYnVmWzI1Nl07DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCXJldCA9 IGl0NjYyNV9yZWFkX2VkaWQoaXQ2NjI1LCByZWdfYnVmLCAwLCAyKTsNCj4+ICsJaWYgKHJldCA8 IDApDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKwlpdDY2MjVfcmVnZHVtcF9wcmludChzLCByZWdf YnVmKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gK0RFRklORV9TSE9XX0FUVFJJ QlVURShpdDY2MjVfZWRpZF9yYW0pOw0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X21pcGlf cmVnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQ0KPj4gK3sNCj4+ICsJc3Ry dWN0IGl0NjYyNSAqaXQ2NjI1ID0gcy0+cHJpdmF0ZTsNCj4+ICsJdTggcmVnX2J1ZlsyNTZdOw0K Pj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlzY29wZWRfZ3VhcmQobXV0ZXgsICZpdDY2MjUtPml0 NjYyNV9sb2NrKQ0KPj4gKwkJcmV0ID0gaXQ2NjI1X3JlYWRfYnl0ZXMoaXQ2NjI1LCAweDAwLCBy ZWdfYnVmLCBzaXplb2YocmVnX2J1ZikpOw0KPj4gKwlpZiAocmV0IDwgMCkNCj4+ICsJCXJldHVy biByZXQ7DQo+PiArCWl0NjYyNV9yZWdkdW1wX3ByaW50KHMsIHJlZ19idWYpOw0KPj4gKw0KPj4g KwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfbWlwaV9yZWdf b3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4+ICt7DQo+PiAr CXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpdDY2MjVfbWlwaV9yZWdfc2hvdywgaW5vZGUtPmlf cHJpdmF0ZSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBzc2l6ZV90IGl0NjYyNV9taXBpX3Jl Z193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwNCj4+ICsJCQkJICAgICBjb25zdCBjaGFyIF9fdXNl ciAqdXNlcl9idWYsDQo+PiArCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQo+ PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUgPSBmaWxlX2lub2RlKGZpbGUpLT5pX3By aXZhdGU7DQo+PiArCWNoYXIgYnVmWzMyXSA9IHt9Ow0KPj4gKwl1bnNpZ25lZCBpbnQgYWRkciwg dmFsOw0KPj4gKwlzc2l6ZV90IGxlbjsNCj4+ICsJbG9mZl90IHBvcyA9IDA7DQo+PiArDQo+PiAr CWxlbiA9IHNpbXBsZV93cml0ZV90b19idWZmZXIoYnVmLCBzaXplb2YoYnVmKSAtIDEsICZwb3Ms IHVzZXJfYnVmLCBjb3VudCk7DQo+PiArCWlmIChsZW4gPCAwKQ0KPj4gKwkJcmV0dXJuIGxlbjsN Cj4+ICsJYnVmW2xlbl0gPSAnXDAnOw0KPj4gKw0KPj4gKwlpZiAoc3NjYW5mKGJ1ZiwgIiVYICVY IiwgJmFkZHIsICZ2YWwpICE9IDIpDQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsJ c2NvcGVkX2d1YXJkKG11dGV4LCAmaXQ2NjI1LT5pdDY2MjVfbG9jaykNCj4+ICsJCWl0NjYyNV93 cml0ZV9ieXRlKGl0NjYyNSwgYWRkciwgdmFsKTsNCj4+ICsNCj4+ICsJcmV0dXJuIGNvdW50Ow0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpdDY2 MjVfbWlwaV9yZWdfZm9wcyA9IHsNCj4+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsDQo+PiArCS5v cGVuID0gaXQ2NjI1X21pcGlfcmVnX29wZW4sDQo+PiArCS5yZWFkID0gc2VxX3JlYWQsDQo+PiAr CS53cml0ZSA9IGl0NjYyNV9taXBpX3JlZ193cml0ZSwNCj4+ICsJLmxsc2VlayA9IHNlcV9sc2Vl aywNCj4+ICsJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0 YXRpYyB2b2lkIGl0NjYyNV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGl0NjYyNSAqaXQ2NjI1LCBzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50KQ0KPj4gK3sNCj4+ICsJaXQ2NjI1LT5kZWJ1Z2ZzX2RpciA9 IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZSgmY2xpZW50LT5kZXYpLCBOVUxMKTsNCj4+ICsN Cj4+ICsJZGVidWdmc19jcmVhdGVfZmlsZSgibWlwaV9yZWciLCAwNjAwLCBpdDY2MjUtPmRlYnVn ZnNfZGlyLCBpdDY2MjUsDQo+PiArCQkJICAgICZpdDY2MjVfbWlwaV9yZWdfZm9wcyk7DQo+PiAr CWRlYnVnZnNfY3JlYXRlX2ZpbGUoImVkaWRfcmFtIiwgMDQwMCwgaXQ2NjI1LT5kZWJ1Z2ZzX2Rp ciwgaXQ2NjI1LA0KPj4gKwkJCSAgICAmaXQ2NjI1X2VkaWRfcmFtX2ZvcHMpOw0KPg0KPkR1bXBp bmcgdGhlIEVESUQgUkFNIHNlZW1zIHBvaW50bGVzcyB0byBtZSwgZ2l2ZW4gdGhhdCB5b3UgY2Fu IGdldCB0aGUgRURJRCBkYXRhDQo+d2l0aCBhbiBpb2N0bCBjYWxsIGF0IGFueSB0aW1lLiBJcyB0 aGVyZSBhIHBhcnRpY3VsYXIgcmVhc29uIGZvciBhZGRpbmcgdGhpcz8NCj4NCj5XaGF0IHNob3Vs ZCBiZSBhZGRlZCBoZXJlIGlzIGNvZGUgdG8gZXhwb3J0IEluZm9GcmFtZXMgdG8gZGVidWdmcy4g U2VhcmNoIGZvcg0KPnY0bDJfZGVidWdmc19pZl9hbGxvYyBpbiBkcml2ZXJzL21lZGlhLg0KPg0K PkFsbCBuZXcgSERNSSByZWNlaXZlcnMgbXVzdCBzdXBwb3J0IHRoYXQuDQo+DQo+PiArfQ0KPj4g Kw0KPj4gK3N0YXRpYyB2b2lkIGl0NjYyNV9pbml0X2RhdGEoc3RydWN0IGl0NjYyNSAqaXQ2NjI1 KQ0KPj4gK3sNCj4+ICsJc3RhdGljIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgZGVmYXVsdF90aW1p bmcgPQ0KPj4gKwkJCVY0TDJfRFZfQlRfQ0VBXzE5MjBYMTA4MFA2MDsNCj4+ICsNCj4+ICsJaXQ2 NjI1LT5jc2lfbGFuZXMgPSA0Ow0KPj4gKwlpdDY2MjUtPnBvcnRfbnVtID0gMTsNCj4+ICsJaXQ2 NjI1LT5idXNfdHlwZSA9IFY0TDJfTUJVU19DU0kyX0RQSFk7DQo+PiArCWl0NjYyNS0+Y3NpX2Zv cm1hdCA9IGl0NjYyNV9mb3JtYXRzWzBdLmNzaV9mb3JtYXQ7DQo+PiArCWl0NjYyNS0+bWJ1c19m bXRfY29kZSA9IGl0NjYyNV9mb3JtYXRzWzBdLm1idXNfZm10X2NvZGU7DQo+PiArCWl0NjYyNS0+ dGltaW5ncyA9IGRlZmF1bHRfdGltaW5nOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0 NjYyNV9wYXJzZV9lbmRwb2ludChzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiArew0KPj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSBpdDY2MjUtPmRldjsNCj4+ICsJLyoNCj4+ICsJICogUHJlLXNl dHRpbmcgYnVzX3R5cGUgaGVyZSBtYWtlcyB2NGwyX2Z3bm9kZV9lbmRwb2ludF9hbGxvY19wYXJz ZSgpDQo+PiArCSAqIHRyZWF0IGl0IGFzIGEgaGFyZCByZXF1aXJlbWVudCBhbmQgcmVqZWN0IGFu eSBlbmRwb2ludCB3aG9zZSBEVA0KPj4gKwkgKiBidXMtdHlwZSBkaXNhZ3JlZXMsIHNvIHRoaXMg bXVzdCBzdGF5IFY0TDJfTUJVU19VTktOT1dOIHRvIGxldCBpdA0KPj4gKwkgKiBhdXRvZGV0ZWN0 IEMtUEhZIHZzIEQtUEhZIGZyb20gdGhlIGVuZHBvaW50IGl0c2VsZi4NCj4+ICsJICovDQo+PiAr CXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRwb2ludCBlbmRwb2ludCA9IHsgLmJ1c190eXBlID0gVjRM Ml9NQlVTX1VOS05PV04gfTsNCj4+ICsJc3RydWN0IGRldmljZV9ub2RlICplcCA9IE5VTEw7DQo+ PiArCXVuc2lnbmVkIGludCBtYXhfbGFuZXM7DQo+PiArCXVuc2lnbmVkIGludCBwb3J0Ow0KPj4g KwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwkvKg0KPj4gKwkgKiBwb3J0QDAgYW5kIHBvcnRAMSBhcmUg dGhlIHR3byBDU0ktMiBvdXRwdXQgcG9ydHMgTUlQSTAvTUlQSTENCj4+ICsJICogKHBvcnRAMiBp cyB0aGUgSERNSSBpbnB1dCkuIFRoaXMgY2hpcCBzZXJpZXMgY2FuIGRyaXZlIGJvdGgNCj4+ICsJ ICogc2ltdWx0YW5lb3VzbHkgaW4gc3BsaXQgb3IgbWlycm9yIG1vZGUsIHNvIHBvcnRfbnVtIGNv dW50cyBob3cNCj4+ICsJICogbWFueSBvZiBNSVBJMC9NSVBJMSBoYXZlIGFuIGVuZHBvaW50IHdp cmVkIHVwLiBUaGlzIGRyaXZlciBvbmx5DQo+PiArCSAqIHdpcmVzIHVwIGEgc2luZ2xlIHNvdXJj ZSBwYWQsIHNvIGxhbmUvYnVzLXR5cGUgY29uZmlndXJhdGlvbiBpcw0KPj4gKwkgKiBwYXJzZWQg ZnJvbSB3aGljaGV2ZXIgb2YgdGhlIHR3byBpcyBmb3VuZCBmaXJzdC4NCj4+ICsJICovDQo+PiAr CWl0NjYyNS0+cG9ydF9udW0gPSAwOw0KPj4gKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgMjsgcG9y dCsrKSB7DQo+PiArCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnRfZXAgPQ0KPj4gKwkJCW9mX2dy YXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKGRldi0+b2Zfbm9kZSwgcG9ydCwgLTEpOw0KPj4gKw0K Pj4gKwkJaWYgKCFwb3J0X2VwKQ0KPj4gKwkJCWNvbnRpbnVlOw0KPj4gKw0KPj4gKwkJaXQ2NjI1 LT5wb3J0X251bSsrOw0KPj4gKwkJaWYgKCFlcCkNCj4+ICsJCQllcCA9IHBvcnRfZXA7DQo+PiAr CQllbHNlDQo+PiArCQkJb2Zfbm9kZV9wdXQocG9ydF9lcCk7DQo+PiArCX0NCj4+ICsNCj4+ICsJ aWYgKCFlcCkgew0KPj4gKwkJaXQ2NjI1LT5wb3J0X251bSA9IDE7DQo+PiArCQlkZXZfZGJnKGRl diwgIm5vIENTSS0yIGVuZHBvaW50IG5vZGUgZm91bmQsIHVzaW5nIGRlZmF1bHQgJXUgQ1NJIGxh bmVzIiwNCj4+ICsJCQlpdDY2MjUtPmNzaV9sYW5lcyk7DQo+PiArCQlyZXR1cm4gMDsNCj4+ICsJ fQ0KPj4gKw0KPj4gKwlyZXQgPSB2NGwyX2Z3bm9kZV9lbmRwb2ludF9hbGxvY19wYXJzZShvZl9m d25vZGVfaGFuZGxlKGVwKSwgJmVuZHBvaW50KTsNCj4+ICsJb2Zfbm9kZV9wdXQoZXApOw0KPj4g KwlpZiAocmV0KSB7DQo+PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwYXJzZSBlbmRwb2lu dDogJWQiLCByZXQpOw0KPj4gKwkJcmV0dXJuIHJldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAo ZW5kcG9pbnQuYnVzX3R5cGUgIT0gVjRMMl9NQlVTX0NTSTJfRFBIWSAmJg0KPj4gKwkgICAgZW5k cG9pbnQuYnVzX3R5cGUgIT0gVjRMMl9NQlVTX0NTSTJfQ1BIWSkgew0KPj4gKwkJZGV2X2Vycihk ZXYsICJ1bnN1cHBvcnRlZCBidXMgdHlwZSAlZCwgZXhwZWN0ZWQgQ1NJLTIgRC1QSFkgb3IgQy1Q SFkiLA0KPj4gKwkJCWVuZHBvaW50LmJ1c190eXBlKTsNCj4+ICsJCXY0bDJfZndub2RlX2VuZHBv aW50X2ZyZWUoJmVuZHBvaW50KTsNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKwl9DQo+PiAr DQo+PiArCWlmIChlbmRwb2ludC5idXNfdHlwZSA9PSBWNEwyX01CVVNfQ1NJMl9DUEhZICYmDQo+ PiArCSAgICBpdDY2MjUtPmNoaXBfdHlwZSAhPSBJVDY2MjZfQ0hJUCkgew0KPj4gKwkJZGV2X2Vy cihkZXYsICJJVDY2MjUgZG9lcyBub3Qgc3VwcG9ydCBDLVBIWSwgb25seSBJVDY2MjYgZG9lcyIp Ow0KPj4gKwkJdjRsMl9md25vZGVfZW5kcG9pbnRfZnJlZSgmZW5kcG9pbnQpOw0KPj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ICsNCj4+ICsJbWF4X2xhbmVzID0gKGVuZHBvaW50LmJ1 c190eXBlID09IFY0TDJfTUJVU19DU0kyX0NQSFkpID8gMyA6IDQ7DQo+PiArDQo+PiArCWlmIChl bmRwb2ludC5idXMubWlwaV9jc2kyLm51bV9kYXRhX2xhbmVzID09IDAgfHwNCj4+ICsJICAgIGVu ZHBvaW50LmJ1cy5taXBpX2NzaTIubnVtX2RhdGFfbGFuZXMgPiBtYXhfbGFuZXMpIHsNCj4+ICsJ CWRldl9lcnIoZGV2LA0KPj4gKwkJCSJpbnZhbGlkIG51bWJlciBvZiBDU0kgZGF0YSBsYW5lczog JXUgKG1heCAldSBmb3IgdGhpcyBidXMgdHlwZSkiLA0KPj4gKwkJCWVuZHBvaW50LmJ1cy5taXBp X2NzaTIubnVtX2RhdGFfbGFuZXMsIG1heF9sYW5lcyk7DQo+PiArCQl2NGwyX2Z3bm9kZV9lbmRw b2ludF9mcmVlKCZlbmRwb2ludCk7DQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsJfQ0KPj4g Kw0KPj4gKwlpdDY2MjUtPmNzaV9sYW5lcyA9IGVuZHBvaW50LmJ1cy5taXBpX2NzaTIubnVtX2Rh dGFfbGFuZXM7DQo+PiArCWl0NjYyNS0+YnVzX3R5cGUgPSBlbmRwb2ludC5idXNfdHlwZTsNCj4+ ICsJdjRsMl9md25vZGVfZW5kcG9pbnRfZnJlZSgmZW5kcG9pbnQpOw0KPj4gKw0KPj4gKwlyZXR1 cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpdDY2MjVfcGFyc2VfZHQoc3RydWN0 IGl0NjYyNSAqaXQ2NjI1KQ0KPj4gK3sNCj4+ICsJcmV0dXJuIGl0NjYyNV9wYXJzZV9lbmRwb2lu dChpdDY2MjUpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGl0NjYyNV9pbml0X3Y0bDJf c3ViZGV2KHN0cnVjdCBpdDY2MjUgKml0NjYyNSkNCj4+ICt7DQo+PiArCXN0cnVjdCB2NGwyX3N1 YmRldiAqc2QgPSAmaXQ2NjI1LT5zZDsNCj4+ICsJaW50IGVycjsNCj4+ICsNCj4+ICsJc2QtPmRl diA9IGl0NjYyNS0+ZGV2Ow0KPj4gKw0KPj4gKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgaXQ2 NjI1LT5pMmNfY2xpZW50LCAmaXQ2NjI1X29wcyk7DQo+PiArCXNkLT5mbGFncyB8PSBWNEwyX1NV QkRFVl9GTF9IQVNfREVWTk9ERSB8IFY0TDJfU1VCREVWX0ZMX0hBU19FVkVOVFM7DQo+PiArCWlm IChpdDY2MjVfdjRsMl9pbml0X2NvbnRyb2xzKHNkKSkgew0KPj4gKwkJZGV2X2VycihpdDY2MjUt PmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHY0bDIgY29udHJvbHMiKTsNCj4+ICsJCXJldHVy biAtRU5PTUVNOw0KPj4gKwl9DQo+PiArDQo+PiArCWl0NjYyNS0+cGFkLmZsYWdzID0gTUVESUFf UEFEX0ZMX1NPVVJDRTsNCj4+ICsJc2QtPmVudGl0eS5mdW5jdGlvbiA9IE1FRElBX0VOVF9GX0NB TV9TRU5TT1I7DQo+PiArCWVyciA9IG1lZGlhX2VudGl0eV9wYWRzX2luaXQoJnNkLT5lbnRpdHks IDEsICZpdDY2MjUtPnBhZCk7DQo+PiArCWlmIChlcnIgPCAwKSB7DQo+PiArCQlkZXZfZXJyKGl0 NjYyNS0+ZGV2LCAiJXMgJWQgZXJyPSVkIiwgX19mdW5jX18sIF9fTElORV9fLCBlcnIpOw0KPj4g KwkJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZShzZC0+Y3RybF9oYW5kbGVyKTsNCj4+ICsJCXJldHVy biBlcnI7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgaXQ2NjI1X2NoZWNrX2RldmljZShzdHJ1Y3QgaXQ2NjI1ICppdDY2MjUpDQo+PiAr ew0KPj4gKwlzdGF0aWMgY29uc3QgdTggY2hpcF9pZHNbXVsyXSA9IHsNCj4+ICsJCXsgMHg2Niwg MHgyNSB9LA0KPj4gKwkJeyAweDY2LCAweDI2IH0sDQo+PiArCX07DQo+PiArCWludCBjaGlwX2lk MCwgY2hpcF9pZDE7DQo+PiArDQo+PiArCWNoaXBfaWQwID0gaXQ2NjI1X3JlYWRfYnl0ZShpdDY2 MjUsIFJFR19DSElQX0lEXzApOw0KPj4gKwljaGlwX2lkMSA9IGl0NjYyNV9yZWFkX2J5dGUoaXQ2 NjI1LCBSRUdfQ0hJUF9JRF8xKTsNCj4+ICsJaWYgKGNoaXBfaWQwICE9IGNoaXBfaWRzW2l0NjYy NS0+Y2hpcF90eXBlXVswXSB8fA0KPj4gKwkgICAgY2hpcF9pZDEgIT0gY2hpcF9pZHNbaXQ2NjI1 LT5jaGlwX3R5cGVdWzFdKSB7DQo+PiArCQlkZXZfZXJyKGl0NjYyNS0+ZGV2LA0KPj4gKwkJCSJj aGlwIElEIG1pc21hdGNoOiBnb3QgMHglMDJ4JTAyeCwgZXhwZWN0ZWQgMHglMDJ4JTAyeCIsDQo+ PiArCQkJY2hpcF9pZDAsIGNoaXBfaWQxLA0KPj4gKwkJCWNoaXBfaWRzW2l0NjYyNS0+Y2hpcF90 eXBlXVswXSwNCj4+ICsJCQljaGlwX2lkc1tpdDY2MjUtPmNoaXBfdHlwZV1bMV0pOw0KPj4gKwkJ cmV0dXJuIC1FTk9ERVY7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4g Kw0KPj4gK3N0YXRpYyBpbnQgaXQ2NjI1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQp DQo+PiArew0KPj4gKwlzdHJ1Y3QgaXQ2NjI1ICppdDY2MjU7DQo+PiArCXN0cnVjdCB2NGwyX3N1 YmRldiAqc2Q7DQo+PiArCWludCBlcnI7DQo+PiArDQo+PiArCWlmICghaTJjX2NoZWNrX2Z1bmN0 aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQ0KPj4g KwkJcmV0dXJuIC1FSU87DQo+PiArDQo+PiArCWl0NjYyNSA9IGRldm1fa3phbGxvYygmY2xpZW50 LT5kZXYsIHNpemVvZihzdHJ1Y3QgaXQ2NjI1KSwgR0ZQX0tFUk5FTCk7DQo+PiArCWlmICghaXQ2 NjI1KQ0KPj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+PiArDQo+PiArCWl0NjYyNS0+Y2hpcF90eXBl ID0gKHVpbnRwdHJfdClpMmNfZ2V0X21hdGNoX2RhdGEoY2xpZW50KTsNCj4+ICsNCj4+ICsJaXQ2 NjI1LT5yZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoJmNsaWVudC0+ZGV2LCAi cmVzZXQiLA0KPj4gKwkJCQkJCSAgICAgR1BJT0RfT1VUX0hJR0gpOw0KPj4gKwlpZiAoSVNfRVJS KGl0NjYyNS0+cmVzZXRfZ3BpbykpDQo+PiArCQlyZXR1cm4gUFRSX0VSUihpdDY2MjUtPnJlc2V0 X2dwaW8pOw0KPj4gKw0KPj4gKwlpZiAoaXQ2NjI1LT5yZXNldF9ncGlvKSB7DQo+PiArCQl1c2xl ZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQo+PiArCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaXQ2 NjI1LT5yZXNldF9ncGlvLCAwKTsNCj4+ICsJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTEwMDApOw0K Pj4gKwl9DQo+PiArDQo+PiArCWVyciA9IGl0NjYyNV9yZWdtYXBfaTJjX2luaXQoY2xpZW50LCBp dDY2MjUpOw0KPj4gKwlpZiAoZXJyKQ0KPj4gKwkJcmV0dXJuIGVycjsNCj4+ICsNCj4+ICsJZXJy ID0gaXQ2NjI1X2NoZWNrX2RldmljZShpdDY2MjUpOw0KPj4gKwlpZiAoZXJyKQ0KPj4gKwkJcmV0 dXJuIGVycjsNCj4+ICsNCj4+ICsJaXQ2NjI1X2luaXRfZGF0YShpdDY2MjUpOw0KPj4gKw0KPj4g KwllcnIgPSBpdDY2MjVfcGFyc2VfZHQoaXQ2NjI1KTsNCj4+ICsJaWYgKGVycikNCj4+ICsJCXJl dHVybiBlcnI7DQo+PiArDQo+PiArCW11dGV4X2luaXQoJml0NjYyNS0+aXQ2NjI1X2xvY2spOw0K Pj4gKwlJTklUX0RFTEFZRURfV09SSygmaXQ2NjI1LT5ocGRfZGVsYXllZF93b3JrLCBpdDY2MjVf aHBkX2RlbGF5ZWRfd29yayk7DQo+PiArCUlOSVRfV09SSygmaXQ2NjI1LT5wb2xsaW5nX3dvcmss IGl0NjYyNV9wb2xsaW5nX3dvcmspOw0KPj4gKw0KPj4gKwlpZiAoY2xpZW50LT5pcnEpIHsNCj4+ ICsJCWVyciA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJmNsaWVudC0+ZGV2LCBjbGllbnQt PmlycSwNCj4+ICsJCQkJCQlOVUxMLCBpdDY2MjVfaXJxX2hhbmRsZXIsDQo+PiArCQkJCQkJSVJR Rl9UUklHR0VSX0xPVyB8DQo+PiArCQkJCQkJSVJRRl9PTkVTSE9UIHwNCj4+ICsJCQkJCQlJUlFG X05PX0FVVE9FTiwNCj4+ICsJCQkJCQkiaXQ2NjI1IiwgaXQ2NjI1KTsNCj4+ICsJCWlmIChlcnIp DQo+PiArCQkJcmV0dXJuIGVycjsNCj4+ICsJfSBlbHNlIHsNCj4+ICsJCWRldl9pbmZvKGl0NjYy NS0+ZGV2LCAibm8gSVJRLCBmYWxsaW5nIGJhY2sgdG8gcG9sbGluZyIpOw0KPj4gKwkJdGltZXJf c2V0dXAoJml0NjYyNS0+dGltZXIsIGl0NjYyNV9pcnFfcG9sbF90aW1lciwgMCk7DQo+PiArCX0N Cj4+ICsNCj4+ICsJc2QgPSAmaXQ2NjI1LT5zZDsNCj4+ICsJZXJyID0gaXQ2NjI1X2luaXRfdjRs Ml9zdWJkZXYoaXQ2NjI1KTsNCj4+ICsJaWYgKGVycikNCj4+ICsJCWdvdG8gZXJyX2NsZWFuX3dv cmtfcXVldWVzOw0KPj4gKw0KPj4gKwllcnIgPSB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cChzZC0+ Y3RybF9oYW5kbGVyKTsNCj4+ICsJaWYgKGVycikNCj4+ICsJCWdvdG8gZXJyX2NsZWFuX2hkbDsN Cj4+ICsNCj4+ICsJaXQ2NjI1LT5jZWNfYWRhcCA9IGNlY19hbGxvY2F0ZV9hZGFwdGVyKCZpdDY2 MjVfY2VjX2FkYXBfb3BzLA0KPj4gKwkJCQkJCWl0NjYyNSwgZGV2X25hbWUoaXQ2NjI1LT5kZXYp LA0KPj4gKwkJCQkJCUNFQ19DQVBfREVGQVVMVFMgfA0KPj4gKwkJCQkJCUNFQ19DQVBfTU9OSVRP Ul9BTEwgfA0KPj4gKwkJCQkJCUNFQ19DQVBfUEhZU19BRERSLA0KPj4gKwkJCQkJCUNFQ19NQVhf TE9HX0FERFJTKTsNCj4+ICsJaWYgKElTX0VSUihpdDY2MjUtPmNlY19hZGFwKSkgew0KPj4gKwkJ ZXJyID0gUFRSX0VSUihpdDY2MjUtPmNlY19hZGFwKTsNCj4+ICsJCWRldl9lcnIoaXQ2NjI1LT5k ZXYsICIlcyAlZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7DQo+PiArCQlnb3RvIGVycl9jbGVhbl9o ZGw7DQo+PiArCX0NCj4+ICsNCj4+ICsJZXJyID0gY2VjX3JlZ2lzdGVyX2FkYXB0ZXIoaXQ2NjI1 LT5jZWNfYWRhcCwgJmNsaWVudC0+ZGV2KTsNCj4+ICsJaWYgKGVyciA8IDApIHsNCj4+ICsJCWRl dl9lcnIoaXQ2NjI1LT5kZXYsICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSBjZWMgZGV2aWNl IiwgX19mdW5jX18pOw0KPj4gKwkJY2VjX2RlbGV0ZV9hZGFwdGVyKGl0NjYyNS0+Y2VjX2FkYXAp Ow0KPj4gKwkJaXQ2NjI1LT5jZWNfYWRhcCA9IE5VTEw7DQo+PiArCQlnb3RvIGVycl9jbGVhbl9o ZGw7DQo+PiArCX0NCj4+ICsNCj4+ICsJaXQ2NjI1X2RlYnVnZnNfaW5pdChpdDY2MjUsIGNsaWVu dCk7DQo+PiArDQo+PiArCWl0NjYyNV9pbml0aWFsX3NldHVwKGl0NjYyNSk7DQo+PiArCWl0NjYy NV92NGwyX3NkX2N0cmxfdXBkYXRlKHNkKTsNCj4+ICsNCj4+ICsJZXJyID0gdjRsMl9hc3luY19y ZWdpc3Rlcl9zdWJkZXYoc2QpOw0KPj4gKwlpZiAoZXJyIDwgMCkgew0KPj4gKwkJZGV2X2Vycihp dDY2MjUtPmRldiwgIiVzICVkIGVycj0lZCIsIF9fZnVuY19fLCBfX0xJTkVfXywgZXJyKTsNCj4+ ICsJCWdvdG8gZXJyX2NsZWFuX2RlYnVnZnM7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKGNsaWVu dC0+aXJxKQ0KPj4gKwkJZW5hYmxlX2lycShjbGllbnQtPmlycSk7DQo+PiArCWVsc2UNCj4+ICsJ CW1vZF90aW1lcigmaXQ2NjI1LT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUE9M TF9JTlRFUlZBTF9NUykpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICsNCj4+ICtlcnJfY2xl YW5fZGVidWdmczoNCj4+ICsJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGl0NjYyNS0+ZGVidWdm c19kaXIpOw0KPj4gKwljZWNfdW5yZWdpc3Rlcl9hZGFwdGVyKGl0NjYyNS0+Y2VjX2FkYXApOw0K Pj4gK2Vycl9jbGVhbl9oZGw6DQo+PiArCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZzZC0+ZW50aXR5 KTsNCj4+ICsJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmaXQ2NjI1LT5oZGwpOw0KPj4gKw0KPj4g K2Vycl9jbGVhbl93b3JrX3F1ZXVlczoNCj4+ICsJaWYgKCFjbGllbnQtPmlycSkNCj4+ICsJCXRp bWVyX3NodXRkb3duX3N5bmMoJml0NjYyNS0+dGltZXIpOw0KPj4gKwljYW5jZWxfd29ya19zeW5j KCZpdDY2MjUtPnBvbGxpbmdfd29yayk7DQo+PiArCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygm aXQ2NjI1LT5ocGRfZGVsYXllZF93b3JrKTsNCj4+ICsJbXV0ZXhfZGVzdHJveSgmaXQ2NjI1LT5p dDY2MjVfbG9jayk7DQo+PiArCXJldHVybiBlcnI7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2 b2lkIGl0NjYyNV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCj4+ICt7DQo+PiAr CXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCj4+ ICsJc3RydWN0IGl0NjYyNSAqaXQ2NjI1ID0gc2RfdG9fNjYyNShzZCk7DQo+PiArDQo+PiArCXY0 bDJfYXN5bmNfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOw0KPj4gKwl2NGwyX2RldmljZV91bnJlZ2lz dGVyX3N1YmRldihzZCk7DQo+PiArDQo+PiArCWlmIChjbGllbnQtPmlycSkNCj4+ICsJCWRpc2Fi bGVfaXJxKGNsaWVudC0+aXJxKTsNCj4+ICsJZWxzZQ0KPj4gKwkJdGltZXJfc2h1dGRvd25fc3lu YygmaXQ2NjI1LT50aW1lcik7DQo+PiArDQo+PiArCWNhbmNlbF93b3JrX3N5bmMoJml0NjYyNS0+ cG9sbGluZ193b3JrKTsNCj4+ICsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpdDY2MjUtPmhw ZF9kZWxheWVkX3dvcmspOw0KPj4gKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoaXQ2NjI1LT5k ZWJ1Z2ZzX2Rpcik7DQo+PiArCWNlY191bnJlZ2lzdGVyX2FkYXB0ZXIoaXQ2NjI1LT5jZWNfYWRh cCk7DQo+PiArCW11dGV4X2Rlc3Ryb3koJml0NjYyNS0+aXQ2NjI1X2xvY2spOw0KPj4gKwltZWRp YV9lbnRpdHlfY2xlYW51cCgmc2QtPmVudGl0eSk7DQo+PiArCXY0bDJfY3RybF9oYW5kbGVyX2Zy ZWUoJml0NjYyNS0+aGRsKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBp MmNfZGV2aWNlX2lkIGl0NjYyNV9pZFtdID0gew0KPj4gKwl7IC5uYW1lID0gIml0NjYyNSIsIC5k cml2ZXJfZGF0YSA9IElUNjYyNV9DSElQIH0sDQo+PiArCXsgLm5hbWUgPSAiaXQ2NjI2IiwgLmRy aXZlcl9kYXRhID0gSVQ2NjI2X0NISVAgfSwNCj4+ICsJe30NCj4+ICt9Ow0KPj4gK01PRFVMRV9E RVZJQ0VfVEFCTEUoaTJjLCBpdDY2MjVfaWQpOw0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIGl0NjYyNV9vZl9tYXRjaFtdID0gew0KPj4gKwl7IC5jb21wYXRpYmxl ID0gIml0ZSxpdDY2MjUiLCAuZGF0YSA9ICh2b2lkICopSVQ2NjI1X0NISVAgfSwNCj4+ICsJeyAu Y29tcGF0aWJsZSA9ICJpdGUsaXQ2NjI2IiwgLmRhdGEgPSAodm9pZCAqKUlUNjYyNl9DSElQIH0s DQo+PiArCXt9LA0KPj4gK307DQo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaXQ2NjI1X29m X21hdGNoKTsNCj4+ICsNCj4+ICtzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXQ2NjI1X2RyaXZl ciA9IHsNCj4+ICsJLmRyaXZlciA9IHsNCj4+ICsJCS5uYW1lID0gIml0NjYyNSIsDQo+PiArCQku b2ZfbWF0Y2hfdGFibGUgPSBpdDY2MjVfb2ZfbWF0Y2gsDQo+PiArCX0sDQo+PiArCS5wcm9iZSA9 IGl0NjYyNV9wcm9iZSwNCj4+ICsJLnJlbW92ZSA9IGl0NjYyNV9yZW1vdmUsDQo+PiArCS5pZF90 YWJsZSA9IGl0NjYyNV9pZCwNCj4+ICt9Ow0KPj4gK21vZHVsZV9pMmNfZHJpdmVyKGl0NjYyNV9k cml2ZXIpOw0KPj4gKw0KPj4gK01PRFVMRV9ERVNDUklQVElPTigiaVRFIGl0NjYyNS9pdDY2MjYg SERNSSB0byBNSVBJIENTSSBicmlkZ2UgZHJpdmVyIik7DQo+PiArTU9EVUxFX0FVVEhPUigiSGVy bWVzIFd1IDxIZXJtZXMud3VAaXRlLmNvbS50dz4iKTsNCj4+ICtNT0RVTEVfTElDRU5TRSgiR1BM Iik7DQo+PiANCj4NCj5SZWdhcmRzLA0KPg0KPglIYW5zDQo+DQpUaGFua3MsDQpIZXJtZXMNCg==