From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,5/5] usb:cdns3 Add Cadence USB3 DRD Driver From: Chunfeng Yun Message-Id: <1546069281.32173.186.camel@mhfsdcap03> Date: Sat, 29 Dec 2018 15:41:21 +0800 To: Pawel Laszczak Cc: devicetree@vger.kernel.org, gregkh@linuxfoundation.org, mark.rutland@arm.com, linux-usb@vger.kernel.org, hdegoede@redhat.com, heikki.krogerus@linux.intel.com, andy.shevchenko@gmail.com, robh+dt@kernel.org, rogerq@ti.com, linux-kernel@vger.kernel.org, adouglas@cadence.com, jbergsagel@ti.com, nsekhar@ti.com, nm@ti.com, sureshp@cadence.com, peter.chen@nxp.com, pjez@cadence.com, kurahul@cadence.com List-ID: aGksCk9uIFN1biwgMjAxOC0xMi0yMyBhdCAxNToxMyArMDAwMCwgUGF3ZWwgTGFzemN6YWsgd3Jv dGU6Cj4gVGhpcyBwYXRjaCBpbnRyb2R1Y2UgbmV3IENhZGVuY2UgVVNCU1MgRFJEIGRyaXZlcgo+ IHRvIGxpbnV4IGtlcm5lbC4KCjwuLi4+Cgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5z My9jZG5zMy1wY2ktd3JhcC5jIGIvZHJpdmVycy91c2IvY2RuczMvY2RuczMtcGNpLXdyYXAuYwo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lOTMxNzljNDVlY2UK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy91c2IvY2RuczMvY2RuczMtcGNpLXdyYXAu Ywo+IEBAIC0wLDAgKzEsMTU3IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wCj4gKy8qCj4gKyAqIENhZGVuY2UgVVNCU1MgUENJIEdsdWUgZHJpdmVyCj4gKyAqCj4gKyAq IENvcHlyaWdodCAoQykgMjAxOCBDYWRlbmNlLgo+ICsgKgo+ICsgKiBBdXRob3I6IFBhd2VsIExh c3pjemFrIDxwYXdlbGxAY2FkZW5jZS5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9wY2kuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArCj4g K3N0cnVjdCBjZG5zM193cmFwIHsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2 Owo+ICsJc3RydWN0IHBjaV9kZXYgKmhnX2RldjsKPiArCXN0cnVjdCByZXNvdXJjZSBkZXZfcmVz WzRdOwo+ICt9Owo+ICsKPiArc3RydWN0IGNkbnMzX3dyYXAgd3JhcDsKPiArCj4gKyNkZWZpbmUg UkVTX0lSUV9JRAkJMAo+ICsjZGVmaW5lIFJFU19IT1NUX0lECQkxCj4gKyNkZWZpbmUgUkVTX0RF Vl9JRAkJMgo+ICsjZGVmaW5lIFJFU19EUkRfSUQJCTMKPiArCj4gKyNkZWZpbmUgUENJX0JBUl9I T1NUCQkwCj4gKyNkZWZpbmUgUENJX0JBUl9ERVYJCTIKPiArI2RlZmluZSBQQ0lfQkFSX09URwkJ NAo+ICsKPiArI2RlZmluZSBQQ0lfREVWX0ZOX0hPU1RfREVWSUNFCTAKPiArI2RlZmluZSBQQ0lf REVWX0ZOX09URwkJMQo+ICsKPiArI2RlZmluZSBQQ0lfRFJJVkVSX05BTUUJCSJjZG5zMy1wY2kt dXNic3MiCj4gKyNkZWZpbmUgUExBVF9EUklWRVJfTkFNRQkiY2Rucy11c2IzIgo+ICsKPiArI2Rl ZmluZSBDRE5TX1ZFTkRPUl9JRCAweDE3Y2QKPiArI2RlZmluZSBDRE5TX0RFVklDRV9JRCAweDAx MDAKPiArCj4gKy8qKgo+ICsgKiBjZG5zM19wY2lfcHJvYmUgLSBQcm9iZSBmdW5jdGlvbiBmb3Ig Q2FkZW5jZSBVU0Igd3JhcHBlciBkcml2ZXIKPiArICogQHBkZXY6IHBsYXRmb3JtIGRldmljZSBv YmplY3QKPiArICogQGlkOiBwY2kgZGV2aWNlIGlkCj4gKyAqCj4gKyAqIFJldHVybnMgMCBvbiBz dWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubwo+ICsgKi8KPiArc3RhdGljIGludCBjZG5z M19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCj4gKwkJCSAgIGNvbnN0IHN0cnVjdCBw Y2lfZGV2aWNlX2lkICppZCkKPiArewo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBs YXRfaW5mbzsKPiArCXN0cnVjdCBjZG5zM193cmFwICp3cmFwOwo+ICsJc3RydWN0IHJlc291cmNl ICpyZXM7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCS8qCj4gKwkgKiBmb3IgR0FER0VUL0hPU1QgUENJ IChkZXZmbikgZnVuY3Rpb24gbnVtYmVyIGlzIDAsCj4gKwkgKiBmb3IgT1RHIFBDSSAoZGV2Zm4p IGZ1bmN0aW9uIG51bWJlciBpcyAxCj4gKwkgKi8KPiArCWlmICghaWQgfHwgcGRldi0+ZGV2Zm4g IT0gUENJX0RFVl9GTl9IT1NUX0RFVklDRSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwll cnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiRW5hYmxpbmcgUENJIGRldmljZSBoYXMgZmFpbGVkICVkXG4iLCBlcnIp Owo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJcGNpX3NldF9tYXN0ZXIocGRldik7Cj4g Kwl3cmFwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqd3JhcCksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCF3cmFwKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRv IGFsbG9jYXRlIG1lbW9yeVxuIik7Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJ LyogZnVuY3Rpb24gMDogaG9zdChCQVJfMCkgKyBkZXZpY2UoQkFSXzEpICsgb3RnKEJBUl8yKSku ICovCj4gKwltZW1zZXQod3JhcC0+ZGV2X3JlcywgMHgwMCwKPiArCSAgICAgICBzaXplb2Yoc3Ry dWN0IHJlc291cmNlKSAqIEFSUkFZX1NJWkUod3JhcC0+ZGV2X3JlcykpOwo+ICsJZGV2X2RiZygm cGRldi0+ZGV2LCAiSW5pdGlhbGl6ZSBEZXZpY2UgcmVzb3VyY2VzXG4iKTsKPiArCXJlcyA9IHdy YXAtPmRldl9yZXM7Cj4gKwo+ICsJcmVzW1JFU19ERVZfSURdLnN0YXJ0ID0gcGNpX3Jlc291cmNl X3N0YXJ0KHBkZXYsIFBDSV9CQVJfREVWKTsKPiArCXJlc1tSRVNfREVWX0lEXS5lbmQgPSAgIHBj aV9yZXNvdXJjZV9lbmQocGRldiwgUENJX0JBUl9ERVYpOwo+ICsJcmVzW1JFU19ERVZfSURdLm5h bWUgPSAiY2RuczMtZGV2LXJlZ3MiOwo+ICsJcmVzW1JFU19ERVZfSURdLmZsYWdzID0gSU9SRVNP VVJDRV9NRU07Cj4gKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJVU0JTUy1ERVYgcGh5c2ljYWwgYmFz ZSBhZGRyOiAlcGFcbiIsCj4gKwkJJnJlc1tSRVNfREVWX0lEXS5zdGFydCk7Cj4gKwo+ICsJcmVz W1JFU19IT1NUX0lEXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBQQ0lfQkFSX0hP U1QpOwo+ICsJcmVzW1JFU19IT1NUX0lEXS5lbmQgPSBwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIFBD SV9CQVJfSE9TVCk7Cj4gKwlyZXNbUkVTX0hPU1RfSURdLm5hbWUgPSAiY2RuczMteGhjaS1yZWdz IjsKPiArCXJlc1tSRVNfSE9TVF9JRF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKPiArCWRldl9k YmcoJnBkZXYtPmRldiwgIlVTQlNTLVhIQ0kgcGh5c2ljYWwgYmFzZSBhZGRyOiAlcGFcbiIsCj4g KwkJJnJlc1tSRVNfSE9TVF9JRF0uc3RhcnQpOwo+ICsKPiArCXJlc1tSRVNfRFJEX0lEXS5zdGFy dCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBQQ0lfQkFSX09URyk7Cj4gKwlyZXNbUkVTX0RS RF9JRF0uZW5kID0gICBwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIFBDSV9CQVJfT1RHKTsKPiArCXJl c1tSRVNfRFJEX0lEXS5uYW1lID0gImNkbnMzLW90ZyI7Cj4gKwlyZXNbUkVTX0RSRF9JRF0uZmxh Z3MgPSBJT1JFU09VUkNFX01FTTsKPiArCWRldl9kYmcoJnBkZXYtPmRldiwgIlVTQlNTLURSRCBw aHlzaWNhbCBiYXNlIGFkZHI6ICVwYVxuIiwKPiArCQkmcmVzW1JFU19EUkRfSURdLnN0YXJ0KTsK PiArCj4gKwkvKiBJbnRlcnJ1cHQgY29tbW9uIGZvciBib3RoIGRldmljZSBhbmQgWEhDSSAqLwo+ ICsJd3JhcC0+ZGV2X3Jlc1tSRVNfSVJRX0lEXS5zdGFydCA9IHBkZXYtPmlycTsKPiArCXdyYXAt PmRldl9yZXNbUkVTX0lSUV9JRF0ubmFtZSA9ICJjZG5zMy1pcnEiOwo+ICsJd3JhcC0+ZGV2X3Jl c1tSRVNfSVJRX0lEXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJROwo+ICsKPiArCS8qIHNldCB1cCBw bGF0Zm9ybSBkZXZpY2UgaW5mbyAqLwo+ICsJbWVtc2V0KCZwbGF0X2luZm8sIDAsIHNpemVvZihw bGF0X2luZm8pKTsKPiArCXBsYXRfaW5mby5wYXJlbnQgPSAmcGRldi0+ZGV2Owo+ICsJcGxhdF9p bmZvLmZ3bm9kZSA9IHBkZXYtPmRldi5md25vZGU7Cj4gKwlwbGF0X2luZm8ubmFtZSA9IFBMQVRf RFJJVkVSX05BTUU7Cj4gKwlwbGF0X2luZm8uaWQgPSBwZGV2LT5kZXZmbjsKPiArCXBsYXRfaW5m by5yZXMgPSB3cmFwLT5kZXZfcmVzOwo+ICsJcGxhdF9pbmZvLm51bV9yZXMgPSBBUlJBWV9TSVpF KHdyYXAtPmRldl9yZXMpOwo+ICsJcGxhdF9pbmZvLmRtYV9tYXNrID0gcGRldi0+ZG1hX21hc2s7 Cj4gKwo+ICsJLyogcmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlICovCj4gKwl3cmFwLT5wbGF0X2Rl diA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKCZwbGF0X2luZm8pOwo+ICsJaWYgKElT X0VSUih3cmFwLT5wbGF0X2RldikpIHsKPiArCQllcnIgPSBQVFJfRVJSKHdyYXAtPnBsYXRfZGV2 KTsKPiArCQlyZXR1cm4gZXJyOwo+ICsJfQpyZXR1cm4gUFRSX0VSUih3cmFwLT5wbGF0X2Rldik7 Cgo+ICsKPiArCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3cmFwKTsKPiArCj4gKwlyZXR1cm4gZXJy Owo+ICt9Cj4gKwo+ICt2b2lkIGNkbnMzX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYp Cj4gK3sKPiArCXN0cnVjdCBjZG5zM193cmFwICp3cmFwID0gKHN0cnVjdCBjZG5zM193cmFwICop cGNpX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsKPiArCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVy KHdyYXAtPnBsYXRfZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2 aWNlX2lkIGNkbnMzX3BjaV9pZHNbXSA9IHsKPiArCXsgUENJX0RFVklDRShDRE5TX1ZFTkRPUl9J RCwgQ0ROU19ERVZJQ0VfSUQpLCB9LAo+ICsJeyAwLCB9Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IHBjaV9kcml2ZXIgY2RuczNfcGNpX2RyaXZlciA9IHsKPiArCS5uYW1lID0gUENJX0RSSVZF Ul9OQU1FLAo+ICsJLmlkX3RhYmxlID0gY2RuczNfcGNpX2lkcywKPiArCS5wcm9iZSA9IGNkbnMz X3BjaV9wcm9iZSwKPiArCS5yZW1vdmUgPSBjZG5zM19wY2lfcmVtb3ZlLAo+ICt9Owo+ICsKPiAr bW9kdWxlX3BjaV9kcml2ZXIoY2RuczNfcGNpX2RyaXZlcik7Cj4gK01PRFVMRV9ERVZJQ0VfVEFC TEUocGNpLCBjZG5zM19wY2lfaWRzKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIlBhd2VsIExhc3pj emFrIDxwYXdlbGxAY2FkZW5jZS5jb20+Iik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJDYWRlbmNlIFVTQlNTIFBDSSB3cmFwcGVyciIpOwo+ICsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvY29yZS5jIGIvZHJpdmVycy91c2IvY2Ru czMvY29yZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmQy NzQ1ODZhY2EzNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9jb3Jl LmMKPiBAQCAtMCwwICsxLDQwNiBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAo+ICsvKgo+ICsgKiBDYWRlbmNlIFVTQlNTIERSRCBEcml2ZXIuCj4gKyAqCj4gKyAqIENv cHlyaWdodCAoQykgMjAxOCBDYWRlbmNlLgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBO WFAKPiArICoKPiArICogQXV0aG9yOiBQZXRlciBDaGVuIDxwZXRlci5jaGVuQG54cC5jb20+Cj4g KyAqICAgICAgICAgUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4KPiArICovCj4g Kwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvaW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvcG1fcnVudGltZS5oPgo+ICsKPiArI2luY2x1ZGUgImdhZGdldC5oIgo+ICsjaW5jbHVkZSAi Y29yZS5oIgo+ICsjaW5jbHVkZSAiaG9zdC1leHBvcnQuaCIKPiArI2luY2x1ZGUgImdhZGdldC1l eHBvcnQuaCIKPiArI2luY2x1ZGUgImRyZC5oIgo+ICsjaW5jbHVkZSAiZGVidWcuaCIKPiArCj4g K3N0YXRpYyBpbmxpbmUKPiArc3RydWN0IGNkbnMzX3JvbGVfZHJpdmVyICpjZG5zM19nZXRfY3Vy cmVudF9yb2xlX2RyaXZlcihzdHJ1Y3QgY2RuczMgKmNkbnMpCj4gK3sKPiArCVdBUk5fT04oY2Ru cy0+cm9sZSA+PSBDRE5TM19ST0xFX0VORCB8fCAhY2Rucy0+cm9sZXNbY2Rucy0+cm9sZV0pOwo+ ICsJcmV0dXJuIGNkbnMtPnJvbGVzW2NkbnMtPnJvbGVdOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIGludCBjZG5zM19yb2xlX3N0YXJ0KHN0cnVjdCBjZG5zMyAqY2RucywgZW51bSBjZG5zM19y b2xlcyByb2xlKQpyZW1vdmUgaW5saW5lCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKFdB Uk5fT04ocm9sZSA+PSBDRE5TM19ST0xFX0VORCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYg KCFjZG5zLT5yb2xlc1tyb2xlXSkKPiArCQlyZXR1cm4gLUVOWElPOwo+ICsKPiArCWlmIChjZG5z LT5yb2xlc1tyb2xlXS0+c3RhdGUgPT0gQ0ROUzNfUk9MRV9TVEFURV9BQ1RJVkUpCj4gKwkJcmV0 dXJuIDA7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmY2Rucy0+bXV0ZXgpOwo+ICsJY2Rucy0+cm9sZSA9 IHJvbGU7Cj4gKwlyZXQgPSBjZG5zLT5yb2xlc1tyb2xlXS0+c3RhcnQoY2Rucyk7Cj4gKwlpZiAo IXJldCkKPiArCQljZG5zLT5yb2xlc1tyb2xlXS0+c3RhdGUgPSBDRE5TM19ST0xFX1NUQVRFX0FD VElWRTsKPiArCW11dGV4X3VubG9jaygmY2Rucy0+bXV0ZXgpOwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArdm9pZCBjZG5zM19yb2xlX3N0b3Aoc3RydWN0IGNkbnMzICpjZG5zKQo+ICt7Cj4g KwllbnVtIGNkbnMzX3JvbGVzIHJvbGUgPSBjZG5zLT5yb2xlOwo+ICsKPiArCWlmIChyb2xlID49 IENETlMzX1JPTEVfRU5EKSB7Cj4gKwkJV0FSTl9PTihyb2xlID4gQ0ROUzNfUk9MRV9FTkQpOwo+ ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlpZiAoY2Rucy0+cm9sZXNbcm9sZV0tPnN0YXRlID09 IENETlMzX1JPTEVfU1RBVEVfSU5BQ1RJVkUpCj4gKwkJcmV0dXJuOwo+ICsKPiArCW11dGV4X2xv Y2soJmNkbnMtPm11dGV4KTsKPiArCWNkbnMtPnJvbGVzW3JvbGVdLT5zdG9wKGNkbnMpOwo+ICsJ Y2Rucy0+cm9sZXNbcm9sZV0tPnN0YXRlID0gQ0ROUzNfUk9MRV9TVEFURV9JTkFDVElWRTsKPiAr CW11dGV4X3VubG9jaygmY2Rucy0+bXV0ZXgpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBjZG5zLT5y b2xlIGdldHMgZnJvbSBjZG5zM19nZXRfaW5pdGlhbF9yb2xlLCBhbmQgdGhpcyBBUEkgdGVsbHMg cm9sZSBhdCB0aGUKPiArICogcnVudGltZS4KPiArICogSWYgYm90aCByb2xlcyBhcmUgc3VwcG9y dGVkLCB0aGUgcm9sZSBpcyBzZWxlY3RlZCBiYXNlZCBvbiB2YnVzL2lkLgo+ICsgKiBJdCBjb3Vs ZCBiZSByZWFkIGZyb20gT1RHIHJlZ2lzdGVyIG9yIGV4dGVybmFsIGNvbm5lY3Rvci4KPiArICog SWYgb25seSBzaW5nbGUgcm9sZSBpcyBzdXBwb3J0ZWQsIG9ubHkgb25lIHJvbGUgc3RydWN0dXJl Cj4gKyAqIGlzIGFsbG9jYXRlZCwgY2Rucy0+cm9sZXNbQ0ROUzNfUk9MRV9IT1NUXSBvciBjZG5z LT5yb2xlc1tDRE5TM19ST0xFX0dBREdFVF0uCj4gKyAqLwo+ICtzdGF0aWMgZW51bSBjZG5zM19y b2xlcyBjZG5zM19nZXRfaW5pdGlhbF9yb2xlKHN0cnVjdCBjZG5zMyAqY2RucykKPiArewo+ICsJ aWYgKGNkbnMtPnJvbGVzW0NETlMzX1JPTEVfSE9TVF0gJiYgY2Rucy0+cm9sZXNbQ0ROUzNfUk9M RV9HQURHRVRdKSB7Cj4gKwkJaWYgKGNkbnMzX2lzX2hvc3QoY2RucykpCj4gKwkJCXJldHVybiBD RE5TM19ST0xFX0hPU1Q7Cj4gKwkJaWYgKGNkbnMzX2lzX2RldmljZShjZG5zKSkKPiArCQkJcmV0 dXJuIENETlMzX1JPTEVfR0FER0VUOwo+ICsJfQo+ICsJcmV0dXJuIGNkbnMtPnJvbGVzW0NETlMz X1JPTEVfSE9TVF0KPiArCQk/IENETlMzX1JPTEVfSE9TVAo+ICsJCTogQ0ROUzNfUk9MRV9HQURH RVQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNkbnMzX2V4aXRfcm9sZXMoc3RydWN0IGNkbnMz ICpjZG5zKQo+ICt7Cj4gKwljZG5zM19yb2xlX3N0b3AoY2Rucyk7Cj4gKwljZG5zM19kcmRfZXhp dChjZG5zKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGNkbnMzX2NvcmVfaW5pdF9yb2xlIC0gaW5p dGlhbGl6ZSByb2xlIG9mIG9wZXJhdGlvbgo+ICsgKiBAY2RuczogUG9pbnRlciB0byBjZG5zMyBz dHJ1Y3R1cmUKPiArICoKPiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0 aXZlIGVycm5vCj4gKyAqLwo+ICtzdGF0aWMgaW50IGNkbnMzX2NvcmVfaW5pdF9yb2xlKHN0cnVj dCBjZG5zMyAqY2RucykKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY2Rucy0+ZGV2Owo+ ICsJZW51bSB1c2JfZHJfbW9kZSBiZXN0X2RyX21vZGU7Cj4gKwllbnVtIHVzYl9kcl9tb2RlIGRy X21vZGU7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlkcl9tb2RlID0gdXNiX2dldF9kcl9tb2Rl KGRldik7Cj4gKwljZG5zLT5yb2xlID0gQ0ROUzNfUk9MRV9FTkQ7Cj4gKwo+ICsJLyoKPiArCSAq IElmIGRyaXZlciBjYW4ndCByZWFkIG1vZGUgYnkgbWVhbnMgb2YgdXNiX2dldF9kcl9tZG9lIGZ1 bmN0aW9uIHRoZW4KPiArCSAqIGNob29zZXMgbW9kZSBhY2NvcmRpbmcgd2l0aCBLZXJuZWwgY29u ZmlndXJhdGlvbi4gVGhpcyBzZXR0aW5nCj4gKwkgKiBjYW4gYmUgcmVzdHJpY3RlZCBsYXRlciBk ZXBlbmRpbmcgb24gc3RyYXAgcGluIGNvbmZpZ3VyYXRpb24uCj4gKwkgKi8KPiArCWlmIChkcl9t b2RlID09IFVTQl9EUl9NT0RFX1VOS05PV04pIHsKPiArCQlpZiAoSVNfRU5BQkxFRChDT05GSUdf VVNCX0NETlMzX0hPU1QpICYmCj4gKwkJICAgIElTX0VOQUJMRUQoQ09ORklHX1VTQl9DRE5TM19H QURHRVQpKQo+ICsJCQlkcl9tb2RlID0gVVNCX0RSX01PREVfT1RHOwo+ICsJCWVsc2UgaWYgKElT X0VOQUJMRUQoQ09ORklHX1VTQl9DRE5TM19IT1NUKSkKPiArCQkJZHJfbW9kZSA9IFVTQl9EUl9N T0RFX0hPU1Q7Cj4gKwkJZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0dBREdF VCkpCj4gKwkJCWRyX21vZGUgPSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOwo+ICsJfQo+ICsKPiAr CWJlc3RfZHJfbW9kZSA9IFVTQl9EUl9NT0RFX09URzsKPiArCj4gKwlpZiAoZHJfbW9kZSA9PSBV U0JfRFJfTU9ERV9PVEcpIHsKPiArCQliZXN0X2RyX21vZGUgPSBjZG5zLT5kcl9tb2RlOwo+ICsJ fSBlbHNlIGlmIChjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX09URykgewo+ICsJCWJlc3Rf ZHJfbW9kZSA9IGRyX21vZGU7Cj4gKwl9IGVsc2UgaWYgKGNkbnMtPmRyX21vZGUgIT0gZHJfbW9k ZSkgewo+ICsJCWRldl9lcnIoZGV2LCAiSW5jb3JyZWN0IERSRCBjb25maWd1cmF0aW9uXG4iKTsK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlkcl9tb2RlID0gYmVzdF9kcl9tb2Rl Owo+ICsKPiArCWlmIChkcl9tb2RlID09IFVTQl9EUl9NT0RFX09URyB8fCBkcl9tb2RlID09IFVT Ql9EUl9NT0RFX0hPU1QpIHsKPiArCQlyZXQgPSBjZG5zM19ob3N0X2luaXQoY2Rucyk7Cj4gKwkJ aWYgKHJldCkgewo+ICsJCQlkZXZfZXJyKGRldiwgIkhvc3QgaW5pdGlhbGl6YXRpb24gZmFpbGVk IHdpdGggJWRcbiIsCj4gKwkJCQlyZXQpOwo+ICsJCQlnb3RvIGVycjsKPiArCQl9Cj4gKwl9Cj4g Kwo+ICsJaWYgKGRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHIHx8IGRyX21vZGUgPT0gVVNCX0RS X01PREVfUEVSSVBIRVJBTCkgewo+ICsJCXJldCA9IGNkbnMzX2dhZGdldF9pbml0KGNkbnMpOwo+ ICsJCWlmIChyZXQpIHsKPiArCQkJZGV2X2VycihkZXYsICJEZXZpY2UgaW5pdGlhbGl6YXRpb24g ZmFpbGVkIHdpdGggJWRcbiIsCj4gKwkJCQlyZXQpOwo+ICsJCQlnb3RvIGVycjsKPiArCQl9Cj4g Kwl9Cj4gKwo+ICsJY2Rucy0+ZGVzaXJlZF9kcl9tb2RlID0gZHJfbW9kZTsKPiArCWNkbnMtPmRy X21vZGUgPSBkcl9tb2RlOwo+ICsJLyoKPiArCSAqIGRyX21vZGUgY291bGQgYmUgY2hhbmdlIHNv IERSRCBtdXN0IHVwZGF0ZSBjb250cm9sbGVyCj4gKwkgKiBjb25maWd1cmF0aW9uCj4gKwkgKi8K PiArCXJldCA9IGNkbnMzX2RyZF91cGRhdGVfbW9kZShjZG5zKTsKRG8geW91IG5lZWQgY2hlY2sg cmV0IHZhbHVlPyBpZiBub3QsIG5vIG5lZWQgYXNzaWduIGl0Cj4gKwo+ICsJY2Rucy0+cm9sZSA9 IGNkbnMzX2dldF9pbml0aWFsX3JvbGUoY2Rucyk7Cj4gKwo+ICsJcmV0ID0gY2RuczNfcm9sZV9z dGFydChjZG5zLCBjZG5zLT5yb2xlKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwg ImNhbid0IHN0YXJ0ICVzIHJvbGVcbiIsCj4gKwkJCWNkbnMzX2dldF9jdXJyZW50X3JvbGVfZHJp dmVyKGNkbnMpLT5uYW1lKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0 Owo+ICtlcnI6Cj4gKwljZG5zM19leGl0X3JvbGVzKGNkbnMpOwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGNkc24zX2dldF9yZWFsX3JvbGUgLSBnZXQgcmVhbCByb2xlIG9m IGNvbnRyb2xsZXIgYmFzZWQgb24gaGFyZHdhcmUgc2V0dGluZ3MuCj4gKyAqIEBjZG5zOiBQb2lu dGVyIHRvIGNkbnMzIHN0cnVjdHVyZQo+ICsgKgo+ICsgKiBSZXR1cm5zIHJvbGUKPiArICovCj4g K2VudW0gY2RuczNfcm9sZXMgY2RzbjNfZ2V0X3JlYWxfcm9sZShzdHJ1Y3QgY2RuczMgKmNkbnMp Cj4gK3sKPiArCWVudW0gY2RuczNfcm9sZXMgcm9sZSA9IENETlMzX1JPTEVfRU5EOwo+ICsKPiAr CWlmIChjZG5zLT5jdXJyZW50X2RyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHKSB7Cj4gKwkJaWYg KGNkbnMzX2dldF9pZChjZG5zKSkKPiArCQkJcm9sZSA9IENETlMzX1JPTEVfR0FER0VUOwo+ICsJ CWVsc2UKPiArCQkJcm9sZSA9IENETlMzX1JPTEVfSE9TVDsKPiArCX0gZWxzZSB7Cj4gKwkJaWYg KGNkbnMzX2lzX2hvc3QoY2RucykpCj4gKwkJCXJvbGUgPSBDRE5TM19ST0xFX0hPU1Q7Cj4gKwkJ aWYgKGNkbnMzX2lzX2RldmljZShjZG5zKSkKPiArCQkJcm9sZSA9IENETlMzX1JPTEVfR0FER0VU Owo+ICsJfQo+ICsKPiArCXJldHVybiByb2xlOwo+ICt9Cj4gKwo+ICsvKioKPiArICogY2RuczNf cm9sZV9zd2l0Y2ggLSB3b3JrIHF1ZXVlIGhhbmRsZXIgZm9yIHJvbGUgc3dpdGNoCj4gKyAqCj4g KyAqIEB3b3JrOiB3b3JrIHF1ZXVlIGl0ZW0gc3RydWN0dXJlCj4gKyAqCj4gKyAqIEhhbmRsZXMg YmVsb3cgZXZlbnRzOgo+ICsgKiAtIFJvbGUgc3dpdGNoIGZvciBkdWFsLXJvbGUgZGV2aWNlcwo+ ICsgKiAtIENETlMzX1JPTEVfR0FER0VUIDwtLT4gQ0ROUzNfUk9MRV9FTkQgZm9yIHBlcmlwaGVy YWwtb25seSBkZXZpY2VzCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBjZG5zM19yb2xlX3N3aXRjaChz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCWVudW0gY2RuczNfcm9sZXMgcm9sZSA9 IENETlMzX1JPTEVfRU5EOwo+ICsJc3RydWN0IGNkbnMzX3JvbGVfZHJpdmVyICpyb2xlX2RydjsK PiArCWVudW0gY2RuczNfcm9sZXMgY3VycmVudF9yb2xlOwo+ICsJc3RydWN0IGNkbnMzICpjZG5z Owo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJY2RucyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1 Y3QgY2RuczMsIHJvbGVfc3dpdGNoX3dxKTsKPiArCj4gKwkvKiBEdXJpbmcgc3dpdGNoaW5nIGNk bnMtPnJvbGUgY2FuIGJlIGRpZmZlcmVudCB0aGVuIHJvbGUgKi8KPiArCXJvbGUgPSBjZHNuM19n ZXRfcmVhbF9yb2xlKGNkbnMpOwo+ICsKPiArCXJvbGVfZHJ2ID0gY2RuczNfZ2V0X2N1cnJlbnRf cm9sZV9kcml2ZXIoY2Rucyk7Cj4gKwo+ICsJcG1fcnVudGltZV9nZXRfc3luYyhjZG5zLT5kZXYp Owo+ICsKPiArCS8qIERpc2FibGUgY3VycmVudCByb2xlLiBUaGlzIHN0YXRlIGNhbiBiZSBmb3Jj ZWQgZnJvbSB1c2VyIHNwYWNlLiAqLwo+ICsJaWYgKGNkbnMtPmRlYnVnX2Rpc2FibGUgJiYgcm9s ZV9kcnYtPnN0YXRlID09IENETlMzX1JPTEVfU1RBVEVfQUNUSVZFKSB7Cj4gKwkJY2RuczNfcm9s ZV9zdG9wKGNkbnMpOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwkvKiBEbyBub3RoaW5n IGlmIG5vdGhpbmcgY2hhbmdlZCAqLwo+ICsJaWYgKGNkbnMtPnJvbGUgPT0gcm9sZSAmJiByb2xl X2Rydi0+c3RhdGUgPT0gQ0ROUzNfUk9MRV9TVEFURV9BQ1RJVkUpCj4gKwkJZ290byBleGl0Owo+ ICsKPiArCWNkbnMzX3JvbGVfc3RvcChjZG5zKTsKPiArCj4gKwlyb2xlID0gY2RzbjNfZ2V0X3Jl YWxfcm9sZShjZG5zKTsKPiArCj4gKwljdXJyZW50X3JvbGUgPSBjZG5zLT5yb2xlOwo+ICsJZGV2 X2RiZyhjZG5zLT5kZXYsICJTd2l0Y2hpbmcgcm9sZSIpOwo+ICsKPiArCXJldCA9IGNkbnMzX3Jv bGVfc3RhcnQoY2Rucywgcm9sZSk7Cj4gKwpyZW1vdmUgYmxhbmsgbGluZQo+ICsJaWYgKHJldCkg ewo+ICsJCS8qIEJhY2sgdG8gY3VycmVudCByb2xlICovCj4gKwkJZGV2X2VycihjZG5zLT5kZXYs ICJzZXQgJWQgaGFzIGZhaWxlZCwgYmFjayB0byAlZFxuIiwKPiArCQkJcm9sZSwgY3VycmVudF9y b2xlKTsKPiArCQljZG5zM19yb2xlX3N0YXJ0KGNkbnMsIGN1cnJlbnRfcm9sZSk7Cj4gKwl9Cj4g K2V4aXQ6Cj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKGNkbnMtPmRldik7Cj4gK30KPiArCj4gKy8q Kgo+ICsgKiBjZG5zM19wcm9iZSAtIHByb2JlIGZvciBjZG5zMyBjb3JlIGRldmljZQo+ICsgKiBA cGRldjogUG9pbnRlciB0byBjZG5zMyBjb3JlIHBsYXRmb3JtIGRldmljZQo+ICsgKgo+ICsgKiBS ZXR1cm5zIDAgb24gc3VjY2VzcyBvdGhlcndpc2UgbmVnYXRpdmUgZXJybm8KPiArICovCj4gK3N0 YXRpYyBpbnQgY2RuczNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVjdCByZXNvdXJjZQkq cmVzOwo+ICsJc3RydWN0IGNkbnMzICpjZG5zOwo+ICsJdm9pZCBfX2lvbWVtICpyZWdzOwo+ICsJ aW50IHJldDsKPiArCj4gKwljZG5zID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjZG5zKSwg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWNkbnMpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJ Y2Rucy0+ZGV2ID0gZGV2Owo+ICsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNkbnMp Owo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lS USwgMCk7Cj4gKwlpZiAoIXJlcykgewo+ICsJCWRldl9lcnIoZGV2LCAibWlzc2luZyBJUlFcbiIp Owo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsJY2Rucy0+aXJxID0gcmVzLT5zdGFydDsK PiArCj4gKwljZG5zLT54aGNpX3Jlc1swXSA9ICpyZXM7Cj4gKwo+ICsJLyoKPiArCSAqIFJlcXVl c3QgbWVtb3J5IHJlZ2lvbgo+ICsJICogcmVnaW9uLTA6IHhIQ0kKPiArCSAqIHJlZ2lvbi0xOiBQ ZXJpcGhlcmFsCj4gKwkgKiByZWdpb24tMjogT1RHIHJlZ2lzdGVycwo+ICsJICovCj4gKwlyZXMg PSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ICsJY2Ru cy0+eGhjaV9yZXNbMV0gPSAqcmVzOwo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Cj4gKwlyZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291 cmNlKGRldiwgcmVzKTsKPiArCWlmIChJU19FUlIocmVncykpCj4gKwkJcmV0dXJuIFBUUl9FUlIo cmVncyk7Cj4gKwljZG5zLT5kZXZfcmVncwk9IHJlZ3M7Cj4gKwo+ICsJcmVzID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAyKTsKPiArCWNkbnMtPm90Z19yZXMg PSAqcmVzOwpJdCdsbCBtYWtlIHRoZSBEVFMgY2xlYXJlciBpZiBhZGQgcmVnLW5hbWVzCj4gKwo+ ICsJbXV0ZXhfaW5pdCgmY2Rucy0+bXV0ZXgpOwo+ICsKPiArCWNkbnMtPnBoeSA9IGRldm1fcGh5 X2dldChkZXYsICJjZG5zMyx1c2JwaHkiKTsKVHJ5IHRvIHVzZSBkZXZtX3BoeV9vcHRpb25hbF9n ZXQoKT8KPiArCWlmIChJU19FUlIoY2Rucy0+cGh5KSkgewo+ICsJCXJldCA9IFBUUl9FUlIoY2Ru cy0+cGh5KTsKPiArCQlpZiAocmV0ID09IC1FTk9ERVYpIHsKPiArCQkJY2Rucy0+cGh5ID0gTlVM TDsKPiArCQl9IGVsc2UgaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKSB7Cj4gKwkJCXJldHVybiBy ZXQ7Cj4gKwkJfSBlbHNlIHsKPiArCQkJZGV2X2VycihkZXYsICJubyBwaHkgZm91bmRcbiIpOwo+ ICsJCQlnb3RvIGVycjA7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXBoeV9pbml0KGNkbnMtPnBoeSk7 Cj4gKwo+ICsJSU5JVF9XT1JLKCZjZG5zLT5yb2xlX3N3aXRjaF93cSwgY2RuczNfcm9sZV9zd2l0 Y2gpOwo+ICsKPiArCXJldCA9IGNkbnMzX2RyZF9pbml0KGNkbnMpOwo+ICsJaWYgKHJldCkKPiAr CQlnb3RvIGVycjE7Cj4gKwo+ICsJcmV0ID0gY2RuczNfY29yZV9pbml0X3JvbGUoY2Rucyk7Cj4g KwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyMTsKPiArCj4gKwljZG5zM19kZWJ1Z2ZzX2luaXQoY2Ru cyk7Cj4gKwlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKGRldiwgdHJ1ZSk7Cj4gKwlwbV9ydW50 aW1lX3NldF9hY3RpdmUoZGV2KTsKPiArCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7Cj4gKwo+ICsJ LyoKPiArCSAqIFRoZSBjb250cm9sbGVyIG5lZWRzIGxlc3MgdGltZSBiZXR3ZWVuIGJ1cyBhbmQg Y29udHJvbGxlciBzdXNwZW5kLAo+ICsJICogYW5kIHdlIGFsc28gbmVlZHMgYSBzbWFsbCBkZWxh eSB0byBhdm9pZCBmcmVxdWVudGx5IGVudGVyaW5nIGxvdwo+ICsJICogcG93ZXIgbW9kZS4KPiAr CSAqLwo+ICsJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoZGV2LCAyMCk7Cj4gKwlw bV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7Cj4gKwlwbV9ydW50aW1lX3VzZV9hdXRvc3Vz cGVuZChkZXYpOwo+ICsJZGV2X2RiZyhkZXYsICJDYWRlbmNlIFVTQjMgY29yZTogcHJvYmUgc3Vj Y2VlZFxuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnIxOgo+ICsJcGh5X2V4aXQoY2Ru cy0+cGh5KTsKPiArZXJyMDoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBj ZG5zM19yZW1vdmUgLSB1bmJpbmQgZHJkIGRyaXZlciBhbmQgY2xlYW4gdXAKPiArICogQHBkZXY6 IFBvaW50ZXIgdG8gTGludXggcGxhdGZvcm0gZGV2aWNlCj4gKyAqCj4gKyAqIFJldHVybnMgMCBv biBzdWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubwo+ICsgKi8KPiArc3RhdGljIGludCBj ZG5zM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0 IGNkbnMzICpjZG5zID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gKwo+ICsJcG1fcnVu dGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKPiArCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ ZGV2KTsKPiArCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKPiArCWNkbnMzX2Rl YnVnZnNfZXhpdChjZG5zKTsKPiArCWNkbnMzX2V4aXRfcm9sZXMoY2Rucyk7Cj4gKwlwaHlfZXhp dChjZG5zLT5waHkpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKyNpZmRlZiBDT05GSUdfT0YK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfY2RuczNfbWF0Y2hbXSA9IHsK PiArCXsgLmNvbXBhdGlibGUgPSAiY2Rucyx1c2IzLTEuMC4wIiB9LAo+ICsJeyAuY29tcGF0aWJs ZSA9ICJjZG5zLHVzYjMtMS4wLjEiIH0sCj4gKwl7IH0sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIG9mX2NkbnMzX21hdGNoKTsKPiArI2VuZGlmCj4gKwo+ICtzdGF0aWMgc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBjZG5zM19kcml2ZXIgPSB7Cj4gKwkucHJvYmUJCT0gY2RuczNfcHJv YmUsCj4gKwkucmVtb3ZlCQk9IGNkbnMzX3JlbW92ZSwKPiArCS5kcml2ZXIJCT0gewo+ICsJCS5u YW1lCT0gImNkbnMtdXNiMyIsCj4gKwkJLm9mX21hdGNoX3RhYmxlCT0gb2ZfbWF0Y2hfcHRyKG9m X2NkbnMzX21hdGNoKSwKPiArCX0sCj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVy KGNkbnMzX2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmNkbnMzIik7Cj4g K01PRFVMRV9BVVRIT1IoIlBhd2VsIExhc3pjemFrIDxwYXdlbGxAY2FkZW5jZS5jb20+Iik7Cj4g K01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJDYWRlbmNl IFVTQjMgRFJEIENvbnRyb2xsZXIgRHJpdmVyIik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L2NkbnMzL2NvcmUuaCBiL2RyaXZlcnMvdXNiL2NkbnMzL2NvcmUuaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mYjRiMzkyMDYxNTgKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy91c2IvY2RuczMvY29yZS5oCj4gQEAgLTAsMCArMSwxMTYgQEAKPiAr LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiArLyoKPiArICogQ2FkZW5j ZSBVU0JTUyBEUkQgSGVhZGVyIEZpbGUuCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNy0y MDE4IE5YUAo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggQ2FkZW5jZS4KPiArICoKPiArICogQXV0 aG9yczogUGV0ZXIgQ2hlbiA8cGV0ZXIuY2hlbkBueHAuY29tPgo+ICsgKiAgICAgICAgICBQYXdl bCBMYXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPgo+ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4 L3VzYi9vdGcuaD4KPiArCj4gKyNpZm5kZWYgX19MSU5VWF9DRE5TM19DT1JFX0gKPiArI2RlZmlu ZSBfX0xJTlVYX0NETlMzX0NPUkVfSAo+ICsKPiArc3RydWN0IGNkbnMzOwo+ICtlbnVtIGNkbnMz X3JvbGVzIHsKPiArCUNETlMzX1JPTEVfSE9TVCA9IDAsCj4gKwlDRE5TM19ST0xFX0dBREdFVCwK PiArCUNETlMzX1JPTEVfRU5ELAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBjZG5zM19y b2xlX2RyaXZlciAtIGhvc3QvZ2FkZ2V0IHJvbGUgZHJpdmVyCj4gKyAqIEBzdGFydDogc3RhcnQg dGhpcyByb2xlCj4gKyAqIEBzdG9wOiBzdG9wIHRoaXMgcm9sZQo+ICsgKiBAc3VzcGVuZDogc3Vz cGVuZCBjYWxsYmFjayBmb3IgdGhpcyByb2xlCj4gKyAqIEByZXN1bWU6IHJlc3VtZSBjYWxsYmFj ayBmb3IgdGhpcyByb2xlCj4gKyAqIEBpcnE6IGlycSBoYW5kbGVyIGZvciB0aGlzIHJvbGUKPiAr ICogQG5hbWU6IHJvbGUgbmFtZSBzdHJpbmcgKGhvc3QvZ2FkZ2V0KQo+ICsgKiBAc3RhdGU6IGN1 cnJlbnQgc3RhdGUKPiArICovCj4gK3N0cnVjdCBjZG5zM19yb2xlX2RyaXZlciB7Cj4gKwlpbnQg KCpzdGFydCkoc3RydWN0IGNkbnMzICpjZG5zKTsKPiArCXZvaWQgKCpzdG9wKShzdHJ1Y3QgY2Ru czMgKmNkbnMpOwo+ICsJaW50ICgqc3VzcGVuZCkoc3RydWN0IGNkbnMzICpjZG5zLCBib29sIGRv X3dha2V1cCk7Cj4gKwlpbnQgKCpyZXN1bWUpKHN0cnVjdCBjZG5zMyAqY2RucywgYm9vbCBoaWJl cm5hdGVkKTsKPiArCWNvbnN0IGNoYXIgKm5hbWU7Cj4gKyNkZWZpbmUgQ0ROUzNfUk9MRV9TVEFU RV9JTkFDVElWRQkwCj4gKyNkZWZpbmUgQ0ROUzNfUk9MRV9TVEFURV9BQ1RJVkUJCTEKPiArCWlu dCBzdGF0ZTsKPiArfTsKPiArCj4gKyNkZWZpbmUgQ0ROUzNfWEhDSV9SRVNPVVJDRVNfTlVNCTIK PiArLyoqCj4gKyAqIHN0cnVjdCBjZG5zMyAtIFJlcHJlc2VudGF0aW9uIG9mIENhZGVuY2UgVVNC MyBEUkQgY29udHJvbGxlci4KPiArICogQGRldjogcG9pbnRlciB0byBDYWRlbmNlIGRldmljZSBz dHJ1Y3QKPiArICogQHhoY2lfcmVnczogcG9pbnRlciB0byBiYXNlIG9mIHhoY2kgcmVnaXN0ZXJz Cj4gKyAqIEB4aGNpX3JlczogdGhlIHJlc291cmNlIGZvciB4aGNpCj4gKyAqIEBkZXZfcmVnczog cG9pbnRlciB0byBiYXNlIG9mIGRldiByZWdpc3RlcnMKPiArICogQG90Z19yZWdzOiBwb2ludGVy IHRvIGJhc2Ugb2Ygb3RnIHJlZ2lzdGVycwo+ICsgKiBAaXJxOiBpcnEgbnVtYmVyIGZvciBjb250 cm9sbGVyCj4gKyAqIEByb2xlczogYXJyYXkgb2Ygc3VwcG9ydGVkIHJvbGVzIGZvciB0aGlzIGNv bnRyb2xsZXIKPiArICogQHJvbGU6IGN1cnJlbnQgcm9sZQo+ICsgKiBAaG9zdF9kZXY6IHRoZSBj aGlsZCBob3N0IGRldmljZSBwb2ludGVyIGZvciBjZG5zMyBjb3JlCj4gKyAqIEBnYWRnZXRfZGV2 OiB0aGUgY2hpbGQgZ2FkZ2V0IGRldmljZSBwb2ludGVyIGZvciBjZG5zMyBjb3JlCj4gKyAqIEB1 c2I6IHBoeSBmb3IgdGhpcyBjb250cm9sbGVyCj4gKyAqIEByb2xlX3N3aXRjaF93cTogd29yayBx dWV1ZSBpdGVtIGZvciByb2xlIHN3aXRjaAo+ICsgKiBAaW5fbHBtOiB0aGUgY29udHJvbGxlciBp biBsb3cgcG93ZXIgbW9kZQo+ICsgKiBAd2FrZXVwX2ludDogdGhlIHdha2V1cCBpbnRlcnJ1cHQK PiArICogQG11dGV4OiB0aGUgbXV0ZXggZm9yIGNvbmN1cnJlbnQgY29kZSBhdCBkcml2ZXIKPiAr ICogQGRyX21vZGU6IHN1cHBvcnRlZCBtb2RlIG9mIG9wZXJhdGlvbiBpdCBjYW4gYmUgb25seSBI b3N0LCBvbmx5IERldmljZQo+ICsgKiAgICAgICAgICAgb3IgT1RHIG1vZGUgdGhhdCBhbGxvdyB0 byBzd2l0Y2ggYmV0d2VlbiBEZXZpY2UgYW5kIEhvc3QgbW9kZS4KPiArICogICAgICAgICAgIFRo aXMgZmllbGQgYmFzZWQgb24gZmlybXdhcmUgc2V0dGluZywga2VybmVsIGNvbmZpZ3VyYXRpb24K PiArICogICAgICAgICAgIGFuZCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLgo+ICsgKiBAY3VycmVu dF9kcl9tb2RlOiBjdXJyZW50IG1vZGUgb2Ygb3BlcmF0aW9uIHdoZW4gaW4gZHVhbC1yb2xlIG1v ZGUKPiArICogQGRlc2lyZWRfZHJfbW9kZTogZGVzaXJlZCBtb2RlIG9mIG9wZXJhdGlvbiB3aGVu IGluIGR1YWwtcm9sZSBtb2RlLgo+ICsgKiAgICAgICAgICAgVGhpcyB2YWx1ZSBjYW4gYmUgY2hh bmdlZCBkdXJpbmcgcnVudGltZS4KPiArICogICAgICAgICAgIEF2YWlsYWJsZSBvcHRpb25zIGRl cGVuZHMgb24gIGRyX21vZGU6Cj4gKyAqICAgICAgICAgICBkcl9tb2RlICAgICAgICAgICAgICAg ICB8ICBkZXNpcmVkX2RyX21vZGUgYW5kIGN1cnJlbnRfZHJfbW9kZQo+ICsgKiAgICAgICAgICAg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQo+ICsgKiAgICAgICAgICAgVVNCX0RSX01PREVfSE9TVCAgICAgICAgfCBvbmx5IFVT Ql9EUl9NT0RFX0hPU1QKPiArICogICAgICAgICAgIFVTQl9EUl9NT0RFX1BFUklQSEVSQUwgIHwg b25seSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMCj4gKyAqICAgICAgICAgICBVU0JfRFJfTU9ERV9P VEcgICAgICAgICB8IG9ubHkgVVNCX0RSX01PREVfSE9TVAo+ICsgKiAgICAgICAgICAgVVNCX0RS X01PREVfT1RHICAgICAgICAgfCBvbmx5IFVTQl9EUl9NT0RFX1BFUklQSEVSQUwKPiArICogICAg ICAgICAgIFVTQl9EUl9NT0RFX09URyAgICAgICAgIHwgVVNCX0RSX01PREVfT1RHCj4gKyAqCj4g KyAqICAgICAgICAgICBEZXNpcmVkX2RyX3JvbGUgY2FuIGJlIGNoYW5nZWQgYnkgbWVhbnMgb2Yg ZGVidWdmcy4KPiArICogQHJvb3Q6IGRlYnVnZnMgcm9vdCBmb2xkZXIgcG9pbnRlcgo+ICsgKiBA ZGVidWdfZGlzYWJsZToKPiArICovCj4gK3N0cnVjdCBjZG5zMyB7Cj4gKwlzdHJ1Y3QgZGV2aWNl CQkJKmRldjsKPiArCXZvaWQgX19pb21lbQkJCSp4aGNpX3JlZ3M7Cj4gKwlzdHJ1Y3QgcmVzb3Vy Y2UJCQl4aGNpX3Jlc1tDRE5TM19YSENJX1JFU09VUkNFU19OVU1dOwo+ICsJc3RydWN0IGNkbnMz X3VzYl9yZWdzIF9faW9tZW0JKmRldl9yZWdzOwo+ICsKPiArCXN0cnVjdCByZXNvdXJjZQkJCW90 Z19yZXM7Cj4gKwlzdHJ1Y3QgY2RuczNfb3RnX2xlZ2FjeV9yZWdzCSpvdGdfdjBfcmVnczsKPiAr CXN0cnVjdCBjZG5zM19vdGdfcmVncwkJKm90Z192MV9yZWdzOwo+ICsJc3RydWN0IGNkbnMzX290 Z19jb21tb25fcmVncwkqb3RnX3JlZ3M7Cj4gKyNkZWZpbmUgQ0ROUzNfQ09OVFJPTExFUl9WMAkw Cj4gKyNkZWZpbmUgQ0ROUzNfQ09OVFJPTExFUl9WMQkxCj4gKwl1MzIJCQkJdmVyc2lvbjsKPiAr Cj4gKwlpbnQJCQkJaXJxOwo+ICsJc3RydWN0IGNkbnMzX3JvbGVfZHJpdmVyCSpyb2xlc1tDRE5T M19ST0xFX0VORF07Cj4gKwllbnVtIGNkbnMzX3JvbGVzCQlyb2xlOwo+ICsJc3RydWN0IHBsYXRm b3JtX2RldmljZQkJKmhvc3RfZGV2Owo+ICsJc3RydWN0IGNkbnMzX2RldmljZQkJKmdhZGdldF9k ZXY7Cj4gKwlzdHJ1Y3QgcGh5CQkJKnBoeTsKPiArCXN0cnVjdCB3b3JrX3N0cnVjdAkJcm9sZV9z d2l0Y2hfd3E7Cj4gKwlpbnQJCQkJaW5fbHBtOjE7Cj4gKwlpbnQJCQkJd2FrZXVwX2ludDoxOwo+ ICsJLyogbXV0ZXh0IHVzZWQgaW4gd29ya3F1ZXVlKi8KPiArCXN0cnVjdCBtdXRleAkJCW11dGV4 Owo+ICsJZW51bSB1c2JfZHJfbW9kZQkJZHJfbW9kZTsKPiArCWVudW0gdXNiX2RyX21vZGUJCWN1 cnJlbnRfZHJfbW9kZTsKPiArCWVudW0gdXNiX2RyX21vZGUJCWRlc2lyZWRfZHJfbW9kZTsKPiAr CXN0cnVjdCBkZW50cnkJCQkqcm9vdDsKPiArCWludAkJCQlkZWJ1Z19kaXNhYmxlOjE7Cj4gK307 Cj4gKwo+ICt2b2lkIGNkbnMzX3JvbGVfc3RvcChzdHJ1Y3QgY2RuczMgKmNkbnMpOwo+ICsKPiAr I2VuZGlmIC8qIF9fTElOVVhfQ0ROUzNfQ09SRV9IICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv dXNiL2NkbnMzL2RlYnVnLmggYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjk0ZjllZjE1Zjg5OQo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oCj4gQEAgLTAsMCArMSwxNjYg QEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiArLyoKPiArICog Q2FkZW5jZSBVU0JTUyBEUkQgRHJpdmVyLgo+ICsgKiBEZWJ1ZyBoZWFkZXIgZmlsZS4KPiArICoK PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuCj4gKyAqCj4gKyAqIEF1dGhvcjogUGF3 ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4KPiArICovCj4gKyNpZm5kZWYgX19MSU5V WF9DRE5TM19ERUJVRwo+ICsjZGVmaW5lIF9fTElOVVhfQ0ROUzNfREVCVUcKPiArCj4gKyNpbmNs dWRlICJjb3JlLmgiCj4gKwo+ICtzdGF0aWMgaW5saW5lIGNoYXIgKmNkbnMzX2RlY29kZV91c2Jf aXJxKGNoYXIgKnN0ciwKPiArCQkJCQkgZW51bSB1c2JfZGV2aWNlX3NwZWVkIHNwZWVkLAo+ICsK dG9vIG1hbnkgc2VudGVuY2VzIGFzIGlubGluZSBmdW5jdGlvbgo+IAkJCQkJIHUzMiB1c2JfaXN0 cykKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBzcHJpbnRmKHN0ciwgIklSUSAlMDh4 ID0gIiwgdXNiX2lzdHMpOwo+ICsKPiArCWlmICh1c2JfaXN0cyAmIChVU0JfSVNUU19DT04ySSB8 IFVTQl9JU1RTX0NPTkkpKSB7Cj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiQ29ubmVj dGlvbiAlc1xuIiwKPiArCQkJICAgICAgIHVzYl9zcGVlZF9zdHJpbmcoc3BlZWQpKTsKPiArCX0K PiArCWlmICh1c2JfaXN0cyAmIFVTQl9JU1RTX0NPTjJJIHx8IHVzYl9pc3RzICYgVVNCX0lTVFNf Q09OSSkKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJEaXNjb25uZWN0aW9uICIpOwo+ ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNfTDJFTlRJKQo+ICsJCXJldCArPSBzcHJpbnRmKHN0 ciArIHJldCwgInN1c3BlbmRlZCAiKTsKPiArCj4gKwlpZiAodXNiX2lzdHMgJiBVU0JfSVNUU19M MkVYVEkpCj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiTDIgZXhpdCAiKTsKPiArCWlm ICh1c2JfaXN0cyAmIFVTQl9JU1RTX1UzRVhUSSkKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyBy ZXQsICJVMyBleGl0ICIpOwo+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNfVVdSRVNJKQo+ICsJ CXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIldhcm0gUmVzZXQgIik7Cj4gKwlpZiAodXNiX2lz dHMgJiBVU0JfSVNUU19VSFJFU0kpCj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiSG90 IFJlc2V0ICIpOwo+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNfVTJSRVNJKQo+ICsJCXJldCAr PSBzcHJpbnRmKHN0ciArIHJldCwgIlJlc2V0Iik7Cj4gKwo+ICsJcmV0dXJuIHN0cjsKPiArfQo+ ICsKPiArc3RhdGljIGlubGluZSAgY2hhciAqY2RuczNfZGVjb2RlX2VwX2lycShjaGFyICpzdHIs Cj4gKwkJCQkJIHUzMiBlcF9zdHMsCj4gKwkJCQkJIGNvbnN0IGNoYXIgKmVwX25hbWUpCmRpdHRv Cj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gc3ByaW50ZihzdHIsICJJUlEgZm9yICVz OiAlMDh4ICIsIGVwX25hbWUsIGVwX3N0cyk7Cj4gKwo+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19T RVRVUCkKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJTRVRVUCAiKTsKPiArCWlmIChl cF9zdHMgJiBFUF9TVFNfSU9DKQo+ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIklPQyAi KTsKPiArCWlmIChlcF9zdHMgJiBFUF9TVFNfSVNQKQo+ICsJCXJldCArPSBzcHJpbnRmKHN0ciAr IHJldCwgIklTUCAiKTsKPiArCWlmIChlcF9zdHMgJiBFUF9TVFNfREVTQ01JUykKPiArCQlyZXQg Kz0gc3ByaW50ZihzdHIgKyByZXQsICJERVNDTUlTICIpOwo+ICsJaWYgKGVwX3N0cyAmIEVQX1NU U19TVFJFQU1SKQo+ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIlNUUkVBTVIgIik7Cj4g KwlpZiAoZXBfc3RzICYgRVBfU1RTX01EX0VYSVQpCj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsg cmV0LCAiTURfRVhJVCAiKTsKPiArCWlmIChlcF9zdHMgJiBFUF9TVFNfVFJCRVJSKQo+ICsJCXJl dCArPSBzcHJpbnRmKHN0ciArIHJldCwgIlRSQkVSUiAiKTsKPiArCWlmIChlcF9zdHMgJiBFUF9T VFNfTlJEWSkKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJOUkRZICIpOwo+ICsJaWYg KGVwX3N0cyAmIEVQX1NUU19QUklNRSkKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJQ UklNRSAiKTsKPiArCWlmIChlcF9zdHMgJiBFUF9TVFNfU0lERVJSKQo+ICsJCXJldCArPSBzcHJp bnRmKHN0ciArIHJldCwgIlNJREVSUlQgIik7Cj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX09VVFNN TSkKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJPVVRTTU0gIik7Cj4gKwlpZiAoZXBf c3RzICYgRVBfU1RTX0lTT0VSUikKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJJU09F UlIgIik7Cj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX0lPVCkKPiArCQlyZXQgKz0gc3ByaW50Zihz dHIgKyByZXQsICJJT1QgIik7Cj4gKwo+ICsJcmV0dXJuIHN0cjsKPiArfQo+ICsKPiArc3RhdGlj IGlubGluZSBjaGFyICpjZG5zM19kZWNvZGVfZXB4X2lycShjaGFyICpzdHIsCj4gKwkJCQkJIGNo YXIgKmVwX25hbWUsCj4gKwkJCQkJIHUzMiBlcF9zdHMpCj4gK3sKPiArCXJldHVybiBjZG5zM19k ZWNvZGVfZXBfaXJxKHN0ciwgZXBfc3RzLCBlcF9uYW1lKTsKPiArfQo+ICsKPiArc3RhdGljIGlu bGluZSBjaGFyICpjZG5zM19kZWNvZGVfZXAwX2lycShjaGFyICpzdHIsCj4gKwkJCQkJIGludCBk aXIsCj4gKwkJCQkJIHUzMiBlcF9zdHMpCj4gK3sKPiArCXJldHVybiBjZG5zM19kZWNvZGVfZXBf aXJxKHN0ciwgZXBfc3RzLAo+ICsJCQkJICAgZGlyID8gImVwMElOIiA6ICJlcDBPVVQiKTsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIERlYnVnIGEgdHJhbnNmZXIgcmluZy4KPiArICoKPiArICogUHJp bnRzIG91dCBhbGwgVFJCcyBpbiB0aGUgZW5kcG9pbnQgcmluZywgZXZlbiB0aG9zZSBhZnRlciB0 aGUgTGluayBUUkIuCj4gKyAqLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBjaGFyICpjZG5zM19k YmdfcmluZyhzdHJ1Y3QgY2RuczNfZW5kcG9pbnQgKnByaXZfZXAsCj4gKwkJCQkgICBzdHJ1Y3Qg Y2RuczNfdHJiICpyaW5nLCBjaGFyICpzdHIpCmRpdHRvCj4gK3sKPiArCWRtYV9hZGRyX3QgYWRk ciA9IHByaXZfZXAtPnRyYl9wb29sX2RtYTsKPiArCXN0cnVjdCBjZG5zM190cmIgKnRyYjsKPiAr CWludCB0cmJfcGVyX3NlY3RvcjsKPiArCWludCByZXQgPSAwOwo+ICsJaW50IGk7Cj4gKwo+ICsJ dHJiX3Blcl9zZWN0b3IgPSBHRVRfVFJCU19QRVJfU0VHTUVOVChwcml2X2VwLT50eXBlKTsKPiAr Cj4gKwl0cmIgPSAmcHJpdl9lcC0+dHJiX3Bvb2xbcHJpdl9lcC0+ZGVxdWV1ZV07Cj4gKwlyZXQg Kz0gc3ByaW50ZihzdHIgKyByZXQsICJcblx0XHRSaW5nIGNvbnRlbnRzIGZvciAlczoiLCBwcml2 X2VwLT5uYW1lKTsKPiArCj4gKwlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsCj4gKwkJICAgICAg ICJcblx0XHRSaW5nIGRlcSBpbmRleDogJWQsIHRyYjogJXAgKHZpcnQpLCAweCVsbHggKGRtYSlc biIsCj4gKwkJICAgICAgIHByaXZfZXAtPmRlcXVldWUsIHRyYiwKPiArCQkgICAgICAgKHVuc2ln bmVkIGxvbmcgbG9uZyljZG5zM190cmJfdmlydF90b19kbWEocHJpdl9lcCwgdHJiKSk7Cj4gKwo+ ICsJdHJiID0gJnByaXZfZXAtPnRyYl9wb29sW3ByaXZfZXAtPmVucXVldWVdOwo+ICsJcmV0ICs9 IHNwcmludGYoc3RyICsgcmV0LAo+ICsJCSAgICAgICAiXHRcdFJpbmcgZW5xIGluZGV4OiAlZCwg dHJiOiAlcCAodmlydCksIDB4JWxseCAoZG1hKVxuIiwKPiArCQkgICAgICAgcHJpdl9lcC0+ZW5x dWV1ZSwgdHJiLAo+ICsJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNkbnMzX3RyYl92aXJ0 X3RvX2RtYShwcml2X2VwLCB0cmIpKTsKPiArCj4gKwlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQs Cj4gKwkJICAgICAgICJcdFx0ZnJlZSB0cmJzOiAlZCwgQ0NTPSVkLCBQQ1M9JWRcbiIsCj4gKwkJ ICAgICAgIHByaXZfZXAtPmZyZWVfdHJicywgcHJpdl9lcC0+Y2NzLCBwcml2X2VwLT5wY3MpOwo+ ICsKPiArCWlmICh0cmJfcGVyX3NlY3RvciA+IFRSQlNfUEVSX1NFR01FTlQpCj4gKwkJdHJiX3Bl cl9zZWN0b3IgPSBUUkJTX1BFUl9TRUdNRU5UOwo+ICsKPiArCWlmICh0cmJfcGVyX3NlY3RvciA+ IFRSQlNfUEVSX1NFR01FTlQpIHsKPiArCQlzcHJpbnRmKHN0ciArIHJldCwgIlx0XHRUbyBiaWcg dHJhbnNmZXIgcmluZyAlZFxuIiwKPiArCQkJdHJiX3Blcl9zZWN0b3IpOwo+ICsJCXJldHVybiBz dHI7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHRyYl9wZXJfc2VjdG9yOyArK2kpIHsK PiArCQl0cmIgPSAmcmluZ1tpXTsKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsCj4gKwkJ CSJcdFx0QCVwYWQgJTA4eCAlMDh4ICUwOHhcbiIsICZhZGRyLAo+ICsJCQlsZTMyX3RvX2NwdSh0 cmItPmJ1ZmZlciksCj4gKwkJCWxlMzJfdG9fY3B1KHRyYi0+bGVuZ3RoKSwKPiArCQkJbGUzMl90 b19jcHUodHJiLT5jb250cm9sKSk7Cj4gKwkJYWRkciArPSBzaXplb2YoKnRyYik7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIHN0cjsKPiArfQo+ICsKPiArI2lmZGVmIENPTkZJR19ERUJVR19GUwo+ICt2 b2lkIGNkbnMzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgY2RuczMgKmNkbnMpOwo+ICt2b2lkIGNkbnMz X2RlYnVnZnNfZXhpdChzdHJ1Y3QgY2RuczMgKmNkbnMpOwo+ICsjZWxzZQo+ICt2b2lkIGNkbnMz X2RlYnVnZnNfaW5pdChzdHJ1Y3QgY2RuczMgKmNkbnMpOwo+ICt7ICB9Cj4gK3ZvaWQgY2RuczNf ZGVidWdmc19leGl0KHN0cnVjdCBjZG5zMyAqY2Rucyk7Cj4gK3sgIH0KPiArI2VuZGlmCj4gKwo+ ICsjZW5kaWYgLypfX0xJTlVYX0NETlMzX0RFQlVHKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91 c2IvY2RuczMvZGVidWdmcy5jIGIvZHJpdmVycy91c2IvY2RuczMvZGVidWdmcy5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmQ3OTE5ZjVjMWQ5MAo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Z2ZzLmMKPiBAQCAtMCwwICsx LDE2OCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsg KiBDYWRlbmNlIFVTQlNTIERSRCBDb250cm9sbGVyIERlYnVnRlMgZmlsZXIuCj4gKyAqCj4gKyAq IENvcHlyaWdodCAoQykgMjAxOCBDYWRlbmNlLgo+ICsgKgo+ICsgKiBBdXRob3I6IFBhd2VsIExh c3pjemFrIDxwYXdlbGxAY2FkZW5jZS5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9zZXFfZmlsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+ICsKPiArI2luY2x1 ZGUgImNvcmUuaCIKPiArI2luY2x1ZGUgImdhZGdldC5oIgo+ICsjaW5jbHVkZSAiZHJkLmgiCj4g Kwo+ICtzdGF0aWMgaW50IGNkbnMzX21vZGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQg KnVudXNlZCkKPiArewo+ICsJc3RydWN0IGNkbnMzICpjZG5zID0gcy0+cHJpdmF0ZTsKPiArCj4g Kwlzd2l0Y2ggKGNkbnMtPmN1cnJlbnRfZHJfbW9kZSkgewo+ICsJY2FzZSBVU0JfRFJfTU9ERV9I T1NUOgo+ICsJCXNlcV9wdXRzKHMsICJob3N0XG4iKTsKPiArCQlicmVhazsKPiArCWNhc2UgVVNC X0RSX01PREVfUEVSSVBIRVJBTDoKPiArCQlzZXFfcHV0cyhzLCAiZGV2aWNlXG4iKTsKPiArCQli cmVhazsKPiArCWNhc2UgVVNCX0RSX01PREVfT1RHOgo+ICsJCXNlcV9wdXRzKHMsICJvdGdcbiIp Owo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlzZXFfcHV0cyhzLCAiVU5LTk9XTiBtb2Rl XG4iKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBjZG5z M19tb2RlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCj4gK3sK PiArCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjZG5zM19tb2RlX3Nob3csIGlub2RlLT5pX3By aXZhdGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBjZG5zM19tb2RlX3dyaXRlKHN0cnVj dCBmaWxlICpmaWxlLAo+ICsJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCj4gKwkJCQlzaXpl X3QgY291bnQsIGxvZmZfdCAqcHBvcykKPiArewo+ICsJc3RydWN0IHNlcV9maWxlCSAqcyA9IGZp bGUtPnByaXZhdGVfZGF0YTsKPiArCXN0cnVjdCBjZG5zMyAqY2RucyA9IHMtPnByaXZhdGU7Cj4g Kwl1MzIgbW9kZSA9IFVTQl9EUl9NT0RFX1VOS05PV047Cj4gKwljaGFyIGJ1ZlszMl07Cj4gKwo+ ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1 ZikgLSAxLCBjb3VudCkpKQo+ICsJCXJldHVybiAtRUZBVUxUOwo+ICsKPiArCWlmICghc3RybmNt cChidWYsICJob3N0IiwgNCkpIHsKPiArCQlpZiAoY2Rucy0+ZHJfbW9kZSA9PSBVU0JfRFJfTU9E RV9IT1NUIHx8Cj4gKwkJICAgIGNkbnMtPmRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHKSB7Cj4g KwkJCW1vZGUgPSBVU0JfRFJfTU9ERV9IT1NUOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIXN0 cm5jbXAoYnVmLCAiZGV2aWNlIiwgNikpCj4gKwkJaWYgKGNkbnMtPmRyX21vZGUgPT0gVVNCX0RS X01PREVfUEVSSVBIRVJBTCB8fAo+ICsJCSAgICBjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RF X09URykKPiArCQkJbW9kZSA9IFVTQl9EUl9NT0RFX1BFUklQSEVSQUw7Cj4gKwo+ICsJaWYgKCFz dHJuY21wKGJ1ZiwgIm90ZyIsIDMpICYmIGNkbnMtPmRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RH KQo+ICsJCW1vZGUgPSBVU0JfRFJfTU9ERV9PVEc7Cj4gKwo+ICsJaWYgKG1vZGUgPT0gVVNCX0RS X01PREVfVU5LTk9XTikgewo+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAiRmFpbGVkOiBpbmNvcnJl Y3QgbW9kZSBzZXR0aW5nXG4iKTsKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCX0KPiArCj4gKwlp ZiAoY2Rucy0+Y3VycmVudF9kcl9tb2RlICE9IG1vZGUpIHsKPiArCQljZG5zLT5kZXNpcmVkX2Ry X21vZGUgPSBtb2RlOwo+ICsJCWNkbnMtPmRlYnVnX2Rpc2FibGUgPSAwOwo+ICsJCWNkbnMzX3Jv bGVfc3RvcChjZG5zKTsKPiArCQljZG5zM19kcmRfdXBkYXRlX21vZGUoY2Rucyk7Cj4gKwkJcXVl dWVfd29yayhzeXN0ZW1fZnJlZXphYmxlX3dxLCAmY2Rucy0+cm9sZV9zd2l0Y2hfd3EpOwo+ICsJ fQo+ICsKPiArCXJldHVybiBjb3VudDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBm aWxlX29wZXJhdGlvbnMgY2RuczNfbW9kZV9mb3BzID0gewo+ICsJLm9wZW4JCQk9IGNkbnMzX21v ZGVfb3BlbiwKPiArCS53cml0ZQkJCT0gY2RuczNfbW9kZV93cml0ZSwKPiArCS5yZWFkCQkJPSBz ZXFfcmVhZCwKPiArCS5sbHNlZWsJCQk9IHNlcV9sc2VlaywKPiArCS5yZWxlYXNlCQk9IHNpbmds ZV9yZWxlYXNlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBjZG5zM19kaXNhYmxlX3Nob3coc3Ry dWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCj4gK3sKPiArCXN0cnVjdCBjZG5zMyAqY2Ru cyA9IHMtPnByaXZhdGU7Cj4gKwo+ICsJaWYgKCFjZG5zLT5kZWJ1Z19kaXNhYmxlKQo+ICsJCXNl cV9wdXRzKHMsICIwXG4iKTsKPiArCWVsc2UKPiArCQlzZXFfcHV0cyhzLCAiMVxuIik7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IGNkbnMzX2Rpc2FibGVfd3Jp dGUoc3RydWN0IGZpbGUgKmZpbGUsCj4gKwkJCQkgICBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwK PiArCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2Vx X2ZpbGUJICpzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ICsJc3RydWN0IGNkbnMzICpjZG5zID0g cy0+cHJpdmF0ZTsKPiArCWludCBkaXNhYmxlOwo+ICsJY2hhciBidWZbMzJdOwo+ICsKPiArCWlm IChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBtaW5fdChzaXplX3QsIHNpemVvZihidWYpIC0g MSwgY291bnQpKSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwlpZiAoIXN0cm5jbXAoYnVm LCAiMSIsIDEpIHx8ICFzdHJuY21wKGJ1ZiwgInllcyIsIDMpKSB7Cj4gKwkJZGlzYWJsZSA9IDE7 Cj4gKwl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgIjAiLCAxKSB8fCAhc3RybmNtcChidWYsICJu byIsIDIpKSB7Cj4gKwkJZGlzYWJsZSA9IDA7Cj4gKwl9IGVsc2Ugewo+ICsJCWRldl9lcnIoY2Ru cy0+ZGV2LCAiRmFpbGVkOiBpbmNvcnJlY3QgZGlzYWJsZSBzZXR0aW5nXG4iKTsKPiArCQlyZXR1 cm4gLUVGQVVMVDsKPiArCX0KPiArClRoZXJlIGlzIGNvbW1vbiBBUEkga3N0cnRvYm9vbCgpPwoK PiArCWlmIChkaXNhYmxlICE9IGNkbnMtPmRlYnVnX2Rpc2FibGUpIHsKPiArCQljZG5zLT5kZWJ1 Z19kaXNhYmxlID0gZGlzYWJsZTsKPiArCQlxdWV1ZV93b3JrKHN5c3RlbV9mcmVlemFibGVfd3Es ICZjZG5zLT5yb2xlX3N3aXRjaF93cSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGNvdW50Owo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnMzX2Rpc2FibGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKPiArewo+ICsJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNk bnMzX2Rpc2FibGVfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNkbnMzX2Rpc2FibGVfZm9wcyA9IHsKPiArCS5v cGVuCQkJPSBjZG5zM19kaXNhYmxlX29wZW4sCj4gKwkud3JpdGUJCQk9IGNkbnMzX2Rpc2FibGVf d3JpdGUsCj4gKwkucmVhZAkJCT0gc2VxX3JlYWQsCj4gKwkubGxzZWVrCQkJPSBzZXFfbHNlZWss Cj4gKwkucmVsZWFzZQkJPSBzaW5nbGVfcmVsZWFzZSwKPiArfTsKPiArCj4gK3ZvaWQgY2RuczNf ZGVidWdmc19pbml0KHN0cnVjdCBjZG5zMyAqY2RucykKPiArewo+ICsJc3RydWN0IGRlbnRyeSAq cm9vdDsKPiArCj4gKwlyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKGNkbnMtPmRl diksIE5VTEwpOwo+ICsJY2Rucy0+cm9vdCA9IHJvb3Q7Cj4gKwlpZiAoSVNfRU5BQkxFRChDT05G SUdfVVNCX0NETlMzX0dBREdFVCkgJiYKPiArCSAgICBJU19FTkFCTEVEKENPTkZJR19VU0JfQ0RO UzNfSE9TVCkpCj4gKwkJZGVidWdmc19jcmVhdGVfZmlsZSgibW9kZSIsIDA2NDQsIHJvb3QsIGNk bnMsCj4gKwkJCQkgICAgJmNkbnMzX21vZGVfZm9wcyk7Cj4gKwo+ICsJZGVidWdmc19jcmVhdGVf ZmlsZSgiZGlzYWJsZSIsIDA2NDQsIHJvb3QsIGNkbnMsCj4gKwkJCSAgICAmY2RuczNfZGlzYWJs ZV9mb3BzKTsKPiArfQo+ICsKPiArdm9pZCBjZG5zM19kZWJ1Z2ZzX2V4aXQoc3RydWN0IGNkbnMz ICpjZG5zKQo+ICt7Cj4gKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2Rucy0+cm9vdCk7Cj4g K30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvZHJkLmMgYi9kcml2ZXJzL3VzYi9j ZG5zMy9kcmQuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5i MGMzMjMwMmViMGIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy91c2IvY2RuczMvZHJk LmMKPiBAQCAtMCwwICsxLDM1MCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAo+ICsvKgo+ICsgKiBDYWRlbmNlIFVTQlNTIERSRCBEcml2ZXIuCj4gKyAqCj4gKyAqIENv cHlyaWdodCAoQykgMjAxOCBDYWRlbmNlLgo+ICsgKgo+ICsgKiBBdXRob3I6IFBhd2VsIExhc3pj emFrIDxwYXdlbGxAY2FkZW5jZS5jb20KPiArICoKPiArICovCj4gKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KPiArCj4gKyNpbmNsdWRl ICJnYWRnZXQuaCIKPiArI2luY2x1ZGUgImRyZC5oIgo+ICsjaW5jbHVkZSAiY29yZS5oIgo+ICsK PiArc3RhdGljIGludCBjZG5zM19kcmRfc3dpdGNoX2dhZGdldChzdHJ1Y3QgY2RuczMgKmNkbnMs IGludCBvbik7Cj4gK3N0YXRpYyBpbnQgY2RuczNfZHJkX3N3aXRjaF9ob3N0KHN0cnVjdCBjZG5z MyAqY2RucywgaW50IG9uKTsKPiArCj4gKy8qKgo+ICsgKiBjZG5zM19zZXRfbW9kZSAtIGNoYW5n ZSBtb2RlIG9mIE9URyBDb3JlCj4gKyAqIEBjZG5zOiBwb2ludGVyIHRvIGNvbnRleHQgc3RydWN0 dXJlCj4gKyAqIEBtb2RlOiBzZWxlY3RlZCBtb2RlIGZyb20gY2Ruc19yb2xlCj4gKyAqLwo+ICt2 b2lkIGNkbnMzX3NldF9tb2RlKHN0cnVjdCBjZG5zMyAqY2RucywgZW51bSB1c2JfZHJfbW9kZSBt b2RlKQo+ICt7Cj4gKwl1MzIgcmVnOwo+ICsKPiArCWNkbnMtPmN1cnJlbnRfZHJfbW9kZSA9IG1v ZGU7Cj4gKwo+ICsJc3dpdGNoIChtb2RlKSB7Cj4gKwljYXNlIFVTQl9EUl9NT0RFX1BFUklQSEVS QUw6Cj4gKwkJZGV2X2luZm8oY2Rucy0+ZGV2LCAiU2V0IGNvbnRyb2xsZXIgdG8gR2FkZ2V0IG1v ZGVcbiIpOwo+ICsJCWNkbnMzX2RyZF9zd2l0Y2hfZ2FkZ2V0KGNkbnMsIDEpOwo+ICsJCWJyZWFr Owo+ICsJY2FzZSBVU0JfRFJfTU9ERV9IT1NUOgo+ICsJCWRldl9pbmZvKGNkbnMtPmRldiwgIlNl dCBjb250cm9sbGVyIHRvIEhvc3QgbW9kZVxuIik7Cj4gKwkJY2RuczNfZHJkX3N3aXRjaF9ob3N0 KGNkbnMsIDEpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBVU0JfRFJfTU9ERV9PVEc6Cj4gKwkJZGV2 X2luZm8oY2Rucy0+ZGV2LCAiU2V0IGNvbnRyb2xsZXIgdG8gT1RHIG1vZGVcbiIpOwo+ICsJCWlm IChjZG5zLT52ZXJzaW9uID09IENETlMzX0NPTlRST0xMRVJfVjEpIHsKPiArCQkJcmVnID0gcmVh ZGwoJmNkbnMtPm90Z192MV9yZWdzLT5vdmVycmlkZSk7Cj4gKwkJCXJlZyB8PSBPVkVSUklERV9J RFBVTExVUDsKPiArCQkJd3JpdGVsKHJlZywgJmNkbnMtPm90Z192MV9yZWdzLT5vdmVycmlkZSk7 Cj4gKwkJfSBlbHNlIHsKPiArCQkJcmVnID0gcmVhZGwoJmNkbnMtPm90Z192MF9yZWdzLT5jdHJs MSk7Cj4gKwkJCXJlZyB8PSBPVkVSUklERV9JRFBVTExVUF9WMDsKPiArCQkJd3JpdGVsKHJlZywg JmNkbnMtPm90Z192MF9yZWdzLT5jdHJsMSk7Cj4gKwkJfQo+ICsKPiArCQkvKgo+ICsJCSAqIEhh cmR3YXJlIHNwZWNpZmljYXRpb24gc2F5czogIklEX1ZBTFVFIG11c3QgYmUgdmFsaWQgd2l0aGlu Cj4gKwkJICogNTBtcyBhZnRlciBpZHB1bGx1cCBpcyBzZXQgdG8gJzEiIHNvIGRyaXZlciBtdXN0 IHdhaXQKPiArCQkgKiA1MG1zIGJlZm9yZSByZWFkaW5nIHRoaXMgcGluLgo+ICsJCSAqLwo+ICsJ CXVzbGVlcF9yYW5nZSg1MDAwMCwgNjAwMDApOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiAr CQljZG5zLT5jdXJyZW50X2RyX21vZGUgPSBVU0JfRFJfTU9ERV9VTktOT1dOOwo+ICsJCWRldl9l cnIoY2Rucy0+ZGV2LCAiVW5zdXBwb3J0ZWQgbW9kZSBvZiBvcGVyYXRpb24gJWRcbiIsIG1vZGUp Owo+ICsJCXJldHVybjsKPiArCX0KPiArfQo+ICsKPiAraW50IGNkbnMzX2dldF9pZChzdHJ1Y3Qg Y2RuczMgKmNkbnMpCj4gK3sKPiArCWludCBpZDsKPiArCj4gKwlpZCA9IHJlYWRsKCZjZG5zLT5v dGdfcmVncy0+c3RzKSAmIE9UR1NUU19JRF9WQUxVRTsKPiArCWRldl9kYmcoY2Rucy0+ZGV2LCAi T1RHIElEOiAlZCIsIGlkKTsKPiArCXJldHVybiAgMSA7IC8vaWQ7CnJldHVybiBmaXhlZCB2YWx1 ZSA/Cj4gK30KPiArCj4gK2ludCBjZG5zM19pc19ob3N0KHN0cnVjdCBjZG5zMyAqY2RucykKPiAr ewo+ICsJaWYgKGNkbnMtPmN1cnJlbnRfZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9IT1NUKQo+ICsJ CXJldHVybiAxOwo+ICsJZWxzZSBpZiAoIWNkbnMzX2dldF9pZChjZG5zKSkKPiArCQlyZXR1cm4g MTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArCgo+ICsKPiArLyoqCj4gKyAqIGNkbnMz X2luaXRfb3RnX21vZGUgLSBpbml0aWFsaXplIGRyZCBjb250cm9sbGVyCj4gKyAqIEBjZG5zOiBQ b2ludGVyIHRvIGNvbnRyb2xsZXIgY29udGV4dCBzdHJ1Y3R1cmUKPiArICoKPiArICogUmV0dXJu cyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vCnZvaWQgZnVuY3Rpb24KPiAr ICovCj4gK3N0YXRpYyB2b2lkIGNkbnMzX2luaXRfb3RnX21vZGUoc3RydWN0IGNkbnMzICpjZG5z KQo+ICt7Cj4gKwljZG5zM19vdGdfZGlzYWJsZV9pcnEoY2Rucyk7Cj4gKwkvKiBjbGVhciBhbGwg aW50ZXJydXB0cyAqLwo+ICsJd3JpdGVsKH4wLCAmY2Rucy0+b3RnX3JlZ3MtPml2ZWN0KTsKPiAr Cj4gKwljZG5zM19zZXRfbW9kZShjZG5zLCBVU0JfRFJfTU9ERV9PVEcpOwo+ICsKPiArCWlmIChj ZG5zM19pc19ob3N0KGNkbnMpKQo+ICsJCWNkbnMzX2RyZF9zd2l0Y2hfaG9zdChjZG5zLCAxKTsK PiArCWVsc2UKPiArCQljZG5zM19kcmRfc3dpdGNoX2dhZGdldChjZG5zLCAxKTsKPiArCj4gKwlj ZG5zM19vdGdfZW5hYmxlX2lycShjZG5zKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGNkbnMzX2Ry ZF91cGRhdGVfbW9kZSAtIGluaXRpYWxpemUgbW9kZSBvZiBvcGVyYXRpb24KPiArICogQGNkbnM6 IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0IHN0cnVjdHVyZQo+ICsgKgo+ICsgKiBSZXR1 cm5zIDAgb24gc3VjY2VzcyBvdGhlcndpc2UgbmVnYXRpdmUgZXJybm8KPiArICovCj4gK2ludCBj ZG5zM19kcmRfdXBkYXRlX21vZGUoc3RydWN0IGNkbnMzICpjZG5zKQo+ICt7Cj4gKwlpbnQgcmV0 ID0gMDsKPiArCj4gKwlpZiAoY2Rucy0+ZGVzaXJlZF9kcl9tb2RlID09IGNkbnMtPmN1cnJlbnRf ZHJfbW9kZSkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWNkbnMzX2RyZF9zd2l0Y2hfZ2FkZ2V0 KGNkbnMsIDApOwo+ICsJY2RuczNfZHJkX3N3aXRjaF9ob3N0KGNkbnMsIDApOwo+ICsKPiArCXN3 aXRjaCAoY2Rucy0+ZGVzaXJlZF9kcl9tb2RlKSB7Cj4gKwljYXNlIFVTQl9EUl9NT0RFX1BFUklQ SEVSQUw6Cj4gKwkJY2RuczNfc2V0X21vZGUoY2RucywgVVNCX0RSX01PREVfUEVSSVBIRVJBTCk7 Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFVTQl9EUl9NT0RFX0hPU1Q6Cj4gKwkJY2RuczNfc2V0X21v ZGUoY2RucywgVVNCX0RSX01PREVfSE9TVCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFVTQl9EUl9N T0RFX09URzoKPiArCQljZG5zM19pbml0X290Z19tb2RlKGNkbnMpOwo+ICsJCWJyZWFrOwo+ICsJ ZGVmYXVsdDoKPiArCQlkZXZfZXJyKGNkbnMtPmRldiwgIlVuc3VwcG9ydGVkIG1vZGUgb2Ygb3Bl cmF0aW9uICVkXG4iLAo+ICsJCQljZG5zLT5kcl9tb2RlKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCX0KPiArCj4gKwlyZXR1cm4gcmV0OwpubyBuZWVkIGRlZmluZSBsb2NhbCB2YXJpYWJsZSBA cmV0Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBjZG5zM19kcmRfaXJxIC0gaW50ZXJydXB0IGhhbmRs ZXIgZm9yIE9URyBldmVudHMKPiArICoKPiArICogQGlycTogaXJxIG51bWJlciBmb3IgY2RuczMg Y29yZSBkZXZpY2UKPiArICogQGRhdGE6IHN0cnVjdHVyZSBvZiBjZG5zMwo+ICsgKgo+ICsgKiBS ZXR1cm5zIElSUV9IQU5ETEVEIG9yIElSUV9OT05FCj4gKyAqLwo+ICtzdGF0aWMgaXJxcmV0dXJu X3QgY2RuczNfZHJkX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlpcnFyZXR1cm5f dCByZXQgPSBJUlFfTk9ORTsKPiArCXN0cnVjdCBjZG5zMyAqY2RucyA9IGRhdGE7Cj4gKwl1MzIg cmVnOwo+ICsKPiArCWlmIChjZG5zLT5kcl9tb2RlICE9IFVTQl9EUl9NT0RFX09URykKPiArCQly ZXR1cm4gcmV0Owo+ICsKPiArCXJlZyA9IHJlYWRsKCZjZG5zLT5vdGdfcmVncy0+aXZlY3QpOwo+ ICsKPiArCWlmICghcmVnKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKHJlZyAmIE9UR0lF Tl9JRF9DSEFOR0VfSU5UKSB7Cj4gKwkJZGV2X2RiZyhjZG5zLT5kZXYsICJPVEcgSVJROiBuZXcg SUQ6ICVkXG4iLAo+ICsJCQljZG5zM19nZXRfaWQoY2RucykpOwo+ICsKPiArCQlxdWV1ZV93b3Jr KHN5c3RlbV9mcmVlemFibGVfd3EsICZjZG5zLT5yb2xlX3N3aXRjaF93cSk7Cj4gKwpkbyB5b3Ug bmVlZCB0byBjbGVhciBpbnRlcnJ1cHRzIHN0YXR1cyBoZXJlPwo+ICsJCXJldCA9IElSUV9IQU5E TEVEOwo+ICsJfQo+ICsKPiArCXdyaXRlbCh+MCwgJmNkbnMtPm90Z19yZWdzLT5pdmVjdCk7Cj4g KwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgY2RuczNfZHJkX2luaXQoc3RydWN0IGNkbnMz ICpjZG5zKQo+ICt7Cj4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cj4gKwlpbnQgcmV0ID0gMDsKPiAr CXUzMiBzdGF0ZTsKPiArCj4gKwlyZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGNkbnMtPmRl diwgJmNkbnMtPm90Z19yZXMpOwo+ICsJaWYgKElTX0VSUihyZWdzKSkKPiArCQlyZXR1cm4gUFRS X0VSUihyZWdzKTsKPiArCj4gKwkvKiBEZXRlY3Rpb24gb2YgRFJEIHZlcnNpb24uIENvbnRyb2xs ZXIgaGFzIGJlZW4gcmVsZWFzZWQKPiArCSAqIGluIHR3byB2ZXJzaW9ucy4gQm90aCBhcmUgc2lt aWxhciwgYnV0IHRoZXkgaGF2ZSBzYW1lIGNoYW5nZXMKPiArCSAqIGluIHJlZ2lzdGVyIG1hcHMu Cj4gKwkgKiBUaGUgZmlyc3QgcmVnaXN0ZXIgaW4gb2xkIHZlcnNpb24gaXMgY29tbWFuZCByZWdp c3RlciBhbmQgaXQncyByZWFkCj4gKwkgKiBvbmx5LCBzbyBkcml2ZXIgc2hvdWxkIHJlYWQgMCBm cm9tIGl0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaW4gdjEKPiArCSAqIHRoZSBmaXJzdCByZWdpc3Rl ciBjb250YWlucyBkZXZpY2UgSUQgbnVtYmVyIHdoaWNoIGlzIG5vdCBzZXQgdG8gMC4KPiArCSAq IERyaXZlciB1c2VzIHRoaXMgZmFjdCB0byBkZXRlY3QgdGhlIHByb3BlciB2ZXJzaW9uIG9mCj4g KwkgKiBjb250cm9sbGVyLgo+ICsJICovCj4gKwljZG5zLT5vdGdfdjBfcmVncyA9IHJlZ3M7Cj4g KwlpZiAoIXJlYWRsKCZjZG5zLT5vdGdfdjBfcmVncy0+Y21kKSkgewo+ICsJCWNkbnMtPnZlcnNp b24gID0gQ0ROUzNfQ09OVFJPTExFUl9WMDsKPiArCQljZG5zLT5vdGdfdjFfcmVncyA9IE5VTEw7 Cj4gKwkJY2Rucy0+b3RnX3JlZ3MgPSByZWdzOwo+ICsJCWRldl9pbmZvKGNkbnMtPmRldiwgIkRS RCB2ZXJzaW9uIHYwICglMDh4KVxuIiwKPiArCQkJIHJlYWRsKCZjZG5zLT5vdGdfdjBfcmVncy0+ dmVyc2lvbikpOwo+ICsJfSBlbHNlIHsKPiArCQljZG5zLT5vdGdfdjBfcmVncyA9IE5VTEw7Cj4g KwkJY2Rucy0+b3RnX3YxX3JlZ3MgPSByZWdzOwo+ICsJCWNkbnMtPm90Z19yZWdzID0gKHZvaWQg KikmY2Rucy0+b3RnX3YxX3JlZ3MtPmNtZDsKPiArCQljZG5zLT52ZXJzaW9uICA9IENETlMzX0NP TlRST0xMRVJfVjE7Cj4gKwkJZGV2X2luZm8oY2Rucy0+ZGV2LCAiRFJEIHZlcnNpb24gdjEgKElE OiAlMDh4LCByZXY6ICUwOHgpXG4iLAo+ICsJCQkgcmVhZGwoJmNkbnMtPm90Z192MV9yZWdzLT5k aWQpLAo+ICsJCQkgcmVhZGwoJmNkbnMtPm90Z192MV9yZWdzLT5yaWQpKTsKPiArCX0KPiArCj4g KwlzdGF0ZSA9IE9UR1NUU19TVFJBUChyZWFkbCgmY2Rucy0+b3RnX3JlZ3MtPnN0cykpOwo+ICsK PiArCS8qIFVwZGF0ZSBkcl9tb2RlIGFjY29yZGluZyB0byBTVFJBUCBjb25maWd1cmF0aW9uLiAq Lwo+ICsJY2Rucy0+ZHJfbW9kZSA9IFVTQl9EUl9NT0RFX09URzsKPiArCWlmIChzdGF0ZSA9PSBP VEdTVFNfU1RSQVBfSE9TVCkgewo+ICsJCWRldl9pbmZvKGNkbnMtPmRldiwgIkNvbnRyb2xsZXIg c3RyYXBwZWQgdG8gSE9TVFxuIik7Cj4gKwkJY2Rucy0+ZHJfbW9kZSA9IFVTQl9EUl9NT0RFX0hP U1Q7Cj4gKwl9IGVsc2UgaWYgKHN0YXRlID09IE9UR1NUU19TVFJBUF9HQURHRVQpIHsKPiArCQlk ZXZfaW5mbyhjZG5zLT5kZXYsICJDb250cm9sbGVyIHN0cmFwcGVkIHRvIFBFUklQSEVSQUxcbiIp Owo+ICsJCWNkbnMtPmRyX21vZGUgPSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOwo+ICsJfQo+ICsK PiArCWNkbnMtPmRlc2lyZWRfZHJfbW9kZSA9IGNkbnMtPmRyX21vZGU7Cj4gKwljZG5zLT5jdXJy ZW50X2RyX21vZGUgPSBVU0JfRFJfTU9ERV9VTktOT1dOOwo+ICsKPiArCXJldCA9IGRldm1fcmVx dWVzdF90aHJlYWRlZF9pcnEoY2Rucy0+ZGV2LCBjZG5zLT5pcnEsIGNkbnMzX2RyZF9pcnEsCj4g KwkJCQkJTlVMTCwgSVJRRl9TSEFSRUQsCj4gKwkJCQkJZGV2X25hbWUoY2Rucy0+ZGV2KSwgY2Ru cyk7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXN0YXRlID0gcmVh ZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpOwo+ICsJaWYgKE9UR1NUU19PVEdfTlJEWShzdGF0ZSkg IT0gMCkgewo+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAiQ2FkZW5jZSBVU0IzIE9URyBkZXZpY2Ug bm90IHJlYWR5XG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlyZXQgPSBj ZG5zM19kcmRfdXBkYXRlX21vZGUoY2Rucyk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKcmV0dXJuIGNk bnMzX2RyZF91cGRhdGVfbW9kZSgpOwo+ICt9Cj4gKwo+ICtpbnQgY2RuczNfZHJkX2V4aXQoc3Ry dWN0IGNkbnMzICpjZG5zKQo+ICt7Cj4gKwlyZXR1cm4gY2RuczNfZHJkX3N3aXRjaF9ob3N0KGNk bnMsIDApOwo+ICt9CgoKPC4uLj4KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMzL2Vw MC5jIGIvZHJpdmVycy91c2IvY2RuczMvZXAwLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uODljZjFjZGUxNTU1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvdXNiL2NkbnMzL2VwMC5jCj4gQEAgLTAsMCArMSw4OTYgQEAKPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogQ2FkZW5jZSBVU0JTUyBEUkQgRHJp dmVyIC0gZ2FkZ2V0IHNpZGUuCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOCBDYWRlbmNl IERlc2lnbiBTeXN0ZW1zLgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBOWFAKPiArICoK PiArICogQXV0aG9yczogUGF3ZWwgSmV6IDxwamV6QGNhZGVuY2UuY29tPiwKPiArICogICAgICAg ICAgUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4KPiArICoJICAgIFBldGVyIENo ZW4gPHBldGVyLmNoZW5AbnhwLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdXNi L2NvbXBvc2l0ZS5oPgo+ICsKPiArI2luY2x1ZGUgImdhZGdldC5oIgo+ICsjaW5jbHVkZSAidHJh Y2UuaCIKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgY2RuczNf Z2FkZ2V0X2VwMF9kZXNjID0gewo+ICsJLmJMZW5ndGggPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwK PiArCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCj4gKwkuYm1BdHRyaWJ1dGVz ID0JVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCwKPiArfTsKPiArCjwuLi4+Cj4gKwo+ICsKPiAr I2VuZGlmIC8qIF9fTElOVVhfQ0ROUzNfR0FER0VUX0VYUE9SVCAqLwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL2NkbnMzL2dhZGdldC5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjBkOTVlYjAwYmUzNwo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQuYwo+IEBAIC0w LDAgKzEsMjEwMiBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsv Kgo+ICsgKiBDYWRlbmNlIFVTQlNTIERSRCBEcml2ZXIgLSBnYWRnZXQgc2lkZS4KPiArICoKPiAr ICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UgRGVzaWduIFN5c3RlbXMuCj4gKyAqIENvcHly aWdodCAoQykgMjAxNy0yMDE4IE5YUAo+ICsgKgo+ICsgKiBBdXRob3JzOiBQYXdlbCBKZXogPHBq ZXpAY2FkZW5jZS5jb20+LAo+ICsgKiAgICAgICAgICBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNh ZGVuY2UuY29tPgo+ICsgKgkgICAgUGV0ZXIgQ2hlbiA8cGV0ZXIuY2hlbkBueHAuY29tPgo+ICsg Ki8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvdXNiL2dhZGdldC5oPgo+ICsKPC4uLj4KCj4gKy8qKgo+ICsgKiBjZG5zM19uZXh0X3JlcXVl c3QgLSByZXR1cm5zIG5leHQgcmVxdWVzdCBmcm9tIGxpc3QKPiArICogQGxpc3Q6IGxpc3QgY29u dGFpbmluZyByZXF1ZXN0cwo+ICsgKgo+ICsgKiBSZXR1cm5zIHJlcXVlc3Qgb3IgTlVMTCBpZiBu byByZXF1ZXN0cyBpbiBsaXN0Cj4gKyAqLwo+ICtzdHJ1Y3QgdXNiX3JlcXVlc3QgKmNkbnMzX25l eHRfcmVxdWVzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQo+ICt7Cj4gKwlpZiAobGlzdF9lbXB0 eShsaXN0KSkKPiArCQlyZXR1cm4gTlVMTDsKTm8gbmVlZCBjaGVjayBpdCwgaWYgbGlzdCBpcyBl bXB0eSwgbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCkgd2lsbApyZXR1cm4gTlVMTAo+ICsJcmV0 dXJuIGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChsaXN0LCBzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxp c3QpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogY2RuczNfbmV4dF9wcml2X3JlcXVlc3QgLSByZXR1 cm5zIG5leHQgcmVxdWVzdCBmcm9tIGxpc3QKPiArICogQGxpc3Q6IGxpc3QgY29udGFpbmluZyBy ZXF1ZXN0cwo+ICsgKgo+ICsgKiBSZXR1cm5zIHJlcXVlc3Qgb3IgTlVMTCBpZiBubyByZXF1ZXN0 cyBpbiBsaXN0Cj4gKyAqLwo+ICtzdHJ1Y3QgY2RuczNfcmVxdWVzdCAqY2RuczNfbmV4dF9wcml2 X3JlcXVlc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKPiArewo+ICsJaWYgKGxpc3RfZW1wdHko bGlzdCkpCj4gKwkJcmV0dXJuIE5VTEw7CmRpdHRvCj4gKwlyZXR1cm4gbGlzdF9maXJzdF9lbnRy eV9vcl9udWxsKGxpc3QsIHN0cnVjdCBjZG5zM19yZXF1ZXN0LCBsaXN0KTsKPiArfQo+ICsKCjwu Li4+Cg==